emacs-diffs
[Top][All Lists]
Advanced

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

scratch/correct-warning-pos 2128cd8c08 1/2: Merge branch 'master' into s


From: Alan Mackenzie
Subject: scratch/correct-warning-pos 2128cd8c08 1/2: Merge branch 'master' into scratch/correct-warning-pos
Date: Fri, 14 Jan 2022 14:08:17 -0500 (EST)

branch: scratch/correct-warning-pos
commit 2128cd8c08da84ab40608ac5db0fecfce733cfad
Merge: 4e77177b06 18dac47255
Author: Alan Mackenzie <acm@muc.de>
Commit: Alan Mackenzie <acm@muc.de>

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

diff --git a/.gitattributes b/.gitattributes
index a99cf12af5..43b73635a5 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,6 +1,6 @@
 # Attributes of Emacs files in the Git repository.
 
-# Copyright 2015-2021 Free Software Foundation, Inc.
+# Copyright 2015-2022 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/.gitignore b/.gitignore
index f1abb2ab68..35ff949e93 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,6 @@
 # Files that Git should ignore in the Emacs source directory.
 
-# Copyright 2009-2021 Free Software Foundation, Inc.
+# Copyright 2009-2022 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
@@ -159,6 +159,7 @@ test/manual/etags/CTAGS
 test/manual/indent/*.new
 test/lisp/gnus/mml-sec-resources/random_seed
 test/lisp/play/fortune-resources/fortunes.dat
+test/**/*.xml
 
 # ctags, etags.
 TAGS
@@ -316,3 +317,9 @@ lib-src/seccomp-filter.bpf
 lib-src/seccomp-filter.pfc
 lib-src/seccomp-filter-exec.bpf
 lib-src/seccomp-filter-exec.pfc
+
+# gsettings schema
+/etc/*.gschema.valid
+
+# Ignore directory made by admin/make-manuals.
+manual/
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 402c17ddb8..3d027171d4 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,4 +1,4 @@
-# Copyright (C) 2021 Free Software Foundation, Inc.
+# Copyright (C) 2021-2022 Free Software Foundation, Inc.
 #
 #  This file is part of GNU Emacs.
 #
diff --git a/CONTRIBUTE b/CONTRIBUTE
index 5740004637..614afa27db 100644
--- a/CONTRIBUTE
+++ b/CONTRIBUTE
@@ -185,20 +185,26 @@ ChangeLog file, where they can be corrected.  It saves 
time to get
 them right the first time, so here are guidelines for formatting them:
 
 - Start with a single unindented summary line explaining the change;
-  do not end this line with a period.  If that line starts with a
-  semicolon and a space "; ", the commit message will be ignored when
-  generating the ChangeLog file.  Use this for minor commits that do
-  not need separate ChangeLog entries, such as changes in etc/NEWS.
+  do not end this line with a period.  If possible, try to keep the
+  summary line to 50 characters or fewer; this is for compatibility
+  with certain Git commands that print that line in width-constrained
+  contexts.
 
-- After the summary line, there should be an empty line, then
-  unindented ChangeLog entries.
+  If the summary line starts with a semicolon and a space "; ", the
+  commit message will be ignored when generating the ChangeLog file.
+  Use this for minor commits that do not need separate ChangeLog
+  entries, such as changes in etc/NEWS.
+
+- After the summary line, there should be an empty line.
+
+- Unindented ChangeLog entries normally come next.  However, if the
+  commit couldn't be properly summarized in the brief summary line,
+  you can put a paragraph (after the empty line and before the
+  individual ChangeLog entries) that further describes the commit.
 
 - Limit lines in commit messages to 78 characters, unless they consist
   of a single word of at most 140 characters; this is enforced by a
-  commit hook.  It's nicer to limit the summary line to 50 characters;
-  this isn't enforced.  If the change can't be summarized so briefly,
-  add a paragraph after the empty line and before the individual file
-  descriptions.
+  commit hook.
 
 - If only a single file is changed, the summary line can be the normal
   file first line (starting with the asterisk).  Then there is no
@@ -360,6 +366,22 @@ reasons.  These should be marked by including something 
like "Do not
 merge to master" or anything that matches gitmerge-skip-regexp (see
 admin/gitmerge.el) in the commit message.
 
+** Some packages in Emacs are maintained externally
+
+Sometimes a package that ships as part of GNU Emacs is maintained as a
+separate project, with its own upstream repository, its own maintainer
+group, its own development conventions, etc.  The upstream project's
+code is periodically merged into Emacs (exactly when and how such
+merges happen depends on the package).
+
+So when you are making a contribution -- such as fixing a bug or
+proposing an enhancement -- to one of these externally maintained
+packages, you sometimes need to deal with that package at its upstream
+source.
+
+In the section "Externally maintained packages" in "admin/MAINTAINERS"
+we maintain a list of such packages.
+
 ** GNU ELPA
 
 This repository does not contain the Emacs Lisp package archive
diff --git a/ChangeLog.1 b/ChangeLog.1
index 82e0ad5c2b..cd31aacafb 100644
--- a/ChangeLog.1
+++ b/ChangeLog.1
@@ -2326,7 +2326,7 @@
 2013-07-03  Christoph Egger  <christoph@debian.org>  (tiny change)
 
        * configure.ac (emacs_broken_SIGIO): Set on gnu-kfreebsd to avoid hang.
-       http://bugs.debian.org/712974
+       https://bugs.debian.org/712974
 
 2013-07-02  Paul Eggert  <eggert@cs.ucla.edu>
 
@@ -14700,7 +14700,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1993-1999, 2001-2021 Free Software Foundation, Inc.
+  Copyright (C) 1993-1999, 2001-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/ChangeLog.2 b/ChangeLog.2
index 3e227675e0..cf19abaa13 100644
--- a/ChangeLog.2
+++ b/ChangeLog.2
@@ -35787,7 +35787,7 @@ See ChangeLog.1 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2015-2021 Free Software Foundation, Inc.
+  Copyright (C) 2015-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/ChangeLog.3 b/ChangeLog.3
index ad659694a9..18b7b7c11a 100644
--- a/ChangeLog.3
+++ b/ChangeLog.3
@@ -1,3 +1,89237 @@
+2022-01-05  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Fix vc-git with old Git over Tramp and cygwin-mount.el
+
+       * lisp/vc/vc-git.el (vc-git-use-literal-pathspecs): New variable.
+       (vc-git-command, vc-git--call): Use it to determine whether to set
+       GIT_LITERAL_PATHSPECS=1 (bug#51497).
+       (vc-git--literal-pathspec, vc-git--literal-pathspecs): Remove.
+       Update all callers.  This reverts the previous solution for bug#39452.
+
+       * lisp/progmodes/project.el (project--vc-list-files):
+       Use the new variable.
+
+2022-01-05  Philipp Stephani  <phst@google.com>
+
+       * lisp/emacs-lisp/checkdoc.el (bytecomp): Add missing require
+
+2022-01-02  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid inflooping when 'tab-bar-format' includes embedded newlines
+
+       * src/xdisp.c (tab_bar_height, redisplay_tab_bar): Support
+       'tab-bar-format' with embedded newlines.  (Bug#52947)
+
+2022-01-02  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-line.el: Revert part of the fix in a6adfe21e4 (bug#52881)
+
+       (tab-line--get-tab-property, tab-line-auto-hscroll): Use 
get-pos-property
+       instead of get-text-property that fails after 
previous-single-property-change.
+
+2022-01-02  Eli Zaretskii  <eliz@gnu.org>
+
+       Clarify %g and %G time format specs
+
+       * src/timefns.c (Fformat_time_string):
+       * doc/lispref/os.texi (Time Parsing): Clarify %g/%G.  (Bug#52934)
+
+2022-01-02  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       (define-char-code-property): Workaround for bug#52945
+
+       * lisp/international/mule-cmds.el (define-char-code-property): Ignore
+       requests to re-setup lazy loading after the char-table is already 
loaded.
+
+2022-01-01  Eli Zaretskii  <eliz@gnu.org>
+
+       Update more copyright years
+
+       * etc/tutorials/TUTORIAL.he (זכויות שימוש):
+       * config.bat: Update Copyright years.
+
+2022-01-01  Michael Albinus  <michael.albinus@gmx.de>
+
+       * lisp/net/tramp-sh.el: Adapt copyright year
+
+2022-01-01  Zhehao Lin  <zh_lin1@outlook.com>  (tiny change)
+
+       * src/xfaces.c (face_for_font): Make 'hash' be uintptr_t.
+
+2021-12-31  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve doc strings of fringe indicator variables
+
+       * src/buffer.c (syms_of_buffer): Fix doc strings of
+       'indicate-empty-lines' and 'indicate-buffer-boundaries'.
+
+2021-12-31  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-line.el (tab-line--get-tab-property): New function 
(bug#52881).
+
+       (tab-line-auto-hscroll): Use ‘tab-line--get-tab-property’ instead of
+       ‘get-pos-property 1’, and ‘get-text-property’ instead of
+       ‘get-pos-property’.
+       (tab-line-select-tab, tab-line-close-tab): Use 
tab-line--get-tab-property.
+
+2021-12-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid assertion violations with variable-weight fonts
+
+       * src/font.c (font_score, font_delete_unmatched): Don't assume
+       weight, slant, and width properties of the font must be fixnums:
+       some variable-weight fonts violate that assumption.  Reported
+       by Sean Whitton <spwhitton@spwhitton.name>.  Do not merge to
+       master.  (Bug#52888)
+
+2021-12-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Minor improvement in user documentation of completion style
+
+       * doc/emacs/mini.texi (Completion Styles): Add reference to
+       "Completion Variables" in the ELisp manual.  (Bug#52901)
+
+2021-12-30  Campbell Barton  <ideasman42@gmail.com>  (tiny change)
+
+       Fix bug where bookmark-jump used (point), not (point-at-bol)
+
+       This matches changes from e852822f3db469c985bf022651f184d6ff2c518a,
+       regression in 7fe88446c30279285e3171091189b3d1af697c05.
+       * lisp/bookmark.el (bookmark--jump-via): Look at overlays at BOL.
+       Otherwise the fringe bookmark indication is not deleted with the
+       bookmark.
+
+2021-12-29  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: c-update-brace-stack: After struct foo *, do not expect a 
brace.
+
+       This fixes bug #52796.
+
+       * lisp/progmodes/cc-engine.el (c-update-brace-stack): Handle a "*" like 
a
+       semicolon, cancelling the expectation of a brace.
+
+       * lisp/progmodes/cc-langs.el (c-brace-stack-thing-key): Add a "*" into 
the
+       sets of significant characters.
+
+2021-12-29  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of 'M-X' and related features
+
+       * doc/emacs/m-x.texi (M-x): Index 'M-X'.
+       * doc/lispref/commands.texi (Interactive Call, Command Modes):
+       Mention 'M-X' and 'execute-extended-command-for-buffer'.
+
+       * etc/NEWS: Clarify that the '(declare (completion ...' and
+       '(declare (modes ...' forms have no effect by default.  Likewise
+       for '(interactive "..." MODE)' specs.  (Bug#52839)
+
+2021-12-28  Sean Whitton  <spwhitton@spwhitton.name>
+
+       Improve rectangle-mark-mode documentation regarding mark activation
+
+       * doc/emacs/killing.texi: Describe how rectangle-mark-mode works when
+       Transient Mark mode is off.  Qualify discussion of
+       rectangle-exchange-point-and-mark to say that it cycles the four
+       corners only when the region is active.
+       * lisp/rect.el (rectangle-mark-mode): State that rectangle-mark-mode
+       does not activate the mark when Transient Mark mode is off.  Reword
+       sentence about how long the mode lasts to account for when Transient
+       Mark mode is off.  (Bug#42663)
+
+2021-12-27  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix typos in in 'reset-language-environment'
+
+       * lisp/international/mule-cmds.el (reset-language-environment):
+       Fix a typo in 'windows-nt'.  (Bug#52816)
+
+2021-12-27  Óscar Fuentes  <ofv@wanadoo.es>
+
+       eshell-complete-parse-arguments: don't use string-match on a list
+
+       When there is more than one candidate for completion, `val' is a list.
+
+       Fixes bug#52794.
+
+       * lisp/eshell/em-cmpl.el (eshell-complete-parse-arguments): protect
+       use of string-match with stringp.
+
+2021-12-26  Kyle Meyer  <kyle@kyleam.com>
+
+       Update to Org 9.5.2-3-geb9f34
+
+2021-12-26  Stefan Kangas  <stefan@marxist.se>
+
+       Improve documentation of read-multiple-choice
+
+       * doc/lispref/commands.texi (Reading One Event): Document optional
+       third argument help-string of read-multiple-choice.
+
+2021-12-25  Eli Zaretskii  <eliz@gnu.org>
+
+       Explain why we remove stuff from 'user-full-name'
+
+       * src/editfns.c (Fuser_full_name): Document why we chop everything
+       starting from the first comma.  (Bug#52785)
+
+2021-12-24  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Fix the bug with duplicate entries in xref output
+
+       * lisp/progmodes/etags.el (xref-backend-definitions): Make sure to
+       save the changed intermediate value of the list (bug#52734).
+
+2021-12-24  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Improve Xref documentation
+
+       * lisp/progmodes/xref.el (xref-item): Add docstring for 'summary'.
+       Fix typo in the header Commentary.
+
+2021-12-23  Andreas Schwab  <schwab@linux-m68k.org>
+
+       * lisp/net/shr.el (shr-expand-url): Also strip trailing
+       whitespace.
+
+2021-12-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert field-related thingatpt changes
+
+       This reverts 7db376e560448e61485ba054def8c82b21f33d6a, which led to
+       severe performance regressions when being run in large buffers with no
+       fields (bug#52593)
+
+2021-12-21  Juri Linkov  <juri@linkov.net>
+
+       * lisp/window.el (quit-restore-window): Select previously selected 
window.
+
+       After deleting the dedicated window, such as a window with *Completions*
+       buffer, select the previously selected window, like most of other 'cond'
+       branches do in this function (bug#52491).
+
+2021-12-21  Robert Pluim  <rpluim@gmail.com>
+
+       Revert "Remove Motif support"
+
+       This reverts commit db237850abc240e2c3e765e9cc7e15ee5681dcaf.
+
+2021-12-19  Martin Rudalics  <rudalics@gmx.at>
+
+       Clarify description of two mouse dragging parameters (Bug#52537)
+
+       * doc/lispref/frames.texi (Child Frames): Clarify description of
+       'top-visible' and 'bottom-visible' parameters (Bug#52537).
+
+2021-12-18  Kyle Meyer  <kyle@kyleam.com>
+
+       Update to Org 9.5.1-31-ga18849
+
+2021-12-15  Martin Rudalics  <rudalics@gmx.at>
+
+       Fix control buffer window height in 'ediff-setup-control-buffer' 
(Bug#49277)
+
+       * lisp/vc/ediff-util.el (ediff-setup-control-buffer): Emulate
+       original 'shrink-window-if-larger-than-buffer' call by calling
+       'fit-window-to-buffer' with an appropriate maximum height
+       argument (Bug#49277).
+
+2021-12-15  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+
+       Fix crash when dumping charset_table with portable dumper (Bug#52461)
+
+       * src/charset.h:
+       * src/charset.c (charset_table_used): Now extern.
+       * src/pdumper.c (dump_charset): Don't dump code_space_mask for unused
+       slots of charset_table.
+
+2021-12-14  Philipp Stephani  <phst@google.com>
+
+       Remove maintainer comment from Emacs 28 module snippet.
+
+       This is the same as 44c13eefe8d30841000a96d82f467fb8d222e365 on
+       master.  We should also remove this comment on the release branch,
+       otherwise it ends up in the emacs-module.h shipped to users.
+
+       * src/module-env-28.h: Remove maintainer comment.
+
+2021-12-14  Stefan Kangas  <stefan@marxist.se>
+
+       Set calc-make-windows-dedicated to nil by default
+
+       * lisp/calc/calc.el (calc-make-windows-dedicated):
+       Default to nil.  (Bug#52016)
+
+2021-12-14  Stefan Kangas  <stefan@marxist.se>
+
+       * make-dist: Don't run "make --question info".  (Bug#52322)
+
+2021-12-13  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix regression in help-mode prompt
+
+       * lisp/help-macro.el (make-help-screen): Restore SPC and DEL in
+       prompt.  Reported by Colin Baxter <m43cap@yandex.com>.
+
+2021-12-13  Kévin Le Gouguec  <kevin.legouguec@gmail.com>
+
+       Make `M-x run-python' select the window again
+
+       Interactively, we want M-x run-python to focus the interpreter buffer.
+       The previous code failed in two ways:
+
+       - the call to 'display-buffer' was not reached if an interpreter
+         was already running,
+
+       - set-buffer is ineffectual if the interpreter's window is not
+         selected: once Emacs returns to the command loop, the current buffer
+         will revert back to what the selected window contains.
+
+       * lisp/progmodes/python.el (python-shell-make-comint): Handle the SHOW
+       argument regardless of whether an interpreter buffer exists, and use
+       pop-to-buffer to select the window.
+       (run-python): Delegate buffer management to
+       'python-shell-make-comint'.
+
+       * test/lisp/progmodes/python-tests.el
+       (python-tests--run-python-selects-window): Rename from
+       'python-tests--bug31398', and adjust assertions (bug#52380).
+
+2021-12-12  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el (tab-bar-switch-to-last-tab): Add 'abs' for 
precautions.
+
+       https://lists.gnu.org/archive/html/emacs-devel/2021-11/msg01149.html
+
+2021-12-12  Eli Zaretskii  <eliz@gnu.org>
+
+       * make-dist (manifest): Filter out msdos/autogen/* files.
+
+2021-12-12  Richard Stallman  <rms@gnu.org>
+
+       Rewrite the "Quitting Windows" section of Emacs Lisp Reference
+
+       * doc/lispref/windows.texi (Quitting Windows): Rewrite for
+       clarity.  (Bug#52328)
+
+2021-12-12  Po Lu  <luangruo@yahoo.com>
+
+       Fix eshell for systems that do not have subprocesses
+
+       * lisp/eshell/esh-cmd.el (eshell-eval-command): Use
+       `eshell-processp' instead of `processp'.
+
+2021-12-11  Philipp Stephani  <phst@google.com>
+
+       Avoid undefined behavior in 'send-process-region' (Bug#52369).
+
+       * src/process.c (send_process): Signal an error if the file descriptor
+       has already been closed.
+
+2021-12-11  Kyle Meyer  <kyle@kyleam.com>
+
+       Update to Org 9.5.1-25-g9ca3bc
+
+2021-12-11  Po Lu  <luangruo@yahoo.com>
+
+       Fix the DJGPP port
+
+       * config.bat:
+       * msdos/sed1v2.inp:
+       * msdos/sed2v2.inp:
+       * msdos/sed3v2.inp:
+       * msdos/sedlibmk.inp: Update for Emacs 28.
+       * msdos/langinfo.h: New file.
+
+       * lisp/loadup.el: Use correct path to temacs when dumping on
+       MS-DOS.
+       * src/callproc.c (environ) [MSDOS]: New declaration.
+       (child_setup, emacs_spawn): Update MS-DOS parts for Emacs 28.
+       * src/fileio.c (Fcopy_file): Don't use copy_file_range on
+       MS-DOS.
+       * src/msdos.c (initialize_msdos_display): Add
+       `defined_color_hook'.
+       (openat, fchmodat, futimens, utimensat): New functions.
+
+       * src/msdos.h (FRAME_X_DISPLAY): New macro.
+       * src/process.c: Make some more things conditional on
+       subprocess support.
+       (PIPECONN_P, PIPECONN1_P) [!subprocesses]: New placeholder
+       macros.
+       (Fnum_processors): Return 1 on MSDOS.
+       (open_channel_for_module): Avoid subprocess specific code
+       on MSDOS.
+
+2021-12-10  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Make `M-x run-python' select the window again"
+
+       This reverts commit aa2872a12770282ede3548ed3fcab00c5a5b9f18.
+
+       This led to a test failure.
+
+2021-12-10  Kévin Le Gouguec  <kevin.legouguec@gmail.com>
+
+       Make `M-x run-python' select the window again
+
+       * lisp/progmodes/python.el (python-shell-make-comint): Make `M-x
+       run-python' select the window again like in 27.2 (bug#52380).
+
+2021-12-10  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't bug out on certain empty elements with ids
+
+       * lisp/net/shr.el (shr-descend): Fix empty-element #id targetting
+       (bug#52391).
+
+2021-12-09  Paul Eggert  <eggert@cs.ucla.edu>
+
+       emacsclient takes more care about XDG_RUNTIME_DIR
+
+       * lib-src/emacsclient.c (set_local_socket): Revert to the Emacs 27
+       behavior of not trying TMPDIR if XDG_RUNTIME_DIR is set.
+       This is one of the suggestions made by Jim Porter and
+       independently by Ulrich Mueller in Bug#51327.
+
+2021-12-09  Cameron Desautels  <camdez@gmail.com>
+
+       Add missing K key documentation for Cangjie input methods
+
+       * lisp/international/titdic-cnv.el (tsang-quick-converter): Add the
+       missing K key in input method documentation. (Bug#52264)
+
+2021-12-09  Martin Rudalics  <rudalics@gmx.at>
+
+       Fix manual entry of 'quit-restore-window' (Bug#52328)
+
+       * doc/lispref/windows.texi (Quitting Windows): Fix bug in
+       description of 'quit-restore-window' (Bug#52328).
+
+2021-12-09  Eli Zaretskii  <eliz@gnu.org>
+
+       Clarify a comment in xdisp.c
+
+       * src/xdisp.c (compute_window_start_on_continuation_line): Clarify
+       a comment.  (Bug#52378)
+
+2021-12-08  Óscar Fuentes  <ofv@wanadoo.es>
+
+       Revert "Grep alias `all' shall not match parent directory"
+
+       This reverts commit 856cd948d1a5a016ad36721246a049d33451902f.
+
+       Emacs got better at quoting shell arguments and the original value
+       works correctly for vc-git-grep. At the same time, the value
+       introduced on that commit caused a regression on lgrep.
+
+       * lisp/progmodes/grep.el (grep-files-aliases): Use previous value for
+       `all'. Fixes bug#52367
+
+2021-12-08  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix mode-line display in Calendar mode
+
+       * lisp/help.el (substitute-command-keys): New optional argument
+       NO-FACE, to avoid putting the 'help-key-binding' face on the key
+       bindings.
+       * lisp/calendar/calendar.el (calendar-mode-line-entry): Call
+       'substitute-command-keys' with the new optional argument non-nil.
+       (Bug#52366)
+
+       * doc/lispref/help.texi (Keys in Documentation): Document the new
+       optional argument of 'substitute-command-keys'.
+
+       * etc/NEWS: Announce the addition of a new argument to
+       'substitute-command-keys'.
+
+2021-12-08  Lele Gaifax  <lele@metapensiero.it>
+
+       * etc/tutorials/TUTORIAL.it (CONCLUSIONI): Reword paragraph.
+
+       Don't merge to master.
+
+2021-12-08  Michael Albinus  <michael.albinus@gmx.de>
+
+       Backport: Make a more robust check in Tramp using scripts
+
+       * lisp/net/tramp-sh.el (tramp-find-inline-encoding):
+       Check, whether scripts in `tramp-remote-coding-commands' are
+       expandable.
+
+       (cherry picked from commit 1d0a60113fd155c77ef5ea4ea44fcba3504adcbf)
+
+2021-12-07  Robert Pluim  <rpluim@gmail.com>
+
+       Document native-comp-async-report-warning-errors more
+
+       The docstring has a description of how fix problems in lisp code
+       detected by native compilation, but not the Emacs Lisp manual, so
+       document it there as well.
+
+       * doc/lispref/compile.texi (Native-Compilation Functions): Refer to
+       'native-comp-async-report-warning-errors'
+       (Native-Compilation Variables): Explain potential cause of warnings
+       from native compilation.
+
+2021-12-07  Stefan Kangas  <stefan@marxist.se>
+
+       Doc fix; Epiphany has been renamed to GNOME Web
+
+       * lisp/net/browse-url.el: Doc fix; Epiphany is called GNOME Web
+       since GNOME 3.4, released in 2012.
+       Ref: https://help.gnome.org/misc/release-notes/3.4/
+
+2021-12-07  Eli Zaretskii  <eliz@gnu.org>
+
+       * lisp/dired-aux.el (dired-check-process): Doc fix.  (Bug#52337)
+
+2021-12-07  Stefan Kangas  <stefan@marxist.se>
+
+       Remove dead link from newsticker
+
+       * lisp/net/newst-backend.el (newsticker--parse-rss-0.91):
+       * lisp/net/newsticker.el: Remove dead link.
+
+2021-12-06  Juri Linkov  <juri@linkov.net>
+
+       Select the right buffer for event in context-menu functions (bug#9923)
+
+       * lisp/mouse.el (context-menu-region):
+       * lisp/progmodes/prog-mode.el (prog-context-menu):
+       Switch to the buffer displayed by the window of the event
+       before using syntax-ppss, char-after.
+
+2021-12-06  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       lisp/minibuffer.el: Fix for bug#52169 regression
+
+       * lisp/minibuffer.el (completion-table-subvert): Make sure we return
+       a boundary that's not outside of the limit of the string.
+
+2021-12-05  Christer Enfors  <christer.enfors@gmail.com>
+
+       Fix typos and improve consistency in ERC manual
+
+       * doc/misc/erc.texi (Sample Session, Special Features, History): Fix
+       typos and improve consistency.  (Bug52318)
+
+2021-12-05  Glenn Morris  <rgm@gnu.org>
+
+       * test/Makefile.in (check-declare): Add missing --batch.
+
+2021-12-05  Eli Zaretskii  <eliz@gnu.org>
+
+       Document the subtleties of the 'cursor' text property
+
+       * doc/lispref/text.texi (Special Properties): Update the
+       documentation of the 'cursor' property per bug#8627.
+
+2021-12-05  Kyle Meyer  <kyle@kyleam.com>
+
+       Update to Org 9.5.1-15-gdb4805
+
+2021-12-04  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/emacs-lisp/edebug.el (edebug-eval-defun): Minor doc fix.
+
+2021-12-04  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix the enumeration values returned by 'try_scrolling'
+
+       * src/xdisp.c (try_scrolling): Make the enum values match the
+       commentary.  Reported by Po Lu <luangruo@yahoo.com>.
+
+2021-12-04  Stefan Kangas  <stefan@marxist.se>
+
+       * src/dosfns.c (Fint86): Doc fix; don't use obsolete names.
+
+2021-12-03  Stefan Kangas  <stefan@marxist.se>
+
+       * doc/misc/erc.texi (Keystroke Summary): Fix doc for TAB.
+
+2021-12-03  Stefan Kangas  <stefan@marxist.se>
+
+       Remove reference to variable obsolete since 24.1
+
+       * doc/emacs/custom.texi (Minibuffer Maps, Minibuffer Maps): Remove
+       reference to variable 'minibuffer-local-filename-must-match-map',
+       obsolete since 24.1.
+
+2021-12-03  Stefan Kangas  <stefan@marxist.se>
+
+       * doc/misc/efaq.texi (New in Emacs 28): New node.
+
+2021-12-03  Michael Albinus  <michael.albinus@gmx.de>
+
+       Add Tramp version integrated in Emacs 28.1
+
+       * lisp/net/trampver.el (customize-package-emacs-version-alist):
+       Add Tramp version integrated in Emacs 28.1.
+
+2021-12-03  Michael Albinus  <michael.albinus@gmx.de>
+
+       Update Tramp version (don't merge with master)
+
+       * doc/misc/trampver.texi:
+       * lisp/net/trampver.el: Change version to "2.5.2.28.1".
+
+2021-12-03  Philipp Stephani  <phst@google.com>
+
+       Unbreak build after 9c222b9c1a7f91497a37567b4d7de3a511fff069.
+
+       * src/pdumper.c (dump_subr): Fix Lisp_Subr hash value.
+
+2021-12-03  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Port to C compilers that lack size-0 arrays
+
+       The C standard does not allow size-zero arrays, so redo struct
+       Lisp_Subr to not use size-zero arrays when native compilation is
+       not being used.  Formerly, the code was using size-zero arrays (a
+       GNU C extension) to avoid using memory unnecessarily when
+       HAVE_NATIVE_COMP is not defined.  Replace this hack with the
+       more-traditional hack of putting the relevant members inside
+       ‘#ifdef HAVE_NATIVE_COMP’.
+       * src/alloc.c (cleanup_vector, mark_object):
+       * src/comp.c (make_subr):
+       * src/data.c (Fsubr_native_lambda_list, Fsubr_native_comp_unit):
+       * src/eval.c (init_eval_once, funcall_lambda):
+       * src/lisp.h (SUBR_NATIVE_COMPILEDP, SUBR_NATIVE_COMPILED_DYNP)
+       (SUBR_TYPE):
+       * src/lread.c (Fload):
+       Conditionally compile with ‘#ifdef HAVE_NATIVE_COMP’ instead of
+       with ‘if (NATIVE_COMP_FLAG)’.  Redo members like native_comp_u[0]
+       to be plain native_comp_u.  Put all uses of these members inside
+       ‘#ifdef HAVE_NATIVE_COMP’.
+       * src/lisp.h (struct Lisp_Subr): Members native_comp_u,
+       native_c_name, lambda_list, type are now all ifdeffed out if
+       HAVE_NATIVE_COMP is not defined, instead of being size-zero
+       arrays.  All uses changed.
+       * src/pdumper.c (dump_subr, dump_cold_native_subr)
+       (dump_do_dump_relocation):
+       * src/comp.h (NATIVE_COMP_FLAG): Remove; no longer needed.
+
+2021-12-03  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Port emacsclient to Solaris 10
+
+       Without this patch, the build fails on Solaris 10 with the diagnostic
+       “Undefined symbol acl_trivial first referenced in file
+       ../lib/libgnu.a(file-has-acl.o)”.
+       * lib-src/Makefile.in (LIB_HAS_ACL): New macro.
+       (emacsclient${EXEEXT}): Link with $(LIB_HAS_ACL).
+
+2021-12-03  Karl Fogel  <kfogel@red-bean.com>
+
+       * CONTRIBUTE: Improve commit message instructions
+
+2021-12-03  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Work around IBM XL C compiler bug
+
+       * src/fileio.c (Fcopy_file): Work around a compiler bug in IBM XL
+       C for AIX, V12.1 (5765-J02, 5725-C72).  Without this patch, the
+       compiler incorrectly complains “Initialization between types "int"
+       and "struct timespec" is not allowed” and “Initialization between
+       types "long" and "struct timespec" is not allowed”.
+
+2021-12-03  Stefan Kangas  <stefan@marxist.se>
+
+       * admin/make-tarball.txt: Various clarifications.
+
+2021-12-02  Stefan Kangas  <stefan@marxist.se>
+
+       * admin/diff-tar-files: Don't assume .tar.gz.
+
+2021-12-02  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el (tab-bar-close-other-tabs): Fix regression.
+
+       * test/lisp/tab-bar-tests.el: New file.
+       (tab-bar-tests-close-other-tabs-with-arg): Test for regression
+       that closed the selected tab after selecting it.
+
+2021-12-01  Juri Linkov  <juri@linkov.net>
+
+       * lisp/repeat.el: Use same logic for repeat-check-key and 
repeat-exit-timeout.
+
+       * lisp/repeat.el (repeat-check-key): Use for repeat-check-key the same 
logic
+       as is used for repeat-exit-timeout in repeat-post-hook (bug#51390).
+       (repeat-post-hook): Check for repeat-exit-timeout symbol property.
+
+2021-12-01  Juri Linkov  <juri@linkov.net>
+
+       * lisp/help.el (help--analyze-key): Prefer posn-set-point over 
mouse-set-point
+
+       * lisp/help.el (help--analyze-key): Use posn-set-point instead of
+       mouse-set-point that runs the hook mouse-leave-buffer-hook via
+       mouse-minibuffer-check.  Using posn-set-point also unnecessitates
+       extra conditions added in bug#51421.
+
+       * lisp/isearch.el (isearch-describe-key, isearch-describe-mode):
+       Add precautions to not call isearch-update when the executed
+       command exited isearch-mode (bug#51173).
+
+2021-12-01  Stefan Kangas  <stefan@marxist.se>
+
+       Bump Emacs version to 28.0.90
+
+       * README:
+       * configure.ac:
+       * msdos/sed2v2.inp:
+       * nt/README.W32: Bump Emacs version to 28.0.90.
+
+2021-12-01  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: Recognise "struct foo {" as introducing a type declaration
+
+       This fixes bug #52157.
+
+       * lisp/progmodes/cc-engine.el (c-forward-decl-or-cast-1): If such a 
construct
+       is parsed, set the flag at-type-decl which is part of the function's 
return
+       value.
+
+2021-12-01  Stefan Kangas  <stefan@marxist.se>
+
+       Update authors.el for Emacs 28
+
+       * admin/authors.el (authors-aliases, authors-ignored-files)
+       (authors-renamed-files-alist): Update for Emacs 28.
+
+2021-11-30  Juri Linkov  <juri@linkov.net>
+
+       * lisp/repeat.el: Fix long-standing problem when a random key activates 
map
+
+       * lisp/repeat.el (repeat-check-key): New defcustom (bug#51390).
+       (repeat--command-property): New internal function.
+       (repeat-check-key): New function.
+       (repeat-post-hook): Use repeat--command-property and repeat-check-key.
+
+       * test/lisp/repeat-tests.el (repeat-tests-check-key): New test.
+
+2021-11-30  Juri Linkov  <juri@linkov.net>
+
+       * lisp/repeat.el (repeat-keep-prefix): Change default to nil.
+
+       'repeat-keep-prefix' doesn't yet have sufficient support
+       that covers all cases in bug#51281, so it's disabled now.
+
+2021-11-30  Juri Linkov  <juri@linkov.net>
+
+       * test/lisp/repeat-tests.el (repeat-tests-call-b): Test for commit 
588caf0b27.
+
+       This tests for 'repeat-map' as a variable instead of a symbol.
+
+2021-11-30  Juri Linkov  <juri@linkov.net>
+
+       * src/callint.c (Fcall_interactively): Fix inhibit_mouse_event_check.
+
+       Don't search for the next mouse event with parameters
+       when inhibit-mouse-event-check is non-nil (bug#50067).
+
+2021-11-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix regression in gdb-frame-handler
+
+       * lisp/progmodes/gdb-mi.el (gdb-frame-handler): Protect against
+       nil fullnames (bug#52196).
+
+2021-11-30  Yuga Ego  <yet@ego.team>  (tiny change)
+
+       Format and index concept 'predicate' in ELisp Intro
+
+       * doc/lispintro/emacs-lisp-intro.texi (Wrong Type of Argument):
+       Add index and format definition (bug#52197).
+
+2021-11-29  Protesilaos Stavrou  <info@protesilaos.com>
+
+       Remove problematic characters from modus-themes.org (bug#52126)
+
+       * doc/misc/modus-themes.org
+       (Enable and load, Font configurations for Org and others)
+       (Note on highlight-parentheses.el, Note on god-mode.el): Update links to
+       headings so that they no longer include the removed portions of text.
+
+       (Option for color-coding success state, Option for line highlighting)
+       (Option for line numbers, Option for parenthesis matching)
+       (Advanced customization, Per-theme customization settings)
+       (Case-by-case face specs using the themes' palette)
+       (Face specs at scale using the themes' palette)
+       (Remap face with local value, Cycle through arbitrary colors)
+       (Override colors, Override color saturation)
+       (Font configurations for Org and others, Configure bold and italic 
faces)
+       (Custom Org user faces, Update Org block delimiter fontification)
+       (Measure color contrast, Load theme depending on time of day)
+       (Backdrop for pdf-tools)
+       (A theme-agnostic hook for theme loading, Note on EWW and Elfeed fonts)
+       (Frequently Asked Questions): Remove parentheses from headings as they
+       can cause problems in the .texi version of the file.
+
+2021-11-29  Andreas Schwab  <schwab@linux-m68k.org>
+
+       Avoid undefined behaviour when copying part of structure
+
+       * src/dispnew.c (copy_row_except_pointers): Don't use address of
+       subobject as starting point.
+
+       (cherry picked from commit 6943786b5c1fe76ea05a3a810512bd6777883710)
+
+2021-11-29  Stefan Kangas  <stefan@marxist.se>
+
+       * Makefile.in (PREFERRED_BRANCH): Now emacs-28.
+
+2021-11-28  Eli Zaretskii  <eliz@gnu.org>
+
+       * src/coding.c (Fdecode_coding_region, Fencode_coding_region): Doc fix.
+
+2021-11-27  Mike Kupfer  <mkupfer@alum.berkeley.edu>
+
+       Fix Subject when forwarding message with 2-line From
+
+       * lisp/mh-e/mh-comp.el (mh-forwarded-letter-subject): Collapse
+       two-line From headers into a single line (SF#266).  Based on a
+       suggestion from Lester Buck (many thanks!).
+
+2021-11-27  Kyle Meyer  <kyle@kyleam.com>
+
+       Update to Org 9.5.1-11-g96d91b
+
+2021-11-27  Eli Zaretskii  <eliz@gnu.org>
+
+       * doc/lispref/commands.texi (Click Events): Fix wording (bug#52142).
+
+2021-11-25  Robert Pluim  <rpluim@gmail.com>
+
+       Fix pdf generation with Texinfo 6.7
+
+       * doc/lispref/display.texi (Size of Displayed Text): Put @group inside
+       @example (bug#52102).
+
+2021-11-25  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix 'posn-at-point' near some overlays
+
+       * src/xdisp.c (pos_visible_p): Fix 'posn-at-point' for positions
+       just after a display property that draws a fringe bitmap.
+       (Bug#52097)
+
+2021-11-25  Narendra Joshi  <narendraj9@gmail.com>  (tiny change)
+
+       * lisp/repeat.el (repeat-post-hook): Add check symbolp rep-map.
+
+2021-11-24  Eli Zaretskii  <eliz@gnu.org>
+
+       Revert "Use @pxref when necessary"
+
+       This reverts commit b4f47d2ee2203a9f22bebeb3d09e0fb3fce2f65e.
+       Cleanups should not be done on the release branch: that's
+       unnecessary risk.
+
+2021-11-24  Robert Pluim  <rpluim@gmail.com>
+
+       Use @pxref when necessary
+
+       * doc/lispref/customize.texi (Composite Types):
+       * doc/lispref/edebug.texi (Specification List):
+       * doc/lispref/variables.texi (Local Variables):
+       * doc/misc/efaq.texi (Basic keys):
+       (Informational files for Emacs):
+       * doc/misc/flymake.texi (Locating a master file):
+       * doc/misc/gnus.texi (Don't Panic):
+       (Oort Gnus):
+       * doc/misc/htmlfontify.texi (Non-interactive):
+       * doc/misc/mh-e.texi (More About MH-E):
+       * doc/misc/pcl-cvs.texi (Entering PCL-CVS):
+       * doc/misc/tramp.texi (Remote processes):
+       * doc/misc/vhdl-mode.texi (Indentation Calculation):
+       (Custom Indentation Functions): Use @pxref when inside parens.
+
+2021-11-24  Michael Albinus  <michael.albinus@gmx.de>
+
+       Backport Tramp fixes, don't merge
+
+       * lisp/net/tramp-sshfs.el (tramp-sshfs-file-name-handler-alist):
+       Use `tramp-handle-file-readable-p'.
+
+       * test/lisp/net/tramp-archive-tests.el
+       (tramp-archive-test02-file-name-dissect): Use `make-tramp-file-name'.
+
+2021-11-23  Takesi Ayanokoji  <ayanokoji.takesi@gmail.com>  (tiny change)
+
+       Fix typos in documentation
+
+       * doc/lispref/anti.texi:
+       * doc/misc/efaq.texi: Fix typos.
+
+2021-11-22  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix '(space :relative-width N)' display spec w/non-ASCII chars
+
+       * src/xdisp.c (produce_stretch_glyph): Use the correct face for
+       non-ASCII characters.  Support :relative-width display spec on
+       Lisp strings, not just on buffer text.
+
+2021-11-22  Juri Linkov  <juri@linkov.net>
+
+       * lisp/proced.el (proced-sort-header): Fix event positions (bug#1779).
+
+       The logic was copied from 'tabulated-list-col-sort'.
+
+2021-11-20  Kyle Meyer  <kyle@kyleam.com>
+
+       Update to Org 9.5-72-gc5d6656
+
+2021-11-20  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix mouse handling with several TTY frames on MS-Windows
+
+       * src/w32inevt.c (do_mouse_event): Reset the 'mouse_moved' flag of
+       the selected frame.  Without that, this flag might remain set on a
+       TTY frame that is not displayed.
+
+2021-11-20  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix temacs invocation from outside of the 'src' directory
+
+       * src/emacs.c (main) [HAVE_NATIVE_COMP]: Recompute the value of
+       native-comp-eln-load-path if about to load loadup in uninitialized
+       Emacs.  (Bug#51999)
+
+2021-11-20  martin rudalics  <rudalics@gmx.at>
+
+       Fix mouse events on tab bar or tool bar when 'track-mouse' is t
+
+       * lisp/mouse.el (mouse-drag-track):
+       * lisp/mouse-drag.el (mouse-drag-drag): Set 'track-mouse' to some
+       value neither t nor nil.
+       * src/keyboard.c (make_lispy_position): If track_mouse is Qt,
+       report event on tool or tab bar (Bug#51794).
+
+2021-11-20  Po Lu  <luangruo@yahoo.com>
+
+       Fix `browse-url-interactive-arg' for certain kinds of events
+
+       * lisp/net/browse-url.el (browse-url-interactive-arg): Don't
+       call `mouse-set-point' unless event is actually a mouse event.
+
+2021-11-19  Michael Albinus  <michael.albinus@gmx.de>
+
+       * test/lisp/net/tramp-tests.el (tramp-get-remote-gid): Remove 
declaration.
+
+2021-11-19  Michael Albinus  <michael.albinus@gmx.de>
+
+       Add upward compatibility entry in Tramp (don't merge)
+
+       * lisp/net/tramp.el (tramp-file-name-for-operation):
+       Add `abbreviate-file-name'.
+
+2021-11-18  Juri Linkov  <juri@linkov.net>
+
+       Fix sorting of menus in `context-menu-local' (bug#50067).
+
+       * lisp/menu-bar.el (menu-bar-keymap): Don't use `lookup-key'
+       on the `keymap' arg.
+
+       * lisp/mouse.el (context-menu-global): Use `lookup-key global-map'
+       for the `keymap' arg of `menu-bar-keymap'.
+       (context-menu-local): Use `menu-bar-keymap' to sort `keymap'.
+
+2021-11-18  Juri Linkov  <juri@linkov.net>
+
+       Fix flyspell-correct-word selected from context menu opened with the 
keyboard
+
+       * lisp/mouse.el (context-menu-open): Call interactively a command
+       returned by `context-menu-map' such as `flyspell-correct-word' 
(bug#50067).
+
+       * lisp/textmodes/flyspell.el (flyspell-correct-word): Handle the
+       case when it's called by a key bound to `context-menu-open'.
+       Then it should work the same way as `C-c $' typed on misspelled word
+       where the arg `event' of `flyspell-correct-word-before-point' is nil.
+
+2021-11-18  Robert Pluim  <rpluim@gmail.com>
+
+       * lisp/repeat.el (describe-repeat-maps): Print all bound keys 
(bug#49265).
+
+2021-11-18  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el: Use 'mouse-1' for history buttons like for 'add-tab' 
button
+
+       * lisp/tab-bar.el (tab-bar-mouse-down-1, tab-bar-mouse-1):
+       Handle clicks for 'history-back' and 'history-forward' the same way
+       as 'add-tab' clicks.
+
+2021-11-18  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of window hooks
+
+       * doc/lispref/windows.texi (Window Hooks): Clarify "buffer-local
+       functions".  (Bug#51930)
+
+2021-11-18  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve doc string of 'highlight-nonselected-windows'
+
+       * src/xdisp.c (syms_of_xdisp) <highlight-nonselected-windows>:
+       Clarify the doc string.  (Bug#51927)
+
+2021-11-17  Stefan Kangas  <stefan@marxist.se>
+
+       * admin/authors.el (authors-ignored-files): Ignore some NEWS files.
+
+2021-11-16  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el (tab-bar-select-tab): Add check for wc-frame 
(bug#51883).
+
+2021-11-16  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el: Doc fixes for commands bound to modifier keys.
+
+       (tab-bar-select-tab-modifiers)
+       (tab-bar-select-tab, tab-bar-switch-to-last-tab): Doc fixes.
+
+2021-11-15  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix removal of fringe marks of deleted bookmarks
+
+       * lisp/bookmark.el (bookmark--remove-fringe-mark): The fringe
+       overlay is at BOL, not at POS.  (Bug#51233)
+
+2021-11-15  Juri Linkov  <juri@linkov.net>
+
+       * lisp/repeat.el (repeat-echo-message): Bind message-log-max to nil.
+
+       Don't insert messages about repeatable keys in the *Messages* buffer.
+
+2021-11-15  Robert Pluim  <rpluim@gmail.com>
+
+       * lisp/repeat.el (describe-repeat-maps): Use help-fns--analyze-function.
+
+       Print keys bound to commands in every keymap (bug#49265)
+
+2021-11-15  Juri Linkov  <juri@linkov.net>
+
+       * lisp/repeat.el: Detect changes in the minibuffer state (bug#47566)
+
+       (repeat--prev-mb): New internal variable.
+       (repeat-post-hook): Check the property 'repeat-map' on the symbol
+       from 'this-command' in addition to 'real-this-command'.  Don't allow
+       repeatable maps in the activated minibuffer or in the minibuffer
+       from another command.  Set 'repeat--prev-mb' at the end.
+
+2021-11-15  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid segfaults due to freed face cache
+
+       * src/xfaces.c (face_at_buffer_position): Make sure DEFAULT_FACE
+       is usable.  (Bug#51864)
+
+2021-11-15  Stefan Kangas  <stefan@marxist.se>
+
+       Doc fix; change recommended file name of custom-file
+
+       * lisp/cus-edit.el (custom-file): Change file name recommendation to
+       match Info node '(emacs) Saving Customizations'.
+
+2021-11-14  Philip Kaludercic  <philipk@posteo.net>
+
+       * lisp/net/rcirc.el (rcirc-define-command): Fix interactive-spec 
generation
+
+       (rcirc-define-command):  Wrap interactive spec in a list call.
+
+2021-11-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix `C-h k' in gnus-article-mode (don't merge)
+
+       * lisp/gnus/gnus-art.el (gnus-article-describe-key):
+       (gnus-article-describe-key-briefly): Fix `describe-key' calling
+       convention (bug#51796).
+
+2021-11-14  Daniel Martín  <mardani29@yahoo.es>
+
+       Fix semantic-symref-perform-search doc string
+
+       * lisp/cedet/semantic/symref/cscope.el (semantic-symref-perform-search):
+       Fix the docstring to refer to the correct tool (bug#51846).
+
+2021-11-14  Eli Zaretskii  <eliz@gnu.org>
+
+       Add more files to be natively-compiled AOT
+
+       * src/Makefile.in (elnlisp): Add emacs-lisp/gv.eln and other
+       missing dependencies of comp.el.
+
+2021-11-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       gnus-summary-line-format doc string clarification
+
+       * lisp/gnus/gnus.el (gnus-summary-line-format): Clarify the Date
+       part of the doc string (bug#51823).
+
+2021-11-13  Alan Mackenzie  <acm@muc.de>
+
+       Fix follow-scroll-down in a small buffer which starts slightly scrolled
+
+       This fixes bug #51814.
+
+       * 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.
+
+2021-11-13  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix compilation on MS-Windows
+
+       * src/callproc.c (emacs_spawn) <fork_done>: Define the label only
+       if USABLE_POSIX_SPAWN is defined, to avoid a compiler warning.
+
+       (cherry picked from commit a8fc08085110de00ebcbd67b5273a755a5cb8ea1)
+
+2021-11-13  Philipp Stephani  <phst@google.com>
+
+       Use posix_spawn if possible.
+
+       posix_spawn is less error-prone than vfork + execve, and can make
+       better use of system-specific enhancements like 'clone' on Linux.  Use
+       it if we don't need to configure a pseudoterminal.
+
+       Backported from commit a60053f8368e058229721f1bf1567c2b1676b239.
+       Unlike that commit, only define USABLE_POSIX_SPAWN on macOS, because
+       there posix_spawn is much faster than vfork.
+
+       Don't merge to master.
+
+       * configure.ac (HAVE_SPAWN_H, HAVE_POSIX_SPAWN)
+       (HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR)
+       (HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR_NP)
+       (HAVE_POSIX_SPAWNATTR_SETFLAGS, HAVE_DECL_POSIX_SPAWN_SETSID): New
+       configuration variables.
+       * src/callproc.c (USABLE_POSIX_SPAWN): New configuration macro.
+       (emacs_posix_spawn_init_actions)
+       (emacs_posix_spawn_init_attributes, emacs_posix_spawn_init): New
+       helper functions.
+       (emacs_spawn): Use posix_spawn if possible.
+
+       (cherry picked from commit a60053f8368e058229721f1bf1567c2b1676b239)
+
+2021-11-13  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve style and comments in font-related sources
+
+       * src/w32font.c (fill_in_logfont): Stylistic changes.
+       * src/font.h (font_property_index, font_select_entity):
+       Add/improve comments.
+
+2021-11-12  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of 'decode-coding-region'
+
+       * src/coding.c (Fdecode_coding_region): Doc fix.
+
+       * doc/lispref/nonascii.texi (Coding System Basics)
+       (Explicit Encoding): Explain the significance of using 'undecided'
+       in 'decode-coding-*' functions.
+
+2021-11-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix problem with temp buffer killing in package-install-file
+
+       * lisp/emacs-lisp/package.el (package-install-file): Allow killing
+       the temporary buffer without querying (bug#51769).
+
+2021-11-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix Lisp Intro markup error
+
+       * doc/lispintro/emacs-lisp-intro.texi (Insert let): Fix @code
+       markup error (bug#51777).
+
+2021-11-11  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix ACL errors with WebDAV volumes on MS-Windows
+
+       * src/w32.c (acl_get_file): Handle ERROR_INVALID_FUNCTION from
+       WebDAV.  Patch from Ioannis Kappas <ioannis.kappas@gmail.com>.
+       (Bug#51773)
+
+2021-11-11  Aleksandr Vityazev  <avityazev@posteo.org>
+
+       Fix tramp-compat-file-name-concat (Bug#51754)
+
+       * lisp/net/tramp-compat.el: Make `tramp-compat-file-name-concat'
+       work like file-name-concat.  (Bug#51754)
+
+2021-11-10  Juri Linkov  <juri@linkov.net>
+
+       * lisp/vc/vc-git.el (vc-git-mergebase): More meaningful error message.
+
+       Display a readable error message instead of signaling an error on nil 
value.
+
+2021-11-10  Stephen Gildea  <stepheng+emacs@gildea.com>
+
+       time-stamp: %F is "file name" not "pathname" + other doc
+
+       * lisp/time-stamp.el (time-stamp-format): doc 'file' instead of 'path'.
+       * test/lisp/time-stamp-tests.el (formatz, format-time-offset):
+       Clarify the difference and similarity between these two test helpers.
+
+2021-11-09  Juri Linkov  <juri@linkov.net>
+
+       * doc/misc/eww.texi (Advanced): Fix missed variable name 
eww-retrieve-command.
+
+2021-11-09  Juri Linkov  <juri@linkov.net>
+
+       * doc/emacs/windows.texi (Window Convenience): Use @code for windmove.
+
+       This refers to both a command and a user option.
+
+       * etc/NEWS: Add some ---.
+
+2021-11-09  Juri Linkov  <juri@linkov.net>
+
+       * doc/emacs/maintaining.texi (Basic VC Editing): Mention Dired buffer.
+
+       * doc/emacs/text.texi (Outline Mode): Replace S-TAB with with S-<TAB>.
+
+       * etc/NEWS: Add some missing +++/--- and move some related items closer.
+
+2021-11-09  Juri Linkov  <juri@linkov.net>
+
+       * lisp/progmodes/prog-mode.el (prog-context-menu): Use "Go Back" 
(bug#38797)
+
+2021-11-09  Stefan Kangas  <stefan@marxist.se>
+
+       Revert "Fix localized display of date and time in the NS port"
+
+       This reverts commit 5e05be566b0e13ce0b4e75da663fb051039f0751.
+
+       This was discussed in
+       https://debbugs.gnu.org/cgi/bugreport.cgi?bug=51321#93
+
+2021-11-08  Juri Linkov  <juri@linkov.net>
+
+       * lisp/mouse.el (mouse-buffer-menu-mode-groups): Tighten "Version 
Control".
+
+       Use word boundaries in the "Version Control" regexp to match mode names
+       "Log-Edit", "Log-View", "Git-Log-View", "Change Log", "VC dir",
+       but not "Verilog", "Prolog", "Rlogin" (bug#51337).
+
+2021-11-08  Juri Linkov  <juri@linkov.net>
+
+       * doc/emacs/search.texi (Isearch Yank): Add 
isearch-forward-thing-at-point.
+
+2021-11-07  Alan Mackenzie  <acm@muc.de>
+
+       Amend Follow Mode to handle header lines and tab lines correctly
+
+       This fixes bug #51590.
+
+       list/follow.el (follow-scroll-down): Incorporate the height of the tab 
line
+       into the calculation of the window height.
+       (follow-calc-win-end): Incorporate the pixel heights of the header line 
and
+       the tab line the calculation of the buffer position of the bottom 
screen line.
+
+2021-11-07  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/files.el (user-emacs-directory-warning): Clarify docstring.
+
+2021-11-07  Juri Linkov  <juri@linkov.net>
+
+       * doc/emacs/frames.texi (Tab Bars): Add text about mouse and 
tab-bar-format
+
+       Briefly describe mouse commands on the tab bar and tab-bar-format 
(bug#51444)
+
+2021-11-07  Juri Linkov  <juri@linkov.net>
+
+       * doc/emacs/frames.texi (Tab Bars): Describe tab-last.
+
+       'C-9' and 'M-9' already had kindex, so describe them in the text as well
+       (bug#51444).
+
+2021-11-07  Jim Porter  <jporterbugs@gmail.com>
+
+       Add some unit tests for 'abbreviate-file-name'
+
+       * test/lisp/files-tests.el (files-tests-abbreviate-file-name-homedir)
+       (files-tests-abbreviate-file-name-directory-abbrev-alist): New tests.
+
+2021-11-07  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix compilation MinGW warnings
+
+       * src/w32.h (prepare_standard_handles, reset_standard_handles):
+       Fix prototypes.  Reported by Andy Moreton
+       <andrewjmoreton@gmail.com> in
+       https://lists.gnu.org/archive/html/emacs-devel/2021-11/msg00597.html.
+
+2021-11-06  Stefan Kangas  <stefan@marxist.se>
+
+       Escape '%' in filenames to fix flymake warnings
+
+       * lisp/progmodes/flymake.el (flymake--log-1): Escape '%' in filenames
+       for 'warning-type-format' so they are not interpreted as a %-sequence
+       by 'format' later.  (Bug#51549)
+
+2021-11-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix search string generation in nnimap-make-thread-query
+
+       * lisp/gnus/nnimap.el (nnimap-make-thread-query): Remove text
+       properties before constructing the search string (bug#49926).
+
+2021-11-06  Kyle Meyer  <kyle@kyleam.com>
+
+       Update to Org 9.5-68-g77e2ec
+
+2021-11-06  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix dbus-test04-register-method on CentOS (Bug#51369)
+
+       * test/lisp/net/dbus-tests.el (dbus-test04-register-method):
+       Fix problem on CentOS.  (Bug#51369)
+
+2021-11-06  Jonas Bernoulli  <jonas@bernoul.li>
+
+       * lisp/transient.el: Update to package version v0.3.7-11-g7f5520b3.
+
+2021-11-06  Eli Zaretskii  <eliz@gnu.org>
+
+       Clarify "text area of a window" in the documentation
+
+       * src/keyboard.c (Fposn_at_x_y): Clarify that the Y coordinate
+       includes the header-line and the tab-line.  (Bug#51590)
+
+       * doc/lispref/windows.texi (Window Sizes, Splitting Windows)
+       (Textual Scrolling, Coordinates and Windows): Fix/remove improper
+       or confusing uses of "text area" of a window.
+
+2021-11-06  Stefan Kangas  <stefan@marxist.se>
+
+       Improve docstring of kmacro-set-format
+
+       * lisp/kmacro.el (kmacro-set-format): Improve docstring.
+       (kmacro-insert-counter, kmacro-display-counter)
+       (kmacro-set-counter, kmacro-add-counter): Add cross-references
+       to the info manual.
+
+2021-11-05  Stefan Kangas  <stefan@marxist.se>
+
+       Revert "* lisp/wid-edit.el (widget-field): Add subtle border to face."
+
+       This reverts commit 8b024a6ff10f7907445ea60c4db8355638616ed1.
+
+       This lead to some alignment issues.  (Bug#51550)
+       Don't merge to master, where we will continue investigating.
+
+2021-11-05  Stefan Kangas  <stefan@marxist.se>
+
+       * etc/PROBLEMS: Mention X forwarding slowdowns.  (Bug#7092)
+
+2021-11-04  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/custom.el (defgroup): Document the :prefix keyword.
+
+2021-11-04  Thibault Polge  <thibault@thb.lt>
+
+       Document ibuffer-auto-mode in ibuffer-mode doc string
+
+       * lisp/ibuffer.el (ibuffer-mode): Mention ibuffer-auto-mode in the
+       ibuffer-mode doc string (bug#51584).
+
+2021-11-04  Juri Linkov  <juri@linkov.net>
+
+       * doc/emacs/frames.texi (Tab Bars): Reorder toggle-frame-tab-bar.
+
+2021-11-04  Stefan Kangas  <stefan@marxist.se>
+
+       Use current face foreground for SVG icons in customize
+
+       It turns out these few icons were missed when the color and size
+       information was removed from the SVG icons that replaced XPM icons for
+       Customize buffer.
+       * etc/images/down.svg:
+       * etc/images/left.svg:
+       * etc/images/right.svg:
+       * etc/images/up.svg: Don't define foreground; this means they will use
+       the foreground of the currently defined face instead.  (Bug#51556)
+
+       (cherry picked from commit 11702a6dd7cb8286f28b7cb986057d2d2c66a914)
+
+2021-11-03  Juri Linkov  <juri@linkov.net>
+
+       * doc/emacs/building.texi (Compilation Mode): Add 
next-error-message-highlight
+
+       The variable 'next-error-message-highlight' already has vindex,
+       so describe it in the text as well (bug#51444).
+
+2021-11-03  Daniel Martín  <mardani29@yahoo.es>
+
+       Document a macOS error message when opening Emacs
+
+       * etc/PROBLEMS: Document a potential error message when opening Emacs
+       on macOS for the first time.
+
+2021-11-03  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix header-line and tab-line when mode-line-compact is set
+
+       * src/xdisp.c (display_mode_line): Make 'mode-line-compact' apply
+       only to mode lines.  (Bug#51558)
+
+2021-11-03  Mattias Engdegård  <mattiase@acm.org>
+
+       Add manual section about how to avoid regexp problems
+
+       Help users affected by our NFA engine's stack overflows and occasional
+       poor performance, replacing old text that was more limited in scope.
+
+       * doc/lispref/elisp.texi (Top):
+       * doc/lispref/searching.texi (Regular Expressions): Add menu entries.
+       (Regexp Problems): New node.
+       (Regexp Special):
+       * etc/PROBLEMS: Remove superseded text.
+
+2021-11-03  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Clarify build environment
+
+       * admin/nt/dist-build/README-scripts:
+
+2021-11-03  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Clarify build directory structure
+
+       * admin/nt/dist-build/README-scripts: Clarify build directory structure
+
+2021-11-02  Andrea Corallo  <akrl@sdf.org>
+
+       * src/pdumper.c (dump_do_dump_relocation): Add sanity check.
+
+2021-11-01  Juri Linkov  <juri@linkov.net>
+
+       * lisp/progmodes/prog-mode.el (prog-context-menu): Use 
text-mode-context-menu.
+
+2021-11-01  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix bug#51369
+
+       * test/lisp/net/dbus-tests.el (dbus-test04-register-method): Skip on 
hydra.
+
+2021-11-01  Michael Albinus  <michael.albinus@gmx.de>
+
+       Adapt arguments of `tramp-make-tramp-file-name'
+
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-handler-mounted-unmounted):
+       * lisp/url/url-tramp.el (url-tramp-convert-url-to-tramp):
+       Use `make-tramp-file-name'.
+
+       * lisp/obsolete/rcompile.el (remote-compile): Pacify byte-compiler.
+
+2021-11-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix typo in describe-map-tree doc string
+
+       * lisp/help.el (describe-map-tree): Fix typo in doc string.
+
+2021-11-01  Ken Brown  <kbrown@cornell.edu>
+
+       Drop support for native compilation on 32-bit Cygwin
+
+       * configure.ac (cygwin32-native-compilation): New option.
+       [i686-pc-cygwin]: Don't allow native compilation unless that
+       option is specified.  (Bug#50666)
+
+2021-10-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix rendering of title-less <abbr> tags in shr
+
+       * lisp/net/shr.el (shr-tag-abbr): Render <abbr> tags that have no
+       title (bug#51525).
+
+2021-10-31  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid signaling errors in lookup-key
+
+       * src/keymap.c (Flookup_key): Handle KEY vectors where not all
+       components are symbols.  (Bug#51527)  Do not merge to master.
+
+2021-10-31  Daniel Martín  <mardani29@yahoo.es>
+
+       Fix localized display of date and time in the NS port
+
+       * src/nsterm.m (ns_init_locale): If not already set, set LC_ALL to the
+       current locale ID so that dates, currencies, etc. use the settings
+       configured in the operating system.  (Bug#51321)
+
+2021-10-31  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix display glitches with side-by-side windows on TTY frames
+
+       * src/dispnew.c (adjust_glyph_matrix, prepare_desired_row): Leave
+       room for the border glyph only if the window does actually have
+       the right margin.  (Bug#51521)
+
+2021-10-30  Carlos Pita  <carlosjosepita@gmail.com>
+
+       Avoid replacing common prefix with ellipsis
+
+       * lisp/progmodes/python.el
+       (python-shell-completion-native-setup): Configure readline not to
+       suppress common prefixes.  (Bug#51218)
+
+2021-10-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of string truncation APIs
+
+       * doc/lispref/display.texi (Size of Displayed Text):
+       * lisp/international/mule-util.el (truncate-string-to-width):
+       Document caveats of using 'truncate-string-to-width' when
+       character composition is involved.
+
+       * lisp/emacs-lisp/subr-x.el (string-limit):
+       * doc/lispref/strings.texi (Creating Strings): Improve the
+       documentation of 'string-limit'.
+
+2021-10-29  Imran Khan  <contact@imrankhan.live>  (tiny change)
+
+       * lisp/textmodes/css-mode.el: Fix typo.  (Bug#51488)
+
+2021-10-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make message/rfc822 on buttons work again in Gnus
+
+       * lisp/gnus/gnus-art.el (gnus-article-mode): Set
+       mm-inline-message-prepare-function buffer-locally so that it works
+       both when inlining rfc822 and hitting the MIME button (bug#51388).
+       (gnus-mime--inline-message): Factor out into own function.
+       (gnus-mime-display-single): From here.
+
+2021-10-29  Glenn Morris  <rgm@gnu.org>
+
+       * lisp/loadup.el: Unbreak build.
+
+2021-10-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Move lisp/shorthands.el to lisp/emacs-lisp/shorthands.el
+
+2021-10-29  Michael Albinus  <michael.albinus@gmx.de>
+
+       Some Tramp changes, mainly in tramp-tests.el
+
+       * doc/misc/tramp.texi (External packages): Don't use Tramp internals.
+
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-handler-mounted-unmounted):
+       Protect `tramp-make-tramp-file-name' call.
+
+       * lisp/net/tramp.el (tramp-make-tramp-file-name): Set advertised
+       calling conventions.
+
+       * test/lisp/net/tramp-tests.el (tramp-test18-file-attributes):
+       Adapt test.
+       (tramp--test-supports-processes-p): New defun.
+       (tramp-test28-process-file, tramp-test29-start-file-process)
+       (tramp-test30-make-process, tramp-test32-shell-command)
+       (tramp-test32-shell-command-dont-erase-buffer)
+       (tramp-test34-explicit-shell-file-name, tramp-test35-exec-path)
+       (tramp-test44-asynchronous-requests): Use it.
+
+2021-10-29  Gregory Heytings  <gregory@heytings.org>
+
+       Make hieroglyphs display correctly with existing fonts
+
+       * etc/HELLO: Remove hieroglyph format control characters.
+
+       * lisp/language/misc-lang.el: Add a rule to compose Egyptian
+       hieroglyphs even without Unicode format control characters.
+
+2021-10-29  Eli Zaretskii  <eliz@gnu.org>
+
+       Clarify "default face attributes" in the ELisp manual
+
+       * doc/lispref/display.texi (Defining Faces): Add index entries for
+       face symbol properties.
+       (Attribute Functions): Clarify "default face attribute values" wrt
+       'face-all-attributes' and 'face-attribute'.  (Bug#51465)
+
+2021-10-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make `C-u RET' work again
+
+       * lisp/simple.el (newline): Fix regression introduced by
+       d1aacceae9 (bug#51459).
+
+2021-10-28  Jan Synacek  <jan.synacek@gmail.com>  (tiny change)
+
+       Fix typos in the manual and in a comment
+
+       * lisp/minibuffer.el (completion-pcm--hilit-commonality):
+       * doc/lispintro/emacs-lisp-intro.texi (Mode Line): Fix typos
+       (bug#51434).
+
+2021-10-28  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid assertion violations in 'lookup-key'
+
+       * src/keymap.c (Flookup_key): Don't call ASIZE unless KEY is a
+       vector.  This avoids assertion violations when KEY is a string.
+
+2021-10-28  Stefan Kangas  <stefan@marxist.se>
+
+       image-dired: Unreverse accidentally reversed menus
+
+       * lisp/image-dired.el (image-dired-thumbnail-mode-map)
+       (image-dired-display-image-mode-map, image-dired-minor-mode-map):
+       In Emacs 26.1 (commits b905454680c7 and bed0373855ea), the menus were
+       converted to use 'easy-menu-define', but they were reversed in the
+       process.  Unreverse the menus.  (Bug#51446)
+
+2021-10-28  Stefan Kangas  <stefan@marxist.se>
+
+       Be more allowing when looking for menu-bar items
+
+       Don't merge to master.  This is a safe-for-release fix for Bug#50752.
+
+       * src/keymap.c (lookup_key_1): Factor out function from
+       Flookup_key.
+       (Flookup_key): Be case insensitive when looking for Qmenu_bar
+       items.  (Bug#50752)
+
+       * test/src/keymap-tests.el
+       (keymap-lookup-key/mixed-case)
+       (keymap-lookup-key/mixed-case-multibyte): New tests.
+
+2021-10-27  Juri Linkov  <juri@linkov.net>
+
+       * lisp/textmodes/text-mode.el (text-mode-context-menu): Rename recently 
added.
+
+2021-10-27  Robert Pluim  <rpluim@gmail.com>
+
+       Allow automatic use of color fonts for emoji on macOS
+
+       * src/macfont.m (macfont_list): Don't exclude color fonts when the
+       fontspec has an 'emoji' script specification.
+
+2021-10-27  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix help commands for menu-bar menus
+
+       * lisp/help.el (help--analyze-key): Fix "C-h c" and "C-h k" on
+       menu-bar menu items.  (Bug#51421)
+
+2021-10-26  Stefan Kangas  <stefan@marxist.se>
+
+       Improve function documentation with text from XDG BDS spec
+
+       * lisp/xdg.el (xdg-config-home, xdg-cache-home, xdg-data-home)
+       (xdg-runtime-dir, xdg-config-dirs, xdg-data-dirs): Copy in the
+       text from the XDG Base Directory Specification to better explain
+       what these functions return.
+
+2021-10-25  Jonas Bernoulli  <jonas@bernoul.li>
+
+       * lisp/transient.el: Update to package version 0.3.7.
+
+2021-10-25  Eli Zaretskii  <eliz@gnu.org>
+
+       Revert "Fix a typo in emacs-lisp-intro.texi"
+
+       This reverts commit 98eb6d783a482cd7ebca7ec656b0775b82c68e57.
+       I've consulted with Richard Stallman about this, and he says
+       that the original wording, "kinds of atom", is both correct
+       and more elegant writing.  So I'm restoring the original text.
+       * doc/lispintro/emacs-lisp-intro.texi (Lisp Atoms): Undo the
+       fix of a "typo" that wasn't a typo.  (Bug#51271)
+
+2021-10-25  Robert Pluim  <rpluim@gmail.com>
+
+       * doc/lispref/functions.texi (Mapping Functions): Use #' when mapping.
+
+2021-10-25  Miha Rihtaršič  <miha@kamnitnik.top>
+
+       Fix issue with interpreting ANSI codes in eshell
+
+       * lisp/eshell/esh-mode.el (eshell-mode): Make window point advance on
+       insertion.
+       (eshell-output-filter): Don't use insert-before-markers (bug#45380).
+
+2021-10-25  Stefan Kangas  <stefan@marxist.se>
+
+       image-dired: Doc fix to better explain thumbnail generation
+
+       * doc/emacs/dired.texi (Image-Dired): Improve description by
+       explaining that the generation of thumbnails is asynchronous.
+
+2021-10-25  Stefan Kangas  <stefan@marxist.se>
+
+       Clarify two image-dired docstrings
+
+       * lisp/image-dired.el (image-dired-dir): Doc fix; clarify that
+       thumbnails will be saved in "$XDG_CACHE_HOME/thumbnails", as per the
+       Thumbnail Managing Standard.
+       (image-dired-thumb-size): Doc fix; clarify that this option will be
+       ignored when using the Thumbnail Managing Standard.
+
+2021-10-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix flymake example backend conditions in the manual
+
+       * doc/misc/flymake.texi (An annotated example backend): Also react
+       to `signal' process statuses (bug#51380).
+
+2021-10-24  Stefan Kangas  <stefan@marxist.se>
+
+       * etc/PROBLEMS: Mention problems with regexp matcher.  (Bug#18577)
+
+2021-10-24  Juri Linkov  <juri@linkov.net>
+
+       * test/lisp/repeat-tests.el: New file.
+
+2021-10-24  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el (tab-bar-move-repeat-map): Fix alias binding of 
tab-move.
+
+       (tab-bar-move-tab-backward): Put 'repeat-map' symbol property.
+
+2021-10-24  Stefan Kangas  <stefan@marxist.se>
+
+       Use restrictive umask when creating image-dired data
+
+       * lisp/image-dired.el (image-dired-dir)
+       (image-dired-sane-db-file): Create thumbnail directory and
+       .image-dired_db with umask 077.  This avoids creating world readable
+       copies of private data, and is in fact mandated by the Thumbnail
+       Managing Standard that we aim to support.
+
+2021-10-24  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix compilation errors with MinGW64 GCC 11
+
+       * lib-src/ntlib.c (_GL_ATTRIBUTE_MALLOC)
+       (_GL_ATTRIBUTE_DEALLOC_FREE): Define to avoid compilation errors
+       with MinGW64 GCC 11.  Suggested by Andy Moreton
+       <andrewjmoreton@gmail.com>.  Do not merge to master.
+
+2021-10-24  Ihor Radchenko  <yantar92@gmail.com>
+
+       Doc fix for concat
+
+       * src/fns.c (Fconcat): Note that composition values may not remain eq
+       in return value of concat.  (Bug#48740)
+
+2021-10-24  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/image-dired.el (image-dired-external-viewer): Support feh.
+
+2021-10-24  Stefan Kangas  <stefan@marxist.se>
+
+       Update publicsuffix.txt from upstream
+
+       * etc/publicsuffix.txt: Update from
+       https://publicsuffix.org/list/public_suffix_list.dat
+       dated 2021-10-16 16:33:47 GMT.
+
+2021-10-24  Stefan Kangas  <stefan@marxist.se>
+
+       Refer to the info node on keymaps in map-keymap docstring
+
+       * src/keymap.c (Fmap_keymap): Doc fix; add a reference to the Info
+       node '(elisp) Keymaps'.  (Bug#30958)
+
+2021-10-23  Stefan Kangas  <stefan@marxist.se>
+
+       Clarify abnormal hook documentation
+
+       * doc/lispref/hooks.texi (Standard Hooks):
+       * doc/lispref/modes.texi (Hooks): Clarify wording of "abnormal
+       hook" documentation.  (Bug#34588)
+
+2021-10-23  Kyle Meyer  <kyle@kyleam.com>
+
+       Update to Org 9.5-59-g52e6f1
+
+2021-10-23  Stefan Kangas  <stefan@marxist.se>
+
+       Improve documentation of cl-reduce
+
+       * doc/misc/cl.texi (Mapping over Sequences): Change the
+       explanation of 'cl-reduce' so you don't need to have a major in
+       mathematics to understand it.  (Bug#24014)
+
+2021-10-23  Stefan Kangas  <stefan@marxist.se>
+
+       Improve documentation of apply-partially
+
+       * doc/lispref/functions.texi (Calling Functions): Improve
+       documentation of 'apply-partially' to be slightly more clear with
+       regards to function arity.  (Bug#17623)
+
+2021-10-23  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix typos
+
+       * doc/emacs/cmdargs.texi:
+       * etc/DEBUG:
+       * etc/NEWS: Fix typos.
+
+2021-10-23  Michael Albinus  <michael.albinus@gmx.de>
+
+       Revert commit 225ca617b7, and apply another fix
+
+       * lisp/minibuffer.el (read-file-name-default): Revert commit
+       225ca617b7.  (Bug#50976).
+
+       * lisp/shell.el (shell): Remove volume letter for remote shell
+       file name.  (Bug#49229)
+
+2021-10-23  Stefan Kangas  <stefan@marxist.se>
+
+       Fix documentation of posn-at-x-y
+
+       * doc/lispref/commands.texi (Accessing Mouse): Fix documentation of
+       'posn-at-x-y' to match docstring.  (Bug#15783)
+
+2021-10-22  Robert Pluim  <rpluim@gmail.com>
+
+       Improve some NEWS entries
+
+       * etc/NEWS: Improve some NEWS entries.
+
+2021-10-22  Robert Pluim  <rpluim@gmail.com>
+
+       Improve documentation of syntax-ppss-context slightly
+
+       * doc/lispref/syntax.texi (Parser State): Document all possible return
+       values from 'syntax-ppss-context'.
+
+2021-10-22  Robert Pluim  <rpluim@gmail.com>
+
+       Move some xwidget entries
+
+       * etc/NEWS: Move xwidget entries to correct location.
+
+2021-10-22  Stephen Gildea  <stepheng+emacs@gildea.com>
+
+       time-stamp-tests: improvements to test macros
+
+       test/lisp/time-stamp-tests.el: Update macro declarations.
+       (formatz-generate-tests): Don't nconc onto a constant list.
+       Tests now run 12% faster in batch mode.
+
+2021-10-22  Itai Y. Efrat  <itai3397@gmail.com>
+
+       Fix rfc6068-parse-mailto-url autoload
+
+       * lisp/net/browse-url.el (rfc6068-parse-mailto-url): Fix autoload
+       cookie (bug#51333).
+
+2021-10-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Regexp-quote github domains in bug-reference
+
+       * lisp/progmodes/bug-reference.el
+       (bug-reference--build-forge-setup-entry): Regexp-quote the domain
+       (bug#51316).
+
+2021-10-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Ensure valid end/beginning lines in message-mark-inserted-region
+
+       * lisp/gnus/message.el (message-mark-inserted-region): Ensure
+       there's a newline before inserting the end line (bug#51324).
+
+2021-10-22  Robert Pluim  <rpluim@gmail.com>
+
+       * etc/NEWS: Improve 'repeat-mode' entry.
+
+       * lisp/repeat.el (repeat-keep-prefix): Expand description.
+
+       * lisp/net/eww.el (eww-retrieve-command): Add :tag.
+
+2021-10-22  Stefan Kangas  <stefan@marxist.se>
+
+       Add description of cards to etc/refcards/README
+
+       * etc/refcards/README: List all the generated reference cards,
+       including their translations.  (Bug#8932)
+
+2021-10-22  Martin Rudalics  <rudalics@gmx.at>
+
+       Fix 'calculate-lisp-indent' when "[" starts containing sexp (Bug#51312)
+
+       * lisp/emacs-lisp/lisp-mode.el (calculate-lisp-indent): Handle
+       arbitrary paren syntax after skipping whitespace backwards within
+       containing sexp (Bug#51312).
+
+2021-10-22  Stefan Kangas  <stefan@marxist.se>
+
+       Fix typo in doc/emacs/anti.texi
+
+       * doc/emacs/anti.texi (Antinews): Fix typo.  (Bug#51325)
+       Reported by Po Lu <luangruo@yahoo.com>.
+
+2021-10-22  Stephen Gildea  <stepheng+emacs@gildea.com>
+
+       Update doc of Edebug specification for macros
+
+       doc/lispref/edebug.texi:  Update documentation of Edebug specification:
+       - Do not document "0" as a recommended shortcut for non-instrumented
+       arguments; nobody knows about nor uses this, so don't encourage it.
+       - Add an example equivalent to (declare (debug (&rest sexp))).
+
+2021-10-21  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix non-interactive behavior of 'kill-region'
+
+       * lisp/simple.el (kill-region): Actually ignore BEG and END when
+       REGION is non-nil.  Doc fix.  (Bug#51320)
+
+2021-10-21  Juri Linkov  <juri@linkov.net>
+
+       * test/lisp/dabbrev-tests.el: Use 'kbd' for readable keys.
+
+       (dabbrev-expand-test, dabbrev-completion-test)
+       (dabbrev-completion-test-with-argument):
+       Use 'kbd' to format keys for 'execute-kbd-macro'.
+       (dabbrev-expand-test): Fix docstring.
+
+2021-10-21  Juri Linkov  <juri@linkov.net>
+
+       * lisp/menu-bar.el (menu-bar-keymap): Add optional arg KEYMAP 
(bug#50067).
+
+       * lisp/mouse.el (context-menu-global): Use 'menu-bar-keymap' with
+       its arg KEYMAP set to 'global-map'.
+
+2021-10-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix todo-mode AOT test failures (bug#51308)
+
+       Fix hi-lock AOT test failures (bug#51308)
+
+2021-10-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix socks test
+
+       * test/lisp/net/socks-tests.el (socks-tests-v4-basic): Fix failure
+       under native-comp (bug#51308).
+
+2021-10-20  Juri Linkov  <juri@linkov.net>
+
+       * lisp/help.el (help--analyze-key): Add new arg BUFFER (bug#51173).
+
+       * lisp/help.el (describe-key): Use BUFFER as arg for help--analyze-key.
+       (describe-key-briefly): Change arg UNTRANSLATED deprecated in 27.1
+       to BUFFER.
+
+       * lisp/gnus/gnus-art.el (gnus-article-describe-key)
+       (gnus-article-describe-key-briefly): Call describe-key and
+       describe-key-briefly with first arg as a cons with raw keys,
+       and the BUFFER arg set to the current buffer.
+
+2021-10-20  Juri Linkov  <juri@linkov.net>
+
+       Improve docstrings and NEWS item of 'repeat-mode'
+
+       * lisp/repeat.el (repeat-exit-timeout, repeat-echo-function)
+       (repeat-in-progress, repeat-map): Update docstrings.
+
+2021-10-20  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el (tab-bar-menu-bar): New command (bug#51247).
+
+       (tab-bar-format): Rename option 'tab-bar-format-menu-global' to
+       'tab-bar-format-menu-bar'.
+       (tab-bar-format-menu-bar): Rename from 'tab-bar-format-menu-global'.
+
+2021-10-20  Po Lu  <luangruo@yahoo.com>
+
+       Display a tab bar item as sunken when appropriate
+
+       When the mouse pointer is pressed on the tab bar, moved out of the tab
+       bar, and moved back in, it would be more appropriate to behave like
+       other programs by displaying the item as sunken.
+
+       * src/xdisp.c (note_tab_bar_highlight): Display item as sunken if the
+       mouse pointer returns to the tab bar down.
+
+2021-10-20  Po Lu  <luangruo@yahoo.com>
+
+       Fix tab bar item highlight when a mouse click is dropped
+
+       * src/xdisp.c (note_mouse_highlight): Clear last_tab_bar_item if the
+       movement wasn't made on top of the tab bar.
+
+2021-10-20  Stefan Kangas  <stefan@marxist.se>
+
+       Refer to mouse-highlight from make-pointer-invisible docstring
+
+       * src/frame.c (syms_of_frame) <Vmake_pointer_invisible>: Doc fix;
+       add reference to 'mouse-highlight'.  (Bug#42889)
+
+2021-10-20  Robert Pluim  <rpluim@gmail.com>
+
+       * etc/PROBLEMS: Add hex codepoint for NO-BREAK SPACE
+
+2021-10-20  Robert Pluim  <rpluim@gmail.com>
+
+       Describe how to debug fontconfig issues
+
+       * etc/PROBLEMS: Add FC_DEBUG usage pointers.
+
+2021-10-20  Michael Albinus  <michael.albinus@gmx.de>
+
+       Adapt Tramp tests
+
+       * test/lisp/net/tramp-archive-tests.el (tramp-archive-test45-auto-load):
+       Adapt code snippet.
+
+       * test/lisp/net/tramp-tests.el (tramp-test29-start-file-process)
+       (tramp-test30-make-process): Adapt tests.
+       (tramp--test-supports-set-file-modes-p): Renamed from
+       `tramp--test-supports-file-modes-p'.  Adapt all callees.
+       (tramp-test35-exec-path): Use it.
+
+2021-10-20  Jim Porter  <jporterbugs@gmail.com>
+
+       Convert ANSI color definitions in themes to use faces (e.g. 
'ansi-color-red')
+
+       * etc/themes/dichromacy-theme.el:
+       * etc/themes/leuven-theme.el:
+       * etc/themes/misterioso-theme.el:
+       * etc/themes/tango-theme.el:
+       * etc/themes/tango-dark-theme.el:
+       * etc/themes/wombat-theme.el: Convert ANSI color definitions to
+       use faces.
+
+2021-10-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Revert back to using ESC as viper-ESC-key again"
+
+       This reverts commit 5d522b430bd5ecfb8f082906cd634883dbb68f3e.
+
+       The change led to M-x not working in non-gui Emacsen (bug#51253).
+
+2021-10-19  Alan Third  <alan@idiocy.org>
+
+       Fix inset rectangle corners when sides aren't drawn (bug#51251)
+
+       * src/nsterm.m (ns_draw_relief): Make the inner rectangle line up with
+       the outer rectangle's edges where the edges aren't drawn.
+
+2021-10-19  Jan Synacek  <jan.synacek@gmail.com>  (tiny change)
+
+       Don't use color escape sequences in vc-git-expanded-log-entry
+
+       * lisp/vc/vc-git.el (vc-git-expanded-log-entry): Use '--no-color' flag
+       in git invocation.  (Bug#51262)
+
+2021-10-19  Michael Albinus  <michael.albinus@gmx.de>
+
+       Code cleanup in tramp-tests.el
+
+       * test/lisp/net/tramp-tests.el (tramp-test29-start-file-process)
+       (tramp-test30-make-process): Extend tests.
+       (tramp--test-out-of-band-p): New defun.
+       (tramp--test-windows-nt-and-out-of-band-p)
+       (tramp-test42-utf8-with-stat, tramp-test42-utf8-with-perl)
+       (tramp-test42-utf8-with-ls): Use it.
+       (tramp--test-windows-nt-or-smb-p): Use `tramp--test-windows-nt-p'.
+
+2021-10-19  Robert Pluim  <rpluim@gmail.com>
+
+       * admin/notes/unicode: Refer to Unicode's emoji-style.txt
+
+2021-10-19  Robert Pluim  <rpluim@gmail.com>
+
+       Handle VS-16 correctly for non-emoji codepoints
+
+       * admin/unidata/blocks.awk: Remove emoji overrides for codepoints with
+       Emoji_Presentation = No, they're no longer necessary.
+       * lisp/composite.el: Remove #xFE0F (VS-16) from the range handled by
+       `compose-gstring-for-variation-glyph' so it can be handled by
+       `font_range'.
+       * src/composite.c (syms_of_composite): New variable
+       `auto-composition-emoji-eligible-codepoints'.
+       * admin/unidata/emoji-zwj.awk: Generate value for
+       `auto-composition-emoji-eligible-codepoints'.  Add
+       `composition-function-table' entries for 'codepoint + U+FE0F' for
+       them.
+       * src/font.c (codepoint_is_emoji_eligible): New function to check if
+       we should try to use the emoji font for a codepoint.
+       (font_range): Use it.
+
+2021-10-19  Tassilo Horn  <tsdh@gnu.org>
+
+       Adjust bug-reference-bug-regexp default values to match only at beg of 
word
+
+       Previously, the "bug 1" in "(debug 1)" has also been highlighted.
+
+       * lisp/progmodes/bug-reference.el (bug-reference-bug-regexp)
+       (bug-reference--setup-from-vc-alist,bug-reference-setup-from-mail-alist)
+       (bug-reference-setup-from-irc-alist): Adjust bug-reference-bug-regexp
+       default values to match only at the beginning of a word.
+
+2021-10-19  Stefan Kangas  <stefan@marxist.se>
+
+       Fix a typo in emacs-lisp-intro.texi
+
+       * doc/lispintro/emacs-lisp-intro.texi (Lisp Atoms): Fix typo.
+       Reported by Mor Zahavi <morzahavi@me.com>.  (Bug#51271)
+
+2021-10-18  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix some Tramp problems
+
+       * lisp/net/tramp-adb.el (tramp-adb-file-name-handler-alist):
+       Use `tramp-adb-handle-file-executable-p' and
+       `tramp-adb-handle-file-readable-p'.
+       (tramp-adb-handle-file-executable-p)
+       (tramp-adb-handle-file-readable-p): New defuns.
+       (tramp-adb-handle-file-writable-p): Simplify.
+       (tramp-adb-handle-make-process): Handle :filter being t.
+       (tramp-adb-find-test-command): Remove.
+
+       * lisp/net/tramp-sh.el (tramp-sh-handle-file-readable-p):
+       * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-file-readable-p):
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist):
+       Use `tramp-handle-file-readable-p'.
+       (tramp-gvfs-handle-file-executable-p): Do not check whether file
+       exists, this is done in `tramp-check-cached-permissions'.
+       (tramp-gvfs-handle-file-readable-p): Remove.
+
+       * lisp/net/tramp.el (tramp-error): Move binding of `inhibit-message' ...
+       (tramp-signal-hook-function): ... here.
+       (tramp-handle-access-file): Rewrite.
+       (tramp-handle-file-readable-p): New defun.
+       (tramp-handle-make-process): Setting :filter to t works since
+       Emacs 29.1 only.
+
+       * test/lisp/net/tramp-tests.el (tramp-test17-insert-directory)
+       (tramp-test18-file-attributes): Extend tests.
+
+2021-10-18  Michael Albinus  <michael.albinus@gmx.de>
+
+       Adapt Tramp manual
+
+       * doc/misc/tramp.texi: Use @uref instead of @url.
+       (Frequently Asked Questions): Adapt ELPA references.
+
+2021-10-18  Martin Rudalics  <rudalics@gmx.at>
+
+       Further fixes to Elisp manual
+
+       * doc/lispref/frames.texi (Frame Layout): Index "tab bar" instead
+       of "internal tab bar".
+       (Implied Frame Resizing): Remove irritating hyphens.
+       * doc/lispref/windows.texi (Windows and Frames): Remove paragraph
+       relating 'minibuffer-window' to 'window-list'.
+
+2021-10-18  Alan Mackenzie  <acm@muc.de>
+
+       * lisp/progmodes/cc-engine.el (c-forward-decl-or-cast-1): check 
type-start
+
+       Check type-start is non-nil at L659 of the function.
+
+2021-10-18  Juri Linkov  <juri@linkov.net>
+
+       Rename tab-bar-drag-maybe to tab-bar--dragging-in-progress
+
+       * lisp/tab-bar.el (tab-bar--event-to-item, tab-bar-mouse-down-1)
+       (tab-bar-mouse-move-tab): Rename tab-bar-drag-maybe to
+       tab-bar--dragging-in-progress.
+
+       * src/xdisp.c (note_mouse_highlight): Rename tab_bar_drag_maybe to
+       tab_bar__dragging_in_progress.
+
+2021-10-18  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix xref elisp identifier namespace mistake
+
+       Pressing `M-.` on ALPHA in
+
+         (let ((ALPHA BETA)) ...)
+
+       would incorrectly search for ALPHA as a function rather than a variable.
+
+       * lisp/progmodes/elisp-mode.el (elisp--xref-infer-namespace): Fix logic.
+       * test/lisp/progmodes/elisp-mode-tests.el
+       (elisp-mode-infer-namespace): Add test case.
+
+2021-10-18  Eli Zaretskii  <eliz@gnu.org>
+
+       Minor fixes for recent changes in ELisp manual
+
+       * doc/lispref/windows.texi (Basic Windows, Windows and Frames)
+       (Selecting Windows):
+       * doc/lispref/objects.texi (Window Type):
+       * doc/lispref/frames.texi (Input Focus, Frame Layout): Fix
+       wording, punctuation, and indexing.
+
+2021-10-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix example in calc manual
+
+       * doc/misc/calc.texi (Arithmetic Tutorial): Fix sign in the
+       example (bug#51265).
+
+2021-10-18  Martin Rudalics  <rudalics@gmx.at>
+
+       Rewrites of Elisp manual including tab-bar and tab-line changes
+
+       * doc/lispref/buffers.texi (Current Buffer, Buffer List): Update
+       references to 'selected-window'.
+       * doc/lispref/elisp.texi (Top): Move up Selecting Windows section
+       in front of Window Sizes section.
+       * doc/lispref/frames.texi (Creating Frames): Say window system
+       instead of windowing system.
+       (Frame Layout): Add Tab Bar to layout.
+       (Layout Parameters): Add 'tab-bar-lines'.
+       (Input Focus): Say window system window instead of window
+       manager window.  Fix reference to 'selected-window'.
+       * doc/lispref/objects.texi (Window Type): Minor rewrite.
+       * doc/lispref/windows.texi (Basic Windows): Rewrite.  Settle on
+       term 'window system window' for disambiguation with our windows.
+       Move 'selected-window' description to Selecting Windows section.
+       Move schematic of window structure here.  Use 'decorations' for
+       objects outside the window body.  Say that the areas reserved
+       for continuation and truncation glyphs, vertical dividers and
+       line numbers are part of the window body.
+       (Windows and Frames): Minor rewrite, adding and fixing some
+       cross references.  Move live window schematic to 'Basic Windows'
+       section.
+       (Selecting Windows): Move section in front of Window Sizes
+       section.  Move description of 'selected-window' here.  Move up
+       description of 'frame-selected-window' and
+       'set-frame-selected-window'.  Update and move description of
+       'window-bump-use-time' here.
+       (Window Sizes): Throughout use the term 'decorations' instead of
+       enumerating them individually.  Add 'window-tab-line-height'
+       description.
+       (Resizing Windows): Again use the term 'decorations' instead of
+       enumerating them individually.
+       (Splitting Windows): Minor fix.
+       (Cyclic Window Ordering): Improve descriptions of 'get-lru-window'
+       and 'get-mru-window'.  Move 'window-bump-use-time' to Selecting
+       Windows section.
+       (Coordinates and Windows, Window Configurations): Once more use
+       the term 'decorations' instead of enumerating them individually.
+       * src/window.c (Fwindow_bump_use_time): Move after
+       'window-use-time'.  Make it work for live windows only.  Make
+       WINDOW argument optional.  Update doc-string.
+
+2021-10-17  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el: Improve docstrings (bug#51247)
+
+       * lisp/tab-bar.el (tab-bar--key-to-number)
+       (tab-bar--event-to-item, tab-bar--format-tab-group)
+       (tab-bar--current-tab-make): Improve docstrings.
+       (switch-to-buffer-other-tab): Obsolete the arg NORECORD.
+
+2021-10-17  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el (tab-bar-mouse-move-tab): Don't drag tab to itself.
+
+2021-10-17  Martin Rudalics  <rudalics@gmx.at>
+
+       Add tab-bar-drag-maybe for indication of tab dragging (bug#50993)
+
+       * lisp/tab-bar.el (tab-bar--event-to-item)
+       (tab-bar-mouse-move-tab): Set tab-bar-drag-maybe to nil.
+       (tab-bar-mouse-down-1): Set tab-bar-drag-maybe to t.
+
+       * src/xdisp.c (note_mouse_highlight): Set cursor to 'hand_cursor'
+       when tab_bar_drag_maybe is true.
+       (syms_of_xdisp): New variable tab-bar-drag-maybe.
+
+2021-10-17  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el: Add a new tab on [mouse-1] instead of [down-mouse-1]
+
+       * lisp/tab-bar.el (tab-bar-mouse-down-1): Rename from
+       tab-bar-mouse-select-tab.  Ignore 'add-tab'.
+       (tab-bar-mouse-1): Rename from tab-bar-mouse-close-tab-from-button.
+       Use binding of 'add-tab'.
+       (tab-bar-map): Rebind [down-mouse-1] from tab-bar-mouse-select-tab to
+       tab-bar-mouse-down-1, and [mouse-1] from 
tab-bar-mouse-close-tab-from-button
+       to tab-bar-mouse-1 (bug#51246).
+
+2021-10-17  Juri Linkov  <juri@linkov.net>
+
+       Add new and fix existing docstrings in tab-bar.el and tab-line.el 
(bug#51247)
+
+       * lisp/tab-bar.el (tab-bar--key-to-number)
+       (tab-bar--event-to-item, tab-bar--format-tab)
+       (tab-bar--format-tab-group, tab-bar--tab, tab-bar--current-tab)
+       (tab-bar--current-tab-make): Add/fix docstrings.
+
+2021-10-17  Po Lu  <luangruo@yahoo.com>
+
+       Add tab bar support to the nextstep port
+
+       * src/nsfns.m (ns_change_tab_bar_height): New function.
+       (ns_set_tab_bar_lines): Check tab bar height and set tab bar
+       accordingly.
+       * src/nsterm.m (ns_clear_under_internal_border): Clear internal border
+       correctly when there is a tab bar.
+       (ns_create_terminal): Add ns_change_tab_bar_height.
+       (mouseDown): Handle tab bar mouse click events.
+
+2021-10-17  Alan Third  <alan@idiocy.org>
+
+       Fix potential buffer overflow (bug#50767)
+
+       * src/image.c (svg_load_image): Check how many bytes were actually
+       written to the buffer.  Don't check xmalloc return value as xmalloc
+       doesn't return if it fails.
+
+2021-10-17  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve doc strings in tab-line.el
+
+       * lisp/tab-line.el (tab-line-tab-name-function)
+       (tab-line-tab-name-truncated-buffer, tab-line-tabs-mode-buffers)
+       (tab-line-tabs-buffer-group-function)
+       (tab-line-tabs-buffer-group-sort-function)
+       (tab-line-tabs-buffer-groups, tab-line-tab-name-format-function)
+       (tab-line-tab-name-format-default, tab-line-format-template)
+       (tab-line-tab-face-inactive-alternating)
+       (tab-line-tab-face-special, tab-line-tab-face-modified)
+       (tab-line-format, tab-line-auto-hscroll, tab-line-hscroll-right)
+       (tab-line-hscroll-left, tab-line-new-tab, tab-line-select-tab)
+       (tab-line-switch-to-prev-tab, tab-line-switch-to-next-tab)
+       (tab-line-close-tab-function, tab-line-close-tab)
+       (tab-line-tab-context-menu, tab-line-context-menu)
+       (tab-line-mode, tab-line-exclude-modes, tab-line-mode--turn-on):
+       Add or fix doc strings.
+
+2021-10-17  Eli Zaretskii  <eliz@gnu.org>
+
+       More documentation fixes in tab-bar.el
+
+       * lisp/tab-bar.el (tab-bar-detach-tab, tab-bar-move-window-to-tab)
+       (tab-bar-new-tab-to, tab-bar-new-tab, tab-bar-close-tab-select)
+       (tab-bar-close-last-tab-choice, tab-bar-tab-pre-close-functions)
+       (tab-bar-close-tab, tab-bar-close-tab-by-name)
+       (tab-bar-close-other-tabs, tab-bar-rename-tab)
+       (tab-bar-rename-tab-by-name, tab-bar-move-tab-to-group)
+       (tab-bar-change-tab-group, tab-bar-close-group-tabs)
+       (tab-switcher-next-line, tab-switcher-prev-line)
+       (tab-switcher-unmark, tab-switcher-delete, tab-switcher-select)
+       (tab-bar-get-buffer-tab, display-buffer-in-tab)
+       (display-buffer-in-new-tab, switch-to-buffer-other-tab)
+       (find-file-other-tab, find-file-read-only-other-tab): Doc fixes.
+
+2021-10-17  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve doc strings of tab-bar commands
+
+       * lisp/tab-bar.el (tab-bar-mouse-select-tab)
+       (tab-bar-mouse-move-tab, tab-bar-mouse-close-tab-from-button)
+       (tab-bar-mouse-close-tab, tab-bar-mouse-context-menu)
+       (tab-bar-switch-to-next-tab, tab-bar-switch-to-prev-tab)
+       (tab-bar-switch-to-last-tab, tab-bar-switch-to-recent-tab)
+       (tab-bar-move-tab-backward, tab-bar-move-tab)
+       (tab-bar-move-tab-to-frame): Add/fix doc strings.
+
+2021-10-17  Stefan Kangas  <stefan@marxist.se>
+
+       Fix a semantic test on some macOS machines
+
+       * test/lisp/cedet/semantic/bovine/gcc-tests.el
+       (semantic-gcc-test-output-parser-this-machine): Fix test on some macOS
+       machines where running "gcc" runs "llvm" instead.
+
+2021-10-16  Kyle Meyer  <kyle@kyleam.com>
+
+       Update to Org 9.5-57-g9bc3a2
+
+2021-10-16  Stefan Kangas  <stefan@marxist.se>
+
+       Recommend against using uce.el
+
+       * lisp/mail/uce.el: Recommend against its use.  (Bug#46472)
+       Do not merge to master.
+
+2021-10-16  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid aborts when a thread is signaled while "waiting for input".
+
+       * src/process.c (kbd_is_ours): New function.
+       (wait_reading_process_output): Set 'waiting_for_input' only if the
+       current thread is monitoring the keyboard descriptor.  See also
+       https://lists.gnu.org/archive/html/emacs-devel/2021-10/msg01180.html.
+       (Bug#51229)
+
+2021-10-16  Philipp Stephani  <phst@google.com>
+
+       Improve documentation string for 'compilation-error-regexp-alist'.
+
+       * lisp/progmodes/compile.el (compilation-error-regexp-alist): Clarify
+       behavior when TYPE is a cons cell.
+
+2021-10-16  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (comp-trampoline-compile): Fix target dir.
+
+2021-10-16  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix removal of fringe indication of bookmarks
+
+       * lisp/bookmark.el (bookmark--remove-fringe-mark): Fix off-by-one
+       error in looking for bookmark-related overlays.  (Bug#51233)
+
+2021-10-15  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer "graphical displays" to "X terminals" in documentation
+
+       * doc/lispref/objects.texi (Ctl-Char Syntax): Fix incorrect remark;
+       some text terminals can generate ASCII control characters.
+       (Other Char Bits):
+       * lisp/bindings.el:
+       * lisp/gnus/gnus-undo.el (gnus-undo-mode-map): Say "graphical display"
+       and "GUI display" instead of "X terminal"; the latter term is
+       archaic.  (Bug#51217)
+
+2021-10-15  Michael Albinus  <michael.albinus@gmx.de>
+
+       Precise documentation of file-notify-add-watch
+
+       * doc/lispref/os.texi (File Notifications):
+       * lisp/filenotify.el (file-notify-add-watch): Precise, that
+       watching a directory includes reports on file changes for some
+       backends.  (Bug#51146)
+
+2021-10-15  Martin Rudalics  <rudalics@gmx.at>
+
+       Fixes to account for windows' tab lines
+
+       * doc/lispref/display.texi (Size of Displayed Text): Fix entry
+       on 'window-text-pixel-size'.
+       * lisp/window.el (window--dump-window): Dump tab-line-height and
+       scroll-bar-height too.
+       (window--min-size-1): Take 'window-tab-line-height' into account.
+       * src/xdisp.c (Fwindow_text_pixel_size): Fix doc-string of
+       'window-text-pixel-size'.  Rename last argument to 'MODE-LINES'.
+
+2021-10-15  Andrea Corallo  <akrl@sdf.org>
+
+       Fix `native-compile-target-directory' effectiveness on trampolines
+
+       * lisp/emacs-lisp/comp.el (comp-trampoline-compile): Fix
+       `native-compile-target-directory' effectiveness on trampoline
+       compilation.
+
+2021-10-15  Jan Synacek  <jan.synacek@gmail.com>
+
+       Add missing single quotes in the Emacs manual
+
+       * lisp/mwheel.el (mouse-wheel-scroll-amount): Add missing single
+       quotes.  (Bug#51223)
+
+2021-10-15  Juri Linkov  <juri@linkov.net>
+
+       * lisp/menu-bar.el (yank-menu-length): Fix docstring (bug#51138).
+
+2021-10-14  Michael Albinus  <michael.albinus@gmx.de>
+
+       Accept process-filter t in Tramp
+
+       * lisp/net/tramp.el (tramp-handle-make-process):
+       * lisp/net/tramp-adb.el (tramp-adb-handle-make-process):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-make-process): Filter can be t.
+
+       * test/lisp/net/tramp-tests.el (tramp-test29-start-file-process)
+       (tramp-test30-make-process): Test filter equal t.
+
+2021-10-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Document the t value for set-process-filter in the manual
+
+       * doc/lispref/processes.texi (Filter Functions): Mention what t
+       means (bug#51177).
+
+2021-10-14  Michael Albinus  <michael.albinus@gmx.de>
+
+       * doc/misc/tramp.texi (Frequently Asked Questions): Add reference
+
+       to ELPA Installation node.
+
+2021-10-14  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix Help functions for clicks on tool bar and tab bar
+
+       * lisp/mouse.el (mouse-minibuffer-check): Don't assume posn-window
+       returns a window.  (Bug#5199)
+
+2021-10-14  Martin Rudalics  <rudalics@gmx.at>
+
+       In make_lispy_position fix Bug#50993 in rudimentary fashion
+
+       * src/keyboard.c (make_lispy_position): Do not set posn to
+       tool- or tab-bar when track_mouse is enabled (Bug#50993).
+
+2021-10-14  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Mark vc-switch-backend as obsolete
+
+       * etc/NEWS: Mention the change.
+
+       * lisp/vc/vc.el (vc-switch-backend): Mark as obsolete (bug#50344).
+       (vc-transfer-file): Wrap the calls in 'with-suppressed-warnings'.
+
+2021-10-14  Yan  <yan@metatem.net>  (tiny change)
+
+       Add missing parentheses in the Emacs manual
+
+       * doc/emacs/maintaining.texi (Xref Commands): Add missing
+       parentheses (bug#51195).
+
+2021-10-14  Stefan Kangas  <stefan@marxist.se>
+
+       Improve tooltip of mode-line-position again
+
+       * lisp/bindings.el (mode-line-position): Improve tooltip again.
+       This change was discussed in
+       https://lists.gnu.org/r/emacs-devel/2021-10/msg00952.html
+
+2021-10-13  Philip Kaludercic  <philipk@posteo.net>
+
+       Use browse-url-button-regexp for rcirc-url-regexp
+
+       * lisp/net/rcirc.el (rcirc-url-regexp): Copy improved regexp from
+       browse-url
+
+2021-10-13  Juri Linkov  <juri@linkov.net>
+
+       * lisp/help.el (help--analyze-key): Avoid mouse-set-point for non-mouse 
events
+
+       (bug#51173)
+
+2021-10-13  Michael Albinus  <michael.albinus@gmx.de>
+
+       Tramp doc cleanup
+
+       * doc/misc/tramp.texi (Overview, Bug Reports)
+       (Frequently Asked Questions): Stylistic changes.
+       (Bug Reports): Mention tramp buffers appended to bug report.
+
+2021-10-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make emacs-lisp-byte-compile-and-load load the .elc file again
+
+       * lisp/progmodes/elisp-mode.el (emacs-lisp-byte-compile-and-load):
+       Load the compiled file instead of the source (bug#51180).
+
+2021-10-13  Peter Münster  <pm@a16n.net>
+
+       Fix point movement in image-dired
+
+       * lisp/image-dired.el (image-dired-thumb-file-marked-p): Don't
+       move point in associated dired buffer.
+       (image-dired-delete-marked): Revert "Fix deletion of associated image"
+       because it was wrong and introduced another problem (bug#51152).
+
+2021-10-13  Stefan Kangas  <stefan@marxist.se>
+
+       Improve shortdoc for vector
+
+       * lisp/emacs-lisp/shortdoc.el (vector): Improve shortdoc with titles.
+       Add mapc.  Fix typo where 'seq-reduce' is incorrectly written as
+       'reduce'.
+
+2021-10-13  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix test bug when calloc returns null
+
+       * test/src/emacs-module-resources/mod-test.c (Fmod_test_userptr_make):
+       Don’t dump core if calloc returns null and signal_errno returns.
+
+2021-10-12  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Pacify GCC 11 -fanalyzer on x86-64
+
+       * src/buffer.c (fix_overlays_before):
+       Redo slightly to work around GCC bug 102692
+       <https://gcc.gnu.org/bugzilla//show_bug.cgi?id=102692>.
+
+2021-10-12  Gregory Heytings  <gregory@heytings.org>
+
+       Improve handling of non-character events in input methods
+
+       * lisp/international/quail.el (quail-add-unread-command-events):
+       Handle non-vector event arguments.  Fixes bug#51118.
+
+2021-10-12  Martin Rudalics  <rudalics@gmx.at>
+
+       In Fdelete_other_windows_internal fix new total window sizes (Bug#51007)
+
+       * src/window.c (Fdelete_other_windows_internal): Assign the
+       new total sizes of windows _after_ the new window configuration
+       is in place (Bug#51007).
+
+2021-10-12  Stephen Gildea  <stepheng+emacs@gildea.com>
+
+       * lisp/mh-e/mh-show.el (mh-junk-whitelist): Custom obsolescence message.
+
+2021-10-11  João Távora  <joaotavora@gmail.com>
+
+       Don't apply shorthands to punctuation-only symbols (bug#51089)
+
+       This includes symbols used for arithmetic functions such as -, /=,
+       etc.  Using "-" or "/=" is still possible but doing so won't shadow
+       those functions.
+
+       * doc/lispref/symbols.texi (Shorthand, Exceptions): New
+       subsubsection.
+
+       * src/lread.c (read1): Exempt punctionation-only symbols from
+       oblookup_considering_shorthand.
+
+       * test/lisp/progmodes/elisp-mode-tests.el
+       (elisp-dont-shadow-punctuation-only-symbols): Tweak test.
+
+2021-10-11  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/progmodes/python.el: Bump package version to 0.28.
+
+2021-10-11  Stefan Kangas  <stefan@marxist.se>
+
+       Fontify "print" and "exec" as functions in python-mode
+
+       This change was first made on master, but on closer consideration it
+       is better to fix this bug already in Emacs 28.1.
+
+       * lisp/progmodes/python.el (python-font-lock-keywords-level-2):
+       Fontify "print" and "exec" as functions, which is the case in
+       Python 3.  (Bug#43298)  Do not merge to master.
+
+2021-10-11  Juri Linkov  <juri@linkov.net>
+
+       Copy parent face attributes to tab-line-tab-current instead of 
inheriting face
+
+       * lisp/tab-line.el (tab-line-tab-current): Don't inherit face from
+       'tab-line-tab' to not inherit the face attribute :height from 
'tab-line',
+       because :height of mouse-face is added to the base face.
+       Copy here most of the parent face attributes (bug#50798).
+
+2021-10-11  Martin Rudalics  <rudalics@gmx.at>
+
+       Another fix for 'ibuffer-shrink-to-fit' (Bug#7218, Bug#51029)
+
+       * lisp/ibuffer.el (ibuffer-shrink-to-fit): Fit window only if its
+       buffer is in 'ibuffer-mode' (Bug#7218, Bug#51029).
+
+2021-10-11  Michael Albinus  <michael.albinus@gmx.de>
+
+       Backport: * doc/misc/tramp.texi (Bug Reports): Describe, how to 
activate ELPA Tramp.
+
+       (cherry picked from commit 978e5339e0d4ef98575096bcf3ec2061ad530f27)
+
+2021-10-11  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Work around GCC bug 102671
+
+       This is for --enable-gcc-warnings on GCC 11.2.1.
+       * src/window.c, src/timefns.c: Disable -Wanalyzer-null-dereference.
+
+2021-10-11  Amin Bandali  <bandali@gnu.org>
+
+       Release ERC 5.4
+
+       * lisp/erc/erc.el (Version, erc-version): Bump to 5.4.
+       (customize-package-emacs-version-alist): Add entry for 5.4.
+
+2021-10-11  Amin Bandali  <bandali@gnu.org>
+
+       * etc/ERC-NEWS: Announce ERC's addition to GNU ELPA.
+
+       * etc/ERC-NEWS: Fix outline level for the recent additions.
+
+2021-10-11  Amin Bandali  <bandali@gnu.org>
+
+       Add ERC entries for 'customize-package-emacs-version-alist'
+
+       * lisp/erc/erc.el (customize-package-emacs-version-alist): Add entries
+       for existing ERC versions.
+
+2021-10-11  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Expand the full file name
+
+       * lisp/vc/vc-git.el (vc-git--literal-pathspec):
+       Expand the full file name, not just the local part (bug#51112).
+
+2021-10-11  Stefan Kangas  <stefan@marxist.se>
+
+       Obsolete XEmacs compat convention in 'erc-button-press-button'
+
+       * lisp/erc/erc-button.el (erc-button-press-button): Advertise new
+       calling convention without XEmacs compatibility.
+
+2021-10-11  F. Jason Park  <jp@neverwas.me>
+
+       Backport: Add ERC version to protocol log
+
+       * lisp/erc/erc.el (erc-toggle-debug-irc-protocol): Include the erc
+       version in the debug logs (bug#51107).
+
+       (cherry picked from commit 13411346202f86e950bee076a5d528e98695fbb4)
+
+2021-10-11  Eli Zaretskii  <eliz@gnu.org>
+
+       Adapt the recent 'num_processors' change to MS-Windows
+
+       * nt/gnulib-cfg.mk (OMIT_GNULIB_MODULE_nproc): Omit nproc.
+
+       * src/w32.c (num_processors): New function.
+       * src/w32proc.c (Fw32_get_nproc): Remove.
+
+2021-10-11  Stefan Kangas  <stefan@marxist.se>
+
+       Minor fix to clarify a sentence in emacs-lisp-intro
+
+       * doc/lispintro/emacs-lisp-intro.texi (Simple Extension): Add the word
+       "that" for clarity.  (Bug#43965)
+
+2021-10-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make tty-run-terminal-initialization load the .elc file (if any)
+
+       * lisp/faces.el (tty-run-terminal-initialization):
+       `locate-library' may have found the .el.gz file (bug#51116).
+
+2021-10-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix ert errors when there's a test that binds `debug-on-error'
+
+       * lisp/emacs-lisp/ert.el (ert--run-test-internal): Don't infloop
+       on errors when signalling errors (bug#51131).
+
+2021-10-10  Paul Eggert  <eggert@cs.ucla.edu>
+
+       New function num-processors
+
+       This addresses a FIXME comment in lisp/emacs-lisp/comp.el,
+       relating to the number of subsidiary processes used by
+       comp-run-async-workers in native compilation.
+       * admin/merge-gnulib (GNULIB_MODULES): Add nproc.
+       * doc/lispref/processes.texi (Process Information), etc/NEWS:
+       Document num-processors.
+       * lib/gnulib.mk.in, m4/gnulib-comp.m4: Regenerate.
+       * lib/nproc.c, lib/nproc.h, m4/nproc.m4:
+       New files, copied from Gnulib by admin/merge-gnulib.
+       * lisp/emacs-lisp/comp.el (w32-get-nproc): Remove decl.
+       (comp-effective-async-max-jobs): Use num-processors.
+       * src/process.c: Include nproc.h.
+       (Fnum_processors): New function.
+       (syms_of_process): Define ‘all’, ‘current’, ‘num-processors’.
+       * src/w32proc.c (Fw32_get_nproc): Add FIXME comment.
+       * test/src/process-tests.el (process-num-processors): New test.
+
+2021-10-10  Juri Linkov  <juri@linkov.net>
+
+       Add symbol property 'save-some-buffers-function' (bug#46374)
+
+       * lisp/files.el (save-some-buffers-root): Put non-nil
+       symbol property 'save-some-buffers-function'.
+       (save-some-buffers): Check pred for the
+       symbol property 'save-some-buffers-function'.
+       (save-some-buffers-default-predicate): Mention
+       symbol property 'save-some-buffers-function'.
+
+2021-10-10  Juri Linkov  <juri@linkov.net>
+
+       Keep reading when typed RET in read-char-from-minibuffer and y-or-n-p
+
+       * lisp/subr.el (read-char-from-minibuffer-map):
+       Remap exit-minibuffer to read-char-from-minibuffer-insert-other.
+       (y-or-n-p-map): Remap 'exit' to y-or-n-p-insert-other.
+       (y-or-n-p): Don't mention RET in docstring.  (Bug#51101)
+
+2021-10-10  David M. Koppelman  <koppel@ece.lsu.edu>
+
+       * lisp/userlock.el (ask-user-about-supersession-threat): Accept 'y' 
strictly.
+
+       (Bug#51101)
+
+2021-10-10  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix point positioning on mouse clicks with non-zero line-height
+
+       * src/xdisp.c (move_it_to): After passing a newline, reset
+       it->override_ascent, like 'display_line' does (in
+       'append_space_for_newline').  (Bug#51111)
+
+2021-10-10  João Távora  <joaotavora@gmail.com>
+
+       Complete shorthands to longhands for symbol-completing tables
+
+       Shorthands aren't symbols, they're text forms that 'read' into
+       symbols.  As such, shorthands aren't candidates in these tables of
+       symbols.  But in some situations, if no other candidates match the
+       pattern, we can e.g. complete "x-foo" to "xavier-foo" if the shorthand
+
+         (("x-" . "xavier-"))
+
+       is set up in the buffer of origin.
+
+       bug#50959
+
+       * lisp/help-fns.el (help--symbol-completion-table): Report
+       `symbol-help' category.
+
+       * lisp/minibuffer.el (completion-styles-alist): New 'shorthand'
+       style.
+       (completion-category-defaults): Link 'symbol-help' category with
+       'shorthand' style.
+       (minibuffer--original-buffer): New variable.
+       (completing-read-default): Setup minibuffer--original-buffer.
+       (completion-shorthand-try-completion)
+       (completion-shorthand-all-completions): New helpers.
+
+2021-10-10  João Távora  <joaotavora@gmail.com>
+
+       Add new failing test for bug#51089
+
+       * test/lisp/progmodes/elisp-mode-tests.el
+       (elisp-dont-shadow-punctuation-only-symbols): Add new failing test.
+
+2021-10-10  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Avoid mapping file names through 'substring'
+
+       * lisp/progmodes/project.el (project--files-in-directory):
+       Avoid mapping file names through 'substring'.  Reducing the amount
+       of garbage generated.  Better perf by up to 20%.
+       Bump the package version.
+
+2021-10-09  Kyle Meyer  <kyle@kyleam.com>
+
+       Update to Org 9.5-46-gb71474
+
+2021-10-09  Stephen Gildea  <stepheng+emacs@gildea.com>
+
+       Expanded testing of MH-E with multiple MH variants
+
+       * test/lisp/mh-e/mh-utils-tests.el: Environment variable TEST_MH_PATH
+       controls which installed MH variant to test with.  Moved the commentary
+       about testing with different MH variants from above 'with-mh-test-env'
+       definition to "Commentary" section at the top of the file.
+       * test/lisp/mh-e/test-all-mh-variants.sh: New script to test all
+       installed MH variants.
+
+2021-10-09  Philipp Stephani  <phst@google.com>
+
+       Fix Seccomp filter for newer GNU/Linux systems (Bug#51073).
+
+       On some systems, process startup calls prctl(PR_CAPBSET_READ) via
+       'cap_get_bound'.  We can just return EINVAL.
+
+       * lib-src/seccomp-filter.c (main): Add a rule for
+       prctl(PR_CAPBSET_READ, ...).
+
+2021-10-09  Michael Albinus  <michael.albinus@gmx.de>
+
+       Tramp code cleanup
+
+       * lisp/net/tramp.el (tramp-remote-path): Adapt docstring.
+       (tramp-action-login, tramp-action-password, tramp-action-yesno)
+       (tramp-action-yn, tramp-process-actions): Move let-binding of
+       `enable-recursive-minibuffers' up.
+       (tramp-handle-make-process, tramp-handle-write-region):
+       * lisp/net/tramp-adb.el (tramp-adb-handle-write-region)
+       (tramp-adb-handle-make-process):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-make-process)
+       (tramp-sh-handle-write-region):
+       * lisp/net/tramp-smb.el (tramp-smb-handle-write-region):
+       * lisp/net/tramp-sshfs.el (tramp-sshfs-handle-write-region):
+       Use `string-or-null-p'.
+
+2021-10-09  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix thinko in ls-lisp--insert-directory
+
+       * lisp/ls-lisp.el (ls-lisp--insert-directory): Ensure that
+       SWITCHES is a string.
+
+2021-10-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention that RET means "yes" in y-or-n-p
+
+       * lisp/subr.el (y-or-n-p): Mention that RET also means yes (bug#51101).
+
+2021-10-09  Eli Zaretskii  <eliz@gnu.org>
+
+       Rewrite Antinews for Emacs 28
+
+       * doc/lispref/anti.texi (Antinews):
+       * doc/emacs/anti.texi (Antinews): Rewrite for Emacs 28.
+       * doc/lispref/elisp.texi (Top):
+       * doc/emacs/emacs.texi (Top): Update menu accordingly.
+
+2021-10-09  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/bindings.el (mode-line-position): Improve tooltip.
+
+2021-10-09  Dmitry Gutov  <dgutov@yandex.ru>
+
+       * lisp/progmodes/xref.el: Bump the version.
+
+2021-10-09  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Slight simplificaiton
+
+       * lisp/progmodes/xref.el (xref--insert-xrefs):
+       Compute log only once.  Use 'dolist'.
+
+2021-10-08  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix doc strings of 2 categories
+
+       * lisp/international/characters.el (?R, ?L): Make the first line
+       of the categories' doc string shorter, to fit into 15 columns.
+
+2021-10-08  Dmitry Gutov  <dgutov@yandex.ru>
+
+       (xref--collect-matches-1): Remove some intermediate allocations
+
+       * lisp/progmodes/xref.el: (xref--collect-matches-1):
+       Rewrite to remove some intermediate allocations.
+       Modest performance improvement.
+
+2021-10-08  Arash Esbati  <arash@gnu.org>
+
+       Use the correct label in the warning
+
+       * lisp/textmodes/reftex-toc.el (reftex-toc-rename-label): Add
+       missing space in the prompt.  Use the new user defined label in
+       the warning (bug#36235).
+
+2021-10-08  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Add Emacs 27 compatibility hack
+
+       * lisp/progmodes/xref.el: Add Emacs 27 compatibility hack, for the
+       standalone version of this package.
+
+2021-10-07  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Pacify GCC 10.3 -Wmaybe-uninitialized
+
+       Problem reported by Basil L. Contovounesios (Bug#51075).
+       * src/term.c (encode_terminal_code):
+       Add an UNINIT to pacify GCC 10 bug.
+
+2021-10-07  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el (tab-detach, tab-window-detach): New aliases.
+
+       (tab-bar-mouse-context-menu, tab-bar-duplicate-tab):
+       Use word "clone" in help/doc string.
+
+2021-10-07  Eli Zaretskii  <eliz@gnu.org>
+
+       Include the refcards in the release tarball
+
+       * make-dist (possibly_non_vc_files): Include *.pdf files, to
+       include the produced refcards in the tarball.  This was lost when
+       'make-dist' was rewritten for Emacs 27.
+
+2021-10-07  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Backport: * lisp/net/tramp-archive.el 
(tramp-archive-autoload-file-name-handler): Scope
+
+       Fix the scoping of `tramp-archive-enabled`.
+
+       (cherry picked from commit 8d53c23f90aab6e527c61137ae43274c7a36eca7)
+
+2021-10-07  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation and customization of 'blink-matching-paren'
+
+       * lisp/simple.el (blink-matching-paren): Fix the wording of the
+       doc string and the descriptions in the value menu.  (Bug#51032)
+
+2021-10-07  Amin Bandali  <bandali@gnu.org>
+
+       * lisp/erc/erc.el: Don't error if 'erc-loaddefs' does not exist.
+
+       That autoload file is created as part of the Emacs compilation
+       process, however we would like ERC to be usable if used outside
+       emacs.git (e.g. if installed from GNU ELPA).
+
+2021-10-07  Amin Bandali  <bandali@gnu.org>
+
+       Add 'erc-bug' command for reporting ERC bugs
+
+       * etc/ERC-NEWS: Announce the new command, and mention it at the top of
+       the file along with 'report-emacs-bug'.
+       * lisp/erc/erc.el (erc-bug): New command for reporting ERC bugs.  It
+       prompts for a subject, and passes it on to 'report-emacs-bug' along
+       with the current ERC version, with the ERC mailing list in Cc.
+
+2021-10-07  Amin Bandali  <bandali@gnu.org>
+
+       Add 'erc-version' and use it to display ERC version consistently
+
+       * lisp/erc/erc.el (erc-version): New constant holding the current ERC
+       version, now used in the function with the same name to produce a
+       version string for use across ERC for consistency.  Also, add another
+       optional argument, 'bold-erc', which when non-nil, marks the "ERC"
+       portion of the string with the control character for bold display.
+       (erc-quit/part-reason-default): Use the 'erc-version' function for a
+       consistent version string.
+       (erc-cmd-SV): Mention the ERC version number from the 'erc-version'
+       constant.
+       (erc-ctcp-query-VERSION): Use the 'erc-version' function for a
+       consistent version string.
+
+2021-10-07  Amin Bandali  <bandali@gnu.org>
+
+       Small tweaks and improvements to etc/ERC-NEWS
+
+       * etc/ERC-NEWS: Small tweaks inspired by etc/NEWS, namely to add a
+       descriptive blurb at the top of the file to explain what it is about
+       and how to report ERC bugs, add a form feed before the section for
+       every release, and set the same Local Variables that etc/NEWS does.
+
+2021-10-07  Amin Bandali  <bandali@gnu.org>
+
+       Add NEWS items for changes to ERC since 5.3 to etc/ERC-NEWS
+
+       * etc/ERC-NEWS: copy ERC NEWS items from etc/NEWS, etc/NEWS.27,
+       etc/NEWS.26, etc/NEWS.25, and etc/NEWS.24 to here.  Future ERC NEWS
+       are also to be added here.  This is in motivated by preparation for
+       addition of ERC to GNU ELPA, along with the ERC manual and NEWS.
+       * etc/NEWS: remove ERC-related entries, and refer the reader to
+       ERC-NEWS instead.
+
+2021-10-06  Juri Linkov  <juri@linkov.net>
+
+       Clone the frame window configuration in 'clone-frame'
+
+       * doc/emacs/frames.texi (Creating Frames): Mention the cloned
+       window configuration for clone-frame.
+
+       * lisp/frame.el (clone-frame): Change second arg to 'no-windows'
+       and clone window configuration when it's nil.
+
+       * lisp/tab-bar.el (tab-bar-mouse-context-menu)
+       (tab-bar-detach-tab): Replace "Detach" with "Move" in help/doc strings.
+
+       https://lists.gnu.org/archive/html/emacs-devel/2021-10/msg00408.html
+
+2021-10-06  Eli Zaretskii  <eliz@gnu.org>
+
+       * lisp/tool-bar.el (tool-bar-position): Doc fix.
+
+2021-10-06  Philip Kaludercic  <philipk@posteo.net>
+
+       * NEWS: Mention rcirc connects to #emacs by default
+
+2021-10-06  Stephen Gildea  <stepheng+emacs@gildea.com>
+
+       Refactor mh-utils-tests macro 'with-mh-test-env'
+
+       * test/lisp/mh-e/mh-utils-tests.el (with-mh-test-env): Refactor to
+       reduce the size of the expanded macro.
+       (mh-test-utils-setup): New helper function.
+       (mh-ensure-native-trampolines): Absorbed by mh-test-utils-setup.
+
+2021-10-05  Stefan Kangas  <stefan@marxist.se>
+
+       Avoid using variable before it has been initialized
+
+       * lisp/ibuffer.el (ibuffer-shrink-to-fit): Don't try to use
+       ibuffer-auto-mode variable before ibuf-ext.el has been loaded.
+       (Bug#51029)
+
+2021-10-05  Stefan Kangas  <stefan@marxist.se>
+
+       Clarify docstring of blink-matching-paren
+
+       * lisp/simple.el (blink-matching-paren): Clarify
+       docstring.  (Bug#51032)
+
+2021-10-05  Stefan Kangas  <stefan@marxist.se>
+
+       * doc/misc/gnus.texi (Loose Threads): Use regexp-opt in example.
+
+2021-10-05  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Bump project.el version
+
+       * lisp/progmodes/project.el: Bump the version.
+
+2021-10-05  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Retain compatibility with older project.el projects
+
+       * lisp/progmodes/xref.el (xref--analyze):
+       Retain compatibility with older project.el and its compatible
+       project definitions (for standalone Xref from ELPA).
+
+2021-10-05  Stephen Gildea  <stepheng+emacs@gildea.com>
+
+       native-comp-available-p is the definitive test
+
+       * doc/lispref/compile.texi (Native Compilation): Document
+       native-comp-available-p as the way to test for native compilation.
+       * lisp/emacs-lisp/package.el (package--native-compile-async):
+       * test/lisp/mh-e/mh-utils-tests.el (mh-ensure-native-trampolines):
+       Test for native compilation with native-comp-available-p.
+
+       Thank you to Andrea Corallo for reviewing this patch.
+
+2021-10-05  Eli Zaretskii  <eliz@gnu.org>
+
+       Minor fix of a recently installed documentation change
+
+       * doc/emacs/search.texi (Lax Search): Don't use ".." inside @samp,
+       it looks confusing, especially in print.  (Bug#51020)
+
+2021-10-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix md5 issue in recent Gnulib merge
+
+       When configured --with-native-compilation, Emacs needs md5_stream.
+       Problem reported by Andy Moreton (Bug#50985#23).
+       * admin/merge-gnulib (GNULIB_MODULES): Add crypto/md5,
+       needed for --with-native-compilation.
+       (AVOIDED_MODULES): Avoid crypto/af_alg, since Emacs doesn’t
+       need to bother with kernel-supported cryptography algorithms.
+       * lib/gnulib.mk.in, m4/gnulib-comp.m4:
+       Regenerate by running admin/merge-gnulib.
+       * lib/md5-stream.c: New file, copied from Gnulib.
+
+2021-10-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Tweak recent 'configure' fix
+
+       * configure.ac (gt_TYPE_WINT_T): Omit obsolete and
+       now-overridden definition.
+
+2021-10-05  Stefan Kangas  <stefan@marxist.se>
+
+       Document minibuffer-default-prompt-format in manual
+
+       * doc/emacs/mini.texi (Basic Minibuffer): Mention
+       minibuffer-default-prompt-format.  (Bug#50935)
+
+2021-10-05  Eli Zaretskii  <eliz@gnu.org>
+
+       Backward compatibility option for 'nobreak-char-display'
+
+       * src/xdisp.c (syms_of_xdisp) <nobreak-char-ascii-display>: New
+       variable.
+       (get_next_display_element): If 'nobreak-char-ascii-display' is
+       non-nil, display non-ASCII space and hyphen characters as their
+       ASCII equivalents.  (Bug#50983)
+
+       * etc/NEWS:
+       * etc/PROBLEMS: Mention 'nobreak-char-ascii-display'.
+
+2021-10-05  Eli Zaretskii  <eliz@gnu.org>
+
+       Unbreak the build after Gnulib update
+
+       * lib/gnulib.mk.in (GNULIBHEADERS_OVERRIDE_WINT_T): Rename from
+       GNULIB_OVERRIDES_WINT_T.
+       * configure.ac (GNULIBHEADERS_OVERRIDE_WINT_T): Define.
+       (Bug#50985)
+
+2021-10-05  Michael Albinus  <michael.albinus@gmx.de>
+
+       Check, whether an FUSE mount has been broken in Tramp
+
+       * lisp/net/tramp-fuse.el (tramp-fuse-mount-timeout): New defconst.
+       (tramp-fuse-mounted-p): Use it.  Check for a file property instead
+       of a connection property.
+       (tramp-fuse-unmount): Dito.
+
+       * lisp/net/tramp-sshfs.el (tramp-sshfs-maybe-open-connection):
+       Do not trust existence of a process, whether the volume is mounted.
+
+2021-10-05  Augusto Stoffel  <arstoffel@gmail.com>
+
+       Disable 'nobreak-char-display' in Eldoc buffers
+
+       * lisp/emacs-lisp/eldoc.el (eldoc--format-doc-buffer): Set
+       'nobreak-char-display' to nil in Eldoc buffers (bug#50989).
+
+2021-10-05  Miha Rihtaršič  <miha@kamnitnik.top>
+
+       Fix small error in comint-send-input
+
+       * lisp/comint.el (comint-send-input): Run
+       comint-output-filter-functions with comint-last-output-start set
+       correctly (bug#51009).
+
+2021-10-05  Daniel Martín  <mardani29@yahoo.es>
+
+       Update documentation of search-whitespace-regexp
+
+       * doc/emacs/search.texi (Lax Search): Update the documentation about
+       the default value of search-whitespace-regexp, as it is now
+       independent of the major mode's syntax table (bug#51020).
+
+2021-10-05  Po Lu via  <emacs-devel@gnu.org>
+
+       Fix cc-compat.el syntax error
+
+       * lisp/obsolete/cc-compat.el (offsets): Fix syntax error in BOCM
+       style setup.
+
+2021-10-05  Tak Kunihiro  <tkk@misasa.okayama-u.ac.jp>
+
+       Mention `seq-uniq' in `delete-dups' documentation
+
+       * doc/lispref/lists.texi (Sets And Lists): Mention `seq-uniq'
+       (bug#50928).
+
+       * lisp/subr.el (delete-dups): Link to `seq-uniq' in doc string.
+
+2021-10-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Port recent Gnulib changes to MS-Windows
+
+       * nt/gnulib-cfg.mk (OMIT_GNULIB_MODULE_free-posix)
+       (OMIT_GNULIB_MODULE_malloc-posix)
+       (OMIT_GNULIB_MODULE_realloc-gnu)
+       (OMIT_GNULIB_MODULE_realloc-posix):
+       New macros, since we don’t want these modules on MS-Windows.
+       * src/w32heap.c (heap_alloc, heap_realloc): New functions.
+       (malloc_after_dump, realloc_after_dump, realloc_before_dump):
+       Use them.
+
+2021-10-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from Gnulib
+
+       Make the following changes by hand, and run 'admin/merge-gnulib'.
+       * .gitignore: Add lib/malloc/*.gl.h.
+       * admin/merge-gnulib: Copy lib/af_alg.h and lib/save-cwd.h
+       directly from Gnulib, without worrying about Gnulib modules,
+       as these files are special cases.
+       (AVOIDED_MODULES): Remove malloc-posix.
+       * lib/malloc.c, lib/realloc.c, m4/malloc.m4, m4/realloc.m4:
+       * m4/year2038.m4: New files, copied from Gnulib.
+       * lib/malloca.c, lib/malloca.h:
+       * m4/close-stream.m4, m4/glibc21.m4, m4/malloca.m4:
+       Remove.  These are either no longer present in Gnulib, or are no
+       longer needed by modules that Emacs uses.
+       * oldXMenu/AddPane.c, oldXMenu/AddSel.c: Include XmenuInt.h first;
+       needed for new Gnulib.
+       * src/xmenu.c: Call emacs_abort, not abort.
+
+2021-10-04  Andrea Corallo  <akrl@sdf.org>
+
+       Fix mh tests for native comp builds (bug#50975)
+
+       * test/lisp/mh-e/mh-utils-tests.el (mh-ensure-native-trampolines):
+       New function.
+       (mh-test-utils-setup-with-mocks)
+       (mh-test-utils-setup-with-variant): Use it.
+
+2021-10-04  Andrea Corallo  <akrl@sdf.org>
+
+       Fix `batch-native-compile' not to spawn a subprocess
+
+       * lisp/emacs-lisp/comp.el (comp-running-batch-compilation): New var.
+       (comp-final): Use it.
+       (batch-native-compile): Bind `comp-running-batch-compilation' it.
+
+2021-10-04  Ken Brown  <kbrown@cornell.edu>
+
+       Fix native-compilation build from tarball on Cygwin
+
+       * src/Makefile.in (../native-lisp) [CYGWIN]: Rebase the *.eln
+       files after they are all created, to avoid fork problems later in
+       the build.  (Bug#50666)
+
+2021-10-04  Robert Pluim  <rpluim@gmail.com>
+
+       Remove U+FE0F from script-representative-chars
+
+       * lisp/international/fontset.el (script-representative-chars): Remove
+       U+FE0F / VS-16 from the 'emoji' entry.  It could cause us to skip
+       fonts that don't have a glyph for it, even though we don't actually
+       need one.
+
+2021-10-04  Robert Pluim  <rpluim@gmail.com>
+
+       Fix problem with 'vertical-motion' and emoji
+
+       * src/font.c (font_range): Pass correct position to
+       font_for_char (Bug#51012).
+
+2021-10-04  Michael Albinus  <michael.albinus@gmx.de>
+
+       * test/README: Mention :nativecomp tag.
+
+2021-10-04  Gregory Heytings  <gregory@heytings.org>
+
+       Avoid exiting when outputting error messages during loadup
+
+       * src/print.c (print_error_message): Don't call
+       'substitute-command-keys' when it isn't fboundp.
+
+2021-10-04  Robert Pluim  <rpluim@gmail.com>
+
+       Remove implemented emoji items
+
+       * etc/TODO: Remove implemented emoji items.
+
+2021-10-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       project.el NEWS tagging
+
+       thing-at-mouse NEWS tagging
+
+2021-10-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention ffap-file-name-with-spaces in the ffap doc strin
+
+       * lisp/ffap.el (find-file-at-point): Mention
+       ffap-file-name-with-spaces in the doc string.
+
+2021-10-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Make info-look search harder for the Python info file"
+
+       This reverts commit 711eb40b9b9e2aabd0e23ec264e8e8f913329d33.
+
+       This leads to loading info-look being excessively slow if the info path 
is long.  It'll be reimplemented in Emacs 29.
+
+2021-10-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Add safety check in x_menu_show
+
+       * src/xmenu.c (x_menu_show): Explicitly check whether save_wv can
+       be null here.  Looks like it can be but I am not 100% sure, so
+       play it safe and add a FIXME comment.
+
+2021-10-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Tweak x_connection_closed when I/O error
+
+       * src/xterm.c (x_connection_closed): Don’t dereference dpyinfo
+       in the unlikely case where it is null and ioerror is true.
+       This pacifies gcc 11.2.1 -Wanalyzer-null-dereference.
+
+2021-10-04  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/erc/erc.el (erc-user-mode): Set "+i" by default.
+
+2021-10-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Port unused decls to C2x
+
+       * src/conf_post.h (ATTRIBUTE_UNUSED): Remove.  All uses replaced
+       by MAYBE_UNUSED, and moved to start as needed for C2x.
+
+2021-10-04  Stefan Kangas  <stefan@marxist.se>
+
+       Improve structure of TODO
+
+       * etc/TODO: Various improvements to the document structure according
+       to discussion with the maintainers.
+
+2021-10-04  Stefan Kangas  <stefan@marxist.se>
+
+       Don't use some obsolete names in documentation
+
+       * admin/notes/bugtracker: Use non-obsolete name
+       'mail-dont-reply-to-names'.
+       * admin/notes/multi-tty: Mention new variable name
+       'x-selection-value'.
+       * doc/lispintro/emacs-lisp-intro.texi (Point and mark)
+       (Point and mark, Design @value{COUNT-WORDS}): Avoid using obsolete
+       name 'count-lines-region'.
+       * doc/lispref/hooks.texi (Standard Hooks): Remove reference to
+       obsolete abnormal hook 'completion-annotate-function'.
+       * doc/misc/efaq.texi (SPC no longer completes file names): Remove
+       reference to obsolete 'minibuffer-local-filename-must-match-map';
+       setting it has no effect.
+       * doc/misc/gnus.texi (NNTP): Remove reference to obsolete variable
+       'nntp-authinfo-file'.
+       * doc/misc/reftex.texi (Table of Contents, Creating Citations)
+       (Options - Table of Contents, Options - Referencing Labels)
+       (Options - Creating Citations, Options - Index Support)
+       (Options - Index Support, Changes): Don't use obsolete names.
+       * doc/misc/speedbar.texi (Minor Display Modes)
+       (Major Display Modes): Make variable name suggestions more in line
+       with existing non-obsolete variable.
+       * lisp/textmodes/reftex-cite.el (reftex-select-bib-mode-map):
+       * lisp/textmodes/reftex-ref.el (reftex-offer-label-menu): Don't use
+       obsolete variable names.
+       * lisp/progmodes/which-func.el (which-func-mode): Doc fix.
+
+2021-10-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Tweak x_hide_tip for consistency
+
+       * src/xfns.c (x_hide_tip, Fx_show_tip): Be consistent about using
+       !NILP (tip_frame) instead of FRAMEP (tip_frame).  The two
+       expressions are logically equivalent since tip_frame is either a
+       frame or nil, !NILP is a bit faster, and making things consistent
+       pacifies gcc 11.2.1 -Wanalyzer-null-dereference.
+
+2021-10-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Remove encode_terminal_code UNINITs
+
+       * src/term.c (encode_terminal_code): Clarify by removing a couple
+       of UNINITs and testing the local variable ‘cmp’ instead of
+       retesting src->u.cmp.automatic.  This pacifies gcc 11.2.1
+       -Wanalyzer-null-dereference.
+
+2021-10-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Port pdumper.c maybe_unused to C2x
+
+       Port pdumper.c to C2x, and pacify gcc 11.2.1 -Wattributes -Wunused.
+       * src/pdumper.c (dump_tailq_prepend):
+       Omit ATTRIBUTE_UNUSED, since it’s always used.
+       (dump_tailq_append): Remove; unused.
+
+2021-10-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Port systhreads.h to C2x
+
+       * src/systhread.h: Put NODISCARD at the start of extern
+       declarations, not at the end.  This is needed by C2x.
+       This patch also pacifies gcc 11.2.1 -Wattributes.
+
+2021-10-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Pacify -Wanalyzer-null-argument in lisp_malloc
+
+       * src/alloc.c (lisp_malloc): Document that NBYTES must be
+       positive, and omit a needless runtime check.  This pacifies a
+       false alarm with gcc 11.2.1 -Wanalyzer-possible-null-dereference.
+
+2021-10-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Pacify gcc 11.2.1 -Wanalyzer-null-argument
+
+       * src/gtkutil.c (xg_item_label_same_p): Clarify boolean expression
+       to pacify -Wanalyzer-null-argument with GCC 11.2.1 20210728
+       (Red Hat 11.2.1-1).
+
+2021-10-04  João Távora  <joaotavora@gmail.com>
+
+       Simplify hack-read-symbol-shorthands again (bug#50946)
+
+       * lisp/loadup.el (load-source-file-function): Don't set twice.
+
+       * lisp/shorthands.el (hack-read-symbol-shorthands): Simplify.
+       (load-with-shorthands-and-code-conversion): Remove.
+
+       * lisp/international/mule.el (load-with-code-conversion): Call
+       hack-read-symbol-shorthands-function.  Set up shorthands.
+       (hack-read-symbol-shorthands-function): New variable.
+
+2021-10-03  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix recipe for 'native-lisp' directory
+
+       * src/Makefile.in (../native-lisp): If the directory native-lisp
+       exists, do nothing.
+
+2021-10-03  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Simplify socket symlink-attack checking
+
+       This is a minor bugfix cleanup (Bug#33847#161).
+       * lib-src/emacsclient.c: Move "#include <acl.h>" to inside
+       "#ifdef SOCKETS_IN_FILE_SYSTEM", which is more accurate
+       and simpler than having a separate "#ifndef WINDOWSNT".
+       (O_PATH): Likewise.
+
+2021-10-03  Alan Mackenzie  <acm@muc.de>
+
+       Clarify (elisp) insert-file-contents with BEG or END not on character 
boundary
+
+       * doc/lispref/files.texi (Reading from files): When the argument BEG or 
END to
+       insert-file-contents are at a byte position not at a character boundary,
+       clarify that raw bytes get inserted, and how to handle this awkwardness 
in
+       Lisp.  Also clarify that insert-file-contents-literally is intended to 
insert
+       raw bytes into the buffer.  Fix the outdated example that states it 
inserts
+       500 characters, when it actually inserts 500 bytes.
+
+2021-10-03  Andreas Schwab  <schwab@linux-m68k.org>
+
+       * src/Makefile.in: Simplify conditionals.
+
+2021-10-03  Juri Linkov  <juri@linkov.net>
+
+       Move context-menu selection items Defun/List/Symbol to prog-mode 
(bug#9054)
+
+       * lisp/mouse.el (context-menu-functions):
+       Add context-menu-middle-separator to choices.
+       (context-menu-region): Move Defun/List/Symbol selection items
+       to prog-context-menu.
+
+       * lisp/progmodes/prog-mode.el (prog-context-menu):
+       Move Defun/List/Symbol selection items from context-menu-region.
+       Include text-mode select menu only in strings and comments.
+
+       * lisp/textmodes/text-mode.el (text-mode-menu): New function.
+       (text-mode): Add text-mode-menu to context-menu-functions.
+
+2021-10-03  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el (tab-bar-detach-tab): Handle frame selected by 
make-frame.
+
+       (tab-bar-move-window-to-tab): New command.
+       (tab-bar-new-tab-to): Handle the value 'window' of 
tab-bar-new-tab-choice.
+       https://lists.gnu.org/archive/html/emacs-devel/2021-09/msg02197.html
+
+2021-10-03  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-line.el (tab-line-format): Add face-modified to the cache 
key.
+
+       When tab-line-tab-face-functions contains tab-line-tab-face-modified,
+       add 'buffer-modified-p' status to the cache-key, so the cache will 
expire
+       when the buffer modification status will change.
+       https://lists.gnu.org/archive/html/emacs-devel/2021-10/msg00129.html
+
+2021-10-03  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix unmounting in Tramp
+
+       * doc/misc/tramp.texi (FUSE setup): Add tramp-fuse-unmount-on-cleanup.
+
+       * lisp/net/tramp.el (tramp-file-name-unify): New defun.
+       (tramp-file-name-equal-p):
+       * lisp/net/tramp-cache.el (tramp-get-connection-property)
+       (tramp-set-connection-property, tramp-flush-connection-property)
+       (tramp-flush-connection-properties): Use it.
+
+       * lisp/net/tramp-fuse.el (tramp-fuse-get-fusermount): New defun.
+       (tramp-fuse-mount-points): New defvar.
+       (tramp-fuse-unmount): Use it.  Delete VEC from
+       `tramp-fuse-mount-points'.  Delete mount point.
+       (tramp-fuse-unmount-on-cleanup): New user option.
+       (tramp-fuse-cleanup, tramp-fuse-cleanup-all): New defuns.
+       (top): Adapt `tramp-fuse-unload-hook',
+       `tramp-cleanup-connection-hook',
+       `tramp-cleanup-all-connections-hook' and `kill-emacs-hook'.
+
+       * lisp/net/tramp-rclone.el (tramp-rclone-maybe-open-connection):
+       * lisp/net/tramp-sshfs.el (tramp-sshfs-maybe-open-connection):
+       Add VEC to `tramp-fuse-mount-points'.
+
+       * test/lisp/net/tramp-tests.el (tramp-fuse-unmount-on-cleanup): Declare.
+       (tramp-test39-make-lock-file-name): Use it.
+
+2021-10-03  Stefan Kangas  <stefan@marxist.se>
+
+       * etc/themes/light-blue-theme.el: Add "Maintainer: emacs-devel".
+
+2021-10-03  Eli Zaretskii  <eliz@gnu.org>
+
+       Define HAVE_NATIVE_COMP in src/Makefile.in
+
+       * src/Makefile.in (HAVE_NATIVE_COMP): Define.  Reported by Ken
+       Brown <kbrown@cornell.edu>.
+
+2021-10-03  João Távora  <joaotavora@gmail.com>
+
+       Rename elisp-shorthands to read-symbol-shorthands
+
+       The new name fits better in the family of variables that affect
+       the Lisp reader.
+
+       Suggested-by: Po Lu <luangruo@yahoo.com>
+
+       * doc/lispref/symbols.texi (Shorthands): Mention read-symbol-shorthands
+
+       * lisp/shorthands.el (hack-read-symbol-shorthands)
+       (hack-read-symbol-shorthands)
+       (shorthands-font-lock-shorthands): Use read-symbol-shorthands
+
+       * lisp/progmodes/elisp-mode.el (elisp--completion-local-symbols)
+       (elisp--completion-local-symbols)
+       (elisp-shorthands): Use read-symbol-shorthands
+
+       * src/lread.c:
+       (syms_of_lread): Define Vread_symbol_shorthands
+       (oblookup_considering_shorthand): Use Vread_symbol_shorthands.
+
+       * test/lisp/progmodes/elisp-mode-tests.el (elisp-shorthand-read-buffer):
+       (elisp-shorthand-read-from-string): Use read-symbol-shorthands
+
+       * test/lisp/progmodes/elisp-mode-resources/simple-shorthand-test.el
+       Use new symbol name read-symbol-shorthands.
+
+2021-10-03  João Távora  <joaotavora@gmail.com>
+
+       Font-lock shorthands in elisp-mode for quick visual recognition 
(bug#50959)
+
+       Only the shorthanded prefix is font-locked.  This allows the remainder
+       of the font-lock logic to subsist (e.g. for macro-defining symbols).
+
+       * lisp/shorthands.el (cl-lib): Require it when compiling.
+       (elisp-shorthand-font-lock-face): New face.
+       (shorthands--mismatch-from-end): New helper.
+       (shorthands-font-lock-shorthands): New helper.
+
+       * test/lisp/progmodes/elisp-mode-resources/simple-shorthand-test.el:
+       Add some dummy test code.
+
+2021-10-03  Michael Albinus  <michael.albinus@gmx.de>
+
+       Suppress superfluous error messages in Tramp
+
+       * lisp/net/tramp-sshfs.el (tramp-sshfs-handle-insert-file-contents):
+       * lisp/net/tramp.el (tramp-handle-insert-file-contents)
+       (tramp-handle-lock-file): Suppress superfluous error message.
+
+2021-10-03  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix reading the tail of a file in shorthands.el
+
+       * lisp/shorthands.el (hack-elisp-shorthands): Fix reading past
+       3000-character limit from EOF.  (Bug#50946)
+
+2021-10-03  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix substitution of pretty quotes in code in easy-mmode
+
+       * lisp/emacs-lisp/easy-mmode.el (easy-mmode--arg-docstring): Adjust.
+       (easy-mmode--mode-docstring): Avoid making quotes into pretty
+       quotes in code (bug#50968).
+
+2021-10-03  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix agent directory deletion
+
+       * lisp/gnus/gnus-agent.el (gnus-agent-expire-unagentized-dirs):
+       Delete directories in a simpler way that actually works (bug#50986).
+
+2021-10-03  Stefan Kangas  <stefan@marxist.se>
+
+       Clarify the purpose of internal--format-docstring-line
+
+       * test/lisp/subr-tests.el (subr-test-internal--format-docstring-line):
+       * lisp/subr.el (internal--format-docstring-line): Make it more clear
+       that this function is not intended for the first line of a docstring.
+       * lisp/emacs-lisp/cl-macs.el (cl-defstruct): Add comment explaining
+       why we use 'internal--format-docstring-line'.
+       Problem pointed out by Stefan Monnier <monnier@iro.umontreal.ca>.
+
+2021-10-02  Juri Linkov  <juri@linkov.net>
+
+       * lisp/net/dictionary.el (context-menu-dictionary): Move menu item down.
+
+       Place the dictionary menu item after middle-separator (bug#50552).
+
+2021-10-02  Kyle Meyer  <kyle@kyleam.com>
+
+       Update to Org 9.5-30-g10dc9d
+
+       The plan is to cut the Org 9.5.1 release and include it in Emacs 28.1,
+       but in the meantime regularly sync changes from Org's bugfix branch to
+       emacs-28.
+
+       This sync includes files from Org 9.5's new etc/csl/ directory that
+       should have been synced in bf9ec3d91a (Update to Org 9.5, 2021-09-29).
+
+2021-10-02  Glenn Morris  <rgm@gnu.org>
+
+       Remove bogus ":safe t" custom properties
+
+       * lisp/org/oc.el (org-cite-global-bibliography)
+       (org-cite-note-rules, org-cite-punctuation-marks):
+       * lisp/org/oc-csl.el (org-cite-csl-locales-dir)
+       (org-cite-csl-styles-dir, org-cite-csl-no-citelinks-backends):
+       * lisp/org/oc-natbib.el (org-cite-natbib-options):
+       * lisp/org/org-keys.el (org-mouse-1-follows-link):
+       Remove bogus ":safe t" properties that would largely need to be
+       replaced by custom predicates.
+
+2021-10-02  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix 'apropos-compact-layout'
+
+       * lisp/textmodes/fill.el (fill-region-as-paragraph): Fix filling
+       paragraphs that end at EOB without a newline.  (Bug#50974)
+
+2021-10-02  Glenn Morris  <rgm@gnu.org>
+
+       Remove bogus ":safe nil" custom properties
+
+       * lisp/org/oc.el (org-cite-activate-processor)
+       (org-cite-export-processors, org-cite-follow-processor)
+       (org-cite-insert-processor):
+       * lisp/org/ol.el (org-link-parameters, org-link-frame-setup)
+       (org-link-shell-confirm-function)
+       (org-link-shell-skip-confirm-regexp)
+       (org-link-elisp-confirm-function)
+       (org-link-elisp-skip-confirm-regexp):
+       * lisp/org/org-num.el (org-num-format-function):
+       Remove bogus ":safe nil" that do nothing but propagate a
+       misunderstanding of the safe-local-variable property.
+
+2021-10-02  Glenn Morris  <rgm@gnu.org>
+
+       The safe-local-variable property is a function (bug#50944)
+
+       * lisp/org/oc-basic.el (org-cite-basic-sorting-field)
+       (org-cite-basic-author-year-separator)
+       (org-cite-basic-max-key-distance)
+       (org-cite-basic-author-column-end)
+       (org-cite-basic-column-separator)
+       (org-cite-basic-mouse-over-key-face):
+       * lisp/org/oc-biblatex.el (org-cite-biblatex-options):
+       * lisp/org/oc-csl.el (org-cite-csl-link-cites)
+       (org-cite-csl-html-hanging-indent)
+       (org-cite-csl-html-label-width-per-char)
+       (org-cite-csl-latex-hanging-indent):
+       * lisp/org/oc.el (org-cite-adjust-note-numbers):
+       * lisp/org/org-keys.el (org-return-follows-link):
+       * lisp/org/org.el (org-fontify-todo-headline):
+       * lisp/org/ox-html.el (org-html-equation-reference-format)
+       (org-html-wrap-src-lines):
+       * lisp/org/ox-latex.el (org-latex-reference-command)
+       (org-latex-default-quote-environment):
+       * lisp/textmodes/tildify.el (tildify-pattern)
+       (tildify-space-string): Fix :safe property.
+
+2021-10-02  Stefan Kangas  <stefan@marxist.se>
+
+       Revert "; * etc/TODO: Move elpa.gnu.org items to the end."
+
+       This reverts commit d73f0e96a7026808c01861f7525a2909279fc00d.
+
+       These items are a priority for the project and should be before other,
+       less prioritized items, according to a private discussion with project
+       co-maintainer Eli Zaretskii <eliz@gnu.org>.
+
+2021-10-02  Stefan Kangas  <stefan@marxist.se>
+
+       Revert "* etc/TODO: Rearrange to start with "Simple tasks"."
+
+       This reverts commit 879ef5b19ab1dd90284aef829ef306d56b4e5adb.
+
+       Some of these items are a priority for the project and should be
+       before other, less prioritized items, according to a private
+       discussion with project co-maintainer Eli Zaretskii <eliz@gnu.org>.
+
+2021-10-02  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix selection of fonts for Arabic on Posix platforms
+
+       * lisp/international/fontset.el (script-representative-chars): Add
+       U+06C1 to representative-characters for Arabic.  (Bug#50951)
+
+2021-10-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix ox-koma-letter compilation warnings
+
+       * lisp/org/ox-koma-letter.el (org-koma-letter-export-block)
+       (org-koma-letter-export-snippet): Fix warning about two unused
+       parameter.
+
+2021-10-02  Eli Zaretskii  <eliz@gnu.org>
+
+       Preload paren.el
+
+       * lisp/Makefile.in (COMPILE_FIRST): Add the dependencies of
+       comp.el, so that they are natively-compiled in advance.
+       * lisp/loadup.el ("paren"): Preload paren.el.   (Bug#50934)
+
+2021-10-02  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of 'shift-select-mode'
+
+       * doc/emacs/mark.texi (Shift Selection): Document the 'permanent'
+       value of 'shift-select-mode'.  Add index entry for that variable.
+       (Bug#50954)
+
+       * etc/NEWS: Update the entry for 'shift-select-mode'.
+
+2021-10-02  João Távora  <joaotavora@gmail.com>
+
+       Simplify shorthand injection (bug#50946)
+
+       * lisp/loadup.el: Load "shorthands" relatively late. Set
+       load-source-file-function to load-with-shorthands-and-code-conversion
+
+       * lisp/international/mule.el (hack-elisp-shorthands)
+       (load-with-shorthands-and-code-conversion): Move to
+       lisp/shorthands.el
+
+       * lisp/shorthands.el: New file.
+
+2021-10-01  Glenn Morris  <rgm@gnu.org>
+
+       * doc/lispref/control.texi (pcase Macro): Fix cross-reference.
+
+2021-10-01  Glenn Morris  <rgm@gnu.org>
+
+       Fix some custom types
+
+       * lisp/mpc.el (mpc-cover-image-re):
+       * lisp/org/oc-csl.el (org-cite-csl-locales-dir)
+       (org-cite-csl-styles-dir):
+       * lisp/org/org-plot.el (org-plot/preset-plot-types): Fix :type.
+
+2021-10-01  Stefan Kangas  <stefan@marxist.se>
+
+       * etc/TODO: Add interactive mode tagging.
+
+       * etc/TODO: Rearrange to start with "Simple tasks".
+
+       * etc/TODO: Remove outdated item.  (Bug#50904)
+
+2021-10-01  Stefan Kangas  <stefan@marxist.se>
+
+       Rename arguments of ERC's '/whois' and simplify doc string
+
+       * lisp/erc/erc.el (erc-cmd-WHOIS): Rename arguments and reword the doc
+       string to further clarify and simplify.
+
+2021-09-30  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Migrate Xref off EIEIO
+
+       To improve performance and flexibility (bug#50777).
+
+       * lisp/progmodes/xref.el (xref-location): Remove.
+       (xref-file-location): Change to cl-struct.
+       (xref-buffer-location, xref-bogus-location): Ditto.
+       (xref-item, xref-match-item): Same.
+       And update all method definitions accordingly.
+       (xref--insert-xrefs): Don't use 'oref', use 'xref-item-location'.
+       (xref--insert-xrefs, xref-show-definitions-completing-read):
+       Instead of 'with-slots', use 'xref-item-summary' and
+       'xref-item-location'.
+
+       * lisp/progmodes/etags.el (xref-etags-location):
+       Change from EIEIO class into a cl-struct.
+       (xref-etags-apropos-location): Ditto.
+       Update all method definitions.
+
+       * test/lisp/progmodes/elisp-mode-tests.el (xref-elisp-test-run):
+       Avoid using 'oref'.
+
+2021-09-30  Eli Zaretskii  <eliz@gnu.org>
+
+       * admin/release-branch.txt: New file.
+
+       * lisp/dired.el (dired-omit-mode): Declare, to avoid compiler warning.
+
+2021-09-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Cut the emacs-28 release branch
+
+       * README:
+       * configure.ac:
+       * nt/README.W32:
+       * msdos/sed2v2.inp: Bump Emacs version to 28.0.60.
+
+       * lisp/cus-edit.el (customize-changed-options-previous-release):
+       Update the last released version of Emacs.
+
+2021-09-30  Nikolay Kudryavtsev  <nikolay.kudryavtsev@gmail.com>
+
+       Make checkdoc's docstring substitution consistent with other docs
+
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-this-string-valid-engine):
+       In error text, say "mapvar" instead of "keymap", and "command"
+       instead of "function", to be consistent with the ELisp manual.
+       (Bug#50903)
+
+2021-09-30  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix regexp snags in org
+
+       * lisp/org/org-element.el (org-element-citation-key-re):
+       * lisp/org/ox-org.el (org-org-identity):
+       Remove repeated chars in alternatives.
+       * lisp/org/ob-java.el (org-babel-execute:java):
+       Remove superfluous backslash.
+       * lisp/org/ob-java.el (org-babel-java--main-re)
+       (org-babel-java--any-method-re): Remove (0+ space) expressions
+       subsumed by adjacent expressions.
+
+2021-09-30  Mattias Engdegård  <mattiase@acm.org>
+
+       org-element: use correct function
+
+       * lisp/org/org-element.el (org-element-headline-parser):
+       Pretty sure this one should be `skip-chars-backward`, not
+       `skip-syntax-backward`, since \t isn't a valid syntax code.
+
+2021-09-30  Mattias Engdegård  <mattiase@acm.org>
+
+       Revert "Indent bodies of local function definitions properly in 
elisp-mode"
+
+       This reverts commit 38037e04cb05cb1f2b604f0b1602d36b0bcf6985.
+
+2021-09-30  Mattias Engdegård  <mattiase@acm.org>
+
+       Revert "Fix regressions in cl-flet indentation"
+
+       This reverts commit c42af5aee74f310bdcd63aac96b1c02ec07a1c50.
+
+2021-09-30  Philip Kaludercic  <philipk@posteo.net>
+
+       Add rcirc-omit-unless-requested option
+
+       * doc/misc/rcirc.texi (Notices): Update documentation
+       * lisp/net/rcirc.el (rcirc-pending-requests): Add local variable
+       (rcirc-omit-unless-requested): Add user option
+       (rcirc-print): Respect rcirc-omit-unless-requested
+       (rcirc-define-command): Update rcirc-pending-requests
+
+2021-09-30  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/org/ob-julia.el: Use lexical-binding
+
+       (ess-eval-visibly-p): Declare.
+       (org-babel-julia-assign-elisp): Remove unused vars `header` and
+       `row-names` and corespondingly remove now unused args `colnames-p` and
+       `rownames-p`.
+       (org-babel-variable-assignments:julia): Adjust call to
+       `org-babel-julia-assign-elisp` accordingly.
+       (org-babel-julia-initiate-session): Use `bound-and-true-p`.
+       (org-babel-julia-evaluate-external-process)
+       (org-babel-julia-evaluate-session, org-babel-julia-evaluate):
+       Remove unused arg `row-names-p`.
+       (org-babel-execute:julia): Adjust call to
+       `org-babel-julia-evaluate` accordingly.
+
+2021-09-30  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/org/ox-koma-letter.el: Use lexical-binding
+
+       And remove redundant `:group` args.
+
+2021-09-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix a recent change of 'undo-redo' binding
+
+       * lisp/bindings.el (global-map): Fix the binding of 'undo-redo'.
+       (Bug#50911)
+
+2021-09-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Merge Org 9.5 from branch 'origin/scratch/org-sync'.
+
+2021-09-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix previous `newline' patch
+
+       * lisp/simple.el (newline): Signal an error earlier to avoid
+       peculiar behaviour after getting a backtrace (bug#50900).
+
+2021-09-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make `newline' check the argument earlier
+
+       * lisp/simple.el (newline): Signal an error earlier to avoid
+       peculiar behaviour after getting a backtrace (bug#50900).
+
+2021-09-30  akater  <nuclearspace@gmail.com>
+
+       Fix regressions in cl-flet indentation
+
+       * lisp/emacs-lisp/lisp-mode.el (lisp--local-defform-body-p):
+       Rename (from -p-less form) and fix indentation regression
+       introduced by 38037e04cb05cb1f2b604f0b1602d36b0bcf6985
+       (bug#9622).  Also add cl-macrolet cl-flet* cl-symbol-macrolet.
+
+2021-09-30  dickmao  <none>
+
+       Fix bootstrap after recent undo-redo change
+
+       * lisp/bindings.el (global-map): Don't use `kbd' here -- it breaks
+       bootstrap (bug#50911).
+
+2021-09-30  Kyle Meyer  <kyle@kyleam.com>
+
+       * etc/NEWS: Announce Org update.
+
+       Update to Org 9.5
+
+2021-09-30  Amin Bandali  <bandali@gnu.org>
+
+       Add new '/wii' convenience ERC command
+
+       * etc/NEWS: Announce the addition of the command.
+       * lisp/erc/erc.el (erc-cmd-WII): Add '/wii' convenience command which
+       calls the '/whois' command with the given nick as both arguments,
+       which is useful for displaying the whois information for the nick
+       along with idle time, even if the nick is on a different server than
+       the one we are currently connected to.
+
+2021-09-30  Amin Bandali  <bandali@gnu.org>
+
+       Restore the previous order of ERC's '/whois' arguments
+
+       * etc/NEWS: Remove unneeded entry.
+       * lisp/erc/erc.el (erc-cmd-WHOIS): Restore the previous order of
+       arguments sent to the server, so that there's no change in the
+       function's behavior.  Instead, rename the arguments to be more
+       accurate, and expand upon them in the doc string.
+
+2021-09-30  Stefan Kangas  <stefan@marxist.se>
+
+       New command mpc-goto-playing-song
+
+       * lisp/mpc.el (mpc-goto-playing-song): New command to go to the
+       currently playing song.
+       (mpc-mode-map): Bind it to "o".
+
+2021-09-29  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/linum.el: Recommend `display-line-numbers-mode'.
+
+2021-09-29  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Add bindings for 'undo-redo'
+
+       * etc/NEWS: Describe the change.
+
+       * lisp/bindings.el (global-map): Add bindings for 'undo-redo'.
+
+       * lisp/simple.el (undo-no-redo): Turn into a user option.
+
+2021-09-29  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el (tab-bar-move-tab-to-frame): Delete frame with last 
tab.
+
+2021-09-29  Adam Porter  <adam@alphapapa.net>
+
+       * lisp/tab-bar.el: (tab-bar-detach-tab) New command
+
+       (tab-bar-detach-tab): New command.
+       (tab-bar-mouse-context-menu): Add menu entry.
+
+       With thanks to Matt Beshara <m@mfa.pw> for his feedback.
+       https://lists.gnu.org/archive/html/emacs-devel/2021-09/msg02141.html
+
+2021-09-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak previous message-newline-and-reformat change
+
+       * lisp/gnus/message.el (message-newline-and-reformat): Only search
+       for previous/next cited lines that have space, because it's the
+       space we're trying to find.
+
+2021-09-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Cross reference `dired-do-revert-buffer'
+
+       * lisp/dired-aux.el (dired-do-copy):
+       (dired-do-symlink):
+       (dired-do-hardlink):
+       (dired-do-rename): Mention `dired-do-revert-buffer'.
+
+2021-09-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Do some NEWS taggin
+
+2021-09-29  Stefan Kangas  <stefan@marxist.se>
+
+       * etc/TODO: Delete ImageMagick items.  (Bug#50891)
+
+2021-09-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make `M-q' in message-mode work better
+
+       * lisp/gnus/message.el (message-newline-and-reformat): Fix
+       bug#43299 differently.
+       (message-newline-and-reformat): Revert change for bug#43299.  This
+       fixes bug#50842.
+
+2021-09-29  Stefan Kangas  <stefan@marxist.se>
+
+       Force volume to an integer divisible by mpc-volume-step
+
+       * lisp/mpc.el (mpc-volume-mouse-set): Force volume to an integer
+       divisible by 'mpc-volume-step'.
+       (mpc-volume-step): Add docstring.
+
+2021-09-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Signal an error in `search-forward-help-for-help'
+
+       * lisp/help.el (search-forward-help-for-help): Error out instead
+       of showing an empty buffer (bug#50881).
+
+2021-09-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a comment about bug#50877 for gnus-set-difference
+
+2021-09-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Obsolete local set difference functions in favor of 
seq-difference"
+
+       This reverts commit 20f7fa691b7c2859b96550d9ccb326bf394e160d.
+
+       gnus-set-difference is orders of magnitude faster than seq-difference
+       (on these sets), and using seq-difference makes nnimap too
+       slow.
+
+2021-09-29  Michael Albinus  <michael.albinus@gmx.de>
+
+       * test/Makefile.in (WRITE_LOG): Add emacs-module-tests as problematic.
+
+2021-09-29  Protesilaos Stavrou  <info@protesilaos.com>
+
+       Update modus-themes to version 1.6.0
+
+       * doc/misc/modus-themes.org (Customization Options): Document new user
+       options in code sample.
+       (Option for inhibiting theme reload): Remove trailing space.
+       (Option for mode line presentation): Include new possible value.
+       (Option for Org agenda constructs): Include new symbols for the
+       'modus-themes-org-agenda' alist.
+       (Control the scale of headings): Document 'modus-themes-scale-small'.
+       (Override color saturation (DIY)): Fix markup for proper texi output.
+       (Custom Org user faces (DIY)): Update code samples.
+       (Full support for packages or face groups): Note names of newly
+       supported packages or face groups.
+       (Indirectly covered packages): Document indirectly supported packages.
+       (Note on highlight-parentheses.el): Provide detailed instructions on
+       how to use 'highlight-parentheses' with the Modus themes.
+       (Note on prism.el): Refine code samples.
+       (What is the best setup for legibility?): Minor rewording.
+       (Sources of the themes): Mention only Emacs28 without explaining that
+       it is the development target---in preparation of the emacs-28 branch
+       cut.
+       (Acknowledgements): Name new contributors to code/ideas.  Stephen
+       Gildea's patch was a couple lines long.  The others have assigned
+       copyright to the FSF.
+       (Meta): Include another link to the development notes of the themes
+       about 'modus-themes-org-agenda'.
+
+       * etc/themes/modus-operandi-theme.el,
+         etc/themes/modus-vivendi-theme.el: Bump file version.
+
+       * etc/themes/modus-themes.el (modus-themes-operandi-colors)
+       (modus-themes-vivendi-colors): Recalibrate some colour values and add
+       a few new ones.
+       (modus-themes-slanted-constructs): Remove obsolete user option.
+       Superseded by the alias 'modus-themes-italic-constructs'.
+       (modus-themes-org-agenda, modus-themes-mode-line): Update user option.
+       (modus-themes-scale-headings, modus-themes-scale-4): Update doc
+       string.
+       (modus-themes-scale-5): Remove obsolete user option.  Superseded by
+       the alias 'modus-themes-scale-title'.
+       (modus-themes-scale-small, modus-themes-tabs-accented): Add new user
+       option.
+       (modus-themes--agenda-date, modus-themes--mode-line-attrs)
+       (modus-themes--tab): Update internal functions.
+       (modus-themes-faces): Update variousface attributes.
+
+       Detailed change log here:
+       <https://protesilaos.com/codelog/2021-09-29-modus-themes-1-6-0/>.
+
+2021-09-29  Philip Kaludercic  <philipk@posteo.net>
+
+       Remove rcirc-omit-responses-after-join option
+
+       The implementation does not work as expected and behaves
+       unpredictably.
+
+       * lisp/net/rcirc.el (rcirc-omit-responses-after-join): Remove
+       option
+       (rcirc-joined): Remove variable
+       (rcirc-reconnect): Remove rcirc-joined code
+       (rcirc-get-buffer-create): Remove rcirc-joined code
+       (rcirc-print): Remove rcirc-omit-responses-after-join check
+       * doc/misc/rcirc.texi (Notices): Remove documentation
+       * etc/NEWS: Remove mention
+
+2021-09-29  Stefan Kangas  <stefan@marxist.se>
+
+       New user option mpc-cover-image-re
+
+       * lisp/mpc.el (mpc-cover-image-re): New user option.
+       (mpc-format): Find cover image based on regexp given by above new user
+       option.  Treat "folder.png" as a valid cover image name.
+
+2021-09-29  Martin Rudalics  <rudalics@gmx.at>
+
+       Fix 'window-toggle-side-windows' (Bug#50867)
+
+       * lisp/window.el (window-toggle-side-windows): Bind
+       'window-combination-resize' to t around 'window-state-put'
+       calls (Bug#50867).
+
+2021-09-29  Michael Albinus  <michael.albinus@gmx.de>
+
+       Some inmprovements in emba CI files
+
+       * test/infra/Dockerfile.emba: Remove superfluous "make -j4".
+
+       * test/infra/gitlab-ci.yml (.test-template): Add 'allow_failure' clause.
+       (test-all-inotify): Add 'needs' clause.
+
+2021-09-29  Juri Linkov  <juri@linkov.net>
+
+       * lisp/net/dictionary.el (context-menu-dictionary): Add autoload cookie.
+
+       (context-menu-functions): Remove context-menu-dictionary from hook 
(bug#50552)
+
+2021-09-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak the whitespace before "This is a generic function"
+
+       * lisp/emacs-lisp/cl-generic.el (cl--generic-describe): Make the
+       number of blank lines before this section consistent (whether
+       there's an indented section before it or not).
+
+2021-09-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve the max-specpdl-size doc string
+
+       * src/eval.c (syms_of_eval): Mention what "specpdl" means.
+
+2021-09-29  Amin Bandali  <bandali@gnu.org>
+
+       Switch the order of ERC's '/whois' arguments sent to the server
+
+       * lisp/erc/erc.el (erc-cmd-WHOIS): Switch the order of 'server' and
+       'user' arguments sent to the server.  Per RFC 1459 and RFC 2812, the
+       optional 'server' argument command comes before the 'user' argument,
+       not after.  While at it, update the doc string to explain why one may
+       want to specify the 'server' argument.
+       * etc/NEWS: Announce the change.
+
+2021-09-29  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/mpc.el (mpc-format): Fix printing after last format spec.
+
+2021-09-29  Amin Bandali  <bandali@gnu.org>
+
+       Unobsolete erc-compat.el
+
+       * lisp/obsolete/erc-compat.el: Move from here...
+       * lisp/erc/erc-compat.el: ...back to here.  ERC will soon be added to
+       GNU ELPA, and erc-compat.el will be used to provide compatibility
+       functions and/or variables for using ERC on older Emacsen.
+       * etc/NEWS: Remove the previously added obsoletion news item.
+
+2021-09-29  Stefan Kangas  <stefan@marxist.se>
+
+       * etc/NEWS: Announce Eshell bookmarks.
+
+2021-09-29  Stefan Kangas  <stefan@marxist.se>
+
+       Add bookmark.el support to eww
+
+       * lisp/net/eww.el (eww-bookmark-name, eww-bookmark-make-record)
+       (eww-bookmark-jump): New defuns.
+       (eww-mode): Set up bookmark handler.
+
+2021-09-29  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Enable show-paren-mode by default
+
+       * etc/NEWS (https): Mention the change.
+
+       * lisp/paren.el (show-paren-mode):
+       Enable by default, as discussed on emacs-devel.
+
+2021-09-29  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/net/eww.el (eww-mode): Show keybindings in docstring.
+
+2021-09-28  Juri Linkov  <juri@linkov.net>
+
+       * lisp/mouse.el (context-menu-map): Fix when menu is a command 
(bug#50851)
+
+       * lisp/help.el (help--analyze-key): Get information at the position
+       of mouse click such as 'C-h k' on a context menu item (bug#50067).
+
+2021-09-28  Stefan Kangas  <stefan@marxist.se>
+
+       Add shortdoc for text properties
+
+       * lisp/emacs-lisp/shortdoc.el (text-properties): New shortdoc.
+
+       e for your changes. Lines starting
+
+2021-09-28  Stefan Kangas  <stefan@marxist.se>
+
+       Mention describe-symbol in cl-defstruct docstring
+
+       * lisp/emacs-lisp/cl-macs.el (cl-defstruct): Mention 'describe-symbol'
+       in docstring.
+
+2021-09-28  Stefan Kangas  <stefan@marxist.se>
+
+       Mention cl-describe-type in cl-defstruct docstring
+
+       * lisp/emacs-lisp/cl-macs.el (cl-defstruct): Mention
+       'cl-describe-type' in docstring.
+
+2021-09-28  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/map.el: Restore compatibility with Emacs-26
+
+       Don't use the new `eql` syntax.
+
+2021-09-28  Michael Albinus  <michael.albinus@gmx.de>
+
+       Adapt tramp-tests.el for macOS
+
+       * test/lisp/net/tramp-tests.el (tramp-test29-start-file-process)
+       (tramp-test30-make-process): Adapt for macOS.
+
+2021-09-28  Stefan Kangas  <stefan@marxist.se>
+
+       * doc/man/emacs.1.in: Add --no-x-resources.  (Bug#50855)
+
+2021-09-28  Stefan Kangas  <stefan@marxist.se>
+
+       Improve coding conventions for error messages
+
+       * doc/lispref/tips.texi (Programming Tips): Clarify coding
+       conventions for error messages to say that an error message can
+       start with a Lisp symbol.  (Bug#50658)
+
+2021-09-28  Stefan Kangas  <stefan@marxist.se>
+
+       Improve docstrings of ert-resource-{directory,file}
+
+       * lisp/emacs-lisp/ert-x.el (ert-resource-directory)
+       (ert-resource-file): Improve docstrings.
+
+2021-09-28  Stefan Kangas  <stefan@marxist.se>
+
+       Signal error on newline in internal--format-docstring-line
+
+       * lisp/subr.el (internal--format-docstring-line): Signal error
+       when trying to fill a line containing a newline.
+
+       * lisp/cedet/semantic/decorate/mode.el
+       (define-semantic-decoration-style):
+       * lisp/emacs-lisp/easy-mmode.el (define-globalized-minor-mode):
+       Don't pass newlines to 'internal--format-docstring-line'.
+
+2021-09-28  Eli Zaretskii  <eliz@gnu.org>
+
+       Make the build of source tarball produce *.eln files
+
+       * lisp/emacs-lisp/comp.el (batch-native-compile): Accept an
+       optional argument; if non-nil, place the .eln file as appropriate
+       for building a source tarball.
+
+       * doc/lispref/compile.texi (Native-Compilation Functions):
+       Document the new optional argument of 'batch-native-compile'.
+
+       * lisp/Makefile.in (.PHONY, $(THEFILE)n) [HAVE_NATIVE_COMP]: New
+       targets.
+
+       * src/Makefile.in (%.eln) [HAVE_NATIVE_COMP]: New recipe.
+       (all) [HAVE_NATIVE_COMP]: Add ../native-lisp to prerequisites.
+       (elnlisp) [HAVE_NATIVE_COMP]: New list of *.eln files.
+       (../native-lisp) [HAVE_NATIVE_COMP]: New recipe.
+
+       * src/verbose.mk.in (AM_V_ELN): New macro.
+
+2021-09-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Adjust ispell-look-command type
+
+       * lisp/textmodes/ispell.el (ispell-look-command): Adjust :type
+       after previous change.
+
+2021-09-28  André A. Gomes  <andremegafone@gmail.com>
+
+       Fix search of the look program
+
+       * lisp/textmodes/ispell.el (ispell-look-command): Fix logic
+       concerning the existence of the look program (bug#50852) -- search
+       through the executable path.
+       (ispell-look-p): Adjust logic.
+
+2021-09-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Use ert-resource-file in the shorthand tests
+
+       Also move to the standard directory naming.
+
+2021-09-28  Stefan Kangas  <stefan@marxist.se>
+
+       checkdoc: Allow Lisp symbols to start a message
+
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-message-text-engine): Allow
+       Lisp symbols to start a message.
+       (checkdoc--error-bad-format-p): New helper function.
+
+       * test/lisp/emacs-lisp/checkdoc-tests.el
+       (checkdoc-test-error-format-is-good)
+       (checkdoc-test-error-format-is-bad): New helper functions.
+       (checkdoc-tests-error-message-bad-format-p)
+       (checkdoc-tests-error-message-bad-format-p/defined-symbols)
+       (checkdoc-tests-error-message-bad-format-p/not-capitalized):
+       New tests.
+
+2021-09-27  Ken Brown  <kbrown@cornell.edu>
+
+       Make .eln files executable on Cygwin
+
+       * Makefile.in (INSTALL_ELN): New variable, equal to $(INSTALL) on
+       Cygwin and $(INSTALL_DATA) on other platforms.
+       (install-eln): Use INSTALL_ELN instead of INSTALL_DATA.
+       (Bug#50818)
+
+2021-09-27  Michael Albinus  <michael.albinus@gmx.de>
+
+       Simplify `file-notify--rm-descriptor'
+
+       * lisp/filenotify.el (file-notify--rm-descriptor):
+       Use `file-notify-handle-event'.
+
+2021-09-27  Juri Linkov  <juri@linkov.net>
+
+       * lisp/mouse.el (context-menu-region): Check for nil for char-after at 
eobp.
+
+2021-09-27  Mattias Engdegård  <mattiase@acm.org>
+
+       * lisp/progmodes/flymake.el (flymake-menu): Don't use obsolete name.
+
+2021-09-27  Alan Third  <alan@idiocy.org>
+
+       Fix GNUstep build failure
+
+       * src/nsfns.m (Fns_hide_emacs): NSRunningApplication is only available
+       in GNUstep 0.27 and above.
+
+2021-09-27  Robert Pluim  <rpluim@gmail.com>
+
+       Document 'glyphless-char-display-control' changes
+
+       * etc/NEWS: Document 'glyphless-char-display-control' changes for
+       Variation Selectors.
+
+2021-09-27  Robert Pluim  <rpluim@gmail.com>
+
+       Try to be consistent about user options in NEWS
+
+       * etc/NEWS: Try to be consistent about calling 'user options' that
+       instead of 'variables'.
+
+2021-09-27  Alan Third  <alan@idiocy.org>
+
+       Fix resizing glitches in NS port (bug#50413)
+
+       * src/nsterm.m ([EmacsView resizeWithOldSuperviewSize:]): Use the
+       superview's size instead of trusting the view's size.
+
+2021-09-27  Alan Third  <alan@idiocy.org>
+
+       Attempt to debug a graphical glitch on macOS
+
+       * src/nsterm.m (ns_scroll_run):
+       (ns_shift_glyphs_for_insert): Switch to using NSPoint for destination.
+       ([EmacsView copyRect:to:]): Use NSPoint for the destination, always
+       use the view's layer, and log any questionable copy requests.
+
+2021-09-27  Alan Third  <alan@idiocy.org>
+
+       Fix NS toolbar again (bug#50534)
+
+       * src/nsmenu.m (free_frame_tool_bar): Remove toolbar.
+       (update_frame_tool_bar_1): New function.
+       (update_frame_tool_bar): Move most of the functionality to
+       update_frame_tool_bar_1.
+       * src/nsterm.h: Definitions of functions and methods.
+       * src/nsterm.m (ns_update_begin):
+       ([EmacsView windowDidEnterFullScreen]):
+       ([EmacsView windowDidExitFullScreen]): We no longer need to reset the
+       toolbar visibility as that's done when we create the new fullscreen
+       window.
+       ([EmacsWindow initWithEmacsFrame:fullscreen:screen:]): Move the check
+       for undecorated frames into createToolbar:.
+       ([EmacsWindow createToolbar:]): Check whether a toolbar should be
+       created, and run the toolbar update immediately.
+
+2021-09-27  Stefan Kangas  <stefan@marxist.se>
+
+       Fix automatic filling of docstring in cl-defstruct
+
+       * lisp/emacs-lisp/cl-macs.el (cl-defstruct): Fix bug where a paragraph
+       was filled as if it were a single line, which led to garbled
+       output in the docstring.  (Bug#50839)
+
+       * test/lisp/subr-tests.el
+       (subr-test-internal--format-docstring-line): New test.
+
+2021-09-27  Eli Zaretskii  <eliz@gnu.org>
+
+       Minor fix in 'w32-find-non-USB-fonts'
+
+       * lisp/term/w32-win.el (w32--filter-USB-scripts): Handle
+       representative characters given as a vector, not a list.
+
+2021-09-27  João Távora  <joaotavora@gmail.com>
+
+       * etc/NEWS (Shorthands for Lisp symbols): Reword.
+
+2021-09-27  Robert Pluim  <rpluim@gmail.com>
+
+       Enhance font_range to check for emoji composition triggers
+
+       If the codepoint that triggered composition is from the emoji script,
+       use the emoji font to check the string being composed, rather than the
+       font of the first character of the string.  This makes e.g.
+
+       "emoji codepoint with Emoji_Presentation = No followed by VS-16 (FE0F)"
+
+       display the emoji version of the glyph for that codepoint.
+
+       * admin/unidata/blocks.awk: Add VS-1 through VS-16 to the emoji
+       script.
+       * src/composite.c (autocmp_chars): Accept additional argument CH for
+       the codepoint that triggered composition, pass it to font_range.
+       (composition_reseat_it, find_automatic_composition): Pass codepoint
+       that triggered composition to autocmp_chars.
+       * src/font.c (font_range): Accept additional argument CH for the
+       triggering codepoint.  If the codepoint is from the 'emoji' script,
+       use Vscript_representative_chars to find the font to use for the
+       composition attempt.
+       (syms_of_font): Add Qemoji symbol.
+       * src/font.h: Update font_range prototype for argument CH.
+       * etc/NEWS: Announce change.
+
+2021-09-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix checkdoc-related test failure
+
+       Fix two doc-related test failures
+
+2021-09-27  Michael Albinus  <michael.albinus@gmx.de>
+
+       Optimize emba builds
+
+       * test/infra/Dockerfile.emba (emacs-base): Install also
+       libdbus-1-dev and libacl1-dev.
+
+       * test/infra/gitlab-ci.yml (prep-image-base): Comment out.  This
+       stage is activated by default in Dockerfile.emba.
+
+2021-09-27  Eli Zaretskii  <eliz@gnu.org>
+
+       Minor stylistic fixes of shorthand code in C
+
+       * src/lread.c (oblookup_considering_shorthand): Now static.  Move
+       prototype to where it belongs.
+       (read1, Fintern, Fintern_soft, Funintern)
+       (oblookup_considering_shorthand, syms_of_lread): Fix style of
+       braces and indentation, comments, and doc strings.
+
+2021-09-27  Eli Zaretskii  <eliz@gnu.org>
+
+       Minor fixes of Lisp doc strings for shorthands feature
+
+       * lisp/progmodes/elisp-mode.el (obarray-cache)
+       (elisp--completion-local-symbols):
+       * lisp/international/mule.el (hack-elisp-shorthands)
+       (load-with-shorthands-and-code-conversion): Doc string fixes.
+
+2021-09-27  Eli Zaretskii  <eliz@gnu.org>
+
+       Minor fixes in documentation of shorthands
+
+       * etc/NEWS:
+       * doc/lispref/symbols.texi (Symbol Components, Creating Symbols)
+       (Shorthands): Improve wording, fix indexing and typos.
+
+2021-09-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make comint understand the ccrypt password phrases
+
+       * lisp/comint.el (comint-password-prompt-regexp): Add the ccrypt
+       confirmation phrase (bug#50837).
+
+       * lisp/international/mule-conf.el (password-word-equivalents): Add
+       the ccrypt phrases.
+
+2021-09-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add "passwd" (change password) prompt to comint
+
+       * lisp/comint.el (comint-password-prompt-regexp): Add "passwd" (to
+       change the password) first promp in Debian bullseye.
+
+2021-09-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Note that the Packaging sub-nodes are mostly for maintainers
+
+       * doc/lispref/package.texi (Packaging): Note that the information
+       is mostly for ELPA maintainers (bug#50825).
+
+2021-09-27  dickmao  <none>
+
+       Get a `package-test-signed` to work again
+
+       The test signing key succumbed to either expiration or bitrot.
+       I hope I didn't just publish my secret key to the world.
+
+       * test/lisp/emacs-lisp/package-resources/key.pub: Refresh.
+       * test/lisp/emacs-lisp/package-resources/key.sec: Refresh.
+
+2021-09-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Move test-cl-flet-indentation to the right file
+
+2021-09-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve describe-char buffer extremely slightly
+
+       * lisp/descr-text.el (describe-char): Add a colon to further
+       signify that we're talking about the following line (bug#50795).
+
+2021-09-27  João Távora  <joaotavora@gmail.com>
+
+       Document shorthands in the Elisp manual section on Symbols
+
+       * doc/lispref/symbols.texi (Symbol Components): Mention "Shorthands".
+       (Creating Symbols): Mention shorthands.  Correct references to Common
+       Lisp.
+       (Shorthands): New section.
+
+       * etc/NEWS (Shorthands): New entry.
+
+2021-09-27  João Távora  <joaotavora@gmail.com>
+
+       Add #_ reader macro to escape shorthand renaming
+
+       * src/lread.c (read1): Add skip_shorthand variable.  Add a '#_'
+       case.  If skip_shorthand call oblookup instead of
+       oblookup_considering_shorthand.
+
+       * test/lisp/progmodes/elisp-mode-tests.el
+       (elisp-shorthand-escape): New test.
+
+       * test/lisp/progmodes/elisp-resources/simple-shorthand-test.el
+       (#_f-test4---): New fixture function.
+
+2021-09-27  João Távora  <joaotavora@gmail.com>
+
+       Consider shorthands in Elisp's elisp-completion-at-point
+
+       Instead of referencing obarray directly, that function has to consider
+       a collection of completions which includes the shorthand versions of
+       some of the symbols.  That collection changes from buffer to buffer,
+       depending on the choice of elisp-shorthands.
+
+       To make this process efficient, and avoid needless recalculation of
+       the above collection, a new obarray-specific cache was invented.  The
+       Elisp variable obarray-cache is immediately nullified if something
+       touches the obarray.
+
+       * lisp/progmodes/elisp-mode.el : New helper.
+       (elisp-completion-at-point): Use new helpers.
+       (elisp--completion-local-symbols)
+       (elisp--fboundp-considering-shorthands)
+       (elisp--bboundp-considering-shorthands): New helpers
+
+       * src/lread.c (intern_driver): Nullify Qobarray_cache.
+       (syms_of_lread): Add Qobarray_cache.
+
+       * test/lisp/progmodes/elisp-mode-tests.el
+       (elisp-shorthand-completion-at-point): New test.
+
+       * test/lisp/progmodes/elisp-resources/simple-shorthand-test.el
+       (f-test-complete-me): New fixture.
+
+2021-09-27  João Távora  <joaotavora@gmail.com>
+
+       Rework Elisp shorthands to only allow only prefix substitution
+
+       This simplification in requirements makes for more complex C code but
+       that code is much less wasteful in Lisp strings than the previous
+       implementation.
+
+       * src/lread.c (read1): Rework.
+       (Fintern): Rework.
+       (Fintern_soft): Rework.
+       (Funintern): Rework.
+       (oblookup_considering_shorthand): Rewrite.
+
+       * test/lisp/progmodes/elisp-mode-tests.el (elisp-shorthand-read-buffer)
+       (elisp-shorthand-read-from-string): Use new format of
+       elisp-shorthands.
+
+       * test/lisp/progmodes/elisp-resources/simple-shorthand-test.el (f-test)
+       (f-test2, f-test3): Use new form of elisp-shorthands.
+
+2021-09-27  João Távora  <joaotavora@gmail.com>
+
+       Move most of the shorthand implementation to C code
+
+       It passes the tests designed for the previous Elisp implementation.
+
+       Likely, this isn't the final form of the implementation.  For one, the
+       reader is much slower and allocates a Lisp string for every atom read,
+       regardless if its already interned or not.  This has the potential to
+       be catastrophic in terms of GC.
+
+       Also rename the main variable to elisp-shorthands, from the
+       repetitive shorthand-shorthands.
+
+       For some reason, I had to put 'hack-elisp-shorthands' and
+       'load-with-shorthands-and-code-conversion', the new source-file
+       loading functions, in lisp/international/mule.el.
+
+       Otherwise, lisp/loadup.el wouldn't see them, for some reason that I
+       didn't investigate.  This should probably be fixed.
+
+       * lisp/shorthand.el: Remove.
+
+       * test/lisp/shorthand-tests.el: Remove.
+
+       * src/lread.c:
+       (read1, Fintern, Fintern_soft, Funintern): Use
+       oblookup_considering_shorthand.
+       (oblookup_considering_shorthand): New helper.
+       (syms_of_lread): Declare elisp-shorthands.
+
+       * lisp/progmodes/elisp-mode.el (elisp-shorthands):
+       Put a safe-local-variable spec.
+
+       * test/lisp/progmodes/elisp-mode-tests.el (elisp-shorthand-read-buffer)
+       (elisp-shorthand-read-from-string)
+       (elisp-shorthand-byte-compile-a-file)
+       (elisp-shorthand-load-a-file): New tests.
+
+       * test/lisp/progmodes/elisp-resources/simple-shorthand-test.el: New file
+
+       * lisp/loadup.el (load-source-file-function): Set to
+       load-with-shorthands-and-code-conversion.
+
+       * lisp/international/mule.el (hack-elisp-shorthands): Move here.
+       (load-with-shorthands-and-code-conversion): And here.
+
+2021-09-27  João Távora  <joaotavora@gmail.com>
+
+       First Elisp version of lisp/shorthand.el, failing some tests
+
+       * lisp/shorthand.el: New file
+
+       * test/lisp/shorthand-tests.el: New file
+
+2021-09-26  Stefan Kangas  <stefan@marxist.se>
+
+       Add 'doc-string' declaration to defcalcmodevar
+
+       * lisp/calc/calc.el (defcalcmodevar): Add 'doc-string' declaration.
+
+2021-09-26  Stefan Kangas  <stefan@marxist.se>
+
+       Move two incorrectly named test files
+
+       * test/lisp/emacs-lisp/tabulated-list-test.el: Move from here...
+       * test/lisp/emacs-lisp/tabulated-list-tests.el: ...to here.
+       * test/lisp/url/url-handlers-test.el: Move from here...
+       * test/lisp/url/url-handlers-tests.el: ...to here.
+
+2021-09-26  Stefan Kangas  <stefan@marxist.se>
+
+       checkdoc: Don't add "Commentary" header to test files
+
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-file-comments-engine):
+       Don't add "Commentary:" header if it looks like a test file.
+
+2021-09-26  Robert Pluim  <rpluim@gmail.com>
+
+       Add glyphless-char-display-control for Variation Selectors
+
+       * lisp/international/characters.el (update-glyphless-char-display):
+       (glyphless-char-display-control): Add control knob for U+FE00 through
+       U+FE0F, defaulting to 'thin-space'.
+       * doc/lispref/display.texi (Glyphless Chars): Document it.
+
+2021-09-26  Stefan Kangas  <stefan@marxist.se>
+
+       Explicitly make the rest of erc-compat.el obsolete
+
+       * lisp/obsolete/erc-compat.el (erc-decode-coding-string)
+       (erc-encode-coding-string, erc-set-write-file-functions)
+       (erc-emacs-build-time, erc-replace-match-subexpression-in-string)
+       (erc-member-if, erc-delete-if, erc-remove-if-not, erc-subseq):
+       Explicitly declare obsolete.
+       (erc-define-minor-mode): Make into obsolete function alias for
+       'define-minor-mode'.
+       (erc-user-emacs-directory): Make into obsolete variable alias for
+       'user-emacs-directory'.
+
+2021-09-26  Stefan Kangas  <stefan@marxist.se>
+
+       Add fast-path to ert--explain-string-equal
+
+       * lisp/emacs-lisp/ert.el (ert--explain-string-equal): Add fast-path to
+       avoid doing extra work.
+       Problem reported by Mattias Engdegård <mattiase@acm.org>.
+
+2021-09-26  Michael Albinus  <michael.albinus@gmx.de>
+
+       * test/infra/gitlab-ci.yml (variables): Set DOCKER_BUILDKIT.
+
+2021-09-26  Stefan Kangas  <stefan@marxist.se>
+
+       Rename "Homepage" field to "Website" in package description
+
+       * lisp/emacs-lisp/package.el (describe-package-1): Rename
+       "Homepage" field to "Website".
+
+       * test/lisp/emacs-lisp/package-tests.el
+       (package-test-describe-package)
+       (package-test-describe-installed-multi-file-package)
+       (package-test-describe-non-installed-package)
+       (package-test-describe-non-installed-multi-file-package): Update tests.
+
+2021-09-26  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer https for other domains than gnu.org in package URL
+
+       * lisp/emacs-lisp/package.el (describe-package-1): Prefer https for
+       some other common domains in the package URL.
+
+2021-09-26  Stefan Kangas  <stefan@marxist.se>
+
+       Add test for lm-website
+
+       * lisp/emacs-lisp/lisp-mnt.el (lm-website): Use rx.
+       * test/lisp/emacs-lisp/lisp-mnt-tests.el
+       (lm--tests-lm-website): New test.
+
+2021-09-26  Mattias Engdegård  <mattiase@acm.org>
+
+       Rx documentation touch-ups (bug#46910)
+
+       * doc/lispref/searching.texi (Rx Constructs, Rx Functions):
+       Add clarifications and improve naming of arguments.  Add examples
+       illustrating the differences between `rx` and `rx-to-string`.
+
+2021-09-26  Stefan Kangas  <stefan@marxist.se>
+
+       Warn about overly long docstring in lambda
+
+       * lisp/emacs-lisp/bytecomp.el
+       (byte-compile-docstring-length-warn): Warn about overly long
+       docstring in lambda.  (Bug#44858)
+
+       (byte-compile--wide-docstring-p): Improve comment.
+       * test/lisp/emacs-lisp/bytecomp-tests.el
+       ("warn-wide-docstring-defun.el"): Update to test for the above new
+       warning.
+
+2021-09-26  Stefan Kangas  <stefan@marxist.se>
+
+       Avoid warning about long docstring lines in defcustom
+
+       * lisp/custom.el (defcustom): Avoid warning about long docstring
+       lines.  This was caused by the value of the defcustom being treated as
+       docstring due to it being wrapped in a lambda.
+
+2021-09-26  Stefan Kangas  <stefan@marxist.se>
+
+       Fill some auto-generated docstring lines
+
+       * lisp/cedet/mode-local.el (define-mode-local-override):
+       * lisp/cedet/semantic/decorate/mode.el 
(define-semantic-decoration-style):
+       * lisp/cedet/semantic/idle.el (define-semantic-idle-service):
+       * lisp/emacs-lisp/derived.el (derived-mode-make-docstring):
+       * lisp/emacs-lisp/eieio.el (defclass): Fill auto-generated docstring
+       lines.
+
+2021-09-26  Stefan Kangas  <stefan@marxist.se>
+
+       Avoid false positives in bytecomp docstring width warning
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile--wide-docstring-p):
+       Ignore more function argument lists.
+       * test/lisp/emacs-lisp/bytecomp-tests.el
+       (bytecomp-tests-byte-compile--wide-docstring-p): New test.
+
+2021-09-26  Stefan Kangas  <stefan@marxist.se>
+
+       Improve filling of generated docstring lines
+
+       * lisp/subr.el (internal--fill-string-single-line): Improve filling to
+       use full width.  Fix bug where line was not wrapped correctly.
+
+2021-09-26  Stefan Kangas  <stefan@marxist.se>
+
+       ert: Add basic explainer for string-equal
+
+       * lisp/emacs-lisp/ert.el (ert--explain-string-equal): Add basic
+       explainer for 'string-equal' based on 'ert--explain-equal'.
+
+2021-09-26  Stefan Kangas  <stefan@marxist.se>
+
+       Unbreak ert tests
+
+       * test/lisp/emacs-lisp/tabulated-list-test.el (tabulated-list-print)
+       (tabulated-list-sort): Update tests for recent change.
+
+2021-09-26  Stefan Kangas  <stefan@marxist.se>
+
+       Doc fix: mode name in local variables needs no suffix
+
+       * doc/emacs/custom.texi (Specifying File Variables): Clarify that a
+       mode name does not need the "-mode" suffix.  (Bug#50801)
+
+2021-09-26  Stefan Kangas  <stefan@marxist.se>
+
+       checkdoc: Library footer must match package.el requirement
+
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-file-comments-engine):
+       Don't accept footer format unless it matches the requirement in
+       package.el.
+
+2021-09-26  Michael Albinus  <michael.albinus@gmx.de>
+
+       Adapt Tramp's make-process for macOS.
+
+       * lisp/net/tramp-sh.el (tramp-check-remote-uname): New defun.
+       (tramp-sh-handle-file-ownership-preserved-p)
+       (tramp-sh-handle-make-process, tramp-find-executable)
+       (tramp-find-shell, tramp-get-remote-stat): Use it.  (Bug#50748)
+
+       * test/lisp/net/tramp-tests.el (tramp-check-remote-uname): Declare.
+       (tramp-test29-start-file-process, tramp-test30-make-process):
+       Instrument for macOS.
+       (tramp--test-hpux-p): Adapt function.
+       (tramp--test-macos-p): New defun.
+
+2021-09-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Expand the ` doc string slightly
+
+       * lisp/emacs-lisp/backquote.el (backquote): Note that ` is used
+       for other things in some macros (bug#25462).
+
+2021-09-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix rendering non-ASCII text with links
+
+       * lisp/gnus/mm-view.el (mm-text-html-renderer-alist): Add a new
+       form for links.
+       (mm-links-remove-leading-blank): Make obsolete.
+       (mm-inline-wash-with-file):
+       (mm-inline-render-with-file): Make obsolete -- they were awkwardly
+       defined and only used with links.
+       (mm-inline-render-with-links): New function.
+
+2021-09-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add new macro with-environment-variables
+
+       * doc/lispref/os.texi (System Environment): Document it.
+
+       * lisp/env.el (with-environment-variables): New macro.
+
+2021-09-25  Stefan Kangas  <stefan@marxist.se>
+
+       Revert "; Fix capitalization of F1..F12 keys in docs"
+
+       This reverts commit fe5b20410f68546821e6c87577d7f826167491dc.
+
+       This change was not correct; these are Lisp symbols that should be in
+       lower-case.  Problem reported by Mattias Engdegård <mattiase@acm.org>.
+
+2021-09-25  Stefan Kangas  <stefan@marxist.se>
+
+       Revert part of previous doc fix
+
+       * lisp/emacs-lisp/derived.el (define-derived-mode): Revert part of
+       previous doc fix.  This change made the text confusing.  (Bug#17567)
+
+2021-09-25  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el (tab-bar-new-tab-to): Use ignore-window-parameters.
+
+       Suggested by Adam Porter <adam@alphapapa.net> in
+       https://lists.gnu.org/archive/html/emacs-devel/2021-09/msg01758.html
+
+2021-09-25  Adam Porter  <adam@alphapapa.net>
+
+       * lisp/tab-line.el: Add modified-buffer face
+
+       (tab-line-tab-modified): New face.
+       (tab-line-tab-face-modified): New function.
+       (tab-line-tab-face-functions): Use new function.
+
+       * etc/NEWS: Update.
+
+2021-09-25  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix byte-compiler crash for legal dynamic-binding code
+
+       This should really be taken care of by a syntax normalisation step in
+       the frontend, but there is no such step for non-lexbind code yet.
+
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize-letX): Tolerate bindingsa
+       without initialising expressions.
+       * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-tests--test-cases):
+       Add test cases.
+
+2021-09-25  Mattias Engdegård  <mattiase@acm.org>
+
+       Constant-propagate variables bound outside loops
+
+       Previously, variables bound outside `while` loops were not substituted
+       inside even in the absence of mutation.  Add the necessary mutation
+       checking inside loops to allow propagation of values and aliased
+       variables.
+
+       * lisp/emacs-lisp/byte-opt.el
+       (byte-optimize--inhibit-outside-loop-constprop): New variable.
+       (byte-optimize-form-code-walker): First traverse each loop without
+       substitution to discover mutation, then without restrictions.
+       * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-test-loop): New.
+       (bytecomp-tests--test-cases): Add test cases.
+
+2021-09-25  Mattias Engdegård  <mattiase@acm.org>
+
+       Use ambient lexical-binding value in ert-deftest body (bug#50738)
+
+       * lisp/emacs-lisp/ert.el (ert-deftest):
+       Evaluate the body of `ert-deftest` with the `lexical-binding` value of
+       the source file (or more precisely the value in force when the
+       definition is evaluated), which is what everyone expected, instead of
+       always using dynamic binding which is what they got until now.
+       * test/lisp/emacs-lisp/ert-tests.el
+       (ert-test-deftest-lexical-binding-t): New test.
+
+2021-09-25  Mattias Engdegård  <mattiase@acm.org>
+
+       Renege on anonymous &rest (bug#50268, bug#50720)
+
+       Allowing &rest without a variable name following turned out not to be
+       very useful, and it never worked properly.  Disallow it.
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-check-lambda-list):
+       * src/eval.c (funcall_lambda):
+       Signal error for &rest without variable name.
+       * doc/lispref/functions.texi (Argument List): Adjust manual.
+       * etc/NEWS (file): Announce.
+       * test/src/eval-tests.el (eval-tests--bugs-24912-and-24913):
+       Extend test, also checking with and without lexical binding.
+       (eval-tests-accept-empty-optional-rest): Reduce to...
+       (eval-tests-accept-empty-optional): ...this, again checking
+       with and without lexical binding.
+
+2021-09-25  Stefan Kangas  <stefan@marxist.se>
+
+       Clarify define-derived-mode docstring
+
+       * lisp/emacs-lisp/derived.el (define-derived-mode): Doc fixes;
+       correctly mention that the mode name is used in the mode line, clarify
+       argument types, and how the mode hook is named.  (Bug17567)
+
+       (derived-mode-hook-name, derived-mode-map-name)
+       (derived-mode-syntax-table-name, derived-mode-abbrev-table-name):
+       Clarify that argument is a symbol.
+
+2021-09-25  Philip Kaludercic  <philipk@posteo.net>
+
+       Add myself as rcirc maintainer
+
+       * lisp/net/rcirc.el (rcirc-sentinel): Use process-status
+
+       * doc/misc/rcirc.texi (Using rcirc with bouncers): Remove confusing 
sentence
+
+       * lisp/net/rcirc.el (rcirc-reconnect): Use rcirc-reconnect-delay
+
+       * lisp/net/rcirc.el (rcirc-reconnect): Set rcirc-joined
+
+2021-09-25  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/isearch.el (isearch-forward-regexp): Doc fix.  (Bug22483)
+
+2021-09-25  Stefan Kangas  <stefan@marxist.se>
+
+       Minor clarification of define-minor-mode :keymap argument
+
+       * lisp/emacs-lisp/easy-mmode.el (define-minor-mode): Minor doc fix;
+       clarify by saying that ":keymap" should be an "unquoted variable
+       name".  (Bug#25505)
+
+2021-09-25  Stefan Kangas  <stefan@marxist.se>
+
+       Buttonize functions in curved quotes in ERC
+
+       * lisp/erc/erc-button.el (erc-button-alist): Buttonize Emacs
+       functions in curved quotes.  (Bug#49964)
+
+2021-09-25  Stefan Kangas  <stefan@marxist.se>
+
+       Extend and improve ERT manual section on running interactively
+
+       * doc/misc/ert.texi (Running Tests Interactively): Format commands in
+       a table, improve indexing, and add several missing
+       commands.  (Bug#41829)
+
+2021-09-25  Stephen Gildea  <stepheng+emacs@gildea.com>
+
+       Update mh-scan regexp to match mh-note-allowlisted
+
+       lisp/mh-e/mh-scan.el (mh-scan-good-msg-regexp, mh-scan-cmd-note-width):
+       Update to match new value ("A") of mh-note-allowlisted.
+
+2021-09-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Document the new paren-space indentation rule
+
+       * doc/emacs/programs.texi (Lisp Indent): Mention the new
+       paren-space indentation rule.
+
+2021-09-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Some NEWS tagging
+
+2021-09-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       'xref-search-program'-related doc string fixes
+
+       * lisp/progmodes/xref.el (xref-search-program): Mention what this
+       variable controls.
+       (xref-matches-in-files): Mention the variables that controls it.
+
+2021-09-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Document the 'string' thingatpt target
+
+       * doc/lispref/text.texi (Buffer Contents): Mention the 'string'
+       target.
+
+2021-09-25  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix cursor motion around some Emoji sequences
+
+       * src/character.h: Add TAG_SPACE and CANCEL_TAG to known Unicode
+       characters values.
+       * src/composite.c (char_composable_p): Recognize TAG characters
+       relevant to Emoji as composable regardless of their General
+       Category.  (Bug#39799)
+
+2021-09-25  Eli Zaretskii  <eliz@gnu.org>
+
+       Use explicit man-page section in references
+
+       * lisp/dired-aux.el (dired-do-chmod): Use explicit man-page
+       section in the doc string.  This avoids inadvertently showing
+       the wrong man page, when several identically-named pages are
+       possible in different sections.  E.g., there's also chmod(2).
+
+2021-09-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       save-some-buffers-root doc string change
+
+       * lisp/files.el (save-some-buffers-root): Improve doc string.
+
+2021-09-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Do some NEWS tagging
+
+2021-09-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Document redisplay-skip-fontification-on-input
+
+       * doc/emacs/display.texi (Scrolling): Mention
+       redisplay-skip-fontification-on-input.
+
+2021-09-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add new user option ispell-help-timeout
+
+       * lisp/textmodes/ispell.el (ispell-help-timeout): New user option.
+       (ispell-help): Use it.
+
+2021-09-25  Stefan Kangas  <stefan@marxist.se>
+
+       Set :type of suggest-key-bindings to natnum
+
+       * lisp/simple.el (suggest-key-bindings): Set :type to
+       natnum.  (Bug#15809)
+
+2021-09-25  Stefan Kangas  <stefan@marxist.se>
+
+       New :type natnum for defcustom
+
+       * lisp/wid-edit.el (natnum): New widget type.  (Bug#15809)
+       * doc/lispref/customize.texi (Simple Types): Document it.
+
+2021-09-25  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/dired-aux.el (dired-do-chmod): Simplify docstring.
+
+2021-09-25  Stefan Kangas  <stefan@marxist.se>
+
+       Add support for man page hyperlinks in doc strings
+
+       * lisp/help-mode.el (help-man): New button type.
+       (help-xref-man-regexp): New const.
+       (help-make-xrefs): Use them to allow making man page buttons.
+       * doc/lispref/tips.texi (Documentation Tips): Document the new
+       hyperlink type.  (Bug#39215)
+
+2021-09-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix some instances in the Emacs manual with misleading prefix syntax
+
+       * doc/emacs/msdos.texi (Windows Keyboard):
+       * doc/emacs/misc.texi (Editing Binary Files):
+       * doc/emacs/macos.texi (Mac / GNUstep Events):
+       * doc/emacs/kmacro.texi (Basic Keyboard Macro):
+       * doc/emacs/glossary.texi (Glossary):
+       * doc/emacs/fixit.texi (Spelling): Fix some instances where the
+       syntax seems to imply we're talking about a prefix key (bug#50792).
+
+2021-09-25  Manuel Giraud  <manuel@ledu-giraud.fr>
+
+       Make 'C-u C-x v v' handle unregistered files.
+
+       * lisp/vc/vc.el (vc-next-action): Make 'C-u C-x v v' handle
+       unregistered files (bug#50602).
+
+2021-09-25  Daniel Martín  <mardani29@yahoo.es>
+
+       Mention the 'r' key in ask-user-about-supersession-help
+
+       * lisp/userlock.el (ask-user-about-supersession-help): Replace "n, and
+       then M-x revert-buffer" in the help message with "r", which does the
+       same thing.  (Bug#50780)
+
+2021-09-25  akater  <nuclearspace@gmail.com>
+
+       Indent bodies of local function definitions properly in elisp-mode
+
+       * lisp/emacs-lisp/lisp-mode.el (lisp-indent-function): Check for
+       local defforms (`cl-flet' and `cl-labels').
+       (lisp--local-defform-body): New auxiliary function (bug#9622).
+
+2021-09-25  Stefan Kangas  <stefan@marxist.se>
+
+       Clarify where to find CONTRIBUTE
+
+       * doc/emacs/trouble.texi (Contributing): Say that CONTRIBUTE is
+       found in the development version of Emacs.  (Bug#37414)
+
+2021-09-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Use gzip to uncompess .xz files on MacOS
+
+       * lisp/jka-cmpr-hook.el (jka-compr-compression-info-list): Use
+       gzip to uncompess .xz files on MacOS (bug#29235).
+
+2021-09-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Use `temporary-file-directory' in `with-existing-directory'
+
+       * lisp/subr.el (with-existing-directory): Use
+       `temporary-file-directory' over TMPDIR.
+
+2021-09-25  Stefan Kangas  <stefan@marxist.se>
+
+       Fix alignment on font size change in tabulated-list-mode
+
+       * lisp/emacs-lisp/tabulated-list.el (tabulated-list-print-col): Fix
+       bug where the columns didn't align correctly when using
+       'text-scale-mode' to decrease the font size.  (Bug#48639)
+
+2021-09-25  Stefan Kangas  <stefan@marxist.se>
+
+       Doc fix; cl-random is only pseudo-random
+
+       * lisp/emacs-lisp/cl-extra.el (cl-random): Doc fix; say it's only
+       pseudo-random.
+
+2021-09-24  Stefan Kangas  <stefan@marxist.se>
+
+       checkdoc: Don't ask to disambiguate mode names
+
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-this-string-valid-engine):
+       Don't ask to disambiguate mode names.  (Bug#4110)
+
+2021-09-24  Stefan Kangas  <stefan@marxist.se>
+
+       Fix recently introduced bug in checkdoc
+
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-in-abbreviation-p): Fix
+       recently introduced bug where some abbreviations weren't recognized.
+       * test/lisp/emacs-lisp/checkdoc-tests.el
+       (checkdoc-tests-in-abbrevation-p/basic-case): Extend test.
+
+2021-09-24  Stefan Kangas  <stefan@marxist.se>
+
+       Revert change to use seq-random-elt in Tramp test
+
+       * test/lisp/net/tramp-tests.el (tramp-test44-asynchronous-requests):
+       Revert change to use seq-random-elt, as Tramp needs to be compatible
+       with Emacs 25, and the function was only added in 26.1.
+
+2021-09-24  Stefan Kangas  <stefan@marxist.se>
+
+       checkdoc: Improve wide line warning to decrease false positives
+
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-this-string-valid-engine):
+       Respect 'byte-compile-docstring-max-column' if it is set.  Allow the
+       first line to be three characters longer than the others to account
+       for indentation and the opening string character.
+
+2021-09-24  Stefan Kangas  <stefan@marxist.se>
+
+       Use command substitution instead of raw keys in more places
+
+       * admin/authors.el (authors):
+       * lisp/abbrev.el (abbrev-suggest-show-report):
+       * lisp/calc/calc.el (calc-display-trail, calc):
+       * lisp/completion.el (completion-locate-db-error):
+       * lisp/dired-x.el (dired-extra-startup):
+       * lisp/emacs-lisp/package.el (package-install-selected-packages):
+       * lisp/emulation/viper.el (viper-mode):
+       * lisp/facemenu.el (list-colors-display):
+       * lisp/mail/emacsbug.el (report-emacs-bug-hook):
+       * lisp/mail/sendmail.el (mail):
+       * lisp/menu-bar.el (menu-bar-mode):
+       * lisp/org/org.el (org-revert-all-org-buffers):
+       * lisp/progmodes/antlr-mode.el (antlr-help-rules-intro)
+       (antlr-insert-makefile-rules):
+       * lisp/progmodes/gdb-mi.el (gdb--check-interpreter):
+       * lisp/progmodes/xscheme.el (xscheme-process-sentinel):
+       * lisp/ps-print.el (ps-font-info-database):
+       * lisp/recentf.el (recentf-edit-list, recentf-open-files):
+       * lisp/vc/ediff-util.el (ediff-suspend):
+       * lisp/vc/pcvs.el (cvs-mode):
+       * lisp/vc/vc-bzr.el (vc-bzr-dir-extra-headers): Use command
+       substitution.
+
+2021-09-24  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer seq-random-elt to nth+random
+
+       * lisp/emacs-lisp/seq.el (seq-random-elt): Autoload.
+       * lisp/avoid.el (mouse-avoidance-random-shape):
+       * lisp/epa-ks.el (epa-ks--query-url):
+       * lisp/erc/erc-networks.el (erc-server-select):
+       * lisp/gnus/gnus-fun.el (gnus--random-face-with-type)
+       (gnus-fun-ppm-change-string):
+       * lisp/net/soap-inspect.el (soap-sample-value-for-xs-simple-type):
+       * lisp/obsolete/landmark.el (landmark-random-move):
+       * lisp/play/mpuz.el (mpuz-build-random-perm):
+       * lisp/play/zone.el (zone-pgm-stress):
+       * lisp/vc/add-log.el (add-change-log-entry):
+       * test/lisp/net/tramp-tests.el
+       (tramp-test44-asynchronous-requests): Prefer seq-random-elt to
+       nth+random.
+
+2021-09-24  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix auto-revert-test05-global-notify
+
+       * test/lisp/autorevert-tests.el (auto-revert-test05-global-notify):
+       Adapt test for killed buffer.
+
+2021-09-24  Robert Pluim  <rpluim@gmail.com>
+
+       Generate skin tone compositions from emoji-sequences.txt
+
+       Read skin tone modifier sequences from emoji-sequences.txt and add
+       them to the per-character composition rules derived from
+       emoji-zwj-sequences.txt, rather than adding them as lookback rules for
+       the skin tone modifiers.  This avoids an issue with the application of
+       such lookback rules.  See Bug#39799,
+       specifically
+       <https://lists.gnu.org/archive/html/bug-gnu-emacs/2021-09/msg01878.html>
+       for more details.
+
+       * admin/unidata/Makefile.in (zwj): Add emoji-sequences.txt as a 
dependency.
+       * admin/unidata/emoji-zwj.awk: Match RGI_Emoji_ZWJ_Sequence and
+       RGI_Emoji_Modifier_Sequence.  Remove manual addition of skin tone
+       composition rules with lookback.
+
+2021-09-24  Robert Pluim  <rpluim@gmail.com>
+
+       Add a few more missing emoji overrides
+
+       * admin/unidata/blocks.awk: Add some more emoji overrides.
+
+2021-09-24  Robert Pluim  <rpluim@gmail.com>
+
+       Move compose-gstring-for-variation-glyph
+
+       It logically belongs in composite.el, not japanese.el
+
+       * lisp/language/japanese.el (compose-gstring-for-variation-glyph):
+       Remove from here.
+       * lisp/composite.el (compose-gstring-for-variation-glyph): And add here.
+
+2021-09-24  Robert Pluim  <rpluim@gmail.com>
+
+       Update provenance comment in charscript.el
+
+       * admin/unidata/blocks.awk: Update comment about sources used to
+       generate charscript.el.
+
+2021-09-24  Juri Linkov  <juri@linkov.net>
+
+       * lisp/gnus/mm-uu.el (mm-uu-type-alist): Add 
markdown-diff/-emacs-sources
+
+       (Bug#50763)
+
+2021-09-24  Juri Linkov  <juri@linkov.net>
+
+       New thing-at-point target 'string' used in context-menu-region
+
+       * lisp/mouse.el (context-menu-region): Use separate "List" and "String".
+
+       * lisp/thingatpt.el (string): New target 'string'.
+       (thing-at-point-bounds-of-string-at-point): New function.
+       (thing-at-point-bounds-of-list-at-point): Revert previous commit
+       by removing optional args 'escape-strings' and 'no-syntax-crossing'.
+       (list-or-string): Remove recently added target 'list-or-string'.
+       (thing-at-point-bounds-of-list-or-string-at-point): Remove function.
+       https://lists.gnu.org/archive/html/emacs-devel/2021-09/msg01737.html
+
+2021-09-24  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Pacify recent warnings in ansi-color-tests.el
+
+       * test/lisp/ansi-color-tests.el: Remove invalid package keyword
+       'ansi', and unused dependency on cl-lib.
+       (yellow, bright-yellow): Replace prefix-less dynvars with
+       corresponding local lexvars.
+       (test-strings): Rename prefix-less dynvar...
+       (ansi-color-tests--strings): ...to this.  All users updated.
+       (ansi-color-apply-on-region-test)
+       (ansi-color-apply-on-region-bold-is-bright-test): Simplify.
+       (ansi-color-apply-on-region-preserving-test): Reindent.
+
+2021-09-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add `info-lookup-symbol' to the menu
+
+       * lisp/menu-bar.el (menu-bar-search-documentation-menu): Add entry
+       for `info-lookup-symbol' (bug#50759).
+
+2021-09-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add s Symbol entry in the glossary
+
+       * doc/emacs/glossary.texi (Glossary): Add an entry for Symbol
+       (bug#50760).
+
+2021-09-23  Konstantin Kharlamov  <Hi-Angel@yandex.ru>
+
+       Do not count git markers as "deleted lines"
+
+       * lisp/vc/diff-mode.el (diff-fixup-modifs): Skip "end of patch"
+       markers that `git-format-patch` leaves around (bug#50761).
+
+2021-09-23  Miha Rihtaršič  <miha@kamnitnik.top>
+
+       Fix problems with 'C-c C-n' in sh-script-mode
+
+       * lisp/progmodes/sh-script.el (sh-shell-process): If a *shell* buffer
+       doesn't exist, 'C-c C-n' creates one and displays it.  This patch
+       prevents it from being displayed in the selected window.
+       Additionally, it ensures that the local `sh-shell-process' variable is
+       set in the correct buffer (bug#50765).
+
+2021-09-23  Stefan Kangas  <stefan@marxist.se>
+
+       checkdoc: Add abbreviation and simplify
+
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-in-abbreviation-p): Add
+       abbreviation "a.k.a.".  Simplify.
+
+2021-09-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix typo in previous man.el change
+
+       * lisp/man.el (Man-ansi-color-map): Fix typo in last checkin.
+
+2021-09-23  Jim Porter  <jporterbugs@gmail.com>
+
+       Add support for "bright" ANSI colors in term-mode
+
+       * lisp/term.el (ansi-term-color-vector): Add new faces.
+       (term-color-black, term-color-red, term-color-green, term-color-yellow)
+       (term-color-blue, term-color-magenta, term-color-cyan, 
term-color-white):
+       Inherit from 'ansi-color-COLOR'.
+       (term-color-bright-black, term-color-bright-red, 
term-color-bright-green)
+       (term-color-bright-yellow, term-color-bright-blue)
+       (term-color-bright-magenta, term-color-bright-cyan)
+       (term-color-bright-white): New faces.
+       (term--maybe-brighten-color): New function.
+       (term-handle-colors-array): Handle bright colors.
+       * test/lisp/term-tests.el (term-colors, term-colors-bold-is-bright):
+       New functions.
+
+2021-09-23  Jim Porter  <jporterbugs@gmail.com>
+
+       Add support for "bright" ANSI colors in ansi-color
+
+       * lisp/ansi-color.el (ansi-color-bold, ansi-color-faint, 
ansi-color-italic)
+       (ansi-color-underline, ansi-color-slow-blink, ansi-color-fast-blink)
+       (ansi-color-inverse, ansi-color-red, ansi-color-green, 
ansi-color-yellow)
+       (ansi-color-blue, ansi-color-magenta, ansi-color-cyan, ansi-color-white)
+       (ansi-color-bright-red, ansi-color-bright-green, 
ansi-color-bright-yellow)
+       (ansi-color-bright-blue, ansi-color-bright-magenta, 
ansi-color-bright-cyan)
+       (ansi-color-bright-white): New faces.
+       (ansi-color-basic-faces-vector, ansi-color-normal-colors-vector)
+       (ansi-color-bright-colors-vector): New constants.
+       (ansi-color-faces-vector, ansi-color-names-vector): Make obsolete.
+       (ansi-color-bold-is-bright): New defcustom.
+       (ansi-color--find-face): Sort ANSI codes and check
+       'ansi-color-bold-is-bright'.
+       (ansi-color-apply-sequence): Support bright ANSI colors.
+       (ansi-color-make-color-map, ansi-color-map, ansi-color-map-update):
+       Make obsolete.
+       (ansi-color-get-face-1): Add BRIGHT parameter.
+       * lisp/man.el (Man-ansi-color-basic-faces-vector): New variable.
+       (Man-ansi-color-map): Make obsolete.
+       (Man-fontify-manpage): Use 'Man-ansi-color-basic-faces-vector' here.
+       * test/lisp/ansi-color-tests.el
+       (ansi-color-apply-on-region-bold-is-bright-test): New function.
+
+2021-09-23  Stefan Kangas  <stefan@marxist.se>
+
+       Avoid jumping too far in checkdoc-in-abbreviation-p
+
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-in-abbreviation-p): Use
+       'forward-ward' instead of 'forward-sexp' to avoid jumping too far in
+       some situations.  (Bug#50731)
+
+       * test/lisp/emacs-lisp/checkdoc-tests.el
+       (checkdoc-tests--abbrev-test): New helper function.
+       (checkdoc-tests-in-abbrevation-p/basic-case): Rename from
+       'checkdoc-tests-in-abbrevation-p'.
+       (checkdoc-tests-in-abbrevation-p/with-parens)
+       (checkdoc-tests-in-abbrevation-p/with-escaped-parens): Use above new
+       helper function.
+       (checkdoc-tests-in-abbrevation-p/single-char)
+       (checkdoc-tests-in-abbrevation-p/with-em-dash)
+       (checkdoc-tests-in-abbrevation-p/incorrect-abbreviation): New tests.
+
+2021-09-23  Philip Kaludercic  <philipk@posteo.net>
+
+       Handle updates flags when setting flags
+
+       * lisp/gnus/nnmaildir.el (nnmaildir--article-set-flags): Handle
+       updated flags more gracefully.
+
+2021-09-23  Dmitry Gutov  <dgutov@yandex.ru>
+
+       A bit less overhead when converting hits
+
+       * lisp/progmodes/xref.el (xref--collect-matches):
+       Move 'remote-id' and 'syntax-needed' definitions to the caller
+       function.  Bind 'inhibit-modification-hooks' to t (bug#50733).
+
+2021-09-23  Dmitry Gutov  <dgutov@yandex.ru>
+
+       More per-match overhead reduction
+
+       * lisp/progmodes/xref.el (xref--show-common-initialize)
+       (xref-revert-buffer): Inhibit modification hooks (bug#50733).
+       (xref--insert-xrefs): Cosmetics (no measurable difference here).
+
+2021-09-23  Dmitry Gutov  <dgutov@yandex.ru>
+
+       xref-matches-in-files: Decrease per match and per group overhead
+
+       * lisp/progmodes/xref.el (xref-search-program-alist):
+       Add '--null' argument for slightly faster parsing and probably
+       better behavior with weirder file names.
+       (xref--alistify): Don't accept TEST argument, use 'assoc' instead
+       of 'cl-assoc', use a tash table during sorting (bug#50733).
+
+2021-09-23  Philip Kaludercic  <philipk@posteo.net>
+
+       Fix string-distance for two empty strings
+
+       * src/fns.c (Fstring_distance): Avoid using uninitialized memory.
+       * test/src/fns-tests.el (test-string-distance): Add test cases.
+
+2021-09-23  Juri Linkov  <juri@linkov.net>
+
+       * lisp/mouse.el (context-menu-region): Use save-excursion for 
syntax-ppss.
+
+2021-09-23  Juri Linkov  <juri@linkov.net>
+
+       New thing-at-point target 'list-or-string' used in context-menu-region
+
+       * lisp/mouse.el (context-menu-region): Rearrange the order to
+       All>Defun>List>Line>Symbol.  Show title either "List" or "String"
+       depending on syntax-ppss, then use thing 'list-or-string' (bug#9054).
+
+       * lisp/thingatpt.el (thing-at-point-bounds-of-list-at-point): Add 
optional
+       args 'escape-strings' and 'no-syntax-crossing' like in 'up-list'.
+       (list-or-string): New target 'list-or-string'.
+       (thing-at-point-bounds-of-list-or-string-at-point): New function.
+
+2021-09-23  Juri Linkov  <juri@linkov.net>
+
+       * lisp/outline.el (outline-minor-mode-cycle-filter): New defcustom 
(bug#50679)
+
+       (outline-minor-mode-cycle--bind): New helper function.
+       (outline-minor-mode-cycle-map): Rename from outline-mode-cycle-map.
+       (outline-mode-map): Revert part of 6458e16f33 to disassociate
+       keymaps outline-mode-map and outline-minor-mode-cycle-map.
+       (outline-font-lock-keywords, outline-minor-mode-highlight-buffer):
+       Use outline-minor-mode-cycle-map instead of outline-mode-cycle-map.
+
+       * lisp/help.el (describe-bindings): Rename outline-mode-cycle-map
+       to outline-minor-mode-cycle-map.
+
+2021-09-23  Michael Albinus  <michael.albinus@gmx.de>
+
+       * test/infra/Dockerfile.emba: Do not run 'make -j4 bootstrap'.
+
+2021-09-23  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix Tramp's make-process on macOS
+
+       * lisp/net/tramp-sh.el (tramp-get-remote-mknod-or-mkfifo): New defun.
+       (tramp-sh-handle-make-process): Use it.  (Bug#50748)
+
+2021-09-23  Michael Albinus  <michael.albinus@gmx.de>
+
+       * lisp/net/tramp-cmds.el (tramp-cleanup-connection): Remove trace 
buffer.
+
+2021-09-23  Philip Kaludercic  <philipk@posteo.net>
+
+       Add aggregate project discovery and maintenance functions
+
+       * lisp/progmodes/project.el (project-remember-project): Add
+       optional no-write argument.
+       (project-remember-projects-under): Add command.
+       (project-forget-zombie-projects): Add command.
+       (project-forget-projects-under): Add command.
+       * etc/NEWS: Document new commands.
+
+2021-09-23  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Fix vc-annotate-show-log-revision-at-line
+
+       * lisp/vc/vc-annotate.el (vc-annotate-show-log-revision-at-line):
+       Stop from being affected by 'vc-git-print-log-follow'.
+
+       * lisp/vc/vc-git.el (vc-git-print-log-follow):
+       Mention caveats in a comment.
+
+2021-09-23  Wilson Snyder  <wsnyder@wsnyder.org>
+
+       verilog-mode.el: Backout part of recent change showing wrong comment
+
+2021-09-23  Stefan Kangas  <stefan@marxist.se>
+
+       Clarify which-function tooltip text
+
+       * lisp/progmodes/which-func.el (which-func-format): Clarify tooltip
+       text.
+
+2021-09-23  Robert Pluim  <rpluim@gmail.com>
+
+       Improve NEWS entry for 'ffap-file-name-with-spaces'
+
+       * etc/NEWS: Mention default value of 'ffap-file-name-with-spaces'.
+
+2021-09-23  Martin Rudalics  <rudalics@gmx.at>
+
+       ;* lisp/whitespace.el (whitespace-display-window): Add doc-string.
+
+2021-09-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify align-regexp doc string
+
+       * lisp/align.el (align-regexp): Clarify what REGEXP has to
+       contain, and which bits are added automatically interactively
+       (bug#33541).
+
+2021-09-23  Stefan Kangas  <stefan@marxist.se>
+
+       Add section to refcard explaining our keybinding notation
+
+       * etc/refcards/refcard.tex (Starting Emacs): Delete section.
+       (Key Binding Notation): New section.  (Bug#41403)
+
+2021-09-23  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in emoji-zwj.el
+
+       * admin/unidata/emoji-zwj.awk: Add lexical-binding cookie to
+       generated fie emoji-zwj.el.
+
+2021-09-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Expand the `match-string' doc string
+
+       * lisp/subr.el (match-string): Mention some caveats (bug#34214).
+
+2021-09-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve error messaging from byte-compiling dotted lists
+
+       * lisp/emacs-lisp/cconv.el (cconv-analyze-form): Improve error
+       messaging when byte-compiling dotted lists (bug#35186).
+
+       Test case -- byte-compile the following file:
+
+       ;;;  -*- lexical-binding: t -*-
+
+       (defun foo ()
+         (+ 1 2)
+         (a . b))
+
+2021-09-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Move 'kdb-macro-redisplay' key binding
+
+       * doc/emacs/kmacro.texi (Basic Keyboard Macro): Adjust.
+
+       * lisp/kmacro.el (kmacro-keymap): Move 'kdb-macro-redisplay' to
+       `C-x C-k d' since upper-case letters are reserved for users (bug#50727).
+
+2021-09-22  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Put './' in the project directory completions
+
+       * lisp/progmodes/project.el (project--read-file-cpd-relative):
+       Put './' in the completions set when cpd was in the original
+       (bug#50732).
+
+2021-09-22  Juri Linkov  <juri@linkov.net>
+
+       Many improvements for Context Menus (bug#9054)
+
+       * lisp/menu-bar.el (menu-bar-showhide-menu): Add "Context Menus".
+
+       * lisp/mouse.el (context-menu-undo): Add "in Region" to the titles
+       when the region is active.
+       (context-menu-region): Use 'mouse-yank-from-menu' in menu items
+       created from 'yank-menu' for submenu "Paste from Kill Menu".
+       (context-menu-region): Add submenu "Select" with things to mark.
+       (mark-thing-at-mouse, mouse-yank-from-menu): New functions.
+
+       * lisp/thingatpt.el (bounds-of-thing-at-mouse): New function.
+
+       * lisp/progmodes/elisp-mode.el (elisp-context-menu):
+       * lisp/progmodes/prog-mode.el (prog-context-menu):
+       Use full symbol/identifier names in :help strings.
+
+       Suggested by Martin Rudalics <rudalics@gmx.at>
+
+2021-09-22  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix build with native compilation but without zlib
+
+       * src/comp.c (comp_hash_source_file): Condition code that requires
+       zlib with HAVE_ZLIB.
+
+       * etc/NEWS: Explain that '--without-compress-install' is necessary
+       when configuring with native compilation but without zlib.
+
+2021-09-22  Wilson Snyder  <wsnyder@wsnyder.org>
+
+       verilog-mode.el: Enable lexical binding, and merge from upstream.
+
+       * lisp/progmodes/verilog-mode.el: Enable lexical binding.  Templates 
that
+         used the never-documented `inst' or `submod' variables may need to 
change
+         to use vl-... variables.
+         (verilog-at-constraint-p): Fix indentation on double curly brackets
+         (#1719) (#1744).  Reported by Nikolay Puzanov.
+
+2021-09-22  Mattias Engdegård  <mattiase@acm.org>
+
+       Don't rely on lexical-binding being nil in tests
+
+       * test/lisp/button-tests.el (button--help-echo-form):
+       * test/lisp/files-tests.el (files-tests-permanent-local-variables):
+       Remove assumption that `with-temp-buffer` creates a buffer
+       where `lexical-binding` is nil.
+
+2021-09-22  Eli Zaretskii  <eliz@gnu.org>
+
+       Doc string fixes in comp.e
+
+       * src/comp.c (Fcomp_el_to_eln_filename)
+       (Fcomp_el_to_eln_rel_filename): Doc fix.
+
+2021-09-22  Eli Zaretskii  <eliz@gnu.org>
+
+       Update comments warning about GC-resistant C programming
+
+       * src/eval.c: Remove an outdated comment about protection from GC.
+       * src/buffer.h:
+       * src/lisp.h: Add warnings about using 'char *' pointers to text
+       of Lisp strings and buffer text in code that could GC.  Reported by
+       Po Lu <luangruo@yahoo.com>
+
+2021-09-22  Daniel Fleischer  <danflscr@gmail.com>
+
+       Native compilation on macOS: libgccjit not found
+
+       * etc/PROBLEMS: Describe the problem with libgccjit setup on
+       macOS.  (Bug#50411)
+
+2021-09-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Speed up `replace-match' slightly
+
+       * src/search.c (Freplace_match): Speed up non-literal (but
+       actually literal) common case.
+
+       This makes
+
+       (benchmark-run 1000000
+         (replace-regexp-in-string
+         "a+" "foo"
+         
"ogihdipofdhookfdohkfdpokhpokhfdpokfdhpokfdhkdfkhgoadfphokfkhpofdkhkdpokf"))
+
+       about 10% faster.
+
+2021-09-22  Stephen Gildea  <stepheng+emacs@gildea.com>
+
+       Migrate MH-E functional tests from SourceForge
+
+       * test/lisp/mh-e/mh-limit-tests.el:
+       * test/lisp/mh-e/mh-utils-tests.el:
+       * test/lisp/mh-e/mh-xface-tests.el:
+       Import the functional tests from src/mh-unit.el.
+
+       mh-unit.el is from the old SourceForge mh-e repository, last changed
+       in 2017.  To this are applied unmerged patches Mike Kupfer wrote in
+       2018 ("Refactor mh-unit into functional and release tests" and
+       "Fix the functional tests").
+
+       All tests have been converted to run under Emacs's ERT framework.
+
+       Some tests for mh-utils use MH programs to examine mail folders.
+       These tests require an MH variant to be installed on the system; for
+       these, added both a mock harness that pretends the needed files and MH
+       programs do exist, and a wrapper that creates the necessary mail files.
+
+       New function 'mh-test-utils-setup-with-variant' bears some resemblance
+       to 'mh-test-folders-set-up' from the original tests.  New function
+       'mh-test-utils-setup-with-mocks' is new functionality for these tests.
+
+2021-09-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Change how thread-first/thread-last indent the first argument
+
+       * lisp/doc-view.el (doc-view--current-cache-dir): Reindent.
+
+       * lisp/emacs-lisp/subr-x.el (thread-first):
+       (thread-last): Change indentation to match examples.
+       (internal--build-binding): Reindent.
+
+       * test/lisp/emacs-lisp/subr-x-tests.el
+       (subr-x-test-thread-first-function-names-are-threaded):
+       (subr-x-test-thread-first-examples):
+       (subr-x-test-thread-last-function-names-are-threaded):
+       (subr-x-test-thread-last-examples): Reindent.
+
+2021-09-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make global-auto-revert-non-file-buffers work better
+
+       * lisp/autorevert.el (global-auto-revert-mode): Always switch on
+       the non-file tracking.
+       (auto-revert--global-possibly-adopt-current-buffer): New function
+       to respect dynamically changing `global-auto-revert-non-file-buffers'.
+
+2021-09-21  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       (etc-authors-mode--hide-local-variables): Obfuscate more efficiently
+
+2021-09-21  Stefan Kangas  <stefan@marxist.se>
+
+       Fix warning in etc-authors-mode.el
+
+       * lisp/textmodes/etc-authors-mode.el
+       (etc-authors-mode--hide-local-variables): Avoid warning.
+
+2021-09-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't quote nil and t in doc strings and comments
+
+       * test/src/minibuf-tests.el (test-try-completion-ignore-case):
+       * test/lisp/url/url-auth-tests.el
+       (url-auth-test-digest-auth-retrieve-cache):
+       * test/lisp/subr-tests.el (subr-tests-add-hook-depth):
+       * test/lisp/so-long-tests/so-long-tests.el
+       (so-long-tests-invisible-buffer-function):
+       * test/lisp/emacs-lisp/tabulated-list-test.el (tabulated-list-sort):
+       * src/xfaces.c:
+       * src/process.c (Finterrupt_process):
+       (syms_of_process):
+       * src/minibuf.c (Fread_from_minibuffer):
+       (Fcompleting_read):
+       (syms_of_minibuf):
+       * src/dispnew.c (syms_of_display):
+       * src/data.c:
+       * lisp/so-long.el (so-long--hack-local-variables):
+       * lisp/progmodes/elisp-mode.el (elisp--xref-find-definitions):
+       (elisp--xref-find-definitions):
+       * lisp/org/ox-html.el (org-html-htmlize-output-type):
+       * lisp/org/org-agenda.el (org-agenda-do-in-region):
+       * lisp/net/tramp.el:
+       * lisp/minibuffer.el (set-minibuffer-message):
+       * lisp/isearch.el (isearch-wrap-pause):
+       (isearch-repeat-on-direction-change):
+       * lisp/emacs-lisp/timer.el (timer):
+       * lisp/emacs-lisp/package.el (package-read-archive-contents):
+       * lisp/emacs-lisp/faceup.el (faceup-next-property-change):
+       * lisp/emacs-lisp/comp.el (comp-func):
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr-empty-p):
+       * lisp/emacs-lisp/cl-macs.el (cl-do):
+       (cl-do*):
+       (cl--self-tco):
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-unresolved-functions):
+       (byte-compile-cond-jump-table): Don't quote t and nil.
+
+2021-09-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Document isearch-wrap-pause
+
+       * doc/emacs/search.texi (Repeat Isearch): Document
+       `isearch-wrap-pause'.
+
+2021-09-21  Stefan Kangas  <stefan@marxist.se>
+
+       New major mode with font-locking for etc/AUTHORS
+
+       * lisp/textmodes/etc-authors-mode.el: New file.  (Bug#50674)
+       * etc/AUTHORS (mode): Add "mode: etc-authors" to local variables.
+       * admin/authors.el (authors): Add "mode: etc-authors" to local
+       variables of the generated AUTHORS file.
+
+2021-09-21  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve recently added documentation
+
+       * doc/lispref/lists.texi (Building Lists):
+       * lisp/subr.el (ensure-list): Avoid passive tense in documenting
+       'ensure-list'.
+
+2021-09-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add new function `ensure-list'
+
+       * doc/lispref/lists.texi (Building Lists): Document it.
+
+       * lisp/subr.el (ensure-list): New function.
+
+       * lisp/emacs-lisp/shortdoc.el (list): Mention it.
+
+2021-09-21  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix tramp-compat-temporary-file-directory implementation
+
+       * lisp/net/tramp-archive.el
+       (tramp-archive-handle-temporary-file-directory):
+       Use `tramp-compat-temporary-file-directory-function'.
+
+       * lisp/net/tramp-compat.el (tramp-compat-temporary-file-directory):
+       Make it a defconst.
+
+       * lisp/net/tramp.el (tramp-get-debug-buffer, tramp-get-debug-file-name)
+       (tramp-debug-message, tramp-file-name-handler, tramp-parse-file)
+       (tramp-parse-shostkeys-sknownhosts)
+       (tramp-handle-expand-file-name, tramp-handle-make-process)
+       (tramp-local-host-p, tramp-call-process)
+       (tramp-call-process-region, tramp-process-lines)
+       (tramp-read-passwd):
+       * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection):
+       * lisp/net/tramp-compat.el (tramp-compat-make-temp-name)
+       (tramp-compat-make-temp-file);
+       * lisp/net/tramp-crypt.el (tramp-crypt-file-name-for-operation)
+       (tramp-crypt-maybe-open-connection, tramp-crypt-send-command)
+       (tramp-crypt-do-encrypt-or-decrypt-file-name):
+       * lisp/net/tramp-fuse.el (tramp-fuse-mount-point, tramp-fuse-mounted-p)
+       (tramp-fuse-unmount):
+       * lisp/net/tramp-sh.el (tramp-do-copy-or-rename-file-out-of-band)
+       (tramp-sh-handle-expand-file-name)
+       (tramp-sh-handle-file-local-copy, )
+       (tramp-sh-handle-write-region, tramp-maybe-open-connection):
+       * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection): Use it.
+
+2021-09-21  Stefan Kangas  <stefan@marxist.se>
+
+       Minor clean-up and fixes in checkdoc
+
+       * lisp/emacs-lisp/checkdoc.el: Minor doc fixes.  Remove unnecessary
+       space at the end of 'y-or-n-p' prompts.  Move obsolete definitions to
+       the end of the file.
+       (checkdoc-symbol-words, checkdoc-common-verbs-wrong-voice): Add
+       some more common words.
+
+2021-09-21  Stefan Kangas  <stefan@marxist.se>
+
+       checkdoc: New defvars to disable some warnings
+
+       * lisp/emacs-lisp/checkdoc.el (checkdoc--argument-missing-flag)
+       (checkdoc--disambiguate-symbol-flag)
+       (checkdoc--interactive-docstring-flag): New defvars to disable some
+       warnings.  These are intended for use with Emacs itself rather than
+       with third-party libraries.
+       (checkdoc-this-string-valid, checkdoc-this-string-valid-engine):
+       Respect above new variables.
+
+2021-09-21  Stefan Kangas  <stefan@marxist.se>
+
+       Add new command 'checkdoc-dired'
+
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-dired): New command.
+       (checkdoc--dired-skip-lines-re): New constant.
+
+2021-09-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       More NEWS tagging
+
+       Do some NEWS tagging
+
+2021-09-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Document `window-bump-use-time'
+
+       * doc/lispref/windows.texi (Cyclic Window Ordering): Mention
+       window-bump-use-time.
+
+2021-09-21  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el: Preserve all existing tab parameters when switching 
tabs.
+
+       * lisp/tab-bar.el (tab-bar--tab, tab-bar--current-tab-make):
+       Copy other possible tab parameters.
+       https://lists.gnu.org/archive/html/emacs-devel/2021-09/msg01544.html
+
+2021-09-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Document completions-detailed
+
+       * doc/emacs/help.texi (Name Help): Document completions-detailed.
+       * lisp/minibuffer.el (completions-detailed): Give an example in
+       the doc string.
+
+2021-09-21  Michalis V  <mvar.40k@gmail.com>
+
+       Make dired-do-compress-to work in inserted subdirectories
+
+       * lisp/dired-aux.el (dired-do-compress-to): Make this work in file
+       in inserted subdirectories (bug#46913).
+
+2021-09-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Make dired-compress-file query for a directory to uncompress to"
+
+       This reverts commit 7e395a59b025c7f4be49294ad806addf5b1a25c9.
+
+       The behaviour change isn't good for the majority of tar files.
+
+2021-09-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Make recent dired tests check for external executables"
+
+       This reverts commit 98a17f30b8314e40a1edefac3d542d3e105c7bd6.
+
+       Reverting parent commit.
+
+2021-09-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Restore some of the previous behaviour in whitespace-display-window
+
+       * lisp/whitespace.el (whitespace-display-window): Emulate previous
+       behaviour (bug#50716).  Code from martin rudalics <rudalics@gmx.at>.
+
+2021-09-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't use `format' on strings without % format directives
+
+       * lisp/vc/ediff-init.el (ediff-BAD-INFO):
+       * lisp/url/url-ldap.el (url-ldap):
+       * lisp/url/url-http.el (url-http--user-agent-default-string):
+       * lisp/textmodes/reftex.el (reftex-access-parse-file):
+       * lisp/textmodes/reftex-index.el (reftex-index-phrases-info):
+       * lisp/textmodes/ispell.el (ispell-create-debug-buffer):
+       * lisp/term.el (serial-read-speed):
+       * lisp/progmodes/verilog-mode.el (verilog-scan-debug):
+       * lisp/progmodes/idlwave.el (idlwave-find-module):
+       * lisp/progmodes/compile.el (compilation-revert-buffer):
+       * lisp/org/org-agenda.el (org-search-view):
+       * lisp/net/telnet.el (telnet-revert-buffer):
+       * lisp/net/soap-inspect.el (soap-sample-value-for-xs-simple-type):
+       * lisp/net/newst-backend.el (newsticker--cache-read):
+       * lisp/mh-e/mh-seq.el (mh-msg-is-in-seq):
+       * lisp/mail/smtpmail.el (smtpmail-via-smtp):
+       * lisp/mail/emacsbug.el (report-emacs-bug):
+       * lisp/jsonrpc.el (jsonrpc-error):
+       * lisp/help-fns.el (describe-variable):
+       * lisp/gnus/mm-decode.el (mm-possibly-verify-or-decrypt):
+       * lisp/gnus/gnus.el (gnus-group-startup-message):
+       (gnus-group-startup-message):
+       * lisp/gnus/gnus-group.el (gnus-group-restart):
+       * lisp/frame.el (make-frame-on-display):
+       * lisp/emulation/viper-ex.el (ex-help):
+       * lisp/calendar/icalendar.el (icalendar--convert-ical-to-diary):
+       (icalendar--add-diary-entry):
+       * lisp/calendar/cal-tex.el (cal-tex-end-document):
+       * lisp/calc/calcalg3.el (math-ninteg-romberg): Don't use `format'
+       on strings that have no % format directives in them.
+
+2021-09-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix usage of `format' in mm-uu-pgp-encrypted-extract
+
+       * lisp/gnus/mm-uu.el (mm-uu-pgp-encrypted-extract): Use
+       `substring' instead of `format' to ensure a fresh string.
+
+2021-09-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix usage of `format' in `article-verify-x-pgp-sig'
+
+       * lisp/gnus/gnus-art.el (article-verify-x-pgp-sig): Use
+       `substring' instead of `format' to ensure a fresh string.
+
+2021-09-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix PGP verification buttons (which would have cached results)
+
+       * lisp/gnus/mm-uu.el (mm-uu-pgp-signed-extract): `format' was used
+       here to guarantee a new, fresh string (since it's destructively
+       modified), but that's apparently not the case any more.  Use
+       `substring' instead, which is documented to do this.
+
+2021-09-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't inhibit redisplay in the mml* functions
+
+       * lisp/gnus/mml-smime.el (inhibit-redisplay): Removed.
+       (mml-smime-epg-encrypt):
+       (mml-smime-epg-verify): Don't inhibit.
+
+       * lisp/gnus/mml1991.el (mml1991-epg-sign): Ditto.
+
+       * lisp/gnus/mml2015.el (inhibit-redisplay): Removed
+       (mml2015-epg-decrypt):
+       (mml2015-epg-clear-decrypt):
+       (mml2015-epg-verify):
+       (mml2015-epg-clear-verify):
+       (mml2015-epg-sign):
+       (mml2015-epg-encrypt): Don't bind `inhibit-redisplay', because it
+       makes debugging very odd, and doesn't seem to help much with anything.
+
+2021-09-21  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/python.el (python-syntax-stringify): Extend
+       comment about last change.
+
+2021-09-21  Robert Pluim  <rpluim@gmail.com>
+
+       Fix emoji-zwj.awk dolist
+
+       * admin/unidata/emoji-zwj.awk: Fix typo, the dolist should end
+       after the first set-char-table-range.
+
+2021-09-21  Glenn Morris  <rgm@gnu.org>
+
+       Make recent dired tests check for external executables
+
+       * test/lisp/dired-aux-tests.el (dired-test-bug47058-tar)
+       (dired-test-bug47058-zip): Add skip conditions.
+
+2021-09-21  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Rename project-remove-known-project to project-forget-project
+
+       * doc/emacs/maintaining.texi (Managing Projects): Ditto.
+
+       * etc/NEWS: Update accordingly.
+
+       * lisp/progmodes/project.el (project-forget-project):
+       Rename from 'project-remove-known-project', for consistency with
+       'project-remember-project' (discussed in bug#50297).
+
+2021-09-21  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Consistently test alist keys with equal in map.el
+
+       * etc/NEWS: Announce new default behavior of map-elt and map-delete
+       on alists.
+
+       * lisp/emacs-lisp/map.el: Bump to version 3.2.
+       (map-elt): Test alist keys with equal by default.  Betray a little
+       bit more information in the docstring on which functions are used
+       for which map types.  (Bug#47368)
+       (map-put): Update docstring accordingly.
+       (map--plist-delete): Consistently test plist keys with eq.
+       (map-delete): Consistently test alist keys with equal.
+
+       * test/lisp/emacs-lisp/map-tests.el (test-map-elt-testfn): Update
+       for new map-elt behavior.
+       (test-map-put!-alist, test-map-delete-alist): New tests.
+
+2021-09-21  Robert Pluim  <rpluim@gmail.com>
+
+       Remove the emoji script overrides for U+2xxx codepoints
+
+       * admin/unidata/blocks.awk: Remove the overrides for U+261D, U+26F9,
+       U+270C..U+270D, and U+2764.  They don't belong in the emoji script.
+
+2021-09-21  Robert Pluim  <rpluim@gmail.com>
+
+       Fix the UK flag sequence composition regexp
+
+       * admin/unidata/emoji-zwj.awk: Fix the regexp for UK flags.
+       Thanks to Mattias Engdegård <mattiase@acm.org> and his magic
+       regexp checker.
+
+2021-09-21  Robert Pluim  <rpluim@gmail.com>
+
+       Silence byte-compiler warning for network-stream-tests.el
+
+       The api specifically requires a symbol here, so we can't just replace
+       nowait with nil.
+
+       * test/lisp/net/network-stream-tests.el
+       (open-gnutls-stream-old-api-wait): Add explicit value for nowait
+       to silence byte-compiler warning due to Bug#47080.
+
+2021-09-21  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Avoid double argument evaluation in vc-call macro
+
+       * lisp/vc/vc-hooks.el (vc-call): Ensure second argument is evaluated
+       only once (bug#50690).
+       * etc/NEWS (Change Logs and VC): Announce this change in behavior.
+
+2021-09-21  João Távora  <joaotavora@gmail.com>
+
+       Make syntax-ppss more accurate for Python triple quotes (bug#49518)
+
+       By putting delimiter syntax on the last character of Python
+       triple-quoted strings, this makes syntax-ppss be more accurate.
+
+       Previously:
+
+           emacs -Q something.py
+           type two single quotes
+           M-: (nth 3 (syntax-ppss))
+           notice how the return value says you're outside a string, correctly
+           type another quote
+           M-: (nth 3 (syntax-ppss))
+           notice how the return value says you're inside a string, correctly
+           backspace the quote just entered
+           M-: (nth 3 (syntax-ppss))
+           notice how the return value says you're inside a string, incorrectly
+
+       With this patch the last step is corrected.  This helps things like
+       electric-pair-mode.  Also, the test
+       python-syntax-after-python-backspace now passes, again.
+
+       * lisp/progmodes/python.el (python-syntax-stringify): Put
+       delimiter syntax in "inner" of the surrounding triple quotes.
+
+       * test/lisp/progmodes/python-tests.el
+       (python-syntax-after-python-backspace): Passes again.
+
+2021-09-21  João Távora  <joaotavora@gmail.com>
+
+       Expand and improve electric-pair-mode and Python testing (bug#49518)
+
+       In python-tests.el, the triple-quote pairing tests are passing
+       incorrectly, i.e. the auto-pairing functionality they purport to guard
+       isn't really working for users trying it interactively.  Added a new
+       failing test, soon to be fixed.
+
+       In electric-tests.el, added tests for Python, too.
+
+       * test/lisp/electric-tests.el (define-electric-pair-test): Also run
+       main tests for python-mode.  (pair-some-quotes-skip-others): Test
+       another slightly different pairing.
+
+       * test/lisp/progmodes/python-tests.el
+       (python-triple-double-quote-pairing): Rename from
+       python-triple-quote-pairing.
+       (python-triple-single-quote-pairing): New test.
+
+2021-09-21  João Távora  <joaotavora@gmail.com>
+
+       Add docstring for 'electric-pair-p-s-i-f' and minor refactor
+
+       Extract the "open newline between pairs behaviour" into its own
+       function, electric-pair-open-newline-between-pairs-psif.
+
+       * lisp/elec-pair.el (electric-pair-post-self-insert-function): Add
+       docstring.
+       (electric-pair-open-newline-between-pairs-psif): New function.
+       (electric-pair-mode): Add/remove 
electric-pair-open-newline-between-pairs-psif
+
+2021-09-21  João Távora  <joaotavora@gmail.com>
+
+       Speed up test/lisp/electric-tests.el when run interactively
+
+       'blink-paren-function' and its timers could sometimes interfere with
+       the tests and slow them down significantly.
+
+       * test/lisp/electric-tests.el (call-with-saved-electric-modes):
+       Bind blink-paren-function to nil.
+
+2021-09-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix whitespace-report window creation
+
+       * lisp/whitespace.el (whitespace-display-window): Avoid creating
+       many buffers if called many times (bug#50716).
+
+2021-09-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Use `special-mode' for whitespace-report
+
+       * lisp/whitespace.el (whitespace-report-region): Use
+       `special-mode' instead of `fundamental-mode' (bug#50715).
+
+2021-09-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Inhibit warning in mm-inline-wash-with-file from previous change
+
+       * lisp/gnus/mm-view.el (mm-inline-wash-with-file): Inhibit warning
+       about previous lexical fixup.
+
+2021-09-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix problems with non-ASCII non-encoded PGP names
+
+       * lisp/epg.el (epg-signature-to-string): User IDs may be
+       non-encoded, non-ASCII (bug#50706).
+
+2021-09-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix typo in tex--prettify-symbols-alist
+
+       * lisp/textmodes/tex-mode.el (tex--prettify-symbols-alist): Fix
+       varsigma typo (bug#50710).
+
+2021-09-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix lexical fallout in mm-inline-wash-with-file
+
+       * lisp/gnus/mm-view.el (mm-inline-wash-with-file): This is only
+       called from the `links' handler, and it passes in `file' expecting
+       that to be dynamically bound.  Which is a very, very confusing
+       interface, but make that work again, anyway.
+
+2021-09-21  Michalis V  <mvar.40k@gmail.com>
+
+       Make dired-compress-file query for a directory to uncompress to
+
+       * lisp/dired-aux.el (dired-compress-file-suffixes): Specify the
+       directory in the tar targets.
+       (dired-uncompress-file): New function (bug#47058).  This asks what
+       directory to uncompress to.
+       (dired-compress-file): Use it.
+
+2021-09-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clear netrc cache in auth-source test
+
+       * test/lisp/auth-source-tests.el
+       (auth-source-test-netrc-create-secret): Clear the netrc cache, too.
+
+2021-09-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Only search netrc in the netrc tests
+
+       * test/lisp/auth-source-tests.el
+       (auth-source-test-netrc-create-secret): Only search netrc.
+
+2021-09-21  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Remove some last calls to Gnus group name encoding
+
+       This should have been part of cb12a84f2c
+
+       * lisp/gnus/gnus-msg.el (gnus-summary-resend-message-insert-gcc,
+       gnus-inews-do-gcc): Don't encode group names.
+
+2021-09-21  Dmitry Gutov  <dgutov@yandex.ru>
+
+       New command: project-find-dir
+
+       * doc/emacs/maintaining.texi (Project File Commands):
+       Mention the new command and update the bindings information.
+
+       * lisp/progmodes/project.el (project-find-dir):
+       New command (bug#43153).
+       (project-prefix-map): Use 'd' as its binding.
+       Move 'project-dired' to 'D'.
+       (project-switch-commands):
+       Replace 'project-dired' with 'project-find-dir'.
+
+2021-09-20  Robert Pluim  <rpluim@gmail.com>
+
+       Support for Unicode emoji sequences
+
+       This covers both sequences using Zero-Width-Joiner codepoints and
+       those without. Bug#39799, I hope.
+
+       * .gitignore: Add emoji-zwj.el
+       * admin/notes/unicode: Add emoji-zwj-sequences.txt and
+       emoji-sequences.txt references.  Describe how to test after updating
+       to a newer Unicode version.
+       * admin/unidata/Makefile.in (all): add emoji-zwj.el as a dependency.
+       (emoji-zwj.el): Add target plus rules for building.
+       (gen-clean): Add emoji-zwj.el.
+       * admin/unidata/README: Add emoji-zwj-sequences.txt and
+       emoji-sequences.txt references.
+       * admin/unidata/blocks.awk: Force emoji script to be used for certain
+       codepoints that are used by the Unicode sequences.
+       * admin/unidata/emoji-sequences.txt: New file.
+       * admin/unidata/emoji-zwj-sequences.txt: New file.
+       * admin/unidata/emoji-zwj.awk: New file.  Derives
+       composition-function-table rules from emoji-zwj-sequences.txt, plus
+       hardcodes some derived manually from emoji-sequences.txt.
+       * etc/NEWS: Announce change.
+       * lisp/international/characters.el: Load the generated emoji-zwj.el
+       * src/Makefile.in (emoji-zwj): New target.
+       (temacs): Add emoji-zwj as a dependency.
+
+2021-09-20  Jonas Bernoulli  <jonas@bernoul.li>
+
+       No longer raise error when http authentication failed
+
+       * lisp/url/url-http.el (url-http-handle-authentication): Return t
+       instead of raising an error, instructing the caller to invoke the
+       request specific error handler (bug#50511).
+
+2021-09-20  Robert Pluim  <rpluim@gmail.com>
+
+       Add a note about testing out-of-tree builds
+
+       * CONTRIBUTE: Ask contributors to test out-of-tree builds when
+       making build system changes.
+
+2021-09-20  Robert Pluim  <rpluim@gmail.com>
+
+       Base emoji script membership on Emoji_Presentation
+
+       The Emoji property describes which codepoints can be displayed as
+       emoji, but Emoji_Presentation governs which are displayed as emoji by
+       default.
+
+       * admin/notes/unicode: Adjust check-emoji-coverage to look in the
+       Emoji_Presentation sections of emoji-data.txt
+       * admin/unidata/blocks.awk: Assign emoji script using the
+       Emoji_Presentation section.
+
+2021-09-20  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Fix VC repo URL detection in bug-reference-mode
+
+       * lisp/progmodes/bug-reference.el (bug-reference-try-setup-from-vc):
+       Pass file or directory name in question as the first argument to the
+       backend's repository-url implementation (bug#50689).  Use when-let
+       and seq-some to flatten nested conditionals.
+
+2021-09-20  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix assertion violation with zero-width :box attributes
+
+       * src/xfaces.c (merge_face_ref): Don't allow :box attribute with a
+       zero value.  (Bug#50699)
+
+2021-09-20  Michael Albinus  <michael.albinus@gmx.de>
+
+       Remove superfluous skip in auth-source-tests.el
+
+       * test/lisp/auth-source-tests.el
+       (auth-source-test-netrc-create-secret): Remove superfluous skip.
+
+2021-09-20  Mattias Engdegård  <mattiase@acm.org>
+
+       Dump with `lexical-binding` bound to nil
+
+       * lisp/loadup.el (dump-mode): Temporarily bind `lexical-binding` to
+       nil while dumping.  Otherwise, it will be t in Emacs by default
+       and that is not our intention (yet).
+
+2021-09-20  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el (tab-bar-new-tab): Add optional arg 'from-number'.
+
+       (tab-bar-mouse-context-menu): Use tab-number as an arg for
+       'tab-bar-duplicate-tab'.
+       (tab-bar-duplicate-tab): Add optional arg 'from-number'.
+
+2021-09-20  Juri Linkov  <juri@linkov.net>
+
+       Add support for url-retrieve-synchronously to eww-retrieve-command 
(bug#50680)
+
+       * doc/misc/eww.texi (Advanced): Mention url-retrieve-synchronously
+       for eww-retrieve-command.
+
+       * lisp/net/eww.el (eww-retrieve-command): Add choice 'sync' for
+       url-retrieve-synchronously.
+       (eww-retrieve): Use value 'sync' for url-retrieve-synchronously.
+       (eww-isearch-next-buffer): Let-bind eww-retrieve-command to 'sync'.
+
+2021-09-20  Miha Rihtaršič  <miha@kamnitnik.top>
+
+       Improve documentation of exiting recursive editing
+
+       * doc/lispref/commands.texi (Recursive Editing): Mention what happens
+       when throwing a string or any other value to 'exit.
+       * src/keyboard.c (Frecursive_edit): Document throwing a function
+       to 'exit (bug#49700).
+
+2021-09-20  Miha Rihtaršič  <miha@kamnitnik.top>
+
+       Refactor minibuffer aborting
+
+       * lisp/minibuffer.el (minibuffer-quit-recursive-edit): New optional
+       argument to specify how many levels of recursion to quit.
+
+       * src/eval.c (internal_catch): Remove special handling of 'exit
+       tag (bug#49700).
+       * src/minibuf.c (Fabort_minibuffers): Use
+       minibuffer-quit-recursive-edit to quit multiple levels of minibuffer
+       recursion.
+
+2021-09-20  Philip Kaludercic  <philipk@posteo.net>
+
+       Fix dolist-with-progress-reporter behaviour
+
+       * lisp/subr.el (dolist-with-progress-reporter): Use the length of
+       list argument as maximal value the reporter with reach.
+
+2021-09-19  Stefan Kangas  <stefan@marxist.se>
+
+       Revert "Flag checkdoc-symbol-words as a :safe variable"
+
+       There was no need for this change, as this variable was already marked
+       as :safe.
+
+       This reverts commit 222a7a1a8afdf6921e5981133c605c2d695e9281.
+
+2021-09-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid segfaults due to 'bug-reference-mode'
+
+       * src/xdisp.c (handle_fontified_prop): Set the frame's
+       inhibit_clear_image_cache flag around calls to
+       'fontification-functions', to avoid Lisp triggering the clearing
+       of image and/or face caches behind redisplay's back.  (Big#50571)
+
+2021-09-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix blocks.awk wrt to Emoji characters
+
+       * admin/unidata/blocks.awk: Fix emoji-data.txt processing for
+       older Awks.
+
+2021-09-19  Michael Albinus  <michael.albinus@gmx.de>
+
+       Do not save empty passwords in auth-source-search
+
+       * lisp/auth-source.el (auth-source-netrc-create)
+       (auth-source-secrets-create): Set :save-function only for non
+       empty passwords.
+
+       * lisp/net/tramp.el (tramp-read-passwd): Don't save empty passwords.
+
+       * test/lisp/auth-source-tests.el
+       (auth-source-test-secrets-create-secret): Adapt test.
+       (auth-source-test-netrc-create-secret): New test.
+
+2021-09-19  Stefan Kangas  <stefan@marxist.se>
+
+       Be explicit about missing sections in eshell manual
+
+       * doc/misc/eshell.texi (Writing a module, Module testing)
+       (Directory handling, Key rebinding, Smart scrolling)
+       (Terminal emulation): Explicitly say that these sections remain to
+       be written.  (Bug#49306)
+
+2021-09-19  Juri Linkov  <juri@linkov.net>
+
+       * lisp/progmodes/elisp-mode.el (elisp-context-menu): Improve menu items.
+
+2021-09-19  Ken Brown  <kbrown@cornell.edu>
+
+       Fix build with native compilation on Cygwin
+
+       * src/Makefile.in (emacs$(EXEEXT)) [CYGWIN]: Rebase the *.eln
+       files after they are all created, to avoid fork problems later
+       in the build.  (Bug#50666)
+
+2021-09-19  Stefan Kangas  <stefan@marxist.se>
+
+       Clarify docstring of pcase-exhaustive
+
+       * lisp/emacs-lisp/pcase.el (pcase-exhaustive): Clarify docstring
+       by contrasting with pcase.  (Bug#44166)
+
+2021-09-19  Stefan Kangas  <stefan@marxist.se>
+
+       Make two unused variables obsolete
+
+       * lisp/progmodes/idlw-help.el (idlwave-help-directory)
+       (idlwave-help-use-hh): Make unused variables obsolete.
+
+2021-09-19  Stefan Kangas  <stefan@marxist.se>
+
+       * etc/NEWS: Add section on recent checkdoc changes.
+
+2021-09-19  Mattias Engdegård  <mattiase@acm.org>
+
+       Initialise unread buffer
+
+       The reader has an extra 1-char unread buffer that was incorrectly
+       initialised to 0, which means that the first character read would
+       always be NUL.  As this is often the code that looks for the
+       lexical-binding cookie, the first loaded source module would be
+       treated as dynamically bound.  During bootstrapping this is loadup.el
+       and so its local variables got dumped into the global environment.
+
+       * src/lread.c (unread_char): Initialise to empty.
+       (Fload): Initialise here too just in case.
+
+2021-09-19  Stefan Kangas  <stefan@marxist.se>
+
+       checkdoc: Verify format of yes-or-no-p and format-message
+
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-message-text-next-string):
+       Check also for "yes-or-no-p" and "format-message".  Convert regexps to
+       use rx.
+
+2021-09-19  Stefan Kangas  <stefan@marxist.se>
+
+       Flag checkdoc-symbol-words as a :safe variable
+
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-symbol-words): Flag as a safe
+       file local variable.
+
+2021-09-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Teach Mail mode to request Disposition Notifications
+
+       * lisp/mail/sendmail.el (mail-insert-disposition-notification-to):
+       New function.
+       (mail-mode-map): Add it to key bindings and menu bar.
+
+2021-09-19  Amin Bandali  <bandali@gnu.org>
+
+       Add new '/opme' and '/deopme' convenience ERC commands
+
+       * lisp/erc/erc.el (erc-cmd-OPME, erc-cmd-DEOPME): Add convenience
+       commands for setting and unsetting the operator status on the current
+       nick in the current channel.  'erc-cmd-OPME' relies on ChanServ for
+       obtaining the operator status (see doc string for more details).
+
+       * etc/NEWS: Announce the addition of the commands.
+
+2021-09-19  Stefan Kangas  <stefan@marxist.se>
+
+       Revert previous mode-line-modes change to unbreak bootstrap
+
+       * lisp/bindings.el (mode-line-modes): Revert previous change to
+       unbreak bootstrap.
+
+2021-09-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Viper doc string fix
+
+       * lisp/emulation/viper-keym.el (viper-want-ctl-h-help): Fold
+       over-long first line.
+
+2021-09-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix viper-util compilation warning
+
+       * lisp/emulation/viper-util.el (cl-lib): Require for cl-subseq.
+
+2021-09-18  Stefan Kangas  <stefan@marxist.se>
+
+       * etc/NEWS: Shorten entry on move to Libera.Chat.
+
+2021-09-18  Stefan Kangas  <stefan@marxist.se>
+
+       Use command substitution in checkdoc-recursive-edit
+
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-recursive-edit): Use command
+       substitution.
+       (checkdoc--help-buffer): New variable.  Use it instead of hard-coded
+       string.
+
+2021-09-18  Stefan Kangas  <stefan@marxist.se>
+
+       Use command substitution for exit-recursive-edit
+
+       * lisp/bindings.el (mode-line-modes):
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-recursive-edit): Use command
+       substitution for 'exit-recursive-edit'.
+
+2021-09-18  Juri Linkov  <juri@linkov.net>
+
+       * lisp/subr.el (string-replace): Add dashes to arg names (bug#50644)
+
+       * lisp/net/tramp-compat.el (tramp-compat-string-replace): Idem.
+       * doc/lispref/searching.texi (Search and Replace): Idem.
+
+2021-09-18  Arthur Miller  <arthur.miller@live.com>
+
+       Add new help-enable-symbol-autoload user option
+
+       * lisp/help-fns.el (help-fns--analyze-function): Use it.
+       * lisp/help-fns.el (help-enable-symbol-autoload): New user option.
+       * doc/emacs/help.texi (Name Help): Document it.
+
+2021-09-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention xref-quit-and-pop-marker-stack in the manual
+
+       * doc/emacs/maintaining.texi (Xref Commands): Mention
+       xref-quit-and-pop-marker-stack in the manual.
+
+2021-09-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Do some xwidget NEWS markup (and adjust doc string)
+
+       * lisp/xwidget.el (xwidget-webkit-bookmark-make-record): Mention
+       `xwidget-webkit-bookmark-jump-new-session' in the doc string.
+
+2021-09-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make argument optional in pulse-momentary-highlight-one-line
+
+       * lisp/cedet/pulse.el (pulse-momentary-highlight-one-line): Make
+       POINT optional (bug#50642) so that the function can be used more
+       easily from some hook functions.
+
+2021-09-18  Dan Ports  <dan@drkp.net>  (tiny change)
+
+       Use the newest gcc installed by Macports
+
+       * configure.ac: There may be more than one gcc version installed
+       in Macports (bug#50649).  Use the newest.
+
+2021-09-18  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Fontify Libtool macros in autoconf-mode
+
+       * lisp/progmodes/autoconf.el (autoconf-font-lock-keywords): Apply
+       font-lock-keyword-face also to Libtool's LT_* macros (bug#50659).
+
+2021-09-18  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve doc strings of a recent commit
+
+       * lisp/emacs-lisp/generator.el (iter-defun):
+       * lisp/emacs-lisp/comp.el (comp-clean-up-stale-eln):
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-lapcode):
+       * lisp/emacs-lisp/autoload.el (autoload-insert-section-header):
+       Include description of arguments in the doc string's first line.
+
+2021-09-18  Mattias Engdegård  <mattiase@acm.org>
+
+       Regexp-quote literal symbols when grepping
+
+       `xref-find-references` was unable to find symbols like
+       `backquote-list*-macro`.
+
+       * lisp/cedet/semantic/symref/grep.el
+       (semantic-symref-grep--quote-extended): New function.
+       (semantic-symref-perform-search): Call it.
+
+2021-09-18  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix performance degradation in commands that describe key bindings
+
+       * src/keymap.c (syms_of_keymap)
+       <describe-bindings-check-shadowing-in-ranges>: New variable.
+       (describe_vector): Check shadowing of consecutive keys only if
+       'describe-bindings-check-shadowing-in-ranges' is non-nil.  Remove
+       redundant second loop when VECTOR is a char-table.  Improve
+       comments.  Patch by Stefan Kangas <stefan@marxist.se>.  (Bug#45379)
+
+       * test/src/keymap-tests.el
+       (help--describe-vector/bug-9293-one-shadowed-in-range): Adapt the
+       test case for the new variable.
+
+2021-09-18  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/emacs-lisp/checkdoc.el: Doc fix; mention flymake.
+
+       Do interactive mode tagging for checkdoc.el
+
+2021-09-18  Stefan Kangas  <stefan@marxist.se>
+
+       checkdoc: Only look for commonly used modifier keys
+
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-this-string-valid-engine):
+       Search for the modifier key "s-", but not the modifier key "A-".
+       The latter is very uncommon and leads to false positives.
+
+2021-09-18  Michael Albinus  <michael.albinus@gmx.de>
+
+       Skip "fast" tests on emba CI
+
+       * test/infra/gitlab-ci.yml (stages): Comment "fast" stage out.
+       (test-fast-inotify): Comment out.
+
+2021-09-18  Stefan Kangas  <stefan@marxist.se>
+
+       Add indent declaration to emerge-defvar-local
+
+       * lisp/vc/emerge.el (emerge-defvar-local): Add indent declaration
+       for docstring.  Fix wrongly indented callers.
+
+2021-09-18  Stefan Kangas  <stefan@marxist.se>
+
+       Make doc argument of emerge-defvar-local optional
+
+       * lisp/vc/emerge.el (emerge-defvar-local): Make doc argument
+       optional.
+
+2021-09-18  Stefan Kangas  <stefan@marxist.se>
+
+       Make doc argument of ediff-defvar-local optional
+
+       * lisp/vc/ediff-init.el (ediff-defvar-local): Make DOC argument
+       optional.  Update callers passing the empty string to not use it.
+
+2021-09-18  Federico Tedin  <federicotedin@gmail.com>
+
+       Check for null bytes in filenames in 'expand-file-name' (bug#49723)
+
+       * src/fileio.c (expand-file-name): Check for null bytes for both
+       NAME and DEFAULT-DIRECTORY arguments.  Also check for null bytes
+       in buffer-local default-directory, assuming it is used.
+       * src/coding.c (encode_file_name): Use CHECK_STRING_NULL_BYTES.
+       * src/lisp.h (CHECK_STRING_NULL_BYTES): Add function for checking
+       for null bytes in Lisp strings.
+       * test/src/fileio-tests.el (fileio-test--expand-file-name-null-bytes):
+       Add test for new changes to expand-file-name.
+       * etc/NEWS: Announce changes.
+
+2021-09-18  Amin Bandali  <bandali@gnu.org>
+
+       * lisp/erc/erc.el: Add Package-Requires and URL headers.
+
+2021-09-18  Amin Bandali  <bandali@gnu.org>
+
+       * etc/NEWS: Announce update of IRC-related references to point to 
Libera.Chat.
+
+       Also remove the note about freenode subdomain change, as it's not
+       relevant anymore.
+
+2021-09-17  Stefan Kangas  <stefan@marxist.se>
+
+       Update refcard to mention iconify before suspend
+
+       * etc/refcards/refcard.tex (section{Leaving Emacs}): Put iconify
+       Emacs ahead of suspend.
+
+2021-09-17  Stefan Kangas  <stefan@marxist.se>
+
+       checkdoc: 'y-or-n-p' no longer needs space
+
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-message-text-engine):
+       Change 'y-or-n-p' check to accept prompt ending with both "? " or "?",
+       that is, it no longer needs the space.  (Bug#50621)
+       (checkdoc--fix-y-or-n-p): New helper function.
+       * test/lisp/emacs-lisp/checkdoc-tests.el (checkdoc-tests-fix-y-or-n-p)
+       (checkdoc-tests-fix-y-or-n-p/no-change)
+       (checkdoc-tests-fix-y-or-n-p/with-space): New tests.
+
+2021-09-17  Robert Pluim  <rpluim@gmail.com>
+
+       Move emoji fontset addition later
+
+       * lisp/international/fontset.el (setup-default-fontset): Move the
+       fontset addition for emoji script after that for various graphic-like
+       characters, since they overlap, and we want the emoji setting to win.
+
+2021-09-17  Martin Joerg  <martin.joerg@gmail.com>  (tiny change)
+
+       * lisp/net/tramp-sh.el (tramp-methods) <rsync>: Separate "%c" marker.
+
+2021-09-17  Robert Pluim  <rpluim@gmail.com>
+
+       Fix emoji-induced build breakage
+
+       * admin/unidata/blocks.awk: Cater for out-of-tree builds, match
+       the name of the file using regexp rather than exact match.
+
+2021-09-17  Uwe Brauer  <oub@mat.ucm.es>
+
+       Replace hex representation by its literal form in pretty tex symbols
+
+       * lisp/textmodes/tex-mode.el (tex--prettify-symbols-alist):
+       Correct error \Bbb{T}, replace hex representation by its literal
+       form (bug#50645).
+
+2021-09-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak how term-emulate-terminal selects windows
+
+       * lisp/term.el (term-emulate-terminal): Don't record the selection
+       of the window here, because we're not doing a user-level window
+       selection, but just selecting the window for internal purposes
+       (bug#41984).
+
+2021-09-17  Juri Linkov  <juri@linkov.net>
+
+       * lisp/progmodes/elisp-mode.el (elisp-context-menu): Improve menu items.
+
+2021-09-17  Juri Linkov  <juri@linkov.net>
+
+       * lisp/repeat.el (repeat-echo-message): Clear only own added part of 
message.
+
+       (describe-repeat-maps, repeat-mode): Refer to each other in docstrings.
+
+2021-09-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Stop imenu indexing after a certain number of seconds
+
+       * doc/emacs/programs.texi (Imenu): Document it.
+       * lisp/imenu.el (imenu-max-index-time): New user option.
+       (imenu-default-create-index-function, imenu--generic-function):
+       Use it (bug#18696).
+
+2021-09-17  Manuel Giraud  <manuel@ledu-giraud.fr>
+
+       Fix typo in idlwave
+
+       * lisp/progmodes/idlwave.el (idlwave-keyword-abbrev): Fix typo
+       (bug#50638).
+
+2021-09-17  Uwe Brauer  <oub@mat.ucm.es>
+
+       Add more symbols to tex--prettify-symbols-alist
+
+       * lisp/textmodes/tex-mode.el (tex--prettify-symbols-alist): Add
+       mathbb, caligraphic letters, fractur, varkappa and
+       \|. (bug#50639).
+
+2021-09-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention that the garbage collection is convervative
+
+       * doc/lispref/internals.texi (Garbage Collection): Mention that
+       we're using a conservative gc (bug#42013).
+
+2021-09-17  Stephen Gildea  <stepheng+emacs@gildea.com>
+
+       MH-E: fix check for nmh or Mailutils installation
+
+       * lisp/mh-e/mh-e.el (mh-variant-gnu-mh-info, mh-variant-nmh-info):
+       Run install-mh, not mhparam, to check whether an MH variant is
+       installed on the system.  mhparam fails if no user profile is found,
+       so it is not a reliable check of the state of the system as a whole.
+
+       Tested with:
+       nmh 1.4, nmh 1.7.1, GNU Mailutils 2.2, GNU Mailutils 3.7, GNU Mailutils 
3.13
+
+2021-09-17  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix display of stretch glyphs
+
+       * src/xterm.c (x_draw_stretch_glyph_string):
+       * src/w32term.c (w32_draw_stretch_glyph_string): Fix drawing
+       stretch glyphs when the window is hscrolled.  (The original
+       pre-Jan-2021 code was almost correct, except that it used
+       'window_box_left_offset' instead of 'window_box_left', and didn't
+       restrict the background_width fixup to text-area.)  (Bug#50564)
+
+2021-09-17  Robert Pluim  <rpluim@gmail.com>
+
+       Split Unicode emoji into their own script
+
+       * admin/notes/unicode: Describe how to update emoji for new Unicode 
release.
+       * admin/unidata/Makefile.in: Pass emoji-data.txt to
+       blocks.awk script.
+       * admin/unidata/README: Add pointer to emoji-data.txt file.
+       * admin/unidata/blocks.awk: Parse emoji-data.txt, add emoji codepoints
+       to the 'emoji' script (except for the ASCII ones).
+       * admin/unidata/emoji-data.txt: New file.
+       * etc/NEWS: Describe new 'emoji' script.
+       * etc/TODO: Update item about 'emoji' script.
+       * lisp/international/fontset.el (script-representative-chars): Add
+       'emoji' script.
+       (setup-default-fontset): Add 'emoji' script.  Use "Noto Color Emoji"
+       as default font for it.
+
+2021-09-17  Dmitry Gutov  <dgutov@yandex.ru>
+
+       xref-matches-in-files: Move sorting to Lisp
+
+       For better compatibility with different systems.
+       Performance is unaffected, except in very pathological cases
+       (~100000 matches), and even then the overhead of 'sort' is comparable.
+
+       * lisp/progmodes/xref.el (xref-search-program-alist):
+       Drop the piping through 'sort'.
+       (xref-matches-in-files): Sort here instead.
+       Do that to both searchers' output as well now.
+
+2021-09-17  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve the documentation of a recent change
+
+       * etc/NEWS:
+       * doc/lispref/sequences.texi (Sequence Functions): Improve
+       documentation of 'seq-union'.
+
+2021-09-17  Stefan Kangas  <stefan@marxist.se>
+
+       Improve performance of seq-union
+
+       * lisp/emacs-lisp/seq.el (seq-union): Improve performance by using
+       nreverse instead of seq-reverse.
+
+2021-09-17  Stefan Kangas  <stefan@marxist.se>
+
+       Make viper-subseq into obsolete alias for cl-subseq
+
+       * lisp/emulation/viper-util.el (viper-subseq): Make into obsolete
+       function alias for 'cl-subseq'.  Update callers.
+
+2021-09-17  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/vc/ediff-util.el (ediff-member): Make obsolete.
+
+2021-09-17  Stefan Kangas  <stefan@marxist.se>
+
+       Make ediff-set-difference into obsolete alias for seq-difference
+
+       * lisp/vc/ediff-util.el (ediff-set-difference): Make into obsolete
+       function alias for 'seq-difference'.
+       * lisp/vc/ediff-mult.el (ediff-intersect-directories): Update single 
caller.
+
+2021-09-17  Stefan Kangas  <stefan@marxist.se>
+
+       Make ediff-intersection into obsolete alias for seq-intersection
+
+       * lisp/vc/ediff-util.el (ediff-intersection): Make into obsolete
+       function alias for 'seq-intersection'.
+       * lisp/vc/ediff-mult.el (ediff-intersect-directories): Update
+       single caller.
+
+2021-09-17  Stefan Kangas  <stefan@marxist.se>
+
+       Make ediff-union into obsolete alias for seq-union
+
+       * lisp/emacs-lisp/seq.el (seq-union): Autoload.
+       * lisp/vc/ediff-util.el (ediff-union): Make into obsolete function
+       alias for 'seq-union'.
+       * lisp/vc/ediff-mult.el (ediff-intersect-directories): Update single
+       caller.
+
+2021-09-17  Stefan Kangas  <stefan@marxist.se>
+
+       Add new sequence function 'seq-union'
+
+       * lisp/emacs-lisp/seq.el (seq-union): New function.
+       * doc/lispref/sequences.texi (Sequence Functions):
+       * lisp/emacs-lisp/shortdoc.el (sequence): Document above new
+       function.
+       * test/lisp/emacs-lisp/seq-tests.el (test-seq-union): New test.
+
+2021-09-17  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/allout.el (allout-old-expose-topic): Make obsolete.
+
+2021-09-17  John Cummings  <john@rootabega.net>  (tiny change)
+
+       Fix disk-free info in 'insert-directory'
+
+       * lisp/files.el (insert-directory): Call 'get-free-disk-space'
+       with the argument FILE, to make sure the reported info is for the
+       correct volume.  (Bug#50630)
+
+2021-09-17  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix annoyance in tramp-smb.el
+
+       * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection):
+       Add "TERM=dumb".
+
+2021-09-17  Olivier Certner  <olce.emacs@certner.fr>
+           F. Jason Park  <jp@neverwas.me>
+
+       ERC: NickServ: Prompt for password last, overall simplifications 
(bug#46777)
+
+       When 'erc-prompt-for-nickserv-password' is non-nil, don't ignore the
+       other forms of identification.  Instead, process them first, and
+       prompt for the password last.  Separate concerns (determination of the
+       nick to use, of the password to use, and actual message sending).
+
+       Note that the user can be interactively prompted for a password on
+       reception of a NickServ request, as before (on
+       'erc-prompt-for-nickserv-password').
+
+       * lisp/erc/erc-services.el (erc-nickserv-identify): Make the password
+       argument optional (and don't prompt for it interactively).  Further,
+       now take the nick to use for identification (interactively, ask for
+       it, defaulting to the current one).  Move the actual message sending
+       into the new 'erc-nickserv-send-identify' function, and the password
+       prompting into 'erc-nickserv-get-password'.
+
+       (erc-nickserv-send-identify): New function containing the code for
+       sending the identify message to NickServ, given the nick and password.
+
+       (erc-nickserv-get-password): Try each password source in turn, in the
+       following order: 'erc-nickserv-passwords', auth-source (if
+       'erc-use-auth-source-for-nickserv-password' is non-nil), and in the
+       end prompt the user interactively (if
+       'erc-prompt-for-nickserv-password' is non-nil).  If one source returns
+       a string, the function returns it, or nil if the string is empty.
+
+       (erc-nickserv-call-identify-function): Declare obsolete, but retain
+       for backward compatibility.  Prefer invoking 'erc-nickserv-identify'
+       directly instead.
+
+       (erc-nickserv-identify-autodetect, erc-nickserv-identify-on-connect)
+       (erc-nickserv-identify-on-nick-change): Call 'erc-nickserv-identify'
+       directly ('erc-nickserv-call-identify-function' has been obsoleted).
+       For the last two functions, remove the redundant checks on the
+       NickServ identification flags (additionally, it is doubtful they have
+       any measurable impact on performance).
+
+       * etc/NEWS: Announce the change.
+
+2021-09-17  Amin Bandali  <bandali@gnu.org>
+
+       * lisp/erc/erc-button.el (erc-emacswiki-url): Update to shorter address.
+
+2021-09-17  Alfred M. Szmidt  <ams@gnu.org>
+
+       * lisp/vc/vc.el: API doc fixes.
+
+2021-09-17  Manuel Giraud  <manuel@ledu-giraud.fr>
+
+       Reuse vc-read-backend more
+
+       * lisp/vc/vc.el (vc-read-backend): New optional arguments.
+       (vc-create-repo): Use it here.
+       (vc-switch-backend): And here (bug#50603).
+
+2021-09-16  Stefan Kangas  <stefan@marxist.se>
+
+       Docfix: use command substitution for 'universal-argument'
+
+       * lisp/autoarg.el (autoarg-mode):
+       * lisp/bookmark.el (bookmark-set, bookmark-set-no-overwrite)
+       (bookmark-save):
+       * lisp/calendar/todo-mode.el (todo-insert-item)
+       (todo-filter-top-priorities)
+       (todo-filter-top-priorities-multifile):
+       * lisp/dired-x.el (dired-mark-extension, dired-mark-suffix):
+       * lisp/eshell/eshell.el (eshell):
+       * lisp/gnus/gnus-group.el (gnus-group-find-new-groups):
+       * lisp/gnus/gnus-start.el (gnus-find-new-newsgroups):
+       * lisp/gnus/gnus-sum.el (gnus-summary-show-article):
+       * lisp/gnus/gnus.el (gnus-secondary-servers):
+       * lisp/org/org-timer.el (org-timer-set-timer):
+       * lisp/org/ox.el (org-export-dispatch-last-position):
+       * lisp/printing.el (pr-ps-directory-preview)
+       (pr-ps-directory-using-ghostscript, pr-ps-directory-print)
+       (pr-ps-directory-ps-print, pr-ps-buffer-preview)
+       (pr-ps-buffer-using-ghostscript, pr-ps-buffer-print)
+       (pr-ps-buffer-ps-print, pr-despool-preview)
+       (pr-despool-using-ghostscript, pr-despool-print)
+       (pr-despool-ps-print, pr-ps-file-up-ps-print, pr-ps-fast-fire)
+       (pr-txt-fast-fire):
+       * lisp/progmodes/idlwave.el (idlwave-complete):
+       * lisp/progmodes/sh-script.el (sh-set-shell):
+       * lisp/replace.el (occur):
+       * lisp/ses.el (ses--advice-yank):
+       * lisp/simple.el (set-mark-command-repeat-pop):
+       * lisp/sort.el (delete-duplicate-lines):
+       * lisp/strokes.el (strokes-help):
+       * lisp/textmodes/artist.el (artist-mode):
+       * lisp/textmodes/reftex-cite.el (reftex-citation):
+       * lisp/textmodes/reftex-dcr.el (reftex-view-crossref):
+       * lisp/textmodes/reftex-index.el (reftex-index-selection-or-word)
+       (reftex-display-index):
+       * lisp/textmodes/reftex-ref.el (reftex-reference):
+       * lisp/textmodes/reftex-toc.el (reftex-toc):
+       * lisp/textmodes/reftex-vars.el (reftex-cite-prompt-optional-args)
+       (reftex-enable-partial-scans):
+       * lisp/textmodes/texnfo-upd.el (texinfo-master-menu):
+       * lisp/windmove.el (windmove-display-in-direction)
+       (windmove-delete-left, windmove-delete-up)
+       (windmove-delete-right, windmove-delete-down):
+       * lisp/window.el (recenter-window-group, recenter-other-window): Use
+       command substitution for 'universal-argument' instead of raw "C-u".
+
+2021-09-16  Michael Albinus  <michael.albinus@gmx.de>
+
+       Tramp code cleanup
+
+       * lisp/net/tramp-sh.el (tramp-methods) <telnet, nc>:
+       Reintroduce "%n" marker.
+       (tramp-maybe-open-connection): Handle it.
+
+       * lisp/net/tramp.el (tramp-prefix-regexp):
+       * lisp/net/tramp-smb.el (tramp-smb-options): Fix docstring.
+
+       * lisp/net/tramp*.el: Fix typos.  Remove trailing space from
+       `yes-or-no-p' and `y-or-n-p' prompts.
+
+       * test/lisp/net/tramp-tests.el (tramp--test-telnet-p): New defun.
+       (tramp-test29-start-file-process, tramp-test30-make-process)
+       (tramp-test35-remote-path, tramp-test44-asynchronous-requests):
+       Adapt tests.
+
+2021-09-16  Wilson Snyder  <wsnyder@wsnyder.org>
+
+       verilog-mode.el: Merge from upstream: prepare for lexical bindings.
+
+       * lisp/progmodes/verilog-mode.el (verilog-do-indent)
+       (verilog-indent-declaration, verilog-read-always-signals-recurse)
+       (verilog-read-decls): Prepare for lexical bindings.
+
+2021-09-16  Eli Zaretskii  <eliz@gnu.org>
+
+       Support '...' quoting in Lisp files
+
+       * lisp/emacs-lisp/lisp-mode.el (lisp-el-font-lock-keywords-2):
+       Support quoting 'like this'.
+
+2021-09-16  Augusto Stoffel  <arstoffel@gmail.com>
+
+       Make 'compile' respect buffer-local process environment
+
+       * lisp/progmodes/compile.el (compilation-start): Use
+       `process-environment' from original buffer in the compilation
+       process (bug#50607).
+
+2021-09-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Bind `M-o' in html-mode and enriched-mode
+
+       * lisp/textmodes/enriched.el (enriched-mode-map): Actually define
+       the `M-o' face map.
+
+       * lisp/textmodes/sgml-mode.el (html-mode-map): Ditto (bug#50616).
+
+       * lisp/textmodes/sgml-mode.el (html-mode): Adjust doc string.
+
+2021-09-16  Kevin Brubeck Unhammer  <unhammer@fsfe.org>
+
+       Allow irc network symbols in erc-autojoin-channels-alist
+
+       * lisp/erc/erc-join.el (erc-autojoin-channels-alist): Explain the
+       extension.
+       (erc-autojoin-server-match): New function.
+       (erc-autojoin-channels): Use it.
+       (erc-autojoin-current-server): New function.
+       (erc-autojoin-add): Use it.
+       (erc-autojoin-remove): Ditto.
+
+       This can be useful when connecting to an IRC proxy like Weechat that
+       relays several networks under the same server. If we just keyed on the
+       server name, we would end up joining a channel on all networks
+       whenever we join one network on that server.
+
+       Networks are simply stored as symbols instead of regexes, since that's
+       how `erc-network' works.
+
+       The `erc-autojoin-add' function will still auto-add servers as strings
+       if the network doesn't have at least one entry in
+       `erc-autojoin-channels-alist'.
+
+2021-09-16  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer "website" to "homepage"
+
+       These days, a "home page" is understood to be only "the main web page
+       of a website" or "landing page", whereas a "website" is "a collection
+       of web pages and related content" (Wikipedia).
+
+       * doc/emacs/emacs.texi (Top):
+       * doc/emacs/package.texi (Package Menu):
+       * doc/lispintro/emacs-lisp-intro.texi (Top):
+       * doc/lispref/elisp.texi (Top):
+       * doc/lispref/tips.texi (Documentation Tips):
+       * doc/misc/ede.texi (ede-project):
+       * doc/misc/efaq-w32.texi (More information):
+       * doc/misc/gnus-faq.texi (FAQ 5-7):
+       * doc/misc/gnus.texi (About mairix):
+       * doc/misc/mairix-el.texi (About):
+       * doc/misc/reftex.texi (AUCTeX, Imprint):
+       * lisp/cedet/ede/base.el (ede-project):
+       * lisp/cedet/ede/system.el (ede-web-browse-home):
+       * lisp/emacs-lisp/package.el (package-menu-mode-menu)
+       (package-browse-url):
+       * lisp/erc/erc-button.el (erc-emacswiki-url):
+       * lisp/filesets.el (filesets-goto-homepage):
+       * lisp/net/mairix.el:
+       * lisp/net/webjump.el (webjump-sample-sites):
+       * lisp/obsolete/vc-arch.el:
+       * lisp/progmodes/idlw-shell.el (idlwave-shell-mode):
+       * lisp/progmodes/idlwave.el (idlwave, idlwave-mode):
+       * lisp/textmodes/reftex-vars.el (reftex):
+       Prefer "website" to "home page".
+
+       * doc/lispref/tips.texi (Documentation Tips):
+       Sort the "URL" header comment before "Homepage".
+
+       * lisp/emacs-lisp/lisp-mnt.el
+       (lm-website): Rename from 'lm-homepage'.
+       (lm-homepage): Make into alias for 'lm-website'.
+
+2021-09-16  F. Jason Park  <jp@neverwas.me>
+
+       Change the erc debug logging format to be more repeatable
+
+       * lisp/erc/erc.el (erc-debug-irc-protocol): Fix line-ending
+       mismatch between incoming and outgoing logger lines without
+       changing interface.  Do this by adding carriage returns to the
+       latter to improve machine readability.  Change printed peer labels
+       to most accurately reflect logical endpoints.
+
+       (erc-debug-irc-protocol-time-format): Add new variable to support
+       timestamps in protocol logger output.
+
+       (erc-debug-irc-protocol-version): Add new variable to help tooling
+       track logging format independent of ERC and Emacs versions.
+
+       (erc-toggle-debug-irc-protocol): Add headers to protocol-log buffer
+       to aid future bug-reproduction tools. Clean up overlong lines 
(bug#50009).
+
+2021-09-16  F. Jason Park  <jp@neverwas.me>
+
+       Fix erc nick trimming
+
+       * lisp/erc/erc.el (erc-lurker-maybe-trim): Prevent warning from
+       showing up in third-party code using this function by autoloading
+       rx.el when needed.  Remove trailing chars appended for uniquifying
+       purposes when a nick is already taken. Special thanks to Mattias
+       Engdegård for making this more respectable (Bug#50005).
+
+       * test/lisp/erc/erc-tests.el: Add tests for the above and require
+       erc-networks.
+
+2021-09-16  F. Jason Park  <jp@neverwas.me>
+
+       Fix mistake in test for erc-ring-previous-command
+
+       * test/lisp/erc/erc-tests.el (erc-ring-previous-command):
+       The variable erc-send-completed-hook was previously set to nil
+       permanently, which would affect other tests (bug#50005).
+
+2021-09-16  Stefan Kangas  <stefan@marxist.se>
+
+       Do interactive mode tagging for play/*.el
+
+2021-09-16  Eli Zaretskii  <eliz@gnu.org>
+
+       Clarify use of early-init file
+
+       * doc/emacs/custom.texi (Early Init File): Clarify that using the
+       early-init file should be reserved to cases where it is absolutely
+       necessary.  (Bug#50491)
+
+2021-09-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify test-completion doc string
+
+       * src/minibuf.c (Ftest_completion): Clarify what it means to be a
+       valid completion (bug#50583).
+
+2021-09-16  Stefan Kangas  <stefan@marxist.se>
+
+       Remove references to dead packages
+
+       * etc/themes/manoj-dark-theme.el: Delete references to colortheme and
+       emacs-goodies.
+
+2021-09-16  Stefan Kangas  <stefan@marxist.se>
+
+       Make a redundant idlwave variable obsolete
+
+       * lisp/progmodes/idlw-help.el (idlwave-help-browse-url-available):
+       Make obsolete.
+       (idlwave-help-check-locations): Don't use above variable.
+
+2021-09-16  Stefan Kangas  <stefan@marxist.se>
+
+       Various minor checkdoc tweaks
+
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-symbol-words): Add more
+       "good" words that are used a lot in practice, and where using them
+       doesn't really hurt the quality of the documentation.
+       (checkdoc-proper-noun-list): Add "dired", remove "ispell"; the
+       latter should not always be capitalized.
+       (checkdoc-common-verbs-wrong-voice): Add some more common words.
+       Don't check for "matches" as it leads to too many false positives and
+       almost no fixes in practice.
+       (checkdoc-this-string-valid-engine): Clarify comment.
+       (checkdoc-in-abbreviation-p): Ignore some less common or non-standard
+       abbreviations.
+
+2021-09-16  Stefan Kangas  <stefan@marxist.se>
+
+       Doc fix for y-or-n-p; trailing space is no longer needed
+
+       * doc/lispref/minibuf.texi (Yes-or-No Queries):
+       * doc/lispref/os.texi (Suspending Emacs):
+       * doc/lispref/tips.texi (Programming Tips):
+       * doc/misc/gnus-faq.texi (FAQ 5-9):
+       * lisp/subr.el (y-or-n-p):
+       * src/fns.c (Fyes_or_no_p): Doc fix to reflect that a trailing space
+       is no longer needed; one is added or removed automatically.
+
+2021-09-16  Stefan Kangas  <stefan@marxist.se>
+
+       * doc/misc/pgg.texi: Clarify that its obsolete in the menu entry.
+
+2021-09-15  Stefan Kangas  <stefan@marxist.se>
+
+       Remove function obsolete since 22.1
+
+       * lisp/erc/erc-networks.el (erc-current-network): Remove function
+       obsolete since Emacs 22.1.
+
+2021-09-15  Eli Zaretskii  <eliz@gnu.org>
+
+       Documentation followup to a recent commit
+
+       * doc/lispref/tips.texi (Documentation Tips): Make the wording of
+       recommendation not to over-use \\[..] more future-proof.
+       (Bug#50599)
+
+2021-09-15  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Evaluate recent isearch-motion lambdas
+
+       * lisp/isearch.el (beginning-of-buffer, end-of-buffer)
+       (scroll-up-command, scroll-down-command): Evaluate the lambdas
+       inside the isearch-motion properties of these commands.
+
+2021-09-15  Stefan Kangas  <stefan@marxist.se>
+
+       checkdoc: Don't warn about command substitutions by default
+
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-max-keyref-before-warn):
+       Add new valid value nil meaning to never warn about too many command
+       substitutions, and use this value as the default.  This is no longer a
+       performance problem on modern machines.  (Bug#50599)
+       (checkdoc-this-string-valid-engine): Respect above new valid value
+       nil.
+
+2021-09-15  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-line.el: Add context menu bound to down-mouse-3 like on tab 
bar.
+
+       * lisp/tab-line.el: Bind tab-line down-mouse-3 to tab-line-context-menu.
+       (tab-line-tab-map): Rebind tab-line-select-tab from mouse-1 to 
down-mouse-1.
+       Bind down-mouse-3 to tab-line-tab-context-menu.
+       (tab-line-add-map): Rebind tab-line-new-tab from mouse-1 to 
down-mouse-1.
+       (tab-line-left-map, tab-line-right-map): Rebind mouse-1 to down-mouse-1.
+       (tab-line-tab-context-menu, tab-line-context-menu): New functions.
+       (tab-line-hscroll-right, tab-line-hscroll-left)
+       (tab-line-new-tab, tab-line-select-tab)
+       (tab-line-switch-to-prev-tab, tab-line-switch-to-next-tab)
+       (tab-line-close-tab): Rename event args to 'event'.
+
+2021-09-15  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el (tab-bar-format): Add new option 
tab-bar-format-menu-global
+
+       (tab-bar-format-menu-global): New function.
+
+2021-09-15  Juri Linkov  <juri@linkov.net>
+
+       Add docstrings to context menu functions, and add middle-separator
+
+       * lisp/mouse.el (context-menu-functions): Add 
context-menu-middle-separator
+       to default values.
+       (context-menu-middle-separator): New function.
+
+       * lisp/replace.el (occur-context-menu): Use middle-separator.
+
+       * lisp/progmodes/elisp-mode.el (elisp-context-menu):
+       * lisp/progmodes/prog-mode.el (prog-context-menu):
+       Use middle-separator and reorder menu items correspondingly.
+
+2021-09-15  Philip Kaludercic  <philipk@posteo.net>
+
+       Merge branch 'feature/rcirc-update'
+
+2021-09-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak python-hideshow-forward-sexp-function warning avoidance
+
+       * lisp/progmodes/python.el
+       (python-hideshow-forward-sexp-function): Avoid compilation warning
+       in a more standard way.  Problem reported in
+       
https://thedailywtf.com/articles/the-programmer-s-motto-and-other-comments
+
+2021-09-15  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid crashes due to clearing of a frame's face cache
+
+       * src/xfaces.c (clear_face_cache): Don't clear fonts and faces of
+       a frame that is being redisplayed, just because it's time for some
+       routine maintenance.  (Bug#50571)
+       * src/xdisp.c (redisplay_internal):
+       * src/frame.h (struct frame) <inhibit_clear_image_cache>: Update
+       commentary of using this struct member.
+
+2021-09-15  Michael Albinus  <michael.albinus@gmx.de>
+
+       * lisp/net/tramp-sh.el (tramp-methods): <sudo>: Change template.  
(Bug#50594)
+
+2021-09-15  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid compiler warnings in comp.c on MS-Windows
+
+       * src/comp.c (DEF_DLL_FN, init_gccjit_functions): Don't load and
+       don't define functions/macros if libgccjit doesn't have them, to
+       avoid compiler warnings.
+
+2021-09-15  Mattias Engdegård  <mattiase@acm.org>
+
+       Faster grep pattern for identifiers
+
+       * lisp/cedet/semantic/symref/grep.el (semantic-symref-perform-search):
+       Use the `-w` flag instead of wrapping the pattern in regexps that make
+       matching much slower.  This speeds up `xref-find-references` by about
+       3× on macOS.
+
+2021-09-15  Eli Zaretskii  <eliz@gnu.org>
+
+       Update Unicode support to Unicode version 14.0.0
+
+       * admin/unidata/copyright.html:
+       * admin/unidata/UnicodeData.txt:
+       * admin/unidata/Blocks.txt:
+       * admin/unidata/BidiBrackets.txt:
+       * admin/unidata/BidiMirroring.txt:
+       * admin/unidata/IVD_Sequences.txt:
+       * admin/unidata/NormalizationTest.txt:
+       * admin/unidata/SpecialCasing.txt:
+       * test/manual/BidiCharacterTest.txt: Updated files from Unicode
+       14.0.
+
+       * lisp/international/fontset.el (script-representative-chars): Add
+       new scripts.
+       (otf-script-alist): Update from latest version.
+       (setup-default-fontset): Add new scripts.
+       * lisp/international/characters.el: Update syntax and category
+       tables for new characters and scripts.
+       (char-width-table): Update for changes in Unicode 14.0.
+       * lisp/international/mule-cmds.el (ucs-names): Update used and
+       unused ranges per Unicode 14.0.
+
+       * test/lisp/international/ucs-normalize-tests.el
+       (ucs-normalize-tests--failing-lines-part1)
+       (ucs-normalize-tests--failing-lines-part2): Update per the test
+       results.
+
+       * doc/lispref/nonascii.texi (Character Properties): Update Unicode
+       version number.
+
+       * etc/NEWS: Announce support for Unicode 14.0.
+
+       * admin/notes/unicode: Minor copyedits.
+
+2021-09-15  João Távora  <joaotavora@gmail.com>
+
+       * doc/misc/flymake.texi: Fix @include docstyle.texi
+
+2021-09-15  Augusto Stoffel  <arstoffel@gmail.com>
+
+       Python shell: rearrange printing of newline before output
+
+       * lisp/progmodes/python.el
+       (python-shell-output-filter-in-progress)
+       (python-shell-output-filter-buffer): Move defvars to avoid compiler
+       warnings.
+       (python-shell-eval-setup-code): Don't print a newline in
+       __PYTHON_EL_eval.
+       (python-shell-send-string): Insert newline before output when
+       applicable (bug#50514).
+
+2021-09-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make bookmark fringe marks evaporate
+
+       * lisp/bookmark.el (bookmark--set-fringe-mark): Make the bookmark
+       evaporate when a buffer is erased (like, for instance, when doing
+       `revert-buffer' in a vc buffer).
+
+2021-09-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention `lisp-data-mode' in `emacs-lisp-mode' doc string
+
+       * lisp/progmodes/elisp-mode.el (emacs-lisp-mode): Mention
+       `lisp-data-mode'.
+
+2021-09-15  Juri Linkov  <juri@linkov.net>
+
+       Adjust occur-context-menu and elisp-context-menu
+
+       * lisp/progmodes/elisp-mode.el (elisp-context-menu): Add separator
+       only when there is a symbol at mouse click.
+
+       * lisp/replace.el (occur-context-menu): Insert items in the middle
+       of the menu after mark-whole-buffer.
+
+2021-09-15  Philip Kaludercic  <philipk@posteo.net>
+
+       Add occur-related context-menu operations (bug#50552)
+
+       * lisp/replace.el (occur-word-at-mouse): Add new command.
+       (occur-symbol-at-mouse): Add new command.
+       (occur-context-menu): Add new function.
+
+2021-09-15  Juri Linkov  <juri@linkov.net>
+
+       * lisp/window.el (display-buffer-in-previous-window): Add symbolp 
(bug#50576)
+
+2021-09-15  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el (tab-bar-close-other-tabs): Add arg ‘tab-number’.
+
+       (tab-bar-mouse-context-menu): Bind menu-item "Close other tabs" to
+       tab-bar-close-other-tabs with arg ‘tab-number’.
+
+2021-09-15  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el: Rename args to consistent naming convention.
+
+       Use the same naming scheme for function arguments.  Use the term 
"index" when
+       arguments count from 0, and the term "number" when arguments count from 
1.
+
+       * lisp/tab-bar.el (tab-bar-select-tab): Rename ‘arg’ to ‘tab-number’.
+       (tab-bar-move-tab-to): Rename ‘from-index’ to ‘from-number’
+       and ‘to-index’ to ‘to-number’.
+       (tab-bar-move-tab-to-frame): Rename ‘from-index’ to ‘from-number’
+       and ‘to-index’ to ‘to-number’.
+       (tab-bar-new-tab-to): Rename ‘to-index’ to ‘tab-number’.
+       (tab-bar-close-tab): Rename ‘arg’ to ‘tab-number’
+       and ‘to-index’ to ‘to-number’.
+       (tab-bar-rename-tab): Rename ‘arg’ to ‘tab-number’.
+       (tab-bar-change-tab-group): Rename ‘arg’ to ‘tab-number’.
+
+2021-09-15  Stephen Gildea  <stepheng+emacs@gildea.com>
+
+       * lisp/mh-e/mh-e.el: Simplify file commentary for a native package.
+
+2021-09-15  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Localize namespace-filtering code
+
+       To be able to filter results coming from
+       elisp-xref-find-def-functions, and for general ease of
+       understanding.
+
+       * lisp/progmodes/elisp-mode.el (elisp--xref-find-definitions):
+       Undo the previous change.
+       (xref-backend-apropos): Update accordingly.
+       (elisp--xref-filter-definitions): New function.
+       (xref-backend-definitions): Use it to post-filter the results
+       coming from elisp--xref-find-definitions.
+
+       * test/lisp/progmodes/elisp-mode-tests.el (find-defs-minor-defvar-c):
+       New test.
+       (find-defs-defun-defvar-el): Update test.
+
+2021-09-15  Wilson Snyder  <wsnyder@wsnyder.org>
+
+       verilog-mode.el: Update verilog-mode from upstream.
+
+       * lisp/progmodes/verilog-mode.el: (verilog-basic-complete-re)
+       (verilog-behavioral-block-beg-re, verilog-defun-keywords)
+       (verilog-defun-level-generate-only-re, verilog-defun-level-re)
+       (verilog-endcomment-reason-re, verilog-indent-re) (verilog-keywords,
+       verilog-no-indent-begin-re) (verilog-set-auto-endcomments): Support
+       Verilog-A `analog` blocks (#1738).  Reported by Dan McMahill.
+       (verilog-read-defines): Fix verilog-read-defines to work
+       with SystemVerilog types (#1734).  Reported by Shareef Jalloq.
+       (verilog-indent-declaration,
+       verilog-pretty-declarations): Fix leaving extra spaces before tabs on
+       lining up declarations. (#1723) Reported by TAKAI Kousuke.
+       (verilog-auto-inst, verilog-auto-inst-port)
+       (verilog-read-auto-template-middle, verilog-read-sub-decls-line):
+       Support AUTONOHOOKUP to not AUTOWIRE hookup AUTO_TEMPLATE signals. 
(#1526)
+       Reported by firefoxtc.
+
+2021-09-15  Glenn Morris  <rgm@gnu.org>
+
+       * test/Makefile.in (XDG_CONFIG_HOME): Don't export (bug#50577).
+
+2021-09-14  Glenn Morris  <rgm@gnu.org>
+
+       * doc/misc/flymake.texi: Avoid xrefs in @copying.
+
+       This isn't really what @copying is for, and doesn't work with
+       makeinfo 4.13.
+
+2021-09-14  Philip Kaludercic  <philipk@posteo.net>
+
+       Fix interactive forms for rcirc-define-command
+
+       * lisp/net/rcirc.el (rcirc-define-command): Handle string
+       descriptors correctly.
+
+2021-09-14  Philip Kaludercic  <philipk@posteo.net>
+
+       Unset mode-line-process for all buffers on reconnecting
+
+       * lisp/net/rcirc.el (rcirc-sentinel): Add loop over all managed
+       buffers.
+
+2021-09-14  Philip Kaludercic  <philipk@posteo.net>
+
+       Restore rcirc-target if possible
+
+       * lisp/net/rcirc.el (rcirc-process-message): Extract target from buffer 
name
+
+2021-09-14  João Távora  <joaotavora@gmail.com>
+
+       Unbreak make bootstrap (don't use cl-defun's &aux parameters)
+
+       * lisp/progmodes/flymake.el (flymake--handle-report): Don't use &aux.
+
+2021-09-14  Philip Kaludercic  <philipk@posteo.net>
+
+       Display server buffer after connecting
+
+       * lisp/net/rcirc.el (rcirc-display-server-buffer): Add new option
+       (rcirc): Respect rcirc-display-server-buffer
+
+2021-09-14  Philip Kaludercic  <philipk@posteo.net>
+
+       Allow for multiple attempts when reconnecting
+
+       * doc/misc/rcirc.texi (rcirc commands): Mention rcirc-reconnect-attempts
+       * etc/NEWS: Document change
+       (rcirc-connect): Ensure no other process exists
+       (rcirc-reconnect-attempts): Add option
+       (rcirc-failed-attempts): Add local variable
+       (rcirc-reconnection-timer): Add local variable
+       (rcirc-reconnect): Add function
+       (rcirc-sentinel): Manage multiple reconnection attempts
+       (rcirc-process-server-response): Change user for error messages
+       (rcirc-mode): Don't set rcirc-last-connect-time
+       (reconnect): Extract functionality to rcirc-reconnect
+
+2021-09-14  Philip Kaludercic  <philipk@posteo.net>
+
+       * doc/misc/rcirc.texi (Hacking and Tweaking): Add missing section
+       to menu.
+
+2021-09-14  Philip Kaludercic  <philipk@posteo.net>
+
+       * lisp/net/rcirc.el (rcirc-server-alist): Add #emacs to default server 
list
+
+       Author:
+
+2021-09-14  Harald Jörg  <haj@posteo.de>
+
+       cperl-mode.el: Allow non-ASCII Perl identifiers
+
+       Replace all "A-Z" regexp literals with unicode-aware rx constructs
+       wherever Perl allows non-ASCII identifiers.
+       * lisp/progmodes/cperl-mode.el (cperl-after-sub-regexp)
+       (cperl-after-label. cperl-sniff-for-indent)
+       (cperl-find-pods-heres, cperl-indent-exp)
+       (cperl-fix-line-spacing, cperl-imenu--create-perl-index)
+       (cperl-init-faces, cperl-find-tags):
+       Replace ASCII regex literals by unicode-aware rx constructs.
+       (cperl-init-faces): Eliminate unused lexical `font-lock-anchored'.
+       (cperl-have-help-regexp, cperl-word-at-point-hard): Allow non-ASCII
+       word characters.
+
+       * test/lisp/progmodes/cperl-mode-tests.el
+       (cperl-test-fontify-special-variables): New test for $^T
+       and $^{VARNAME}.
+       (cperl-test-ws-rx cperl-test-ws+-rx),
+       (cperl-test-version-regexp, cperl-test-package-regexp): Skip
+       for perl-mode.
+       (cperl-test-identifier-rx, cperl--test-unicode-setup)
+       (cperl-test-unicode-labels, cperl-test-unicode-sub)
+       (cperl-test-unicode-varname)
+       (cperl-test-unicode-varname-list, cperl-test-unicode-arrays)
+       (cperl-test-unicode-hashes, cperl-test-unicode-hashref)
+       (cperl-test-unicode-proto, cperl-test-unicode-fhs)
+       (cperl-test-unicode-hashkeys, cperl-test-word-at-point):
+       New tests for unicode identifiers.
+        (cperl-test-imenu-index): Add a unicode identifier to the test.
+
+       * test/lisp/progmodes/cperl-mode-resources/grammar.pl: Add a
+       function with non-ASCII name for imenu tests.
+
+2021-09-14  Glenn Morris  <rgm@gnu.org>
+
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-symbol-words): Fix type.
+
+2021-09-14  Alan Third  <alan@idiocy.org>
+
+       A further fix for toolbar visibility problems on macOS (bug#50534)
+
+       * src/nsterm.m (ns_update_begin): Ensure the toolbar's visibility is
+       set correctly.
+
+2021-09-14  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix recent changes in Flymake manual
+
+       * doc/misc/flymake.texi: Fix typos.  Downcase the first word of
+       each index entry, for more reliable sorting.
+       (Starting Flymake, Finding diagnostics, Troubleshooting): Fix
+       typos.
+
+2021-09-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make `find-function-source-path' into obsolete alias
+
+       * lisp/finder.el (finder-commentary): Adjust usage.
+
+       * lisp/emacs-lisp/find-func.el (find-function-source-path): Made
+       into obsolete alias (bug#50508).
+       (find-library-source-path): New name.
+       (find-library-name, find-library, find-function-noselect)
+       (find-variable-noselect, find-definition-noselect): Adjust usage
+       and update doc strings.
+
+2021-09-14  João Távora  <joaotavora@gmail.com>
+
+       Re-organize and rewrite parts of the Flymake manual
+
+       bug#50244
+
+       * doc/misc/flymake.texi (Starting Flymake): New section.
+       (Finding diagnostics): New section, now contains info previously in
+       "Listing diagnostics"
+       (Mode line status): Renamed from "Mode-line syntax check status"
+       (Troubleshooting): Renamed from "Backend exceptions".
+       (Flymake error types): Tweak phrasing.
+
+2021-09-14  João Távora  <joaotavora@gmail.com>
+
+       Add support for project-wide diagnostics in Flymake (bug#50244)
+
+       This is done with two new concepts: "foreign diagnostics" and
+       "list-only diagnostics".  The manual has been updated with a
+       description of these new concepts.
+
+       * doc/misc/flymake.texi (Flymake utility functions):
+       Explain creation of foreign diagnostics.
+       (Foreign and list-only diagnostics): New subsection.
+       (Listing diagnostics): New subsection.
+
+       * lisp/progmodes/flymake.el
+       (Version): Bump to 1.2.1
+       (project): Require project.
+       (flymake--diag): Add new slots 'orig-beg' and 'orig-end'.  Rename
+       'buffer' slot to 'locus'.
+       (flymake-make-diagnostic): Rework docstring.  Accept stringp
+       LOCUS arg.
+       (flymake-diagnostic-beg, flymake-diagnostic-end)
+       (flymake-diagnostic-buffer):  Simplify definition.
+       (flymake--equal-diagnostic-p): New helper
+       (flymake--highlight-line): Rework.  Accept FOREIGN arg.
+       (flymake--state): Work docstring. Add new slot 'foreign-diags'
+       (flymake--handle-report): Call
+       flymake--update-diagnostics-listings.
+       (flymake--handle-report): New helper.
+       (flymake--mode): Forward declare.
+       (flymake--handle-report): Rework for foreign diagnostics.
+       (flymake-mode): When turning on, notice any Flymake diagnostics
+       for current buffer.  When turning off update diagnostics listings.
+       (flymake-kill-buffer-hook): Turn off flymake explicitly before
+       killing.
+       (flymake--mode-line-counter): Use flymake-diagnostics to collect
+       diagnostics.
+       (flymake-show-diagnostic): Visit buffer of file-specific
+       diagnostic.
+       (flymake--tabulated-entries-1): New helper extracted from
+       flymake--diagnostic-buffer-entries.
+       (flymake--diagnostics-buffer-entries): Rework.
+       (flymake--diagnostics-base-tabulated-list-format): New helper.
+       (flymake--diagnostics-buffer-name): Adjust.
+       (flymake-list-only-diagnostics): New variable.
+       (flymake--project-diagnostic-list-project): New variable.
+       (flymake--clear-list-only-diagnostics): New helper.
+       (flymake-project-diagnostics-mode): New major mode.
+       (flymake--project-diagnostics)
+       (flymake--project-diagnostics-entries)
+       (flymake--project-diagnostics-buffer): New helpers.
+       (flymake-show-project-diagnostics): New command.
+       (flymake--update-diagnostics-listings): New helper.
+       (flymake-show-buffer-diagnostics): Renamed from 
flymake-diagnostics-buffer.
+
+       * etc/NEWS: Mention change.
+
+2021-09-14  João Távora  <joaotavora@gmail.com>
+
+       Bump lisp/progmodes/project.el version to 0.7.1
+
+       Amont other things exposes the new project-buffers generic function to
+       ELPA users.
+
+       * lisp/progmodes/project.el (Version): Bump to 0.7.1
+
+2021-09-14  João Távora  <joaotavora@gmail.com>
+
+       Keep and report "foreign" diangnostics in flymake-cc Flymake backend
+
+       This includes diagnostics for .h files that sprang up when checking a
+       c file.  Those diagnostics are reported to the Flymake infrastructure
+       which does not (yet) do anything with them.
+
+       This includes a change to the test fixtures, too.
+
+       * lisp/progmodes/flymake-cc.el (flymake-cc--make-diagnostics): Rework
+
+       * test/lisp/progmodes/flymake-resources/another-problematic-file.c:
+         New file.
+
+       * test/lisp/progmodes/flymake-resources/some-problems.h:
+         Add a function declaration..
+
+2021-09-14  João Távora  <joaotavora@gmail.com>
+
+       Abbreviate Flymake backend name in flymake-show-diagnostics-buffer
+
+       * lisp/progmodes/flymake.el (flymake--diagnostics-buffer-entries):
+       (flymake-diagnostics-buffer-mode): Report abbreviated backend, too.
+
+2021-09-14  João Távora  <joaotavora@gmail.com>
+
+       Unbreak M-x compile-defun of functions using flymake-log
+
+       * lisp/progmodes/flymake.el (flymake-log): Check if compilation unit
+         is indeed a string before treating it as a file name.
+
+2021-09-14  João Távora  <joaotavora@gmail.com>
+
+       Refactor some Flymake functions
+
+       * lisp/progmodes/flymake.el (flymake-diagnostic-buffer): New
+       helper.
+       (flymake-diagnostic-beg, flymake-diagnostic-end): Tweak docstring.
+       (flymake--handle-report): Simplify.
+       (flymake--publish-diagnostics): Helper for flymake--handle-report.
+       (flymake--mode-line-counter, flymake-show-diagnostic)
+       (flymake--diagnostics-buffer-entries): Use
+       flymake-diagnostic-buffer, flymake-diagonstic-type,
+       flymake-diagnostic-beg.
+
+2021-09-14  João Távora  <joaotavora@gmail.com>
+
+       Rename flymake--backend-state to flymake--state
+
+       The previous name was confusing and akward and dreadful to type and
+       read.
+
+       * lisp/progmodes/flymake.el (flymake--state): Rename from
+       flymake--backend-state.
+       (flymake--with-backend-state): Use flymake--state.
+       (flymake--handle-report): Use flymake--state.
+       (flymake--collect): Use flymake--state.
+       (flymake-running-backends): Use flymake--state.
+       (flymake--disable-backend): Use flymake--state.
+       (flymake--run-backend): Use flymake--state.
+       (flymake-start): Use flymake--state.
+       (flymake-mode): Use flymake--state.
+       (flymake--mode-line-title): Use flymake--state.
+       (flymake--mode-line-exception): Use flymake--state.
+       (flymake--mode-line-counter): Use flymake--state.
+
+2021-09-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Project File Commands manual clarification
+
+       * doc/emacs/maintaining.texi (Project File Commands): Clarify what
+       happens with the file name under point.
+
+2021-09-14  Alan Third  <alan@idiocy.org>
+
+       Fix incorrectly appearing toolbar on NS (bug#50534)
+
+       * src/nsmenu.m (update_frame_tool_bar): Ensure both sides of the test
+       are booleans.
+       * src/nsterm.m ([EmacsWindow createToolbar:]): Make the toolbar
+       non-visible initially, in case things get out of sync.  Remove call to
+       update_frame_tool_bar: the window isn't yet associated with the view,
+       so it will return immediately.
+
+2021-09-14  Alan Third  <alan@idiocy.org>
+
+       Fix libgccjit detection on macOS
+
+       * configure.ac: Combine the Homebrew and MacPorts detection so they
+       will not create nonsense flags if both are installed.
+
+2021-09-14  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el: Close tab only on mouse-1, not down-mouse-1 
(bug#41343)
+
+       * lisp/tab-bar.el (tab-bar-mouse-select-tab): Don't close the tab
+       when clicked on the close button.
+       (tab-bar-mouse-close-tab-from-button): New function.
+       (tab-bar-map): Bind [mouse-1] to 'tab-bar-mouse-close-tab-from-button'.
+       (tab-bar-mouse-move-tab): Do nothing on non-tab events.
+
+2021-09-14  Stefan Kangas  <stefan@marxist.se>
+
+       Add user option to avoid checkdoc warning for unescaped left paren
+
+       * lisp/emacs-lisp/checkdoc.el
+       (checkdoc-column-zero-backslash-before-paren): New user option to
+       avoid warning on unescaped left parenthesis in column zero.
+       (checkdoc-this-string-valid-engine): Respect above new option.
+
+2021-09-14  Stefan Kangas  <stefan@marxist.se>
+
+       Minor improvements to checkdoc
+
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-symbol-words): Add ignored
+       values.
+       (checkdoc-proper-noun-list): Remove XEmacs from list of words to
+       capitalize; there is little need to insist on consistency here.
+       (checkdoc-in-abbreviation-p): Add abbreviation "etc." and sort entries
+       alphabetically.
+
+2021-09-13  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Use the term "future history" rather than "default"
+
+       * lisp/progmodes/project.el
+       (project-find-file, project-or-external-find-file):
+       Update docstring.
+       (project--read-file-cpd-relative, project--read-file-absolute)
+       (project--completing-read-strict): Rename DEFAULT to MB-DEFAULT.
+       (project-find-file-in): Rename FILENAME to SUGGESTED-FILENAME.
+
+2021-09-13  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Make sure to return some valid project root
+
+       * lisp/progmodes/project.el (project-prompt-project-dir):
+       If the user just pressed RET on prompt, prompt again.
+
+2021-09-13  Juri Linkov  <juri@linkov.net>
+
+       * lisp/progmodes/elisp-mode.el (elisp-context-menu): New function 
(bug#9054)
+
+       (emacs-lisp-mode): Add elisp-context-menu to context-menu-functions.
+
+2021-09-13  Juri Linkov  <juri@linkov.net>
+
+       * lisp/isearch.el: Improve 'isearch-allow-motion' feature (bug#50466)
+
+       * lisp/isearch.el: Add recenter to 'isearch-motion' property of
+       'end-of-buffer' to maximize the number of search hits on the screen.
+       In 'isearch-motion' property of 'scroll-up-command' use 'recenter 0'
+       for the first line of the screen.
+       (isearch-beginning-of-buffer)
+       (isearch-end-of-buffer): Sync logic from 'isearch-allow-motion' part
+       of isearch-pre-command-hook.  Direct users to isearch-allow-motion
+       in the docstrings.
+       (isearch-pre-command-hook): Don't override shifted 
'isearch-yank-on-move'
+       in 'isearch-allow-motion'.
+
+2021-09-13  Mattias Engdegård  <mattiase@acm.org>
+
+       Remove duplication of `find` file pattern arguments
+
+       * lisp/cedet/semantic/symref/grep.el
+       (semantic-symref-derive-find-filepatterns): Avoid including the same
+       pattern twice.
+
+2021-09-13  Andrea Corallo  <akrl@sdf.org>
+
+       Clean-up some unnecessary macro usage in comp.c
+
+       * src/comp.c (emit_static_object)
+       (Fcomp_native_driver_options_effective_p, add_driver_options)
+       (Fcomp__compile_ctxt_to_file, Fcomp_libgccjit_version): Clean-up
+       unenecessary 'defined (WINDOWSNT)' usage.
+
+2021-09-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Continue NEWS tag checking
+
+       Fix typo in previous files.el change
+
+2021-09-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention unibyte issues in insert-file-contents-literally doc string
+
+       * lisp/files.el (insert-file-contents-literally): Mention possible
+       issues with multibyte buffers (bug#50560).
+
+2021-09-13  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * doc/lispref/variables.texi (named-let): Document TCO
+
+2021-09-13  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Fix the tests
+
+       * test/lisp/progmodes/xref-tests.el
+       (xref--xref-file-name-display-is-abs)
+       (xref--xref-file-name-display-is-nondirectory)
+       (xref--xref-file-name-display-is-relative-to-project-root):
+       Update for the latest change in xref.el.
+
+2021-09-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Use a fringe mark in bookmark instead of a whole background line
+
+       * lisp/bookmark.el (bookmark-face): Adjust colors.
+       (bookmark-fringe-mark): New bitmap.
+       (bookmark--fontify): Use a fringe instead of marking the whole line.
+       (bookmark--unfontify): Adjust to remove.
+       (bookmark--jump-via): Ditto.
+       (bookmark-set-fringe-mark): Renamed from bookmark-fontify.
+       (bookmark--set-fringe-mark, bookmark--remove-fringe-mark): Renamed
+       from --*fontify.  Callers adjusted.
+
+2021-09-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       NEWS copy edits and tagging
+
+       Correct nroff-mode NEWS entry after `M-o' changes
+
+2021-09-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention how to disable auto-fill-mode in the auto-fill section
+
+       * doc/lispref/text.texi (Margins): Mention how to disable
+       auto-fill-mode.
+
+2021-09-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Document backtrace-on-error-noninteractive in the --batch section
+
+       * doc/emacs/cmdargs.texi (Initial Options): Mention
+       backtrace-on-error-noninteractive.
+
+2021-09-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Further NEWS tagging updates
+
+2021-09-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       completions-annotations doc string clarification
+
+       * lisp/minibuffer.el (completions-annotations): Mention that it's
+       not always used.
+
+2021-09-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Update some more NEWS tagging
+
+2021-09-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention `benchmark-call' in the manual
+
+       * doc/lispref/debugging.texi (Profiling): Mention `benchmark-call'.
+
+2021-09-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Update some pcase NEWS tags for already-documented functions
+
+       Update NEWS tagging for string helper functions
+
+2021-09-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Document named-let and update some NEWS tags
+
+       * doc/lispref/variables.texi (Local Variables): Document `named-let'.
+
+2021-09-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify bookmark-fontify NEWS entry
+
+2021-09-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       package-menu-execute doc string clarification
+
+       * lisp/emacs-lisp/package.el (package-menu-execute): Say what
+       happens to upgrade-marked packages (bug#50551).
+
+2021-09-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       * etc/NEWS: Clarify insert-into-buffer (bug#50558).
+
+2021-09-13  Juri Linkov  <juri@linkov.net>
+
+       Support mouse events clicked on the tab bar but outside of any tab 
(bug#41343)
+
+       * lisp/tab-bar.el (tab-bar--key-to-number): Return non-nil non-numeric t
+       when no tab is used.  Return nil for current-tab.
+       (tab-bar-mouse-select-tab, tab-bar-mouse-close-tab): Do nothing
+       when tab-bar--key-to-number returns non-nil non-numeric t
+       for click events outside of any tab.
+       (tab-bar-mouse-context-menu): Add context menu when mouse is clicked
+       outside of tabs.  Add "Duplicate" alongside with "Close" to the menu
+       used when mouse is clicked on a tab.
+       (toggle-tab-bar-mode-from-frame, toggle-frame-tab-bar): Move code
+       closer to 'tab-bar-show'.
+
+       * src/xdisp.c (handle_tab_bar_click): Return Qtab_bar with empty list
+       when mouse is clicked on the tab bar but outside of any tab.
+
+2021-09-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Only do multi-isearch in eww if there's next/prev links
+
+       * lisp/net/eww.el (eww-handle-link): Only do multi-isearch if
+       there's a next/prev link in the HTML (bug#50497).
+       (eww-setup-buffer): Clear the function.
+       (eww-mode): Don't set it here.
+
+2021-09-13  Juri Linkov  <juri@linkov.net>
+
+       Change value of DEFAULT_TAB_BAR_BUTTON_MARGIN from 4 to 1 (bug#50424)
+
+       * doc/emacs/frames.texi (Tab Bars): Improve documentation.
+
+2021-09-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix detection of char regions in print-fontset-element
+
+       * lisp/international/mule-diag.el (print-fontset-element): Fix the
+       regexp for "foo .. bar " (bug#50519).
+
+2021-09-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add some search-whitespace-regexp examples
+
+       * lisp/isearch.el (search-whitespace-regexp): Add some
+       alternatives in the defcustom.
+
+2021-09-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention get-byte in shortdoc
+
+       * lisp/emacs-lisp/shortdoc.el (buffer): Mention `get-byte' here.
+
+2021-09-13  Tassilo Horn  <tsdh@gnu.org>
+
+       bug-reference.el: Adapt default debbugs bug regexp for IRC modes
+
+       * lisp/progmodes/bug-reference.el (bug-reference-setup-from-irc-alist):
+       Adapt regexp so that group 1 defines overlay region.
+
+2021-09-13  Tassilo Horn  <tsdh@gnu.org>
+
+       bug-reference.el: Adapt default debbugs bug regexp for mail modes
+
+       * lisp/progmodes/bug-reference.el (bug-reference-setup-from-mail-alist):
+       Adapt regexp so that group 1 defines overlay region.
+
+2021-09-13  Stefan Kangas  <stefan@marxist.se>
+
+       Declare unused function cperl-inside-parens-p obsolete
+
+       * lisp/progmodes/cperl-mode.el (cperl-inside-parens-p): Declare
+       unused function obsolete.
+
+2021-09-13  Stefan Kangas  <stefan@marxist.se>
+
+       Improve checkdoc abbreviation handling
+
+       * lisp/emacs-lisp/checkdoc.el
+       (checkdoc-in-abbreviation-p): New helper function.
+       (checkdoc-sentencespace-region-engine): Fix handling abbreviations
+       after escaped parenthesis.
+
+       * test/lisp/emacs-lisp/checkdoc-tests.el
+       (checkdoc-tests-in-abbrevation-p)
+       (checkdoc-tests-in-abbrevation-p/with-parens)
+       (checkdoc-tests-in-abbrevation-p/with-escaped-parens): New tests.
+
+2021-09-13  Stefan Kangas  <stefan@marxist.se>
+
+       Remove some remaining references to XEmacs
+
+       * lisp/allout.el (allout-overlay-preparations):
+       * lisp/cedet/semantic/decorate/include.el
+       (semantic-decoration-unknown-include-menu)
+       (semantic-decoration-fileless-include-menu):
+       * lisp/cedet/semantic/idle.el (semantic-idle-scheduler-setup-timers):
+       * lisp/vc/ediff-init.el:
+       * lisp/vc/ediff-util.el (ediff-mode): Remove some remaining references
+       to XEmacs.
+
+2021-09-13  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Extend xref-file-name-display to elisp and etags definitions
+
+       And all other types of locations (with a looks-like-file-name check).
+
+       * lisp/progmodes/xref.el (xref--group-name-for-display): Extract
+       from xref-buffer-location's implementation of xref-location-group.
+       (xref-file-location): Define trivial reader for the 'file' slot.
+       (xref-location-group): Update docstring.
+       (xref--analyze): Use the new function here, to be able to format
+       group names coming from any location type.
+
+2021-09-12  Amin Bandali  <bandali@gnu.org>
+
+       ERC: Use 'string-replace' only on Emacs 28 and later
+
+       * lisp/erc/erc-dcc.el (erc-dcc-unquote-filename):
+       * lisp/erc/erc.el (erc-quit-reason-zippy, erc-part-reason-zippy)
+       (erc-update-mode-line-buffer, erc-message-english-PART): Use
+       'string-replace' only on Emacs 28 and later, otherwise use
+       'replace-regexp-in-string' on older Emacsen.
+
+2021-09-12  Amin Bandali  <bandali@gnu.org>
+
+       ERC: Use 'string-search' only on Emacs 28 and later
+
+       * lisp/erc/erc-backend.el (erc-parse-server-response):
+       * lisp/erc/erc-dcc.el (erc-dcc-member):
+       * lisp/erc/erc-speedbar.el (erc-speedbar-expand-server)
+       (erc-speedbar-expand-channel, erc-speedbar-expand-user):
+       * lisp/erc/erc.el (erc-send-input): Use 'string-search' only on
+       Emacs 28 and later, otherwise use 'string-match' on older Emacsen.
+
+2021-09-12  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el (tab-bar-get-buffer-tab): Use 'remq' instead of 
'seq-remove'
+
+2021-09-12  Juri Linkov  <juri@linkov.net>
+
+       Allow region-related context menu to be used on selected region with 
one click
+
+       * lisp/mouse.el (mouse-drag-track): Don't deactivate the mark for
+       the context menu invoked by down-mouse-3.
+
+       https://lists.gnu.org/archive/html/emacs-devel/2021-08/msg01577.html
+
+2021-09-12  Juri Linkov  <juri@linkov.net>
+
+       * lisp/thingatpt.el (thing-at-mouse): New function (bug#50256).
+
+       * lisp/net/dictionary.el: Add 'context-menu-dictionary' to
+       'context-menu-functions'.
+       (dictionary-search-word-at-mouse): New function.
+       (context-menu-dictionary): New function that uses 'thing-at-mouse'.
+       (dictionary-mouse-popup-matching-words): Remove stray 'selected-window'.
+
+       * lisp/textmodes/flyspell.el (flyspell-context-menu): Add '_click' arg.
+
+2021-09-12  Juri Linkov  <juri@linkov.net>
+
+       * lisp/mouse.el (context-menu-map): Add 'click' arg to called funs 
(bug#50256)
+
+       (context-menu-toolbar, context-menu-global, context-menu-local)
+       (context-menu-minor, context-menu-buffers, context-menu-vc)
+       (context-menu-undo, context-menu-region, context-menu-ffap): Add 
'click' arg.
+
+       * lisp/dired.el (dired-context-menu):
+       * lisp/help-mode.el (help-mode-context-menu):
+       * lisp/info.el (Info-context-menu):
+       * lisp/net/eww.el (eww-context-menu):
+       * lisp/net/goto-addr.el (goto-address-context-menu):
+       * lisp/progmodes/prog-mode.el (prog-context-menu):  Add 'click' arg.
+
+2021-09-12  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix quoting style in Lisp comments
+
+       * lisp/textmodes/rst.el:
+       * lisp/progmodes/elisp-mode.el (elisp--xref-find-definitions):
+       * lisp/org/org.el:
+       * lisp/org/org-list.el (org-list-to-generic):
+       * lisp/org/org-compat.el:
+       * lisp/hexl.el (hexl-ascii-region):
+       * lisp/emacs-lisp/lisp-mode.el:
+       * lisp/calendar/calendar.el: In comments, quote 'like this'.
+
+2021-09-12  Juri Linkov  <juri@linkov.net>
+
+       * lisp/mouse.el (context-menu-map): Remove duplicate separators 
(bug#50067).
+
+       * lisp/mouse.el (context-menu-undo, context-menu-region):
+       * lisp/progmodes/prog-mode.el (prog-context-menu):
+       Use 'when' instead of ':visible' that allows to remove duplicate 
separators
+       created between empty submenus.
+
+2021-09-12  Juri Linkov  <juri@linkov.net>
+
+       Use window-point in event-start and event-end (bug#50256)
+
+       * lisp/subr.el (event-start, event-end): Provide window-point
+       as an arg for posn-at-point, and for the constructed list.
+
+       * lisp/help-mode.el (help-mode-context-menu): Remove a kludge
+       that checked if window-buffer is current-buffer.
+
+2021-09-12  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el: Improve logic of 'ignore-current-tab'.
+
+       * lisp/tab-bar.el (tab-bar-get-buffer-tab): Prefer the current tab
+       when 'ignore-current-tab' is nil.
+       (display-buffer-in-tab): Use alist entry 'ignore-current-tab'
+       as the third arg of 'tab-bar-get-buffer-tab'.  Improve docstring.
+
+       Suggested by Feng Shu <tumashu@163.com>
+       https://lists.gnu.org/archive/html/emacs-devel/2021-09/msg00955.html
+
+2021-09-12  Eli Zaretskii  <eliz@gnu.org>
+
+       Minor copyedits in Emacs FAQ
+
+       * doc/misc/efaq.texi (What was XEmacs?, Colors on a TTY): Fix
+       wording and improve the description.
+
+2021-09-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix read-no-blanks-input doc string typo
+
+       * lisp/minibuffer.el (read-no-blanks-input): Fix doc string typo.
+
+2021-09-12  dick r. chiang  <dick.r.chiang@gmail.com>
+
+       Fix read-no-blanks-input history argument
+
+       * lisp/minibuffer.el (read-no-blanks-input): Use the
+       `minibuffer-history' symbol, not the value (bug#50535).
+
+2021-09-12  Mattias Engdegård  <mattiase@acm.org>
+
+       Infer identifier namespace in elisp xref backend
+
+       Improve the accuracy of `xref-find-definitions` by inferring the
+       likely namespace of the sought identifier from its context.
+       This reduces the number of irrelevant search hits when it is clear
+       what kind of identifier is being looked for (such as showing a
+       variable when the user looks for a function).
+
+       Co-written with Dmitry Gutov.
+
+       * lisp/progmodes/elisp-mode.el (elisp--xref-list-index)
+       (elisp--xref-infer-namespace, xref-backend-identifier-at-point): New.
+       (xref-backend-definitions): Use the buffer position for inferring.
+       (elisp--xref-find-definitions): Use the inferred namespace.
+       (xref-backend-apropos): Adapt call.
+       * test/lisp/progmodes/elisp-mode-tests.el (elisp-mode-test--with-buffer)
+       (elisp-mode-with-buffer, elisp-mode-infer-namespace): New tests.
+
+2021-09-12  Martin Rudalics  <rudalics@gmx.at>
+
+       ;* lisp/window.el (switch-to-prev-buffer): Fix typo in doc-string.
+
+2021-09-12  Martin Rudalics  <rudalics@gmx.at>
+
+       Improve doc-strings of some buffer display options (Bug#50518)
+
+       * lisp/window.el (pop-up-frame-alist, same-window-buffer-names)
+       (same-window-regexps, pop-up-frames, pop-up-windows): In
+       doc-strings say that these options are maintained for backward
+       compatibility only (Bug#50518).
+
+2021-09-12  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of tab bars in the Emacs manual
+
+       * doc/emacs/frames.texi (Tab Bars): Improve wording, indexing, and
+       cross-references.  Make sure each command is mentioned by its name
+       when it is called out by the key sequence.  Index entries should
+       precede @item lines in a @table.
+
+2021-09-12  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of some tab-bar features
+
+       * lisp/tab-bar.el (tab-bar-show, toggle-frame-tab-bar): Doc
+       fixes.
+
+       * etc/NEWS: Update the corresponding entries.
+
+2021-09-12  Olivier Certner  <olce.emacs@certner.fr>
+
+       ERC: Track: Fix a perceived minor bug in mode line face selection
+
+       * lisp/erc/erc-track.el (erc-track-modified-channels): Fix what is a
+       probable bug when a new insert event happens for a buffer that was not
+       tracked or for which no mode line face was selected: in this case,
+       stop treating the latest buffer's face (first in list) as the previous
+       one, which could be overridden with an older one (in FACES' rest), as
+       if it had happened after.
+
+2021-09-12  Olivier Certner  <olce.emacs@certner.fr>
+           Amin Bandali  <bandali@gnu.org>
+
+       ERC: Track: Rewrite 'erc-track-find-face' as 
'erc-track-select-mode-line-face'
+
+       * lisp/erc/erc-track.el (erc-track-find-face): Declare obsolete and
+       rewrite as 'erc-track-select-mode-line-face', changing the function
+       arguments, so that it is very clear what the current algorithm is.
+       No functional changes.  Performance improvements.  Clarify the
+       documentation and remove the part on some faces being lists, which
+       clearly does not apply.
+       (erc-track-modified-channels): Replace calls to 'erc-track-find-face'
+       with calls to 'erc-track-select-mode-line-face', preserving the
+       existing behavior.
+       (erc-modified-channels-alist): Change the reference to
+       'erc-track-select-mode-line-face' in the documentation following the
+       rename.
+       * etc/NEWS: Announce the change.
+
+2021-09-12  Amin Bandali  <bandali@gnu.org>
+
+       Merge from origin/emacs-27
+
+       d7f4cc0974 ERC: Track: Clarify documentation on tracked buffers and a...
+       fb1f0dfec9 ERC: Track: Fix documentation of structure of 'erc-modifie...
+       252a769b11 ; * doc/lispref/files.texi (Changing Files): Fix xref to f...
+       edc93a5ce6 ; Fix grammar in efaq.texi on Emacs vs XEmacs.
+
+       # Conflicts:
+       #       doc/misc/efaq.texi
+
+2021-09-12  Olivier Certner  <olce.emacs@certner.fr>
+
+       ERC: Track: Clarify documentation on tracked buffers and add references
+
+       * lisp/erc/erc-track.el (erc-modified-channels-alist): Clarify what
+       the list contains.  Add references to variables and functions involved
+       in displaying tracked buffers from this list.
+       (erc-make-mode-line-buffer-name): Describe exactly the algorithm, and
+       reference custom variables that influence it.
+
+2021-09-12  Olivier Certner  <olce.emacs@certner.fr>
+
+       ERC: Track: Fix documentation of structure of 
'erc-modified-channels-alist'
+
+       * lisp/erc/erc-track.el (erc-modified-channels-alist): Fix the
+       docstring: each element is a dotted list where the last cdr is
+       sometimes a proper list, making the element only sometimes a proper
+       list.
+
+2021-09-12  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Re-fix bug#16897
+
+       * lisp/vc/vc-git.el (vc-git--file-list-is-rootdir):
+       Extract from 'vc-git-command'.
+       (vc-git--literal-pathspecs): Use it here as well.
+
+2021-09-11  Tassilo Horn  <tsdh@gnu.org>
+
+       Refactor bug-reference setup for software forges
+
+       * lisp/progmodes/bug-reference.el (bug-reference-gitea-instances)
+       (bug-reference-gitlab-instances,bug-reference-sourcehut-instances):
+       Delete defvars.  Those are replaced with bug-reference-forge-alist.
+       (bug-reference-forge-alist): New variable.
+       (bug-reference--build-forge-setup-entry): New cl-defgeneric with
+       methods for github, gitlab, gitea, and sourcehut instances.
+       (bug-reference--setup-from-vc-alist): Use bug-reference-forge-alist
+       and bug-reference--build-forge-setup-entry.
+       * doc/emacs/maintaining.texi (Bug Reference): Mention that the first
+       group in bug-reference-bug-regexp defines the overlay bounds.  Also
+       mention bug-reference-forge-alist in VCS setup section.
+
+2021-09-11  Philip Kaludercic  <philipk@posteo.net>
+
+       * NEWS: Remove empty entry
+
+       * NEWS: Mention rcirc changes
+
+2021-09-11  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix byte-compilation warnings
+
+       * lisp/calc/calc-graph.el (calc-gnuplot-check-for-errors):
+       * lisp/calendar/holidays.el (list-holidays):
+       Dodge 'save-excursion+set-buffer' warnings that appeared after
+       the progn flattening was introduced.
+
+2021-09-11  Mattias Engdegård  <mattiase@acm.org>
+
+       Remove obsolete variable
+
+       * lisp/emacs-lisp/byte-opt.el
+       (byte-optimize--vars-outside-condition): Remove.
+       (byte-optimize-form-code-walker): Remove bindings.
+
+2021-09-11  Mattias Engdegård  <mattiase@acm.org>
+
+       Propagate aliased lexical variables in byte compiler
+
+       Replace uses of a variable aliasing another variable with that aliased
+       variable, to allow for variable removal when possible.  This also
+       enables opportunities for other optimisations.  Example:
+
+        (let ((y x)) (f y)) => (f x)
+
+       The optimisation is only performed if both aliased and aliasing
+       variables are lexically bound.  Shadowing bindings are α-renamed when
+       necessary for correctness.  Example:
+
+          (let* ((b a) (a EXPR)) (f a b))
+       => (let* ((a{new} EXPR)) (f a{new} a))
+
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize--aliased-vars): New.
+       (byte-optimize-form-code-walker): Cancel aliasing upon mutation.
+       (byte-optimize--rename-var-body, byte-optimize--rename-var): New.
+       (byte-optimize-let-form): Add the optimisation.
+       * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-tests--test-cases):
+       Add relevant test cases.
+
+2021-09-11  Philip Kaludercic  <philipk@posteo.net>
+
+       * doc/misc/rcirc.texi: Replace defun-rcirc-command with
+       rcirc-define-command
+
+       * doc/misc/rcirc.texi: Document rcirc-track-abbrevate-flag
+
+       * doc/misc/rcirc.texi: Document rcirc-nick-filter and
+       rcirc-channel-filter
+
+       * doc/misc/rcirc.texi: Document
+       rcirc-track-ignore-server-buffer-flag
+
+       * doc/misc/rcirc.texi: Document rcirc-omit-responses-after-join
+
+2021-09-11  Philip Kaludercic  <philipk@posteo.net>
+
+       Rename rcirc-omit-after-reconnect to rcirc-omit-after-connect
+
+       * lisp/net/rcirc.el (rcirc-omit-after-reconnect): Remove variable
+       (rcirc-omit-responses-after-join): Add variable
+       (rcirc-reconncting): Remove variable
+       (rcirc-joined): Add variable
+       (rcirc-get-buffer-create): Set rcirc-joined
+       (rcirc-print): Use rcirc-joined
+       (reconnect): Remove code relating to rcirc-reconncting
+
+2021-09-11  Augusto Stoffel  <arstoffel@gmail.com>
+
+       Keep python.el compatible with older Emacsen
+
+       * lisp/progmodes/python.el (python-shell-send-string): Don't assume
+       comint-max-line-length is defined (bug#50503).
+
+2021-09-11  Michael Albinus  <michael.albinus@gmx.de>
+
+       Tramp code cleanup
+
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-handle-make-directory): Simplify.
+
+       * lisp/net/tramp-sh.el (tramp-methods) <telnet, nc>: Don't use
+       "%n" marker.
+
+       * test/lisp/net/tramp-tests.el (tramp-test13-make-directory): Merge with
+       `tramp-test-make-directory-helper' and
+       `tramp-test13-make-directory-with-file-modes'.
+       (tramp-test44-asynchronous-requests): Use always the same
+       operation in timer.
+
+2021-09-11  Augusto Stoffel  <arstoffel@gmail.com>
+
+       Allow using 'python-shell-send-file' across machines
+
+       * lisp/progmodes/python.el (python-shell-eval-file-setup-code):
+       Look for a file coding cookie on the Python rather than on the
+       Emacs side, to avoid additional file transfers.
+       (python-shell--save-temp-file): Allow argument to be a buffer.
+       (python-shell-send-file): Address the case where the selected file and
+       the inferior process are on different machines (bug#50516).
+
+2021-09-11  Augusto Stoffel  <arstoffel@gmail.com>
+
+       Implement caching for 'python-shell-completion-at-point'
+
+       * lisp/progmodes/python.el (python-shell-completion-at-point): cache
+       results, since computing them involves talking with the inferior
+       process and, potentially, network communications
+       (python-shell--capf-cache): new variable, for cache
+       (python-shell-completion-get-completions)
+       (python-shell-completion-native-get-completions): 'import' argument is
+       not needed anymore.
+       (python-shell-completion-native-setup)
+       (python-shell-completion-native-try): pass the setup code
+       synchronously, to avoid printing a message in the shell (bug#50459).
+
+2021-09-11  Alan Third  <alan@idiocy.org>
+
+       Fix display of tab-bar buttons
+
+       * src/xterm.c (x_draw_image_relief):
+       * src/w32term.c (w32_draw_image_relief): Fix the display of
+       tab-bar buttons when mouse pointer moves off the button.
+       (Bug#50424)
+
+2021-09-11  Eli Zaretskii  <eliz@gnu.org>
+
+       Document tool-bar and tab-bar mouse events
+
+       * doc/lispref/commands.texi (Click Events): Document the format of
+       POSITION for tab-bar and tool-bar events.
+
+2021-09-11  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix tab-bar scrolling for mice that report mouse-wheel events
+
+       * src/keyboard.c (make_lispy_position): Call
+       'window_from_coordinates' with last 2 arguments non-zero, to have
+       it report on tool-bar and tab-bar positions.  Tweak the return
+       value according to the expectations of 'make_lispy_event'.
+       (make_lispy_event): No more need to inject "tab-bar" into a click
+       event on the tab bar: it's already there.
+
+2021-09-11  Tassilo Horn  <tsdh@gnu.org>
+
+       bug-reference-bug-regexp now defines a contract for the overlay region
+
+       Formerly, bug-reference-fontify placed the overlay on the complete
+       match of bug-reference-bug-regexp.  That made it impossible to encode
+       constraints like "must not match at BOL" in the regexp without messing
+       up fontification.  Therefore, now it establishes the contract that
+       subexpression 1 defines the overlay region.  Subexpression 2 must
+       still match the part of the bug reference injected into
+       bug-reference-url-format if that's a string.  If its a function, the
+       interpretation of subexpressions > 1 is up to the function.
+
+       For backwards compatibility, bug-reference-fontify checks if the
+       bounds of subexpression 2..10 are within the bounds of subexpression
+       1.  If not, or subexpression 1 doesn't even exist/match, we fall back
+       to placing the overlay from (match-beginning 0) to (match-end 0) but
+       issue a warning.
+
+       * lisp/progmodes/bug-reference.el (bug-reference-bug-regexp): Document
+       contract that subexpression 1 defines the overlay region and adapt the
+       default value accordingly.
+       (bug-reference--nonconforming-regexps): New internal variable.
+       (bug-reference--overlay-bounds): New function.
+       (bug-reference-fontify): Place overlay on subexpression 1's bounds if
+       bug-reference-bug-regexp conforms to the documented contract.
+       (bug-reference--setup-from-vc-alist): Adapt regexps to new contract.
+       * doc/emacs/maintaining.texi (Bug Reference): Adapt regexp used in
+       example.
+
+2021-09-11  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/info.el (Info-streamline-headings): Add entry.
+
+2021-09-11  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of Show Paren mode
+
+       * doc/emacs/programs.texi (Matching): Improve wording and
+       indexing.  (Bug#29381)
+
+2021-09-11  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix restoring from pdumper file on MS-Windows 9X
+
+       * src/pdumper.c (dump_map_file_w32): Use PAGE_WRITECOPY flag when
+       calling CreateFileMapping for DUMP_MEMORY_ACCESS_READWRITE access,
+       as that is required by Windows 9X.  (Bug#50453)
+
+2021-09-11  Dmitry Gutov  <dgutov@yandex.ru>
+
+       New minor mode 'show-paren-local-mode'
+
+       * lisp/paren.el (show-paren--delete-overlays):
+       New function, extracted from show-paren-mode.
+       (show-paren-local-mode): New minor mode.
+       (show-paren-mode): Update docstring to mention it (bug#29381).
+
+       * doc/emacs/programs.texi (Matching): Update show-paren-mode section.
+
+2021-09-11  Tassilo Horn  <tsdh@gnu.org>
+
+       Improve overlay placement performance
+
+       * lisp/progmodes/bug-reference.el (bug-reference--overlays-in): New
+       function.
+       (bug-reference-unfontify): Use it.
+       (bug-reference-fontify): Reuse and move existing overlays instead of
+       deleting all and creating them anew.
+
+2021-09-10  Arthur Miller  <arthur.miller@live.com>
+
+       Add support for GCC compiler command-line options
+
+       * lisp/emacs-lisp/comp.el ('native-comp-compiler-options): New option.
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-from-buffer): Add support
+       for new 'native-comp-compiler-options'.
+       * src/comp.c (Fcomp_native_compiler_options_effective_p): New function.
+       (add_compiler_options): New function.
+       (Fcomp__compile_ctxt_to_file): Call 'add_compiler_options'.
+
+2021-09-10  Philip Kaludercic  <philipk@posteo.net>
+
+       Merge branch 'master' into feature/rcirc-update
+
+2021-09-10  Philip Kaludercic  <philipk@posteo.net>
+
+       Fix double reconnection bug
+
+       * lisp/net/rcirc.el (rcirc-sentinel): Don't reconnect if reconnecting
+       (reconnect): Use delete-process instead of kill-process
+
+2021-09-10  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Fix test find-defs-defgeneric-el
+
+       * test/lisp/progmodes/elisp-mode-tests.el (find-defs-defgeneric-el):
+       Fix the test.  Reported by dick.r.chiang@gmail.com.
+
+2021-09-10  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert usage of format-prompt in python.el
+
+       * lisp/progmodes/python.el (python-eldoc-at-point): Revert usage
+       of format-prompt in python.el since this is also an ELPA package
+       (and older Emacs versions doesn't have format-prompt).
+
+2021-09-10  Augusto Stoffel  <arstoffel@gmail.com>
+
+       Properly encode all strings sent to Python shell
+
+       * lisp/progmodes/python.el: Now depends on Emacs 28.
+       (python-shell-package-enable, python-shell-completion-get-completions)
+       (python-ffap-module-path, python-eldoc--get-doc-at-point): Encode
+       Python strings using 'python-shell--encode-string' instead of triple
+       quotes.
+       (python-shell-completion-string-code, python-eldoc-string-code)
+       (python-ffap-string-code): Remove defcustoms. (bug#50503).
+
+2021-09-10  Stephen Gildea  <stepheng+emacs@gildea.com>
+
+       Tramp: honor default file modes in make-directory
+
+       * lisp/net/tramp-sh.el:
+       * lisp/net/tramp-adb.el:
+       * lisp/net/tramp-sudoedit.el:
+       * lisp/net/tramp-gvfs.el: Add support for default file modes to
+       relevant Tramp back ends for make-directory.  (Closes: Bug#50410)
+       * test/lisp/net/tramp-tests.el 
(tramp-test13-make-directory-with-file-modes):
+       New test.
+       * etc/NEWS: Note this enhancement.
+
+       Thanks to Michael Albinus for helping improve this patch.
+
+2021-09-10  Eli Zaretskii  <eliz@gnu.org>
+
+       Doc string followup to last change.
+
+       * lisp/progmodes/xref.el (xref-find-apropos): Mention
+       'tags-apropos-additional-actions' in the doc string.
+       * lisp/progmodes/etags.el (tags-apropos-additional-actions):
+       Mention 'xref-find-apropos' in the doc string.
+
+2021-09-10  Eli Zaretskii  <eliz@gnu.org>
+
+       Document 'tags-apropos-additional-actions' with Xref
+
+       * doc/emacs/maintaining.texi (Looking Up Identifiers): Rearrange
+       and reword documentation of 'xref-find-apropos' and
+       'xref-auto-jump-to-first-definition'.  Add the description of
+       'tags-apropos-additional-actions'.  Delete the comment with
+       not-yet implemented features that were available with
+       'tags-apropos'.
+
+       * etc/NEWS: Augment the wording of 'xref-find-apropos' entry.
+
+2021-09-10  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Further fix for the search-whitespace-regexp change
+
+       * lisp/isearch.el (search-whitespace-regexp): Fix yet another typo
+       in this one-line change (bug#21278).
+
+2021-09-10  Gregory Heytings  <gregory@heytings.org>
+
+       New user options to move between isearch matches
+
+       * lisp/isearch.el (isearch-allow-motion,
+       isearch-motion-changes-direction): New user options.
+       (isearch-pre-command-hook): Handle the new options.
+
+       * etc/NEWS: Mention the new user options.
+
+       * doc/emacs/search.texi: Document the new user options.
+
+2021-09-10  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix typo in previous search-whitespace-regexp change
+
+       * lisp/isearch.el (search-whitespace-regexp): Fix typo in last
+       checkin for this variable.
+
+2021-09-10  Gregory Heytings  <gregory@heytings.org>
+
+       Fix behavior of isearch-{beginning,end}-of-buffer
+
+       * lisp/isearch.el (isearch-beginning-of-buffer)
+       (isearch-end-of-buffer): Fix their behavior when
+       isearch-repeat-on-direction-change is non-nil (bug#50466).
+
+2021-09-10  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Change the default value of search-whitespace-regexp
+
+       * lisp/isearch.el (search-whitespace-regexp): Change the default
+       to always exclude newlines from the set (bug#21278).  It used to
+       be mode-dependent whether newlines were included or not, and this
+       was confusing as a user interface.
+
+2021-09-10  Dmitry Gutov  <dgutov@yandex.ru>
+
+       * lisp/progmodes/ruby-mode.el (ruby-current-indentation): Tweak 
obsoletion.
+
+2021-09-10  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Support tags-apropos-additional-actions in etags Xref backend
+
+       * lisp/progmodes/etags.el (xref-etags-apropos-location):
+       New class.
+       (xref-location-marker): New method definition.
+       (xref-make-etags-apropos-location): New function.
+       (etags--xref-apropos-additional): New function.
+       (xref-backend-apropos): Use it here.
+
+2021-09-09  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of tab-bar functions and variables
+
+       * etc/NEWS: Improve wording of tab-bar related entries.
+
+       * lisp/tab-bar.el (tab-bar-show, tab-bar-select-tab-modifiers):
+       Improve and clarify the doc strings.
+
+2021-09-09  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix a recent change wrt 'comint-max-line-length'
+
+       * lisp/progmodes/python.el (python-shell-send-string): Only heed
+       'comint-max-line-length' for subprocesses with which we
+       communicate via PTYs.  (Bug#49822)
+
+       * lisp/comint.el (comint-max-line-length): Doc fix.  Add a value
+       for MS-Windows.
+
+2021-09-09  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Change ruby-align-chained-calls indentation
+
+       * lisp/progmodes/ruby-mode.el (ruby-smie-rules): Align with the
+       first sibling on the previous line instead of the last (bug#32496).
+
+       That is, before it used to be
+
+       one.two.three
+              .four
+
+       and now it is
+
+       one.two.three
+          .four
+
+2021-09-09  Augusto Stoffel  <arstoffel@gmail.com>
+
+       Better treatment of line length limits for the Python inferior
+
+       * lisp/comint.el (comint-max-line-length): New constant reflecting a
+       safe maximum line size that can be sent to an inferior process.
+       * lisp/progmodes/python.el
+       (python-shell-comint-watch-for-first-prompt-output-filter): Send setup
+       code to the inferior process only once and at this stage.
+       (python-shell-eval-setup-code, python-shell-eval-file-setup-code):
+       Move, unchanged, to an earlier point to avoid byte-compiler warnings.
+       (python-shell-send-string-no-output): Revert changes of e32c7d2a8d
+       (python-shell-send-string): Use 'comint-max-line-length' to decide
+       when to resort to temp files.
+       (python-shell-send-string, python-shell-send-file): Don't send setup
+       code each time (bug#49822).
+
+2021-09-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify Gnus vs. font locking in the Gnus manual
+
+       * doc/misc/gnus.texi (Formatting Variables): Explicitly mention
+       that font locking doesn't work in Gnus buffers (bug#50474).
+
+2021-09-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove the "Real meaning of copyleft" node in efaq
+
+       * doc/misc/efaq.texi (Real meaning of copyleft): Remove the
+       section (bug#50446).
+       (Common acronyms): Add a link to the GNU site's page about licenses.
+
+2021-09-09  Juri Linkov  <juri@linkov.net>
+
+       Merge branch 'feature/tab-bar-events'
+
+2021-09-08  Michael Albinus  <michael.albinus@gmx.de>
+
+       Document restriction of completion styles with remote file names
+
+       * doc/misc/tramp.texi (File name completion): Mention restriction
+       of completion styles.
+
+2021-09-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't ding at the user in pop-mark
+
+       * lisp/simple.el (pop-mark): Don't ding at the user if there's no
+       mark to pop (bug#44375).  This function is used (in some
+       circumstances) when the user mouse-1-clicks links (in *Help*
+       buffer, for instance), which will then ding at the user before
+       following the link.
+
+2021-09-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Further tweak describe-variable look
+
+       * lisp/help-fns.el (describe-variable): Tweak how long variable
+       values are shown.
+
+2021-09-08  Mattias Engdegård  <mattiase@acm.org>
+
+       * etc/NEWS: macOS alternative context menu mouse binding.
+
+2021-09-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix previous help-fns change
+
+       * lisp/help-fns.el (help-fns--run-describe-functions): Fix the
+       test for whether the function inserted anything.
+
+2021-09-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Adjust test to describe-function changes
+
+       The doc now always ends with an empty line
+
+2021-09-08  Miha Rihtaršič  <miha@kamnitnik.top>
+
+       Allow kmacros to end with C-g in minibuffer
+
+       * src/keyboard.c (cmd_error): If a command causes a minibuffer-quit
+       condition, record its key in a keyboard macro (bug#48603).
+
+2021-09-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add support for keypad `=' key in xterm.el
+
+       * lisp/term/xterm.el (xterm-function-map): Add support for keypad
+       = key (bug#16645).
+
+2021-09-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't disable ipython as a native interpreter
+
+       * lisp/progmodes/python.el
+       (python-shell-completion-native-disabled-interpreters): Remove
+       ipython from list, because it apparently works fine these days
+       (bug#50458).
+
+2021-09-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix mail-user-agent defcustom type
+
+       * lisp/simple.el (mail-user-agent): Any symbol can be used as the
+       value (bug#50460).
+
+2021-09-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Move the indented *Help* block to after the doc string
+
+       * lisp/help-fns.el (describe-function-1): Move indented admin
+       block to the end (bug#50463).
+       (describe-variable): Ditto (bug#50463).
+
+2021-09-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't output "probably introduced" if we know the answer for sure
+
+       * lisp/help-fns.el (help-fns--customize-variable-version):
+       Factored out from `help-fns--customize-variable' to be able to see
+       whether it outputs anything.
+       (help-fns--run-describe-functions): New function.
+       (help-fns--activated-functions): New internal variable.
+       (describe-variable): Use new function.
+       (describe-face, describe-function-1): Ditto (bug#50463).
+
+2021-09-08  Stefan Kangas  <stefan@marxist.se>
+
+       Center Emacs logo above text on the splash screen
+
+       * lisp/startup.el (fancy-splash-head): Center Emacs logo above
+       text on the splash and about screen.
+
+2021-09-08  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Have Git backend actions accept nil filenames again
+
+       * lisp/vc/vc-git.el (vc-git--literal-pathspec):
+       Move the nil check to the beginning (bug#50422).
+
+2021-09-07  Harald Jörg  <haj@posteo.de>
+
+       cperl-mode.el: Use rx sequences for Perl grammar
+
+       Following advice by Mattias Engdegård, most uses of rx-to-string
+       were eliminated, and rx sequences used instead to define Perl
+       grammar components.
+       * lisp/progmodes/cperl-mode.el: (cperl-block-declaration-p): New
+       function, replaces regexp literals.
+       (cperl-imenu--function-name-regexp-perl): Deleted, use rx
+       sequences to find imenu entries instead.
+       (cperl-indent-line): Use rx components instead of regexp literals.
+       (cperl-sniff-for-indent): use `cperl-block-declaration-p' to
+       increase accuracy, use rx sequence for labels to replace
+       inaccurate regexp literals.
+       (cperl-block-p): Replace inline comment by docstring.  Use
+       `cperl-block-declaration-p'.
+       (cperl-after-block-p): Use `cperl-block-declaration-p'.
+       (cperl-after-block-and-statement-beg): Replace inline comment by
+       docstring.
+       (cperl-imenu-package-keywords), (cperl-imenu-sub-keywords),
+       (cperl-imenu-pod-keywords) : New variables to sort imenu
+       entries into categories.
+       (cperl-imenu--create-perl-index): Use rx sequences to collect
+       imenu entries.
+       (cperl-init-faces): Use rx components instead of regexp literals
+       for labels.
+
+       * test/lisp/progmodes/cperl-mode-tests.el: Test rx sequences
+       instead of regexp strings
+
+2021-09-07  Philip Kaludercic  <philipk@posteo.net>
+
+       Add rcirc-track-ignore-server-buffer-flag option
+
+       * lisp/net/rcirc.el (rcirc-track-ignore-server-buffer-flag): Add option
+       (rcirc-record-activity): Use rcirc-track-ignore-server-buffer-flag
+
+2021-09-07  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Don't let nndiary.el alter variables when loading file
+
+       * lisp/gnus/nndiary.el (nndiary-open-server): Move the manipulation of
+       `gnus-extra-headers' and `nnmail-extra-headers' into this function: it
+       should only happen if we're actually firing up an nndiary server.
+       Previously, simply attempting to complete a gnus-* prefixed symbol
+       could end up loading this file, and changing the variable values.
+
+2021-09-07  Alan Mackenzie  <acm@muc.de>
+
+       Increase jit-lock-chunk-size from 500 to 1500 for performance reasons
+
+       * lisp/jit-lock.el (jit-lock-chunk-size): Increase to 1500.
+
+       See also 
https://lists.gnu.org/archive/html/emacs-devel/2021-09/msg00540.html.
+
+2021-09-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Encode urls more before using in browse-url
+
+       * lisp/net/browse-url.el (browse-url-default-windows-browser)
+       (browse-url-default-macosx-browser): Encode the URL before using
+       (in case it contains spaces) (bug#50435).
+
+2021-09-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix encoding in browse-url-encode-url
+
+       * lisp/net/browse-url.el (browse-url-url-encode-chars): Document
+       what the argument really is, and simplify the implementation
+       (bug#50435).
+       (browse-url-encode-url): Encode spaces.
+
+2021-09-07  Alex Bochannek  <alex@bochannek.com>
+
+       Add a new Gnus command to toggle whether to use fonts in shr
+
+       * doc/misc/gnus.texi (Article Washing): Document it.
+
+       * lisp/gnus/gnus-art.el (gnus-article-toggle-fonts): New command
+       and key binding (bug#50383).
+
+2021-09-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve the Info mode line further
+
+       * lisp/info.el (Info-set-mode-line): Improve the Info mode line
+       further (bug#13776).
+
+2021-09-07  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix a recent documentation change
+
+       * lisp/progmodes/xref.el (xref-auto-jump-to-first-definition)
+       (xref-auto-jump-to-first-xref):
+       * etc/NEWS: Fix wording and typos.
+
+2021-09-07  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       97aa8240d2 (origin/emacs-27) * doc/misc/efaq.texi: Misc copyedits.
+       e1050492d1 * doc/misc/efaq.texi (Reporting bugs): Refer to the Emacs ...
+
+       # Conflicts:
+       #       doc/misc/efaq.texi
+
+2021-09-07  Michael Albinus  <michael.albinus@gmx.de>
+
+       Adapt tramp-test26-file-name-completion
+
+       * test/lisp/net/tramp-tests.el (tramp-test26-file-name-completion):
+       Do not check for default method.
+
+2021-09-07  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of new Xref options
+
+       * lisp/progmodes/xref.el (xref-auto-jump-to-first-definition)
+       (xref-auto-jump-to-first-xref): More accurate description in the
+       doc strings.
+
+       * doc/emacs/maintaining.texi (Looking Up Identifiers)
+       (Identifier Search, List Identifiers, Project File Commands): Fix
+       the documentation of 'xref-auto-jump-to-first-definition' and
+       'xref-auto-jump-to-first-xref' to be more accurate.
+
+       * etc/NEWS: More accurate wording of the entry about
+       'xref-auto-jump-to-first-definition' and
+       'xref-auto-jump-to-first-xref'.
+
+2021-09-07  Michael Albinus  <michael.albinus@gmx.de>
+
+       Do not expand default method, user, host in remote file name completion
+
+       * lisp/net/tramp.el (tramp-completion-handle-file-name-all-completions):
+       Do not expand default method, user, host.  (Bug#50387)
+       (tramp-get-completion-methods): `partial-method' can be nil.
+
+2021-09-07  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix display of tab-bar buttons
+
+       * src/xterm.c (x_draw_image_relief):
+       * src/w32term.c (w32_draw_image_relief): Fix calculation of relief
+       thickness for tab-bar buttons.
+
+       * lisp/tab-bar.el (tab-bar--load-buttons)
+       (tab-bar-history-mode): Fix the :margin specification for tab-bar
+       buttons.  (Bug#50424)
+
+2021-09-07  Philip Kaludercic  <philipk@posteo.net>
+
+       Use fresh symbol for argument list
+
+       * lisp/net/rcirc.el (rcirc-define-command): Use make-symbol instead of 
gensym
+
+2021-09-07  Philip Kaludercic  <philipk@posteo.net>
+
+       Allow /reconnect while connecting
+
+       * lisp/net/rcirc.el (reconnect): Kill previous process and start a new 
one
+
+2021-09-07  Glenn Morris  <rgm@gnu.org>
+
+       * test/lisp/vc/vc-tests.el (vc-test--version-diff): Git env tweak.
+
+2021-09-07  Dmitry Gutov  <dgutov@yandex.ru>
+           Jiacai Liu  <hello@liujiacai.net>
+
+       Support specifying just one command in project-switch-commands
+
+       * lisp/progmodes/project.el (project-switch-commands):
+       Describe the new possible type of value.
+       (project--switch-project-command):
+       New function, extract from project-switch-project.
+       (project-switch-project): If project-switch-commands's value is a
+       symbol, invoke that command without showing a menu.
+
+2021-09-07  Stefan Kangas  <stefan@marxist.se>
+
+       Small FAQ fixes
+
+       * doc/misc/efaq.texi (Colors on a TTY): Remove reference to
+       ancient Emacs version 22.
+       (Finding Emacs on the Internet): Use more current terminology.
+
+2021-09-07  Stefan Kangas  <stefan@marxist.se>
+
+       Remove Emacs FAQ maintainer
+
+       * doc/misc/efaq.texi: Remove maintainer Romain Francoise after private
+       communication.
+
+2021-09-07  Stefan Kangas  <stefan@marxist.se>
+
+       * etc/NEWS: Some further re-organization.
+
+       * etc/NEWS: Clarify entry about the "*Completions*" buffer.
+
+2021-09-06  Philip Kaludercic  <philipk@posteo.net>
+
+       Mention list of capabilities that should be implemented
+
+       * lisp/net/rcirc.el (rcirc-implemented-capabilities): Add comment
+
+2021-09-06  Philip Kaludercic  <philipk@posteo.net>
+
+       Implement standard-replies capability
+
+       * lisp/net/rcirc.el (rcirc-implemented-capabilities): Add 
standard-replies to list
+       (rcirc-response-formats): Add response formats for WARN, FAIL and NOTE
+       (rcirc-handler-FAIL): Add handler
+       (rcirc-handler-WARN): Add handler
+       (rcirc-handler-NOTE): Add handler
+
+2021-09-06  Philip Kaludercic  <philipk@posteo.net>
+
+       Connect to server asynchronously
+
+       * lisp/net/rcirc.el (rcirc-connect): Add :nowait option to 
open-network-stream
+       (rcirc-sentinel): Handle "open\n" events
+
+2021-09-06  Tassilo Horn  <tsdh@gnu.org>
+
+       Add possibility to override the default highlighting
+
+       * lisp/progmodes/bug-reference.el (bug-reference-fontify): Highlight
+       99th group if it exists.
+       (bug-reference-bug-regexp): Document that regexp group 99 can be used
+       to override the default behavior of highlighting the complete match.
+       (bug-reference--run-auto-setup): Use run-hook-with-args-until-success
+       instead of throw/catch.
+
+2021-09-06  Mattias Engdegård  <mattiase@acm.org>
+
+       Normalise nested `progn` forms in byte-code optimiser
+
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize-body): Flatten body.
+       This simplifies the source tree and reduces the number of different
+       cases that other optimisations need to take into account.
+
+2021-09-06  Mattias Engdegård  <mattiase@acm.org>
+
+       More robust optimisation of `ignore`
+
+       Treat `ignore` as any other function during source-level optimisation,
+       to avoid having its warning-suppression effects cancelled by repeated
+       passes.  Instead, define a custom code generation function.
+
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker):
+       Don't treat `ignore' specially here.
+       (side-effect-free-fns): Don't mark `ignore` as side-effect-free
+       or error-free (although it is), since that would allow the optimiser
+       to elide calls.
+       * lisp/emacs-lisp/bytecomp.el (ignore, byte-compile-ignore):
+       Define and register a code-gen function.
+
+2021-09-06  Mattias Engdegård  <mattiase@acm.org>
+
+       Optimise `member` and `assoc` (etc) with constant empty list
+
+       * lisp/emacs-lisp/byte-opt.el
+       (byte-optimize-assq): New.
+       (byte-optimize-member, byte-optimize-assoc, byte-optimize-memq):
+       When the list argument is constant nil, the result is always nil.
+       * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-tests--test-cases):
+       Add test cases.
+
+2021-09-06  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Fixup dired-do-find-regexp-and-replace
+
+       * lisp/dired-aux.el (dired-do-find-regexp-and-replace):
+       Disregard the customized value of xref-auto-jump-to-first-xref
+       (it breaks the xref-query-replace-in-results invocation).
+
+       * lisp/progmodes/xref.el (xref-auto-jump-to-first-xref):
+       Mention the caveat for users or xref distributed through ELPA.
+
+2021-09-06  Michael Albinus  <michael.albinus@gmx.de>
+
+       Revert an accidental change in etc/NEWS
+
+2021-09-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make calc-grab-region work with rectangular selects
+
+       * lisp/calc/calc.el (calc-grab-region): Heed `rectangle-mark-mode'
+       (bug#50403).
+
+2021-09-06  martin rudalics  <rudalics@gmx.at>
+
+       Restore the debugging window size more reliably
+
+       * lisp/emacs-lisp/debug.el (debug): Restore the debugging window
+       size more reliably (bug#12921).
+
+2021-09-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a tooltip to the comint-mode mode line format
+
+       * lisp/comint.el (comint-mode): Add a tooltip to say what the :run
+       bit means (bug#13776).
+
+2021-09-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve the info-mode mode line
+
+       * lisp/info.el (Info-set-mode-line): Add a help echo to help
+       explain what the thing in parentheses is (bug#13776).
+
+2021-09-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Simplify `image-dired-dired-file-marked-p'
+
+       * lisp/image-dired.el (image-dired-dired-file-marked-p): Use
+       `dired-re-mark' instead of open-coding the opposite regexp (bug#14925).
+
+2021-09-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve the gnus-group-default-list-level doc string
+
+       * lisp/gnus/gnus-group.el (gnus-group-default-list-level): Improve
+       doc string.
+
+2021-09-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Reset gnus-group-use-permanent-levels when Gnus restarts
+
+       * lisp/gnus/gnus-start.el (gnus-clear-system): Reset
+       `gnus-group-use-permanent-levels' upon Gnus restart (bug#50416).
+
+2021-09-06  Allen Li  <darkfeline@felesatra.moe>
+
+       Make `gnus-group-use-permanent-levels' work better
+
+       * lisp/gnus/gnus-group.el (gnus-group-default-level): Removed implicit
+       setting of gnus-group-use-permanent-levels.
+       (gnus-group-list-groups): Set gnus-group-use-permanent-levels
+       explicitly.
+       (gnus-group-get-new-news): Set gnus-group-use-permanent-levels
+       explicitly (bug#50417).
+       (gnus-group-get-new-news): When the user has given a numeric
+       prefix, use that as the list level.
+
+2021-09-06  Juri Linkov  <juri@linkov.net>
+
+       * etc/NEWS: Reorder "Isearch and Replace" items
+
+2021-09-06  Eli Zaretskii  <eliz@gnu.org>
+
+       * doc/emacs/maintaining.texi (Xref Commands): Fix indexing.
+
+2021-09-06  Stefan Kangas  <stefan@marxist.se>
+
+       * etc/NEWS: Improve file organization.
+
+2021-09-06  Stefan Kangas  <stefan@marxist.se>
+
+       Improve documentation of save-place-abbreviate-file-names
+
+       * lisp/saveplace.el (save-place-abbreviate-file-names): Document why
+       you might want to enable this option.
+
+2021-09-06  Stefan Kangas  <stefan@marxist.se>
+
+       * etc/NEWS: Don't mention a fixed bug.
+
+2021-09-06  Dmitry Gutov  <dgutov@yandex.ru>
+
+       project--files-in-directory: Fix handling of ignores
+
+       * lisp/progmodes/project.el (project--files-in-directory):
+       Pass "." as the DIR argument to 'find' because otherwise the ignore
+       expression can match the project root directory name, which we don't
+       want to happen (bug#50240).  Fixup the resulting file names at the end
+       with concatenation.
+       Originally I thought it could lead to worse performance, but the
+       results show equal or slightly better timings.
+
+       * lisp/progmodes/xref.el (xref-matches-in-directory):
+       Apply a similar fix.
+       (xref--find-ignores-arguments): Use file-name-as-directory, so
+       that when passed "." replace-match still had the expected effect.
+
+       * test/lisp/progmodes/project-tests.el (project-ignores-bug-50240):
+       New test.
+
+       * test/lisp/progmodes/xref-tests.el
+       (xref-matches-in-directory-filters-with-ignores): New test.
+
+2021-09-06  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Try to fix vc-test-git06-version-diff on Hydra
+
+       * test/lisp/vc/vc-tests.el (vc-test--version-diff):
+       Fix Git backend when running in clean environment.
+       (vc-test-git06-version-diff): Unskip on Hydra.
+
+2021-09-06  Glenn Morris  <rgm@gnu.org>
+
+       * doc/misc/efaq.texi: Misc copyedits.
+
+       Prefer mailing lists to newgroups.
+       (History of Emacs): Rename from "Status of Emacs".
+       Move XEmacs node here.
+       (Emacs for other operating systems): Merge all the "non-Unix"
+       systems into a single node.
+
+2021-09-05  Glenn Morris  <rgm@gnu.org>
+
+       * test/lisp/vc/vc-tests.el (vc-test-git06-version-diff): Skip on hydra.
+
+2021-09-05  Dmitry Gutov  <dgutov@yandex.ru>
+
+       * lisp/progmodes/xref.el: Bump the version again.
+
+2021-09-05  Philip Kaludercic  <philipk@posteo.net>
+
+       Implement multi-prefix capability
+
+       * lisp/net/rcirc.el (rcirc-implemented-capabilities): Add capability
+       (rcirc-user-nick): Handle multiple prefixes
+
+2021-09-05  Philip Kaludercic  <philipk@posteo.net>
+
+       Fix rcirc-track-abbrevate-flag documentation
+
+       * lisp/net/rcirc.el (rcirc-track-abbrevate-flag): Rephrase docstring
+
+2021-09-05  Philip Kaludercic  <philipk@posteo.net>
+
+       Store symbols in rcirc-acked-capabilities
+
+       * lisp/net/rcirc.el (rcirc-handler-CAP): Use intern and downcase
+
+2021-09-05  Juri Linkov  <juri@linkov.net>
+
+       Improve tab-bar event handling (bug#41343)
+
+       * lisp/tab-bar.el (tab-bar--key-to-number): Rename from 
tab--key-to-number.
+       (tab-bar--event-to-item): New function from tab-bar-handle-mouse.
+       (tab-bar-mouse-select-tab, tab-bar-mouse-close-tab)
+       (tab-bar-mouse-context-menu, tab-bar-mouse-move-tab):
+       Use tab-bar--event-to-item.
+
+       * src/menu.c (x_popup_menu_1): Handle Qtab_bar in the second list 
element.
+
+       * src/xdisp.c (tty_get_tab_bar_item): Change arg 'end' to bool 
'close_p'.
+       (tty_get_tab_bar_item): Detect if the close button was clicked.
+       (tty_handle_tab_bar_click): Return a list with caption that has
+       text properties.
+
+2021-09-05  Philip Kaludercic  <philipk@posteo.net>
+
+       Print value on malformed input
+
+       * lisp/net/rcirc.el (rcirc-define-command): Unquote argument
+
+2021-09-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Autoload cl-struct-slot-info
+
+       * lisp/emacs-lisp/cl-macs.el (cl-struct-slot-info): Autoload
+       (bug#50301).
+
+       * test/lisp/emacs-lisp/memory-report-tests.el: Don't require cl-macs.
+
+2021-09-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve the documentation around the read-key/minibuffer prompting
+
+       * lisp/subr.el (read-char-choice-use-read-key): Explain the
+       difference.
+       (read-char-choice): Mention the variables.
+       (y-or-n-p-use-read-key): Explain the difference.
+       (y-or-n-p): Mention the variable (bug#50390).
+
+2021-09-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify completion-list-mode NEWS entry
+
+       * etc/NEWS: Clarify completion-list-mode entry (bug#50394).
+
+2021-09-05  Juri Linkov  <juri@linkov.net>
+
+       * lisp/progmodes/xref.el: Fix defcustoms (bug#50067)
+
+       * lisp/progmodes/xref.el (xref-auto-jump-to-first-definition)
+       (xref-auto-jump-to-first-xref, xref-search-program): Fix defcustoms.
+
+2021-09-05  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of new Xref options
+
+       * doc/emacs/maintaining.texi (Looking Up Identifiers):
+       * etc/NEWS: Document the new Xref user options.  Move a lost
+       Xref-related entry to the rest of them.
+
+2021-09-05  Augusto Stoffel  <arstoffel@gmail.com>
+
+       Fixes for 'python-shell-send-string' and 'python-shell-send-file'
+
+       * lisp/progmodes/python.el (python-shell-send-string): use a temporary
+       file for sufficiently long strings.
+       (python-shell-send-file, python-shell-eval-file-setup-code): Avoid
+       showing "plumbing code" in the traceback (bug#32042).
+
+2021-09-05  Ian W  <ian@wahbe.com>  (tiny change)
+
+       Fix error handling in 'ispell-init-process'
+
+       * lisp/textmodes/ispell.el (ispell-init-process): When Ispell
+       initialization reports an error, call 'ispell-accept-output' only
+       if the Ispell process is still alive.  (Bug#50370)
+
+2021-09-05  Michael Albinus  <michael.albinus@gmx.de>
+
+       Cleanup tramp-tests.el
+
+       * test/lisp/net/tramp-tests.el
+       (tramp--test--deftest-direct-async-process): Fix macro declaration.
+       (tramp-test29-start-file-process, tramp-test30-make-process):
+       Do not run connection type test for direct async processes.
+
+2021-09-05  Glenn Morris  <rgm@gnu.org>
+
+       * test/lisp/vc/vc-tests.el (vc-test-sccs06-version-diff): Fix it.
+
+2021-09-05  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Belated fix
+
+       * lisp/progmodes/xref.el: (xref--show-xref-buffer):
+       Fix support for xref-auto-jump-to-first-xref.
+
+2021-09-05  Dmitry Gutov  <dgutov@yandex.ru>
+
+       * lisp/progmodes/xref.el: Bump version.
+
+2021-09-05  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Xref: automatic jumping to the first definition or reference
+
+       * lisp/progmodes/xref.el (xref-auto-jump-to-first-definition)
+       (xref-auto-jump-to-first-xref): New user options.
+       Discussed in bug#50067.
+       (xref--show-xrefs, xref--show-defs): Use them here.
+       (xref--auto-jump-first): New function, handles different values.
+       (xref-show-definitions-buffer)
+       (xref-show-definitions-buffer-at-bottom): Use it.
+
+2021-09-05  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Fix test on machines with Bzr not set up
+
+       * test/lisp/vc/vc-tests.el (vc-test--version-diff):
+       Add EMAIL= to the environment to avoid potential failure.
+
+2021-09-05  Philip Kaludercic  <philipk@posteo.net>
+
+       Replace with-current-buffer with buffer-local-value where applicable
+
+       * lisp/net/rcirc.el (rcirc-buffer-process): Use buffer-local-value
+       (rcirc-last-quit-line): Use buffer-local-value
+       (rcirc-bury-buffers): Use buffer-local-value
+       (rcirc-record-activity): Use buffer-local-value
+
+2021-09-05  Matthias Meulien  <orontee@gmail.com>
+
+       Add tests for vc-version-diff
+
+       * test/lisp/vc/vc-tests.el (vc-test--version-diff):
+       New function.
+       (vc-test-%s06-version-diff): New family of tests.
+
+2021-09-05  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Rename xref-select-and-{goto,show}-xref
+
+       * lisp/progmodes/xref.el (xref-select-and-show-xref):
+       Rename from xref-select-and-goto-xref (bug#35376).
+       Update all references.
+
+2021-09-04  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Avoid segfault in command-modes
+
+       * src/data.c (Fcommand_modes): Check that bytecode object is
+       interactive before accessing its interactive spec to avoid
+       segfaulting (bug#50376).
+
+2021-09-04  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/timer.el (timer-create): Don't inline it
+
+2021-09-04  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of line truncation and wrapping
+
+       * doc/emacs/display.texi (Line Truncation, Visual Line Mode):
+       * doc/lispref/display.texi (Truncation): Document that turning on
+       line truncation disables wrapping, and vice versa.
+
+       * src/buffer.c (syms_of_buffer) <truncate-lines>:
+       * src/xdisp.c (syms_of_xdisp) <truncate-partial-width-windows>:
+       Warn against turning on when 'visual-line-mode' is in effect.
+       * lisp/simple.el (visual-line-mode): Document that this mode
+       disables line truncation.  (Bug#29664)
+
+2021-09-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow killing the diff buffer after `C-x v u'
+
+       * doc/emacs/maintaining.texi (VC Undo): Document this.
+       * lisp/vc/vc.el (vc-revert-show-diff): Allow a `kill' value.
+       (vc-revert): Use it (bug#16902).
+
+2021-09-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve error message in ielm on printing errors
+
+       * lisp/ielm.el (ielm-eval-input): Don't claim that there's a bug
+       on pp -- it may just be something that nests too far (bug#18012).
+
+2021-09-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a customization group link from whitespace-mode
+
+       * lisp/whitespace.el (whitespace-mode): Add a link to the
+       whitespace customization group to see the faces (bug#18296).
+
+2021-09-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add support for customization group hyperlinks in doc strings
+
+       * lisp/help-mode.el (help-customization-group): New button.
+       (help-xref-customization-group-regexp): New const.
+       (help-make-xrefs): Use them to allow making customization group
+       buttons.
+
+2021-09-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make multi-frame `M-x calendar' setup work when `pop-up-frames'
+
+       * lisp/calendar/calendar.el (calendar): Make the calendar frame
+       setup work when pop-up-frames is non-nil (bug#19256).
+
+2021-09-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak hi-lock-mode doc string
+
+       * lisp/hi-lock.el (hi-lock-mode): Tweak the doc string so that
+       running hi-lock-mode in a *Help* buffer showing this help text
+       won't issue an error (bug#20977).
+
+2021-09-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make `M-x term' offer completion
+
+       * lisp/term.el (term): Have completion in the prompt (bug#21296).
+
+2021-09-04  Yuchen Pei  <hi@ypei.me>
+
+       Add diary-offset to diary-lib.el
+
+       * doc/emacs/calendar.texi: Document the change.
+       * lisp/calendar/diary-lib.el (diary-offset):
+       * test/lisp/calendar/icalendar-tests.el: Add a test (bug#50195).
+
+2021-09-04  Stefan Kangas  <stefan@marxist.se>
+
+       * etc/DISTRIB: Refer to gnu.org instead of the deleted file etc/GNU.
+
+2021-09-03  Glenn Morris  <rgm@gnu.org>
+
+       * doc/misc/efaq.texi (Reporting bugs): Refer to the Emacs manual.
+
+       That is better than having a separate, outdated text.
+
+2021-09-03  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       0aa0410372 (origin/emacs-27, emacs-27) Fix "Finder" description for m...
+
+2021-09-03  Augusto Stoffel  <arstoffel@gmail.com>
+
+       Change Python eval to send directly instead of using temporary files
+
+       * lisp/progmodes/python.el (python-shell-eval-setup-code): New
+       const for setting up eval (bug#49822).
+       (python-shell--encode-string): New function.
+       (python-shell-send-string): Use it to send commands directly
+       instead of writing to a temporary file.
+       (python-shell-send-string-no-output): Adjust sending.
+       (python-shell-send-file): Ditto.
+
+2021-09-03  Theodor Thornhill  <theo@thornhill.no>
+
+       Update to CSS Flexible Box Layout Module Level 2
+
+       * lisp/textmodes/css-mode.el (css-property-alist): Update link.
+
+2021-09-03  Theodor Thornhill  <theo@thornhill.no>
+
+       Update to CSS Containment Module Level 2
+
+       * lisp/textmodes/css-mode.el (css-property-alist): Update contain,
+       and add content-visibility.
+
+2021-09-03  Theodor Thornhill  <theo@thornhill.no>
+
+       Update to CSS Grid Layout Module Level 2
+
+       * lisp/textmodes/css-mode.el (css-property-alist): Update to the
+       newer spec, and add the subgrid keywords.
+
+2021-09-03  Theodor Thornhill  <theo@thornhill.no>
+
+       Clean up css-property-alist for alignment
+
+       * lisp/textmodes/css-mode.el (css-property-alist)
+       (css-value-class-alist): Provide new position related entries for
+       use in css-property-alist.  Make sure that property-alist reflect
+       the spec: https://www.w3.org/TR/css-align-3/#property-index
+
+2021-09-03  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix `describe-function' for autoloaded adviced functions
+
+       * lisp/emacs-lisp/nadvice.el (advice--make-single-doc): Factor
+       out.
+       (advice--make-docstring): From here (bug#23523).  Also include
+       advices for autoloads.
+
+2021-09-03  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow gud-mi to edit two executables with the same name
+
+       * lisp/progmodes/gud.el (gud-common-init): Allow editing two
+       executables with the same name (bug#22772).
+
+2021-09-03  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make recent timer changes more backwards-compatible
+
+       * lisp/emacs-lisp/timer.el (timerp, timer-event-handler): Make
+       backwards-compatible with old .elc files that have their own
+       versions of `timer-create'd structures.
+
+2021-09-03  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix message in previous toggle-truncate-lines change
+
+       * lisp/simple.el (toggle-truncate-lines): Fix message in previous
+       change.
+
+2021-09-03  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow not putting pasted text onto the kill ring under xterm
+
+       * lisp/term/xterm.el (xterm-paste): Don't put pasted text onto the
+       kill ring (bug#28868).
+       (xterm-store-paste-on-kill-ring): New user option.
+
+2021-09-03  Eli Zaretskii  <eliz@gnu.org>
+
+       * etc/NEWS: Announce recent change in 'toggle-truncate-lines'.
+
+2021-09-03  Stefan Kangas  <stefan@marxist.se>
+
+       Sync latest SKK-JISYO.L
+
+       * leim/SKK-DIC/SKK-JISYO.L: Sync to current upstream version.
+
+2021-09-03  Stefan Kangas  <stefan@marxist.se>
+
+       Update publicsuffix.txt from upstream
+
+       * etc/publicsuffix.txt: Update from
+       https://publicsuffix.org/list/public_suffix_list.dat
+       dated 2021-09-02 22:13:03 UTC.
+
+2021-09-03  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make toggle-truncate-lines disable visual-line-mode
+
+       * lisp/simple.el (toggle-truncate-lines): Disable
+       `visual-line-mode' (bug#29664).
+
+2021-09-03  Stefan Kangas  <stefan@marxist.se>
+
+       Avoid cl-lib alias for cadadr and friends
+
+       * lisp/edmacro.el (edmacro-fix-menu-commands):
+       * lisp/frameset.el (frameset-move-onscreen):
+       * lisp/htmlfontify.el (hfy-face-at, hfy-merge-adjacent-spans)
+       (hfy-mark-tag-names):
+       * lisp/mail/footnote.el (footnote--make-hole)
+       (footnote-back-to-message):
+       * lisp/net/eudc.el (eudc-get-email, eudc-get-phone):
+       * lisp/net/rcirc.el (rcirc-make-trees, rcirc-handler-333)
+       (rcirc-authenticate):
+       * lisp/play/5x5.el (5x5-draw-grid, 5x5-solver):
+       * lisp/play/decipher.el (decipher-insert-frequency-counts):
+       * lisp/ses.el (ses-relocate-range):
+       * test/lisp/emacs-lisp/edebug-tests.el 
(edebug-tests-step-into-macro-error)
+       (edebug-tests-error-stepping-into-subr): Avoid using cl-lib aliases
+       for cadadr and friends that now reside in subr.el.
+
+2021-09-03  Stefan Kangas  <stefan@marxist.se>
+
+       Move cl-lib tests for caaXr to subr-tests.el
+
+       * test/lisp/emacs-lisp/cl-lib-tests.el (cl-test-caaar)
+       (cl-test-caadr): Move tests using a cl-lib alias from here...
+       * test/lisp/subr-tests.el (subr-test-caaar, subr-test-caadr): ...to
+       here.  The functions under test are in subr.el.
+
+2021-09-03  Theodor Thornhill  <theo@thornhill.no>
+
+       Add CSS Box Alignment Module Level 3 to css-mode
+
+       * lisp/textmodes/css-mode.el (css-property-alist): Consolidate
+       `align-{contents, items, self}', as well as the corresponding
+       values for `justify-{contents, items, self}' and `place-{contents,
+       items, self}'.  Values extracted from the flex part and into its
+       own block (bug#50345).
+
+2021-09-03  Theodor Thornhill  <theo@thornhill.no>
+
+       Add selection to css-pseudo-element-ids
+
+       * lisp/textmodes/css-mode.el (css-pseudo-element-ids): Add
+       selection as an element id (bug#50345).
+
+2021-09-03  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix `revert-buffer' message in `find-file-select'
+
+       * lisp/files.el (find-file-noselect): Refer to revert-buffer-quick
+       here since we're in a file-based buffer.
+
+2021-09-03  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix memory-report test failure
+
+       * test/lisp/emacs-lisp/memory-report-tests.el: Fix test build failure.
+
+2021-09-03  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Fix recently broken vc-delete-file with Git
+
+       * lisp/vc/vc-git.el (vc-git-delete-file):
+       Treat FILE as string, not list (bug#50334).
+
+2021-09-03  Glenn Morris  <rgm@gnu.org>
+
+       More fixes for recently added vc-rename test
+
+       * test/lisp/vc/vc-tests.el (vc-test-cvs05-rename-file): Skip.
+       (vc-test-sccs05-rename-file): Treat like RCS.
+
+2021-09-02  Tassilo Horn  <tsdh@gnu.org>
+
+       Support forges by type rather than by host
+
+       Formerly, bug-reference-setup-from-vc-alist basically had one entry
+       per host (like gitlab.com).  Restructure so that it's easy to add new
+       hosts being just an instance of some type of forge such as SourceHut,
+       Gitea, or GitLab.
+
+       While we're at it, add support for gitea.com, salsa.debian.org, and
+       framagit.org, the latter two being GitLab instances.
+
+       * lisp/progmodes/bug-reference.el (bug-reference-gitea-instances)
+       (bug-reference-gitlab-instances,bug-reference-sourcehut-instances):
+       New variables listing online instances of those forges.
+       (bug-reference--setup-from-vc-alist): New function (and variable for
+       caching) using the former three new variables to generate suitable VC
+       auto-setup alist.
+       (bug-reference-try-setup-from-vc): Use both
+       bug-reference-setup-from-vc-alist and
+       bug-reference--setup-from-vc-alist.
+
+2021-09-02  Juri Linkov  <juri@linkov.net>
+
+       * lisp/abbrev.el: Improve docstrings of inverse commands (bug#50303)
+
+       * lisp/abbrev.el (add-mode-abbrev, add-global-abbrev)
+       (inverse-add-mode-abbrev, inverse-add-global-abbrev):
+       Add interlinking to opposite commands in docstrings.
+
+2021-09-02  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix expansion of non-ASCII $HOME
+
+       * src/fileio.c (Fexpand_file_name): Make the file name multibyte
+       if the value of $HOME is multibyte.  (Bug#50266)
+
+2021-09-02  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix 'clone-frame' on TTY frames
+
+       * src/frame.c (Fmake_terminal_frame): Make a separate copy of the
+       faces for the new frame before calling modify-frame-parameters, as
+       on TTY frames that needs the faces already set up.  (Bug#34715)
+
+2021-09-02  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve a recent change in 'mule-cmds.el'
+
+       * lisp/international/mule-cmds.el
+       (select-safe-coding-system--format-list): Display codepoints in
+       hex and as characters.  Display the ellipsis in a better place.
+       Enlarge the limit to 5 codepoints, as the display is now easier to
+       grasp.
+       (select-safe-coding-system-interactively): Don't use
+       'select-safe-coding-system--format-list' for "rejected"
+       coding-systems, as those don't come with characters and positions.
+
+2021-09-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make the coding system warning prettier
+
+       * lisp/international/mule-cmds.el
+       (select-safe-coding-system--format-list): New function to display
+       the coding system information in a more readable format (bug#31062).
+       (select-safe-coding-system-interactively): Use it.
+
+2021-09-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Reformat up-list and backward-up-list doc strings
+
+       * lisp/emacs-lisp/lisp.el (backward-up-list): Reformat the doc
+       string into several paragraphs (bug#31349).
+       (up-list): Ditto and fix the "start" to be "end".
+
+2021-09-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       isearch*-lax-whitespace doc string improvements
+
+       * lisp/isearch.el (isearch-regexp-lax-whitespace):
+       * lisp/isearch.el (isearch-lax-whitespace): Mention the key binding
+       in the doc string (bug#31790).
+
+2021-09-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix documentation of `dired-do-touch'
+
+       * doc/emacs/dired.texi (Operating on Files): Fix documentation of
+       `dired-do-touch' (bug#50323).
+
+2021-09-02  Yikai Zhao  <yikai@z1k.dev>
+
+       memory-report: support calculating size for structures
+
+       * lisp/emacs-lisp/memory-report.el (memory-report--object-size-1): Add
+       support for cl-defstruct types (bug#50301).
+
+2021-09-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix up previous ebfn2ps tweak
+
+       * lisp/progmodes/ebnf2ps.el (ebnf-print-buffer): Remove NOOP decode
+       step.
+
+2021-09-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a test for bug#50320 in sh-script
+
+2021-09-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Tweak sh-script-mode indentation further"
+
+       This reverts commit 6392bc37ab3b7eb83465d9b2248d21173373ae73.
+
+       The changes led to errors throughout (bug#50320).
+
+2021-09-02  Stephen Gildea  <stepheng+emacs@gildea.com>
+
+       tramp-auto-save-directory: make private
+
+       * lisp/net/tramp.el (tramp-handle-make-auto-save-file-name):
+       chmod 0700 tramp-auto-save-directory when creating
+
+       Thanks to Michael Albinus for reviewing this patch.
+
+2021-09-01  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix segfault with invalid key-translation-map binding
+
+       * src/keyboard.c (access_keymap_keyremap): Don't assume an invalid
+       function is specified as a symbol.  Reported by Perry E. Metzger
+       <perry@piermont.com>.
+
+2021-09-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Filter out the `name' parameter in clone-frame
+
+       * lisp/frame.el (clone-frame): Filter out the `name' parameter,
+       because two frames shouldn't have the same name and this will
+       lead to a warning.
+
+2021-09-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't have epg bug out on non-existent packages
+
+       * lisp/epg.el (epg--start): We may be called from contexts where
+       the directory doesn't exist, but we need to have an existing
+       directory here for the process (bug#32004).
+
+2021-09-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add new macro `with-existing-directory'
+
+       * doc/lispref/files.texi (Testing Accessibility): Document it.
+       * lisp/subr.el (with-existing-directory): New macro (bug#32004).
+
+2021-09-01  Kien Nguyen  <kien.n.quang@gmail.com>
+
+       * Add a dll loader entry for gcc_jit_context_new_cast (bug#50315)
+
+       * src/comp.c: Add a dll loader entry for
+       'gcc_jit_context_new_cast' (bug#50315).
+
+2021-09-01  Drew Adams  <drew.adams@oracle.com>
+
+       Add new command `clone-frame'
+
+       * doc/emacs/frames.texi (Creating Frames): Document it.
+
+       * lisp/frame.el (clone-frame): New command and keystroke (bug#34715).
+
+2021-09-01  Glenn Morris  <rgm@gnu.org>
+
+       Make set-foreground-color display completions using foreground colors
+
+       * lisp/faces.el (defined-colors-with-face-attributes): Also create
+       colors for foregrounds (bug#33799).
+       (read-color): Also allow varying the foreground color.
+
+       * lisp/frame.el (set-foreground-color): Vary the foreground color.
+
+2021-09-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix (setf (map-elt map key) (my-func))
+
+       * lisp/emacs-lisp/map.el (map-elt): Ensure that the value isn't
+       referenced more than once (bug#50290).
+
+2021-09-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Autoload calc-grab-sum-across and calc-grab-sum-down
+
+       * lisp/calc/calc.el (calc-grab-sum-down):
+       (calc-grab-sum-across): Autoload, since they can be used from
+       outside Calc (bug#50311).
+
+2021-09-01  Miha Rihtaršič  <miha@kamnitnik.top>
+
+       In batch mode, avoid killing Emacs with C-g in the minibuffer
+
+       * src/keyboard.c (Fcommand_error_default_function): Don't kill emacs
+       when handling the minibuffer-quit condition (bug#48603).
+
+2021-09-01  Marco Centurion  <mcenturion@fing.edu.uy>  (tiny change)
+
+       Use "gzip -d" instead of "gunzip"
+
+       * lisp/dired-aux.el (dired-compress-file-suffixes): Use "gzip -d"
+       instead of "gunzip" since we already assume that "gzip" exists on
+       the system (bug#10990).
+
+2021-08-31  Philip Kaludercic  <philipk@posteo.net>
+
+       Avoid failing if vc backend doesn't implement ignore-completion-table
+
+       * lisp/progmodes/project.el (project-ignores): Handle
+       vc-not-supported signals.
+
+2021-08-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Rename xref--mouse-2 and adjust documentation
+
+       * doc/emacs/maintaining.texi (Xref Commands): `mouse-1' is bound
+       to `xref-goto-xref', not `mouse-2' (bug#35376).
+       (Xref Commands): Mention what `mouse-2' does.
+
+       * lisp/progmodes/xref.el (xref--button-map): Adjust.
+       (xref-select-and-goto-xref): Rename from xref--mouse-2 (bug#35376).
+
+2021-08-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix point placement after ispell-complete-word
+
+       * lisp/textmodes/ispell.el (ispell-complete-word): Leave point at
+       the end of the inserted word instead of a less than useful amount
+       of distance from the start of the word (bug#37552).
+
+2021-08-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       call-process doc string clarification
+
+       * src/callproc.c (Fcall_process): Explicitly say that "output"
+       means both stdout and stderr (bug#37906).
+
+2021-08-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make calc plotting through gnuplot work on non-X gnuplots
+
+       * lisp/calc/calc-graph.el (calc-graph-plot): Fall back on "dumb"
+       if we don't support the terminal (bug#50237).
+       (calc-gnuplot-command): Say whether the command errored out.
+
+2021-08-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix abnf parsing of <prose> elements
+
+       * lisp/progmodes/ebnf-abn.el (ebnf-abn-lex): Make <prose> parsing
+       work (bug#39663).
+
+2021-08-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make run-at-time try harder to run at integral multiples
+
+       * lisp/emacs-lisp/timer.el (timer): Add new slot integral-multiple.
+       (timerp): Adjust.
+       (timer-event-handler): Recompute the delay if requested
+       (bug#39099).
+       (run-at-time): Mark the timer as recomputable if given a t
+       parameter.
+
+       * src/keyboard.c (decode_timer): Adjust.
+
+2021-08-31  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Move the expansion of abbreviated names to vc-git.el
+
+       * lisp/vc/vc-git.el (vc-git--literal-pathspec):
+       Perform the expansion of abbreviated file names here instead
+       (bug#39452).
+
+       * lisp/vc/vc.el (vc-root-diff, vc-print-root-log):
+       Undo the recent change.
+
+2021-08-30  Andreas Schwab  <schwab@linux-m68k.org>
+
+       Implement proper type conversion in native compiler
+
+       * src/comp.c (enum cast_kind_of_type): Remove.
+       (comp_t): Add cast_ptr_to_int, cast_int_to_ptr, remove
+       cast_type_sizes, cast_type_kind, cast_type_names, cast_union_fields,
+       cast_union_field_biggest_type.
+       (emit_coerce): Remove check for type size.
+       (struct cast_type): Remove bytes_size.
+       (define_type_punning): New function.
+       (define_cast_from_to): Implement proper type conversion.
+       (define_cast_functions): Adjust.  (bug#50230)
+
+2021-08-30  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       (cperl-test-bug-14343): Make it work for perl-mode
+
+       * test/lisp/progmodes/cperl-mode-tests.el (cperl--tests-heredoc-face):
+       New const.
+       (cperl-test-heredocs, cperl-test-bug-14343): Use it.
+       (cperl-test-identify-no-heredoc): Remove left-over message.
+
+2021-08-30  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * test/lisp/progmodes/cperl-mode-tests.el: Adjust here-doc tests for 
perl-mode
+
+       (cperl-test-identify-heredoc, cperl-test-identify-no-heredoc):
+       Tweak tests so they can also be used for perl-mode.
+
+2021-08-30  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * etc/NEWS: Fix typo
+
+2021-08-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of 'ispell-hunspell-add-multi-dic'
+
+       * lisp/textmodes/ispell.el (ispell-hunspell-add-multi-dic):
+       Explain in the doc string how to call from Lisp.  (Bug#50241)
+
+2021-08-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Minor improvement in 'get-locale-names' on MS-Windows
+
+       * lisp/international/mule-cmds.el (get-locale-names): Delete
+       duplicate locales from the list returned by the MS-Windows
+       implementation.
+
+2021-08-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix typo in kill-buffer-delete-auto-save-files NEWS entry
+
+2021-08-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make some non-ASCII work in ebnf2ps
+
+       * lisp/progmodes/ebnf2ps.el (ebnf-print-buffer): Make non-ASCII
+       work slightly better (bug#39663).
+
+2021-08-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix typo in previous custom.texi change
+
+       * doc/emacs/custom.texi (Init Syntax): Fix typo in previous change
+       -- it's customize-set-variable.
+
+2021-08-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make epg use rfc6068 for decoding %-encoded strings
+
+       * lisp/epg.el (epg--decode-percent-escape-as-utf-8): Make obsolete
+       and adjust callers.
+       (epg--decode-hexstring): Ditto.
+
+       * lisp/mail/rfc6068.el (rfc6068-unhexify-string): Allow returning
+       non-decoded octets (bug#39689).
+
+2021-08-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make rfc2368 obsolete and add rfc6068
+
+       * lisp/obsolete/rfc2368.el: Moved here and made obsolete.
+
+       * lisp/mail/rfc6068.el (rfc6068-unhexify-string): New file.
+
+2021-08-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Only look for the port command on MacOS
+
+       * configure.ac: Only look for the port command on MacOS (bug#50259).
+
+2021-08-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Move vc-branch-p and vc-branch-part from vc.el to vc-rcs.el and rename
+
+       * lisp/vc/vc-rcs.el (vc-rcs-branch-p): Renamed from `vc-branch-p'
+       (old name made into obsolete alias) and moved from vc.el.
+       (vc-rcs-branch-part): Renamed from `vc-branch-part'
+       (old name made into obsolete alias) and moved from vc.el.
+
+2021-08-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix vc test for RCS
+
+       * test/lisp/vc/vc-tests.el (vc-test--rename-file): Fix test for RCS.
+
+2021-08-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention `set-variable' in the Init Syntax Emacs manual node
+
+       * doc/emacs/custom.texi (Init Syntax): Mention set-variable
+       (bug#50248).
+       (Init Examples): Add an example.
+
+2021-08-29  Clément Pit-Claudel  <clement.pitclaudel@live.com>
+
+       Change --with-nativecomp to --with-native-compilation in messages
+
+       * configure.ac:
+       * test/infra/Dockerfile.emba:
+       * test/infra/gitlab-ci.yml: Fix mentions of --with-nativecomp
+       (bug#50255).
+
+2021-08-29  Augusto Stoffel  <arstoffel@gmail.com>
+
+       Add support for OSC 7 in comint (current directory tracking)
+
+       * lisp/comint.el (comint-osc-directory-tracker, comint-osc-handlers):
+       Define and register a handler for OSC 7.
+       (comint-osc-process-output): Do fewer checks on
+       'comint-last-output-start'.
+
+2021-08-29  Kévin Le Gouguec  <kevin.legouguec@gmail.com>
+
+       Tweak sh-script-mode indentation further
+
+       * lisp/progmodes/sh-script.el (sh-smie--default-backward-token):
+       Allow more parentheses in a token (bug#44592).
+
+2021-08-29  Philipp Stephani  <phst@google.com>
+
+       Improve compatibility with musl-libc (Bug#48789)
+
+       * lib-src/seccomp-filter.c (export_filter): Remove use of
+       nonstandard macro TEMP_FAILURE_RETRY.
+
+2021-08-29  Alan Mackenzie  <acm@muc.de>
+
+       C++ Mode: handle compound identifiers preceding brace lists correctly
+
+       * lisp/progmodes/cc-engine.el (c-looking-at-or-maybe-in-bracelist): 
early in
+       function, check alternatively for c-back-over-compound-identifier when 
doing
+       c-backward-token-2.
+
+2021-08-29  Alan Third  <alan@idiocy.org>
+
+       Fix libexec installation on NS (bug#50250)
+
+       * lib-src/Makefile.in (ns_applibexecdir): New variable.
+
+2021-08-29  Eli Zaretskii  <eliz@gnu.org>
+
+       Better document obsolescence of 'values'
+
+       * doc/lispref/eval.texi (Eval): Mention that 'values' is obsolete.
+       * etc/NEWS: Add a rationale for obsoleting 'values'.
+
+2021-08-29  Alan Third  <alan@idiocy.org>
+
+       Disable the NS app when no frames are left (bug#14619, bug#21357, 
bug#23586)
+
+       * src/nsfns.m (Fx_create_frame): Enable the app.
+       * src/nsterm.m (ns_delete_terminal): Disable the app.
+
+2021-08-29  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Add tests for vc-rename-file
+
+       * test/lisp/vc/vc-tests.el (vc-test--rename-file): New function.
+       (vc-test-%s05-rename-file): New family of tests (bug#39452).
+
+2021-08-28  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * etc/NEWS: Document the recent xterm.el change for `\e[29~`
+
+2021-08-27  Juri Linkov  <juri@linkov.net>
+
+       * lisp/progmodes/flymake.el: Bind mouse-3 to flymake-menu on mode-line.
+
+       * lisp/progmodes/flymake.el (flymake--mode-line-title):
+       Bind [mode-line down-mouse-3] to flymake-menu (bug#50067)
+
+2021-08-27  Juri Linkov  <juri@linkov.net>
+
+       Revert part of 3572613550f5d1d0b3392dbc809b32f3989e2981 (bug#39452)
+
+       * lisp/vc/vc-git.el (vc-git-rename-file): Don't use 
vc-git--literal-pathspecs.
+
+2021-08-27  Dario Gjorgjevski  <dario.gjorgjevski@gmail.com>
+
+       Fix shell-script-mode indentation of continuation lines
+
+       * lisp/progmodes/sh-script.el (sh-smie--default-backward-token):
+       Fix indentation of continuation lines (bug#44592).
+
+2021-08-27  Michalis V  <mvar.40k@gmail.com>
+
+       Fix completion of extended "..." syntax in eshell
+
+       * lisp/eshell/em-cmpl.el (eshell-complete-parse-arguments): Expand
+       "..." (bug#19626).
+
+2021-08-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't overly truncate tabulated-list headers
+
+       * lisp/emacs-lisp/tabulated-list.el (tabulated-list-init-header):
+       Don't overly truncate headers that are before a right-aligned
+       column (bug#44594).
+       (tabulated-list--available-space): Separated out into own
+       function...
+       (tabulated-list-print-col): ... from here.
+
+2021-08-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix `M-X TAB' completion for commands marked for multiple modes
+
+       * lisp/simple.el (command-completion-using-modes-p): Fix
+       completion over commands that are defined for multiple modes
+       (bug#50228).
+
+2021-08-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Put advice documentation at the end of the displayed doc string
+
+       * lisp/emacs-lisp/nadvice.el (advice--make-docstring): Put the
+       advice things at the end of the documentation (bug#50222).  It's
+       important to have the first line of the original documentation
+       remain the first line, because it's used when doing one-line
+       summaries of the function.
+
+2021-08-27  Thierry Volpiatto  <thievol@posteo.net>
+
+       Make `eshell-command' also work when asynchronous
+
+       * lisp/eshell/esh-cmd.el (eshell-eval-command): Make asynchronous
+       `eshell-command' work (e.g. `M-x eshell-command RET sleep 10 &')
+       (bug#50209).
+
+2021-08-27  Christophe Troestler  <Christophe.Troestler@umons.ac.be>  (tiny 
change)
+
+       lisp/newcomment.el: Uncommenting with whitespace `comment-continue'
+
+       * lisp/newcomment.el (uncomment-region-default-1): Make
+       all-whitespace `comment-continue' work (bug#50226).
+
+2021-08-27  Andrea Corallo  <akrl@sdf.org>
+
+       Forward `comp-file-preloaded-p' to async workers
+
+       * lisp/emacs-lisp/comp.el (comp-run-async-workers): Forward
+       `comp-file-preloaded-p' to async workers.
+
+2021-08-27  Juri Linkov  <juri@linkov.net>
+
+       Replace flyspell-use-mouse-3-for-menu with context-menu-mode (bug#50067)
+
+       * doc/emacs/fixit.texi (Spelling): Replace mentions of
+       flyspell-use-mouse-3-for-menu with context-menu-mode.
+
+       * lisp/mouse.el (context-menu-map): Use the function from the
+       text property context-menu-function at mouse click event.
+
+       * lisp/textmodes/flyspell.el (flyspell--set-use-mouse-3-for-menu):
+       Remove function.
+       (flyspell-use-mouse-3-for-menu): Remove defcustom added recently in 
28.1.
+       (flyspell-context-menu): New function.
+       (flyspell-mode): Don't call flyspell--set-use-mouse-3-for-menu.
+       (flyspell-mode-on): Replace flyspell-use-mouse-3-for-menu
+       with context-menu-mode.
+       (make-flyspell-overlay): When context-menu-mode is non-nil,
+       put overlay context-menu-function with flyspell-context-menu
+       instead of using keymap flyspell-mouse-map.
+
+2021-08-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       python-shell-interpreter doc string clarification
+
+       * lisp/progmodes/python.el (python-shell-interpreter): Note what
+       to do when using ipython3 (bug#44732).
+
+2021-08-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix backtrace when query-about-changed-file nil and file has changed
+
+       * lisp/userlock.el (userlock--check-content-unchanged): Make the
+       assertion more robust -- we may be called here from a different
+       contexts if `query-about-changed-file' is nil.
+
+2021-08-27  Noah Evans  <noah@nevans.me>  (tiny change)
+
+       Fix recentering issue in `follow-mode'
+
+       * lisp/follow.el (follow-recenter): Make `C-c . C-l' work in
+       windows before the middle one, too (bug#50220).
+
+2021-08-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Enable setting timeclock-workday after switching mode on
+
+       * lisp/calendar/timeclock.el (timeclock--previous-workday): New
+       variable.
+       (timeclock-find-discrep): Use it to flush values when
+       timeclock-workday changes (bug#50216).
+       (timeclock-mode-line-display): Mention `timeclock-workday' setting
+       in doc string.
+
+2021-08-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix problem with symlinks in compile buffers
+
+       * lisp/progmodes/compile.el (compilation-find-file): Avoid
+       `expand-file-name' when computing the file names, because that will
+       reliably give the wrong result when there's symlinks and ".."
+       involved (bug#8035).
+
+2021-08-26  Philip Kaludercic  <philipk@posteo.net>
+
+       timeclock.el: Update example configuration
+
+       * lisp/calendar/timeclock.el: Update comments that were no longer
+       correct (bug#50211).
+
+2021-08-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make dired-chmod-program obsolete
+
+       * lisp/dired.el (dired-chmod-program): Make into a defvar and make
+       obsolete (bug#50190).
+
+       * lisp/net/ange-ftp.el (ange-ftp-process-file): Remove usage of
+       dired-chmod-program.
+
+2021-08-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Add support for "bright" ANSI colors in ansi-color"
+
+       This reverts commit c8e3347ec01a9ed6dc8d88c2dbbb3a08497e8eb2.
+
+       Jim Porter's paperwork isn't finalised yet.
+
+2021-08-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Add support for "bright" ANSI colors in term-mode"
+
+       This reverts commit 2b2a103db0c3597c7685d3ffff4bca7f2e4d094e.
+
+       Jim Porter's paperwork isn't finalized yet.
+
+2021-08-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Add missing :version tags to new faces"
+
+       This reverts commit 9759fb596b634db2faf7edcd4fd557a11abe9903.
+
+       Jim Porter's paperwork isn't finalized yet.
+
+2021-08-26  Michael Albinus  <michael.albinus@gmx.de>
+
+       Improve robustness of shadowfile.el
+
+       * lisp/shadowfile.el (shadow-site-help): New defconst.
+       (shadow-read-site): Use it.
+       (shadow-make-fullname, shadow-contract-file-name)
+       (shadow-define-literal-group): Handle errors more robust.  (Bug#49596)
+
+       * test/lisp/shadowfile-tests.el (shadow-test06-literal-groups):
+       Extend test.
+
+2021-08-26  Tassilo Horn  <tsdh@gnu.org>
+
+       Fix docs about the meaning of the Re: in the subject
+
+       * doc/misc/message.texi (Message Headers): Clarify that it comes from
+       the Latin "res" meaning "in the matter of" rather than "in response
+       to" as claimed previously (see RFC-2822).
+
+2021-08-26  Eli Zaretskii  <eliz@gnu.org>
+
+       Define a substitute for <menu> on MS-Windows
+
+       * lisp/mouse.el (context-menu-mode-map): On w32, use <apps>
+       in addition to (the mostly non-existent) <menu>.
+
+2021-08-26  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Rename arguments for clarity
+
+       * lisp/vc/vc-git.el (vc-git--literal-pathspecs)
+       (vc-git--literal-pathspecs):
+       Rename arguments for clarity (bug#39452).
+
+2021-08-26  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Make sure to remove the remote specification before adding :(literal)
+
+       * lisp/vc/vc-git.el (vc-git--literal-pathspec):
+       Make sure to remove the remote specification from the file name
+       (bug#50175, bug#39452).
+
+2021-08-26  Stephen Gildea  <stepheng+emacs@gildea.com>
+
+       Fix "Finder" description for multi-file packages
+
+       * lisp/finder.el (finder-compile-keywords):  Now that 'version' is
+       set for more files, it is no longer necessary to check that we have
+       a version when picking the file from which to take the description.
+       Doing so caused built-in packages (where the version is known) to have
+       their package description taken from the last .el file that matched the
+       file name pattern, usually the last source file in the sub-directory.
+
+       This bug was introduced in July 2019 and first released in Emacs 27.1.
+
+       Thanks to Michael Albinus for reviewing this patch.
+
+2021-08-26  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/term/xterm.el (xterm-function-map): Map `\e[29~` to `menu`
+
+2021-08-25  Gabriel do Nascimento Ribeiro  <gabriel376@hotmail.com>
+
+       Handle nil messages in repeat-echo-message.
+
+       * lisp/repeat.el (repeat-echo-message): Handle cases where
+       'current-message' is nil (bug#50176).
+
+2021-08-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make thingatpt respect fields
+
+       * lisp/thingatpt.el (thing-at-point): Make thingatpt respect
+       fields (bug#9454).
+
+2021-08-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make `set-locale-environment' complete over locale names
+
+       * lisp/international/mule-cmds.el (get-locale-names): New function.
+       (set-locale-environment): Use it to allow completion (bug#9655).
+
+2021-08-25  João Távora  <joaotavora@gmail.com>
+
+       Speed up pcm completion styles for patternless special case
+
+       (Bug#48841)
+
+       * lisp/minibuffer.el (completion-flex-all-completions): Skip
+       completion-pcm--hilit-commonality if there's no pattern yet.
+
+2021-08-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Disable xterm selection operators in stterm
+
+       * lisp/term/st.el (xterm-st-extra-capabilities): st doesn't
+       support the xterm selection things (bug#50192).
+
+2021-08-25  Eli Zaretskii  <eliz@gnu.org>
+
+       Add missing :version tags to new faces
+
+       * lisp/term.el (term-color-bright-black, term-color-bright-red)
+       (term-color-bright-green, term-color-bright-yellow)
+       (term-color-bright-blue, term-color-bright-magenta)
+       (term-color-bright-cyan, term-color-bright-white): Add :version.
+
+2021-08-25  Jim Porter  <jporterbugs@gmail.com>
+
+       Add support for "bright" ANSI colors in term-mode
+
+       * lisp/term.el (ansi-term-color-vector): Add new faces.
+       (term-color-white): Tweak colors.
+       (term-color-bright-black, term-color-bright-red, 
term-color-bright-green)
+       (term-color-bright-yellow, term-color-bright-blue)
+       (term-color-bright-magenta, term-color-bright-cyan)
+       (term-color-bright-white): New faces.
+       (term--maybe-brighten-color): New function.
+       (term-handle-colors-array): Handle bright colors.
+       * test/lisp/term-tests.el (term-colors, term-colors-bold-is-bright):
+       New functions.
+
+2021-08-25  Jim Porter  <jporterbugs@gmail.com>
+
+       Add support for "bright" ANSI colors in ansi-color
+
+       * lisp/ansi-color.el (ansi-bright-color-names-vector): New defcustom.
+       (ansi-color-bold-is-bright): New defcustom.
+       (ansi-color--find-face): Sort ANSI codes and check
+       'ansi-color-bold-is-bright'.
+       (ansi-color-apply-sequence): Support bright ANSI colors.
+       (ansi-color--fill-color-map): New function.
+       (ansi-color-make-color-map): Add bright ANSI colors.
+       (ansi-color-get-face-1): Add BRIGHT parameter.
+       * test/lisp/ansi-color-tests.el
+       (ansi-color-apply-on-region-bold-is-bright-test): New function.
+
+2021-08-25  Shitikanth Kashyap  <shitikanth1@gmail.com>  (tiny change)
+
+       tabulated-list-print delete excess lines
+
+       * lisp/emacs-lisp/tabulated-list.el (tabulated-list-print): Ensure
+       that we delete remaining lines if the list has gotten shorter
+       (bug#50194).
+
+2021-08-25  Augusto Stoffel  <arstoffel@gmail.com>
+
+       Add support for OSC escape codes in comint
+
+       * doc/emacs/misc.texi (Shell Mode): Document it.
+
+       * lisp/comint.el (comint-osc-handlers, comint-osc--marker): New
+       variables.
+       (comint-osc-process-output): New function.
+       (comint-osc-hyperlink-map): New map.
+       (comint-osc-hyperlink-handler): New function.
+
+2021-08-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix up deleting auto-save/killing buffer wrt. `auto-save-visited-mode'
+
+       * src/buffer.c (Fkill_buffer): Respect `auto-save-visited-mode'.
+
+2021-08-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Further checks for kill-buffer-delete-auto-save-files
+
+       * src/buffer.c (Fkill_buffer): Check that the auto-save file
+       exists before asking whether to delete it.
+
+2021-08-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix up previous conf-mode/tex-mode redirection hacks
+
+       * lisp/textmodes/conf-mode.el (conf-mode):
+       * lisp/textmodes/tex-mode.el (tex--redirect-to-submode): The
+       previous hack to these redirections would disable all local
+       variables.  Try to work around this a bit more.
+
+2021-08-24  Michael Albinus  <michael.albinus@gmx.de>
+
+       Some precisements in Tramp's connection type handling
+
+       * doc/misc/tramp.texi (Remote processes): Precise connection type
+       handling.
+
+       * lisp/net/tramp-adb.el (tramp-adb-handle-make-process):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-make-process):
+       * lisp/net/tramp.el (tramp-handle-make-process):
+       Fix :connection-type handling.
+       (tramp-action-show-and-confirm-message): Pacify byte compiler.
+
+       * lisp/net/tramp-compat.el (tramp-compat-ignore-error): New defmacro.
+
+       * test/lisp/net/tramp-tests.el (tramp-test29-start-file-process)
+       (tramp-test30-make-process): Extend tests.
+
+2021-08-24  Ergus  <spacibba@aol.com>
+
+       * lisp/mouse.el (context-menu-mode-map): Bind [menu] to 
context-menu-open.
+
+       https://lists.gnu.org/archive/html/emacs-devel/2021-08/msg01004.html
+
+2021-08-24  Juri Linkov  <juri@linkov.net>
+
+       * lisp/mouse.el (context-menu-buffers): New function (bug#50067).
+
+       (context-menu-functions): Add context-menu-buffers to the choice list.
+
+2021-08-24  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Doc that dired-do-chmod no longer follows symlinks
+
+       * doc/emacs/dired.texi (Operating on Files):
+       * etc/NEWS: Document this security precaution.
+
+2021-08-24  Gabriel do Nascimento Ribeiro  <gabriel376@hotmail.com>
+
+       Fix to clear echo-area after repeat-exit-timeout.
+
+       * lisp/repeat.el (repeat-echo-message): Use 'string-match-p'
+       to handle cases where echo-area contains other messages (bug#50176).
+
+2021-08-23  Eli Zaretskii  <eliz@gnu.org>
+
+       Document 'jit-lock-bounds'
+
+       * doc/lispref/modes.texi (Other Font Lock Variables):
+       * lisp/jit-lock.el (jit-lock-functions, jit-lock-register):
+       Document the return value of the fontification functions.
+
+2021-08-23  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of 'inhibit-mouse-event-check'
+
+       * etc/NEWS:
+       * src/callint.c (syms_of_callint): Fix wording of the
+       documentation of 'inhibit-mouse-event-check'.
+
+2021-08-23  Mattias Engdegård  <mattiase@acm.org>
+
+       Add example of advanced user-defined Rx form to manual
+
+       * doc/lispref/searching.texi (Extending Rx): Add example illustrating
+       how to define a user-defined Rx form that performs computation,
+       from a discussion with Michael Herdeegen (bug#50136).
+       * lisp/emacs-lisp/rx.el (rx): Clarify evaluation time for `eval`.
+
+2021-08-23  Juri Linkov  <juri@linkov.net>
+
+       * lisp/mouse.el (context-menu-open): New command bound to [S-f10].
+
+       * doc/emacs/frames.texi (Menu Mouse Clicks): Mention S-F10
+       to pop up the context menu.
+
+       * src/callint.c (Fcall_interactively):
+       Use inhibit_mouse_event_check for the case 'e'.
+       (inhibit-mouse-event-check): New variable.
+
+       https://lists.gnu.org/archive/html/emacs-devel/2021-08/msg00733.html
+
+2021-08-23  Glenn Morris  <rgm@gnu.org>
+
+       Fix recently added cperl test
+
+       * test/lisp/progmodes/cperl-mode-tests.el
+       (cperl-test-here-doc-missing-end): Fix quote regexp.
+
+2021-08-23  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve recently-changed docs
+
+       * src/frame.c (Fnext_frame):
+       * doc/lispref/frames.texi (Finding All Frames): Improve wording
+       and style of the 'next-frame's documentation.
+
+2021-08-23  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix doc strings in recent changes.
+
+       * lisp/progmodes/cperl-mode.el (cperl-commentify)
+       (cperl-here-doc-functions, cperl-is-here-doc-p)
+       (cperl-find-pods-heres): Fix wording, style, and punctuation of
+       doc strings.
+
+2021-08-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify the documentation of `next-frame'
+
+       * doc/lispref/frames.texi (Finding All Frames): Clarify what it
+       means to "consider".
+       * src/frame.c (Fnext_frame): Rewrite doc string to say what the
+       parameters actually mean (bug#13339).
+
+2021-08-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add new variable 'kill-buffer/delete-auto-save-files'
+
+       * doc/emacs/files.texi (Auto Save Files): Document it.
+       * lisp/cus-start.el (standard): Add customize form.
+
+       * lisp/files.el (delete-auto-save-files): Move definition to C
+       (since it's used in the C layer).
+
+       * src/buffer.c (Fkill_buffer): Use the new variable (and remove
+       the old code that apparently didn't trigger for
+       kill-buffer/delete-auto-save-files.
+       (syms_of_buffer): Add new variable
+       kill-buffer-delete-auto-save-files and move definition of
+       delete-auto-save-files here (bug#21612).
+
+2021-08-23  Michael Albinus  <michael.albinus@gmx.de>
+
+       Complete implementation of `copy-directory-create-symlink' in Tramp
+
+       * lisp/net/tramp-sh.el (tramp-sh-handle-copy-directory): Fix the case
+       NEWNAME is a directory name with a trailing slash.
+
+       * lisp/net/tramp-smb.el (tramp-smb-handle-copy-directory):
+       Implement `copy-directory-create-symlink'.  (Bug#10897)
+
+       * test/lisp/net/tramp-tests.el
+       (tramp--test-ignore-make-symbolic-link-error): Move up.
+       (tramp-test15-copy-directory): Extend test.
+
+2021-08-23  Juri Linkov  <juri@linkov.net>
+
+       * lisp/mouse.el (context-menu-toolbar): New function.
+
+       (context-menu-functions): Add context-menu-toolbar to choice.
+       (context-menu-region): Bind "Paste" to mouse-yank-at-click
+       instead of mouse-yank-primary.
+       https://lists.gnu.org/archive/html/emacs-devel/2021-08/msg00735.html
+
+2021-08-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify :stderr in the make-process doc string
+
+       * src/process.c (Fmake_process): Elaborate upon what :stderr does
+       (bug#50166).
+
+2021-08-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Update NEWS tagging for modules and parse-time-string
+
+2021-08-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Document `dlet'
+
+       * doc/lispref/variables.texi (Local Variables): Document `dlet'.
+
+2021-08-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve byte-compile-warnings doc string
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-warnings): Mention
+       'byte-compile-docstring-max-column'.
+
+2021-08-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Do command mode markup in xwidget.el
+
+2021-08-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make xwidget-webkit-enable-plugins a defcustom
+
+       * lisp/xwidget.el (xwidget-webkit-enable-plugins): Make into
+       defcustom.
+
+2021-08-23  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Fix recent parse-partial-sexp argument validation
+
+       * src/syntax.c (parse-partial-sexp): Also handle markers as
+       arguments (bug#49944).  Tweak error message to follow conventions in
+       "(elisp) Signaling Errors".
+
+2021-08-22  Andrea Corallo  <akrl@sdf.org>
+
+       Set a unique ID for eln files on macOS (bug#45934)
+
+       * src/comp.c (Fcomp__compile_ctxt_to_file): Set gcc's -install_name
+       parameter to the real filename.
+
+2021-08-22  Masahiro Nakamura  <tsuucat@icloud.com>
+
+       Set label for NSToolbarItem (bug#50159)
+
+       * src/nsmenu.m (update_frame_tool_bar): Get label text and pass it to 
...
+       ([EmacsToolbar 
addDisplayItemWithImage:idx:tag:labelText:helpText:enabled:]):
+       ... this that sets label for NSToolbarItem.
+       * src/nsterm.h
+       ([EmacsToolbar 
addDisplayItemWithImage:idx:tag:labelText:helpText:enabled:]):
+       Add labelText argument.
+
+2021-08-22  Michael Albinus  <michael.albinus@gmx.de>
+
+       Implement `copy-directory-create-symlink' for remote files
+
+       * lisp/net/tramp-sh.el (tramp-sh-handle-copy-directory):
+       Implement `copy-directory-create-symlink'.  (Bug#10897)
+
+       * test/lisp/net/tramp-tests.el (tramp-test15-copy-directory):
+       Extend test.
+
+2021-08-22  João Távora  <joaotavora@gmail.com>
+
+       Double check completions-group customization variable in Icomplete
+
+       bug#48545
+
+       * lisp/icomplete.el (icomplete--augment): Double check 
completions-group.
+
+2021-08-22  João Távora  <joaotavora@gmail.com>
+
+       Don't mess up grouping in completion-all-sorted-completions
+
+       The default sorting order will mess up the naturally grouped order of
+       the candidates in the table that specified the group-function.
+
+       As seen in xref.el when
+
+          (setq xref-show-definitions-function
+                'xref-show-definitions-completing-read)
+          (setq completions-group t)
+          M-x fido-mode
+
+       Also partially seen with C-x 8 RET (M-x insert-char) with
+
+          (setq read-char-by-name-sort 'code)
+
+       bug#48545
+
+       * lisp/minibuffer.el (completion-all-sorted-completions): Don't
+       use default sort if there's a group-function in the table.
+
+2021-08-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Fix dired switch (that contain quotes and spaces) parsing"
+
+       This reverts commit 04f723dec944eaa7b5e99373840a8bf920ba5fdd.
+
+       The dired switches are documented to not follow shell syntax, but 
instead
+       uses a lisp-in-string-form kind of quoting.
+
+2021-08-22  Colin Woodbury  <colin@fosskers.ca>
+
+       Don't echo empty string in file-name-with-extension
+
+       * lisp/files.el (file-name-with-extension): Avoid echoing a filename
+       string known to be empty (bug#50149).
+
+2021-08-22  Omar Polo  <op@omarpolo.com>
+
+       Avoid using %n in emacsclient
+
+       * lib-src/emacsclient.c (local_sockname): Avoid using %n (bug#50155).
+
+2021-08-22  Michael Albinus  <michael.albinus@gmx.de>
+
+       Some adaptions for Tramp's security key detection.
+
+       * lisp/net/tramp.el (tramp-security-key-timeout-regexp): New defcustom.
+       (tramp-action-show-and-confirm-message): Don't use timeout, check
+       for the timeout message of the ssh command.
+
+2021-08-22  Mattias Engdegård  <mattiase@acm.org>
+
+       Make Qhide declaration non-target-specific
+
+       * src/xfns.c (syms_of_xfns): Move DEFSYM from here...
+       * src/menu.c (syms_of_menu): ... to here.
+       This fixes the NS build after dd7d966eb40b.
+
+2021-08-22  Ergus  <spacibba@aol.com>
+
+       * lisp/mouse.el (context-menu-mode-map): New variable.
+
+       (context-menu--saved-bindings, context-menu--bind-mouse)
+       (context-menu--restore-bindings): Remove.
+       (context-menu-mode): Don't use removed functions.
+
+2021-08-22  Juri Linkov  <juri@linkov.net>
+
+       Don't show menu titles with the text property 'hide' (bug#50067)
+
+       * lisp/mouse.el (context-menu-map): Add menu title "Context Menu"
+       propertized with the text property 'hide'.
+
+       * src/menu.c (x_popup_menu_1): Don't show the title with the non-nil
+       text property 'hide' on GTK and NS.
+
+2021-08-22  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of 'set-keyboard-coding-system'
+
+       * doc/lispref/nonascii.texi (Terminal I/O Encoding):
+       * doc/emacs/mule.texi (Terminal Coding):
+       * lisp/international/mule.el (set-keyboard-coding-system):
+       Document that 'set-keyboard-coding-system' has no effect on modern
+       MS-Windows systems.  (Bug#15289)
+
+2021-08-22  Glenn Morris  <rgm@gnu.org>
+
+       * test/lisp/international/ucs-normalize-tests.el: Save 30m on hydra.
+
+2021-08-22  Stephen Gildea  <stepheng+emacs@gildea.com>
+
+       mh-x-image-url-sane-p: accept "https" URLs
+
+       * lisp/mh-e/mh-xface.el (mh-x-image-url-sane-p): Accept https URLs.
+       * test/lisp/mh-e/mh-xface-tests.el: New file, to test
+       mh-x-image-url-sane-p.
+
+2021-08-21  Glenn Morris  <rgm@gnu.org>
+
+       * test/Makefile.in: Turn off hydra verbose logging for electric-tests.
+
+2021-08-21  Glenn Morris  <rgm@gnu.org>
+
+       * test/lisp/net/tramp-tests.el: Reduce hydra run time by 1 hour.
+
+       It's just too slow to run these after every commit.
+
+2021-08-21  Glenn Morris  <rgm@gnu.org>
+
+       * test/lisp/electric-tests.el: Un-skip c-mode tests on hydra.
+
+2021-08-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix failures in recent files tests
+
+       * test/lisp/files-tests.el (files-tests-buffer-offer-save)
+       (files-tests-save-buffers-kill-emacs--asks-to-save-buffers):
+       `read-event' is called with arguments.
+
+2021-08-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify cl-defstruct doc string and manual entry somewhat
+
+       * doc/misc/cl.texi (Structures): Rename the slot "name" in the
+       examples to "first-name", since we're talking about the names of
+       slots a lot here, and having a slot with the name "name" makes the
+       examples somewhat confusing.
+       * lisp/emacs-lisp/cl-macs.el (cl-defstruct): Clarify certain
+       things about slots (bug#14278).
+
+2021-08-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix perldb doc string
+
+       * lisp/progmodes/gud.el (perldb): Fix doc string (bug#14588).
+
+2021-08-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify dired-jump doc string
+
+       * lisp/dired.el (dired-jump): Make the doc string say what happens
+       in buffers not visiting files (bug#14733).
+
+2021-08-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak the comment-start-skip example in the manual
+
+       * doc/emacs/programs.texi (Options for Comments): Tweak the
+       example regexp for comment-start-skip (bug#15006).
+
+2021-08-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify how to do the `count-words-in-defun' recipe
+
+       * doc/lispintro/emacs-lisp-intro.texi (count-words-in-defun):
+       Clarify the recipe (bug#15069).
+
+2021-08-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make parse-partial-sexp signal an error if TO is smaller than FROM
+
+       * src/syntax.c (Fparse_partial_sexp): Signal an error if TO is
+       smaller than FROM (bug#49944).
+
+2021-08-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention problems with synthetic fonts on macOS
+
+       * etc/PROBLEMS: Mention synthetic fonts (bug#18818).
+
+2021-08-21  Alan Third  <alan@idiocy.org>
+
+       Fix display bug on macOS (bug#50112)
+
+       * src/nsterm.m ([EmacsLayer initWithColorSpace:]): Use the colorspace
+       setter.
+       ([EmacsLayer setColorSpace:]): Sometimes we seem to get null
+       colorspaces, so set a default in this case.
+       ([EmacsLayer getContext]): Check whether there's been a surface or
+       graphics context allocation failure and log it.
+
+2021-08-21  Alan Third  <alan@idiocy.org>
+
+       * configure.ac: Make homebrew check for libgccjit match macports.
+
+2021-08-21  Mattias Engdegård  <mattiase@acm.org>
+
+       Remove default "Select" title from NS popup menus (bug#50067)
+
+       * src/menu.c (x_popup_menu_1): Remove default "Select" title.
+       * src/nsmenu.m (ns_menu_show): Allow title to be absent.
+
+2021-08-21  Mattias Engdegård  <mattiase@acm.org>
+
+       Use overlay arrow to indicate current *xref* selection
+
+       * lisp/progmodes/xref.el (xref--set-arrow): New function.
+       (xref-show-location-at-point, xref-goto-xref)
+       (xref--next-error-function): Call it.
+       (xref--show-common-initialize): Remove arrow.
+
+2021-08-21  Mattias Engdegård  <mattiase@acm.org>
+
+       Add "Find References" to context menu (bug#50067)
+
+       The new entry appears next to "Find Definition" and like it only
+       appears when the context menu was invoked on an identifier.
+
+       * lisp/progmodes/prog-mode.el (prog-context-menu): New menu entry.
+       * lisp/progmodes/xref.el (xref-find-references-at-mouse): New
+       function, analogous to `xref-find-definitions-at-mouse`.
+
+2021-08-21  Mattias Engdegård  <mattiase@acm.org>
+
+       Indicate progress while searching for references in xref
+
+       * lisp/progmodes/xref.el (xref-backend-references): Add messages to
+       show the user that something is happening instead of silently freezing
+       during the frequently long synchronous searches for references.
+
+2021-08-21  Mattias Engdegård  <mattiase@acm.org>
+
+       Re-type the :location slot in `xref-match-item` to `xref-location`
+
+       * lisp/progmodes/xref.el (xref-match-item): Change type for
+       :location from `xref-file-location`, which was likely a mistake,
+       to `xref-location`. This allows `xref-make-match` to take
+       arguments of any subtype of `xref-location` (bug#50067).
+
+2021-08-21  Mattias Engdegård  <mattiase@acm.org>
+
+       Add xref operations to context menu unconditionally
+
+       * lisp/progmodes/prog-mode.el (prog-context-menu):
+       Add xref operations to the context menu even if xref hasn't been
+       loaded yet; the functions involved are autoloaded (bug#50067).
+
+2021-08-21  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: Move a macro to before its first use in a file.
+
+       * lisp/progmodes/cc-defs.el (c-benign-error): Move earlier in the file 
for the
+       benefit of c-tnt-chng-cleanup.
+
+2021-08-21  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of context menus
+
+       * doc/lispref/modes.texi (Major Mode Conventions): Add conventions
+       of setting menu-bar menus and context menus for a major mode.
+       * doc/emacs/frames.texi (Menu Mouse Clicks): Fix description of
+       context menu functionality.
+
+2021-08-21  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve doc string of 'M-.'
+
+       * lisp/progmodes/xref.el (xref-find-definitions): Mention 'M-,' in
+       the doc string.
+
+2021-08-21  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of 'file-preserve-symlinks-on-save'
+
+       * lisp/files.el (file-precious-flag): Mention
+       'file-preserve-symlinks-on-save' in the doc string.
+
+       * doc/lispref/files.texi (Saving Buffers): Move the description of
+       'file-preserve-symlinks-on-save' from here...
+       * doc/emacs/files.texi (Customize Save): ...to here.  Improve
+       wording.
+
+       * etc/NEWS: Fix wording of 'file-preserve-symlinks-on-save' entry.
+
+2021-08-21  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix documentation of 'repeat-mode' changes
+
+       * doc/emacs/basic.texi (Repeating): Fix indexing.  Improve
+       wording.
+
+2021-08-21  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix documentation of recently-added tests for files.el
+
+       * test/lisp/files-tests.el (files-tests--save-some-buffers)
+       (files-tests-save-some-buffers)
+       (files-tests--with-buffer-offer-save)
+       (files-tests-buffer-offer-save): Doc fixes.
+
+2021-08-21  Eli Zaretskii  <eliz@gnu.org>
+
+       * etc/TODO: Entry about markers being non-scalable.  (Bug#49127)
+
+2021-08-21  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Speed up project--read-project-buffer in remote buffers
+
+       * lisp/progmodes/project.el (project-buffers): New generic function.
+       (project--read-project-buffer): Use it here (bug#49264).
+       (project--buffers-to-kill): And here.
+       (project-buffers): Specialized implementation for vc-project.
+
+2021-08-21  Glenn Morris  <rgm@gnu.org>
+
+       * lisp/bindings.el (page-navigation-repeat-map): Fix bootstrap.
+
+2021-08-20  Alan Mackenzie  <acm@muc.de>
+
+       Fix c-tentative-buffer-changes to be nestable in c-save-buffer-state
+
+       * lisp/progmodes/cc-defs.el (c-tentative-buffer-changes)
+       (c-tnt-chng-record-state, c-tnt-chng-cleanup): Enhance such that a
+       buffer-undo-list of t is handled specially, so that a nil isn't consed 
onto
+       it.  Thus garbage collection can't later remove the (nil . t) from the 
end of
+       the buffer-undo-list, causing an infinite loop.
+
+2021-08-20  Davide Masserut  <dm@mssdvd.com>  (tiny change)
+
+       Mark page navigation commands as repeatable
+
+       * doc/emacs/basic.texi (Repeating): Document page navigation
+       repeatability.
+
+       * lisp/bindings.el (page-navigation-repeat-map): Add new map
+       (bug#50137).
+       * lisp/bindings.el (forward-page):
+       (backward-page): Mark as repeatable.
+
+2021-08-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Document how to get rid of completion on `SPC' and `?'
+
+       * doc/emacs/custom.texi (Minibuffer Maps): Mention how to get rid
+       of completion on `SPC' and `?' (bug#16528).
+
+2021-08-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix printing of C-@ in `describe-fontset'
+
+       * lisp/international/mule-diag.el (mule--kbd-at): New function
+       (bug#17836).
+       (print-fontset-element): Use it to get multi-key things correct.
+
+2021-08-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow preserving symlinks with file-precious-flag set
+
+       * doc/lispref/files.texi (Saving Buffers): Document it.
+       * lisp/files.el (file-preserve-symlinks-on-save): New user option
+       (bug#18125).
+       (basic-save-buffer-2): Use it.
+
+2021-08-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix infinite recursion in mode: tex
+
+       * lisp/textmodes/tex-mode.el (tex--redirect-to-submode): Inhibit
+       recursion when called from file-local variables (bug#50126).
+
+2021-08-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix infinite recursion of conf-mode
+
+       * lisp/textmodes/conf-mode.el (conf-mode): Inhibit recursion when
+       called from file-local variables (bug#50126).
+
+2021-08-20  Marco Centurion  <mcenturion@fing.edu.uy>  (tiny change)
+
+       Allow copy-directory to copy the source as a symlink
+
+       * doc/emacs/files.texi (Copying and Naming): Document it.
+
+       * lisp/files.el (copy-directory): Allow copying symbolic links as
+       is (bug#10897).
+       (copy-directory-create-symlink): New user option.
+
+2021-08-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Further tweaks to execute-extended-command
+
+       * lisp/simple.el (execute-extended-command): Move finding the
+       short command to the timer command, too (bug#50042).  This further
+       ensures that post-command-hook is run faster.
+
+2021-08-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove even more waiting from execute-extended-command
+
+       * lisp/simple.el (execute-extended-command): Remove all the
+       waiting from the command and do it all with timers (bug#50042).
+       This ensures that post-command-hook is run immediately also when
+       the command has messaged something.
+
+2021-08-20  Mattias Engdegård  <mattiase@acm.org>
+
+       Use C-mouse-1 for context menu on NS
+
+       The Mac platform convention is to use control-left-click for context
+       menus (as a synonym to right-click).
+
+       * lisp/mouse.el (context-menu--old-bindings): Remove.
+       (context-menu--saved-bindings)
+       (context-menu--bind-mouse, context-menu--reset-bindings): New.
+       (context-menu-mode): Use new functions, with C-mouse-1 as extra
+       binding on NS.
+
+2021-08-20  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix xref {prev,next}-error target buffer match highlighting extent
+
+       * lisp/progmodes/xref.el (xref--next-error-function):
+       Bind `xref--current-item` during the call to `xref--show-location` so
+       that `xref-pulse-momentarily` finds the match extent.
+
+2021-08-20  Mattias Engdegård  <mattiase@acm.org>
+
+       Don't mutate string literal
+
+       * lisp/obsolete/terminal.el (terminal-escape-map): Rewrite loop in a
+       simpler and more robust way.
+
+2021-08-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak a failing custom test
+
+       * test/lisp/custom-tests.el (custom-tests-require-theme): Fix a
+       native-comp-related test failure.
+
+       In this test, we set load-path to nil, and under native-comp some of
+       the tests want to give a warning:
+
+       Warning (comp): Cannot look-up eln file as no source file was
+       found for /tmp/custom-tests-bfdbkW/custom-tests--d.elc
+
+       But we can't load warning.el after setting load-path to nil, so
+       require it first.
+
+2021-08-20  João Távora  <joaotavora@gmail.com>
+
+       Make icomplete-forward-completions O(1) when icomplete-scroll is t
+
+       In particular, this makes the recently added
+       icomplete-vertical-goto-last (bug#49005) be O(n) instead of O(n^2).
+       That used to be almost unbearably slow for large n.
+
+       * lisp/icomplete.el (icomplete-forward-completions):  don't call last
+       unless needed.
+
+2021-08-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove more mentions of the removed `M-o' facemenu binding
+
+       * doc/emacs/text.texi (Fill Commands, Fill Commands): Adjust `M-o'
+       mentions.
+
+       * etc/refcards/refcard.tex (section{Formatting}):
+       * etc/refcards/pt-br-refcard.tex (section{Formatando}):
+       * etc/refcards/fr-refcard.tex (section{Formater}): Remove mention
+       of `M-o'.
+
+2021-08-19  Madhu  <enometh@net.meer>  (tiny change)
+
+       Correctly call completion-in-region in shell.el
+
+       * lisp/shell.el (shell-dynamic-complete-command)
+       (shell-dynamic-complete-environment-variable): Correctly call
+       completion-in-region (bug#50125).
+
+2021-08-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix space at the start of appt mode line element
+
+       * lisp/calendar/appt.el (appt-check): Add space at the end
+       (bug#18164) -- all `global-mode-string' elements should have it
+       there to get an even space distribution.
+
+2021-08-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add ibuffer-saved-filter-groups example to the doc string
+
+       * lisp/ibuf-ext.el (ibuffer-saved-filter-groups): Add an example
+       for this complicated syntax (bug#18694).
+
+2021-08-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix dired switch (that contain quotes and spaces) parsing
+
+       * lisp/files.el (insert-directory): Tokenize shell strings
+       correctly (bug#18875).
+
+2021-08-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix st.el doc string
+
+       * lisp/term/st.el (xterm-st-extra-capabilities): New user option
+       (bug#50119).
+       (terminal-init-st): Use it to avoid a two-second timeout.
+
+2021-08-19  Peter Münster  <pm@a16n.net>
+
+       Add support for history of image tags and completion in the minibuffer
+
+       * lisp/image-dired.el (image-dired-tag-history): New variable holding 
the
+       tag history.
+       (image-dired-tag-files, image-dired-tag-thumbnail, 
image-dired-delete-tag)
+       (image-dired-tag-thumbnail-remove): Use it for the user input.
+
+2021-08-19  Peter Münster  <pm@a16n.net>
+
+       Avoid problems when one tag/file is a substring of another
+
+       * lisp/image-dired.el (image-dired-remove-tag): End of filename is bound
+       by ";" and end of tag is bound by ";" or end of line.
+
+2021-08-19  Peter Münster  <pm@a16n.net>
+
+       New placement of newline characters in image-dired-db-file
+
+       It's more usual to have the newline at the end of the line, instead of 
the
+       beginning. This change avoids missing newline at the end of the file, an
+       empty line at the start and eventually a lot of empty lines when
+       `require-final-newline' is not nil.
+
+       * lisp/image-dired.el (image-dired-write-tags): Insert newline at the 
end
+       of the line, instead of the beginning.
+       (image-dired-remove-tag): Do not delete empty line at end of buffer.
+
+2021-08-19  Peter Münster  <pm@a16n.net>
+
+       Fix deletion of associated image
+
+       * lisp/image-dired.el (image-dired-delete-marked): Treat original images
+       first, because point position is used when there are no marked files.
+
+2021-08-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix inaccuracies in documentation of 'message-truncate-lines'
+
+       * doc/lispref/display.texi (Echo Area Customization):
+       * src/xdisp.c (syms_of_xdisp): Adjust the documentation of
+       message-truncate-lines to changes that fixed bug#46718.
+
+2021-08-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Minor doc fixes in icomplete.el
+
+       * lisp/icomplete.el (icomplete-section): Add :version.
+       (icomplete--augment): Doc fix.
+
+2021-08-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix errors with hscrolling mini-windows under truncate-lines
+
+       * src/xdisp.c (hscroll_window_tree): Disallow hscroll in
+       mini-windows that display echo-area messages.  (Bug#50096)
+
+2021-08-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       stterm doesn't understand all codes that xterm does
+
+       * lisp/term/st.el (xterm-st-extra-capabilities): New user option
+       (bug#50119).
+       (terminal-init-st): Use it to avoid a two-second timeout.
+
+2021-08-19  João Távora  <joaotavora@gmail.com>
+
+       Section by 'group-function' in Icomplete and Fido's vertical modes
+
+       (Bug#48545)
+
+       * lisp/icomplete.el (icomplete--augment): Rewrite from 
icomplete--affixate.
+       (icomplete--render-vertical): Rework.
+       (icomplete--vertical-minibuffer-setup): Separator is hardcoded "\n", no
+       need to set.
+
+2021-08-19  João Távora  <joaotavora@gmail.com>
+
+       Improve fix of bug#49888 on no-pattern flex sorting
+
+       This version is functionally equivalent, but doesn't duplicate any
+       code.  When nothing "flexy" is happening, it works by simply not doing
+       any metadata adjustments, instead of attempting to synthesize a
+       function to mimic the non-flex case.
+
+       * lisp/minibuffer.el (completion--flex-adjust-metadata): Simplify.
+
+2021-08-19  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Fix vc-root-diff broken with Git as well
+
+       * lisp/vc/vc.el (vc-root-diff): Fix similar to 35023214031e1 by
+       avoiding the abbreviated directory name in argument (bug#39452).
+
+2021-08-18  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of 'assoc'
+
+       * doc/lispref/lists.texi (Association Lists):
+       * src/fns.c (Fassoc): Document how TESTFN is called.  (Bug#50110)
+
+2021-08-18  Juri Linkov  <juri@linkov.net>
+
+       Mouse wheel scrolling on the tab bar
+
+       * lisp/tab-bar.el (tab-bar-map): Bind mouse-4/wheel-up/wheel-left
+       to tab-previous and mouse-5/wheel-down/wheel-right to tab-next.
+       Bind S-mouse-4/wheel-up/wheel-left to tab-bar-move-tab-backward
+       and S-mouse-5/wheel-down/wheel-right to tab-bar-move-tab.
+       (tab-bar-move-tab-backward): New command.
+       (tab-bar-move-repeat-map): Use tab-bar-move-tab-backward
+       instead of lambda.
+
+       * src/xterm.c (handle_one_xevent): Remove restriction
+       to allow clicking mouse-4 and mouse-5.
+
+2021-08-18  Juri Linkov  <juri@linkov.net>
+
+       Bind [drag-mouse-1] to tab-bar-mouse-move-tab on tab-bar-map
+
+       * lisp/tab-bar.el (tab-bar-mouse-move-tab): New command.
+       (tab-bar-map): Bind [drag-mouse-1] to tab-bar-mouse-move-tab.
+       (tab-bar-select-tab): Zero or nil arg means the current tab.
+
+       * src/xdisp.c (handle_tab_bar_click): Remove restriction
+       to allow dragging the tab to another tab.
+
+2021-08-18  Juri Linkov  <juri@linkov.net>
+
+       Redesign tab-bar event processing (bug#41342, bug#41343)
+
+       Instead of emitting menu-item keys like [tab-1],
+       emit normal mouse events like [mouse-1] and [down-mouse-3]
+       for all mouse clicks issued on the tab-bar.
+
+       * lisp/mouse.el (mouse-posn-property): Handle 'tab-bar' posn-area.
+
+       * lisp/tab-bar.el (tab--key-to-number): New internal function.
+       (tab-bar-handle-mouse): Use tab key to select/close tab.
+       (tab-bar-mouse-select-tab, tab-bar-mouse-close-tab)
+       (tab-bar-mouse-context-menu): New commands.
+       (tab-bar-map): Bind [down-mouse-1] to tab-bar-mouse-select-tab,
+       [down-mouse-2] to tab-bar-mouse-close-tab,
+       [down-mouse-3] to tab-bar-mouse-context-menu.
+       (tab-bar-keymap-cache): Remove.
+       (tab-bar-make-keymap): Don't use cache.
+       (tab-bar--format-tab): Remove default bindings from menu items.
+       (tab-bar-make-keymap-1): Prepend tab-bar-map.
+
+       * src/keyboard.c (make_lispy_event): Append event->arg to position
+       for Qtab_bar.
+
+       * src/term.c (handle_one_term_event): Simplify to set event arg.
+
+       * src/w32inevt.c (do_mouse_event): Set emacs_ev->arg to the value
+       returned from tty_handle_tab_bar_click.
+
+       * src/w32term.c (w32_handle_tab_bar_click): Return value from
+       handle_tab_bar_click.
+       (w32_read_socket): Set tab_bar_key to value returned from
+       w32_handle_tab_bar_click, and set event arg from it.
+
+       * src/xdisp.c (handle_tab_bar_click): Instead of emitting event,
+       return a list with Qtab_bar and tab caption with text properties
+       that contain Qmenu_item with key and binding.
+       (tty_handle_tab_bar_click): Simplify to return a list of Qtab_bar,
+       key and close_p, instead of emitting event.
+
+       * src/xterm.c (handle_one_xevent): Set tab_bar_key to value
+       returned from handle_tab_bar_click, and set event arg from it.
+
+2021-08-18  Juri Linkov  <juri@linkov.net>
+
+       * lisp/progmodes/xref.el (xref--collect-matches): Widen temporarily.
+
+2021-08-18  Juri Linkov  <juri@linkov.net>
+
+       * lisp/mouse.el: More fixes for context-menu.
+
+       (context-menu-map): Remove menu title "Context Menu" (bug#50067).
+       (context-menu-minor): Reverse sub-menus to display exactly in the same 
order
+       as on the menu bar.
+
+2021-08-18  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of last change.
+
+       * etc/NEWS: Mention the string value of 'auto-composition-mode'.
+
+       * src/composite.c (syms_of_composite) <auto-composition-mode>: Doc
+       fix.
+
+2021-08-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Disable auto compositions on the Linux console only
+
+       * lisp/term/linux.el (terminal-init-linux): Disable auto
+       compositions on "linux" consoles (bug#21363).
+
+       * src/composite.c (inhibit_auto_composition): New function to
+       implement this.
+       (composition_compute_stop_pos, composition_adjust_point)
+       (Ffind_composition_internal): Use it.
+       (syms_of_composite): Document it.
+
+       * src/lisp.h: Export tty_type_name.
+
+       * src/term.c (tty_type_name): Factored out.
+       (Ftty_type): Use it.
+
+2021-08-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add undo-in-region test case for bug#21523
+
+2021-08-18  Eli Zaretskii  <eliz@gnu.org>
+
+       Yet another place inside redisplay_window to prevent quitting
+
+       * src/xdisp.c (handle_single_display_spec): Inhibit quitting
+       around the call to lookup_image.  (Bug#44448)
+
+2021-08-18  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix abort when turning on Hebrew or Arabic input methods
+
+       * src/xdisp.c (face_before_or_after_it_pos): Add the missing
+       initialization of the bidi scan direction.  (Bug#50107)
+
+2021-08-18  Peter Münster  <pm@a16n.net>
+
+       Add menu bindings to new functions in image-dired.el
+
+       * lisp/image-dired.el (image-dired--with-marked): New macro for
+       cycling over marked thumbnails.
+       (image-dired-tag-thumbnail, image-dired-tag-thumbnail-remove): Can
+       handle now also all marked thumbnails.
+       (image-dired-tag-marked-thumbnails): Remove it, because it's
+       obsoleted by `image-dired-tag-thumbnail' now.
+       (image-dired-delete-marked): Use new macro
+       `image-dired--with-marked', and add command to menu (bug#50000).
+
+2021-08-18  pillule  <pillule@riseup.net>
+
+       Fix ediff3 layouts with window-combination-resize non-nil (Bug#49277)
+
+       * lisp/vc/ediff-wind.el (ediff-setup-windows-plain-compare)
+       (ediff-setup-windows-multiframe-compare): Fix three windows
+       layouts produced by ediff3 when 'window-combination-resize'
+       was customized to t and 'even-window-sizes' to nil.
+
+2021-08-18  pillule  <pillule@riseup.net>
+
+       Fix behavior when switch-to-prev-buffer-skip is a function (Bug#49275)
+
+       * lisp/window.el (switch-to-prev-buffer)
+       (switch-to-next-buffer): More correctly handle cases where
+       'switch-to-prev-buffer-skip' is a function.
+
+2021-08-17  Andrea Corallo  <akrl@sdf.org>
+
+       Fix `native-compile-target-directory' effectiveness for async 
compilation.
+
+       * lisp/emacs-lisp/comp.el (comp-run-async-workers): Forward to async
+       workers `native-compile-target-directory'.
+
+2021-08-17  Glenn Morris  <rgm@gnu.org>
+
+       * lisp/mouse.el (context-menu-filter-function): Fix type.
+
+2021-08-17  Eli Zaretskii  <eliz@gnu.org>
+
+       Another fix for quitting while displaying non-selected windows
+
+       * src/xdisp.c (handle_face_prop, extend_face_to_end_of_line):
+       Inhibit quitting around the call to face_at_pos, to prevent
+       leaking wrong value of point when the user quits while we
+       redisplay a non-selected window.  (Bug#44448)
+
+2021-08-17  Glenn Morris  <rgm@gnu.org>
+
+       * test/lisp/electric-tests.el: Skip most c-mode tests on hydra.
+
+2021-08-17  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix TTY display performance degradation due to many markers
+
+       * src/coding.c (encode_coding_object): Don't assume that
+       src_object == dst_object means src_object is the current buffer.
+       Add the missing commentary that explains the arguments.
+       (Bug#49127)
+
+2021-08-17  Michalis V  <mvar.40k@gmail.com>
+
+       Improve `forward-sexp' in *Help* buffers
+
+       * lisp/help-mode.el (help-mode-syntax-table): New variable (bug#39134).
+       (help-make-xrefs): Use it to make picking out symbols in curved
+       quotes work reliably.
+       (help-xref-on-pp): Ditto.
+
+2021-08-17  João Távora  <joaotavora@gmail.com>
+
+       Bind <up> and <down> in icomplete-vertical-mode
+
+       Suggested by Ergus <spacibba@aol.com>
+
+       * lisp/icomplete.el (icomplete-vertical-mode-minibuffer-map): Bind
+       <up> and <down>
+
+2021-08-17  João Távora  <joaotavora@gmail.com>
+           Simon Lang  <simon.lang@outlook.com>
+
+       Jump to first,last completion with M-<, M-> in icomplete-vertical-mode
+
+       (Bug#49005)
+
+
+       * lisp/icomplete.el (icomplete-backward-completions): Return
+       non-nil iff something was stepped.  Adjust docstring.
+       (icomplete-forward-completions): Adjust docstring.
+       (icomplete-vertical-goto-first, icomplete-vertical-goto-last): New 
commands.
+       (icomplete-vertical-mode-minibuffer-map): Bind new commands to M-< and 
M->.
+
+2021-08-17  Juri Linkov  <juri@linkov.net>
+
+       Merge branch 'feature/context-menu'
+
+2021-08-17  Dmitry Gutov  <dgutov@yandex.ru>
+
+       ruby-mode imenu: Support methods with modifiers
+
+       * lisp/progmodes/ruby-mode.el (ruby-imenu-create-index-in-block):
+       Support methods with modifiers (visibility or otherwise)
+       (bug#50079).
+
+2021-08-17  Dmitry Gutov  <dgutov@yandex.ru>
+
+       vc-git-region-history: Fix to call 'diff' more correctly
+
+       * lisp/vc/vc-git.el (vc-git-region-history):
+       Fix to pass a list to the backend 'diff' command (bug#39452).
+
+2021-08-17  João Távora  <joaotavora@gmail.com>
+
+       Make icomplete-vertical-mode take immediate effect (bug#49075)
+
+       * etc/NEWS: Mention change.
+
+       * lisp/icomplete.el (icomplete-vertical-mode):
+       (fido-vertical-mode): Tweak docstring.  Turn on
+       icomplete-mode. and fido-mdoe
+
+2021-08-16  Glenn Morris  <rgm@gnu.org>
+
+       * test/Makefile.in: Verbose logging for electric-tests on hydra.
+
+2021-08-16  Eli Zaretskii  <eliz@gnu.org>
+
+       Plug another hole for longjmp-ing from 'redisplay_window'
+
+       * src/fringe.c (update_window_fringes): Inhibit quitting, so as
+       not to longjmp out of redisplay_window.  (Bug#44448)
+
+2021-08-16  Stephen Berman  <stephen.berman@gmx.net>
+
+       Add Command Modes to Elisp manual menu and add index entries
+
+       * doc/lispref/commands.texi (Command Modes): Add index entries.
+
+       * doc/lispref/elisp.texi (Top): Add entry for the Command Modes
+       node to the detailed node listing.
+
+2021-08-16  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix recent documentation additions
+
+       * doc/lispref/searching.texi (Search and Replace): Document the
+       new functions by @defun.
+
+2021-08-16  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       9664ee182c (origin/emacs-27) C++ Mode: Don't confuse the pointer oper...
+       b3aec9ee48 CC Mode: Fix unstable fontification of doc strings.
+
+       # Conflicts:
+       #       lisp/progmodes/cc-fonts.el
+
+2021-08-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make overlays-in treat zero-length overlays at point-max consistently
+
+       * doc/lispref/display.texi (Finding Overlays): Adjust documentation.
+
+       * src/buffer.c (overlays_in): Treat the end of the buffer and the
+       end of the narrowed-to buffer the same (bug#19422).
+       (Foverlays_in): Adjust doc string.
+
+2021-08-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix cursor movement on the Linux console with certain characters
+
+       * lisp/term/linux.el (terminal-init-linux): Switch off
+       auto-compositions, because they confuse cursor movement on the
+       Linux console (bug#21363).
+
+2021-08-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Minor clarification for define-minor-mode :variable
+
+       * lisp/emacs-lisp/easy-mmode.el (define-minor-mode):
+       * doc/lispref/modes.texi (Defining Minor Modes): Clarify what the
+       setter function should do (bug#14875).
+
+2021-08-16  Clément Pit-Claudel  <clement.pitclaudel@live.com>
+
+       Remove prettification for \par in tex-mode
+
+       * lisp/textmodes/tex-mode.el (tex--prettify-symbols-alist): Remove
+       prettified version of `\par'.  Many fonts don't display anything for
+       the character it was mapped to (#x2029 PARAGRAPH SEPARATOR), so
+       enabling prettification makes every `\par' disappear (bug#50073).
+
+2021-08-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add new functions to replace strings/regexp in a region
+
+       * doc/lispref/searching.texi (Search and Replace): Document them.
+       * lisp/subr.el (replace-string-in-region)
+       (replace-regexp-in-region): New functions.
+
+       * lisp/emacs-lisp/shortdoc.el (regexp, buffer): Mention them.
+
+2021-08-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't remove `fontified' in nxml--buffer-substring-filter
+
+       * lisp/nxml/nxml-mode.el (nxml--buffer-substring-filter): Removing
+       `fontified' is probably unnecessary (bug#50061).
+
+2021-08-16  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Fix regressions in the last change
+
+       * lisp/vc/vc-git.el (vc-git-register):
+       Use file names verbatim with 'git update-index', as it only accepts
+       file names, not pathspecs (bug#39452).
+
+       * lisp/vc/vc.el (vc-print-root-log):
+       Expand ROOTDIR, so that vc-git-print-log doesn't receive an
+       abbreviated name.  Literal pathspecs don't work with those.
+
+2021-08-15  Alan Mackenzie  <acm@muc.de>
+
+       C++ Mode: Don't confuse the pointer operator -> with the type 
indicating ->
+
+       This fixes bug #47468.
+
+       * lisp/progmodes/cc-engine.el (c-looking-at-inexpr-block): While 
searching
+       backwards for "->" which is a type indicating operator, disallow also 
commas.
+
+2021-08-15  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: Fix unstable fontification of doc strings.
+
+       Also optimize a loop over several line doc-comments.
+
+       * lisp/progmodes/cc-fonts.el (c-font-lock-doc-comments): New variable
+       comment-mid, used as the starting point for applying c-doc-face-name in 
a
+       line comments.  In block comments, apply this face not from 
`comment-beg' but
+       from `region-beg', no earlier than the start of the fontification 
region.
+
+2021-08-15  Juri Linkov  <juri@linkov.net>
+
+       Use map-keymap in context-menu-global, context-menu-local, 
context-menu-minor
+
+2021-08-15  Juri Linkov  <juri@linkov.net>
+
+       * lisp/simple.el (shift-select-mode): Add new choice 'permanent' 
(bug#50038).
+
+       (handle-shift-selection): Handle new choice 'permanent'.
+
+2021-08-15  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el (tab-bar-new-button-show): Make variable obsolete.
+
+2021-08-15  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/nxml/nxml-mode.el (nxml-mode): Use add-function
+
+       This avoids calling the internal function `buffer-substring--filter`
+       from `nxml.el`.
+
+       (nxml--buffer-substring-filter): Adjust accordingly.
+
+2021-08-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Filter out rng-state elements in nxml-mode buffers from the kill ring
+
+       * lisp/nxml/nxml-mode.el (nxml--buffer-substring-filter): Filter
+       out `rng-state' objects (bug#50061).
+       (nxml-mode): Set `filter-buffer-substring-function'.
+
+2021-08-15  João Távora  <joaotavora@gmail.com>
+
+       Sort by recency in flex completion style when no flexy stuff happening
+
+       (Bug#49888)
+
+       * lisp/minibuffer.el (completion--flex-adjust-metadata): Fall back
+       to usual alphanumeric, length, recency strategy if no minibuffer
+       input.  There is still a bug indicated by the nearby FIXMEs,
+       though.
+
+2021-08-15  Augusto Stoffel  <arstoffel@gmail.com>
+
+       Allow evaluating Python code across machines
+
+       * lisp/progmodes/python.el (python-shell-send-string): Ensure that
+       the temporary file is created in the host running the Python
+       process (bug#50057).
+
+2021-08-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Run execute-extended-command key binding suggestion from a timer
+
+       * lisp/simple.el (execute-extended-command): Run the key binding
+       suggestion from a timer instead of in the program flow -- this
+       allows `post-command-hook' to be executed immediately (bug#50042).
+
+2021-08-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make Emacs compile with musl instead of glibc
+
+       * src/alloc.c: musl doesn't have malloc_info (bug#50058).
+
+2021-08-15  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix unwarranted point movement after C-g
+
+       When the same buffer is displayed in more than one window,
+       redisplay temporarily moves point to the window-point when it
+       works on non-selected windows.  If we allow C-g to quit out of
+       redisplay_window in this situation, point will appear to have
+       moved to the window-point of that non-selected window, which is
+       unwarranted.  These changes prevent quitting in strategic places,
+       so that we never quit out of redisplay_window.
+       * src/xdisp.c (run_window_scroll_functions):
+       Prevent quitting while running window-scroll-functions, so that we
+       don't quit out of redisplay_window with temporarily moved point.
+       (redisplay_window): While redisplaying the mode line, prevent
+       quitting, to avoid exiting while point is temporarily moved.
+       (decode_mode_spec): Use safe_call1 instead of call1, to trap any
+       errors instead of letting them throw out of redisplay.  (Bug#44448)
+
+2021-08-15  Masahiro Nakamura  <tsuucat@icloud.com>
+
+       Mark up commands in shortdoc.el for modes
+
+       * lisp/emacs-lisp/shortdoc.el: Add command mode tagging
+       (bug#50064).
+
+2021-08-15  João Távora  <joaotavora@gmail.com>
+
+       Fix bug#50063 when using icomplete-fido-kill with C-x p p
+
+       C-x p p utilizes a completion table "category" which is 'project-file'
+       icomplete-fido-kill only functioned for 'buffer' and 'file', and
+       failed with a non-informative message when something else was used.
+
+       * lisp/icomplete.el (icomplete-fido-kill): Support 'project-file'
+       class.  Use cl-case, instead of pcase.
+
+2021-08-15  Wolfgang Scherer  <wolfgang.scherer@gmx.de>
+
+       Fix vc-git-state for filenames with wildcards
+
+       * lisp/vc/vc-git.el: (vc-git--literal-pathspec-inner),
+       (vc-git--literal-pathspec), (vc-git--literal-pathspecs) new functions
+       to add ":(literal)" pathspec magic (bug#39452).
+
+       (vc-git-registered), (vc-git-state), (vc-git-dir-status-goto-stage),
+       (vc-git-register), (vc-git-unregister), (vc-git-checkin),
+       (vc-git-find-revision), (vc-git-checkout), (vc-git-revert),
+       (vc-git-conflicted-files), (vc-git-print-log), (vc-git-diff),
+       (vc-git-previous-revision), (vc-git-next-revision),
+       (vc-git-delete-file), (vc-git-rename-file) functions
+       vc-git--literal-pathspec, vc-git--literal-pathspecs applied.
+
+2021-08-15  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Revert "Bind the GIT_LITERAL_PATHSPECS environment variable"
+
+       This reverts commit a2d0ff26005c5c10ffe0d84bd8b458a06828be82.
+
+       It was found to break a certain use case, and we decided to go with
+       the other solution (bug#39452).
+
+2021-08-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mark auto-revert-test02-auto-revert-deleted-file as unstable
+
+       * test/lisp/autorevert-tests.el
+       (auto-revert-test02-auto-revert-deleted-file): This tests fails
+       about 30% of the time for me.
+
+2021-08-14  Eli Zaretskii  <eliz@gnu.org>
+
+       * src/w32.c (_sys_read_ahead): Pacify a silly compiler warning.
+
+2021-08-14  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/easymenu.el (easy-menu-do-define): Fix bug#50051
+
+       This corrects the quite confused conversion to closure done in
+       commit a070bd1c8b5213ad469d41dd80d392f924644aed.
+
+2021-08-14  Alan Mackenzie  <acm@muc.de>
+
+       * lisp/progmodes/cc-engine.el (c-ml-string-in-end-delim): Rewrite 
function
+
+2021-08-14  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix 'random' on MS-Windows when integers are wider than 30 bits
+
+       * src/w32.c (random): Provide more random bits for MS-Windows
+       builds with EMACS_INT that is wider than 32 bits.  (Bug#32605)
+
+2021-08-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a test for netrc folding parsing (bug#25769)
+
+2021-08-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Filter out -L foo labels in diff-hunk-file-names
+
+       * lisp/vc/diff-mode.el (diff-hunk-file-names): Filter out "-L foo"
+       labels (bug#10160).
+
+2021-08-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Add macro `seq-setq`."
+
+       This reverts commit a8a3fd8f8e27089ac46bf98e534529ff03f679a5.
+
+       The same patch was applied twice.  Remove the second instance.
+
+2021-08-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make lm-crack-address less strict
+
+       * lisp/emacs-lisp/lisp-mnt.el (lm-crack-address): Use
+       mail-header-parse-address-lax (bug#50049).
+
+2021-08-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add new functions for lax mail address splitting
+
+       * lisp/emacs-lisp/subr-x.el (string-clean-whitespace): Autoload.
+       * lisp/mail/mail-parse.el (mail-header-parse-addresses-lax)
+       (mail-header-parse-address-lax): New functions.
+
+2021-08-14  Earl Hyatt  <okamsn@protonmail.com>
+
+       Add macro `seq-setq`.
+
+       * doc/lispref/sequences.texi (seq-setq): Document this macro.
+
+       * test/lisp/emacs-lisp/seq-tests.el (test-seq-setq):
+       Test this macro (bug#50053).
+
+2021-08-14  Earl Hyatt  <okamsn@protonmail.com>
+
+       Add macro `seq-setq`.
+
+       * doc/lispref/sequences.texi (seq-setq): Document this macro.
+
+       * lisp/emacs-lisp/seq.el (seq-setq): New macro.
+
+       * test/lisp/emacs-lisp/seq-tests.el (test-seq-setq):
+       Test this macro (bug#50053).
+
+2021-08-14  Yikai Zhao  <i@blahgeek.com>  (tiny change)
+
+       Fix memory-report counting of vector/hash table sizes
+
+       * lisp/emacs-lisp/memory-report.el (memory-report--object-size-1):
+       Count element values in vectors and hash tables.
+
+2021-08-14  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Fix merging of ambiguous nil maps
+
+       * lisp/emacs-lisp/map.el: Bump version to 3.1.
+       (map--merge): New merging subroutine that uses a hash table in place
+       of lists, for both efficiency and avoiding ambiguities (bug#49848).
+       (map-merge): Rewrite in terms of map--merge.
+       (map-merge-with): Ditto.  This ensures that FUNCTION is called
+       whenever two keys are merged, even if they are not eql (which could
+       happen until now).  It also makes map-merge-with consistent with
+       map-merge, thus achieving greater overall predictability.
+       * etc/NEWS: Announce this weakening of guarantees.
+       * test/lisp/emacs-lisp/map-tests.el (test-map-merge)
+       (test-map-merge-with): Don't depend on specific orderings.  Test
+       that nil is correctly merged into a plist.
+
+2021-08-14  Mattias Engdegård  <mattiase@acm.org>
+
+       Add font-lock-doc-markup-face (bug#50041)
+
+       This face is intended for mark-up syntax and constructs inside text
+       using font-lock-doc-face; ie, documentation comments and strings in
+       programming modes.
+
+       * lisp/font-lock.el (font-lock-doc-markup-face): New face.
+       * lisp/cus-theme.el (custom-theme--listed-faces): Add it to the list.
+       * doc/lispref/modes.texi (Faces for Font Lock): Document it.
+       * etc/NEWS: Mention it.
+
+2021-08-13  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: Fix a bug in yesterday's patch
+
+       * lisp/progmodes/cc-mode.el (c-before-change-check-unbalanced-strings): 
Check
+       the language has multi-line strings before calling
+       c-ml-string-opener-at-or-around-point.
+
+2021-08-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make `debug' reset `inhibit-read-only' while running
+
+       * lisp/emacs-lisp/debug.el (debug): Bind `inhibit-read-only' to
+       nil in case we're in a context that has bound it to t (bug#26947).
+
+2021-08-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Adjust previous diff-changed-unspecified change
+
+       * lisp/vc/diff-mode.el (diff-changed-unspecified): Adjust the
+       definition to Emacs 28 (bug#26969).
+
+2021-08-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add new face diff-changed-unspecified
+
+       * lisp/vc/diff-mode.el (diff-changed-unspecified): New face.
+       (diff-font-lock-keywords): Use it (bug#26969).
+
+2021-08-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       permanently-enabled-local-variables doc string clarification
+
+       * lisp/files.el (permanently-enabled-local-variables): Clarify
+       what kind of local variables this refers to.
+
+2021-08-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make info-look search harder for the Python info file
+
+       * lisp/info-look.el (python-mode): Try harder to find the correct
+       info file (bug#31405).
+
+2021-08-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix problem where an error would change standard-output
+
+       * src/keyboard.c (cmd_error): Don't set
+       standard-output/standard-input (bug#30529).  Instead bind them
+       temporarily while handling the error.
+
+2021-08-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Unknown line endings in filepos-to-bufferpos/bufferpos-to-linepos
+
+       * lisp/international/mule-util.el (filepos-to-bufferpos): Give
+       better errors on `exact' with unknown line endings, and guess at
+       Unix if `approximate' (bug#36573).
+       (bufferpos-to-filepos): Ditto.
+
+2021-08-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove :group from defcustoms in image-dired.el
+
+       * lisp/image-dired.el: Remove :group from the defcustoms throughout.
+
+2021-08-13  Peter Münster  <pm@a16n.net>
+
+       Don't disable transient mark mode when changing image faces
+
+       * lisp/image-dired.el (image-dired-thumb-update-marks): Keep the
+       mark state when changing faces. (bug#49999).
+
+2021-08-13  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el (tab-bar-history-buttons-show): Remove defcustom.
+
+       (tab-bar-format-history): Don't use this recently added variable
+       because now it's possible to customize the option 'tab-bar-format'
+       to remove 'tab-bar-format-history' from it that gives the same result.
+
+2021-08-13  Juri Linkov  <juri@linkov.net>
+
+       Add save-some-buffers-root to save-some-buffers-default-predicate 
(bug#46374)
+
+       * lisp/files.el (save-some-buffers-default-predicate): Add choice
+       'save-some-buffers-root'.
+       (save-some-buffers-root): New predicate function.
+       (save-some-buffers): Check if 'pred' returns a lexically-bound lambda,
+       then use it as 'pred'.
+
+       Thanks to Tino Calancha <tino.calancha@gmail.com>
+
+2021-08-12  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: Enhance C++ Mode raw strings to multi-line strings for any 
language
+
+       * lisp/progmodes/cc-defs.el (cadar, caddr, cdddr): Add defsubsts for 
these for
+       when they are missing from the host Emacs.
+       (c-point): Add new `position' 'boll "beginning of logical line".
+       (c-clear-char-properties): Return the position of the lowest removed
+       property.
+
+       * lisp/progmodes/cc-engine.el (c-full-pp-to-literal): Fix for rare case 
where
+       LIMIT < START in parse-partial-sexp.
+       (c-old-beg-rs, c-old-end-rs, c-raw-string-end-delim-disrupted)
+       (c-raw-string-pos, c-raw-string-in-end-delim, c-depropertize-raw-string)
+       (c-depropertize-raw-strings-in-region, 
c-before-change-check-raw-strings)
+       (c-propertize-raw-string-id, c-propertize-raw-string-opener): Old 
functions
+       and variables removed or renamed "raw" -> "ml" and adapted.
+       (c-old-beg-ml, c-old-1-beg-ml, c-old-end-ml, c-beg-pos, c-end-pos)
+       (c-ml-string-end-delim-disrupted, c-depropertize-ml-string-delims)
+       (c-ml-string-delims-around-point,c-position-wrt-ml-delims)
+       (c-before-change-check-ml-strings, c-after-change-unmark-ml-strings)
+       (c-maybe-re-mark-ml-string, c-propertize-ml-string-id)
+       (c-propertize-ml-string-opener, c-depropertize-ml-string)
+       (c-depropertize-ml-strings-in-region): New functions and variables 
adapted and
+       possibly renamed from "raw" -> "ml".
+       (c-ml-string-make-closer-re, c-ml-string-make-opener-re)
+       (c-c++-make-ml-string-closer-re, c-c++-make-ml-string-opener-re)
+       (c-get-ml-closer, c-ml-string-opener-around-point)
+       (c-ml-string-opener-intersects-region, 
c-ml-string-opener-at-or-around-point)
+       (c-ml-string-back-to-neutral, c-ml-string-in-end-delim, 
c-neutralize-pos)
+       (c-neutralized-prop): New functions and variables.
+
+       * lisp/progmodes/cc-fonts.el (c-basic-matchers-before): Replace
+       c-font-lock-raw-strings with c-font-lock-ml-strings.
+       (c-font-lock-ml-strings): New function taking the place of the old
+       c-font-lock-ml-strings.
+
+       * lisp/progmodes/cc-langs.el (c-get-state-before-change-functions): Move
+       c-depropertize-CPP to the second item of the C++ entry, and replace
+       c-before-change-check-raw-strings by c-before-change-check-ml-strings.  
Add a
+       new entry for Pike Mode.
+       (c-before-font-lock-functions): (Replace 
c-after-change-unmark-raw-strings by
+       c-after-change-unmark-ml-strings in the C++ entry, and add a new entry 
for
+       Pike Mode.
+       (c-ml-string-backslash-escapes, c-ml-string-non-punc-skip-chars)
+       (c-ml-string-opener-re, c-ml-string-max-opener-len, 
c-ml-string-any-closer-re)
+       (c-ml-string-max-closer-len, c-ml-string-max-closer-len-no-leader)
+       (c-ml-string-back-closer-re, c-make-ml-string-closer-re-function)
+       (c-make-ml-string-opener-re-function, c-ml-string-cpp-or-opener-re)
+       (c-cpp-or-ml-match-offset): New c-lang-defconsts and c-land-defvars.
+       (c-multiline-string-start-char): Remove the Pike Mode setting.
+
+       * lisp/progmodes/cc-mode.el (c-depropertize-CPP): Test for general ml 
strings
+       rather than C++ raw strings.
+       (c-unescaped-nls-in-string-p): Handle languages with ml strings.
+       (c-clear-string-fences): Fix bug with wrong parenthesisation.
+       (c-before-change-check-unbalanced-strings)
+       (c-after-change-mark-abnormal-strings, 
c-after-change-escape-NL-in-string):
+       Adapt for multi-line strings.
+
+2021-08-12  Michael Albinus  <michael.albinus@gmx.de>
+
+       Improve connection type `pipe' for remote processes
+
+       * doc/misc/tramp.texi (Remote processes): New subsection "Remote
+       process connection type".
+
+       * lisp/net/tramp-adb.el (tramp-adb-handle-make-process):
+       Use `tramp-process-connection-type' as default connection type.
+       Improve check for `:connection-type'.
+
+       * lisp/net/tramp-sh.el (tramp-sh-handle-make-process):
+       Use `tramp-process-connection-type' as default connection type.
+       Improve check for `:connection-type'.  Send "stty -icrnl" when
+       connection type is a pipe.
+
+       * lisp/net/tramp.el (tramp-process-connection-type): Allow all
+       possible values.
+       (tramp-handle-make-process): Use `tramp-process-connection-type'
+       as default connection type.  Improve check for `:connection-type'.
+
+       * test/lisp/net/tramp-tests.el (tramp-test30-make-process): Extend test.
+
+2021-08-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/lisp-mnt.el (lm-crack-address): Handle multi-addresses
+
+       (lm-authors, lm-maintainers): Adjust accordingly.
+
+2021-08-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make info-look try to use more recent Python manual
+
+       * lisp/info-look.el: Use the Debian-installed python3.9 manual if
+       it exists (bug#31405).
+
+2021-08-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Further tweak minibuffer-inactive-mode doc string
+
+       * lisp/minibuffer.el (minibuffer-inactive-mode): Mention
+       `minibuffer-exit-hook' (bug#13641).
+
+2021-08-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve minibuffer-inactive-mode documentation
+
+       * lisp/minibuffer.el (minibuffer-inactive-mode): Clarify when it's
+       used (bug#13641).
+
+2021-08-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention url-handler-mode in the Emacs manual
+
+       * doc/emacs/misc.texi (Browse-URL): Mention url-handler-mode
+       (bug#30389).
+
+       * lisp/url/url-handlers.el (url-handler-mode): Improve doc string.
+
+2021-08-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/pcase.el (pcase-setq): Align its semantics with 
`pcase-let`
+
+       * test/lisp/emacs-lisp/pcase-tests.el (pcase-tests-setq): Rename from
+       pcase-setq and adjust accordingly.
+
+2021-08-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add support for Python mode in info-lookup-symbol
+
+       * lisp/info-look.el (:mode): Add support for Python mode
+       (bug#31405).
+
+2021-08-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify smie-indent-forward-token doc string
+
+       * lisp/emacs-lisp/smie.el (smie-indent-forward-token): Doc string
+       clarification (bug#31948).
+
+2021-08-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Change the `region' face in the Wombat theme
+
+       * etc/themes/wombat-theme.el (class): Don't use a foreground in
+       the `region' face because it obscures syntax highlighting (bug#32143).
+
+2021-08-12  Omar Polo  <op@omarpolo.com>
+
+       Mention `find-ignore-file' in the vc.el commentary
+
+       * lisp/vc/vc.el: Update documentation in the comments about
+       `find-ignore-file' (bug#50013).
+
+2021-08-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add XLFD font parsing tests
+
+       * test/src/font-tests.el (font-parse-xlfd-test): Add some tests
+       for XLFD testing (bug#35816).
+
+2021-08-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/cl-macs.el (fixnum, bignum): Fix type definitions
+
+2021-08-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix bytecomp container test case
+
+       * lisp/startup.el (normal-top-level): Make startup more robust --
+       we may not be allowed to create any directories when running under
+       test mode (bug#48350).
+
+2021-08-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/obsolete/cl.el (labels): Don't quote lambda
+
+       (flet): Don't need `fboundp` any more before calling `symbol-function`.
+
+2021-08-11  Earl Hyatt  <okamsn@protonmail.com>
+
+       Add a `pcase-setq' macro
+
+       * doc/lispref/control.texi (Destructuring with pcase Patterns):
+       Document this macro.
+
+       * lisp/emacs-lisp/pcase.el (pcase-setq): New macro.  This macro is
+       the 'setq' equivalent of 'pcase-let'.
+
+       * test/lisp/emacs-lisp/pcase-tests.el (pcase-setq): Test this new
+       macro. (bug#49809).
+
+2021-08-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow using a single anonymous face in enriced-mode
+
+       * lisp/format.el (format-annotate-single-property-change): Allow
+       using a single anonymous face (bug#33682).
+
+2021-08-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow using XLFD font names with dashes in the family name
+
+       * src/font.c (font_parse_xlfd_1): Rename from font_parse_xlfd to
+       allow calling twice from a wrapper (bug#35816).
+       (font_parse_xlfd): Wrapper function -- first try to parse in the
+       normal way, and then try to guess that the hyphenated bits are in
+       the family name.
+
+2021-08-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow `tex-buffer' to work on buffers not visiting files
+
+       * lisp/textmodes/tex-mode.el (tex-region): Make `tex-buffer' work
+       again on unsaved files (bug#34082).
+
+2021-08-11  Stephen Berman  <stephen.berman@gmx.net>
+
+       Fix URL entry in ffap after previous change
+
+       * lisp/ffap.el (ffap-read-file-or-url): Make URL entry actually
+       work again (bug#50011).
+
+2021-08-11  Peter Münster  <pm@a16n.net>
+
+       Add new image-dired commands
+
+       * lisp/image-dired.el (image-dired-delete-marked): Factored out
+       (bug#50000).
+       (image-dired-display-thumbs): From here.
+       (image-dired-tag-marked-thumbnails): New command.
+       (image-dired-delete-marked): Ditto.
+
+2021-08-11  Michael Albinus  <michael.albinus@gmx.de>
+
+       Replace some `string-match-p' calls in Tramp
+
+       * lisp/net/tramp.el (tramp-debug-message, tramp-set-completion-function)
+       (tramp-get-completion-methods, tramp-get-completion-user-host):
+       * lisp/net/tramp-adb.el (tramp-adb-handle-make-process):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-make-process)
+       (tramp-open-connection-setup-interactive-shell)
+       (tramp-convert-file-attributes): Use `string-prefix-p'.
+
+       * lisp/net/tramp.el (tramp-dissect-file-name)
+       (tramp-progress-reporter-update, tramp-handle-insert-directory):
+       * lisp/net/tramp-cache.el (tramp-get-hash-table)
+       (tramp-flush-directory-properties):
+       * lisp/net/tramp-cmds.el (tramp-append-tramp-buffers):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-insert-directory)
+       (tramp-call-local-coding-command, tramp-get-inline-coding):
+       * lisp/net/tramp-smb.el (tramp-smb-handle-file-attributes)
+       (tramp-smb-handle-file-name-all-completions)
+       (tramp-smb-handle-file-writable-p)
+       (tramp-smb-handle-insert-directory)
+       (tramp-smb-handle-start-file-process, )
+       (tramp-smb-read-file-entry): Use `tramp-compat-string-search'.
+
+2021-08-11  Rajeev Narang  <rajeev+jnk@sivalik.com>
+
+       Make icalendar parse multi-line items correctly
+
+       * lisp/calendar/icalendar.el (icalendar--parse-summary-and-rest):
+       Parse multi-line items correctly (bug#37887).
+
+2021-08-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix icalendar-import-file prompt
+
+       * lisp/calendar/icalendar.el (icalendar-import-file): Fix prompt.
+
+2021-08-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make gnus-icalendar-event-from-ical more robust
+
+       * lisp/gnus/gnus-icalendar.el (gnus-icalendar-event-from-ical):
+       Don't bug out on nil UIDs.
+
+2021-08-11  Peter Oliver  <git@mavit.org.uk>
+
+       Drop redundant keywords in .desktop files.
+
+       The Freedesktop.org Desktop Entry spec says, “The values [of
+       Keywords]… should not be redundant with the values of Name or
+       GenericName”.
+
+       * etc/emacs.desktop, etc/emacsclient.desktop (Keywords): Remove
+       keywords that are duplicated from the GenericName field.
+
+2021-08-11  Peter Oliver  <git@mavit.org.uk>
+
+       Hint that emacsclient.desktop should match a search for “emacsclient”
+
+       This is necessary to get the Gnome desktop to show “Emacs (Client)”
+       when the user searches for “emacsclient”.
+
+       * etc/emacsclient.desktop (Keywords):
+       * etc/emacsclient-mail.desktop (Keywords): Add
+       “emacsclient”.
+
+2021-08-11  Peter Oliver  <git@mavit.org.uk>
+
+       Valid quoting in .desktop files
+
+       * etc/emacsclient.desktop, etc/emacsclient-mail.desktop (Exec): Quote
+       according to the rules in the Freedesktop.org Desktop Entry
+       Specification.
+
+2021-08-11  Peter Münster  <pm@a16n.net>
+
+       Mark marked images in Image-Dired mode
+
+       * lisp/image-dired.el (image-dired-thumb-update-marks): New
+       function that makes the marks visible in the thumbnail buffer
+       (bug#49988).
+       (image-dired-thumb-margin, image-dired-thumb-mark-color): New user
+       options.
+
+2021-08-11  Peter Münster  <pm@a16n.net>
+
+       Let image-dired-mouse-toggle-mark act on active region
+
+       * lisp/image-dired.el (image-dired-mouse-toggle-mark): When region is
+       active, then toggle marks of all images within (bug#49987).
+       (image-dired-mouse-toggle-mark-1): Separated out into function.
+
+2021-08-11  Juri Linkov  <juri@linkov.net>
+
+       * lisp/replace.el (perform-replace): Use 'remove-function' (bug#49963).
+
+       Don't let-bind the value of 'isearch-filter-predicate' to protect
+       from changing the global value, since with a buffer-local value
+       it still changes the global value.  So after using 'add-function' on the
+       global value of 'isearch-filter-predicate', call 'remove-function' to 
remove
+       'region-filter' from the global value in 'unwind-protect'.
+
+2021-08-10  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Use ### for outline headings in shell-script-mode
+
+       * lisp/progmodes/sh-script.el (sh-mode): Use ### for outline headings.
+       This aligns it more with emacs-lisp-mode headings.
+
+2021-08-10  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add support for outlining in shell-script-mode
+
+       * lisp/progmodes/sh-script.el (sh-mode): Set outline-regexp (bug#49346).
+
+2021-08-10  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add new user option `gnus-topic-prepare-topic'
+
+       * doc/misc/gnus.texi (Topic Variables): Document it.
+       * lisp/gnus/gnus-topic.el (gnus-topic-prepare-topic): New user option.
+       (gnus-topic-prepare-topic): Use it.
+
+2021-08-10  Mattias Engdegård  <mattiase@acm.org>
+
+       More robust auto-detect of grep-highlight-matches (bug#49978)
+
+       * lisp/progmodes/grep.el (grep-compute-defaults):
+       Don't require "grep --help" to finish with exit status 0 (BSD grep
+       does not) and check the output in a slightly more robust way.
+
+2021-08-10  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a new command `revert-buffer-quick'
+
+       * doc/emacs/files.texi (Reverting): Document it.
+       * lisp/bindings.el (ctl-x-x-map): Bind `C-x x g' to
+       `revert-buffer-quick' instead.
+
+       * lisp/files.el (revert-buffer-quick-short-answers): New user option.
+       (revert-buffer-quick): New command (bug#49869).
+
+2021-08-10  Benjamin Riefenstahl  <b.riefenstahl@turtle-trading.net>
+
+       Fix nnrss-get-namespace-prefix (bug#34685)
+
+       * lisp/gnus/nnrss.el (nnrss-get-namespace-prefix): Use the car of
+       parameter el to match what dom-search expects.
+       * test/lisp/gnus/nnrss-tests.el (test-nnrss-xml): Adjust to what
+       xml-parse-region produces (bug#34685).
+
+2021-08-10  Mattias Engdegård  <mattiase@acm.org>
+
+       Tramp string-search and string-replace compatibility functions
+
+       Add a `string-search` compatibility function for use in Tramp with
+       Emacs version prior to 28, and fix the existing `string-replace`
+       compatibility function so that it uses the right semantics.
+
+       * lisp/net/tramp-compat.el (tramp-compat-string-replace):
+       Use case-sensitive matching and literal replacement.
+       (tramp-compat-string-search): New function.
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-handle-file-name-all-completions):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-file-name-all-completions)
+       (tramp-do-copy-or-rename-file-out-of-band)
+       (tramp-sh-handle-make-process, tramp-sh-handle-process-file):
+       * lisp/net/tramp.el (tramp-handle-make-process):
+       Use `tramp-compat-string-search` instead of `string-match-p`.
+
+2021-08-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/cl-generic.el: Try and fix bug#49866
+
+       (cl-generic-generalizers): Remember the specializers that match
+       a given value.
+       (cl--generic-eql-generalizer): Adjust accordingly.
+
+       * test/lisp/emacs-lisp/cl-generic-tests.el (cl-generic-test-01-eql):
+       Add corresponding test.
+
+2021-08-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/package.el (package-buffer-info): Fix typo
+
+2021-08-09  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/package.el (package-buffer-info): Use lm-maintainers
+
+       Avoid the now obsolete `lm-maintainer`.
+
+2021-08-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make ffap-read-file-or-url put point at the correct place for URLs
+
+       * lisp/ffap.el (ffap-read-file-or-url): Put point at the end of
+       URLs (bug#44822).
+       (ffap--url-file-handler): Remove hack for default dirs.
+
+2021-08-09  dickmao  <none>
+
+       Forestall "Selected deleted buffer" in url-http-generic-filter
+
+       * lisp/url/url-http.el (url-http-generic-filter): Check that
+       corresponding buffer is still live before using it (bug#49928).
+
+2021-08-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make xterm-set-window-title more robust
+
+       * lisp/term/xterm.el (xterm-set-window-title): Don't do anything
+       on graphic displays (bug#49932).
+
+2021-08-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix tmm-get-keymap under native-compile
+
+       * lisp/tmm.el (tmm-get-keymap): Make this work under
+       natively-compiled Emacsen (and with lexical binding, too) (bug#49953).
+
+2021-08-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Further fixes for package-quickstart-refresh printing
+
+       * lisp/emacs-lisp/package.el (package-quickstart-refresh): Really
+       ensure that the structures aren't shortened (bug#49924).
+
+2021-08-09  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix last commit of tramp.el
+
+2021-08-09  Grégoire Jadi  <gjadi@omecha.info>
+
+       Fix freeze on OpenBSD when reading the SECONDARY selection
+
+       * configure.ac (NSIG_MINIMUM): OpenBSD doesn't have a broken SIGIO
+       any more (bug#29170).  Backport fix from the current OpenBSD port
+       tree.
+
+2021-08-09  Benjamin Riefenstahl  <b.riefenstahl@turtle-trading.net>
+
+       Add test for nnrss
+
+       * test/lisp/gnus/nnrss-tests.el (test-nnrss-xml): New test (bug#34685).
+
+2021-08-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a new test for dom-search
+
+2021-08-09  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix variable binding in calendar (bug#49945)
+
+       * lisp/calendar/cal-tex.el (cal-tex-week-hours, cal-tex-daily-page):
+       Use `let*` instead of `let`.
+
+2021-08-09  Mattias Engdegård  <mattiase@acm.org>
+
+       Use string-search instead of string-match[-p]
+
+       `string-search` is easier to understand, less error-prone, much
+       faster, does not pollute the regexp cache, and does not mutate global
+       state.  Use it where applicable and obviously safe (erring on the
+       conservative side).
+
+       * admin/authors.el (authors-canonical-file-name)
+       (authors-scan-change-log):
+       * lisp/apropos.el (apropos-command)
+       (apropos-documentation-property, apropos-symbols-internal):
+       * lisp/arc-mode.el (archive-arc-summarize)
+       (archive-zoo-summarize):
+       * lisp/calc/calc-aent.el (math-read-factor):
+       * lisp/calc/calc-ext.el (math-read-big-expr)
+       (math-format-nice-expr, math-format-number-fancy):
+       * lisp/calc/calc-forms.el (math-read-angle-brackets):
+       * lisp/calc/calc-graph.el (calc-graph-set-range):
+       * lisp/calc/calc-keypd.el (calc-keypad-press):
+       * lisp/calc/calc-lang.el (tex, latex, math-read-big-rec):
+       * lisp/calc/calc-prog.el (calc-fix-token-name)
+       (calc-user-define-permanent, math-define-exp):
+       * lisp/calc/calc.el (calc-record, calcDigit-key)
+       (calc-count-lines):
+       * lisp/calc/calcalg2.el (calc-solve-for, calc-poly-roots)
+       (math-do-integral):
+       * lisp/calc/calcalg3.el (calc-find-root, calc-find-minimum)
+       (calc-get-fit-variables):
+       * lisp/cedet/ede/speedbar.el (ede-tag-expand):
+       * lisp/cedet/semantic/java.el (semantic-java-expand-tag):
+       * lisp/cedet/semantic/sb.el (semantic-sb-show-extra)
+       (semantic-sb-expand-group):
+       * lisp/cedet/semantic/wisent/python.el
+       (semantic-python-instance-variable-p):
+       * lisp/cus-edit.el (get):
+       * lisp/descr-text.el (describe-text-sexp):
+       * lisp/dired-aux.el (dired-compress-file):
+       * lisp/dired-x.el (dired-make-relative-symlink):
+       * lisp/dired.el (dired-glob-regexp):
+       * lisp/dos-fns.el (dos-convert-standard-filename, dos-8+3-filename):
+       * lisp/edmacro.el (edmacro-format-keys):
+       * lisp/emacs-lisp/eieio-opt.el (eieio-sb-expand):
+       * lisp/emacs-lisp/eieio-speedbar.el (eieio-speedbar-object-expand):
+       * lisp/emacs-lisp/lisp-mnt.el (lm-keywords-list):
+       * lisp/emacs-lisp/warnings.el (display-warning):
+       * lisp/emulation/viper-ex.el (viper-ex-read-file-name)
+       (ex-print-display-lines):
+       * lisp/env.el (read-envvar-name, setenv):
+       * lisp/epa-mail.el (epa-mail-encrypt):
+       * lisp/epg.el (epg--start):
+       * lisp/erc/erc-backend.el (erc-parse-server-response):
+       * lisp/erc/erc-dcc.el (erc-dcc-member):
+       * lisp/erc/erc-speedbar.el (erc-speedbar-expand-server)
+       (erc-speedbar-expand-channel, erc-speedbar-expand-user):
+       * lisp/erc/erc.el (erc-send-input):
+       * lisp/eshell/em-glob.el (eshell-glob-entries):
+       * lisp/eshell/esh-proc.el (eshell-needs-pipe-p):
+       * lisp/eshell/esh-util.el (eshell-convert):
+       * lisp/eshell/esh-var.el (eshell-envvar-names):
+       * lisp/faces.el (x-resolve-font-name):
+       * lisp/ffap.el (ffap-file-at-point):
+       * lisp/files.el (wildcard-to-regexp, shell-quote-wildcard-pattern):
+       * lisp/forms.el (forms--update):
+       * lisp/frameset.el (frameset-filter-unshelve-param):
+       * lisp/gnus/gnus-art.el (article-decode-charset):
+       * lisp/gnus/gnus-kill.el (gnus-kill-parse-rn-kill-file):
+       * lisp/gnus/gnus-mlspl.el (gnus-group-split-fancy):
+       * lisp/gnus/gnus-msg.el (gnus-summary-resend-message-insert-gcc)
+       (gnus-inews-insert-gcc):
+       * lisp/gnus/gnus-rfc1843.el (rfc1843-decode-article-body):
+       * lisp/gnus/gnus-search.el (gnus-search-indexed-parse-output)
+       (gnus-search--complete-key-data):
+       * lisp/gnus/gnus-spec.el (gnus-parse-simple-format):
+       * lisp/gnus/gnus-sum.el (gnus-summary-refer-article):
+       * lisp/gnus/gnus-util.el (gnus-extract-address-components)
+       (gnus-newsgroup-directory-form):
+       * lisp/gnus/gnus-uu.el (gnus-uu-grab-view):
+       * lisp/gnus/gnus.el (gnus-group-native-p, gnus-short-group-name):
+       * lisp/gnus/message.el (message-check-news-header-syntax)
+       (message-make-message-id, message-user-mail-address)
+       (message-make-fqdn, message-get-reply-headers, message-followup):
+       * lisp/gnus/mm-decode.el (mm-dissect-buffer):
+       * lisp/gnus/nnheader.el (nnheader-insert):
+       * lisp/gnus/nnimap.el (nnimap-process-quirk)
+       (nnimap-imap-ranges-to-gnus-ranges):
+       * lisp/gnus/nnmaildir.el (nnmaildir--ensure-suffix):
+       * lisp/gnus/nnmairix.el (nnmairix-determine-original-group-from-path):
+       * lisp/gnus/nnrss.el (nnrss-match-macro):
+       * lisp/gnus/nntp.el (nntp-find-group-and-number):
+       * lisp/help-fns.el (help--symbol-completion-table-affixation):
+       * lisp/help.el (help-function-arglist):
+       * lisp/hippie-exp.el (he-concat-directory-file-name):
+       * lisp/htmlfontify.el (hfy-relstub):
+       * lisp/ido.el (ido-make-prompt, ido-complete, ido-copy-current-word)
+       (ido-exhibit):
+       * lisp/image/image-converter.el (image-convert-p):
+       * lisp/info-xref.el (info-xref-docstrings):
+       * lisp/info.el (Info-toc-build, Info-follow-reference)
+       (Info-backward-node, Info-finder-find-node)
+       (Info-speedbar-expand-node):
+       * lisp/international/mule-diag.el (print-fontset-element):
+       * lisp/language/korea-util.el (default-korean-keyboard):
+       * lisp/linum.el (linum-after-change):
+       * lisp/mail/ietf-drums.el (ietf-drums-parse-address):
+       * lisp/mail/mail-utils.el (mail-dont-reply-to):
+       * lisp/mail/rfc2047.el (rfc2047-encode-1, rfc2047-decode-string):
+       * lisp/mail/rfc2231.el (rfc2231-parse-string):
+       * lisp/mail/rmailkwd.el (rmail-set-label):
+       * lisp/mail/rmailsum.el (rmail-header-summary):
+       * lisp/mail/smtpmail.el (smtpmail-maybe-append-domain)
+       (smtpmail-user-mail-address):
+       * lisp/mail/uce.el (uce-reply-to-uce):
+       * lisp/man.el (Man-default-man-entry):
+       * lisp/mh-e/mh-alias.el (mh-alias-gecos-name)
+       (mh-alias-minibuffer-confirm-address):
+       * lisp/mh-e/mh-comp.el (mh-forwarded-letter-subject):
+       * lisp/mh-e/mh-speed.el (mh-speed-parse-flists-output):
+       * lisp/mh-e/mh-utils.el (mh-collect-folder-names-filter)
+       (mh-folder-completion-function):
+       * lisp/minibuffer.el (completion--make-envvar-table)
+       (completion-file-name-table, completion-flex-try-completion)
+       (completion-flex-all-completions):
+       * lisp/mpc.el (mpc--proc-quote-string, mpc-cmd-special-tag-p)
+       (mpc-constraints-tag-lookup):
+       * lisp/net/ange-ftp.el (ange-ftp-send-cmd)
+       (ange-ftp-allow-child-lookup):
+       * lisp/net/mailcap.el (mailcap-mime-types):
+       * lisp/net/mairix.el (mairix-search-thread-this-article):
+       * lisp/net/pop3.el (pop3-open-server):
+       * lisp/net/soap-client.el (soap-decode-xs-complex-type):
+       * lisp/net/socks.el (socks-filter):
+       * lisp/nxml/nxml-outln.el (nxml-highlighted-qname):
+       * lisp/nxml/rng-cmpct.el (rng-c-expand-name, rng-c-expand-datatype):
+       * lisp/nxml/rng-uri.el (rng-uri-file-name-1):
+       * lisp/obsolete/complete.el (partial-completion-mode)
+       (PC-do-completion):
+       * lisp/obsolete/longlines.el (longlines-encode-string):
+       * lisp/obsolete/nnir.el (nnir-compose-result):
+       * lisp/obsolete/terminal.el (te-quote-arg-for-sh):
+       * lisp/obsolete/tpu-edt.el (tpu-check-search-case):
+       * lisp/obsolete/url-ns.el (isPlainHostName):
+       * lisp/pcmpl-unix.el (pcomplete/scp):
+       * lisp/play/dunnet.el (dun-listify-string2, dun-get-path)
+       (dun-unix-parse, dun-doassign, dun-cat, dun-batch-unix-interface):
+       * lisp/progmodes/ebnf2ps.el: (ebnf-eps-header-footer-comment):
+       * lisp/progmodes/gdb-mi.el (gdb-var-delete)
+       (gdb-speedbar-expand-node, gdbmi-bnf-incomplete-record-result):
+       * lisp/progmodes/gud.el (gud-find-expr):
+       * lisp/progmodes/idlw-help.el (idlwave-do-context-help1):
+       * lisp/progmodes/idlw-shell.el (idlwave-shell-mode)
+       (idlwave-shell-filter-hidden-output, idlwave-shell-filter):
+       * lisp/progmodes/idlwave.el (idlwave-skip-label-or-case)
+       (idlwave-routine-info):
+       * lisp/progmodes/octave.el (inferior-octave-completion-at-point):
+       * lisp/progmodes/sh-script.el (sh-add-completer):
+       * lisp/progmodes/sql.el (defun):
+       * lisp/progmodes/xscheme.el (xscheme-process-filter):
+       * lisp/replace.el (query-replace-compile-replacement)
+       (map-query-replace-regexp):
+       * lisp/shell.el (shell--command-completion-data)
+       (shell-environment-variable-completion):
+       * lisp/simple.el (display-message-or-buffer):
+       * lisp/speedbar.el (speedbar-dired, speedbar-tag-file)
+       (speedbar-tag-expand):
+       * lisp/subr.el (split-string-and-unquote):
+       * lisp/tar-mode.el (tar-extract):
+       * lisp/term.el (term-command-hook, serial-read-name):
+       * lisp/textmodes/bibtex.el (bibtex-print-help-message):
+       * lisp/textmodes/ispell.el (ispell-lookup-words, ispell-filter)
+       (ispell-parse-output, ispell-buffer-local-parsing):
+       * lisp/textmodes/reftex-cite.el (reftex-do-citation):
+       * lisp/textmodes/reftex-parse.el (reftex-notice-new):
+       * lisp/textmodes/reftex-ref.el (reftex-show-entry):
+       * lisp/textmodes/reftex.el (reftex-compile-variables):
+       * lisp/textmodes/tex-mode.el (tex-send-command)
+       (tex-start-tex, tex-append):
+       * lisp/thingatpt.el (thing-at-point-url-at-point):
+       * lisp/tmm.el (tmm-add-one-shortcut):
+       * lisp/transient.el (transient-format-key):
+       * lisp/url/url-auth.el (url-basic-auth)
+       (url-digest-auth-directory-id-assoc):
+       * lisp/url/url-news.el (url-news):
+       * lisp/url/url-util.el (url-parse-query-string):
+       * lisp/vc/vc-cvs.el (vc-cvs-parse-entry):
+       * lisp/wid-browse.el (widget-browse-sexp):
+       * lisp/woman.el (woman-parse-colon-path, woman-mini-help)
+       (WoMan-getpage-in-background, woman-negative-vertical-space):
+       * lisp/xml.el:
+       * test/lisp/emacs-lisp/check-declare-tests.el
+       (check-declare-tests-warn):
+       * test/lisp/files-tests.el
+       (files-tests-file-name-non-special-dired-compress-handler):
+       * test/lisp/net/network-stream-tests.el (server-process-filter):
+       * test/src/coding-tests.el (ert-test-unibyte-buffer-dos-eol-decode):
+       Use `string-search` instead of `string-match` and `string-match-p`.
+
+2021-08-08  Alan Third  <alan@idiocy.org>
+
+       * src/nsterm.m (max_used_fringe_bitmap): Remove unused variable.
+
+2021-08-08  Tassilo Horn  <tsdh@gnu.org>
+
+       Un-obsolete dired-in-this-tree-p and use it again in certain places.
+
+       This reverts parts of b425966b07, and 7b50ed553f, i.e. it reverts the
+       obsoletion of dired-in-this-tree-p and switches some new callers of
+       file-in-directory-p back to using dired-in-this-tree-p.
+
+       It turned out that using file-in-directory-p can be a major
+       performance regression in case you have a dired buffer of a remote
+       directory which has become (almost) inaccessible.
+
+       Any attempt to open a new dired buffer is checking if a buffer for
+       that directory already exists (in terms of dired-buffers-for-dir)
+       which meant that file-in-directory-p was called with the directory of
+       any existing dired buffer including the inaccessible one where the
+       file-truename call in file-in-directory-p could block for seconds or
+       even minutes.
+
+       * lisp/dired.el (dired-in-this-tree-p): Undo obsoletion.
+       (dired-buffers-for-dir): Use dired-in-this-tree-p as before.
+       * lisp/dired-aux.el (dired-kill-tree,dired-tree-down): Une
+       dired-in-this-tree-p as before.
+
+2021-08-08  Mattias Engdegård  <mattiase@acm.org>
+
+       Use string-replace instead of replace-regexp-in-string
+
+       `string-replace` is easier to understand, less error-prone, much
+       faster, and results in shorter Lisp and byte code.  Use it where
+       applicable and obviously safe (erring on the conservative side).
+
+       * admin/authors.el (authors-scan-change-log):
+       * lisp/autoinsert.el (auto-insert-alist):
+       * lisp/calc/calc-prog.el (calc-edit-macro-combine-alg-ent)
+       (calc-edit-macro-combine-ext-command)
+       (calc-edit-macro-combine-var-name):
+       * lisp/calc/calc-units.el (math-make-unit-string):
+       * lisp/calendar/cal-html.el (cal-html-comment):
+       * lisp/calendar/cal-tex.el (cal-tex-comment):
+       * lisp/calendar/icalendar.el (icalendar--convert-string-for-export)
+       (icalendar--convert-string-for-import):
+       * lisp/calendar/iso8601.el (iso8601--concat-regexps)
+       (iso8601--full-time-match, iso8601--combined-match):
+       * lisp/calendar/time-date.el (format-seconds):
+       * lisp/calendar/todo-mode.el (todo-filter-items-filename):
+       * lisp/cedet/cedet-files.el (cedet-directory-name-to-file-name)
+       (cedet-file-name-to-directory-name):
+       * lisp/comint.el (comint-watch-for-password-prompt):
+       * lisp/dired-aux.el (dired-do-chmod):
+       * lisp/dired-x.el (dired-man):
+       * lisp/dired.el (dired-insert-directory, dired-goto-file-1):
+       * lisp/emacs-lisp/comp.el (comp-c-func-name):
+       * lisp/emacs-lisp/re-builder.el (reb-copy):
+       * lisp/erc/erc-dcc.el (erc-dcc-unquote-filename):
+       * lisp/erc/erc.el (erc-quit-reason-zippy, erc-part-reason-zippy)
+       (erc-update-mode-line-buffer, erc-message-english-PART):
+       * lisp/files.el (make-backup-file-name-1, files--transform-file-name)
+       (read-file-modes):
+       * lisp/fringe.el (fringe-mode):
+       * lisp/gnus/gnus-art.el (gnus-button-handle-info-url):
+       * lisp/gnus/gnus-group.el (gnus-group-completing-read):
+       * lisp/gnus/gnus-icalendar.el (gnus-icalendar-event-from-ical):
+       * lisp/gnus/gnus-mlspl.el (gnus-group-split-fancy):
+       * lisp/gnus/gnus-search.el (gnus-search-query-parse-date)
+       (gnus-search-transform-expression, gnus-search-run-search):
+       * lisp/gnus/gnus-start.el (gnus-dribble-enter):
+       * lisp/gnus/gnus-sum.el (gnus-summary-refer-article):
+       * lisp/gnus/gnus-util.el (gnus-mode-string-quote):
+       * lisp/gnus/message.el (message-put-addresses-in-ecomplete)
+       (message-parse-mailto-url, message-mailto-1):
+       * lisp/gnus/mml-sec.el (mml-secure-epg-sign):
+       * lisp/gnus/mml-smime.el (mml-smime-epg-verify):
+       * lisp/gnus/mml2015.el (mml2015-epg-verify):
+       * lisp/gnus/nnmaildir.el (nnmaildir--system-name)
+       (nnmaildir-request-list, nnmaildir-retrieve-groups)
+       (nnmaildir-request-group, nnmaildir-retrieve-headers):
+       * lisp/gnus/nnrss.el (nnrss-node-text):
+       * lisp/gnus/spam-report.el (spam-report-gmane-internal)
+       (spam-report-user-mail-address):
+       * lisp/ibuffer.el (name):
+       * lisp/image-dired.el (image-dired-pngnq-thumb)
+       (image-dired-pngcrush-thumb, image-dired-optipng-thumb)
+       (image-dired-create-thumb-1):
+       * lisp/info.el (Info-set-mode-line):
+       * lisp/international/mule-cmds.el (describe-language-environment):
+       * lisp/mail/rfc2231.el (rfc2231-parse-string):
+       * lisp/mail/rfc2368.el (rfc2368-parse-mailto-url):
+       * lisp/mail/rmail.el (rmail-insert-inbox-text)
+       (rmail-simplified-subject-regexp):
+       * lisp/mail/rmailout.el (rmail-output-body-to-file):
+       * lisp/mail/undigest.el (rmail-digest-rfc1153):
+       * lisp/man.el (Man-default-man-entry):
+       * lisp/mouse.el (minor-mode-menu-from-indicator):
+       * lisp/mpc.el (mpc--debug):
+       * lisp/net/browse-url.el (browse-url-mail):
+       * lisp/net/eww.el (eww-update-header-line-format):
+       * lisp/net/newst-backend.el (newsticker-save-item):
+       * lisp/net/rcirc.el (rcirc-sentinel):
+       * lisp/net/soap-client.el (soap-decode-date-time):
+       * lisp/nxml/rng-cmpct.el (rng-c-literal-2-re):
+       * lisp/nxml/xmltok.el (let*):
+       * lisp/obsolete/nnir.el (nnir-run-swish-e, nnir-run-hyrex)
+       (nnir-run-find-grep):
+       * lisp/play/dunnet.el (dun-doassign):
+       * lisp/play/handwrite.el (handwrite):
+       * lisp/proced.el (proced-format-args):
+       * lisp/profiler.el (profiler-report-header-line-format):
+       * lisp/progmodes/gdb-mi.el (gdb-mi-quote):
+       * lisp/progmodes/make-mode.el (makefile-bsdmake-rule-action-regex)
+       (makefile-make-font-lock-keywords):
+       * lisp/progmodes/prolog.el (prolog-guess-fill-prefix):
+       * lisp/progmodes/ruby-mode.el (ruby-toggle-string-quotes):
+       * lisp/progmodes/sql.el (sql-remove-tabs-filter, sql-str-literal):
+       * lisp/progmodes/which-func.el (which-func-current):
+       * lisp/replace.el (query-replace-read-from)
+       (occur-engine, replace-quote):
+       * lisp/select.el (xselect--encode-string):
+       * lisp/ses.el (ses-export-tab):
+       * lisp/subr.el (shell-quote-argument):
+       * lisp/term/pc-win.el (msdos-show-help):
+       * lisp/term/w32-win.el (w32--set-selection):
+       * lisp/term/xterm.el (gui-backend-set-selection):
+       * lisp/textmodes/picture.el (picture-tab-search):
+       * lisp/thumbs.el (thumbs-call-setroot-command):
+       * lisp/tooltip.el (tooltip-show-help-non-mode):
+       * lisp/transient.el (transient-format-key):
+       * lisp/url/url-mailto.el (url-mailto):
+       * lisp/vc/log-edit.el (log-edit-changelog-ours-p):
+       * lisp/vc/vc-bzr.el (vc-bzr-status):
+       * lisp/vc/vc-hg.el (vc-hg--glob-to-pcre):
+       * lisp/vc/vc-svn.el (vc-svn-after-dir-status):
+       * lisp/xdg.el (xdg-desktop-strings):
+       * test/lisp/electric-tests.el (defun):
+       * test/lisp/term-tests.el (term-simple-lines):
+       * test/lisp/time-stamp-tests.el (formatz-mod-del-colons):
+       * test/lisp/wdired-tests.el (wdired-test-bug32173-01)
+       (wdired-test-unfinished-edit-01):
+       * test/src/json-tests.el 
(json-parse-with-custom-null-and-false-objects):
+       Use `string-replace` instead of `replace-regexp-in-string`.
+
+2021-08-08  Eli Zaretskii  <eliz@gnu.org>
+
+       Another fix for parse-colon-path
+
+       * test/lisp/files-tests.el (files-tests-bug-21454, files-colon-path):
+       Adapt to change in behavior of 'parse-colon-path'.
+
+       * lisp/files.el (parse-colon-path): Don't expand the directory
+       names: that changes the names in ways this function is not
+       supposed to.  (Bug#49918)
+
+2021-08-08  Michael Albinus  <michael.albinus@gmx.de>
+
+       Doc update wrt Tramp support of SSH security keys
+
+       * doc/misc/tramp.texi (Frequently Asked Questions): Speak about
+       SSH security keys.
+       (GVFS-based methods, Predefined connection information)
+       (Remote shell setup): Fix typo.
+
+       * etc/NEWS: Precise Tramp's support for SSH security keys.  Fix typos.
+
+2021-08-08  Dmitry Gutov  <dgutov@yandex.ru>
+
+       project.el: Bump the version
+
+       * lisp/progmodes/project.el: Bump the version.
+
+2021-08-07  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Further fix to filtering Gnus search group names
+
+       * lisp/gnus/gnus-search.el (gnus-search-indexed-parse-output): Group
+       names in the GROUPS argument may be prefixed or not, depending on
+       which server we're searching, so always enforce prefix policy within
+       the function.
+
+2021-08-07  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix files-tests broken on MS-Windows by a recent change
+
+       * test/lisp/files-tests.el (files-colon-path): Use path-separator, and
+       account for drive letters in absolute file names on MS-Windows.  
(Bug#49918)
+
+2021-08-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix prin1 problem in package-quickstart-refresh
+
+       * lisp/emacs-lisp/package.el (package-quickstart-refresh): Bind
+       print-length/print-level before using prin1-to-string (bug#49924).
+
+2021-08-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix print-length issue in comp-run-async-workers
+
+       * lisp/emacs-lisp/comp.el (comp-run-async-workers): Bind
+       print-length/print-level to ensure there's no truncation (bug#49922).
+
+2021-08-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make `q' in `org-agenda' work even with `debug-on-error' set
+
+       * lisp/org/org-agenda.el (org-agenda-get-restriction-and-command):
+       Using `error' here will trigger users with `debug-on-error' so use
+       `user-error' instead (bug#49920).  It would probably be preferable
+       to rewrite this to not use the error system to do control flow.
+
+2021-08-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix problem with relative directories in CDPATH
+
+       * lisp/files.el (parse-colon-path): Allow relative directories
+       (like ".") in CDPATH (bug#49918).
+
+2021-08-07  Tomasz Konojacki  <me@xenu.pl>  (tiny change)
+
+       perl-mode: fix variable fontification
+
+       * lisp/progmodes/perl-mode.el: Handle variables first to avoid
+       conflicting with keywords. This fixes cases like "$package"
+       (bug#49906).
+
+2021-08-07  Lars Ingebrigtsen  <larsi@emkay.local>
+
+       Allow building on MacOS with MacPorts and libgccjit
+
+       * configure.ac: Check for the "port" command (MacPorts).
+       Add the required lib/include directories for nativecomp.
+
+       * src/Makefile.in (LIBGCCJIT_CFLAGS, LIBGCCJIT_LIBS): Split into
+       two parts to allow including -L/-I for MacPorts.
+       (LIBES): Adjust.
+       (EMACS_CFLAGS): Ditto.
+
+2021-08-06  Philip Kaludercic  <philipk@posteo.net>
+
+       Add new option rcirc-channel-filter
+
+       * lisp/net/rcirc.el (rcirc-channel-filter): Add option
+       (rcirc-short-buffer-name): Respect rcirc-channel-filter
+       (rcirc-handler-JOIN): Respect rcirc-channel-filter
+       (rcirc-handler-PART): Respect rcirc-channel-filter
+       (rcirc-handler-KICK): Respect rcirc-channel-filter
+       (rcirc-handler-QUIT): Respect rcirc-channel-filter
+       (rcirc-handler-INVITE): Respect rcirc-channel-filter
+
+2021-08-06  Philip Kaludercic  <philipk@posteo.net>
+
+       Add new option rcirc-track-abbrevate-flag
+
+       * lisp/net/rcirc.el (rcirc-track-abbrevate-flag): Add option
+       (rcirc-short-buffer-name): Respect rcirc-track-abbrevate-flag
+
+2021-08-06  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       b77f6af24e (origin/emacs-27) ERC right stamps: also use latest buffer...
+
+       # Conflicts:
+       #       lisp/erc/erc-stamp.el
+
+2021-08-06  dickmao  <none>
+
+       Improve ffap-ido-mode test
+
+       * test/lisp/ffap-tests.el (ffap-ido-mode): Actually test
+       `ido-everywhere' at run time, not compile time (bug#49895).
+
+2021-08-06  dick r. chiang  <dick.r.chiang@gmail.com>
+
+       Fix problem with occasional stalls in `url-retrieve-synchronously'
+
+       * lisp/url/url.el (url-retrieve-synchronously): Use
+       `accept-process-output' on a null process.  That is the safer, more
+       conventional way of achieving non-blocking sleep-for (bug#49897).
+
+       Also rewrite for greater readability.
+
+2021-08-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention NonGNU in "Package Archives" node in the manual
+
+       * doc/lispref/package.texi (Package Archives): Mention NonGNU, too
+       (bug#49899).
+
+2021-08-06  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Add colon-space after prompt
+
+       * lisp/progmodes/project.el (project--completing-read-strict):
+       Fix last change's regression (bug#49865).
+
+2021-08-06  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix automatic hscrolling when line numbers are displayed
+
+       * src/xdisp.c (hscroll_window_tree): When line numbers are
+       displayed, account for the the line-number space when calculating
+       the desired X coordinate on the left.  (Bug#49891)
+
+2021-08-06  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve wording of recently changed documentation
+
+       * src/minibuf.c (syms_of_minibuf):
+       * lisp/minibuffer.el (minibuffer-restore-windows):
+       * lisp/progmodes/etags.el (etags-xref-prefer-current-file):
+       Improve wording of doc strings.
+
+       * etc/NEWS: Improve wording and format of recently added entries.
+
+2021-08-06  Eli Zaretskii  <eliz@gnu.org>
+
+       Make sure installed *.eln files have correct permissions
+
+       * Makefile.in (install-eln): Add "umask 022" to ensure the *.eln
+       files are accessible from the user's Emacs session.  Suggested by
+       Wilhelm Kirschbaum <wkirschbaum@gmail.com>.  (Bug#49864)
+
+2021-08-06  Olivier Certner  <olce.emacs@certner.fr>
+
+       ERC right stamps: also use latest buffer's window's width (Bug#44140)
+
+       * lisp/erc/erc-stamp.el (erc-insert-timestamp-right): Use latest
+       buffer's window's width to position the timestamp, if both
+       `erc-timestamp-right-column' and `erc-fill-column' are not set (or
+       `erc-fill-mode' is off).  This is what the documentation says, but was
+       not implemented.  Also fix the bug of using selected window's width
+       instead of the (or some) window showing the buffer.  The latest
+       window's width is saved in `erc-timestamp-last-window-width' and used
+       when the buffer is no more shown.  In case the buffer was never shown,
+       which I'm not sure can happen, either use `fill-column' if set, or
+       give up on aligning and just output the timestamp (modulo the kludge)
+       right after message text.  While here, fix the off by one calculation
+       of point start when the reference is the window's width.
+
+2021-08-06  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Change how project-find-file's completion works
+
+       * lisp/progmodes/project.el (project--completing-read-strict):
+       Allow to choose a non-existent file, with confirmation
+       (bug#49204).
+       Don't use the string at point as a "real" default, and instead
+       only include it in "future history": meaning, it will be inserted
+       on 'M-n' (bug#49865).
+
+2021-08-06  Dmitry Gutov  <dgutov@yandex.ru>
+
+       New option etags-xref-prefer-current-file
+
+       * lisp/progmodes/etags.el (etags-xref-prefer-current-file):
+       New user option (bug#2544).
+       (xref-backend-definitions): Use it.
+
+2021-08-06  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Provide a default for xref-find-apropos pattern
+
+       * lisp/progmodes/xref.el (xref-find-apropos):
+       Provide a default for the pattern (bug#49731).
+
+2021-08-06  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Change the xref-goto-xref error message
+
+       * lisp/progmodes/xref.el (xref-goto-xref):
+       Change the error message (bug#49846).
+
+2021-08-06  Juri Linkov  <juri@linkov.net>
+
+       Add function minibuffer-restore-windows (bug#45072)
+
+       * lisp/minibuffer.el (minibuffer-restore-windows): New function
+       that removes the completions buffer.  Add it to minibuffer-exit-hook.
+       * src/minibuf.c (read-minibuffer-restore-windows): Mention
+       minibuffer-restore-windows.
+
+2021-08-05  Konstantin Kharlamov  <Hi-Angel@yandex.ru>
+
+       Reset mtime of a buffer reverted "delicately"
+
+       * lisp/files.el (revert-buffer-insert-file-contents-delicately):
+       Once buffer is reverted, reset its mtime to that of the file.
+       (Bug#49893)
+
+2021-08-05  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix files-tests on non-Posix systems
+
+       * test/lisp/files-tests.el (files-test-auto-save-name-default)
+       (files-test-auto-save-name-transform)
+       (files-test-auto-save-name-unique, files-test-lock-name-default)
+       (files-test-lock-name-unique): Skip the drive letter in absolute
+       file names on MS-Windows/MS-DOS when comparing file names against
+       the expected ones.
+       (files-tests-file-name-non-special--subprocess): Skip test on
+       MS-Windows/MS-DOS.
+
+2021-08-05  Mattias Engdegård  <mattiase@acm.org>
+
+       Cease attempts to const-propagate through setq
+
+       The current method of propagating constants through setq was unsound
+       because it relied on each setq form only being traversed at most once
+       during optimisation, which isn't necessarily true in general; it could
+       be made to miscompile code in rare cases.
+
+       Since it was only used in limited circumstances, disabling this
+       optimisation doesn't cost us much.
+
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker):
+       Don't update the known value when traversing `setq`.
+       * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-tests--test-cases):
+       Add test case.
+
+2021-08-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix M-n description in refcards
+
+       * etc/refcards/pl-refcard.tex (section{Szukanie przyrostowe}):
+       Ditto (in comments).
+
+       * etc/refcards/refcard.tex (section{Incremental Search}): Fix M-n
+       description (bug#49872).
+
+2021-08-05  Roland Winkler  <winkler@gnu.org>
+
+       Add support for the oauth2.el library in nnimap and smtpmail
+
+       * doc/misc/gnus.texi (Customizing the IMAP Connection):
+       * doc/misc/smtpmail.texi (Authentication): Mention it.
+
+       * lisp/gnus/nnimap.el (nnimap-login): Support oauth2.
+
+       * lisp/mail/smtpmail.el (smtpmail-try-auth-method): New function
+       for oauth2.
+
+2021-08-05  Glenn Morris  <rgm@gnu.org>
+
+       * lisp/cus-start.el (read-minibuffer-restore-windows): Fix entry.
+
+2021-08-04  Juri Linkov  <juri@linkov.net>
+
+       * lisp/vc/smerge-mode.el (smerge-mode-menu): Add menu item for 
smerge-refine.
+
+2021-08-04  dickmao  <none>
+
+       Package archive location needs to be absolute filename
+
+       * lisp/emacs-lisp/package.el (package--with-response-buffer-1):
+       Actually check that URL is absolute (bug#49788).
+
+2021-08-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a new thing-at-point type: existing-filename
+
+       * doc/lispref/text.texi (Buffer Contents): Mention it.
+
+       * lisp/thingatpt.el (thing-at-point-file-at-point): New function.
+       (existing-filename): Register it.
+
+2021-08-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make `M-j' work reliably if `comment-auto-fill-only-comments' is set
+
+       * lisp/simple.el (default-indent-new-line): Force breaking the
+       line when called interactively (bug#49849).  (Perhaps the
+       interactive command should be rebound and call this function
+       instead...)
+
+2021-08-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve `define-globalized-minor-mode' doc strings
+
+       * lisp/emacs-lisp/easy-mmode.el (define-globalized-minor-mode):
+       Copy the description from easy-mmode--arg-docstring (bug#49843).
+
+2021-08-04  dickmao  <none>
+
+       ffap ido accommodation
+
+       Now that ffap-file-finder can be ido-find-file, the
+       noninteractive portion of find-file-at-point cannot
+       assume ffap-file-finder always takes an argument
+       (ido-find-file does not).
+
+       * lisp/ffap.el (find-file-at-point): Do not call ffap-file-finder.
+       * test/lisp/ffap-tests.el (ffap-ido-mode): Test it.
+
+2021-08-04  Miha Rihtaršič  <miha@kamnitnik.top>
+
+       Use `abort-minibuffers' in delsel
+
+       * lisp/delsel.el (minibuffer-keyboard-quit): Use
+       `abort-minibuffers' (bug#49821).
+
+       Previously, C-g was bound to abort-recursive-edit, now it is bound to
+       abort-minibuffers.  However, after requiring delsel, it gets bound to
+       minibuffer-keyboard-quit, which still uses abort-recursive-edit.  Use
+       the new function instead.
+
+2021-08-04  martin rudalics  <rudalics@gmx.at>
+
+       Add new user option 'read-minibuffer-restore-windows'
+
+       * doc/lispref/minibuf.texi (Text from Minibuffer): Document it
+       (bug#45072).
+
+       * lisp/cus-start.el (standard): Add.
+
+       * src/minibuf.c (syms_of_minibuf): New variable
+       'read-minibuffer-restore-windows'.
+
+2021-08-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Update outdated Gnus information
+
+       * doc/misc/gnus.texi (History): Update information.
+
+2021-08-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix apparent typo in new cl-generic-tests.el test case
+
+2021-08-04  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/cl-generic.el (cl-generic-generalizers): Don't emit 
warning
+
+       Also remove "WARNING" annotations after confirming that he code was 
right.
+
+2021-08-04  akater  <nuclearspace@gmail.com>
+
+       Evaluate eql specializers
+
+       * lisp/emacs-lisp/cl-generic.el (cl-generic-generalizers): Evaluate
+       forms that are eql specializers.  Provide backward compatibility
+       with a warning.
+
+       * test/lisp/emacs-lisp/cl-generic-tests.el: Add a test.
+       * lisp/emacs-lisp/bindat.el (bindat--type): Adhere to the new rule.
+       * lisp/emacs-lisp/edebug.el (edebug--match-&-spec-op): Adhere to the 
new rule.
+       * lisp/emacs-lisp/map.el (map-into): Adhere to the new rule.
+       * lisp/emacs-lisp/radix-tree.el (map-into): Adhere to the new rule.
+       * lisp/frame.el (cl-generic-define-context-rewriter): Adhere to the new 
rule.
+       * lisp/gnus/gnus-search.el
+       (gnus-search-transform-expression): Adhere to the new rule.
+       * lisp/image/image-converter.el
+       (image-converter--probe image-converter--convert): Adhere to the new 
rule.
+       * lisp/mail/smtpmail.el (smtpmail-try-auth-method): Adhere to the new 
rule.
+       * lisp/progmodes/elisp-mode.el
+       (xref-backend-definitions)
+       (xref-backend-apropos): Adhere to the new rule.
+       * lisp/progmodes/etags.el (xref-backend-identifier-at-point)
+       (xref-backend-identifier-completion-table)
+       (xref-backend-identifier-completion-ignore-case)
+       (xref-backend-definitions)(xref-backend-apropos): Adhere to the new 
rule.
+       * test/lisp/emacs-lisp/checkdoc-tests.el
+       (checkdoc-cl-defmethod-with-types-ok)
+       (checkdoc-cl-defmethod-qualified-ok)
+       (checkdoc-cl-defmethod-with-extra-qualifier-ok): Adhere to the new rule.
+
+       * etc/NEWS: Describe the change.
+
+2021-08-03  Michael Albinus  <michael.albinus@gmx.de>
+
+       Code cleanup for Tramp's yubikey integration
+
+       * lisp/net/tramp-sh.el (tramp-actions-before-shell)
+       (tramp-actions-copy-out-of-band):
+       Use `tramp-security-key-confirm-regexp'.
+
+       * lisp/net/tramp.el (tramp-security-key-confirm-regexp): Rename from
+       `tramp-yubikey-regexp'.  Adapt docstring.
+       (tramp-security-key-confirmed-regexp): New defcustom.
+       (tramp-action-show-and-confirm-message):
+       Redisplay.  Use `tramp-security-key-confirmed-regexp'.
+
+2021-08-03  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       file-name-concat is not error free
+
+       * lisp/emacs-lisp/byte-opt.el (side-effect-free-fns): Declare
+       file-name-concat as side-effect free.
+
+2021-08-03  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Declare file-name-concat as side-effect free
+
+       * lisp/emacs-lisp/byte-opt.el (side-effect-free-fns): Declare
+       file-name-concat as side-effect (and error) free.
+
+2021-08-03  Mattias Engdegård  <mattiase@acm.org>
+
+       Remove ineffective expression in verilog-mode
+
+       * lisp/progmodes/verilog-mode.el (verilog-set-auto-endcomments):
+       Remove expression that now elicits a byte-compiler warning.
+
+2021-08-03  Mattias Engdegård  <mattiase@acm.org>
+
+       Declare `match-beginning` and `match-end` as side-effect-free
+
+       * lisp/emacs-lisp/byte-opt.el (side-effect-free-fns): Add functions.
+
+2021-08-03  Phil Sainty  <psainty@orcon.net.nz>
+
+       Merge branch 'scratch/so-long'
+
+2021-08-03  Phil Sainty  <psainty@orcon.net.nz>
+
+       Make `global-so-long-mode' use `buffer-line-statistics'
+
+       * lisp/so-long.el: (so-long-statistics-excessive-p): New predicate
+       function using `buffer-line-statistics'.
+       (so-long-predicate): Use `so-long-statistics-excessive-p' by default.
+
+       * etc/NEWS: Describe changes.
+
+       * test/lisp/so-long-tests/so-long-tests-helpers.el:
+       * test/lisp/so-long-tests/so-long-tests.el: Update tests.
+       Also improve the existing `so-long-tests-predicate' tests.
+
+2021-08-03  Phil Sainty  <psainty@orcon.net.nz>
+
+       Support 'preserved' variables and minor modes in `so-long-mode'
+
+       The default values support preserving the state of `view-mode' when
+       switching to (and reverting from) `so-long-mode' (bug#45084).
+
+       * lisp/so-long.el (so-long-mode-preserved-variables)
+       (so-long-mode-preserved-minor-modes): New user options.
+       (so-long-mode-maintain-preserved-variables)
+       (so-long-mode-maintain-preserved-minor-modes): New functions.
+       (so-long-remember-all, so-long-after-change-major-mode)
+       (so-long-mode-revert): Use them.
+
+       * etc/NEWS: Describe changes.
+
+       * test/lisp/so-long-tests/so-long-tests-helpers.el:
+       * test/lisp/so-long-tests/so-long-tests.el: Update tests.
+
+2021-08-03  Phil Sainty  <psainty@orcon.net.nz>
+
+       * lisp/so-long.el (so-long-minor-modes): Additional modes to disable
+
+2021-08-03  Phil Sainty  <psainty@orcon.net.nz>
+
+       Make `global-so-long-mode' handle unrecognised file types
+
+       * lisp/so-long.el (so-long-target-modes): Add `fundamental-mode'
+
+       * etc/NEWS: Describe changes.
+
+       This doesn't affect buffers which are simply in `fundamental-mode' by
+       default.  It only affects buffers for which `set-auto-mode' has been
+       called (normally via `find-file') without establishing a different
+       major mode.
+
+2021-08-03  Phil Sainty  <psainty@orcon.net.nz>
+
+       Increase `so-long-threshold' and `so-long-max-lines' defaults
+
+       * lisp/so-long.el (so-long-threshold, so-long-max-lines): Increase
+       default values to reduce false-positives.
+
+       * etc/NEWS: Describe changes.
+
+       Lines shorter than 10,000 characters shouldn't generally be causing
+       problems, so testing this explicitly will largely eliminate
+       false-positives.  We must also increase the maximum number of lines
+       to check, because 'minified' code may still include newlines, and so
+       there may be many lines shorter than the new threshold before we find
+       a line which exceeds it.
+
+       Previously we used a minimum-effort heuristic, testing a very small
+       number of lines against a maximum length which, while not remotely
+       long enough to cause problems, would nevertheless be uncommon in any
+       normal file of programming code (and hence indicative that the file
+       was likely to be minified code).
+
+       Testing indicates that the performance penalty for the larger values
+       should be negligible.
+
+2021-08-03  Jimmy Yuen Ho Wong  <wyuenho@gmail.com>
+
+       * Fix error while disassembling native code on macOS
+
+       * lisp/emacs-lisp/disass.el (disassemble-internal): Make sure the
+       regexp that searches for a symbol takes into account of llvm-objdump's
+       output format.
+
+2021-08-03  Juri Linkov  <juri@linkov.net>
+
+       Improve handling of context menus for global, local, minor-mode menus
+
+       * lisp/mouse.el (context-menu-global, context-menu-local, 
context-menu-minor):
+       Better handling of possibly nested menu maps.
+
+2021-08-03  Amin Bandali  <bandali@gnu.org>
+
+       Merge from origin/emacs-27
+
+       75ecce4323 Unbreak ERC's Ibuffer filter (Bug#44100)
+
+2021-08-03  Olivier Certner  <olce.emacs@certner.fr>
+
+       Unbreak ERC's Ibuffer filter (Bug#44100)
+
+       * lisp/erc/erc-ibuffer.el (erc-modified): Don't use `length' on dotted
+       lists (and not even to test if there is more than one element, for
+       that matter).  Use `cdr' instead.
+
+2021-08-03  Juri Linkov  <juri@linkov.net>
+
+       Adjust tab-bar to the new mode-line-misc-info value (bug#49806)
+
+       * lisp/tab-bar.el (tab-bar--define-keys): Adjust to the new
+       default value for `mode-line-misc-info'.
+
+2021-08-02  Stephen Gildea  <stepheng+emacs@gildea.com>
+
+       mh-junk: adjust messages for allow/block actions
+
+       * lisp/mh-e/mh-junk.el: Remove messages that get overwritten quickly.
+       Keep messages that give status for slow operations.  Add information
+       that might be useful for debugging failures.
+
+2021-08-02  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/mwheel.el: Don't use `custom-initialize-delay`.
+
+       Set up the keybindings when loading the file.
+
+       (mouse-wheel--installed-bindings-alist): Move to beginning.
+       (mouse-wheel-change-button): Don't update bindings when they're not 
installed.
+       (mouse-wheel--setup-bindings): New function extracted from 
`mouse-wheel-mode`.
+       (<topleve>): Call it when loading the file.
+       (mouse-wheel-mode): Use the default :initializer.
+
+2021-08-02  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/flymake.el (flymake--mode-line-title): Don't quote 
lambda
+
+2021-08-01  Juri Linkov  <juri@linkov.net>
+
+       * lisp/progmodes/project.el (project-switch-project): Use 'let*' 
(bug#49635).
+
+       This allows overriding-local-map to have effect on read-key-sequence.
+
+2021-08-01  Juri Linkov  <juri@linkov.net>
+
+       * lisp/help-mode.el (help-mode-context-menu): New function.
+
+       (help-mode): Use it.
+
+2021-08-01  Juri Linkov  <juri@linkov.net>
+
+       * lisp/emacs-lisp/autoload.el (autoload--make-defs-autoload): Display 
warning.
+
+       https://lists.gnu.org/archive/html/emacs-devel/2021-08/msg00007.html
+
+2021-08-01  Mattias Engdegård  <mattiase@acm.org>
+
+       Make dlet work like let, not let*
+
+       Change `dlet` so that it has binding semantics like `let` because that
+       is what a user would expect and it allows a corresponding `dlet*` to
+       be added later should the need arise.  Fortunately the change has no
+       effect where it is currently used.
+
+       * lisp/subr.el (dlet): Work like let.
+       * lisp/calendar/cal-bahai.el (calendar-bahai-date-string):
+       * lisp/calendar/cal-coptic.el (calendar-coptic-date-string):
+       * lisp/calendar/cal-dst.el (calendar-time-zone-daylight-rules)
+       (calendar-dst-starts, dst-in-effect):
+       * lisp/calendar/cal-persia.el (calendar-persian-date-string):
+       * lisp/calendar/calendar.el (calendar-dlet, calendar-generate-month)
+       (calendar-update-mode-line, calendar-date-string):
+       * lisp/calendar/diary-lib.el (diary-list-entries-2)
+       (diary-list-entries, diary-mark-entries-1, diary-sexp-entry)
+       (diary-remind, diary-font-lock-date-forms, diary-fancy-date-pattern):
+       * lisp/calendar/holidays.el (holiday-sexp):
+       * lisp/calendar/icalendar.el (icalendar--convert-float-to-ical):
+       * lisp/calendar/solar.el (solar-time-string):
+       * lisp/calendar/todo-mode.el (todo-date-pattern)
+       (todo-edit-item--header, todo-convert-legacy-date-time)
+       (todo-read-date):
+       Rename `calendar-dlet*` to `calendar-dlet` since it uses `dlet`.
+
+2021-08-01  Mattias Engdegård  <mattiase@acm.org>
+
+       Indicate selected occur target with fringe arrow
+
+       * lisp/replace.el (occur--set-arrow): New function.
+       (occur-mode-goto-occurrence)
+       (occur-mode-goto-occurrence-other-window)
+       (occur-mode-display-occurrence): Call it.
+       * etc/NEWS: Announce.
+
+2021-08-01  Juri Linkov  <juri@linkov.net>
+
+       * lisp/filecache.el: Fix cycling (bug#49761).
+
+       (file-cache-cycle): Refactor from file-cache-minibuffer-complete.
+       (file-cache-minibuffer-complete): Use file-cache-cycle in 2 old places,
+       and in 1 following new place.  When last-command is equal to 
this-command,
+       use file-cache-cycle to continue cycling the previous completion
+       as long as the user continues typing C-TAB.
+       Also when displaying a list of completions, don't try to move point
+       to the common prefix.
+
+2021-08-01  Kévin Le Gouguec  <kevin.legouguec@gmail.com>
+
+       Extend Gnus summary highlight faces by default
+
+       * lisp/gnus/gnus.el (gnus-summary-selected):
+       (gnus-summary-normal-ancient):
+       (gnus-summary-normal-undownloaded):
+       (gnus-summary-normal-unread):
+       (gnus-summary-normal-read): Set :extend attribute.
+
+2021-08-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Adjust the fully qualified host name when nothing is set
+
+       * doc/misc/message.texi (News Headers): Adjust index.
+       * lisp/gnus/message.el (message-check-news-header-syntax): Adjust check.
+       (message-make-fqdn): Be less hilarious.
+
+2021-07-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix `u' binding in Gnus Browse mode
+
+       * lisp/gnus/gnus-srvr.el (gnus-browse-mode-map): Bind to
+       `gnus-browse-toggle-subscription-at-point', which is the command.
+
+2021-07-31  Mattias Engdegård  <mattiase@acm.org>
+
+       Occur-mode multi-line match property gap filling
+
+       When an occur-mode regexp matches across multiple lines, the spacing
+       prefixes inserted between each did not have the `occur-target`
+       property which is essential for jumping to the corresponding place in
+       the target buffer.  This prevented next-error and previous-error
+       from working.
+
+       * lisp/replace.el (occur-engine): Put the `occur-target` property on
+       the continuation prefix to avoid the gap.
+
+2021-07-31  Mattias Engdegård  <mattiase@acm.org>
+
+       * etc/NEWS: Mention occur-mode highlight changes.
+
+2021-07-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       C-x 5 5 manual tweak
+
+       * doc/emacs/frames.texi (Creating Frames): Mention
+       other-frame-prefix function name.
+
+2021-07-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Update NEWS tagging for a couple entries
+
+2021-07-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add an index entry for outline-minor-mode-cycle
+
+       * doc/emacs/text.texi (Outline Mode): Document outline-minor-mode-cycle.
+
+2021-07-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Document outline-minor-mode-cycle in the manual.
+
+       * doc/emacs/text.texi (Outline Mode): Document outline-minor-mode-cycle.
+
+2021-07-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make `ffap-read-file-or-url' work again (to read URLs)
+
+       * lisp/ffap.el (ffap--url-file-handler): New function (bug#44822).
+       (ffap-read-file-or-url): Use it to allow switching between URLs
+       and files.
+
+2021-07-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add new user option python-forward-sexp-function
+
+       * lisp/progmodes/python.el (python-forward-sexp-function): New
+       user option (bug#41361).
+       (python-mode): Use it.
+
+2021-07-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Adjust how `replace-match' runs modification hooks
+
+       * src/editfns.c (Fsubst_char_in_region)
+       (Ftranslate_region_internal):
+       * src/cmds.c (internal_self_insert): Update callers.
+       * src/insdel.c (replace_range): Allow inhibiting
+       signal_after_change/update_compositions.
+       * src/lisp.h: Update.
+
+       * src/search.c (Freplace_match): Run the modification hooks at the
+       end instead of before adjusting point (bug#42424).
+
+2021-07-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Extend whitespace-empty to the end of the line
+
+       * lisp/whitespace.el (whitespace-empty): Restore Emacs 26 look by
+       extending the face (bug#42112).
+
+2021-07-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Fix `speedbar-directory-buttons' when using Tramp"
+
+       This reverts commit 5afad3918bc8816b74e8efcff9cc441785446aa6.
+
+       This patch can't possibly be correct, and it breaks the stated 
interface.
+
+2021-07-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Allow nil initializers in define-minor-mode"
+
+       This reverts commit 02cbb37de73d563149389615ee44741322007108.
+
+       This was mistakenly committed and doesn't really make much sense.
+
+2021-07-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't bind <mouse-2> and RET in *Help* buffers
+
+       * lisp/help-mode.el (help-mode-map): Remove key bindings for RET
+       and <mouse-2> (bug#49784).
+       (help-xref-stack, help-xref-forward-stack, help-xref-stack-item)
+       (help-make-xrefs): Fix doc strings -- these aren't used by
+       `help-follow', but by `help-follow-symbol'.
+       (help-follow-mouse, help-follow): Make obsolete.
+
+2021-07-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow nil initializers in define-minor-mode
+
+       * lisp/emacs-lisp/easy-mmode.el (define-minor-mode): Make the
+       meaning of :initialize nil and a missing :initialize the same.
+
+2021-07-31  Alan Third  <alan@idiocy.org>
+
+       Fix some macOS problems
+
+       * src/nsmenu.m (update_frame_tool_bar): Make sure the toolbar isn't
+       displayed when it's not supposed to be.
+       * src/nsterm.m ([EmacsView layoutSublayersOfLayer:]): Reinstate code
+       intended to prevent a crash when running redisplay.
+
+2021-07-31  Alan Third  <alan@idiocy.org>
+
+       Move parent frame setting code into EmacsWindow
+
+       * src/nsterm.m (ns_make_frame_visible):
+       (ns_set_parent_frame):
+       ([EmacsWindow initWithEmacsFrame:fullscreen:screen:]):  Use new method.
+       ([EmacsWindow setParentChildRelationships]): New method.
+
+2021-07-31  Alan Third  <alan@idiocy.org>
+
+       Move NS port toolbar handling to the window
+
+       * src/nsmenu.m (free_frame_tool_bar):
+       (update_frame_tool_bar): Remove wait_for_tool_bar and get the toolbar
+       from the window.
+       * src/nsterm.h (EmacsView): Remove toolbar and wait_for_tool_bar.
+       * src/nsterm.m (ns_update_begin):
+       ([EmacsView windowDidEnterFullScreen]):
+       ([EmacsView windowDidExitFullScreen]): Get the toolbar from the
+       window, not the view.
+       ([EmacsView dealloc]): Remove toolbar from view.
+       ([EmacsView createToolbar:]): Move method to EmacsWindow.
+       ([EmacsView initFrameFromEmacs:]): Don't create toolbar here any more.
+       ([EmacsView toolbar]): Remove method.
+       ([EmacsWindow initWithEmacsFrame:fullscreen:screen:]): Create toolbar 
here.
+       ([EmacsWindow createToolbar:]): Moved from EmacsView.
+       ([EmacsWindow dealloc]): Make sure we clean up the toolbar after
+       closing the window.
+
+2021-07-31  Alan Third  <alan@idiocy.org>
+
+       Fix macOS live resize drawing
+
+       * src/nsterm.m ([EmacsView layout]):
+       ([EmacsView layoutSublayersOfLayer:]): Rename layout to
+       layoutSublayersOfLayer.
+
+2021-07-31  Alan Third  <alan@idiocy.org>
+
+       Change NS port resize detection
+
+       * src/nsterm.m ([EmacsView windowDidResize:]): Remove function, it's
+       not performing a useful function any more.
+       ([EmacsView viewDidResize]):
+       ([EmacsView resizeWithOldSuperviewSize:]): Replace viewDidResize with
+       resizeWithOldSuperviewSize.
+       ([EmacsView initFrameFromEmacs:]): Remove the view resize notification
+       as we don't need it any more.
+
+2021-07-31  Alan Third  <alan@idiocy.org>
+
+       Tidy up NS port OS window handling
+
+       * src/nsterm.h (EmacsWindow): Move above EmacsView definition and add
+       new method definitions.
+       (EmacsView): Remove redundant bwidth variable, and change NSWindow to
+       EmacsWindow.
+       (EmacsFSWindow): Delete definition.
+       * src/nsterm.m (ns_set_undecorated): Rewrite to work in GNUstep using
+       the new OS window creating methods.
+       ([EmacsView initFrameFromEmacs:]): Move all NSWindow related code to
+       new init method in EmacsWindow, and use said method.
+       ([EmacsView toggleFullScreen:]): Use EmacsWindow instead of NSWindow.
+       ([EmacsWindow initWithEmacsFrame:]):
+       ([EmacsWindow initWithEmacsFrame:fullscreen:screen:]):
+       ([EmacsWindow borderWidth]): New methods.
+       (EmacsFSWindow): Remove implementation.
+
+2021-07-31  Alan Third  <alan@idiocy.org>
+
+       Simplify macOS drawing code
+
+       Convert EmacsSurface into a CALayer subclass so we can use the
+       built-in relationships.  Also simplify the macOS versioning code.
+       This will result in more warnings on older versions of macOS but makes
+       reading the code easier.
+
+       * configure.ac: Add QuartzCore framework.
+       * src/nsterm.h (NS_DRAW_TO_BUFFER): Remove define and all references.
+       (EmacsSurface, EmacsLayer): Rename EmacsSurface to EmacsLayer and
+       modify the definition to fit the new function.
+       * src/nsterm.m (ns_update_begin):
+       (ns_update_end):
+       (ns_focus):
+       (ns_unfocus): Use the new overridden lockFocus and unlockFocus and
+       simplify the frame management.
+       ([EmacsView dealloc]):
+       ([EmacsView viewDidResize:]):Don't explicitly release surfaces.
+       ([EmacsView initFrameFromEmacs:]): Move the layer code to after the
+       NSWindow has been created as creating the layer now relies on some of
+       it's properties.
+       ([EmacsView makeBackingLayer]): New function.
+       ([EmacsView lockFocus]):
+       ([EmacsView focusOnDrawingBuffer]): Rename to lockFocus.
+       ([EmacsView unlockFocus]):
+       ([EmacsView unfocusDrawingBuffer]): Rename to unlockFocus.
+       ([EmacsView windowDidChangeBackingProperties]): Don't explicitly
+       release surfaces but reset EmacsLayer properties.
+       ([EmacsView layout]):
+       ([EmacsView viewWillDraw]): Rename to layout.
+       ([EmacsView wantsUpdateLayer]): Remove function and change all callers
+       to [EmacsView wantsLayer].
+       (EmacsSurface, EmacsLayer): Rename to EmacsLayer.
+       ([EmacsSurface getSize]):
+       ([EmacsSurface initWithSize:ColorSpace:Scale:]): Remove methods.
+       ([EmacsSurface initWithColorSpace:]):
+       ([EmacsLayer checkDimensions]):
+       ([EmacsLayer releaseSurfaces]):
+       ([EmacsLayer display]): New functions.
+       * src/nsterm.m ([EmacsLayer dealloc]): Use releaseSurfaces.
+       ([EmacsSurface getContext]): Automatically detect frame property
+       changes and clear the cache if required.  Use built-in CALayer
+       properties where available.
+       ([EmacsLayer copyContentsTo:]): Use [CALayer contents] as source.
+
+2021-07-31  Eli Zaretskii  <eliz@gnu.org>
+
+       * src/fontset.c (check_fontset_name): A better fix for bug#49782.
+
+2021-07-30  Adam Porter  <adam@alphapapa.net>
+
+       * lisp/emacs-lisp/cl-macs.el: Add cl-type pattern
+
+       * lisp/emacs-lisp/cl-macs.el:
+       ((pcase-defmacro type)): Add 'cl-type' pattern.
+
+       * test/lisp/emacs-lisp/pcase-tests.el (pcase-tests-cl-type): Add test.
+
+       * doc/lispref/control.texi (pcase Macro): Update manual.
+
+       With thanks to Stefan Monnier and Eli Zaretskii for their guidance.
+
+2021-07-30  Eli Zaretskii  <eliz@gnu.org>
+
+       * src/fontset.c (check_fontset_name): Fix last change.
+
+2021-07-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid segfault when set-fontset-font is called from non-GUI frames
+
+       * src/fontset.c (check_fontset_name): Avoid crashes if this is
+       called from a non-GUI frame.  (Bug#49782)
+
+2021-07-30  Michael Albinus  <michael.albinus@gmx.de>
+
+       Change Tramp version to "2.5.2-pre"
+
+       * doc/misc/trampver.texi:
+       * lisp/net/trampver.el: Change version to "2.5.2-pre".
+
+2021-07-30  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Make fileloop skip missing files
+
+       * lisp/fileloop.el (fileloop-next-file): If a file doesn't exist,
+       skip to the next one (bug#44979).
+
+2021-07-30  Maxim Nikulin  <manikulin@gmail.com>  (tiny change)
+
+       Tweak previous mailcap-view-file change
+
+       * lisp/net/mailcap.el (mailcap-view-file): Remove the :noquery t
+       mistakenly added (bug#12972).
+
+2021-07-30  k3tu0isui  <k3tu0isui@gmail.com>  (tiny change)
+
+       Fix problem when switching between different prolog versions
+
+       * lisp/progmodes/prolog.el (run-prolog): Make switching between
+       different prolog systems work more reliably (bug#45795).
+
+       * lisp/progmodes/prolog.el (prolog-ensure-process): Don't start a
+       new process if one already exists.
+
+2021-07-30  Mattias Engdegård  <mattiase@acm.org>
+
+       Simplify lexical let-optimisations
+
+       Ensure in cconv that let-bindings have the normal form (VAR EXPR)
+       where VAR is a valid variable name, so that we don't need to keep
+       re-checking this all the time in the optimiser.
+
+       * lisp/emacs-lisp/byte-opt.el
+       (byte-optimize-enable-variable-constprop)
+       (byte-optimize-warn-eliminated-variable): Remove; these were mainly
+       used for debugging.
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize-let-form):
+       Assume normalised let-bindings (with lexical-binding).
+       Stop using the variables removed above.
+       * lisp/emacs-lisp/cconv.el (cconv-convert): Ensure normalised
+       let-bindings.  Malformed bindings are dropped after warning.
+
+       remove byte-optimize-warn-eliminated-variable
+
+2021-07-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Ensure that recover-file doesn't leave stale auto-save files behind
+
+       * lisp/files.el (recover-file): Don't leave stale auto-save files
+       behind after crash recovery (bug#11331).
+
+2021-07-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow shell PROMPT strings to have ANSI codes
+
+       * lisp/comint.el (comint-output-filter): Don't overwrite ANSI
+       codes from the prompt command (bug#11883).
+
+2021-07-30  Max Nikulin  <manikulin@gmail.com>  (tiny change)
+
+       mailcap.el: Avoid xdg-open silent failure
+
+       * lisp/net/mailcap.el (mailcap-view-file): Use 'pipe :connection-type
+       instead of 'pty to prevent killing of background process on handler
+       exit.  Avoid regression similar to Bug#44824.
+
+       Problem happens only in some desktop environments where mailcap handler
+       launches actual viewer (as defined in .desktop files and obtained from
+       mimeapps.list) in background.  E.g. xdg-open invokes "gio open" or
+       kde-open5 for Gnome or KDE accordingly and these handlers launch e.g.
+       eog or okular in background.  As soon as main process exits, temporary
+       terminal session created by `start-process-shell-command' is terminated.
+       As a result background processes receive SIGHUP.
+
+       Previously command were executed with no buffer as well, so the change
+       does not affect "needsterminal" and "copiousoutput" mailcap features,
+       they are not supported as earlier.
+
+       If main process of the handler fails then show a message with exit
+       reason.  Output (including error messages) is ignored as before.
+       Gtk applications tend to report significant amount of failed asserts
+       hardly informative for majority of users (bug#12972).
+
+2021-07-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix case insensitivity in `read-file-name'
+
+       * lisp/minibuffer.el (read-file-name-default): Make `read-file-name'
+       actually respect `read-file-name-completion-ignore-case' (bug#14340).
+
+2021-07-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix issue with mml-preview from outside Gnus
+
+       * lisp/gnus/gnus-art.el (gnus-mime-display-alternative): Be more
+       resilient when running from outside Gnus.
+
+2021-07-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Work around long-standing seq.el compilation warning
+
+       * lisp/emacs-lisp/seq.el (seq-contains): When using cl-defgeneric
+       to define an obsolete function, it'll complain about it being
+       obsolete.  Suppress that warning.  (Should probably be fixed in
+       cl-defgeneric instead.)
+
+2021-07-30  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Remove a redundant let-binding from Ispell
+
+       Recent optimizer changes revealed a case-fold-search binding in
+       Ispell that was made redundant in the revision of 2020-11-03
+       "Simplify ispell-check-version’s use of -vv flag".
+
+       * lisp/textmodes/ispell.el (ispell-check-version): Remove no-op
+       binding of case-fold-search.
+
+2021-07-30  Michael Albinus  <michael.albinus@gmx.de>
+
+       * etc/NEWS: Tramp supports authentication via yubikey now.  Fix typos.
+
+2021-07-30  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix bug#49773 in Tramp
+
+       * lisp/net/tramp.el (tramp-handle-find-backup-file-name)
+       (tramp-handle-lock-file, tramp-handle-make-auto-save-file-name):
+       Check security hole only if action is in progress.  (Bug#49773)
+
+2021-07-30  Mattias Engdegård  <mattiase@acm.org>
+
+       Optimise let and let* whose body is constant or the last variable
+
+       Simplify  (let ((X1 E1) ... (Xn En)) Xn)
+             =>  (progn E1 ... En)
+
+       and       (let* ((X1 E1) ... (Xn En)) Xn)
+             =>  (let* ((X1 E1) ... (Xn-1 En-1)) En)
+
+       and similarly the case where the body is a constant, extending a
+       previous optimisation that only applied to the constant nil.
+       This reduces the number of bound variables, shortens the code, and
+       enables further optimisations.
+
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize-letX): Rewrite using
+       `pcase` and add the aforementioned transformations.
+       * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-tests--test-cases):
+       Add test cases.
+
+2021-07-30  Mattias Engdegård  <mattiase@acm.org>
+
+       Move warnings about bad let-bindings from source optimiser to cconv
+
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize-let-form): Move warnings...
+       * lisp/emacs-lisp/cconv.el (cconv-convert): ...here, which is an
+       overall better place (closer to the front-end).
+
+2021-07-30  Mattias Engdegård  <mattiase@acm.org>
+
+       Optimise prog1 better
+
+       Rewrite (prog1 CONST FORMS...) => (progn FORMS... CONST)
+       where CONST is a compile-time constant, because putting the value last
+       allows the lapcode peephole pass to do important improvements like
+       branch elimination.  Also use progn instead of prog1 for `ignore`.
+
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker):
+       New `prog1` and `ignore` transforms.
+
+2021-07-30  Mattias Engdegård  <mattiase@acm.org>
+
+       Elide lexical variables in for-effect context in source optimiser
+
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker):
+       Remove for-effect uses of lexical variables.  We previously relied on
+       this being done by the lapcode peephole optimiser but at source level
+       it enables more optimisation opportunities.
+       Keywords are elided for the same reason.
+
+2021-07-30  Mattias Engdegård  <mattiase@acm.org>
+
+       Single source optimiser entry point
+
+       Make the optimiser aware of lexical arguments.  Otherwise we cannot
+       know for sure whether a variable is lexical or dynamic during
+       traversal.
+
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize-one-form): New optimiser
+       entry point, replacing the recursive byte-optimize-form.
+       * lisp/emacs-lisp/bytecomp.el (byte-optimize-one-form): Autoload.
+       (byte-compile-keep-pending, byte-compile-top-level):
+       Use byte-optimize-one-form.
+
+2021-07-30  Stephen Gildea  <stepheng+emacs@gildea.com>
+
+       mh-junk: replace color-based terms with descriptive words
+
+       * lisp/mh-e/*.el: "whitelist" -> "allowlist" and "blacklist" -> 
"blocklist".
+       * doc/misc/mh-e.texi: update manual to match.
+       * lisp/mh-e/mh-folder.el: Change the binding of
+       'mh-junk-allowlist' to 'J a'.  Add a compatibility binding for the
+       old 'J w'.
+       * lisp/mh-e/mh-scan.el (mh-note-allowlisted): Change char from 'W' to 
'A'.
+       * lisp/mh-e/mh-junk.el: Rename 'mh-blacklist-a-msg' to
+       'mh-junk-blocklist-a-msg', adding the missing "junk-" to the
+       function name.
+
+2021-07-29  Nick Gasson  <nick@nickg.me.uk>  (tiny change)
+
+       Avoid errors in rmailsum for messages without "From"
+
+       * lisp/mail/rmailsum.el (rmail-header-summary): Be defensive about
+       the presence of the "From" header.  (Bug#49770)
+
+2021-07-29  dickmao  <none>
+
+       Follow-up toggle-subscription name change
+
+       * doc/misc/gnus.texi (Subscription Commands): Refer to correct function.
+       * lisp/gnus/gnus-group.el (gnus-group-unsubscribe-current-group):
+       Make backwards-compatible.
+       (gnus-group-unsubscribe-group):
+       Make backwards-compatible (bug#49768).
+
+2021-07-29  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Fix printing of multiple items in one group without line numbers
+
+       * lisp/progmodes/xref.el (xref--insert-xrefs):
+       Fix printing of multiple items in one group without line numbers
+       (mentioned in bug#49731).
+
+2021-07-28  dickmao  <none>
+
+       Rename Gnus -unsubscribe-group commands to -toggle-subscription
+
+       * doc/emacs/misc.texi (Gnus Group Buffer): Document change.
+       * doc/misc/gnus.texi (Subscription Commands): Document change.
+       (Browse Foreign Server): Document change.
+       * lisp/gnus/gnus-group.el (gnus-group-mode-map):
+       Unsubscribe is not subscribe.
+       (gnus-group-sub-map): Unsubscribe is not subscribe.
+       (gnus-group-make-menu-bar): Unsubscribe is not subscribe.
+       (gnus-group-tool-bar-gnome): Unsubscribe is not subscribe.
+       (gnus-group-mode): Unsubscribe is not subscribe.
+       (gnus-group-unsubscribe): Refactor.
+       (gnus-group-subscribe): Refactor.
+       (gnus-group-unsubscribe-current-group): Define obsolete alias.
+       (gnus-group-unsubscribe-group): Define obsolete alias.
+       (gnus-group-toggle-subscription-at-point): Refactor.
+       (gnus-group-set-subscription-at-point): Refactor.
+       (gnus-group-toggle-subscription): Refactor.
+       (gnus-group-set-subscription): Refactor.
+       * lisp/gnus/gnus-srvr.el (gnus-browse-mode-map):
+       Unsubscribe is not subscribe.
+       (gnus-browse-make-menu-bar): Unsubscribe is not subscribe.
+       (gnus-browse-mode): Document the change.
+       (gnus-browse-unsubscribe-current-group): Define obsolete alias.
+       (gnus-browse-unsubscribe-group): Define obsolete alias.
+       (gnus-browse-toggle-subscription-at-point): Unsubscribe is not 
subscribe.
+       (gnus-browse-toggle-subscription): Unsubscribe is not subscribe
+       (bug#49759).
+
+2021-07-28  Juri Linkov  <juri@linkov.net>
+
+       Improve :type of defcustom 'context-menu-functions' and add 
documentation.
+
+       * doc/emacs/frames.texi (Menu Mouse Clicks): Describe context-menu-mode
+       and context-menu-functions instead of suggesting global-set-key.
+       (Menu Bars): Mention context-menu-mode and context-menu-functions.
+
+       * etc/NEWS: Add context-menu-mode and context-menu-functions.
+
+       * lisp/mouse.el (context-menu-functions): Use :type with 
repeat/function-item.
+       (context-menu-minor, context-menu-undo, context-menu-region)
+       (context-menu-ffap): Improve docstrings displayed for function-item in
+       defcustom of context-menu-functions.
+
+2021-07-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve mode-line-position-column-format manual entry
+
+       * doc/lispref/modes.texi (Mode Line Variables): Mention %C, and
+       don't mention the obsolete column-number-indicator-zero-based
+       variable.
+
+2021-07-28  Juri Linkov  <juri@linkov.net>
+
+       * lisp/progmodes/gud.el: Add prefix 'gud-' to repeat-map variables 
(bug#49632)
+
+       * lisp/progmodes/gud.el (gud-sdb-repeat-map, gud-dbx-repeat-map)
+       (gud-xdb-repeat-map, gud-perldb-repeat-map, gud-pdb-repeat-map)
+       (gud-guiler-repeat-map, gud-jdb-repeat-map): Rename with prefix 'gud-'.
+
+2021-07-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make byte-recompile-directory less brittle
+
+       * lisp/emacs-lisp/bytecomp.el (byte-recompile-directory): Don't
+       interpret files named "~" as $HOME (bug#49758).
+
+2021-07-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve mode-line-position-column-format doc string
+
+       * lisp/bindings.el (mode-line-position-column-format): Improve doc
+       string.
+       (mode-line-position-line-format): Point to
+       `mode-line-position-column-line-format'.
+
+2021-07-28  Kévin Le Gouguec  <kevin.legouguec@gmail.com>
+
+       Improve file-name-concat NEWS entry
+
+2021-07-28  Philip Kaludercic  <philipk@posteo.net>
+
+       Replace cl-c[ad]+r with regular c[ad]+r
+
+       * lisp/net/rcirc.el (rcirc-make-trees): Replace cl-cdadr with cdadr
+       (rcirc-handler-333): Replace cl-cadddr with cadddr
+       (rcirc-authenticate): Replace cl-cdddr with cdddr
+
+2021-07-28  Michael Albinus  <michael.albinus@gmx.de>
+
+       Display yubikey message properly in Tramp
+
+       * lisp/net/tramp.el (tramp-action-show-and-confirm-message):
+       Display message properly.
+
+2021-07-27  Brian Leung  <leungbk@mailfence.com>
+
+       Ensure that gud commands for non-GDB debuggers are handled by 
repeat-mode
+
+       * lisp/progmodes/gud.el (sdb-repeat-map): Define.
+       (sdb): Set repeat-mode property to the symbol corresponding to the
+       repeat map.
+       (dbx-repeat-map): Define.
+       (dbx): Set repeat-mode property to the symbol corresponding to the
+       repeat map.
+       (xdb-repeat-map): Define.
+       (xdb): Set repeat-mode property to the symbol corresponding to the
+       repeat map.
+       (perldb-repeat-map): Define.
+       (perldb): Set repeat-mode property to the symbol corresponding to the
+       repeat map.
+       (pdb-repeat-map): Define.
+       (pdb): Set repeat-mode property to the symbol corresponding to the
+       repeat map.
+       (guiler-repeat-map): Define.
+       (guiler): Set repeat-mode property to the symbol corresponding to the
+       repeat map.
+       (jdb-repeat-map): Define.
+       (jdb): Set repeat-mode property to the symbol corresponding to the
+       repeat map.  (Bug#49632)
+
+2021-07-27  Brian Leung  <leungbk@mailfence.com>
+
+       Ensure that gud commands for M-x gdb are handled by repeat-mode
+
+       * lisp/progmodes/gud.el (gud-gdb-repeat-map): Rename from
+       gud-repeat-map, and populate at the top-level.
+       (gud-set-repeat-map-property): Introduce this helper function for
+       setting the repeat-map property.
+       (gud-gdb): Use the gud-set-repeat-map-property function to assign the
+       repeat-map property.
+
+       * lisp/progmodes/gdb-mi.el (gdb): Use the gud-set-repeat-map-property
+       function to assign the repeat-map property.
+
+       Because different debugging tools may not support all of the gud-foo
+       functions, we reassign the repeat-map property within the respective
+       commands, as opposed to the top level of the files, to ensure that the
+       repeat-map property is reassigned each time to a symbol corresponding
+       to the active debugging tool.  (Bug#49632)
+
+2021-07-27  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el (tab-bar-format-global): Use string-trim-right 
(bug#30056).
+
+2021-07-27  Juri Linkov  <juri@linkov.net>
+
+       Add new context-menu options for menus "File At Point" and "Version 
Control".
+
+       * lisp/mouse.el (context-menu-functions): Add more options.
+       (context-menu-global, context-menu-local): Fix separators.
+       (context-menu-minor): Rewrite to support list of submenus.
+       (context-menu-vc, context-menu-ffap): New functions.
+       (context-menu-undo, context-menu-region): Fix separators.
+
+       * lisp/dired.el (dired-context-menu):
+       * lisp/info.el (Info-context-menu):
+       * lisp/net/goto-addr.el (goto-address-context-menu):
+       * lisp/net/eww.el (eww-context-menu):
+       * lisp/progmodes/prog-mode.el (prog-context-menu):  Fix separators.
+
+2021-07-27  Philip Kaludercic  <philipk@posteo.net>
+
+       Remove removal of text properties from rcirc-buffer-alist keys
+
+       * lisp/net/rcirc.el (rcirc-mode): Remove set-text-properties call
+
+2021-07-27  Michael Albinus  <michael.albinus@gmx.de>
+
+       Mark all autorevert tests as unstable on Cygwin (bug#49665)
+
+       * test/lisp/autorevert-tests.el: Mark all tests as unstable on
+       Cygwin (bug#49665).
+
+2021-07-27  Philip Kaludercic  <philipk@posteo.net>
+
+       Fix checkdoc issues
+
+       * lisp/net/rcirc.el (rcirc-finished-sasl): Add period.
+       (rcirc-mode): Expand docstring.
+       (rcirc-handler-900): Document sender and process
+
+2021-07-27  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix mistake in switch-case generation of `null` (bug#49746)
+
+       Reported by Gregor Zattler.
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile--cond-switch-prefix):
+       Be more careful in the selection of equality.
+       * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-tests--test-cases):
+       Add test case.
+
+2021-07-27  Philip Kaludercic  <philipk@posteo.net>
+
+       Update rcirc-buffer-alist after receiving NICK
+
+       * lisp/net/rcirc.el (rcirc-handler-NICK): Remove old nick and add new 
nick
+
+2021-07-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Make revert-buffer preserve buffer-readedness"
+
+       This reverts commit fcae435f598471a2911641412125c5ac4f73559f.
+
+       This leads to problems when reverting from a file that's changed
+       readedness externally.
+
+2021-07-27  Philip Kaludercic  <philipk@posteo.net>
+
+       Fix TOPIC command
+
+       * lisp/net/rcirc.el (topic): Add target argument.
+
+2021-07-27  Michael Albinus  <michael.albinus@gmx.de>
+
+       Final tweak for Tramp's yubikey detection
+
+       * lisp/net/tramp.el (tramp-yubikey-regexp)
+       (tramp-action-show-and-confirm-message): Expect also "\n".
+
+2021-07-27  Alan Third  <alan@idiocy.org>
+
+       Convert fringe bitmaps to vectors on NS port
+
+       Unfortunately *step doesn't support masks for bitmap images so
+       changing the colors of fringe bitmaps is awkward.  We can work around
+       this by converting the bitmap into an NSBezierPath and drawing it in
+       the required color.
+
+       * src/nsterm.m (ns_define_fringe_bitmap):
+       (ns_destroy_fringe_bitmap): New functions
+       (ns_draw_fringe_bitmap): Display the NSBezierPath.
+       * src/nsimage.m
+       ([EmacsImage initFromXBM:width:height:fg:bg:reverseBytes:]): Remove
+       variable that's there to allow us to easily modify the XBM colors.
+       ([EmacsImage setXBMColor:]): Remove method.
+
+2021-07-27  Alan Third  <alan@idiocy.org>
+
+       Fix NS inset rectangle corners
+
+       * src/nsterm.m (ns_draw_relief): Use a path to draw the mitered
+       corners instead of rectangles.
+
+2021-07-27  Alan Third  <alan@idiocy.org>
+
+       Simplify NS sizing and positioning code
+
+       * src/nsterm.m (ns_set_offset): Unify the two branches into one, most
+       of the code is the same.
+       (ns_set_window_size): Use the provided tools to calculate the window
+       size instead of doing it ourselves.
+
+2021-07-27  Alan Third  <alan@idiocy.org>
+
+       * src/nsterm.m (ns_set_frame_alpha): Enable alpha on GNUstep.
+
+2021-07-26  Alan Third  <alan@idiocy.org>
+
+       Fix image crash on macOS (bug#49688)
+
+       * src/nsimage.m ([EmacsImage allocInitFromFile:]): Use isValid to
+       check whether the image is valid instead of generating a tiff.
+
+2021-07-26  Mattias Engdegård  <mattiase@acm.org>
+
+       Adjust grep-mode end-col function return value
+
+       * lisp/progmodes/grep.el (grep-regexp-alist): Adjust the return value
+       from the END-COL function by one since it is now (after fixing
+       bug#49624) inclusive.  Found by Juri Linkov.
+
+2021-07-26  Michael Albinus  <michael.albinus@gmx.de>
+
+       Some minor improvements for share handling in tramp-gvfs.el
+
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-connection-mounted-p):
+       Set "share" connection property if the mount spec offers it.
+       (tramp-gvfs-handle-get-remote-uid)
+       (tramp-gvfs-handle-get-remote-gid): Use it.
+
+2021-07-26  Michael Albinus  <michael.albinus@gmx.de>
+
+       Adapt Tramp for yubikey
+
+       * lisp/net/tramp.el (tramp-yubikey-regexp): Adapt value.
+       (tramp-trace-functions): Adapt docstring.
+       (tramp-process-action-regexp): New defvar.
+       (tramp-action-password, tramp-process-one-action): Use it.
+       (tramp-action-show-and-confirm-message): Rewrite.
+
+2021-07-26  Michael Albinus  <michael.albinus@gmx.de>
+
+       Adapt tramp-sudoedit.el for better testing
+
+       * doc/misc/tramp.texi (Bug Reports): Revert last change.  Mention
+       exception for sudoedit.
+
+       * lisp/net/tramp-sudoedit.el (tramp-sudoedit-send-command):
+       Let-bind `tramp-cache-read-persistent-data' for better password 
handling.
+
+2021-07-25  Mattias Engdegård  <mattiase@acm.org>
+
+       Describe changes to the occur-mode implementation in NEWS
+
+       * etc/NEWS: Mention change to the `occur-target` property (bug#39121).
+
+2021-07-25  Glenn Morris  <rgm@gnu.org>
+
+       Fix recent gdb-mi change
+
+       * lisp/progmodes/gdb-mi.el (gdb-registers-filter-pattern-list):
+       Fix type.
+
+2021-07-25  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       d0625dc553 (origin/emacs-27) ; One more change in back.texi.
+       06d0a66e57 ; Yet another last-minute change in Emacs manual for printing
+
+2021-07-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       Add instructions for Tramp bug reports
+
+       * doc/misc/tramp.texi (Bug Reports): Describe how to use password
+       cache with "emacs -Q".
+
+2021-07-25  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix tex-validate-buffer
+
+       * lisp/textmodes/tex-mode.el (tex-validate-buffer):
+       Set `inhibit-read-only` around all modifications of the
+       read-protected *Occur* buffer (bug#19326).
+       Add the `occur-match` property, and adjust the extent of the
+       `occur-target` property, so that next-error and previous-error work
+       correctly (bug#39121).
+
+2021-07-25  Mattias Engdegård  <mattiase@acm.org>
+
+       Add back occur-mode-find-occurrence for compatibility (bug#39121)
+
+       * lisp/replace.el (occur-mode-find-occurrence):
+       Put back (an emulation of) the previously removed function.
+       It is used internally in eshell and in some external code.
+
+       Problem found by Basil Contovounesios.
+
+2021-07-25  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix compilation of xftfont.c with old fontconfig
+
+       * src/xftfont.c (FC_LCD_FILTER): Define if undefined, for older
+       versions of fontconfig.  This was mistakenly deleted 2 years ago.
+       (Bug#49722)
+
+2021-07-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix extended attributes for Tramp's sudoedit method (bug#49724)
+
+       * lisp/net/tramp-sh.el (tramp-do-copy-or-rename-file):
+       * lisp/net/tramp-sudoedit.el (tramp-sudoedit-do-copy-or-rename-file):
+       Remove compat code for `{set-}file-extended-attributes'.
+       (tramp-sudoedit-handle-write-region): Handle extended attributes.
+       (Bug#49724)
+
+       * test/lisp/net/tramp-tests.el (tramp-test25-file-selinux):
+       Fix test for sudoedit method.
+
+2021-07-25  Kévin Le Gouguec  <kevin.legouguec@gmail.com>
+
+       * etc/NEWS: Fix renaming of directory-append.
+
+2021-07-25  Christopher League  <league@contrapunctus.net>
+
+       When bookmark is overwritten, unfontify its previous position
+
+       * lisp/bookmark.el (bookmark-store): When the bookmark-fontify option
+       is non-nil, setting or jumping to bookmarks will colorize them using
+       `bookmark-face'.  With this change, overwriting a bookmark will remove
+       the fontification at its former position (bug#49725).
+
+2021-07-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       Use `file-name-concat' in Tramp
+
+       * lisp/net/tramp-compat.el (tramp-compat-file-name-concat):
+       New defalias.
+
+       * lisp/net/tramp.el (tramp-handle-expand-file-name):
+       * lisp/net/tramp-adb.el
+       (tramp-adb-handle-directory-files-and-attributes):
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-handle-expand-file-name):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-expand-file-name):
+       * lisp/net/tramp-smb.el (tramp-smb-handle-expand-file-name):
+       * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-expand-file-name):
+       Use it.
+
+2021-07-25  Mattias Engdegård  <mattiase@acm.org>
+
+       Don't squash markers in occur-edit-mode
+
+       * lisp/replace.el (occur-after-change-function): Instead of replacing
+       the whole line being edited, use shrink-wrapping to replace the
+       smallest interval encompassing the change.  That way, we avoid
+       disturbing markers (such as occur highlighting locations) in the line;
+       they would otherwise all be forced to the beginning.
+
+2021-07-25  Mattias Engdegård  <mattiase@acm.org>
+
+       Keep track of match extents in occur-mode (bug#39121)
+
+       Use the `occur-target` text property to keep track of the extents of
+       all matches on each line instead of just the start of the first match.
+       Doing so allows us to highlight all matches when jumping to a matching
+       line instead of just the first one, and it works in a more principled
+       way.  It also removes compatibility problems that were introduced with
+       occur-highlight-regexp.
+
+       For compatibility with code that populate their own occur-mode
+       buffers, we still accept `occur-target` properties with a single
+       marker as value.
+
+       * lisp/replace.el (occur-highlight-regexp, occur-highlight-overlay):
+       Remove.
+       (occur-highlight-overlays): New.
+       (occur--targets-start): New.
+       * lisp/replace.el (occur-after-change-function):
+       (occur-mode-find-occurrence): Replace with...
+       (occur-mode--find-occurrences): ...this function that returns the
+       whole `occur-target` property value.
+       (occur-mode-goto-occurrence, occur-mode-goto-occurrence-other-window)
+       (occur-goto-locus-delete-o, occur-mode-display-occurrence)
+       (occur-engine): Adjust to new property format.
+       (occur--highlight-occurrence): Replace with...
+       (occur--highlight-occurrences): ...this function that takes
+       the `occur-target` property value as argument.
+       (occur-1): Don't use `occur-highlight-regexp`.
+       * test/lisp/replace-tests.el (occur-highlight-occurrence):
+       Adapt to new property format.
+
+2021-07-25  Arthur Miller  <arthur.miller@live.com>  (tiny change)
+
+       Support  '--group-directories-first' in ls-lisp.el
+
+       * lisp/ls-lisp.el (ls-lisp--sanitize-switches): New function.
+       (ls-lisp--insert-directory): Support '--group-directories-first'.
+       Call 'ls-lisp--sanitize-switches' to convert long options to short
+       forms and remove unsupported long options.  Update the doc string.
+
+2021-07-25  Peter Feigl  <peter.feigl@nexoid.at>
+
+       Add commands to move to next/previous column in tabulated-list-mode
+
+       * lisp/emacs-lisp/tabulated-list.el (tabulated-list-mode-map): Add
+       keybindings M-left and M-right.
+       (tabulated-list-previous-column tabulated-list-next-column): Implement
+       commands (bug#44711).
+
+2021-07-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Rename directory-append to file-name-concat
+
+       * src/fileio.c (Ffile_name_concat):
+       * lisp/files.el (move-file-to-trash):
+       * lisp/emacs-lisp/shortdoc.el (file-name):
+       * doc/lispref/files.texi (Directory Names): Rename
+       `directory-append' to `file-name-concat'.
+
+2021-07-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow empty elements in directory-append
+
+       * doc/lispref/files.texi (Directory Names): Document it.
+       * src/fileio.c (Fdirectory_append): Allow empty elements.
+
+2021-07-24  Mattias Engdegård  <mattiase@acm.org>
+
+       Disable delay and ding in replace-tests
+
+       * test/lisp/replace-tests.el (replace-tests-with-undo):
+       When testing the "U" (undo all changes) option, the code will delay
+       and ding which is obnoxious in an automated test.
+       Disabling that makes the test quiet and about 150 times faster.
+
+2021-07-24  Yuan Fu  <casouri@gmail.com>
+
+       Add filter to GDB's register buffer
+
+       * lisp/progmodes/gdb-mi.el (gdb-registers-enable-filter)
+       (gdb-registers-filter-pattern-list): New custom options.
+       (gdb-header-click-event-handler, gdb-registers-toggle-filter): New
+       functions.
+       (gdb-header-click-event-handler): Only add a register if it passes the
+       filter.
+       (gdb-registers-mode-map): New keybinding for toggling the filter.
+       (gdb-registers-header): New buttons on the header line for the
+       filter (bug#39179).
+
+2021-07-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Really convert to multibyte in Fdirectory_append
+
+       * src/fileio.c (Fdirectory_append): Fix check for whether we need
+       to convert to multibyte.
+       (Fdirectory_append):
+
+2021-07-24  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix last commit in tramp.el
+
+2021-07-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix Fdirectory_append check for whether strings have to be converted
+
+       * src/coding.c (string_ascii_p): Make it non-static.
+
+       * src/fileio.c (Fdirectory_append): Fix check for whether we need
+       to convert to multibyte.
+
+       * src/fns.c (string_ascii_p): Remove copy.
+
+       * src/lisp.h: Declare string_ascii_p.
+
+2021-07-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Set the normal-erase-is-backspace variable from Customize
+
+       * lisp/simple.el (normal-erase-is-backspace): Always set the
+       variable so that Customize is up-to-date (bug#49593).
+
+2021-07-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak Fdirectory_append slightly
+
+       * src/fileio.c (Fdirectory_append): Make the xfree condition more
+       robust.
+
+2021-07-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve directory-append manual entry
+
+       * doc/lispref/files.texi (Directory Names): Mention zero-length
+       restriction.
+
+2021-07-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak Fdirectory_append for efficiency
+
+       * src/fileio.c (Fdirectory_append): Make slightly more efficient.
+
+2021-07-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Extend directory-append to take an arbitrary number of components
+
+       * doc/lispref/files.texi (Directory Names): Document it.
+       * lisp/emacs-lisp/shortdoc.el (file-name): Add new example.
+
+       * src/fileio.c (Fdirectory_append): Change the function to take an
+       arbitrary number of components.
+
+2021-07-24  Philip Kaludercic  <philipk@posteo.net>
+
+       Ensure that rcirc-buffer-alist has no text properties
+
+       * lisp/net/rcirc.el (rcirc-mode): Remove text properties from
+         rcirc-buffer-alist keys
+
+2021-07-24  Michael Albinus  <michael.albinus@gmx.de>
+
+       Add Tramp support for yubikey (bug#49714)
+
+       * lisp/net/tramp.el (tramp-yubikey-regexp): New defcustom.
+       (tramp-action-show-and-confirm-message): New defun.
+
+       * lisp/net/tramp-sh.el (tramp-actions-before-shell)
+       (tramp-actions-copy-out-of-band): Add `tramp-yubikey-regexp' action.
+
+2021-07-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Adjust tab-bar to the new mode-line-misc-info value
+
+       * lisp/tab-bar.el (tab-bar--define-keys): Adjust to the new
+       default value for `mode-line-misc-info'.
+
+2021-07-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove duplicated NEWS entries
+
+2021-07-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make 's' in *Help* work for Lisp-defined variables again
+
+       * lisp/help-fns.el (describe-variable): Make the `s' command work
+       for Lisp-defined variables again (bug#39121).
+
+2021-07-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix problem when moving files called ~ to the trash
+
+       * lisp/files.el (move-file-to-trash): Construct the trash file
+       name safely (bug#49711).  This makes (move-file-to-trash "/tmp/~")
+       etc work.
+
+2021-07-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add new function `directory-append'
+
+       * doc/lispref/files.texi (Directory Names): Document it, and
+       remove the concat-based file concatenation description.
+       * lisp/emacs-lisp/shortdoc.el (file-name): Add.  And add more
+       expand-file-name examples.
+
+       * src/fileio.c (Fdirectory_append): New function.
+
+2021-07-24  Philip Kaludercic  <philipk@posteo.net>
+
+       Generate no message when activating rcirc-omit-mode
+
+       * lisp/net/rcirc.el (rcirc-omit-mode): Remove (message ...) expressions
+
+2021-07-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make the test for auto-mode-alist from .dir-local.el stricter
+
+       * lisp/files.el (set-auto-mode--dir-local-valid-p): New function.
+       (set-auto-mode--apply-alist): Use it as a stricter test.
+
+2021-07-23  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve recently added documentation
+
+       * etc/NEWS: Improve wording of a recently added entry.
+
+       * doc/misc/smtpmail.texi (Queued delivery): Fix typo.
+
+2021-07-23  Alex Bochannek  <alex@bochannek.com>
+
+       Fix bug#49699
+
+       * lisp/net/tramp-sh.el (tramp-scp-strict-file-name-checking):
+       Adapt check for macOS.  (Bug#49699)
+
+2021-07-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix typo in set-auto-mode--apply-alist
+
+       * lisp/files.el (set-auto-mode--apply-alist): Fix typo in
+       ad5faa424a5 (bug#49712).
+
+2021-07-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow storing SMTP variables when queueing mail
+
+       * doc/misc/smtpmail.texi (Queued delivery): Document it (bug#49709).
+
+       * lisp/gnus/message.el (message-multi-smtp-send-mail): Store
+       variables.
+
+       * lisp/mail/smtpmail.el (smtpmail-queue-mail): Mention it.
+       (smtpmail-store-queue-variables): New variable.
+       (smtpmail-send-it): Store SMTP variables if requested.
+       (smtpmail-send-queued-mail): Restore variables.
+
+2021-07-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix do-auto-fill thinko introduced earlier today
+
+       * lisp/simple.el (do-auto-fill): `current-fill-column' returns nil
+       to signal that we should fill.
+
+2021-07-23  Tom Tromey  <tom@tromey.com>
+
+       Add auto-mode-alist functionality to .dir-locals.el
+
+       * doc/emacs/custom.texi (Directory Variables): Document
+       auto-mode-alist in .dir-locals.el (Bug#18721)
+       * doc/emacs/modes.texi (Choosing Modes): Update.
+       * lisp/files.el (set-auto-mode--apply-alist): New function,
+       from set-auto-mode.
+       (set-auto-mode): Check directory locals for auto-mode-alist.
+       (dir-locals-collect-variables): Add "predicate" parameter.
+       (hack-dir-local--get-variables): New function, from
+       hack-dir-local-variables.
+       (hack-dir-local-variables): Call hack-dir-local--get-variables.
+       * test/lisp/files-resources/.dir-locals.el: New file.
+       * test/lisp/files-resources/whatever.quux: New file.
+       * test/lisp/files-tests.el (files-tests-data-dir): New variable.
+       (files-test-dir-locals-auto-mode-alist): New test.
+
+2021-07-23  Jean Forget  <J2N-FORGET@orange.fr>
+
+       Add more support for the French Revolutionary Calendar
+
+       * lisp/calendar/cal-french.el (calendar-french-feasts-array): New
+       variable (bug#19174).
+       (calendar-french-trim-feast): New function.
+       (calendar-french-date-string, calendar-french-goto-date):
+       (calendar-french-goto-date): Use them.
+
+       http://datetime.mongueurs.net/Histoire/s-c/01-g.en.html
+       
https://metacpan.org/pod/DateTime::Calendar::FrenchRevolutionary#Internet
+
+2021-07-23  Mattias Engdegård  <mattiase@acm.org>
+
+       Off-by-one error in compilation rule end-column function (bug#49624)
+
+       * lisp/progmodes/compile.el (compilation-error-properties):
+       When the end-column parameter of a compilation message rule
+       (in compilation-error-regexp-alist[-alist]) is a function, treat its
+       return value as if it were matched by the regexp, which is how it is
+       documented to work, and how all other parameters work.
+
+2021-07-23  Mattias Engdegård  <mattiase@acm.org>
+
+       Warn about arity errors in inlining calls (bug#12299)
+
+       Wrong number of arguments in inlining function calls (to `defsubst` or
+       explicitly using `inline`) did not result in warnings, or in very
+       cryptic ones.
+
+       * lisp/emacs-lisp/byte-opt.el (byte-compile-inline-expand): Add calls
+       to `byte-compile--check-arity-bytecode`.
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-emit-callargs-warn)
+       (byte-compile--check-arity-bytecode): New functions.
+       (byte-compile-callargs-warn): Use factored-out function.
+       * test/lisp/emacs-lisp/bytecomp-resources/warn-callargs-defsubst.el:
+       * test/lisp/emacs-lisp/bytecomp-tests.el ("warn-callargs-defsubst.el"):
+       New test case.
+
+2021-07-23  F. Jason Park  <jp@neverwas.me>
+
+       Remove text props from callback args in erc-button
+
+       * lisp/erc/erc-button.el (erc-button-add-buttons-1): Remove text
+       properties from strings stored in `erc-data' and passed to
+       `erc-callback'
+       (both text properties themselves) (bug#49704).  This reduces
+       memory usage in erc buffers (which are long-lived and can become
+       very large).
+
+2021-07-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       declare-function doc string clarification about FILE
+
+       * lisp/subr.el (declare-function): Mention that FILE can be nil
+       (bug#21466).
+
+2021-07-23  Stefan Kangas  <stefan@marxist.se>
+
+       Make nil value of fill-column obsolete
+
+       * lisp/textmodes/fill.el (current-fill-column): Make nil value of
+       'fill-column' obsolete.  (Bug#22847)
+       (current-fill-column--has-warned): New variable to track warning.
+       * lisp/simple.el (do-auto-fill): Remove handling of nil return value
+       from 'current-fill-column'.
+       * etc/NEWS: Announce obsoletion of this usage.
+
+2021-07-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Adjust time-tests.el to bug#30056
+
+       * test/lisp/time-tests.el (time-tests-display-time-update): Adjust
+       test (bug#30056).
+
+2021-07-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Move mode-line NEWS items to a common section
+
+2021-07-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       'global-mode-string' elements should have a space at the end
+
+       * lisp/time.el (display-time-string-forms):
+       * lisp/battery.el (battery-mode-line-format): Add a space to the
+       end (bug#30056).
+       * lisp/bindings.el (mode-line-misc-info): Remove space from end.
+       This will make the default format have one space before the
+       line-of-dashes (instead of two) on terminals.
+
+2021-07-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix an rcirc merge problem
+
+       * lisp/net/rcirc.el (rcirc-get-server-method)
+       (rcirc-get-server-password): Remove double definition after merge.
+
+2021-07-23  Eli Zaretskii  <eliz@gnu.org>
+
+       MS-Windows followup to recent emacsclient changes
+
+       * nt/gnulib-cfg.mk (OMIT_GNULIB_MODULE_file-has-acl): Set to true
+       to avoid compiling file-has-acl.c on MS-Windows.
+
+2021-07-23  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Redo emacsclient socket symlink-attack checking
+
+       * admin/merge-gnulib (GNULIB_MODULES): Add file-has-acl.
+       * lib/file-has-acl.c: New file, copied from Gnulib.
+       * lib/gnulib.mk.in, m4/gnulib-comp.m4: Regenerate.
+       * lib-src/emacsclient.c: Include acl.h, for file_has_acl.
+       (O_PATH): Default to O_SEARCH, which is good enough here.
+       (union local_sockaddr): New type.
+       (socket_status): Remove, replacing with ...
+       (connect_socket): New function.  All callers changed.
+       This function checks for ownership and permissions issues with the
+       parent directory of the socket file, instead of checking the
+       owner of the socket (which does not help security).
+       (socknamesize): Move to file scope.
+       (local_sockname): New arg S.  No need to pass socknamesize.
+       UID arg is now uid_t.  All callers changed.  Get file descriptor
+       of parent directory of socket, to foil some symlink attacks.
+       Do not follow symlinks to that directory.
+       (set_local_socket): Create the socket here instead of on
+       each attempt to connect it.  Fall back from XDG_RUNTIME_DIR
+       to /tmp only if the former fails due to ENOENT.  Adjust
+       permission-failure diagnostic to match changed behavior.
+
+       This addresses Bug#33847, which complained about emacsclient in a
+       safer XDG environment not connecting to an Emacs server running in
+       a less-safe environment outside XDG.  The patch fixes a
+       longstanding issue with emacsclient permission checking.
+       It’s ineffective to look at the permission of the socket file
+       itself; on some platforms, these permissions are ignored anyway.
+       What matters are the permissions on the parent directory of the
+       socket file, as these are what make symlink attacks possible.
+       Change the permissions check accordingly, and also refuse to
+       follow symlinks to that parent directory.  These changes make it
+       OK for emacsclient to fall back from XDG_RUNTIME_DIR to the
+       traditionally less-safe /tmp/emacsNNNN directories, since /tmp is
+       universally sticky nowadays.
+
+2021-07-23  Philip Kaludercic  <philipk@posteo.net>
+
+       Merge branch 'feature/rcirc-update'
+
+2021-07-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make erc recognize `foo*' as a function Lisp symbol
+
+       * lisp/erc/erc-button.el (erc-button-alist): Add some more chars
+       to the `foo' button regexp (bug#49690).
+
+2021-07-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make supersession warnings work again
+
+       * src/filelock.c (lock_file): Fix thinko in lock_file in 2ad34bcea4e
+       (bug#49701).
+
+2021-07-22  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix display of line/wrap-prefix when there's a display property at BOL
+
+       * src/xdisp.c (get_line_prefix_it_property): New function.
+       (handle_line_prefix): Call 'get_line_prefix_it_property' instead
+       of 'get_it_property', to examine also the property of the buffer
+       text underlying the display or overlay string.  (Bug#49695)
+
+2021-07-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make revert-buffer preserve buffer-readedness
+
+       * lisp/files.el (revert-buffer): Preserve buffer-readedness
+       (bug#35166).
+
+2021-07-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       `term-char-mode' doc string clarification
+
+       * lisp/term.el (term-char-mode): Document behaviour (bug#49186).
+
+2021-07-22  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Bind the GIT_LITERAL_PATHSPECS environment variable
+
+       * lisp/vc/vc-git.el (vc-git-command):
+       (vc-git--call): Ensure that git interprets file names literally
+       (bug#39452).
+
+2021-07-22  Sergey Organov  <sorganov@gmail.com>  (tiny change)
+
+       Avoid failing in desktop-clear due to killed buffers
+
+       * lisp/desktop.el (desktop-clear): check that buffer is not already
+       killed before attempting to kill it. A buffer might become killed as
+       part of regular operation as a side-effect of killing another buffer,
+       and then attempt to kill it again causes error (bug#49692).
+
+2021-07-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove the (value) bits from cus-start Customize strings
+
+       * lisp/cus-start.el (standard): Don't mention the Lisp values in
+       the choice strings, because that's just confusing in the Customize
+       interface (bug#49687).
+
+2021-07-22  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid byte-compilation warning
+
+       * test/src/buffer-tests.el (buffer-tests-inhibit-buffer-hooks):
+       Avoid byte-compiler warning.  (Bug#49667)
+
+2021-07-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Move generalized variable specs from cl-lib.el to gv.el
+
+       * lisp/emacs-lisp/cl-lib.el: Move all the generalized variable
+       specifications from cl-lib.el...
+       * lisp/emacs-lisp/gv.el: ... to gv.el.  This will make things like
+       `(setf (getenv "FOO") "BAR")' work without requiring anything,
+       since `setf' lives in gv.el (bug#49651).
+
+2021-07-21  Yan Gajdos  <yan@gajdos.info>  (tiny change)
+
+       Make vc-git-mode-line-string more robust
+
+       * lisp/vc/vc-git.el (vc-git-mode-line-string): Make function more
+       robust (bug#49683).  It could previously error out under certain
+       conditions, like moving directories in and out of the
+       VC-controlled tree.
+
+2021-07-21  Illia Ostapyshyn  <ilya.ostapyshyn@gmail.com>  (tiny change)
+
+       * lisp/cus-start.el: Add mode-line-compact to Customize
+
+       * lisp/cus-start.el (standard): Make `mode-line-compact' into a
+       user option (bug#49687).
+
+2021-07-21  Juri Linkov  <juri@linkov.net>
+
+       Improve docstring of context-menu-functions and add eww-context-menu
+
+       * lisp/mouse.el (context-menu-functions): Explain function args in 
docstring.
+
+       * lisp/net/eww.el (eww-context-menu): New function.
+       (eww-mode): Add it to context-menu-functions.
+
+       * lisp/info.el (Info-context-menu): Move history items higher.
+
+       * lisp/progmodes/prog-mode.el (prog-context-menu): Add menu items
+       in the middle of the menu after the region menu items.
+
+2021-07-21  Juri Linkov  <juri@linkov.net>
+
+       Change the order of context-menu-functions and add more context menus.
+
+       * lisp/mouse.el (context-menu-functions): Update default list.
+       (context-menu-overriding-function): Remove variable.
+       (context-menu-map): Reverse the order.
+       (context-menu-global, context-menu-local, context-menu-minor): New 
functions.
+       (context-menu-undo, context-menu-region): Add separators.
+       Use define-key-after instead of bindings--define-key.
+       (context-menu-entry): New variable.
+       (context-menu-mode): Use it.
+
+       * lisp/dired.el (dired-context-menu): New function.
+       (dired-mode): Add it to context-menu-functions.
+
+       * lisp/info.el (Info-context-menu): Reorder.
+
+       * lisp/net/goto-addr.el (goto-address-at-mouse):
+       Rename from goto-address-at-click.
+       (goto-address-context-menu): Use goto-address-at-mouse.
+
+       * lisp/progmodes/prog-mode.el (prog-context-menu): New function.
+       (prog-mode): Add it to context-menu-functions.
+
+2021-07-21  Logan Perkins  <logan@lp-programming.com>
+
+       Make input of multi-key inputs in different emacsclients more logical
+
+       * src/keyboard.c (read_key_sequence): Don't continue the input of
+       multi-key commands in one emacsclient in another (bug#39687).
+
+2021-07-21  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/eval.c (signal_quit_p): Fix the usual int/Lisp_Object mixup
+
+2021-07-21  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/macroexp.el (macroexp-warn-and-return): Add arg 
`category`
+
+       Use it to obey `byte-compile-warnings`.
+
+       (macroexp--warn-wrap): Add arg `category`.
+       (macroexp-macroexpand, macroexp--expand-all): Use it.
+
+       * lisp/emacs-lisp/cconv.el (cconv--convert-funcbody, cconv-convert):
+       Mark the warnings as `lexical`.
+
+       * lisp/emacs-lisp/eieio-core.el (eieio-oref, eieio-oref-default)
+       (eieio-oset-default):
+       * lisp/emacs-lisp/eieio.el (defclass): Adjust to new calling convention.
+
+2021-07-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make `C-g' after `M-x' not give a backtrace unless required
+
+       * src/eval.c (signal_quit_p): New function.
+       (maybe_call_debugger): React to all `quit' signals (bug#49675).
+
+       * src/keyboard.c (cmd_error_internal, menu_item_eval_property_1):
+       Ditto.
+
+2021-07-21  Jashank Jeremy  <jashank@rulingia.com.au>
+
+       Speed up by storing frame faces in hash tables instead of alists
+
+       * src/frame.h (struct frame): Add face_hash_table, remove face_alist.
+       (fset_face_hash_table): New function.
+       (fset_face_alist): Remove.
+       * src/frame.c (make_frame): Initialize f->face_hash_table.
+       (Fmake_terminal_frame): Update to work with hash tables instead of
+       alists.
+       * src/xfaces.c (lface_from_face_name_no_resolve):
+       (Finternal_make_lisp_face):
+       (update_face_from_frame_parameter): Update to work with hash tables
+       instead of alists.
+       (Fframe_face_hash_table): New function.
+       (Fframe_face_alist): Move to faces.el as frame-face-alist.
+       (syms_of_xfaces): Add frame_face_hash_table.
+
+       * lisp/progmodes/elisp-mode.el (elisp--eval-defun-1):
+       * lisp/frame.el (frame-set-background-mode): Update to work with hash
+       tables instead of alists.
+       * lisp/faces.el (face-new-frame-defaults): Mark obsolete.
+       (face-list): Update to use face--new-frame-defaults.
+       (frame-face-alist): Moved here from src/xfaces.c.
+       (x-create-frame-with-faces): Update to handle subtle semantic change
+       to how frame faces propagate, which otherwise breaks frame creation
+       with reverse video enabled (bug#41200).
+
+       Reworked from a patch by Clément Pit-Claudel 
<clement.pitclaudel@live.com>.
+
+2021-07-21  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * doc/lispref/display.texi (Overlay Properties): Tweak further
+
+       The "character after point" is not as important as point itself
+
+2021-07-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some "is"es from previous json checkin
+
+       * lisp/subr.el (json-available-p):
+       * doc/lispref/text.texi (Parsing JSON): Fix typo in last check-in.
+
+2021-07-21  Stefan Kangas  <stefan@marxist.se>
+
+       Factor out char_table_ref_simple for readability
+
+       * src/chartab.c (char_table_ref_simple): New function...
+       (sub_char_table_ref_and_range, char_table_ref_and_range):
+       ...factored out from here. (bug#45550).
+
+2021-07-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix final test for invalid base64url chars
+
+       * src/fns.c (base64_decode_1): Fix test for invalid base64url
+       (bug#45562).  Noted by Andreas Schwab.
+
+2021-07-21  Pankaj Jangid  <pankaj@codeisgreat.org>
+
+       Fixed a typo in Gnus manual
+
+       * doc/misc/gnus.texi (Washing Mail): Fixed typo
+
+2021-07-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix bug-reference.el compilation warning
+
+       * lisp/progmodes/bug-reference.el (bug-reference-mode): Silence a
+       compilation warning (bug#49677).
+
+2021-07-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Restore evaluation logic in dired-guess-default
+
+       * lisp/dired-x.el (dired-guess-default): Restore the `eval' bits
+       also removed in a previous commit (bug#48071).
+
+2021-07-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix dired-guess-default logic after previous change
+
+       * lisp/dired-x.el (dired-guess-default): Restore previous logic --
+       require matches for all files (bug#48071).
+
+2021-07-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add json-available-p
+
+       * doc/lispref/text.texi (Parsing JSON): Document it.
+       * lisp/subr.el (json-available-p): New function (bug#49660).
+
+2021-07-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention rear-advance in relation to the keymap overlay property
+
+       * doc/lispref/display.texi (Overlay Properties): Mention the
+       effect of REAR-ADVANCE (bug#459).
+
+2021-07-21  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix mistake in `quote` optimiser
+
+       Found by Pip Cet.
+
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize-quote): Fix mistake that
+       made this optimiser ineffective at removing quoting of nil, t, and
+       keywords.  The only obvious consequence is that we no longer need...
+       (byte-optimize-form): ...a 'nil => nil normalising step here; remove.
+       (byte-optimize-form-code-walker): Make the compiler warn about (quote).
+
+2021-07-20  Juri Linkov  <juri@linkov.net>
+
+       Add new mode context-menu-mode and use it in info.el and goto-addr.el
+
+       * lisp/mouse.el (context-menu-functions): New defcustom.
+       (context-menu-overriding-function): New function.
+       (context-menu-filter-function): New defcustom.
+       (context-menu-map): New function.
+       (context-menu-undo, context-menu-region): New menu functions.
+       (context-menu-mode): New mode.
+
+       * lisp/info.el (Info-context-menu): New function.
+       (Info-mode): Add Info-context-menu to context-menu-functions.
+
+       * lisp/net/goto-addr.el (goto-address-context-menu): New function.
+       (goto-address-at-click): New command.
+       (goto-address-mode): Add goto-address-context-menu to 
context-menu-functions.
+
+2021-07-20  Juri Linkov  <juri@linkov.net>
+
+       * lisp/button.el (button-map): Bind [follow-link] to 'mouse-face' 
(bug#49626)
+
+2021-07-20  Mattias Engdegård  <mattiase@acm.org>
+
+       Strength-reduce (eq X nil) to (not X)
+
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize-eq): New optimisation,
+       which results in better test and branch code generation where it
+       applies.
+
+2021-07-20  Mattias Engdegård  <mattiase@acm.org>
+
+       Count (not X) as a switch condition
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile--cond-switch-prefix):
+       Treat (not VAR) and (null VAR) as (eq VAR nil) when computing the
+       extent of switch ops.
+
+2021-07-20  Michael Albinus  <michael.albinus@gmx.de>
+
+       * lisp/shadowfile.el (shadow-homedir): Add slash.
+
+       (shadow-contract-file-name): Use it.  Bug#49596.
+
+2021-07-20  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix documentation of a recent changeset
+
+       * lisp/autorevert.el (auto-revert-mode):
+       * lisp/files.el (revert-buffer): Doc fix.  (Bug#49661)
+
+2021-07-20  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix Bug#49636
+
+       * test/lisp/net/tramp-tests.el (tramp-test39-make-lock-file-name):
+       Let-bind `auto-save-default'.  (Bug#49636)
+
+2021-07-20  Konstantin Kharlamov  <Hi-Angel@yandex.ru>
+
+       Improve auto-revert-mode and revert-buffer doc strings
+
+       * lisp/autorevert.el (auto-revert-mode):
+       * lisp/files.el (revert-buffer): Mention that there is
+       revert-buffer-with-fine-grain that is better suited for markers
+       preservation (bug#49661).
+
+2021-07-20  jakanakaevangeli  <jakanakaevangeli@chiru.no>
+
+       Make `kill-all-local-variables' also remove lambda from hooks
+
+       * src/buffer.c (reset_buffer_local_variables): Also remove
+       non-symbol elements from hook variables (bug#46407).
+
+2021-07-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make dired-guess-default return all matching programs
+
+       * lisp/dired-x.el (dired-guess-default): Return all matching
+       programs (bug#48071).
+
+2021-07-20  Ioannis Kappas  <ioannis.kappas@gmail.com>
+
+       Allow installing packages with DOS line endings
+
+       * lisp/emacs-lisp/package.el (package-install-from-buffer): Allow
+       installing files with different line ending conventions (Unix, DOS
+       and Macos) (bug#48137).
+
+2021-07-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Signal an error in json.c function if not available
+
+       * src/json.c (Fjson_serialize, Fjson_insert)
+       (Fjson_parse_string, Fjson_parse_buffer, syms_of_json): Signal
+       `json-unavailable' if jansson isn't available (bug#48228).
+
+2021-07-20  Miha Rihtaršič  <miha@kamnitnik.top>
+
+       Quit minibuffers without aborting kmacros
+
+       * doc/lispref/commands.texi (Quitting): Document `minibuffer-quit'
+       (Recursive Editing): Document throwing of function values to `exit'.
+
+       * doc/lispref/errors.texi (Standard Errors): Document
+       `minibuffer-quit'
+
+       * lisp/minibuffer.el (minibuffer-quit-recursive-edit): New function.
+
+       * lisp/simple.el (minibuffer-error-function): Do not abort keyboard
+       macro execution if is minibuffer-quit is signaled (bug#48603).
+       * src/data.c (syms_of_data): New error symbol `minibuffer-quit'
+
+       * src/keyboard.c (recursive_edit_1): Implement throwing of function
+       values to `exit`.  In that case, the function will be called without
+       arguments before returning from the command loop.
+       (cmd_error):
+       (Fcommand_error_default_function): Do not abort keyboard macro
+       execution if minibuffer-quit is signaled.
+       (command_loop_2): New argument HANDLERS.
+
+       * src/macros.c (Fexecute_kbd_macro): Use command_loop_2 instead of
+       command_loop_1.
+
+       * src/minibuf.c (Fabort_minibuffers): Use it.
+
+2021-07-20  Kenichi Handa  <handa@gnu.org>
+
+       Fix problem with certain fonts in ftfont_shape_by_flt
+
+       * src/ftfont.c (ftfont_shape_by_flt): Fix problem with unusual OTF
+       tables in fonts (bug#49066).
+
+2021-07-20  Earl Hyatt  <okamsn@protonmail.com>
+
+       Add commands 'kill-matching-lines' and 'copy-matching-lines'
+
+       * doc/emacs/search.texi: Document these additions.
+       * lisp/replace.el:
+       Add the commands 'kill-matching-lines' and 'copy-matching-lines'.
+
+       'kill-matching-lines' is like 'flush-lines', but adds the lines to the
+       kill ring as a single string, keeping line endings.
+       'copy-matching-lines' is like 'kill-matching-lines', but only copies
+       those lines instead of killing them.
+
+2021-07-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak example in Function Indirection node in the lispref manual
+
+       * doc/lispref/eval.texi (Function Indirection): Make example more
+       robust (bug#49647).  Suggested by Scott Marks
+       <scott.c.marks@gmail.com>.
+
+2021-07-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Put command line file names and mouse dragging onto 'file-name-history'
+
+       * lisp/dnd.el (dnd-open-local-file): Add file to history.
+       * lisp/files.el (file-name-history--add): New function (bug#12915).
+
+       * lisp/startup.el (command-line-1): Add file to history.
+
+2021-07-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention `overlays-in' in the `overlays-at' doc string
+
+       * src/buffer.c (Foverlays_at): Mention `overlays-in' in the doc
+       string (bug#459).
+
+2021-07-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make wdired work better in narrowed-to buffers
+
+       * lisp/wdired.el (wdired--before-change-fn):
+       (wdired--restore-properties): Widen before doing anything so that
+       we get all the changed bits (bug#49124).
+
+2021-07-19  Ivan Sokolov  <ivan-p-sokolov@ya.ru>
+
+       Add function for filtering ANSI sequences when compiling
+
+       * lisp/ansi-color.el (ansi-color-for-compilation-mode): New user
+       option (bug#49609).
+       (ansi-color-compilation-filter): New function.
+
+2021-07-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix typos in a recent change
+
+       * src/buffer.c (Fmake_indirect_buffer): Fix a typo in a recent
+       change.
+
+       * doc/lispref/buffers.texi (Indirect Buffers): Fix punctuation.
+
+2021-07-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make the `s' command in *Help* work for Lisp variables defined in C
+
+       * lisp/help-fns.el (describe-variable): Store the type.
+       * lisp/help-mode.el (help-view-source): Use the type.  This fixes
+       the problem when looking for a variable defined in a C file.
+
+2021-07-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add inhibit-buffer-hooks to `make-indirect-buffer'
+
+       * doc/lispref/buffers.texi (Indirect Buffers): Document it (bug#49160).
+
+       * src/buffer.c (Fmake_indirect_buffer): Allow controlling whether
+       to inhibit buffer hooks.
+
+2021-07-19  dickmao  <none>
+
+       Make make-indirect-buffer inherit inhibit-buffer-hook from base buffer
+
+       * src/buffer.c (Fmake_indirect_buffer):
+       Match base buffer's inhibit-buffer-hooks.
+       * test/src/buffer-tests.el (buffer-tests-inhibit-buffer-hooks-indirect):
+       Add a test (bug#49160).
+
+2021-07-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Document recent changes in 'comint-delete-output' (bug#1496)
+
+       * doc/emacs/misc.texi (Shell Mode): Document the new optional
+       behavior of 'C-c C-o'.
+
+       * etc/NEWS: Call out the new behavior of 'C-c C-o'.
+
+2021-07-19  Gabriel do Nascimento Ribeiro  <gabriel376@hotmail.com>
+
+       Use 'remember-buffer' in remember.el doc strings.
+
+       * lisp/textmodes/remember.el (remember-initial-contents)
+       (remember-before-remember-hook, remember-destroy): Refer to
+       `remember-buffer'.
+
+       * lisp/textmodes/remember.el (remember-buffer): Make into
+       defcustom (bug#49373).
+
+2021-07-19  Gabriel do Nascimento Ribeiro  <gabriel376@hotmail.com>
+
+       Use 'remember-buffer' in remember.el doc strings.
+
+       * lisp/textmodes/remember.el (remember-initial-contents)
+       (remember-before-remember-hook, remember-destroy): Refer to
+       `remember-buffer'.
+
+       * lisp/textmodes/remember.el (remember-buffer): Make into
+       defcustom (bug#49373).
+
+2021-07-19  Madhu  <enometh@meer.net>  (tiny change)
+
+       Propagate asynchronousness correctly when using proxies in url.el
+
+       * lisp/url/url.el (url-retrieve-internal): Propagate
+       asynchronousness correctly when using a proxy (bug#49570).
+
+2021-07-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix infloop in woman-file-name
+
+       * lisp/woman.el (woman-file-name): Fix infloop for non-existent
+       manual page (bug#414).
+
+2021-07-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow comint-delete-output to save the output on the kill ring
+
+       * lisp/comint.el (comint-delete-output): Allow saving the output
+       to the kill ring (bug#1496).
+
+2021-07-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix documentation of mouse-leave-buffer-hook
+
+       * doc/lispref/hooks.texi (Standard Hooks): Ditto.
+
+       * src/callint.c (syms_of_callint): Document the actual usage of
+       `mouse-leave-buffer-hook' (bug#2932).
+
+2021-07-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Use make-separator-line in shortdoc
+
+       * lisp/simple.el (separator-line): Tweak definition to not be so
+       overwhelming.
+
+       * lisp/emacs-lisp/shortdoc.el (shortdoc-separator): Removed.
+       (shortdoc-display-group): Use make-separator-line.
+
+2021-07-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a new function for separator lines
+
+       * lisp/help-fns.el (describe-symbol): Use it.
+
+       * lisp/help.el (describe-key): Use it.
+
+       * lisp/simple.el (separator-line): New face.
+       (make-separator-line): New function (bug#49630).
+
+2021-07-18  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix documentation of a recent changeset (bug#5003)
+
+       * lisp/files.el (safe-local-variable-values)
+       (ignored-local-variable-values): Doc fix.
+       (ignored-local-variable-values): Add :version tag.
+
+       * doc/emacs/custom.texi (Safe File Variables): Mention
+       'ignored-local-variable-values'.
+       * doc/lispref/variables.texi (File Local Variables): Fix wording.
+
+       * etc/NEWS: Improve wording of the 'ignored-local-variable-values'
+       entry.
+
+2021-07-18  Mattias Engdegård  <mattiase@acm.org>
+
+       Count compile errors when FILE is a function
+
+       * lisp/progmodes/compile.el (compilation-parse-errors):
+       Don't omit messages from the error count when FILE is a function
+       rather than a regexp match number.
+
+2021-07-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify event-convert-list doc string
+
+       * src/keyboard.c (Fevent_convert_list): Clarify that the base type
+       returned isn't always the same (bug#7631).
+
+2021-07-18  Stephen Gildea  <stepheng+emacs@gildea.com>
+
+       Add doc string to time-stamp-tests that didn't have one
+
+       * test/lisp/time-stamp-tests.el (formatz-generate-tests,
+         formatz-%z-spotcheck): Add doc strings to tests.
+
+2021-07-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow ignoring local variable values permanently
+
+       * doc/lispref/variables.texi (File Local Variables): Document it.
+
+       * lisp/files.el (ignored-local-variable-values): New user option
+       (bug#5003).
+       (hack-local-variables-confirm): Allow ignoring permanently.
+       (hack-local-variables-filter): Ignore the permanently ignored
+       variables.
+
+2021-07-18  Michael Albinus  <michael.albinus@gmx.de>
+
+       Make remote file locks more robust
+
+       * lisp/net/tramp.el (tramp-handle-write-region):
+       * lisp/net/tramp-adb.el (tramp-adb-handle-write-region):
+       * lisp/net/tramp-smb.el (tramp-smb-handle-write-region):
+       * lisp/net/tramp-sshfs.el (tramp-sshfs-handle-write-region):
+       Make file locks more robust.
+
+       * test/lisp/net/tramp-tests.el (tramp-test39-make-lock-file-name):
+       Rename and extend.
+
+2021-07-18  Naofumi Yasufuku  <naofumi@yasufuku.dev>  (tiny change)
+
+       Make remote file locks more robust.  (Bug#49621)
+
+       * lisp/net/tramp-sh.el (tramp-sh-handle-write-region): Make file
+       locks more robust.  (Bug#49621)
+
+2021-07-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Maintain a list of terminal buffers in the menu
+
+       * lisp/term.el (term--update-term-menu): New function (bug#5641).
+       (term-mode): Use it to list terminal buffers.
+
+2021-07-18  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix display of mode-line with bidi formatting controls
+
+       * src/xdisp.c (face_before_or_after_it_pos): Reimplement the bidi
+       iteration to find the character after the current in visual order.
+       (Bug#49562)
+
+2021-07-18  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix problem in `shadow-define-literal-group' (Bug#49596)
+
+       * lisp/shadowfile.el (shadow-make-fullname): HOST can also be a
+       remote file name.  Bug#49596.
+
+       * test/lisp/shadowfile-tests.el (auth-source-save-behavior)
+       (tramp-cache-read-persistent-data, tramp-persistency-file-name):
+       Set them globally.
+       (shadow-test06-literal-groups): Extend test.
+
+2021-07-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make indent-tabs-mode into a regular mode instead of just a variable
+
+       * lisp/simple.el (indent-tabs-mode): Make into a minor mode (bug#6276).
+
+2021-07-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't shorten comment padding if the padding isn't spaces
+
+       * lisp/newcomment.el (comment-padright): Don't shorten non-space
+       padding (bug#6822).
+       (comment-padleft): Ditto.
+
+2021-07-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix an unlikely `copyright-find-copyright' problem
+
+       * lisp/emacs-lisp/copyright.el (copyright-find-copyright): Make
+       the copyright matcher more robust (bug#7179).
+
+2021-07-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix previous grep-file-at-point change
+
+       * lisp/progmodes/grep.el (grep-file-at-point): Fix previous change.
+
+2021-07-17  Lennart Borgman  <lennart.borgman@gmail.com>
+
+       Add new function 'grep-file-at-point'
+
+       * lisp/progmodes/grep.el (grep-file-at-point): New function to
+       return the file name at point (bug#8252).
+
+2021-07-17  Karthik Chikmagalur  <karthikchikmagalur@gmail.com>  (tiny change)
+
+       Enhance pcomplete support for xargs
+
+       * lisp/pcmpl-unix.el (pcomplete/xargs): Add support for completing xargs
+       options, including the ability to distinguish them from the command
+       xargs runs (bug#49603).
+
+2021-07-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make 'n'/'p' work again in shortdoc after previous changes
+
+       * lisp/emacs-lisp/shortdoc.el (shortdoc--goto-section): Adjust to
+       changes in how the text properties are inserted in 22a5482ab6
+       (bug#49605).  Also make into a regular function.
+
+2021-07-16  akater  <nuclearspace@gmail.com>
+
+       EIEIO: Prevent excessive evaluation of :initform
+
+       * lisp/emacs-lisp/eieio.el (initialize-instance):
+       Do not evaluate initform of a slot when initarg for the slot is 
provided,
+       according to the following sections of CLHS:
+       - Object Creation and Initialization
+       - Initialization Arguments
+       - Defaulting of Initialization Arguments
+       - Rules for Initialization Arguments
+
+       * test/lisp/emacs-lisp/eieio-tests/eieio-tests.el:
+       Add corresponding tests
+       Fix a typo
+
+2021-07-16  Mattias Engdegård  <mattiase@acm.org>
+
+       Define revert-buffer-function for *Memory Report*
+
+       * lisp/emacs-lisp/memory-report.el (memory-report):
+       Allow the memory report buffer to be updated by pressing 'g'.
+
+2021-07-16  Michael Albinus  <michael.albinus@gmx.de>
+
+       Add lock-file-mode
+
+       * doc/emacs/files.texi (Interlocking):
+       * doc/lispref/files.texi (File Locks):
+       * etc/NEWS: Add lock-file-mode.
+
+       * lisp/files.el (lock-file-name-transforms)
+       (remote-file-name-inhibit-locks): Move down.
+       (lock-file-mode): New minor mode.
+
+2021-07-16  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       7ac411ae2c (origin/emacs-27) ; * src/data.c (Fcar, Fcdr): Doc fix.
+       0d9e1826f7 One more minor update of the Emacs manual for 19th printing
+       92616d30e0 ; Fix let-alist Texinfo markup
+       c13acf8e34 ; * doc/emacs/mule.texi (International Chars): Mention 'de...
+
+2021-07-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify emacsclient Options node in the Emacs manual
+
+       * doc/emacs/misc.texi (emacsclient Options): Don't claim that
+       emacsclient searches for a socket name (bug#13319).
+
+2021-07-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add new user option 'query-about-changed-file'
+
+       * doc/emacs/files.texi (Visiting): Document it.
+       * lisp/files.el (query-about-changed-file): New user option (bug#10775).
+       (find-file-noselect): Use it.
+
+2021-07-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix lock-file-name-transforms build problem
+
+       * lisp/files.el (lock-file-name-transforms): Remove
+       custom-initialize-delay to fix build problem (bug#49507).
+
+2021-07-16  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix wording in a recent ELisp manual change
+
+       * doc/lispref/tips.texi (Coding Conventions): Fix wording in a
+       recent change.  (Bug#21440)
+
+2021-07-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow hiding variables in Customize
+
+       * lisp/cus-edit.el (custom-toggle-hide-variable): Allow closing an
+       option even if there are unsaved changes (bug#11655).
+
+2021-07-16  Remington Furman  <remington@remcycles.net>  (tiny change)
+
+       Make `number-at-point' work for more hex numbers
+
+       * lisp/thingatpt.el (number-at-point): Rewrite to actually catch
+       the hex numbers (bug#49588).
+
+2021-07-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify -unload-feature in Coding Conventions
+
+       * doc/lispref/tips.texi (Coding Conventions): Clarify when an
+       unload function is useful (bug#21440).
+
+2021-07-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a couple more shell-tests-split-string tests
+
+2021-07-15  Glenn Morris  <rgm@gnu.org>
+
+       Improve recent jka-compr-compression-info-list change
+
+       * lisp/jka-cmpr-hook.el (jka-compr-compression-info-list):
+       Document previous change, and fix :type.
+
+2021-07-15  Tassilo Horn  <tsdh@gnu.org>
+
+       Add bug-reference support for Codeberg projects
+
+       * lisp/progmodes/bug-reference.el (bug-reference-setup-from-vc-alist):
+       Add support for codeberg.org bug and pull request references.
+       * doc/emacs/maintaining.texi (Bug Reference): Mention that bug and
+       pull request references for codeberg projects are supported.
+
+2021-07-15  Tassilo Horn  <tsdh@gnu.org>
+
+       Add support for sourcehut to bug-reference.el
+
+       * lisp/progmodes/bug-reference.el (bug-reference-setup-from-vc-alist):
+       Add support for bug references like #17 and ~user/project#19 for
+       sourcehut (sr.ht).
+       * doc/emacs/maintaining.texi (Bug Reference): Document sourcehut
+       support.
+
+2021-07-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add more car/cdr examples to shortdoc
+
+       * lisp/emacs-lisp/shortdoc.el (list): Add more car/cdr examples.
+
+2021-07-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve the shortdoc link action in *Help* buffers
+
+       * lisp/emacs-lisp/shortdoc.el (shortdoc-display-group): Allow
+       taking an optional parameter to place point on a specific function.
+       (shortdoc--display-function): Go to the function in question in
+       the shortdoc buffer.
+
+2021-07-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add new user option to abbreviate file names in save-place
+
+       * lisp/saveplace.el (save-place-abbreviate-file-names): New user
+       option (bug#13286).
+       (save-place-to-alist): Use it.
+
+2021-07-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow restoring the original order in 'tabulated-list-mode'
+
+       * lisp/emacs-lisp/tabulated-list.el (tabulated-list-sort): Allow
+       restoring the original order (bug#13411).
+       (tabulated-list--sort-by-column-name): Store the original order.
+       (tabulated-list--original-order): New buffer-local variable.
+
+2021-07-15  Protesilaos Stavrou  <info@protesilaos.com>
+
+       Update modus-themes to version 1.5.0
+
+       * doc/misc/modus-themes.org (Enable and load): Include internal link.
+       (Sample configuration for use-package): Update code sample.
+       (Customization Options): Update references to customization options.
+       (Option for more italic constructs): Document new variable, as an
+       alias of the deprecated 'modus-themes-slanted-constructs'.
+
+       (Option for syntax highlighting, Option for links)
+       (Option for command prompt styles, Option for mode line presentation)
+       (Option for language checkers)
+       (Option for line highlighting (hl-line-mode))
+       (Option for parenthesis matching (show-paren-mode))
+       (Option for active region, Option for the headings' overall style):
+       Update documentation to describe new possible values, expressed as a
+       list of symbols.
+
+       (Option for Org agenda constructs): Document new user option.
+
+       (Control the scale of headings): Update symbol of variable.
+
+       (Remap face with local value (DIY), Backdrop for pdf-tools (DIY)):
+       Tweak text of internal reference.
+
+       (Font configurations for Org and others (DIY)):  Add internal link and
+       document how to configure the 'bold' and 'italic' faces.
+
+       (Custom Org user faces (DIY)): Minor corrections or changes to single
+       words.
+
+       (Full support for packages or face groups): Include new items.
+
+       (Notes on individual packages): Add notes on Avy hints, the colour of
+       days in 'M-x calendar', and underlines in 'compilation-mode' buffers.
+
+       (What is the best setup for legibility?): Remove single word.
+       (Acknowledgements): Update list of contributors.
+
+       * etc/themes/modus-themes.el (modus-themes-faces)
+       (modus-themes-operandi-colors, modus-themes-vivendi-colors)
+       (modus-themes-subtle-red, modus-themes-subtle-green)
+       (modus-themes-subtle-yellow, modus-themes-subtle-blue)
+       (modus-themes-subtle-magenta, modus-themes-subtle-cyan)
+       (modus-themes-subtle-neutral, modus-themes-intense-red)
+       (modus-themes-intense-green, modus-themes-intense-yellow)
+       (modus-themes-intense-blue, modus-themes-intense-magenta)
+       (modus-themes-intense-cyan, modus-themes-intense-neutral)
+       (modus-themes-refine-red, modus-themes-refine-green)
+       (modus-themes-refine-yellow, modus-themes-refine-blue)
+       (modus-themes-refine-magenta, modus-themes-refine-cyan)
+       (modus-themes-active-red, modus-themes-active-green)
+       (modus-themes-active-yellow, modus-themes-active-blue)
+       (modus-themes-active-magenta, modus-themes-active-cyan)
+       (modus-themes-fringe-red, modus-themes-fringe-green)
+       (modus-themes-fringe-yellow, modus-themes-fringe-blue)
+       (modus-themes-fringe-magenta, modus-themes-fringe-cyan)
+       (modus-themes-nuanced-red, modus-themes-nuanced-green)
+       (modus-themes-nuanced-yellow, modus-themes-nuanced-blue)
+       (modus-themes-nuanced-magenta, modus-themes-nuanced-cyan)
+       (modus-themes-special-cold, modus-themes-special-mild)
+       (modus-themes-special-warm, modus-themes-special-calm)
+       (modus-themes-diff-added, modus-themes-diff-changed)
+       (modus-themes-diff-removed, modus-themes-diff-refine-added)
+       (modus-themes-diff-refine-changed, modus-themes-diff-refine-removed)
+       (modus-themes-diff-focus-added, modus-themes-diff-focus-changed)
+       (modus-themes-diff-focus-removed, modus-themes-diff-heading)
+       (modus-themes-pseudo-header, modus-themes-mark-alt)
+       (modus-themes-mark-del, modus-themes-mark-sel, modus-themes-mark-symbol)
+       (modus-themes-heading-1, modus-themes-heading-2, modus-themes-heading-3)
+       (modus-themes-heading-4, modus-themes-heading-5, modus-themes-heading-6)
+       (modus-themes-heading-7, modus-themes-heading-8, modus-themes-hl-line)
+       (modus-themes-bold, modus-themes-slant, modus-themes-variable-pitch)
+       (modus-themes-graph-red-0, modus-themes-graph-red-1)
+       (modus-themes-graph-green-0, modus-themes-graph-green-1)
+       (modus-themes-graph-yellow-0, modus-themes-graph-yellow-1)
+       (modus-themes-graph-blue-0, modus-themes-graph-blue-1)
+       (modus-themes-graph-magenta-0, modus-themes-graph-magenta-1)
+       (modus-themes-graph-cyan-0, modus-themes-graph-cyan-1)
+       (modus-themes-lang-note, modus-themes-lang-warning)
+       (modus-themes-lang-error, modus-themes-reset-soft)
+       (modus-themes-reset-hard, modus-themes-key-binding)
+       (modus-themes-search-success, modus-themes-search-success-modeline)
+       (modus-themes-search-success-lazy): Add new ':group' specification for
+       custom faces.
+
+       (modus-themes-operandi-color-overrides)
+       (modus-themes-vivendi-color-overrides, modus-themes-bold-constructs)
+       (modus-themes-variable-pitch-headings, modus-themes-variable-pitch-ui)
+       (modus-themes-no-mixed-fonts, modus-themes-fringes)
+       (modus-themes-scale-headings, modus-themes-scale-1, 
modus-themes-scale-2)
+       (modus-themes-scale-3, modus-themes-scale-4, modus-themes-scale-title)
+       (modus-themes-org-blocks, modus-themes-completions)
+       (modus-themes-success-deuteranopia, modus-themes-mail-citations)
+       (modus-themes-subtle-line-numbers, modus-themes-intense-hl-line): Add
+       custom setter.
+
+       (modus-themes-scale-5, modus-themes-scale-title): Deprecate variable
+       and replace it with alias 'modus-themes-scale-title'.
+
+       (modus-themes-slanted-constructs, modus-themes-italic-constructs):
+       Deprecate variable and replace it with alias
+       'modus-themes-italic-constructs'.
+
+       (modus-themes-org-habit, modus-themes-org-agenda): Deprecate variable
+       and make its functionality a part of 'modus-themes-org-agenda'.
+
+       (modus-themes-headings, modus-themes-mode-line, modus-themes-diffs)
+       (modus-themes-prompts, modus-themes-paren-match, modus-themes-syntax)
+       (modus-themes-links, modus-themes-region, modus-themes-lang-checkers)
+       (modus-themes-org-blocks): Make user options accept a value as a list
+       of properties.
+
+       (modus-themes--mixed-fonts, modus-themes--slant)
+       (modus-themes--fixed-pitch, modus-themes--lang-check)
+       (modus-themes--prompt, modus-themes--paren)
+       (modus-themes--syntax-foreground, modus-themes--syntax-extra)
+       (modus-themes--syntax-string, modus-themes--syntax-docstring)
+       (modus-themes--syntax-comment, modus-themes--heading-p)
+       (modus-themes--heading, modus-themes--org-habit)
+       (modus-themes--mode-line-attrs, modus-themes--link-color)
+       (modus-themes--link, modus-themes--region, modus-themes--hl-line):
+       Update internal functions to parse new values for user options.
+
+       * etc/themes/modus-operandi-theme.el,
+         etc/themes/modus-vivendi-theme.el: Bump version number.
+
+       A detailed change log is provided here (no javascript required):
+       <https://protesilaos.com/codelog/2021-07-15-modus-themes-1-5-0/>.
+
+2021-07-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Autoload `split-string-shell-command'
+
+       * lisp/shell.el (split-string-shell-command): Autoload.
+
+2021-07-15  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix 'shell-tests-split-string' on MS-Windows
+
+       * test/lisp/shell-tests.el (shell-tests-split-string): Skip test
+       that always fails on MS-Windows/MS-DOS.
+
+2021-07-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve the `window-end' doc string
+
+       * src/window.c (Fwindow_end): Be more explicit about what the
+       position is (bug#13429).
+
+2021-07-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention more split-string-* functions in shortdoc
+
+       * lisp/emacs-lisp/shortdoc.el (string): Mention
+       split-string-and-unquote and split-string-shell-command.
+
+2021-07-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow using spaces in `inferior-lisp' command names
+
+       * lisp/progmodes/inf-lisp.el (inferior-lisp): Allow using spaces
+       in the command names (by splitting using shell syntax) (bug#16005).
+
+2021-07-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Rename shell-split-string to split-string-shell-command
+
+       * lisp/shell.el (split-string-shell-command):
+       * doc/lispref/processes.texi (Shell Arguments): Rename from
+       shell-split-string.
+
+2021-07-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a new function 'shell-split-string'
+
+       * doc/lispref/processes.texi (Shell Arguments): Document it.
+       * lisp/shell.el (shell-split-string): New function.
+
+2021-07-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify overriding-local-map doc string
+
+       * src/keyboard.c (syms_of_keyboard): Clarify
+       `overriding-local-map' vs. text properties/overlays (bug#16312).
+
+2021-07-15  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Pacify gcc -Woverflow more clearly
+
+       * src/alloc.c (mark_maybe_pointer): Make it clearer that ANDing
+       with UINTPTR_MAX is intended.  Omit a now-unnecessary cast.
+
+2021-07-14  Michael Albinus  <michael.albinus@gmx.de>
+
+       Preserve backward compatibility in Tramp
+
+       * lisp/net/tramp-crypt.el (tramp-crypt-handle-lock-file)
+       (tramp-crypt-handle-unlock-file): Preserve backward compatibility.
+
+       * lisp/net/tramp-sh.el (tramp-sh-handle-write-region): Do not
+       create lock file twice.
+
+       * lisp/net/tramp.el (tramp-handle-make-lock-file-name): Move lock
+       file security check ...
+       (tramp-handle-lock-file): ... here.
+       (tramp-handle-unlock-file): Preserve backward compatibility.
+
+       * test/lisp/net/tramp-tests.el (lock-file-name-transforms)
+       (remote-file-name-inhibit-locks): Declare.
+       (tramp-allow-unsafe-temporary-files): Set to t.
+       (tramp-test37-make-auto-save-file-name)
+       (tramp-test38-find-backup-file-name): Move binding of
+       `tramp-allow-unsafe-temporary-files' up.
+       (tramp-test39-lock-file): Bind `tramp-allow-unsafe-temporary-files'.
+       Preserve backward compatibility.  Extend test.
+
+2021-07-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fontify the signature separator in Message mode
+
+       * lisp/gnus/message.el (message-signature-separator): New face
+       (bug#17757).
+       (message-font-lock-keywords): Add it to the signature, and ensure
+       that the trailing space isn't removed when hitting RET.
+       (message--match-signature): New helper function.
+
+2021-07-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify backward-delete-char-untabify doc string
+
+       * lisp/simple.el (backward-delete-char-untabify): Mention the
+       effect of Transient Mark mode (bug#17263).
+
+2021-07-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       * etc/NEWS: Add back a missing apostrophe.
+
+2021-07-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       switch-to-buffer-other-frame doc string improvement
+
+       * lisp/window.el (switch-to-buffer-other-frame): Document that we
+       don't always display the buffer in a different frame (bug#17719).
+
+2021-07-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix hilit-chg highlighting of characters where text has been removed
+
+       * lisp/hilit-chg.el (hilit-chg-set-face-on-change): Remove
+       highlighting from characters that are just highlighted because of
+       something that has been previously deleted (bug#17784).
+
+2021-07-14  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix deprecation warnings from libtiff
+
+       * src/image.c (UINT32) [TIFFLIB_VERSION >= 20210416]: Define to
+       use stdint.h type for recent libtiff versions.  Reported by Andy
+       Moreton <andrewjmoreton@gmail.com>.
+
+2021-07-14  Michael Albinus  <michael.albinus@gmx.de>
+
+       * etc/NEWS (insert-into-buffer'): Fix thinko.
+
+2021-07-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make `apropos-library' also work for libraries without symbols
+
+       * lisp/apropos.el (apropos--preamble): Factor out (bug#17832)...
+       (apropos-print-doc): ... from here.
+       (apropos-library): Use it to display the apropos buffer even if it
+       has no symbols of its own.
+
+2021-07-14  Juri Linkov  <juri@linkov.net>
+
+       Revert e0619995594d1686afd0493391417d6f900d632c that added 
save-match-data.
+
+       * lisp/isearch.el (isearch-filter-predicate): Mention precautions 
against
+       clobbering the match data in docstring (bug#49534).
+
+2021-07-14  Juri Linkov  <juri@linkov.net>
+
+       * lisp/isearch.el: Add save-match-data for funcall 
isearch-filter-predicate.
+
+       * lisp/isearch.el (isearch-search): Add save-match-data before
+       funcall isearch-filter-predicate.
+       (isearch-lazy-highlight-search): Add save-match-data before
+       funcall isearch-filter-predicate.
+       (Bug#49534)
+
+2021-07-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a better interactive spec to `facemenu-add-face'
+
+       * lisp/facemenu.el (facemenu-add-face): Use `read-face-name'
+       (bug#18369) by copying over the interactive spec from
+       facemenu-set-face.
+
+2021-07-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make jka-compr-insert-file-contents slightly more efficient
+
+       * lisp/jka-compr.el (jka-compr-insert-file-contents): Make more
+       efficient by using `insert-into-buffer'.
+
+2021-07-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add new function 'insert-into-buffer'
+
+       * doc/lispref/text.texi (Insertion): Document it.
+       * lisp/subr.el (insert-into-buffer): New function.
+
+2021-07-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fall back on zlib-decompress-region if gzip doesn't exist
+
+       * lisp/jka-cmpr-hook.el (jka-compr-info-uncompress-function): New
+       function (bug#18823).
+       (jka-compr-compression-info-list): Expand info with decompression
+       function.
+
+       * lisp/jka-compr.el (jka-compr-insert-file-contents): Fall back on
+       internal decompression function if external doesn't exist.
+
+2021-07-13  Daniel Martín  <mardani29@yahoo.es>
+
+       Fix dired-number-of-marked-files when there are no marked files
+
+       * lisp/dired.el (dired-number-of-marked-files): Fix if expression so
+       that the else part is evaluated correctly.
+
+2021-07-13  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * doc/lispref/modes.texi (Multiline Font Lock): Tweak last change
+
+2021-07-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow not updating Customize settings in set-frame-font
+
+       * lisp/frame.el (set-frame-font): Allow not updating the
+       Customization settings (bug#19298).
+
+2021-07-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Document the syntax-multilne text property
+
+       * doc/lispref/modes.texi (Multiline Font Lock): Document the
+       syntax-multiline text property (bug#20436).
+
+2021-07-13  Juri Linkov  <juri@linkov.net>
+
+       Support Isearch filter predicates with empty search hits (bug#49534)
+
+       * lisp/isearch.el (isearch-search): Move (= (match-beginning 0) 
(match-end 0))
+       and (bobp)/(eobp) outside the call to isearch-filter-predicate.
+       Use forward-char 1/-1 on empty matches only when going to retry search.
+       (isearch-lazy-highlight-search):  Remove (= (point) bound),
+       but leave (= (match-beginning 0) (match-end 0)) since empty matches
+       make no sense in lazy-highlighting.
+
+2021-07-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make 'tex-validate-buffer' work again
+
+       * lisp/textmodes/tex-mode.el (tex-validate-buffer): The *Occur*
+       buffer is read-only, so inhibit that before inserting things into
+       it (bug#19326).
+
+2021-07-13  Michael Albinus  <michael.albinus@gmx.de>
+
+       Add remote-file-name-inhibit-locks
+
+       * doc/emacs/files.texi (Interlocking):
+       * doc/lispref/files.texi (File Locks):
+       * doc/misc/tramp.texi (Auto-save File Lock and Backup):
+       Add remote-file-name-inhibit-locks.
+
+       * etc/NEWS: New user option 'remote-file-name-inhibit-locks'.
+
+       * lisp/files.el (remote-file-name-inhibit-locks): New defcustom.
+
+       * lisp/net/tramp-adb.el (tramp-adb-file-name-handler-alist):
+       * lisp/net/tramp-crypt.el (tramp-crypt-file-name-handler-alist):
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist):
+       * lisp/net/tramp-rclone.el (tramp-rclone-file-name-handler-alist):
+       * lisp/net/tramp-sh.el (tramp-sh-file-name-handler-alist):
+       * lisp/net/tramp-smb.el (tramp-smb-file-name-handler-alist):
+       * lisp/net/tramp-sshfs.el (tramp-sshfs-file-name-handler-alist):
+       * lisp/net/tramp-sudoedit.el (tramp-sudoedit-file-name-handler-alist):
+       Use `tramp-handle-make-lock-file-name'.
+
+       * lisp/net/tramp.el (tramp-allow-unsafe-temporary-files): Fix docstring.
+       (tramp-handle-make-lock-file-name): New defun.
+
+       * test/lisp/net/tramp-tests.el (tramp-test39-lock-file): Extend test.
+
+2021-07-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add new user option to avoid piling on Dired buffers
+
+       * doc/emacs/dired.texi (Dired Visiting): Document it.
+
+       * lisp/dired.el (dired-kill-when-opening-new-dired-buffer): New
+       user option (bug#20598).
+       (dired-up-directory, dired-find-file): Use it.
+       (dired--find-possibly-alternative-file): New convenience command
+       to respect the user option.
+
+2021-07-13  Mattias Engdegård  <mattiase@acm.org>
+
+       Block TLS handshake until TCP connection established
+
+       If a TLS handshake is attempted before the completion of an
+       asynchronous TCP connection has been ascertained, our local state will
+       not be set up correctly for further progress and the sentinel "open"
+       event will never be sent.  This can occur if sufficient time passes
+       after the initiation of an async TCP connection so that by the time
+       `wait_reading_process_output` is called, the connection has already
+       been established on the TCP level.
+
+       This somewhat timing-sensitive bug has plagued HTTPS connections on
+       some platforms, notably macOS, for a long time (bug#49449).
+
+       * src/process.c (wait_reading_process_output): Gate the TLS handshake
+       by the NON_BLOCKING_CONNECT_FD flag.  The flag will be cleared as soon
+       as the TCP socket is found to be writable.
+       * test/src/process-tests.el (process-async-https-with-delay):
+       New test.
+
+2021-07-13  Ken Brown  <kbrown@cornell.edu>
+
+       Fix portability issue with make-serial-process
+
+       * src/sysdep.c (struct speed_struct): New struct.
+       (speeds): New static array of struct speed_struct.
+       (convert_speed): New static function to convert a numerical baud
+       rate (e.g., 9600) to a Bnnn constant defined in termios.h (e.g.,
+       B9600).
+       (serial_configure): Use convert_speed to make the call to cfsetspeed
+       compliant with its advertised API.  (Bug#49524)
+
+2021-07-13  Eli Zaretskii  <eliz@gnu.org>
+
+       One more minor update of the Emacs manual for 19th printing
+
+       * doc/emacs/back.texi:
+       * doc/emacs/book-spine.texi:
+       * doc/emacs/emacs.texi: Last round of minor copyedits for 19th ed.
+
+2021-07-12  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix a problem with tramp-*-process-file
+
+       * lisp/net/tramp-adb.el (tramp-adb-handle-process-file):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-process-file):
+       * lisp/net/tramp-smb.el (tramp-smb-handle-process-file):
+       * lisp/net/tramp-sshfs.el (tramp-sshfs-handle-process-file):
+       Use `(expand-file-name default-directory)'.
+
+2021-07-12  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Port test module to glibc 2.33
+
+       * test/Makefile.in (REPLACE_FREE, FREE_SOURCE_0, FREE_SOURCE_1):
+       New macros.
+       ($(test_module)): Improve accuracy of test as to whether free.c
+       should be compiled; glibc 2.33 does not need it compiled and the
+       compilation breaks if you try, if you build with
+       --enable-gcc-warnings.
+
+2021-07-12  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Pacify gcc 11.1.1 -Wclobbered
+
+       * src/eval.c (Fprogn, internal_lisp_condition_case):
+       Add CACHEABLE to work around more instances of -Wclobbered bug.
+
+2021-07-12  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Pacify gcc 11.1.1 -Wanalyzer-possible-null-dereference
+
+       * oldXMenu/Create.c (XMenuCreate):
+       * oldXMenu/Internal.c (_XMRecomputePane, _XMRecomputeSelection):
+       * oldXMenu/XMakeAssoc.c (XMakeAssoc):
+       * test/src/emacs-module-resources/mod-test.c (Fmod_test_userptr_make):
+       Don’t assume that malloc and calloc succeed.
+
+2021-07-12  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Pacify gcc 11.1.1 -Wanalyzer-null-argument
+
+       * lib-src/etags.c (regexp): Omit member force_explicit_name,
+       since it’s always true.  All uses removed.  This lets us
+       remove calls to strlen (name) where GCC isn’t smart enough
+       to deduce that name must be nonnull.
+       * lib-src/movemail.c (main): Fix bug that could cause
+       link (tempname, NULL) to be called.
+       * src/emacs.c (argmatch): Break check into two ‘if’s,
+       since GCC doesn’t seem to be smart enough to check the single ‘if’.
+       * src/gtkutil.c (xg_update_menu_item): Fix bug where strcmp
+       could be given a NULL arg.
+       * src/xfont.c (xfont_list_family): Use nonnull value for dummy
+       initial value.
+
+2021-07-12  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Pacify gcc -Woverflow more nicely
+
+       * src/alloc.c (mark_maybe_pointer): Simplify pacification
+       of gcc -Woverflow (unknown GCC version).
+
+2021-07-12  Juri Linkov  <juri@linkov.net>
+
+       * lisp/textmodes/enriched.el: Require 'facemenu' (bug#49466)
+
+2021-07-11  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Further tweaks to gnus-search-query-expand-key
+
+       * lisp/gnus/gnus-search.el (gnus-search-query-expand-key): It's
+       possible that KEY could be partially completed (ie no longer string=
+       to COMP), but not all the way. Use a more accurate test. Add
+       docstring.
+
+2021-07-11  Michael Albinus  <michael.albinus@gmx.de>
+
+       Use `auto-save-file-name-p' in tramp-*-write-region
+
+       * lisp/net/tramp.el (tramp-handle-write-region):
+       * lisp/net/tramp-adb.el (tramp-adb-handle-write-region):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-write-region):
+       * lisp/net/tramp-smb.el (tramp-smb-handle-write-region):
+       * lisp/net/tramp-sshfs.el (tramp-sshfs-handle-write-region):
+       Use `auto-save-file-name-p'.
+
+2021-07-11  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix compilation of the --with-wide-int configuration
+
+       * src/alloc.c (mark_maybe_pointer): Fix a recent change for
+       WIDE_EMACS_INT builds.  (Bug#49261)
+
+2021-07-11  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Pacify GCC 11.1.1 20210531 (Red Hat 11.1.1-3)
+
+       * src/image.c (xpm_load_image):
+       * src/xfns.c (x_icon):
+       Rework to pacify gcc -Wmaybe-uninitialized.
+
+2021-07-11  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Make pdumper-marking pickier
+
+       Prevent some false-positives in conservative GC marking.
+       This doesn’t fix any correctness bugs; it’s merely to
+       reclaim some memory instead of keeping it unnecessarily.
+       * src/alloc.c (mark_maybe_pointer): New arg SYMBOL_ONLY.
+       All callers changed.  Check that the pointer’s tag, if any,
+       matches the pdumper-reported type.
+
+2021-07-11  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix pdumper-related GC bug
+
+       * src/alloc.c (mark_maybe_pointer): Also mark pointers
+       to pdumper objects, even when the pointers are tagged.
+       Add a FIXME saying why this isn’t enough.
+
+2021-07-11  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Rewrite gnus-search-query-expand-key
+
+       * lisp/gnus/gnus-search.el (gnus-search-query-expand-key): There was a
+       misunderstanding about how completion-all-completion works (if the
+       test string can't be completed, the whole table is returned). Simplify
+       to use try-completion.
+       * test/lisp/gnus/gnus-search-tests.el (gnus-s-expand-keyword): Ensure
+       that an unknown/uncompletable keyword is returned unmolested.
+
+2021-07-11  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Rework gnus-search-indexed-parse-output
+
+       * lisp/gnus/gnus-search.el (gnus-search-indexed-parse-output): Be more
+       careful about matching filesystem paths to Gnus group names; make
+       absolutely sure that we only return valid article numbers.
+
+2021-07-11  Matthew White  <mehw.is.me@inventati.org>
+
+       * src/buffer.c (kill-buffer): Fix a typo.
+
+       * src/buffer.c (Fkill_buffer): Fix typo in comment.
+
+2021-07-10  Filipp Gunbin  <fgunbin@fastmail.fm>
+
+       doc/lispref/text.texi (Substitution): Add subst-char-in-string
+
+       * doc/lispref/text.texi (Substitution): Document
+       subst-char-in-string (bug#49420).
+
+2021-07-10  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make package-menu-filter-by-status work as documented
+
+       * lisp/emacs-lisp/package.el (package-menu-filter-by-status): Work
+       as documented (bug#49474).
+
+2021-07-09  Ken Brown  <kbrown@cornell.edu>
+
+       Skip a process test on Cygwin to avoid hang
+
+       * test/src/process-tests.el
+       (process-tests/fd-setsize-no-crash/make-network-process): Skip
+       test on Cygwin to avoid hang due to connect/accept handshake.
+       (Bug#49496)
+
+2021-07-09  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/facemenu.el: Preload the C-mouse-2 menu binding
+
+2021-07-09  Michael Albinus  <michael.albinus@gmx.de>
+
+       Further cleanup for file locks
+
+       * doc/misc/tramp.texi (Top, Configuration): Adapt node name for
+       file locks.
+       (Auto-save File Lock and Backup): Rename node name and section
+       title.  Add file-lock to @cindex.  Describe file locks.
+
+       * lisp/dired.el (dired-trivial-filenames): Add lock files.
+       (dired-font-lock-keywords): Move files suffixed with
+       `completion-ignored-extensions' up.  Add lock files to these checks.
+
+       * lisp/net/tramp.el (tramp-get-lock-file, tramp-handle-unlock-file):
+       Use `when-let'
+       (tramp-lock-file-info-regexp): Rename from
+       `tramp-lock-file-contents-regexp'.
+       (tramp-handle-file-locked-p, tramp-handle-lock-file): Adapt callees.
+       (tramp-handle-lock-file): Set file modes of lockname.
+
+       * src/buffer.c (Frestore_buffer_modified_p):
+       * src/fileio.c (write_region):
+       * src/insdel.c (prepare_to_modify_buffer_1): Call Flock_file.
+
+       * src/filelock.c (Qmake_lock_file_name): Declare symbol.
+       (make_lock_file_name): Use it.  Don't check Fboundp, it doesn't
+       work for interned symbols.
+       (lock_file): Return a Lisp_Object.  Don't check create_lockfiles.
+       Remove MSDOS version of the function.
+       (Flock_file): Check create_lockfiles.
+       (Flock_buffer): Call Flock_file.
+
+       * src/lisp.h (lock_file): Remove.
+
+       * test/lisp/shadowfile-tests.el (shadow-test08-shadow-todo)
+       (shadow-test09-shadow-copy-files): Let-bind `create-lockfiles'.
+
+       * test/lisp/net/tramp-tests.el (create-lockfiles): Don't set it
+       globally.
+       (tramp-test39-lock-file): Check also for `set-visited-file-name'.
+
+2021-07-09  Eli Zaretskii  <eliz@gnu.org>
+
+       Partially restore the lost C-mouse-2 drop-down menu
+
+       This allows to pop up the Text Properties menu once facemenu is
+       loaded.  It still doesn't allow C-mouse-2 clicks without manually
+       loading facemenu; FIXME.
+       * lisp/facemenu.el (global-map) <C-down-mouse-2>: Add back the
+       removed binding.  (Bug#49466)
+
+2021-07-09  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/outline.el (outline-mode-cycle-map): Don't bind `tab`.
+
+       Since it would take precedence over bindings for TAB in higher
+       precedence maps.
+
+2021-07-08  Michael Albinus  <michael.albinus@gmx.de>
+
+       * doc/lispref/files.texi (Magic File Names): Add make-lock-file-name.
+
+2021-07-08  Michael Albinus  <michael.albinus@gmx.de>
+
+       Code cleanup wrt file locks
+
+       * lisp/files.el (make-lock-file-name): Fix docstring.
+
+       * lisp/net/tramp-adb.el (tramp-adb-file-name-handler-alist):
+       * lisp/net/tramp-archive.el (tramp-archive-file-name-handler-alist):
+       * lisp/net/tramp-crypt.el (tramp-crypt-file-name-handler-alist):
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist):
+       * lisp/net/tramp-rclone.el (tramp-rclone-file-name-handler-alist):
+       * lisp/net/tramp-sh.el (tramp-sh-file-name-handler-alist):
+       * lisp/net/tramp-smb.el (tramp-smb-file-name-handler-alist):
+       * lisp/net/tramp-sshfs.el (tramp-sshfs-file-name-handler-alist):
+       * lisp/net/tramp-sudoedit.el (tramp-sudoedit-file-name-handler-alist):
+       Add `make-lock-file-name'.
+
+       * lisp/net/tramp.el (tramp-file-name-for-operation):
+       Add `make-lock-file-name'.
+       (tramp-handle-unlock-file): Call `userlock--handle-unlock-error'
+       in case of error.
+
+       * src/buffer.c (Frestore_buffer_modified_p):
+       * src/editfns.c (Freplace_buffer_contents):
+       * src/fileio.c (Finsert_file_contents, write_region): Call Funlock_file.
+
+       * src/filelock.c (unlock_file): Rename from unlock_file_body.
+       Remove the other declarations of unlock_file.  Move file name
+       handler check to ...
+       (Funlock_file): ... here.  Adapt argument numbers.  Call
+       unlock_file wrapped by internal_condition_case.
+       (Flock_file): Adapt argument numbers.
+       (unlock_all_files, Funlock_buffer, unlock_buffer): Call Funlock_file.
+
+       * src/lisp.h (unlock_file): Remove.
+
+2021-07-08  Juri Linkov  <juri@linkov.net>
+
+       Don't turn mouse-1 into mouse-2 when clicking on the tab-line 
(bug#49247)
+
+       * lisp/tab-line.el (tab-line-tab-name-format-default): For 
'tab-line-tab-map'
+       add the property 'follow-link' with the value 'ignore'.
+
+2021-07-08  pillule  <pillule@riseup.net>
+
+       Use display-buffer with re-builder (bug#49069)
+
+       * lisp/emacs-lisp/re-builder.el (re-builder): Uses 'display-buffer'
+       with 'display-buffer-in-direction' to display the reb-buffer.  This
+       allow user-customizations and using it on not splitables windows.
+       Add a dedication to its window so killing this buffer quit the window.
+
+2021-07-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make desktop-kill more robust
+
+       * lisp/desktop.el (desktop-kill): Allow exiting Emacs even if we
+       can't delete the desktop file (bug#20762).
+
+2021-07-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow inhibiting inserting #! in sh-set-shell
+
+       * lisp/progmodes/sh-script.el (sh-set-shell): Allow inhibiting
+       inserting the #! line (bug#20959).
+
+2021-07-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Avoid making backup files in ediff when `make-backup-files' is nil
+
+       * lisp/vc/ediff-util.el (ediff-arrange-autosave-in-merge-jobs):
+       Don't make backup files when `make-backup-files' is nil (bug#21599).
+
+2021-07-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make ido-mode override ffap-file-finder
+
+       * lisp/ffap.el: Autoload so that we can override in ido (bug#21980).
+
+       * lisp/ido.el (ido-everywhere): Override ffap-file-finder.
+
+2021-07-08  Michael Albinus  <michael.albinus@gmx.de>
+
+       Some further adaptions wrt Tramp file name locks
+
+       * lisp/files.el (files--transform-file-name): Rename from
+       `auto-save--transform-file-name'.  Wrap with `save-match-data'.
+       (make-auto-save-file-name): Use it.
+       (make-lock-file-name): Use it.  Call file name handler.
+
+       * lisp/net/tramp.el (tramp-handle-write-region):
+       * lisp/net/tramp-adb.el (tramp-adb-handle-write-region):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-write-region):
+       * lisp/net/tramp-smb.el (tramp-smb-handle-write-region):
+       Suppress file lock for temporary file.
+
+       * lisp/net/tramp-compat.el (tramp-compat-make-lock-file-name):
+       New defalias.
+
+       * lisp/net/tramp.el (tramp-get-lock-file)
+       (tramp-handle-lock-file, tramp-handle-unlock-file): Use it.
+       (tramp-make-lock-name): Remove.
+
+       * test/lisp/filenotify-tests.el (file-notify-test03-events-remote):
+       Tag it :unstable temporarily.
+
+2021-07-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Exclude term-mode from hi-lock global modes
+
+       * lisp/hi-lock.el (hi-lock-exclude-modes): Exclude term-mode so
+       that `C-x' works in terminal buffers (bug#22620).
+
+2021-07-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix font-lock of Makefile variables at the start of lines
+
+       * lisp/progmodes/make-mode.el (makefile-var-use-regex): Match
+       variables at the beginning of lines correctly (bug#23266).  Change
+       suggested by Anders Lindgren <andlind@gmail.com>.
+
+2021-07-08  N. Jackson  <nljlistbox2@gmail.com>
+
+       Mention what happens with timers when the computer is asleep
+
+       * doc/lispref/os.texi (Timers): Explain what happens if the
+       computer is a asleep when the timer is scheduled (bug#23929).
+
+2021-07-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make make_lock_file_name more robust
+
+       * src/filelock.c (make_lock_file_name): Protect against the
+       make-lock-file-name not being defined.
+       (lock_file, unlock_file_body, Ffile_locked_p): Return early if not
+       defined.
+
+2021-07-07  Eli Zaretskii  <eliz@gnu.org>
+
+       * lisp/faces.el: Fix a typo.
+
+2021-07-07  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix last change
+
+       * lisp/faces.el (tty-menu-enabled-face, tty-menu-disabled-face):
+       Define for monochrome displays.
+
+2021-07-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add new user option lock-file-name-transforms
+
+       * doc/emacs/files.texi (Interlocking): Mention
+       lock-file-name-transforms.
+
+       * doc/lispref/files.texi (File Locks): Document
+       lock-file-name-transforms.
+
+       * doc/misc/efaq.texi (Not writing files to the current directory):
+       Mention all the three variables needed to not having Emacs writing
+       files to the current directory in one place.
+
+       * lisp/files.el (lock-file-name-transforms): New user option 
(bug#49261).
+       (make-auto-save-file-name): Factor out the main logic...
+       (auto-save--transform-file-name): ... to this new function.
+       (make-lock-file-name): New function that also calls the
+       factored-out function.
+
+       * src/filelock.c: Remove MAKE_LOCK_NAME and fill_in_lock_file_name.
+       (make_lock_file_name): New utility function that calls out to Lisp
+       to heed `lock-file-name-transforms'.
+       (lock_file): Use it.  Also remove likely buggy call to
+       dostounix_filename.
+       (unlock_file_body, Ffile_locked_p): Also use make_lock_file_name.
+
+2021-07-07  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix tty menus on monochrome displays
+
+       * lisp/faces.el (tty-menu-selected-face): Make sure the selected
+       menu item stands out even without colors.
+
+2021-07-07  Michael Albinus  <michael.albinus@gmx.de>
+
+       Implement file locks for remote files (Bug#49261)
+
+       * doc/lispref/files.texi (Magic File Names): Add file-locked-p,
+       lock-file and unlock-file.
+
+       * etc/NEWS: Tramp supports file locks now.
+
+       * lisp/net/tramp-adb.el (tramp-adb-file-name-handler-alist):
+       Add `file-locked-p', `lock-file' and `unlock-file'.
+       (tramp-adb-handle-write-region): Handle LOCKNAME.
+
+       * lisp/net/tramp-archive.el (tramp-archive-file-name-handler-alist):
+       Add `file-locked-p', `lock-file' and `unlock-file'.
+
+       * lisp/net/tramp-crypt.el (tramp-crypt-file-name-handler-alist):
+       Add `file-locked-p', `lock-file' and `unlock-file'.
+       (tramp-crypt-handle-file-locked-p, tramp-crypt-handle-lock-file)
+       (tramp-crypt-handle-unlock-file): New defun.
+
+       * lisp/net/tramp-fuse.el (tramp-fuse-mounted-p): Simplify.
+       (tramp-fuse-unmount): New defun.
+
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist):
+       Add `file-locked-p', `lock-file' and `unlock-file'.
+       (tramp-gvfs-maybe-open-connection): Set "lock-pid" connection property.
+
+       * lisp/net/tramp-rclone.el (tramp-rclone-file-name-handler-alist):
+       Add `file-locked-p', `lock-file' and `unlock-file'.
+       (tramp-rclone-maybe-open-connection): Set "lock-pid" connection 
property.
+
+       * lisp/net/tramp-sh.el (tramp-sh-file-name-handler-alist):
+       Add `file-locked-p', `lock-file' and `unlock-file'.
+       (tramp-sh-handle-write-region): Handle LOCKNAME.
+
+       * lisp/net/tramp-smb.el (tramp-smb-file-name-handler-alist):
+       Add `file-locked-p', `lock-file' and `unlock-file'.
+       (tramp-smb-handle-copy-directory): Use `sleep-for'.
+       (tramp-smb-handle-write-region): Handle LOCKNAME.
+
+       * lisp/net/tramp-sshfs.el (tramp-sshfs-file-name-handler-alist):
+       Add `file-locked-p', `lock-file' and `unlock-file'.
+       (tramp-sshfs-handle-write-region): Handle LOCKNAME.
+       (tramp-sshfs-maybe-open-connection): Set "lock-pid" connection property.
+
+       * lisp/net/tramp-sudoedit.el (tramp-sudoedit-file-name-handler-alist):
+       Add `file-locked-p', `lock-file' and `unlock-file'.
+       (tramp-sudoedit-maybe-open-connection):
+       Set "lock-pid" connection property.
+
+       * lisp/net/tramp.el (tramp-file-name-for-operation):
+       Add `file-locked-p', `lock-file' and `unlock-file'.
+       (tramp-make-lock-name, tramp-get-lock-file, tramp-get-lock-pid)
+       (tramp-handle-file-locked-p, tramp-handle-lock-file)
+       (tramp-handle-unlock-file): New defuns.
+       (tramp-lock-file-contents-regexp): New regexp.
+       (tramp-handle-write-region): Handle LOCKNAME.
+
+       * src/filelock.c (lock_file, unlock_file_body, Ffile_locked_p):
+       Call handler if exists.
+       (Flock_file, Funlock_file): New defuns.
+       (Qlock_file, Qunlock_file, Qfile_locked_p): Declare symbols.
+       (Slock_file, Sunlock_file): Declare subroutines.
+
+       * test/lisp/net/tramp-archive-tests.el
+       (tramp-archive-test40-make-nearby-temp-file)
+       (tramp-archive-test43-file-system-info): Rename.
+
+       * test/lisp/net/tramp-tests.el (top): Set `create-lockfiles' to nil.
+       (tramp--test-fuse-p): New defun.
+       (tramp-test14-delete-directory): Use it.
+       (tramp-test39-lock-file): New test.
+       (tramp-test40-make-nearby-temp-file)
+       (tramp-test41-special-characters)
+       (tramp-test41-special-characters-with-stat)
+       (tramp-test41-special-characters-with-perl)
+       (tramp-test41-special-characters-with-ls, tramp-test42-utf8)
+       (tramp-test42-utf8-with-stat, tramp-test42-utf8-with-perl)
+       (tramp-test42-utf8-with-ls, tramp-test43-file-system-info)
+       (tramp-test44-asynchronous-requests, tramp-test45-auto-load)
+       (tramp-test45-delay-load, tramp-test45-recursive-load)
+       (tramp-test45-remote-load-path, tramp-test46-unload): Rename.
+       (tramp--test-special-characters, tramp--test-utf8)
+       (tramp--test-asynchronous-requests-timeout): Modify docstring.
+
+2021-07-07  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       fbf1cb2bf2 (origin/emacs-27) Fix overfull hbox in Emacs manual
+       fda60094a2 Minor copyedits of Emacs manual
+
+       # Conflicts:
+       #       doc/emacs/display.texi
+
+2021-07-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make previous empty-body warning disabling more robust
+
+       * lisp/emacs-lisp/macroexp.el (macroexp--expand-all):
+       `byte-compile-warning-enabled-p' may not be defined here.
+
+2021-07-06  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Avoid invalid regexp in wide docstring check
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile--wide-docstring-p):
+       Avoid constructing an invalid regexp during byte-compilation by
+       limiting the number of columns to the current RE_DUP_MAX of 65535.
+       This protects against pathological values of fill-column, for
+       example (bug#49426).
+
+2021-07-06  Juri Linkov  <juri@linkov.net>
+
+       * lisp/repeat.el (describe-repeat-maps): Rename from `describe-repeat'.
+
+       Fix text strings (bug#49265).
+
+2021-07-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make `M-x clipboard-yank' work reliably
+
+       * lisp/menu-bar.el (clipboard-yank): Make the command work
+       consistently (bug#27442).
+
+       * lisp/select.el (gui-selection-value): Try to explain why the
+       logic is the way it is.
+
+2021-07-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Explain what ( . c) means to the Emacs Lisp reader
+
+       * doc/lispref/objects.texi (Dotted Pair Notation): Explain what
+       ( . c) means to the Lisp reader (bug#24875).
+
+2021-07-06  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix right-margin display on TTY frames
+
+       * src/dispnew.c (prepare_desired_row, adjust_glyph_matrix): Adjust
+       the glyph pointer of the right-margin area for all windows but the
+       rightmost ones on TTY frames, to account for the border glyph.
+       (Bug#48257)
+
+2021-07-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Warn when wrapping index matches with `,' after `i' in Info
+
+       * lisp/info.el (Info--current-index-alternative): New internal
+       variable.
+       (Info-warn-on-index-alternatives-wrap): New user option (bug#24282).
+       (Info-index-next): Use the new user option.
+
+2021-07-06  Protesilaos Stavrou  <info@protesilaos.com>
+
+       Add faces for shr heading elements (bug#49433)
+
+       * etc/NEWS: Document new faces.
+       * lisp/net/shr.el (shr-h1, shr-h2, shr-h3, shr-h4, shr-h5, shr-h6):
+       Define new faces.
+       (shr-tag-h1): Remove inclusion of 'variable-pitch' face.  Fix
+       bug#49433 by applying a new face directly.
+       (shr-tag-h2, shr-tag-h3, shr-tag-h4, shr-tag-h5, shr-tag-h6): Apply
+       new faces.
+
+2021-07-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make gnus-gcc-externalize-attachments work again
+
+       * lisp/gnus/gnus-msg.el (gnus-inews-do-gcc): Allow externalizing
+       parts again by defeating the cache (bug#49436).
+
+2021-07-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow inhibiting warnings about unused variables and empty bodies
+
+       * lisp/emacs-lisp/cconv.el (cconv--warn-unused-msg): Allow
+       inhibiting warnings about unbound variables (bug#26486).
+
+       * lisp/emacs-lisp/macroexp.el (macroexp--expand-all): Allow
+       inhibiting warnings about empty bodies.
+
+2021-07-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow using `mm-inline-message' from other mail clients than Gnus
+
+       * lisp/gnus/mm-view.el (mm-inline-message-prepare-function): New
+       variable (bug#49380).
+       (mm-inline-message): Use it to separate out the Gnus-specific code.
+       * lisp/gnus/gnus-art.el (gnus-mime-display-single): ... which has
+       been moved here.
+
+2021-07-06  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix overfull hbox in Emacs manual
+
+       * doc/emacs/display.texi (Displaying Boundaries): Fix overfull
+       hbox.
+
+2021-07-06  Eli Zaretskii  <eliz@gnu.org>
+
+       Minor copyedits of Emacs manual
+
+       * doc/emacs/book-spine.texi: Fix the author attribution.
+       (Bug#49405)
+       * doc/emacs/back.texi: Update text.
+
+2021-07-06  Philip Kaludercic  <philipk@posteo.net>
+
+       Add query command removed in 4ff1f66b12
+
+       * lisp/net/rcirc.el (query): Readd accidentally removed command
+
+2021-07-06  Philip Kaludercic  <philipk@posteo.net>
+
+       Fix issues with argument parsing in rcirc-define-command
+
+       * lisp/net/rcirc.el (rcirc-define-command): Fix issues
+
+2021-07-06  Dmitry Gutov  <dgutov@yandex.ru>
+
+       (xref--insert-xrefs): Fix printing of line numbers
+
+       * lisp/progmodes/xref.el (xref--insert-xrefs):
+       Fix printing of line numbers when we have multiple files with
+       (e.g.) single match on the same line.
+
+2021-07-05  Stephen Leake  <stephen_leake@stephe-leake.org>
+
+       * lisp/progmodes/bug-reference.el: Refer to info manual node
+
+2021-07-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Support reverting in Customize buffers
+
+       * lisp/cus-edit.el (custom--revert-buffer): New function (bug#26871).
+       (Custom-mode): Set up reversion.
+       (custom--invocation-options): New variable.
+       (custom-buffer-create-internal): Set it.
+
+2021-07-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Count zero-length matches in `count-matches' correctly
+
+       * lisp/replace.el (how-many): Count zero-length matches correctly
+       (bug#27359).
+
+2021-07-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Propagate :safe properties when autoloading defcustoms
+
+       * lisp/emacs-lisp/autoload.el (make-autoload): Propagate the :safe
+       property to the loaddefs file (bug#28104).
+
+2021-07-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make `bookmark--unfontify' more robust
+
+       * lisp/bookmark.el (bookmark--unfontify): Don't bug out if there's
+       no fontification recorded (bug#49341).
+
+2021-07-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       `image-save' doc string clarification
+
+       * lisp/image.el (image-save): Clarify what's being saved
+       (bug#49347).
+
+2021-07-05  Michael Albinus  <michael.albinus@gmx.de>
+
+       Don't use LOCKNAME for temp files in Tramp (Bug#49406)
+
+       * lisp/net/tramp.el (tramp-handle-write-region):
+       * lisp/net/tramp-adb.el (tramp-adb-handle-write-region):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-write-region):
+       * lisp/net/tramp-smb.el (tramp-smb-handle-write-region):
+       * lisp/net/tramp-sshfs.el (tramp-sshfs-handle-write-region):
+       Don't use LOCKNAME for temp file.  (Bug#49406)
+
+       * test/lisp/shadowfile-tests.el (password-cache-expiry):
+       Set `shadow-debug' also on emba.
+
+2021-07-05  Martin Rudalics  <rudalics@gmx.at>
+
+       Show hand cursor when dragging frame (Bug#49247)
+
+       * src/xdisp.c (note_mode_line_or_margin_highlight): Show hand
+       cursor when dragging frame with mode, tab or header line.
+       (syms_of_xdisp): Define Qdrag_with_mode_line,
+       Qdrag_with_header_line and Qdrag_with_tab_line.
+
+2021-07-05  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix newly introduced error in tramp-tests.el (Bug#49406)
+
+       * test/lisp/net/tramp-tests.el (tramp--test-check-files):
+       Filter out empty strings.  (Bug#49406)
+
+2021-07-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Ignore .dir-locals-2.el files more
+
+       * lisp/emacs-lisp/shadow.el (load-path-shadows-find):
+       * lisp/emacs-lisp/bytecomp.el (byte-recompile-directory): Ignore
+       .dir-locals-2.el, too (bug#23257).
+
+2021-07-04  Jim Porter  <jporterbugs@gmail.com>
+
+       Ensure 'call-process' interprets INFILE as a local path
+
+       * src/callproc.c (get_current_directory): Rename from
+       'encode_current_directory' and add boolean ENCODE flag.
+       (Fcall_process): Interpret INFILE relative to the working directory
+       from which PROGRAM is run, not 'default-directory'.
+       (call_process): Use 'get_current_directory'.
+       * src/process.c (Fmake_process): Use 'get_current_directory'.
+       * src/process.h (get_current_directory): Rename decl from
+       'encode_current_directory'.
+       * src/sysdep.c (sys_subshell): Use 'get_current_directory' (bug#49283).
+
+2021-07-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Adjust eshell and ps-print to not use emacs-kill-hook
+
+       * lisp/ps-print.el (ps-kill-emacs-check):
+
+       * lisp/eshell/em-dirs.el (eshell-dirs-initialize)
+       (eshell-save-some-last-dir): Don't use `emacs-kill-hook' (bug#28943).
+
+       * lisp/eshell/em-hist.el (eshell-hist-initialize)
+       (eshell-save-some-history):
+
+2021-07-04  Eli Zaretskii  <eliz@gnu.org>
+
+       * lisp/url/url-util.el (url-unhex-string): Doc fix.
+
+2021-07-04  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid deprecation warnings with Texinfo 6.8
+
+       * doc/lispref/functions.texi (Function Safety):
+       * doc/misc/srecode.texi (Parts of SRecode):
+       * doc/misc/wisent.texi (Wisent Semantic, Wisent Lex):
+       * doc/misc/pcl-cvs.texi (Editing files):
+       * doc/misc/bovine.texi (top, Starting Rules)
+       (Bovine Grammar Rules, How Lexical Tokens Match)
+       (Optional Lambda Expression):
+       * doc/emacs/msdos.texi (Windows Keyboard):
+       * doc/emacs/buffers.texi (Several Buffers):
+       * doc/emacs/text.texi (Text): Avoid using @inforef, which is
+       deprecated.
+
+2021-07-04  Alan Third  <alan@idiocy.org>
+
+       Fix crash in GNUstep font coverage check
+
+       * src/nsfont.m (ns_charset_covers): Check coverage more accurately and
+       don't automatically assume the buffer is 8192 bytes long.
+
+2021-07-04  Alan Third  <alan@idiocy.org>
+
+       Remove unused variables
+
+       * src/nsterm.m ([EmacsView keyDown:]): Remove ns_fake_keydown as
+       there's no code that ever sets it to YES.
+
+2021-07-04  Alan Third  <alan@idiocy.org>
+
+       Fix thread memory management under NS
+
+       * src/thread.c (run_thread): Allocate an autorelease pool so that any
+       autoreleased Objective C objects are correctly released.
+
+2021-07-04  Amin Bandali  <bandali@gnu.org>
+
+       Update a few more IRC-related references to point to Libera.Chat
+
+2021-07-04  Amin Bandali  <bandali@gnu.org>
+
+       Merge from origin/emacs-27
+
+       348b2aed0c Update IRC-related references to point to Libera.Chat
+       b0e725e2fe Fix typo in c-macro-expand docstring
+
+       # Conflicts:
+       #       doc/misc/erc.texi
+       #       doc/misc/gnus-faq.texi
+       #       doc/misc/rcirc.texi
+       #       etc/NEWS
+       #       lisp/erc/erc-services.el
+       #       lisp/erc/erc.el
+       #       lisp/ldefs-boot.el
+       #       lisp/net/rcirc.el
+
+2021-07-04  Amin Bandali  <bandali@gnu.org>
+
+       Merge from origin/emacs-27
+
+       d898d3c73a ; * doc/emacs/back.texi: Fix a typo.
+       de52dbd4ad Update doc/emacs/ for a new printing of the Emacs Manual book
+
+2021-07-04  Amin Bandali  <bandali@gnu.org>
+
+       Update IRC-related references to point to Libera.Chat
+
+       Per GNU and FSF's announcements [0, 1] of moving official IRC channels
+       to the Libera.Chat IRC network, as well as several Emacs-related
+       channels following suit [2], update IRC-related references to reflect
+       the migration.
+
+       [0]: https://lists.gnu.org/archive/html/info-gnu/2021-06/msg00005.html
+       [1]: https://lists.gnu.org/archive/html/info-gnu/2021-06/msg00007.html
+       [2]: 
https://lists.gnu.org/archive/html/info-gnu-emacs/2021-06/msg00000.html
+
+2021-07-04  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Speed up fido-mode
+
+       * lisp/icomplete.el (icomplete-completions): Speed up fido-mode 
(bug#48841).
+
+2021-07-03  Daniel Martín  <mardani29@yahoo.es>
+
+       Fix typo in c-macro-expand docstring
+
+       * lisp/progmodes/cmacexp.el (c-macro-expand): Fix typo.  (Bug#49356)
+
+2021-07-03  Christopher League  <league@contrapunctus.net>
+
+       Retain documentation string when customizing theme
+
+       * lisp/cus-theme.el (customize-create-theme): When editing an existing
+       theme, load its doc string into the description widget, instead of
+       replacing it with a date stamp (Bug#49274).
+
+2021-07-02  Philip Kaludercic  <philipk@posteo.net>
+
+       * lisp/net/rcirc.el (rcirc-define-command): Mention name of malformed 
command
+
+       Author:
+
+2021-07-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't have desktop-save-mode query on `M-x kill-emacs'
+
+       * lisp/desktop.el (noninteractive): Prompting functions should not
+       be added to `kill-emacs-hook' (bug#28943).
+       (desktop-kill): Return t so that it can be used from
+       `kill-emacs-query-functions'.
+
+2021-07-02  Michael Albinus  <michael.albinus@gmx.de>
+
+       Implement another fix for bug#49229
+
+       * lisp/minibuffer.el (read-file-name-default): Respect remote files.
+       (Bug#49229)
+
+       * lisp/net/tramp-sh.el (tramp-sh-handle-expand-file-name):
+       Handle special file names on MS Windows.
+
+       * lisp/net/tramp.el (tramp-file-name-handler): Revert patch.
+       (Bug#49229)
+
+2021-07-02  Peter Oliver  <git@mavit.org.uk>
+
+       Hide emacs-mail.desktop, emacsclient-mail.desktop from menus
+
+       These are intended for use as mailto: URL handlers, not for launching
+       directly, so we can reduce clutter by hiding them from a desktop
+       environment’s menus.
+
+       * etc/emacs-mail.desktop, etc/emacsclient-mail.desktop: NoDisplay=true
+
+2021-07-02  Peter Oliver  <git@mavit.org.uk>
+
+       Install emacs-mail.desktop and emacsclient-mail.desktop
+
+       * Makefile.in (install-etc): Install emacs-mail.desktop and
+       emacsclient-mail.desktop
+
+2021-07-02  Peter Oliver  <git@mavit.org.uk>
+
+       Provide an emacsclient-mail.desktop
+
+       We provide both an emacs.desktop and an emacsclient.desktop, so for
+       consistency let’s do the same with mail.
+
+       * etc/emacs-mail.desktop: Extract suggestions for using emacsclient
+       from comments to create emacsclient-mail.desktop.
+       * etc/emacsclient-mail.desktop: Send mail using an existing Emacs
+       rather than starting a new one.
+
+2021-07-02  Tino Calancha  <tino.calancha@gmail.com>
+
+       lisp/auth-source-pass.el: Keep legitimate spaces inside data
+
+       Users should be able to store a field as follows:
+       message: remember: Destroy the image and you will break the enemy
+
+       and later, recover the message untouched, i.e.:
+       "remember: Destroy the image and you will break the enemy"
+
+       * lisp/auth-source-pass.el (auth-source-pass--parse-data): Preserve
+       inner spaces at data.
+       * test/lisp/auth-source-pass-tests.el
+       (auth-source-pass-parse-with-colons-in-data): Add test.
+
+2021-07-02  Iku Iwasa  <iku.iwasa@gmail.com>
+
+       lisp/auth-source-pass.el: Support multiple hosts in search spec
+
+       * lisp/auth-source-pass.el (auth-source-pass-search): Accept a list of
+       strings for argument HOST.
+       (auth-source-pass--build-result): Rename argument HOST to HOSTS. Also
+       return value "host" from entry if it exists.
+       (auth-source-pass--find-match): Rename argument HOST to HOSTS. Iterate
+       over each host in HOSTS.
+       * test/lisp/auth-source-pass-tests.el: Add corresponding tests
+
+2021-07-02  Jim Porter  <jporterbugs@gmail.com>
+
+       Don't pass 'null-device' to 'call-process' in ispell
+
+       * lisp/textmodes/ispell.el (ispell-find-hunspell-dictionaries):
+       Replace 'null-device' with nil (bug#49283).  This allows running a
+       local ispell process when editing a buffer editing a file via Tramp.
+
+2021-07-02  Martin Rudalics  <rudalics@gmx.at>
+
+       New frame parameter 'drag-with-tab-line' (Bug#49247)
+
+       The new frame parameter 'drag-with-tab-line' allows to move
+       frames by dragging their topmost windows' tab line with the
+       mouse thus achieving a behavior similar to that provided by
+       the 'drag-with-header-line' parameter.
+
+       * lisp/mouse.el (mouse-drag-tab-line): New function.
+       (mouse-drag-frame-resize, mouse-drag-frame-move)
+       ([tab-line down-mouse-1]): Handle tab line dragging in various
+       keymaps.
+       * doc/lispref/frames.texi (Mouse Dragging Parameters): Describe
+       new parameter 'drag-with-tab-line'.
+       * etc/NEWS: Add entry for 'drag-with-tab-line'.
+
+2021-07-02  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix a problem of cus-start.el for remote default directories
+
+       * lisp/cus-start.el: Bind `default-directory' to "/" when calling
+       `shell-command-to-string' for a local value on DARWIN.
+
+2021-07-01  Alan Third  <alan@idiocy.org>
+
+       Fix NS self contained eln location (bug#49271)
+
+       * Makefile.in:
+       * configure.ac: Change eln file install location to
+       Contents/Frameworks.
+       * src/comp.c (hash_native_abi): Replace dots with underscores in the
+       eln install location as the macOS code-signing tool won't sign the
+       files if the parent directories have dots.
+
+2021-07-01  Alan Third  <alan@idiocy.org>
+
+       Fix NS native comp search path (bug#49270)
+
+       * configure.ac (NS_SELF_CONTAINED): We need to make lispdirrel the
+       same as lispdir when building a self contained app bundle as they're
+       both relative paths.
+
+2021-07-01  Jonas Bernoulli  <jonas@bernoul.li>
+
+       * lisp/transient.el: Update to package version 0.3.6.
+
+2021-07-01  Mattias Engdegård  <mattiase@acm.org>
+
+       Update describe-prefix-binding manual text
+
+       * doc/emacs/help.texi (Misc Help): `ESC ?` isn't unbound any more.
+
+2021-07-01  Michael Albinus  <michael.albinus@gmx.de>
+
+       Handle test environment variables
+
+       * lisp/emacs-lisp/ert.el (ert-summarize-tests-batch-and-exit):
+       Check also for EMACS_EMBA_CI.
+
+       * test/README (SELECTOR): Mention EMACS_TEST_VERBOSE.
+
+       * test/infra/gitlab-ci.yml (variables): Set EMACS_TEST_VERBOSE.
+
+2021-07-01  Peter Oliver  <git@mavit.org.uk>
+
+       Fix copy/paste error in emacsclient.desktop
+
+       * etc/emacsclient.desktop: new-instance should read new-window.
+
+2021-07-01  Eli Zaretskii  <eliz@gnu.org>
+
+       Update doc/emacs/ for a new printing of the Emacs Manual book
+
+       * doc/emacs/book-spine.texi: New file: the printed book spine.
+       * doc/emacs/back.texi: New file: the backcover text for the
+       printed book.
+       * doc/emacs/emacs.texi: Update ISBN.
+
+2021-07-01  Michael Albinus  <michael.albinus@gmx.de>
+
+       Doc cleanup
+
+       * doc/lispref/files.texi (File Locks, Changing Files)
+       (File Name Components, File Name Expansion, Magic File Names):
+       * lisp/files.el (locate-dominating-stop-dir-regexp)
+       (auto-mode-alist, set-auto-mode, file-name-with-extension)
+       (backup-directory-alist, wildcard-to-regexp)
+       (save-buffers-kill-terminal): Doc fixes.
+
+       * etc/NEWS: Fix typos.
+
+2021-06-30  Jonas Bernoulli  <jonas@bernoul.li>
+
+       In files that use allout use it for all headings
+
+       * lisp/allout.el: Don't prefix regular comments with three
+       semicolons.
+       * lisp/icomplete.el: Use allout syntax for all headings.
+       * lisp/net/eudc.el: Use allout syntax for all headings.
+
+2021-06-30  Jonas Bernoulli  <jonas@bernoul.li>
+
+       * lisp/comint.el: Prefix headings with enough semicolons.
+
+       Outline headings must begin with three or more semicolons.
+
+2021-06-30  Jonas Bernoulli  <jonas@bernoul.li>
+
+       Improve consistency of outline headings in dired libraries
+
+       * lisp/dired-aux.el: Improve consistency of outline headings.
+       * lisp/dired-x.el: Improve consistency of outline headings.
+       * lisp/dired.el: Improve consistency of outline headings.
+
+       - Use three semicolons at beginning of headings because that already
+         is the dominant number of semicolons for headings in these files.
+       - Prefix each heading with a ^L instead of randomly omitting it in
+         front of some.
+       - Always prefix the line with the ^L with a completely empty line.
+       - Begin headings with a capital letter.
+       - Do not update complete headings.
+       - Do not end headings with a period.
+       - Remove a handful of section end markers.
+       - Address further inconsistencies.
+
+2021-06-30  Jonas Bernoulli  <jonas@bernoul.li>
+
+       Cleanup whitespace and comments in dired libraries
+
+       * lisp/dired-aux.el: Cleanup whitespace and comments.
+       * lisp/dired-x.el: Cleanup whitespace and comments.
+       * lisp/dired.el: Cleanup whitespace and comments.
+
+2021-06-30  Jonas Bernoulli  <jonas@bernoul.li>
+
+       Add new function lm-maintainers (bug#48592)
+
+       * doc/lispref/tips.texi (Library Headers): Improve wording.
+       * lisp/emacs-lisp/lisp-mnt.el (lm-maintainers): New function.
+       (lm-maintainer): Make obsolete in favor of lm-maintainer.
+       (lm-verify): Use lm-maintainers.
+       (lm-report-bug): Use lm-maintainers.
+
+2021-06-30  Jonas Bernoulli  <jonas@bernoul.li>
+
+       * lisp/emacs-lisp/lisp-mnt.el (lm-crack-address): Right-trim name.
+
+       The addresses might be aligned in which case we have to trim the
+       extra whitespace at the end of the names.
+
+2021-06-30  João Távora  <joaotavora@gmail.com>
+
+       Adjust docstring of lisp-mode (bug#49278)
+
+       * lisp/emacs-lisp/lisp-mode.el (lisp-mode): Mention that this mode is
+       primarily for Common Lisp.
+
+2021-06-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add new user option to transform kill ring contents
+
+       * doc/emacs/killing.texi (Kill Options): Document it.
+       * lisp/simple.el (kill-new): Use it.
+       (kill-transform-function): New user option (bug#29013).
+
+2021-06-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make the minor mode doc strings say that they're minor modes
+
+       * lisp/emacs-lisp/easy-mmode.el (easy-mmode--arg-docstring):
+       Mention that this is a minor mode (bug#20462).
+
+2021-06-30  Peter Oliver  <git@mavit.org.uk>
+
+       From .desktop files, reuse a frame or start a new Emacs as required
+
+       * doc/emacs/misc.texi: (Using Emacs as a Server) Explain
+       emacsclient.desktop.
+       * etc/NEWS: (Emacs Server): Explain emacsclient.desktop.
+       * etc/emacs-mail.desktop:
+       * etc/emacsclient.desktop: Automatically try to
+       reuse an existing frame, open a new frame, or start a new Emacs
+       daemon.  Add actions for specific behaviours (bug#49195).
+
+2021-06-30  Peter Oliver  <git@mavit.org.uk>
+
+       Revert more of a partially reverted emacsclient.desktop patch
+
+       * etc/emacsclient.desktop: Undo setting of StartupWMClass=Emacsd, since
+       this relies on a change to etc/emacs.service which was also undone.  See
+       bug#37847 for more explanation (bug#49259).
+
+2021-06-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix problem when creating an .authinfo entry with an existing machine 
name
+
+       * lisp/auth-source.el (auth-source-netrc-create): Don't return the
+       incorrect data if there's a matching host entry but the wrong user
+       name (bug#49289).
+
+2021-06-30  Colin Woodbury  <colin@fosskers.ca>
+
+       Add new function file-name-with-extension
+
+       * doc/lispref/files.texi (File Name Components): Document it.
+       * lisp/emacs-lisp/shortdoc.el (file-name): Ditto.
+
+       * lisp/files.el (file-name-with-extension): New function.
+
+2021-06-29  Alan Third  <alan@idiocy.org>
+
+       Fix NS port built with gcc
+
+       * src/nsterm.m (ns_relocate): The NSArray shorthand notation doesn't
+       work in GCC.
+
+2021-06-29  Juri Linkov  <juri@linkov.net>
+
+       * lisp/repeat.el (describe-repeat): New command (bug#49265).
+
+2021-06-29  Michael Albinus  <michael.albinus@gmx.de>
+
+       Sync with Tramp 2.5.1
+
+       * doc/misc/trampver.texi:
+       * lisp/net/trampver.el: Change version to "2.5.1".
+
+       * lisp/net/tramp.el (tramp-handle-write-region):
+       * lisp/net/tramp-adb.el (tramp-adb-handle-write-region):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-write-region): Call
+       local `write-region' directly.
+
+       * test/lisp/net/tramp-tests.el (tramp--test-utf8): Adapt test for
+       MS Windows.
+
+2021-06-29  Alex McGrath  <amk@amk.ie>
+
+       Fix SASL joining channels after auth
+
+       Send CAP END after authentication has been successful
+
+2021-06-29  Martin Rudalics  <rudalics@gmx.at>
+
+       In read_minibuf_unwind don't try to select dead window (Bug#49248)
+
+       * src/minibuf.c (read_minibuf_unwind): Don't try to select dead
+       window (Bug#49248).
+
+2021-06-28  Alex McGrath  <alexmcgraak@arista.com>
+
+       Fix SASL on rcirc-update
+
+2021-06-28  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       ef5f3d5ee7 (origin/emacs-27) C++ Mode: Handle new keywords static_cas...
+
+2021-06-28  Reuben Thomas  <rrt@sc3d.org>
+
+       * lisp/textmodes/ispell.el: Fix finding dictionaries for Enchant.
+
+       (ispell-find-enchant-dictionaries):
+
+       I originally copied this code from the equivalent code for
+       Aspell. Unfortunately it was wrong for the case of Enchant: it should
+       find only dictionaries that Enchant knows about, and not merge in
+       `ispell-dictionary-base-alist' or add a default element, as these
+       are dealt with in `ispell-set-spellchecker-params'.
+
+       This caused a bug where the correct `-d' argument would not be added
+       to the invocation of enchant, leading to the process not being
+       correctly started.
+
+2021-06-28  Reuben Thomas  <rrt@sc3d.org>
+
+       * lisp/textmodes/ispell.el: Check process is live before interacting.
+
+       Check that `ispell-process' is live before trying to read from or
+       write to it. This avoids a hang if the process has died.
+
+2021-06-28  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix bug#49229 in shell.el
+
+       * lisp/shell.el (shell): Ensure, that a remote shell is remote.
+       (Bug#49229)
+
+2021-06-28  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/files.el (hack-one-local-variable): Allow `add-function` in 
`eval:`
+
+       (Bug#49163)
+
+2021-06-27  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/textmodes/flyspell.el: Fix bug#49104
+
+       (flyspell--prev-meta-tab-binding): Delete var.
+       (flyspell-prog-mode): Don't set it.
+       (flyspell-auto-correct-word): Lookup the "next" command dynamically.
+
+2021-06-27  Alan Mackenzie  <acm@muc.de>
+
+       C++ Mode: Handle new keywords static_cast, etc., wrt angle brackets
+
+       * lisp/progmodes/cc-langs.el (c-<>-arglist-kwds): Add const_cast,
+       dynamic_cast, reinterpret_cast and static_cast into this lang const.
+
+       * 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.
+       (c-forward-<>-arglist-recur): If in a matching <...> expression, the < 
has a
+       syntax-table property, but the > not, remove that property.
+
+2021-06-26  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/minibuffer.el (completion-in-region--single-word): Simplify
+
+       Remove redundant args `collection` and `predicate` which were always
+       equal to `minibuffer-completion-table` and
+       `minibuffer-completion-predicate` anyway.
+
+       (minibuffer-complete-word):
+       * lisp/emacs-lisp/crm.el (crm-complete-word): Simplify accordingly.
+
+2021-06-26  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/minibuffer.el (minibuffer--completion-prompt-end): Rename
+
+2021-06-26  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/cl-macs.el: Fix test regression
+
+       (cl--alist-to-plist): New function.
+       (cl-struct-slot-info): Use it.
+
+2021-06-26  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix Tramp bug#49229
+
+       * lisp/net/tramp.el (tramp-file-name-handler): Drop possible
+       volume letter when `expand-file-name' is called with a local
+       absolute file name as first argument.  (Bug#49229)
+
+2021-06-26  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/minibuffer.el (completion--prompt-end): New function (bug#30668)
+
+       (minibuffer-complete, minibuffer-force-complete-and-exit)
+       (minibuffer-force-complete, minibuffer-complete-and-exit)
+       (minibuffer-complete-word, minibuffer-completion-help): Use it.
+
+2021-06-26  Alan Third  <alan@idiocy.org>
+
+       Fix NS self-contained build configuration
+
+       * configure.ac: When rebuilding epaths.h for NS check that we're
+       actually doing an NS build first.
+
+2021-06-26  Alan Third  <alan@idiocy.org>
+
+       Fix NS native compilation builds
+
+       * Makefile.in (ns_applibexecdir):
+       (ns_applibdir):
+       (ns_appdir): New variables.
+       (.PHONY): Include new rule.
+       (epaths-force-ns-self-contained): Remove the app bundle directory from
+       all paths.
+       * configure.ac (NS_SELF_CONTAINED): Set the default site-lisp
+       directory instead of hard-coding it in the ObjC code, and use the new
+       epaths generating make rule.
+       * src/callproc.c (init_callproc_1):
+       (init_callproc): Remove all the NS specific code as the special cases
+       are now handled by decode_env_path.
+       * src/emacs.c (load_pdump):
+       (decode_env_path): Use ns_relocate to find the correct directory after
+       relocation.
+       * src/lread.c (load_path_default): Remove all the NS specific code as
+       the special cases are now handled by decode_env_path.
+       * src/nsterm.h: Update function definitions.
+       * src/nsterm.m (ns_etc_directory):
+       (ns_exec_path):
+       (ns_load_path): Remove functions that are no longer needed.
+       (ns_relocate): New function to calculate paths within the NS app
+       bundle.
+       * nextstep/Makefile.in (ns_applibexecdir): New variable, and update
+       anything relying on the libexec location.
+
+2021-06-26  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Small improvements to handling of IMAP mark search
+
+       * lisp/gnus/gnus-search.el (gnus-search-imap-handle-flag): Use a
+       KEYWORD search for any mark starting with a "$", so
+       "mark:$hasattachment" goes through as "KEYWORD $hasattachment".
+
+2021-06-25  Mattias Engdegård  <mattiase@acm.org>
+
+       Print newlines as \n instead of \12 in ERT results
+
+       This makes test errors unquestionably more readable.  The change also
+       makes FF print as \f; other controls still use octal escapes.
+
+       * lisp/emacs-lisp/ert.el (ert--pp-with-indentation-and-newline):
+       Run `pp` with `pp-escape-newlines` set to `t`.
+
+2021-06-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make (find-face-definition 'default) work more reliably
+
+       * lisp/emacs-lisp/find-func.el (find-function--defface): New
+       function (bug#30230).
+       (find-function-regexp-alist): Use it to skip past definitions
+       inside comments and strings.
+
+2021-06-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix the name of the sorted minor mode map after previous change
+
+       * lisp/bindings.el (mode-line-major-mode-keymap): Change the name
+       of the minor mode menu items.
+
+2021-06-25  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix race conditions between Lisp threads in GTK builds
+
+       * src/xgselect.c (release_select_lock, acquire_select_lock)
+       [GCC >= 4.7.0]: Use '__atomic' builtins to prevent races between
+       threads in accessing 'threads_holding_glib_lock'.  Reported by
+       <dick.r.chiang@gmail.com>.  (Bug#36609)
+
+2021-06-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix Tramp bug#49178
+
+       * lisp/net/tramp.el (tramp-handle-find-backup-file-name)
+       (tramp-handle-make-auto-save-file-name): Adapt checks.  (Bug#49178)
+
+2021-06-25  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el (tab-bar--define-keys): Fix global-mode-string 
(bug#49215)
+
+2021-06-25  Stephen Berman  <stephen.berman@gmx.net>
+
+       Prevent Org mode from mistakenly changing Calendar keymap
+
+       * lisp/org/org-compat.el (org--setup-calendar-bindings): Fix logic
+       in test of 'org-agenda-diary-file' (bug#48199).
+
+2021-06-25  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix syntax-category of some punctuation characters
+
+       * lisp/textmodes/text-mode.el (text-mode-syntax-table): Don't
+       modify the global syntax-table just because we load text-mode.el.
+       This happens at loadup time, and then affects the default syntax
+       in all modes, not just in text-mode and its derivatives.
+       (Bug#49214)
+
+2021-06-24  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/bindings.el (bindings--sort-menu-keymap): Add "menu" in its name
+
+       (bindings--menu-item-string): Use `pcase`.
+
+2021-06-24  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/cl-preloaded.el: Fix the format of props in slot-descs
+
+       (cl--plist-remove): Remove.
+       (cl--plist-to-alist): New function.
+       (cl-struct-define): Use it to convert slots's properties to the
+       format expected by `cl-slot-descriptor`.
+
+       * lisp/emacs-lisp/cl-extra.el (cl--describe-class-slots): Revert last
+       changes, not needed any more.
+
+2021-06-24  Alex McGrath  <amk@amk.ie>
+
+       Add SASL authentication to rcirc
+
+       * lisp/net/rcirc.el (rcirc-handler-AUTHENTICATE): New function
+       (bug#48601).
+       (rcirc-authenticate):
+       (rcirc-connect): Support sasl.
+       (rcirc-get-server-password, rcirc-get-server-method): New functions.
+       (rcirc-authinfo): Document it.
+
+2021-06-24  Mattias Engdegård  <mattiase@acm.org>
+
+       Don't call ERT explainer on error
+
+       * lisp/emacs-lisp/ert.el (ert--expand-should-1): If the predicate form
+       signals an error, don't call an explainer because the arguments passed
+       (the error and error argument, respectively) do not make any sense to
+       the explainer at all.
+
+2021-06-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Attempt to make defclass documentation more legible
+
+       * lisp/emacs-lisp/cl-extra.el (cl--print-table): Attempt to make
+       defclass documentation more readable (bug#30998).
+       (cl--describe-class-slots): Ditto.
+
+2021-06-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix printing of defclass documentation slots again
+
+       * lisp/emacs-lisp/cl-extra.el (cl--describe-class-slots): Fix
+       printing defclass slots, and retain printing of defstruct slots
+       (bug#30998 and bug#46662).
+
+2021-06-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow `C-u M-x dig' to ask for a query type
+
+       * lisp/net/dig.el (dig): Allow prompting for a query type
+       (bug#31810).
+
+2021-06-24  Alex McGrath  <amk@amk.ie>
+
+       Add SASL authentication to rcirc
+
+       * lisp/net/rcirc.el (rcirc-handler-AUTHENTICATE): New function
+       (bug#48601).
+       (rcirc-authenticate):
+       (rcirc-connect): Support sasl.
+       (rcirc-get-server-password, rcirc-get-server-method): New functions.
+       (rcirc-authinfo): Document it.
+
+2021-06-24  E. Choroba  <choroba@matfyz.cz>
+
+       Fix highlighting in cperl-mode for "for /regex/"
+
+       * lisp/progmodes/cperl-mode.el (cperl-find-pods-heres): Fix
+       highlighting of regexp in "print for /./;" (bug#49192).
+
+2021-06-24  Jim Porter  <jporterbugs@gmail.com>
+
+       Ignore file-missing errors during diff-refined font-locking
+
+       * lisp/vc/diff-mode.el (diff--font-lock-refined): Ignore file-missing
+       errors (bug#49197).
+
+2021-06-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify the help in the package buffers
+
+       * lisp/emacs-lisp/package.el (package--quick-help-keys): Clarify
+       marking help (bug#40457).
+
+2021-06-24  Jim Porter  <jporterbugs@gmail.com>
+
+       Sort the items in 'mode-line-mode-menu' before displaying the menu
+
+       * lisp/bindings.el (bindings--menu-item-string, bindings--sort-keymap):
+       New functions.
+       (mode-line-major-mode-keymap, mode-line-minor-mode-keymap):
+       Sort 'mode-line-mode-menu'.
+
+2021-06-23  Saroj Thirumalai  <emacs_bugs.saroj@thirumalai.com>  (tiny change)
+
+       * lisp/printing.el (pr-global-menubar): Fix duplicate menu problem.
+
+       In Emacs 27.1 Print menu items were moved to a submenu of the File menu.
+       The Printing package (lisp/printing.el) replaces the Print menu (via the
+       function: pr-global-menubar).  The latter needs to be updated to 
reflect the
+       changes; otherwise, a second Print (sub)menu is created at the end of 
the
+       File menu.
+
+2021-06-23  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Fix defvar->defcustom conversion in ethio-util.el
+
+       * lisp/language/ethio-util.el (ethio-primary-language)
+       (ethio-secondary-language): Don't quote the const.
+       (ethio-use-three-dot-question, ethio-quote-vowel-always)
+       (ethio-W-sixth-always, ethio-numeric-reduction)
+       (ethio-java-save-lowercase): Really make them defcustom.
+
+2021-06-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make ethio-* variables into user options
+
+       * lisp/language/ethio-util.el (ethiopic): New group.
+       (ethio-primary-language, ethio-secondary-language)
+       (ethio-use-colon-for-colon, ethio-use-three-dot-question)
+       (ethio-quote-vowel-always, ethio-W-sixth-always)
+       (ethio-numeric-reduction, ethio-java-save-lowercase): Make into
+       user options (bug#33024).
+
+2021-06-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Sort the items in 'mode-line-mode-menu' before displaying the 
menu"
+
+       This reverts commit d4d6d8f335165e2bda8942b4acd45e5bab613b70.
+
+       This approach doesn't work on certain types of keymaps, so it should be 
implemented in a different way.
+
+2021-06-23  Jim Porter  <jporterbugs@gmail.com>
+
+       Sort the items in 'mode-line-mode-menu' before displaying the menu
+
+       * lisp/bindings.el (bindings--menu-item-string, bindings--sort-keymap):
+       New functions.
+       (mode-line-major-mode-keymap, mode-line-minor-mode-keymap):
+       Sort 'mode-line-mode-menu'.
+
+2021-06-23  dickmao  <none>
+
+       Clean up code in `message-replace-header'
+
+       * lisp/gnus/message.el (message-replace-header): Elide redundancy
+       (bug#49180).
+
+2021-06-23  dickmao  <none>
+
+       Fix message-replace-header after recent change
+
+       * lisp/gnus/message.el (message-replace-header): Restore else
+       branch removed by mistake in 989de3b824 (bug#49179).
+
+2021-06-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Give feedback to the user in dired-do-find-regexp
+
+       * lisp/dired-aux.el (dired-do-find-regexp): Give some feedback to
+       the user (bug#35352).
+
+2021-06-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make minor mode docstrings say what the mode "variable" is
+
+       * lisp/emacs-lisp/easy-mmode.el (easy-mmode--arg-docstring): Add
+       the mode variable (bug#36500).
+       (easy-mmode--mode-docstring):
+       (define-minor-mode): Pass in the getter.
+
+2021-06-22  Protesilaos Stavrou  <info@protesilaos.com>
+
+       Use named face for apropos-button
+
+       * etc/NEWS: Document new face.
+       * lisp/apropos.el (apropos-button): Define new face.
+       (apropos-face): Specify face instead of hardcoding
+       attributes (bug#49162).
+
+2021-06-22  Peter Oliver  <git@mavit.org.uk>
+
+       If the daemon’s TTY is our only frame, create a new frame
+
+       * lisp/server.el (server-process-filter): If there won't be a
+       current frame to use, fall back to trying to create a new one
+       (bug#11033).
+
+2021-06-22  Peter Oliver  <git@mavit.org.uk>
+
+       Advertise support for Startup Notification when built with GTK
+
+       * etc/emacsclient.desktop, etc/emacsclient.desktop: Specify
+       StartupNotify=true.
+       * configure.ac (USE_STARTUP_NOTIFICATION): New variable, yes iff
+       HAVE_GTK.
+       * Makefile.in (install-etc): Remove StartupNotify=true from
+       etc/*.desktop unless USE_STARTUP_NOTIFICATION (bug#48783).
+
+2021-06-22  Utkarsh Singh  <utkarsh190601@gmail.com>
+
+       Make tex-compile-commands heed tex-start-options
+
+       * lisp/textmodes/tex-mode.el (tex-compile-commands): Respect
+       `tex-start-options' (bug#49018).
+
+2021-06-22  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix "make -j install"
+
+       * Makefile.in (install-eln): Depend on 'lisp', so that people
+       could say "make -j install" without a separate "make" step.
+       (Bug#49099)
+
+2021-06-22  Stephen Gildea  <stepheng+emacs@gildea.com>
+
+       time-stamp: add principled, expressive %z
+
+       * lisp/time-stamp.el (time-stamp-formatz-from-parsed-options): New
+       function for time zone offset formatting ("%z" variants).
+
+       * test/lisp/time-stamp-tests.el (formatz*): New unit tests to cover
+       the new implementation of %5z.
+
+2021-06-21  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Fix shortdoc-add-function section creation
+
+       * lisp/emacs-lisp/shortdoc.el (shortdoc-add-function): Use nconc to
+       actually append a new section to the list of groups while avoiding a
+       previous OBOE.  Push a new group to the front of shortdoc--groups
+       without copying it, just like define-short-documentation-group does.
+       (buffer): Fix copypasta in unlock-buffer example.
+
+       * test/lisp/emacs-lisp/shortdoc-tests.el (shortdoc-examples): Also
+       check that :no-value forms demonstrate the right function.
+
+       * doc/lispref/help.texi (Documentation Groups): Clarify that @dots
+       in the define-short-documentation-group arglist refer to whole
+       key-value pairs.  Fix typo in :eg-result-string description.
+
+2021-06-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       NEWS for tool bar "X" in *Help* buffers change (bug#49139)
+
+2021-06-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix prompting for large files when loading literally
+
+       * lisp/files.el (find-file-noselect): Don't include "literally" in
+       the "large file" prompt if we're gonna load literally anyway
+       (bug#49144).
+
+2021-06-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make find-file-literally ignore local variables again
+
+       * lisp/files.el (find-file-noselect-1): Re-inhibit local variables
+       when loading a file literally (bug#49143).  This was broken by
+       5bedbe6b1d.
+
+2021-06-21  Alex Bochannek  <alex@bochannek.com>
+
+       Refactor gnus-article-sort-by-*
+
+       * lisp/gnus/gnus-sum.el (gnus-article-sort-extract-extra): New
+       function (bug#49081).
+       (gnus-article-sort-by-recipient): Use it.
+       (gnus-article-sort-by-newsgroups): Ditto.
+
+2021-06-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Further fixes for bound-and-true-p doc string
+
+       * lisp/bindings.el (bound-and-true-p): Improve doc string.
+
+2021-06-21  Andrea Corallo  <akrl@sdf.org>
+
+       Do not attempt to write .elc files when not necessary (bug#49118)
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-file): Do not attempt to
+       write .elc files when not necessary.
+
+2021-06-21  Philip Kaludercic  <philipk@posteo.net>
+
+       Query encryption using yes-or-no-p
+
+       * lisp/net/rcirc.el (rcirc-prompt-for-encryption): Replace 
completing-read
+         prompt with yes-or-no-p
+
+2021-06-20  Alan Third  <alan@idiocy.org>
+
+       Fix GNUstep menu update crashes
+
+       * src/nsmenu.m (ns_update_menubar): close the submenus before modifying 
them.
+       ([EmacsMenu close]): Make sure to close all submenus.
+
+2021-06-20  Alan Third  <alan@idiocy.org>
+
+       Fix GNUstep build warnings
+
+       * src/nsterm.h ([EmacsWindow orderedIndex]):
+       * src/nsterm.m ([EmacsWindow orderedIndex]): Implement orderedIndex
+       for use under GNUstep.
+       * src/nsmenu.m (free_frame_menubar):
+       (ns_update_menubar):
+       ([EmacsMenu addSubmenuWithTitle:]):
+       ([EmacsMenu addItemWithWidgetValue:attributes:]): Cast return values
+       to correct types.
+       ([EmacsMenu fillWithWidgetValue:]): Move variable definition inside
+       relevant #ifdef block.
+       ([EmacsMenu menuWillOpen:]):
+       ([EmacsMenu menuDidClose:]):
+       ([EmacsMenu confinementRectForMenu:onScreen:]):
+       ([EmacsMenu menu:willHighlightItem:]): New functions to silence build
+       warnings.
+       * src/nsfont.m (nsfont_open): Remove pointless fabs call.
+
+2021-06-20  Michael Albinus  <michael.albinus@gmx.de>
+
+       Adapt tests in tramp-archive-tests.el
+
+       * test/lisp/net/tramp-archive-tests.el
+       (tramp-archive-test05-expand-file-name)
+       (tramp-archive-test06-directory-file-name): Adapt tests.
+
+2021-06-20  Grant Shangreaux  <grant@churls.world>
+
+       Add input methods for Lakota
+
+       The White Hat and Suggested Lakota Orthography are represented here
+       by three different input modes: A prefix and postfix mode for the SLO,
+       and a postfix mode for the White Hat orthography.
+       * lisp/leim/quail/latin-post.el (lakota-slo-postfix)
+       (lakota-white-hat-postfix):
+       * lisp/leim/quail/latin-pre.el (lakota-slo-prefix): New input methods.
+       * etc/HELLO: Call out the additions.
+
+2021-06-20  Juri Linkov  <juri@linkov.net>
+
+       Add new convenience command for *Help*
+
+       * doc/emacs/help.texi (Help Mode): Document it (bug#36767).
+
+       * lisp/help-mode.el (help-mode-map): Add 'c'.
+       (help-mode-menu): Add help-customize.
+       (help-customize): New command.
+
+2021-06-19  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix error in tramp-archive.el
+
+       * lisp/net/tramp-archive.el (tramp-archive-file-name-handler):
+       Archive must exist.  (Bug#49030, Bug#49043)
+
+       * test/lisp/net/tramp-archive-tests.el
+       (tramp-archive-test06-directory-file-name): Tag it :unstable 
temporarily.
+
+2021-06-19  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       7722b510aa (origin/emacs-27) Another improvement in documentation of ...
+       8d5c70d73a Improve documentation of profiler
+       0ffef0b46b Document 'ispell-program-name'
+       7be610f911 Fix documentation of 'face-extend-p'
+
+       # Conflicts:
+       #       doc/lispref/debugging.texi
+
+2021-06-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Use file-truename on files loaded with "emacs -l"
+
+       * lisp/startup.el (command-line-1): When loading a file, use the
+       truename so that eval-after-load works more reliably (bug#49009).
+       Change suggested by ctarbide@tuta.io.
+
+2021-06-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve bound-and-true-p doc string
+
+       * lisp/bindings.el (bound-and-true-p): Improve doc string (bug#49116).
+
+2021-06-19  dickmao  <none>
+
+       De-obfuscate gnutls_handshake loop
+
+       * src/gnutls.c (gnutls_try_handshake): Rewrite the handshake loop
+       for greater clarity (bug#49055).
+
+2021-06-19  Alex Bochannek  <alex@bochannek.com>
+
+       New Gnus Summary buffer sort options for extra headers
+
+       * lisp/gnus/gnus-sum.el (gnus-article-sort-functions)
+       (gnus-thread-sort-functions, gnus-subthread-sort-functions)
+       (gnus-summary-mode-map, gnus-summary-make-menu-bar)
+       (gnus-article-sort-by-newsgroups)
+       (gnus-summary-sort-by-newsgroups, gnus-summary-sort-by-extra):
+       Sort by Newsgroups extra header. Prompt for header name for other
+       extra headers.
+
+       * doc/misc/gnus.texi (Summary Sorting): Document new sort functions
+
+       * etc/NEWS: New Gnus Summary buffer sort feature (bug#49081).
+
+2021-06-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Another improvement in documentation of "memory" profiler
+
+       * lisp/profiler.el (profiler-start): Fix the doc string to better
+       explain what is "memory" profiler.
+
+2021-06-19  Łukasz Stelmach  <stlman@poczta.fm>
+
+       Allow `message-replace-header' to take a list of AFTERs
+
+       * lisp/gnus/message.el (message-replace-header): Facilitate
+       capability of message-position-on-field to accept multiple headers
+       as AFTERS argument and make possible to mimic behavioir of
+       message-goto-* functions with message-replace-header in case the
+       header does not exist (bug#49070).
+
+2021-06-19  Alex Bochannek  <alex@bochannek.com>
+
+       Add support for displaying total number of groups in subgroups in Gnus
+
+       * lisp/gnus/gnus-topic.el (gnus-topic-line-format)
+       (gnus-topic-line-format-alist, gnus-topic-prepare-topic)
+       (gnus-topic-insert-topic-line, )
+       (gnus-topic-display-missing-topic, )
+       (gnus-topic-update-topic-line):
+       Provide number of groups in subtopics for topic line display and
+       add 'G' element to be used for 'gnus-topic-line-format' variable
+
+       * doc/misc/gnus.texi (Topic Variables):
+       Document 'G' element for 'gnus-topic-line-format' variable (bug#49068).
+
+2021-06-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of profiler
+
+       * doc/lispref/debugging.texi (Profiling): Stop misleading users
+       about what "memory" profiling really is.
+
+2021-06-19  Jim Porter  <jporterbugs@gmail.com>
+
+       Improve to selsel doc strings
+
+       * lisp/delsel.el (delete-active-region): Document interactive behavior.
+       * lisp/delsel.el (delete-selection-repeat-replace-region):
+       Use "\\[universal-argument]" instead of literal "C-u" in docstring.
+
+2021-06-19  Michael Albinus  <michael.albinus@gmx.de>
+
+       Revert "Add `file-name-set-extension'"
+
+       This reverts commit 4f1a5e456e35930e8d0713b990bd7b14923cfe97.
+
+2021-06-19  Michael Albinus  <michael.albinus@gmx.de>
+
+       Add `file-name-set-extension'
+
+       * lisp/files.el (file-name-with-extension): New defun.
+
+       * test/lisp/files-tests.el (files-tests-file-name-with-extension-good)
+       (files-tests-file-name-with-extension-bad): New tests.
+
+2021-06-19  Philip Kaludercic  <philipk@posteo.net>
+
+       Use add-to-list instead of manually modifying minor-mode-alist
+
+2021-06-19  Michael Albinus  <michael.albinus@gmx.de>
+
+       Handle case remote uid is 0 in some Tramp related tests
+
+       * test/lisp/filenotify-tests.el:
+       * test/lisp/shadowfile-tests.el:
+       Set `tramp-allow-unsafe-temporary-files' to t.
+
+2021-06-18  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix Morse for non-ASCII letters
+
+       * lisp/play/morse.el (morse-code): Downcase letters in the table
+       because they must match downcased input.
+
+2021-06-18  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve and update the 'etags' test suite
+
+       * lib-src/etags.c (mercury_pr): Remove redundant comment.
+
+       * test/manual/etags/merc-src/accumulator.m: Add more complex
+       declarations.
+       * test/manual/etags/ETAGS.good_1:
+       * test/manual/etags/ETAGS.good_2:
+       * test/manual/etags/ETAGS.good_3:
+       * test/manual/etags/ETAGS.good_4:
+       * test/manual/etags/ETAGS.good_5:
+       * test/manual/etags/ETAGS.good_6:
+       * test/manual/etags/CTAGS.good: Adapt to latest changes in 'etags'
+       and the test suite.  (Bug#47408)
+
+2021-06-18  Fabrice Nicol  <fabrnicol@gmail.com>
+
+       Fix Mercury support, notably qualified procedures.
+
+           Correct the previous fix (did not correctly handle qualified types).
+           Also fix the following issues:
+           - remove module name (+ dot) from tags, as prefixing module name is
+             often inconsistent in code and may cause tags to be too specific.
+           - now tag 0-arity predicates and functions (':- func foo_14.')
+           - now tag one-word declarations (':- interface.')
+
+           * lib-src/etags.c (mercury_pr): Pass the correct NAME and NAMELEN
+           arguments to 'make_tag'.
+           (mercury_decl): Return more information about the declaration or
+           definition it finds.  This allows mercury_pr to be smarter.
+           (Bug#47408)
+
+2021-06-18  Philipp Stephani  <phst@google.com>
+
+       Update SCSS test file syntax.
+
+       According to
+       https://sass-lang.com/documentation/breaking-changes/slash-div, the
+       slash operator should be replaced by 'math.div'.
+
+       Fixed using the migration tool mentioned at
+       
https://sass-lang.com/documentation/breaking-changes/slash-div#automatic-migration.
+
+       * test/manual/indent/scss-mode.scss: Remove slash operator.
+
+2021-06-18  Arash Esbati  <arash@gnu.org>
+
+       Use \footref when referencing a footnote label
+
+       * lisp/textmodes/reftex-vars.el (reftex-label-alist-builtin): Use
+       \footref as `reference-format' for \footnote macro.
+
+2021-06-18  Arash Esbati  <arash@gnu.org>
+
+       Support new LaTeX kernel macro \footref
+
+       * lisp/textmodes/reftex-vars.el (reftex-ref-style-alist): Add
+       entry for \footref macro which is part of LaTeX kernel 2021-06-01.
+
+2021-06-17  Juri Linkov  <juri@linkov.net>
+
+       * lisp/help-fns.el (help--symbol-class): Concat chars for all 
namespaces.
+
+       Since Emacs Lisp is more than Lisp-2, separately output letters
+       for each namespace: functions, variables, faces, classes.
+       Use non-letter characters for additional properties
+       such as advice, obsolete, local.
+       (help--symbol-completion-table-affixation): Use format "%-4s".
+       https://lists.gnu.org/archive/html/emacs-devel/2021-06/msg00524.html
+
+2021-06-17  Juri Linkov  <juri@linkov.net>
+
+       Fix display-buffer-override-next-command for no-select case (bug#49057)
+
+       * lisp/window.el (display-buffer-override-next-command):
+       Separate 'postfun' from 'clearfun', so 'clearfun' resets
+       'display-buffer-overriding-action', whereas 'postfun' calls
+       'post-function' that can select the right window in 'post-command-hook'.
+
+       * lisp/windmove.el (windmove-display-no-select): Add new choice 
'ignore'.
+       Improve docstring.
+       (windmove-display-in-direction): Use new value 'ignore' of
+       'windmove-display-no-select'.  Improve docstring.
+       (windmove-display-left, windmove-display-up)
+       (windmove-display-right, windmove-display-down): Mention
+       'windmove-display-no-select' in docstrings.
+
+2021-06-16  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/cl-generic.el: Fix bug#49053 and bug#47454
+
+       (cl-generic-define-method): Shorten the time window where the symbol is
+       defined to `dummy`.
+
+2021-06-16  Mattias Engdegård  <mattiase@acm.org>
+
+       Eliminate some GCC warnings
+
+       * src/doprnt.c (exprintf, evxprintf):
+       * src/lisp.h (exprintf, evxprintf): Don't use a pointer-to-const type
+       for the `nonheapbuf` argument: although it is never dereferenced, GCC
+       will warn when passing a pointer to uninitialised memory otherwise.
+       * src/fns.c (sort_vector_copy, realize_face, realize_gui_face)
+       (realize_tty_face): Use the same signatures in the prototypes as in
+       the actual function definitions.
+
+2021-06-16  Glenn Morris  <rgm@gnu.org>
+
+       * lisp/simple.el (save-interprogram-paste-before-kill): Fix type.
+
+2021-06-16  Mattias Engdegård  <mattiase@acm.org>
+
+       * src/xdisp.c (gui_draw_bottom_divider): Fix misleading indentation.
+
+2021-06-16  Mattias Engdegård  <mattiase@acm.org>
+
+       Remove outdated advise from manual
+
+       * doc/lispref/modes.texi (Search-based Fontification):
+       Remove paragraph that has been unnecessary and confusing ever since
+       regexp-opt stopped using capturing brackets more than 21 years ago.
+
+2021-06-16  Pip Cet  <pipcet@gmail.com>
+
+       Prepare pdumper dump file in memory, write it in one go (Bug#46881)
+
+       * src/pdumper.c (struct dump_context): Add buf, buf_size, max_offset 
fields.
+       (dump_grow_buffer): New function.
+       (dump_write): Use memcpy, not an actual emacs_write.
+       (dump_seek): Keep track of maximum seen offset. Don't actually seek.
+       (Fdump_emacs_portable): Write out the file contents when done.
+
+2021-06-16  Philip Kaludercic  <philipk@posteo.net>
+
+       Force mode line update after modifying activity string
+
+       * lisp/net/rcirc.el (rcirc-update-activity-string): Call 
force-mode-line-update
+
+2021-06-16  pillule  <pillule@riseup.net>
+
+       User option to choose a function triggered by windmove-create 
(bug#48917)
+
+       * lisp/windmove.el (windmove-create-window): Add a defcustom choice.
+       (windmove-do-window-select): Trigger custom functions, update the 
docstring.
+
+2021-06-16  pillule  <pillule@riseup.net>
+
+       User option to select 'no-other-window' with windmove (bug#48916)
+
+       * lisp/windmove.el (windmove-wrap-around): Remove superfluous :group 
tag.
+       (windmove-create-window): Remove superfluous :group tag.
+       (windmove-window-distance-delta): Remove superfluous :group tag.
+       (windmove-allow-all-windows): Add new user option to allow the commands
+       of windmove to target windows with the 'no-other-window parameter.
+       (windmove-find-other-window): Use windmove-allow-all-windows.
+       (windmove-display-no-select): Remove superfluous :group tag.
+       (windmove-display-in-direction): Use windmove-allow-all-windows.
+       (windmove-delete-in-direction): Use windmove-allow-all-windows.
+       (windmove-swap-states-in-direction): Use windmove-allow-all-windows.
+       (windmove-default-keybindings): Remove superfluous :group tag.
+       (windmove-display-default-keybindings): Remove superfluous :group tag.
+       (windmove-delete-default-keybindings): Remove superfluous :group tag.
+       (windmove-swap-states-default-keybindings): Remove superfluous :group 
tag.
+
+2021-06-15  Philip Kaludercic  <philipk@posteo.net>
+
+       Fix edge case with single argument for rcirc-define-command
+
+       * lisp/net/rcirc.el (rcirc-define-command): Update regular expression 
generator
+
+2021-06-15  Philip Kaludercic  <philipk@posteo.net>
+
+       Fix argument parser for rcirc-define-command with string input
+
+       * lisp/net/rcirc.el (rcirc-define-command): Require at least one space 
between
+       arguments
+
+2021-06-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make help-view-source more robust
+
+       * lisp/help-mode.el (help-view-source): Check the right thing to
+       see if we can jump to the source file.
+
+2021-06-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add new convenience commands for *Help*
+
+       * doc/emacs/help.texi (Help Mode): Document it (bug#36767).
+
+       * lisp/help-fns.el (help-fns-function-description-header)
+       (describe-variable, describe-face, describe-keymap)
+       (describe-mode): Add the required data.
+
+       * lisp/help-mode.el (help-mode-map): Add 'i' and 's'.
+       (help-mode--current-data): New variable.
+       (help-mode): Make it local.
+       (help-view-source, help-goto-info): New commands.
+
+2021-06-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify (interactive "K") in the manual
+
+       * doc/lispref/commands.texi (Interactive Codes): Clarify
+       (interactive "K") (bug#37146).
+
+2021-06-15  Philip Kaludercic  <philipk@posteo.net>
+
+       Check if server buffer is live
+
+       * lisp/net/rcirc.el (with-rcirc-server-buffer): Use live-buffer-p
+       (rcirc-buffer-nick): Use with-rcirc-server-buffer
+       (rcirc-switch-to-server-buffer): Use with-rcirc-server-buffer
+
+2021-06-15  Eli Zaretskii  <eliz@gnu.org>
+
+       Document 'ispell-program-name'
+
+       * doc/emacs/fixit.texi (Spelling): Document
+       'ispell-program-name'.  (Bug#49039)
+
+2021-06-15  Julian Scheid  <jscheid@protonmail.com>
+
+       Allow ERT tests to output the failure reasons, too
+
+       * lisp/emacs-lisp/ert.el (ert-reason-for-test-result): New function.
+       (ert-run-tests-batch): Output failure or skip reason  (bug#47071).
+
+2021-06-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a new function syntax-class-to-char
+
+       * doc/lispref/syntax.texi (Syntax Table Internals): Document it.
+       * src/syntax.c (Fsyntax_class_to_char): New function (bug#37452).
+
+2021-06-15  Jared Finder  <jared@finder.org>
+
+       Fix dragging dividers in terminal Emacs when there's margins
+
+       * lisp/mouse.el (mouse-drag-line): Do the right thing in the
+       presence of margins (bug#41156).
+       (mouse-drag-line): Bind left-margin/right-margin in the map, too.
+
+2021-06-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Document `completions-format'
+
+       * doc/emacs/mini.texi (Completion Options): Document
+       `completions-format'.
+
+       * lisp/simple.el (completion-list-mode): Mention in (bug#49003).
+
+2021-06-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix false positives in docstring width warning with (fn...) constructs.
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile--wide-docstring-p):
+       Don't consider the function signature when determining whether the
+       doc string is too wide (bug#49007).  (The signature is folded
+       later when displaying help.)
+
+2021-06-15  Philip Kaludercic  <philipk@posteo.net>
+
+       Improve message markup
+
+       * lisp/net/rcirc.el (rcirc-markup-text-functions): Add 
rcirc-color-attributes,
+       rcirc-remove-markup-codes
+       (rcirc-markup-attributes): Recognize strike-through and monospace,
+       don't remove control codes
+       (rcirc-color-attributes): Recognize mIRC color codes
+       (rcirc-remove-markup-codes): Add function
+       (rcirc-monospace-text): Add face
+
+2021-06-15  Stephen Gildea  <stepheng+emacs@gildea.com>
+
+       mh-junk need not support SpamAssassin 2.20 from 2003
+
+       * lisp/mh-e/mh-junk.el (mh-spamassassin-*list): Remove support
+       for SpamAssassin 2.20.  (SpamAssassin 3.0 was released in 2004.)
+       This change updates both the flags for sa-learn and the comments
+       about how the current version works.
+
+       This change reverts part of a change made in 2003 that added
+       support for what was even then an "old version of spamassassin."
+
+2021-06-14  Philip Kaludercic  <philipk@posteo.net>
+
+       Fix construction of interactive specification in rcirc-define-command
+
+       * lisp/net/rcirc.el (rcirc-define-command): Ensure that only one 
argument is passed.
+
+2021-06-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove unused variable from sgml-mode test
+
+       * test/lisp/textmodes/sgml-mode-tests.el (sgml-test-brackets):
+       Remove unused variable.
+
+2021-06-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Get fractional seconds in iso8601 parsing right
+
+       * lisp/calendar/iso8601.el (iso8601-parse-time): Get fractional
+       times (with leading zeroes in the fraction part) right (bug#49017).
+       Fix based on a patch by "J.P." <jp@neverwas.me>.
+
+2021-06-14  Andrea Corallo  <akrl@sdf.org>
+
+       Do not produce .elc temporary file when unnecessary (bug#48978)
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-file): Produce .elc
+       temporary files only when non native compiling or when native
+       compiling but `byte+native-compile' is non nil.
+
+2021-06-14  Stephen Berman  <stephen.berman@gmx.net>
+
+       Fix problem in HTML with bracketed characters
+
+       * lisp/textmodes/sgml-mode.el (sgml-tag-syntax-table): Use bracket
+       syntax for all Unicode bracket characters (bug#43941).
+
+2021-06-14  Andrea Corallo  <akrl@sdf.org>
+
+       ;* lisp/emacs-lisp/bytecomp.el (byte-native-compiling): Typo fix.
+
+       * lisp/emacs-lisp/bytecomp.el (byte+native-compile): Update docstring.
+
+2021-06-14  Philip Kaludercic  <philipk@posteo.net>
+
+       Rename set-rcirc-{encode,decode}-coding-system
+
+       * lisp/net/rcirc.el (set-rcirc-decode-coding-system): Deprecate command
+       (rcirc-set-decode-coding-system): New command
+       (set-rcirc-encode-coding-system): Deprecate command
+       (rcirc-set-encode-coding-system): New command
+
+2021-06-14  Philip Kaludercic  <philipk@posteo.net>
+
+       Preserve order of completion during cycling
+
+       * lisp/net/rcirc.el (rcirc-completion-at-point): Specify 
cycle-sort-function
+
+2021-06-14  Michael Albinus  <michael.albinus@gmx.de>
+
+       Handle sensitive auto-save or backup remote files (Bug#45245)
+
+       * doc/misc/tramp.texi (Auto-save and Backup):
+       Describe tramp-allow-unsafe-temporary-files.
+       (Ad-hoc multi-hops): Use proper format.
+
+       * etc/NEWS: Mention confirmation for writing sensitive auto-save
+       or backup remote files to the local temporary directory..
+
+       * lisp/net/tramp-cache.el (tramp-dump-connection-properties):
+       Strengthen test.
+
+       * lisp/net/tramp.el (tramp-allow-unsafe-temporary-files): New defcustom.
+       (tramp-handle-find-backup-file-name)
+       (tramp-handle-make-auto-save-file-name): Don't expose sensible
+       auto-save or backup files on local temporary directory.  (Bug#45245)
+
+       * test/lisp/net/tramp-tests.el (tramp--test-always): New defalias.
+       (tramp-test10-write-region, tramp-test21-file-links)
+       (tramp--test--deftest-direct-async-process): Use it.
+       (tramp-test37-make-auto-save-file-name)
+       (tramp-test38-find-backup-file-name): Extend tests.
+
+2021-06-14  pillule  <pillule@riseup.net>
+
+       Improve handling of dedicated flag for side windows (Bug#48493)
+
+       * doc/lispref/windows.texi (Buffers and Windows): Mention the
+       special handling of side windows and add a reference.
+       (Buffer Display Action Alists): Say explicitly that
+       `display-buffer-in-side-window' is dedicating to side by default.
+       (Dedicated Windows): Add case (4) and explain its meaning, add
+       a reference.
+       (Displaying Buffers in Side Windows): Move the paragraph about
+       `switch-to-(prev|next)-buffer' into a new item to emphasize the
+       special meaning of dedication for side windows.
+       * lisp/window.el (set-window-buffer-start-and-point): Restore
+       side dedication.
+       (switch-to-prev-buffer, switch-to-next-buffer): Correct return
+       value that should be nil instead of the same buffer in case of
+       no change.
+       (delete-windows-on): Restore side dedication.
+       (replace-buffer-in-windows): Update the docstring, restore side
+       dedication.
+       (quit-restore-window): Rearrange the logic so that strongly
+       dedicated windows are eventually deleted first.  Restore the
+       side dedication.  In the final case try to
+       `switch-to-prev-buffer' before deleting a window (Bug#48367).
+
+2021-06-14  Philip Kaludercic  <philipk@posteo.net>
+
+       Add mouse properties to activity string
+
+       * lisp/net/rcirc.el (rcirc-activity-string): Allow clicking on string
+
+2021-06-13  Philip Kaludercic  <philipk@posteo.net>
+
+       Update activity string after switching to next active buffer
+
+       * lisp/net/rcirc.el (rcirc-next-active-buffer): Call 
rcirc-update-activity-string
+
+2021-06-13  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix documentation of 'face-extend-p'
+
+       * doc/lispref/display.texi (Attribute Functions): Fix description
+       of 'face-extend-p'.  (Bug#48936)
+
+2021-06-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix previous pulse.el fix
+
+       * lisp/cedet/pulse.el (pulse-reset-face): Fix up previous
+       pulse-reset-face change -- reset back to the start face
+       (bug#48936).
+
+2021-06-13  dickmao  <dick.r.chiang@gmail.com>
+
+       Avoid an infinite loop in mml-expand-html-into-multipart-related
+
+       * lisp/gnus/mml.el (mml-expand-html-into-multipart-related):
+       Skip images with empty filename parts (bug#49001).
+
+2021-06-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Reset the pulse face more fully in pulse-reset-face
+
+       * lisp/cedet/pulse.el (pulse-reset-face): Reset the :extend to nil
+       if there's no face given (bug#48936).
+
+2021-06-13  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix wording of recently added documentation
+
+       * etc/NEWS:
+       * lisp/simple.el (save-interprogram-paste-before-kill): Fix
+       wording of a recently added documentation.  (Bug#41168)
+
+2021-06-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fsubstitute_in_file_name doc string clarification
+
+       * src/fileio.c (Fsubstitute_in_file_name): Mention that undefined
+       variables aren't replaced (as opposed to what happens in a shell
+       substitution) (bug#40949).
+
+2021-06-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow save-interprogram-paste-before-kill to be a number
+
+       * doc/emacs/killing.texi (Clipboard): Document it.
+       * lisp/simple.el (save-interprogram-paste-before-kill): Extend
+       range (bug#41168).
+       (kill-new): Implement it (bug#41168).
+
+2021-06-13  Juri Linkov  <juri@linkov.net>
+
+       * doc/emacs/windows.texi (Change Window): Add pxref to (elisp)Deleting 
Windows
+
+       (Bug#47300)
+
+2021-06-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       EIEIO: Promote the CLOS behavior over the EIEIO-specific behavior
+
+       Change docs to advertize `slot-value` rather than `oref`.
+       Change the implementation of `:initform` to better match the CLOS 
semantics,
+       while preserving the EIEIO semantics, but warn when encountering cases
+       where the two diverge.
+       Demote the mostly unused special semantics of `oref-default`
+       on non-class allocated slots.
+
+       * doc/misc/eieio.texi (Quick Start): Use `slot-value`.
+       (Accessing Slots): Move `slot-value` before `oref`.
+       Fix paren-typo in example (reported by pillule <pillule@riseup.net>).
+       (Introspection): Remove mention of `class-slot-initarg`.
+
+       * lisp/transient.el (transient--parse-group, transient--parse-suffix):
+       Don't use `oref-default` to get the default value.
+       (transient-lisp-variable): Init forms are evaluated.
+
+       * lisp/emacs-lisp/eieio.el (defclass): Warn about inapplicable
+       `:initarg` and about uses of init forms that are ambiguous.
+       (oref): Don't advertize the deprecated use of initargs as slot names.
+       (oref-default): Don't advertize the deprecated case where it returns the
+       initform's value.
+       (initialize-instance): Use `macroexp-const-p`.
+       * lisp/emacs-lisp/eieio-core.el (eieio--unbound): Rename from
+       `eieio-unbound`.
+       (eieio--unbound-form): New var.
+       (eieio--slot-override): Use it.
+       (eieio-defclass-internal): Use it.  Change `init` so it should always
+       be evaluated.
+       (eieio--known-class-slot-names): New var.
+       (eieio--eval-default-p): Rename from `eieio-eval-default-p`.
+       (eieio--perform-slot-validation-for-default): Use `macroexp-const-p` to
+       decide whether to skip the test.
+       (eieio--add-new-slot): Register slot in `eieio--known-class-slot-names`
+       when applicable.
+       (eieio-oref-default, eieio-oset-default): Add warning for unknown slots
+       and slots not known to be allocated to the class.
+       (eieio-default-eval-maybe): Delete function.  Use just `eval` instead.
+       (eieio-declare-slots): Allow slots to specify their allocation class.
+
+       * lisp/cedet/srecode/insert.el (point): Declare the slot instead of
+       moving the class definition before the slot's first use.
+       (srecode-template-inserter-point, srecode-insert-fcn):
+       Use nil instead of unbound for the `point` slot.
+
+       * lisp/cedet/srecode/compile.el (srecode-template-inserter):
+       Declare the `key` slot that all children should have.
+
+       * lisp/emacs-lisp/eieio-speedbar.el (eieio-speedbar)
+       (eieio-speedbar-directory-button, eieio-speedbar-file-button):
+       * lisp/emacs-lisp/eieio-custom.el (eieio-widget-test-class):
+       * lisp/emacs-lisp/chart.el (chart-bar):
+       * lisp/cedet/semantic/ede-grammar.el (semantic-ede-proj-target-grammar):
+       * lisp/cedet/semantic/db.el (semanticdb-project-database):
+       * lisp/cedet/semantic/db-javascript.el (semanticdb-table-javascript)
+       (semanticdb-project-database-javascript):
+       * lisp/cedet/semantic/db-el.el (semanticdb-table-emacs-lisp)
+       (semanticdb-project-database-emacs-lisp):
+       * lisp/cedet/semantic/db-ebrowse.el (semanticdb-table-ebrowse)
+       (semanticdb-project-database-ebrowse):
+       * lisp/cedet/ede/proj.el (ede-proj-project):
+       * lisp/cedet/ede/proj-obj.el (ede-proj-target-makefile-objectcode):
+       * lisp/cedet/ede/generic.el (ede-generic-project):
+       * lisp/cedet/ede/config.el (ede-project-with-config):
+       * lisp/cedet/ede/base.el (ede-target, ede-project):
+       * lisp/auth-source.el (auth-source-backend): Init forms are evaluated,
+       so quote them accordingly.
+
+2021-06-12  Robert Pluim  <rpluim@gmail.com>
+
+       Make `window-system-for-display' work for ipv6, too
+
+       * lisp/term/x-win.el (display-format-alist): Also work for ipv6
+       (bug#42045).
+
+2021-06-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify some browse-url doc strings
+
+       * lisp/net/browse-url.el (browse-url-of-file)
+       (browse-url-of-buffer, browse-url-of-region, browse-url)
+       (browse-url-at-point, browse-url-at-mouse): Clarify doc strings
+       (bug#42432).
+
+2021-06-12  Tassilo Horn  <tsdh@gnu.org>
+
+       Use file-in-directory-p instead of obsolete dired-in-this-tree-p
+
+       * lisp/dired-aux.el (dired-rename-subdir,dired-rename-subdir-1)
+       (dired-insert-subdir,dired-insert-subdir-validate)
+       (dired-kill-tree,dired-tree-down): Use file-in-directory-p instead of
+       obsolete dired-in-this-tree-p.
+
+2021-06-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix double (recursive) load of fortran.el
+
+       * lisp/progmodes/fortran.el (fortran-menu): Move menu creation to
+       the end to avoid a recursive load (bug#43116).
+
+2021-06-12  Alex Bochannek  <alex@bochannek.com>
+
+       Mention nov-is-evil/nnvirtual combination in the Gnus manual
+
+       * doc/misc/gnus.texi (To From Newsgroups): Mention using separate
+       select methods for different values (bug#48801).
+
+2021-06-12  Matt Beshara  <m@mfa.pw>
+
+       Add ability to bring only the selected frame to the front (bug#48865)
+
+       Causes ‘ns-hide-emacs’ to layer the selected frame in front of every 
other
+       application’s windows, and give that frame keyboard focus, when called 
with
+       'activate-front.
+
+       * src/nsfns.m (Fns_hide_emacs): Allow activating only selected frame.
+
+2021-06-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/benchmark.el (benchmark-elapse): Tweak
+
+2021-06-11  Martin Rudalics  <rudalics@gmx.at>
+
+       Rename/rewrite recently added option and function in window.el
+
+       * lisp/window.el (window-at-x-y): Rename from `window-at-pos'.
+       Fix doc-string.
+       (delete-window-choose-selected): Rename from
+       `delete-window-set-selected'.  Fix doc-string.
+       (delete-window): Adjust to above renaming.
+       * doc/emacs/windows.texi (Change Window): Mention new option
+       `delete-window-choose-selected'.
+       * etc/NEWS:
+       * doc/lispref/windows.texi (Deleting Windows): Follow up on
+       above renamings.
+
+2021-06-11  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Simplify vc-git-log-switches's usage; change default value to nil
+
+       * lisp/vc/vc-git.el (vc-git-log-switches):
+       Do not mention or allow the value 't' anymore
+       (https://lists.gnu.org/archive/html/emacs-devel/2021-06/msg00452.html).
+       (vc-git-print-log): Use 'vc-git-log-switches' directly.
+
+2021-06-10  Philip Kaludercic  <philipk@posteo.net>
+
+       Preserve incoming order of messages with same timestamp
+
+       * lisp/net/rcirc.el (rcirc-print): Emulate time-less-or-equal-p
+
+2021-06-10  Philip Kaludercic  <philipk@posteo.net>
+
+       Allow hiding certain message types after reconnecting
+
+       * lisp/net/rcirc.el (rcirc-omit-after-reconnect): Add new user option
+       (rcirc-reconncting): Add new variable
+       (rcirc-print): Check if message should be omitted
+       (reconnect): Mark buffers as freshly reconnected
+
+2021-06-10  Philip Kaludercic  <philipk@posteo.net>
+
+       Use defvar-local instead of setq-local where applicable
+
+2021-06-10  Philip Kaludercic  <philipk@posteo.net>
+
+       Allow for optional arguments using rcirc-define-command
+
+       * lisp/net/rcirc.el (rcirc-define-command): Handle &optional arguments
+
+2021-06-10  Philip Kaludercic  <philipk@posteo.net>
+
+       Fix prompt doubling when reconnecting
+
+       * lisp/net/rcirc.el (rcirc-connect): Check if rcirc-mode is already 
active
+       (rcirc-get-buffer-create): Check if rcirc-mode is already active
+
+2021-06-10  Philip Kaludercic  <philipk@posteo.net>
+
+       Allow filtering how nicks are presented
+
+       * lisp/net/rcirc.el (rcirc-nick-filter): Add new option
+       (rcirc-completion-at-point): Use rcirc-nick-filter
+       (rcirc-format-response-string): Use rcirc-nick-filter
+       (rcirc-sort-nicknames-join): Use rcirc-nick-filter
+
+2021-06-10  Philip Kaludercic  <philipk@posteo.net>
+
+       Implement invite-notify capability
+
+       * lisp/net/rcirc.el (rcirc-implemented-capabilities): Add invite-notify
+       (rcirc-handler-INVITE): Handle invite notifications
+
+2021-06-10  Philip Kaludercic  <philipk@posteo.net>
+
+       Add TAGMSG handler
+
+       * lisp/net/rcirc.el (rcirc-handler-TAGMSG): Add new message handler
+
+2021-06-10  Philip Kaludercic  <philipk@posteo.net>
+
+       Implement message-ids extension
+
+       * lisp/net/rcirc.el (rcirc-implemented-capabilities): Add to list of
+       implemented extensions
+       (rcirc-print): Insert property denoting message ID
+
+2021-06-10  Philip Kaludercic  <philipk@posteo.net>
+
+       Implement batch extension
+
+       * lisp/net/rcirc.el (rcirc-implemented-capabilities): Add batch 
extension
+       (rcirc-supported-batch-types): Add new variable
+       (rcirc-batch-attributes): Add new variable
+       (rcirc-batched-messages): Add new variable
+       (rcirc-process-server-response-1): Handle messages with batch tag
+       (rcirc-handler-BATCH): Add batch dispatcher
+
+2021-06-10  Philip Kaludercic  <philipk@posteo.net>
+
+       Implement server-time extension
+
+       * lisp/net/rcirc.el (rcirc-implemented-capabilities): Add new capability
+       (rcirc-print): Insert messages in the right position
+       (rcirc-log): Use right time value
+       (rcirc-markup-timestamp): Use right time value
+
+2021-06-10  Philip Kaludercic  <philipk@posteo.net>
+
+       Create framework for IRCv3 support
+
+       * lisp/net/rcirc.el (rcirc-implemented-capabilities): Add new variable
+       (rcirc-requested-capabilities): Add new variable
+       (rcirc-acked-capabilities): Add new variable
+       (rcirc-connect): Request capabilities from 
rcirc-implemented-capabilities
+       (rcirc-process-regexp): Extend rcirc-process-regexp with tag support
+       (rcirc-tag-regexp): Add new tokenizer for tags
+       (rcirc-message-tags): Add new variable
+       (rcirc-get-tag): Add new function
+       (rcirc-process-server-response-1): Parse message-tags
+       (rcirc-handler-CAP): Add new handler for capability requests
+
+2021-06-10  Philip Kaludercic  <philipk@posteo.net>
+
+       Replace defun-rcirc-command with rcirc-define-command
+
+       * lisp/net/rcirc.el (defun-rcirc-command): Remove old macro
+       (rcirc-define-command): Create new macro
+
+2021-06-10  Eli Zaretskii  <eliz@gnu.org>
+
+       Support mercury in 'ctags' as well
+
+       The previous lack of support was due to incorrect calls to 'make_tag'
+       in 'mercury_pr', which caused 'pfnote' to refrain from adding Mercury
+       tags to the list of recorded tags.
+
+       * lib-src/etags.c (mercury_pr): Pass the correct NAME and NAMELEN
+       arguments to 'make_tag'.
+
+       * test/manual/etags/CTAGS.good: Adjust to the above change.
+
+2021-06-10  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of 'M-y'
+
+       * doc/emacs/killing.texi (Yanking): Mention that TTY frames can
+       also support yanking from the clipboard.
+       (Earlier Kills): Finalize the documentation of the new behavior
+       of the lone 'M-y'.  (Bug#48478)
+
+2021-06-10  Martin Rudalics  <rudalics@gmx.at>
+
+       Provide new option `delete-window-set-selected' (Bug#47300)
+
+       When `delete-window' deletes its frame's selected window, this new
+       option allows to choose another window as replacement.
+
+       * lisp/window.el (get-lru-window, get-mru-window)
+       (get-largest-window): New optional argument NO-OTHER.
+       (window-at-pos): New function.
+       (delete-window-set-selected): New option.
+       (delete-window): Handle `delete-window-set-selected'.
+       * src/window.c (Fdelete_window_internal): Set the selected
+       window of WINDOW's frame to the first window on that frame and
+       let `delete-window' choose a more suitable window instead.
+       * doc/lispref/windows.texi (Deleting Windows): Describe new
+       option `delete-window-set-selected'.
+       (Cyclic Window Ordering): Describe new NO-OTHER argument for
+       `get-lru-window', `get-mru-window' and `get-largest-window'.
+       * etc/NEWS: Mention `delete-window-set-selected' and the NO-OTHER
+       argument.
+
+2021-06-09  Alan Third  <alan@idiocy.org>
+
+       Remove pause on fullscreening in NS (bug#48406)
+
+       * src/nsterm.m (ns_make_frame_visible):
+       (ns_set_parent_frame):
+       ([EmacsView windowWillEnterFullScreen:]):
+       ([EmacsView windowDidEnterFullScreen:]):
+       ([EmacsView windowWillExitFullScreen:]):
+       ([EmacsView initFrameFromEmacs:]): Remove references to
+       in_fullscreen_transition.
+       ([EmacsView toggleFullScreen:]): Remove calls to removed methods.
+       ([EmacsView inFullScreenTransition]):
+       ([EmacsView waitFullScreenTransition]): Remove Methods.
+       * src/nsterm.h (EmacsView): Remove definitions of removed methods, and
+       the in_fullscreen_transition variable.
+
+2021-06-09  Glenn Morris  <rgm@gnu.org>
+
+       * lib/Makefile.in (Makefile): Fix typo.
+
+2021-06-09  Philip Kaludercic  <philipk@posteo.net>
+
+       Remove custom rcirc-completion implementation
+
+       * lisp/net/rcirc.el (rcirc-completion-at-point): Improve completion 
suggestions
+       (rcirc-completions): Remove variable
+       (rcirc-completion-start): Remove variable
+       (rcirc-complete): Remove function
+       (rcirc-mode-map): Bind TAB to completion-at-point
+       (rcirc-mode): Use cycling for completion
+
+2021-06-09  Philip Kaludercic  <philipk@posteo.net>
+
+       Recognize quoted commands in rcirc-process-input-line
+
+       * lisp/net/rcirc.el (rcirc-process-input-line): Check for quoted 
commands
+       (rcirc-process-command): Don't check for quoted commands
+
+2021-06-09  Philip Kaludercic  <philipk@posteo.net>
+
+       Integrate formatting into rcirc-send-string
+
+       * lisp/net/rcirc.el (rcirc-connect): Use new syntax
+       (rcirc-send-string): Allow for more arguments
+       (rcirc-send-privmsg): Use new syntax
+       (rcirc-send-ctcp): Use new syntax
+       (rcirc-send-message): Use new syntax
+       (rcirc-clean-up-buffer): Use new syntax
+       (join): Use new syntax
+       (invite): Use new syntax
+       (part): Use new syntax
+       (quit): Use new syntax
+       (nick): Use new syntax
+       (names): Use new syntax
+       (topic): Use new syntax
+       (whois): Use new syntax
+       (mode): Use new syntax
+       (list): Use new syntax
+       (oper): Use new syntax
+       (kick): Use new syntax
+       (rcirc-handler-PING): Use new syntax
+       (rcirc-handler-ctcp-VERSION): Use new syntax
+       (rcirc-handler-ctcp-ACTION): Use new syntax
+       (rcirc-handler-ctcp-TIME): Use new syntax
+
+2021-06-09  Philip Kaludercic  <philipk@posteo.net>
+
+       Fix checkdoc complaints and related issues
+
+2021-06-09  Philip Kaludercic  <philipk@posteo.net>
+
+       Use auth-source for user-passwords
+
+       * (rcirc): Use auth-source is no password was specified
+
+2021-06-09  Philip Kaludercic  <philipk@posteo.net>
+
+       Default to libera instead of freenode
+
+       * lisp/net/rcirc.el (rcirc-server-alist): Update default value
+
+2021-06-09  Alan Third  <alan@idiocy.org>
+
+       Fix image filename encoding issues (bug#48902)
+
+       * src/image.c (image_find_image_fd): Don't return an encoded filename
+       string.
+       * src/nsfns.m: ([NSString stringWithLispString:]): Clarify usage
+       comment.
+       * src/nsimage.m ([EmacsImage allocInitFromFile:]): No need to encode
+       the filename when converting to NSString.
+
+2021-06-09  Michael Albinus  <michael.albinus@gmx.de>
+
+       * etc/NEWS: New user option 'shell-has-auto-cd'.
+
+2021-06-09  Jason Kim  <jason.kim@revtera.com>  (tiny change)
+
+       Handle auto-cd in shell-mode
+
+       * lisp/shell.el (shell-has-auto-cd): New defcustom.
+       (shell-directory-tracker): Handle implicit "cd".
+
+2021-06-09  Utkarsh Singh  <utkarsh190601@gmail.com>  (tiny change)
+
+       New user option for Git log switches
+
+       * lisp/vc/vc-git.el (vc-git-diff-switches): New defcustom.
+       (vc-git-print-log): Use it.
+
+       * etc/NEWS: Announce the new option.
+
+2021-06-08  Juri Linkov  <juri@linkov.net>
+
+       * lisp/simple.el (yank-from-kill-ring): Add edited string to the 
kill-ring.
+
+       (Bug#48478)
+
+2021-06-08  Juri Linkov  <juri@linkov.net>
+
+       Sync overlay code in minibuffer-message and set-minibuffer-message 
(bug#48669)
+
+       * lisp/minibuffer.el (minibuffer-message): Copy more overlay 
positioning code
+       from set-minibuffer-message.
+       (minibuffer--message-overlay-pos): Mention both minibuffer-message and
+       set-minibuffer-message in the docstring.
+       (set-minibuffer-message): Use 'cursor t' instead of 1.
+
+2021-06-08  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       37f4457994 (origin/emacs-27) ; Fix typo in dynamic module functions d...
+       f7d4bbceee ; * src/composite.h: Improve comments for LGSTRING and LGL...
+
+2021-06-08  Alex Bochannek  <alex@bochannek.com>
+
+       Change the Gnus default to use `#' to toggle the process mark
+
+       * doc/misc/gnus.texi (Marking Groups, Topic Commands):
+       (Setting Process Marks, Pick and Read): Document the new default.
+       * lisp/gnus/gnus-group.el (gnus-group-make-menu-bar): Update menu.
+
+       * lisp/gnus/gnus-sum.el (gnus-summary-make-menu-bar): Update menu.
+
+       * lisp/gnus/gnus-topic.el (gnus-topic-make-menu-bar): Update menu.
+
+       * lisp/gnus/gnus.el (gnus-process-mark-toggle): Change default.
+
+2021-06-08  Stephen Gildea  <stepheng+emacs@gildea.com>
+
+       MH-E: do not look for MH variants in relative directories
+
+       * lisp/mh-e/mh-e.el (mh-variants): Do not examine relative directories
+       in exec-path (e.g., "."); these won't have MH installed.  Also,
+       file-chase-links is not robust with relative names: you cannot pass it
+       a relative name that is a symlink.
+
+2021-06-08  Stefan Kangas  <stefan@marxist.se>
+
+       Fix an example in ERC docs
+
+       * doc/misc/erc.texi (Connecting):
+       * lisp/erc/erc.el (erc, erc-tls): Fix example to use J. Random Hacker
+       instead of Harry S. Truman.
+
+2021-06-08  Stefan Kangas  <stefan@marxist.se>
+
+       * doc/man/emacs.1.in: Minor fixes.
+
+2021-06-08  Alan Third  <alan@idiocy.org>
+
+       Revert "src/nsterm.m: fix window tabbing on macOS"
+
+       This reverts commit 2207f9adccc0411b7ad73a3703f16250d7f8e139.
+
+2021-06-07  Michael Albinus  <michael.albinus@gmx.de>
+
+       Improve support of remote files in browse-url.el
+
+       * etc/NEWS: Mention support of remote file browsing.
+
+       * lisp/net/browse-url.el (browse-url-of-buffer): Revert last change.
+       (browse-url-of-file): Use temporary file in case of remote file.
+       (Bug#48397)
+
+2021-06-07  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Fix rgrep abbreviation
+
+       * lisp/progmodes/grep.el (grep-mode-font-lock-keywords):
+       Update for the last change in grep-find-template (bug#48471).
+
+2021-06-07  Eli Zaretskii  <eliz@gnu.org>
+
+       * src/xdisp.c (Fwindow_text_pixel_size): Plug memory leak.  (Bug#48884)
+
+2021-06-07  Michael Albinus  <michael.albinus@gmx.de>
+
+       Support remote file names in `browse-url-of-buffer'
+
+       * lisp/net/browse-url.el (browse-url-of-buffer): Use temporary
+       file in case of remote `file-name'.  (Bug#48397)
+
+2021-06-07  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Support old BSD find and "root dir symlink" better
+
+       * lisp/progmodes/grep.el (grep-compute-defaults):
+       Add '-H' to grep-find-template (bug#48471).
+
+       * lisp/cedet/semantic/symref/grep.el (semantic-symref-perform-search):
+       Pass the root directory name without the trailing slash.
+
+       * lisp/progmodes/xref.el (xref-matches-in-directory): Ditto.
+
+       * test/lisp/progmodes/xref-tests.el 
(xref--xref-file-name-display-is-abs)
+       (xref--xref-file-name-display-is-relative-to-project-root):
+       Make tests more strict again.
+
+2021-06-06  Dmitry Gutov  <dgutov@yandex.ru>
+
+       completion-pcm--hilit-commonality: Reuse the match-data cons cells
+
+       * lisp/minibuffer.el (completion-pcm--hilit-commonality): Reuse
+       the match-data cons cells for better performance (bug#48841).
+
+2021-06-06  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix a problem with restarting 'tags-search'
+
+       * lisp/progmodes/etags.el (tags-search, tags-query-replace): Link
+       to 'fileloop-continue' instead of 'tags-loop-continue', for
+       continuing TAGS-based search/replace commands.
+
+       * lisp/fileloop.el (fileloop-continue): Reset
+       'switch-to-buffer-preserve-window-point' to nil when switching to
+       another buffer, so as to make sure a new search always restarts
+       from point-min in each buffer it searches.  (Bug#48628)
+
+2021-06-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify boolean widget prompt
+
+       * lisp/wid-edit.el (widget-boolean-prompt-value): Clarify prompt
+       (bug#43593).
+
+2021-06-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify file reversion prompt
+
+       * lisp/files.el (revert-buffer--default): Clarify prompt when the
+       buffer is modified (bug#43884).
+
+2021-06-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make `so-long' restore `view-mode'
+
+       * lisp/so-long.el (so-long): Make the `v' command in Dired work
+       more reliably (bug#45084).
+
+2021-06-06  Sebastian Urban  <mrsebastianurban@gmail.com>  (tiny change)
+
+       Minor copyedits in the Emacs user manual
+
+       * doc/emacs/fixit.texi (Spelling): Move TeX hyphenation directives
+       from here...
+       * doc/emacs/docstyle.texi: ...to here.
+       * doc/emacs/display.texi (Displaying Boundaries, Text Display):
+       Minor stylistic changes.  (Bug#48654)
+
+2021-06-06  Eli Zaretskii  <eliz@gnu.org>
+
+       Minor fixes for last change
+
+       * test/manual/etags/ETAGS.good_1:
+       * test/manual/etags/ETAGS.good_2:
+       * test/manual/etags/ETAGS.good_3:
+       * test/manual/etags/ETAGS.good_4:
+       * test/manual/etags/ETAGS.good_5:
+       * test/manual/etags/ETAGS.good_6: Adapt to added Mercury support.
+
+       * lib-src/etags.c (find_entries, test_objc_is_mercury):
+       * etc/NEWS: Fix punctuation and typos in last change.
+
+2021-06-06  Fabrice Nicol  <fabrnicol@gmail.com>
+
+       Add support for Mercury (https://mercurylang.org) in 'etags'
+
+       Tag declarations starting lines with ':-'.
+       By default, all declarations are tagged.  Optionally, first
+       predicate or functions in clauses can be tagged as in Prolog
+       support using '--declarations'.  (Bug#47408).
+       * lib-src/etags.c (test_objc_is_mercury, Mercury_functions)
+       (mercury_skip_comment,  mercury_decl, mercury_pr):
+       Implement Mercury support.  As Mercury and Objective-C have
+       the same file extension .m, a heuristic test tries to detect
+       the language.
+
+       * doc/man/etags.1: Document the change.  Add Mercury-specific
+        behavior for '--declarations'.  This option tags first
+       predicates or functions in clauses in addition to declarations.
+
+2021-06-06  Paul W. Rankin  <pwr@bydasein.com>
+
+       src/nsterm.m: fix window tabbing on macOS
+
+       * src/nsterm.m: remove NSWindowTabbingModeDisallowed to respect
+         system-wide preferences
+       * etc/NEWS: add mention of native tab support in macOS and where
+         to specify system-wide setting
+
+2021-06-06  Michael Albinus  <michael.albinus@gmx.de>
+
+       * lisp/net/tramp.el (tramp-error): Make it a defun.
+
+2021-06-05  João Távora  <joaotavora@gmail.com>
+
+       Consider environment vars in Fido's directory-aware RET binding
+
+       (Bug#48782)
+
+       * lisp/icomplete.el (icomplete-fido-ret): Consider environment
+       variables in dir expansion.
+
+2021-06-05  Alex Bochannek  <alex@bochannek.com>
+
+       Fix Gnus summary exclusion when everything matches
+
+       * lisp/gnus/gnus-sum.el (gnus-summary-limit-to-recipient):
+       * lisp/gnus/gnus-sum.el (gnus-summary-limit-to-subject):
+       (gnus-summary-limit-to-address, gnus-summary-limit-to-extra):
+       Don't claim that there aren't any matches when everything matches
+       an exclusion (bug#48834).
+
+2021-06-05  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/keyboard.c (read_decoded_event_from_main_queue): Fix paren typo
+
+       * lisp/mpc.el (mpc-intersection): Fix commit 1760029b0927242
+
+2021-06-05  Eli Zaretskii  <eliz@gnu.org>
+
+       Document the last change
+
+       * doc/lispref/os.texi (Input Modes): Document the changes in the
+       values of the META flag.
+
+       * etc/NEWS: Call out the change in input-meta-mode.
+
+2021-06-05  Max Mikhanosha  <max.mikhanosha@protonmail.com>
+
+       Support terminal emulators that encode the Meta modifier as 8th bit
+
+       See discussion starting at
+
+        https://lists.gnu.org/archive/html/emacs-devel/2021-06/msg00034.html
+
+       for the details.
+       * src/keyboard.c (read_decoded_event_from_main_queue): For
+       raw-text encoed input, if Meta bit is encoded, apply the Meta
+       modifier to single-byte characters that have the 0x80 bit set.
+       For input encoded otherwise, if the Meta bit is encoded, remove
+       the 0x80 bit after decoding the characters.
+       (tty_read_avail_input): Reset the 0x80 bit only if Meta bit is not
+       encoded.
+       (Fset_input_meta_mode): Support 'encoded' as the value of META.
+       (Fset_input_mode): Document 'encoded' for META.
+       (Fcurrent_input_mode): Support and document 'encoded' as the value
+       of META.
+       (syms_of_keyboard): DEFSYM 'encoded'.
+
+2021-06-05  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix slow operation of 'string-width'
+
+       * src/composite.c (find_automatic_composition): Accept one
+       additional argument BACKLIM; don't look back in buffer or string
+       farther than that.  Add an assertion for BACKLIM.
+       (composition_adjust_point, Ffind_composition_internal): Callers
+       adjusted.
+       * src/composite.h (find_automatic_composition): Adjust prototype.
+       * src/character.c (lisp_string_width): Call
+       'find_automatic_composition' with the value of BACKLIM equal to POS,
+       to avoid costly and unnecessary search back in the string, since
+       those previous characters were already checked for automatic
+       compositions.  (Bug#48734)  (Bug#48839)
+
+2021-06-05  Eli Zaretskii  <eliz@gnu.org>
+
+       Some additions to the TeX input method
+
+       * lisp/leim/quail/latin-ltx.el (latin-ltx--define-rules): Add some
+       rules from Unicode Technical Note 28 "UnicodeMath" v3.1.
+
+2021-06-05  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Make icomplete less blinky and more responsive
+
+       * lisp/icomplete.el (icomplete-pre-command-hook, icomplete-tidy):
+       Remove, update the callers
+       (https://lists.gnu.org/archive/html/emacs-devel/2021-06/msg00111.html).
+       (icomplete-compute-delay): Change the default to 150ms.
+       (icomplete-max-delay-chars): Change the default to 2.
+
+2021-06-04  Tassilo Horn  <tsdh@gnu.org>
+
+       Ask if dir and subdir dired buffers be killed when deleting dir
+
+       Previously, when you've had dired buffers
+
+         ~/foo/
+         ~/foo/bar/
+         ~/foo/bar/baz/
+
+       and then deleted ~/foo/, dired (with dired-clean-up-buffers-too set to
+       non-nil) would only ask to delete the dired buffer of ~/foo/.  Now it
+       will offer to delete all three buffers.
+
+       * lisp/dired.el (dired-buffers-for-dir): Add optional argument SUBDIRS
+       which makes the function return also dired buffers showing a subdir of
+       DIR.
+       (dired-in-this-tree-p): Make obsolete in favor of file-in-directory-p
+       which actually does what the name suggest whereas dired-in-this-tree-p
+       is just string-matching on filenames which will fail with symlinks
+       filenames including ./ or ../.
+
+2021-06-04  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix documentation of a recent change.
+
+       * etc/NEWS:
+       * doc/emacs/misc.texi (Invoking emacsclient): Fix a recent change.
+       (Bug#11358)
+
+2021-06-04  Stephen Berman  <stephen.berman@gmx.net>
+
+       Fix placement of point in Dired deletion operations
+
+       * lisp/dired.el (dired-do-flagged-delete, dired-do-delete): Use
+       point-marker instead of point to record each file name position.
+       Clean up the markers before returning.
+       (dired-internal-do-deletions): Move to the file name marker, and
+       then move point to the file name to visually emphasize which file
+       is being operated on (bug#48805).
+
+2021-06-04  Harald Hanche-Olsen  <harald.hanche-olsen@ntnu.no>  (tiny change)
+
+       Add a new `server-edit-abort' command
+
+       * doc/emacs/misc.texi (Invoking emacsclient): Document it (bug#11358).
+
+       * lisp/server.el (server-edit): Mention it in the doc string.
+       (server-edit-abort): New command.
+
+2021-06-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Make the `i' command in Info-mode remove duplicate matches"
+
+       This reverts commit 089e0c4c55dcf72f9cf2f6f04b8a52fc7355499c.
+
+       There were no duplicate entries -- there were two entries
+       for different things that referred to the same line.
+
+2021-06-04  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix documentation of recent 'windmove' changes
+
+       * lisp/windmove.el (windmove-default-keybindings)
+       (windmove-display-default-keybindings)
+       (windmove-delete-default-keybindings)
+       (windmove-swap-states-default-keybindings): Improve doc strings.
+       (Bug#41438)
+
+       * etc/NEWS: Fix a typo in the 'windmove' entry.
+
+2021-06-03  Juri Linkov  <juri@linkov.net>
+
+       * lisp/simple.el (read-from-kill-ring): Fix the case of 'M-y M-p' 
(bug#48478)
+
+       Don't use offsets for read-from-kill-ring-history when 
kill-ring-yank-pointer
+       points to the last element of kill-ring.
+
+2021-06-03  Juri Linkov  <juri@linkov.net>
+
+       * lisp/help-fns.el (help--symbol-class): New function.
+
+       Refactored from help--symbol-completion-table-affixation.
+       https://lists.gnu.org/archive/html/emacs-devel/2021-06/msg00066.html
+
+2021-06-03  Juri Linkov  <juri@linkov.net>
+
+       * etc/NEWS: Add windmove keybindings (bug#41438)
+
+2021-06-03  Philip Kaludercic  <philipk@posteo.net>
+
+       Add user options for default windmove commands (bug#41438)
+
+       * lisp/windmove.el (windmove--default-keybindings-type): Add type.
+       (windmove-default-keybindings): Add user option.
+       (windmove-display-default-keybindings): Add user option.
+       (windmove-delete-default-keybindings): Add user option.
+       (windmove-swap-states-default-keybindings): Add user option.
+
+2021-06-03  Philip Kaludercic  <philipk@posteo.net>
+
+       Improve windmove-*-default-keybindings functions (bug#41438)
+
+       * lisp/windmove.el (windmove-mode-map): Add special map for windmove 
commands.
+       (windmove-mode): Add minor mode for activating windmove-mode-map.
+       (windmove-install-defaults): Add general function for manipulating
+       windmove-mode-map.
+       (windmove-default-keybindings): Use windmove-install-defaults.
+       (windmove-display-default-keybindings): Use windmove-install-defaults.
+       (windmove-delete-default-keybindings): Use windmove-install-defaults.
+       (windmove-swap-states-default-keybindings): Use 
windmove-install-defaults.
+
+2021-06-03  Mattias Engdegård  <mattiase@acm.org>
+
+       Constant-propagate (function SYMBOL)
+
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize--substitutable-p):
+       Consider #'SYMBOL a constant for compile-time propagation purposes.
+
+2021-06-03  Mattias Engdegård  <mattiase@acm.org>
+
+       Optimise (cons X nil) to (list X)
+
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize-cons): New function.
+
+2021-06-03  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix fill-column-indicator on TTY frames
+
+       * src/xdisp.c (extend_face_to_end_of_line): Fix calculation of
+       fill-column-indicator on TTY frames.  Suggested by Jimmy Aguilar
+       Mena <spacibba@aol.com>.
+
+2021-06-03  Eli Zaretskii  <eliz@gnu.org>
+
+       More accurate highlighting of mis-spellings in Flyspell
+
+       * lisp/textmodes/flyspell.el (flyspell-word): Highlight only the
+       misspelled word, not any extra characters after it.  (Bug#5575)
+
+2021-06-03  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make the `i' command in Info-mode remove duplicate matches
+
+       * lisp/info.el (Info-index): Weed out duplicate matched
+       (bug#3692).
+
+2021-06-03  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix up previous hideif change to avoid a compilation warning
+
+       * lisp/progmodes/hideif.el
+       (hide-ifdef-expand-reinclusion-protection): Move to avoid a
+       compilation warning.
+
+2021-06-03  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       fringe-mode doc clarifications
+
+       * lisp/fringe.el (fringe-mode):
+       (fringe-mode): Note that this variable and command have nothing to
+       do with modes (bug#6931).
+
+2021-06-03  Luke Lee  <luke.yx.lee@gmail.com>
+
+       * lisp/progmodes/hideif.el: Fix initial version for new variables
+
+       (hide-ifdef-verbose, hide-ifdef-evalulate-enter-hook)
+       (hide-ifdef-evalulate-leave-hook): Fix initial version to 28.1.
+       (hide-ifdef-expand-reinclusion-protection): Obsolete since 28.1,
+       rename to `hide-ifdef-expand-reinclusion-guard' instead.
+
+2021-06-03  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix problem with empty command histories in eshell and `erase'
+
+       * lisp/eshell/em-hist.el (eshell-add-input-to-history): Protect
+       against an empty ring (bug#48770).
+
+2021-06-03  Eli Zaretskii  <eliz@gnu.org>
+
+       * configure.ac: Clarify "smoke test" error message.  (Bug#48804)
+
+2021-06-03  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Cross-reference the message/error control variables
+
+       * src/keyboard.c (syms_of_keyboard): Mention set-message-function
+       in the command-error-function doc string...
+
+       * src/xdisp.c (syms_of_xdisp): ... and vice versa (bug#13752).
+
+2021-06-03  Eli Zaretskii  <eliz@gnu.org>
+
+       * configure.ac: Improve error messages about libgccjit.
+
+2021-06-02  Tassilo Horn  <tsdh@gnu.org>
+
+       Allow opening buttonized URL with secondary browser in rcirc
+
+       * lisp/net/browse-url.el (browse-url-button-open-url): Add autoload
+       cookie.
+       * lisp/net/rcirc.el (rcirc-markup-urls): Use
+       `browse-url-button-open-url' instead of just `browse-url' in order to
+       be able to use the secondary browser by giving a prefix arg.
+
+2021-06-02  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix a typo in 'produce_glyphless_glyph'
+
+       * src/xdisp.c (produce_glyphless_glyph): Initialize lower_xoff.
+       Remove workaround for lack of its initialization.  (Bug#8215)
+
+2021-06-02  Luke Lee  <luke.yx.lee@gmail.com>
+
+       * lisp/progmodes/hideif.el: update for new C++ standards and extensions
+
+       Matching gcc/clang behavior on stringification including keeping the 
same
+       number of white spaces.  C++11, C++14, C++17 and GCC literals extension 
are
+       supported.  Preprocessing time floating point operation supported but 
limited
+       to Emacs internal representation which is C data type "double".  Also 
support
+       some frequently used keywords like __LINE__, __TIME__, __DATE__ and so 
on.
+
+       (hif-clear-all-ifdef-defined, hif-show-all, hif-after-revert-function)
+       (hide-ifdef-define, hide-ifdefs, show-ifdefs): interactive behavior 
changes,
+       mainly to allow operation within the marked region.
+       (hif-eval, hif-__LINE__, hif-__FILE__, hif-__COUNTER__, hif-__cplusplus)
+       (hif-__DATE__, hif-__TIME__, hif-__STDC__, hif-__STDC_VERSION__)
+       (hif-__STDC_HOST__, hif-__FILE__, hif-full-match, hif-is-number, 
hif-is-float)
+       (hif-delete-char-in-string, hif-string-to-decfloat, 
hif-string-to-hexfloat)
+       (hif-strtok, hif-is-white, hif-backward-comment, hif-split-signed-token)
+       (hif-keep-single, hif-display-macro): new functions.
+       (hide-ifdef-verbose, hide-ifdef-evalulate-enter-hook)
+       (hide-ifdef-evalulate-leave-hook, hide-ifdef-evaluator, 
hif-predefine-alist)
+       (hif-numtype-suffix-regexp, hif-bin-regexp, hif-hex-regexp, 
hif-oct-regexp)
+       (hif-dec-regexp, hif-decfloat-regexp, hif-hexfloat-regexp)
+       (hif-unicode-prefix-regexp, hif-verbose-define-count): new constants or
+       variables.
+       (hif-macroref-regexp, hif-token-alist, hif-token-regexp)
+       (hif-string-literal-regexp): modified constants for faster regexp 
processing.
+       (hide-ifdef-expand-reinclusion-guard): renamed from
+       `hide-ifdef-expand-reinclusion-protection' to match commonly used term.
+       (hif-lookup, hif-defined, hif-string-to-number, hif-tokenize, 
hif-nextoken)
+       (hif-if-valid-identifier-p, hif-define-operator, hif-expand-token-list)
+       (hif-parse-exp, hif-math, hif-factor, hif-get-argument-list, 
hif-stringify)
+       (hif-token-concat, hif-mathify, hif-comma, hif-token-stringification)
+       (hif-token-concatenation, hif-macro-supply-arguments, 
hif-evaluate-macro)
+       (hif-find-define, hif-add-new-defines, hide-ifdef-guts, 
hif-undefine-symbol)
+       (hide-ifdef-set-define-alist, hide-ifdef-use-define-alist): modified 
functions
+       for new internal data representation, mainly for stringification and 
white
+       space preservation.  Also better error handling to report source line 
number
+       and more informative error messages.
+
+2021-06-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix ibuffer auto-shrinking windows
+
+       * lisp/ibuffer.el (ibuffer-shrink-to-fit): Don't shrink all
+       windows, just the ibuffer one (bug#7218).
+
+2021-06-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Move point in dired buffers when handling a list of files
+
+       * lisp/dired-aux.el (dired-create-files): Advance point to the
+       current file (bug#8015).
+
+2021-06-02  Alex Bochannek  <alex@bochannek.com>
+
+       Add new user option to Gnus to allow `#' to toggle
+
+       * doc/misc/gnus.texi (Marking Groups, Setting Process Marks):
+       Mention the new variable.
+
+       * lisp/gnus/gnus-group.el (gnus-group-make-menu-bar): Update menu.
+       (gnus-group-mark-group): Support the variable.
+       (gnus-group-mark-update): New command.
+       (gnus-group-unmark-group, gnus-group-mark-region): Pass in new
+       parameter.
+
+       * lisp/gnus/gnus-sum.el (gnus-summary-make-menu-bar): Update menu.
+       (gnus-summary-mark-as-processable): Use the variable.
+
+       * lisp/gnus/gnus-topic.el (gnus-topic-mark-topic):  (bug#48683).
+
+       * lisp/gnus/gnus-topic.el (gnus-topic-mark-topic): Use the variable.
+
+       * lisp/gnus/gnus.el (gnus-process-mark-toggle): New user option.
+
+2021-06-01  Alan Third  <alan@idiocy.org>
+
+       Improve performance of NS port's display on macOS
+
+       * src/nsterm.h: Update EmacsSurface definition.
+       * src/nsterm.m ([EmacsView focusOnDrawingBuffer]): Don't change the
+       CGContext's settings directly.
+       ([EmacsView unfocusDrawingBuffer]): Don't release the context here.
+       (CACHE_MAX_SIZE): Add maximum cache size.
+       ([EmacsView updateLayer]): Send a request for getContext, which will
+       copy the buffer and create the context if it doesn't already exist, to
+       the NS run loop.
+       ([EmacsSurface initWithSize:ColorSpace:Scale:]): Add the scale factor
+       and if there's already a CGContext available, reuse it.
+       ([EmacsSurface dealloc]): No longer need to release lastSurface
+       separately.
+       ([EmacsSurface getContext]): Don't create more surfaces than we have
+       spaces for in the cache.
+       ([EmacsSurface releaseContext]): If there's no context don't try to
+       release it and put currentSurface back on the cache instead of
+       lastSurface.
+       ([EmacsSurface copyContentsTo:]): Don't try to copy if the source and
+       destination are actually the same surface.
+
+2021-06-01  Andrea Corallo  <akrl@sdf.org>
+
+       Add `native-compile-target-directory' (bug#48743)
+
+       * lisp/emacs-lisp/comp.el (native-compile-target-directory): New
+       variable.
+       (comp-spill-lap-function): Make use of.
+
+2021-06-01  Andrea Corallo  <akrl@sdf.org>
+
+       Rename batch-byte-native-compile-for-bootstrap (bug#48743)
+
+       * lisp/Makefile.in : Rename `batch-byte-native-compile-for-bootstrap'
+       -> `batch-byte+native-compile.
+       * lisp/emacs-lisp/bytecomp.el (byte+native-compile)
+       (byte-compile-file): Rename
+       `batch-byte-native-compile-for-bootstrap' ->
+       `batch-byte+native-compile + `byte-native-for-bootstrap' ->
+       `byte+native-compile'.
+       * lisp/emacs-lisp/comp.el (comp-spill-lap-function, comp-final)
+       (batch-native-compile, batch-byte+native-compile): Likewise.
+       * lisp/emacs-lisp/bytecomp.el (byte+native-compile)
+       (byte-compile-file): Likewise.
+       * test/src/comp-tests.el (comp-tests-bootstrap): Rename
+       `byte-native-for-bootstrap' -> `byte+native-compile'.
+
+2021-06-01  Glenn Morris  <rgm@gnu.org>
+
+       Remove unnecessary function declaration in isearch
+
+       * lisp/isearch.el (multi-isearch-switch-buffer):
+       Remove unnecessary declaration (after ldefs-boot update).
+
+2021-06-01  Andreas Schwab  <schwab@linux-m68k.org>
+
+       Avoid hang in nnimap-keepalive
+
+       * lisp/gnus/nnimap.el (nnimap-keepalive): Make interruptible.
+
+2021-06-01  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/gnus/gnus-art.el: Don't sneak dynbound code via quoting
+
+       Make sure we don't accidentally quote lambdas by embedding them within
+       quoted data.
+
+       (gnus-visible-headers, gnus-emphasis-alist)
+       (gnus-mime-display-alternative, gnus-article-describe-bindings):
+       Unquote lambdas.
+
+2021-06-01  João Távora  <joaotavora@gmail.com>
+
+       Add annotation capability to icomplete-vertical-mode
+
+       Co-authored-by Daniel Mendler <mail@daniel-mendler.de>
+
+       * lisp/icomplete.el (icomplete--affixate): New helper.
+       (icomplete--render-vertical): Use it. Rework.
+       (icomplete-completions): Pass md to icomplete--render-vertical.
+
+2021-06-01  João Távora  <joaotavora@gmail.com>
+
+       Improve icomplete-vertical-mode and fido-vertical-mode
+
+       This mode is intended to be used with Icomplete ('M-x icomplete-mode')
+       or Fido ('M-x fido-mode'), to display the list of completions
+       candidates vertically instead of horizontally.  When used with
+       Icomplete, completions are rotated and selection kept at the top.
+       When used with Fido, completions scroll like a typical dropdown
+       widget.
+
+       If the dropdown behaviour is desired for Icomplete (instead of
+       rotation), icomplete-scroll can be adjusted separately by the user.
+
+       * etc/NEWS (icomplete-vertical-mode): Reword.
+
+       * lisp/icomplete.el (simple): Require it.
+       (icomplete-selected-match): New face.
+       (icomplete-scroll): New user-visible var.
+       (icomplete-forward-completions): Rework.
+       (icomplete-backward-completions): Rework.
+       (icomplete--fido-mode-setup): Prefer icomplete-scroll according to
+       icomplete-vertical mode.
+       (icomplete-minibuffer-setup): Initialize 
icomplete--scrolled-completions.
+       (fido-vertical-mode): An alias for icomplete-vertical-mode.
+       (icomplete-exhibit): Init icomplete--scrolled-past.  Adjust overlay.
+       (icomplete--render-vertical): New helper.
+       (icomplete--sorted-completions): If cache is stale, also
+       invalidate icomplete--scrolled-past.
+       (icomplete-completions): Rework.  Mostly reformat.
+
+       * lisp/simple.el (max-mini-window-lines): New helper.
+       (display-message-or-buffer): Use it.
+
+2021-06-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow packages to change the hl-line overlay priority
+
+       * lisp/hl-line.el (hl-line-overlay-priority): New variable
+       (bug#11509).
+       (hl-line-make-overlay): Use it.
+
+2021-06-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix problem with `format-alist' marking all the text in the buffer
+
+       * lisp/format.el (format-decode-run-method): Use it to avoid
+       marking the entire buffer (bug#11691).
+
+       * lisp/simple.el (shell-command-on-region): Allow replacing text
+       without activating the mark.
+
+2021-06-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Document `with-selected-frame'
+
+       * doc/lispref/windows.texi (Selecting Windows): Document
+       `with-selected-frame' (bug#12075).
+
+2021-06-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Obsolete `global-whitespace-newline-mode'
+
+       * lisp/whitespace.el (global-whitespace-newline-mode): Make
+       obsolete since it doesn't work correctly, and seems superfluous
+       (bug#12496).
+
+2021-06-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a new command `mailcap-view-file'
+
+       * doc/misc/emacs-mime.texi (mailcap): Document it (bug#12972).
+
+       * lisp/net/mailcap.el (mailcap-view-file): New command.
+
+2021-06-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix documentation of literal `face' syntax in font-lock section
+
+       * doc/lispref/modes.texi (Search-based Fontification): Fix
+       the literal `(0 (face ...))' syntax documentation (bug#13917).
+
+2021-06-01  Philip Kaludercic  <philipk@posteo.net>
+
+       Improve random selection of keyservers
+
+       * lisp/epa-ks.el (epa-keyserver): Interpret a list as a pool.
+       (epa-ks--query-url): Add new auxiliary function.
+       (epa-ks--fetch-key): Use epa-ks--query-url.
+       (epa-search-keys): Use epa-ks--query-url.
+
+2021-05-31  Juri Linkov  <juri@linkov.net>
+
+       * lisp/isearch.el (lazy-highlight-buffer-max-at-a-time): Change from 20 
to 200
+
+       Suggested by Augusto Stoffel <arstoffel@gmail.com> in bug#48581
+
+2021-05-31  Andrea Corallo  <akrl@sdf.org>
+
+       Make *Async-native-compile-log* buffer read-only (bug#48763)
+
+       * lisp/emacs-lisp/comp.el (comp-run-async-workers): Make
+       "*Async-native-compile-log*" read-only.
+
+2021-05-31  Alan Mackenzie  <acm@muc.de>
+
+       Make frames record when their selected window was the mini-window
+
+       When a frame in this state is selected again by Fselect_frame (but not 
by
+       Fselect_window), the mini-window rather than the frame's currently 
selected
+       window, is chosen for selection, should there still be an active 
minibuffer in
+       it.
+
+       This fixes bug #48674.
+
+       * src/frame.h (struct frame): Add new boolean field 
select_mini_window_flag.
+
+       * src/frame.c (make_frame): Initialize select_mini_window_flag to false.
+       (do_switch_frame): Set the new flag appropriately for the old frame, and
+       process the new frame's setting of this flag, before setting it to 
false.
+
+       * src/window.c (select_window): Set f->select_mini_window_flag to false.
+       (Fset_frame_selected_window, Fdelete_other_windows_internal)
+       (Fdelete_window_internal): Add comments clarifying that there is no 
clearing
+       of f->select_mini_window_flag in these functions.
+
+2021-05-31  Glenn Morris  <rgm@gnu.org>
+
+       * src/keyboard.c (make_lispy_event): Fix previous.
+
+2021-05-31  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       5dfa5e26dd (origin/emacs-27) Improve documentation of regexp ranges
+
+2021-05-31  Alan Mackenzie  <acm@muc.de>
+
+       Correct mouse handling when window origin changes between down and up 
events
+
+       Do this by using frame relative positions rather than window relative 
ones,
+       which gave rise to spurious drag events when the origin of the window 
changed
+       between the mouse down and up events.  This fixes bug #48409.
+
+       * src/keyboard.c (frame_relative_event_pos): New static variable.
+       (make_lispy_event): Record frame relative position of down event.  When 
the up
+       event is in the same position, "move" this event into the window of the 
down
+       event when this window (typically a mini-window) is no longer under the 
mouse.
+       Call make_lispy_position a second time to generate this changed event.
+       (syms_of_keyboard): Declare Qwindow_edges.  static_pro
+       frame_relative_event_pos.
+
+2021-05-31  Colin Woodbury  <colin@fosskers.ca>  (tiny change)
+
+       Remove spurious @example from the elisp manual
+
+       * doc/lispref/macros.texi (Defining Macros): Remove spurious extra
+       pair of @example/@end example.
+
+2021-05-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove messaging in ediff-make-diff2-buffer
+
+       * lisp/vc/ediff-diff.el (ediff-make-diff2-buffer): Remove message
+       that's often misleading when diffing buffers (that may be unsaved)
+       (bug#13091).
+
+2021-05-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Put ELP results in a special-mode buffer
+
+       * lisp/emacs-lisp/elp.el (elp-results): Make `q' work in ELP
+       results buffer (bug#14104).
+       (elp-results-mode): Define as an empty special mode derivation.
+
+2021-05-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make `menu-bar-select-buffer' obsolete
+
+       * lisp/menu-bar.el (menu-bar-select-buffer): Make obsolete (bug#15651).
+
+       * lisp/msb.el (msb--select-buffer): Move function here and rename.
+       (msb--make-keymap-menu): Use it.
+
+2021-05-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Move menu-bar-select-buffer to msb.el"
+
+       This reverts commit 253e52478c355dc29052c0d21013b8d06b473880.
+
+       This is to be fixed in a different way in the next patch.
+
+2021-05-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Use buffer-local-boundp in describe-variable
+
+       * lisp/help-fns.el (describe-variable): Use `buffer-local-boundp'.
+
+2021-05-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add new convenience function `buffer-local-boundp'
+
+       * doc/lispref/variables.texi (Creating Buffer-Local): Document it.
+       * lisp/subr.el (buffer-local-boundp): New function.
+
+       * src/data.c (Flocal_variable_p): Mention it.
+
+2021-05-31  Daniel Mendler  <mail@daniel-mendler.de>
+
+       Speed up `describe-variable' completion predicate
+
+       * lisp/help-fns.el (describe-variable): Do not switch to the original
+       buffer in the predicate (bug#48738).
+
+2021-05-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix error in xdg-mime-apps-files when XDG_CURRENT_DESKTOP is defined
+
+       * lisp/xdg.el (xdg-mime-apps-files): Don't bug out when
+       XDG_CURRENT_DESKTOP is bound (bug#48748).
+
+2021-05-30  Philipp Stephani  <phst@google.com>
+
+       Document that the 'syntax-propertize-function' may move point.
+
+       The functions generated by 'syntax-propertize-rules' don't use
+       'save-excursion', but 'syntax-propertize' does, so we might as well
+       document that the 'syntax-propertize-function' may move point.
+
+       * doc/lispref/syntax.texi (Syntax Properties): Document that the
+       'syntax-propertize-function' may move point.
+
+2021-05-30  Philipp Stephani  <phst@google.com>
+
+       Give 'syntax-propertize-wholelines' a docstring.
+
+       This function is generally useful.
+
+       * lisp/emacs-lisp/syntax.el (syntax-propertize-wholelines): Add
+       docstring.
+
+2021-05-30  Stephen Gildea  <stepheng+emacs@gildea.com>
+
+       time-stamp: fix minor bug when parsing option combos
+
+       * lisp/time-stamp.el (time-stamp-string-preprocess): Handle digit
+       options correctly to avoid overcounting colon options.
+
+       * test/lisp/time-stamp-tests.el (time-stamp-format-time-zone-offset):
+       Add a new test case that would have caught the option-parsing error.
+
+2021-05-30  Stephen Gildea  <stepheng+emacs@gildea.com>
+
+       time-stamp: refactor time-stamp-string-preprocess
+
+       * lisp/time-stamp.el (time-stamp-string-preprocess):  Reduce lifetime of
+       some loop-local variables to be less error-prone.
+
+2021-05-30  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Do not reset settings when disabling a theme
+
+       * lisp/custom.el (disable-theme): Don't call custom-push-theme, since
+       that resets the theme settings and it isn't useful: we only need to
+       remove the theme setting from the themed variable or face.  This fixes
+       a regression when "toggling" themes, introduced while fixing Bug#34027.
+       (Bug#48736)
+
+2021-05-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of regexp ranges
+
+       * doc/lispref/searching.texi (Regexp Special): Document the effect
+       of using octal escapes in regexp ranges.  (Bug#17758)
+
+2021-05-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Don't account for character compositions in 'format' and friends
+
+       'lisp_string_width' is called from 'format' and 'format-message',
+       which can be called both very early into Emacs initialization and in
+       other contexts where using the font backend is impossible or
+       undesirable.  So this commit changes 'lisp_string_width' to try
+       accounting for automatic compositions only when explicitly requested,
+       and only 'string-width' does that; 'format' and 'format-message'
+       don't.
+       * src/character.c (lisp_string_width): Accept an additional
+       argument AUTO_COMP; attempt accounting for auto-compositions only
+       if that argument is non-zero.  (Bug#48732)
+       * src/editfns.c (styled_format):
+       * src/character.c (Fstring_width): Callers of 'lisp_string_width'
+       adjusted.
+
+2021-05-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify that `symbol-file' only works for symbols in Lisp files
+
+       * lisp/subr.el (symbol-file): Mention help-C-file-name in the doc
+       string (bug#14932).
+
+2021-05-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow help-C-file-name to work on symbols designating subrs
+
+       * lisp/help-fns.el (help-C-file-name): Allow working on symbols
+       designating subrs (bug#14932).
+
+2021-05-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix kmacro-view-ring-2nd doc string
+
+       * lisp/kmacro.el (kmacro-view-ring-2nd): Fix doc string (bug#15020).
+
+2021-05-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Move menu-bar-select-buffer to msb.el
+
+       * lisp/menu-bar.el (menu-bar-select-buffer): Move from
+       here... (bug#15651).
+       * lisp/msb.el (menu-bar-select-buffer): ... to here (which is the
+       only usage in-tree in Emacs).
+
+2021-05-30  Stephen Gildea  <stepheng+emacs@gildea.com>
+
+       time-stamp: improve unit-test coverage
+
+       * test/lisp/time-stamp-tests.el (time-stamp-format-year-4digit,
+       time-stamp-format-ignored-modifiers): Improve coverage with more cases.
+       (time-stamp-format-multiple-conversions): New test.
+
+2021-05-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       `minibuffer-exit-hook' doc string clarification
+
+       * src/minibuf.c (syms_of_minibuf): `minibuffer-exit-hook' is run
+       in the minubuffer usually, so don't claim that it's run after
+       (bug#16524).
+
+2021-05-30  Daniel Martín  <mardani29@yahoo.es>
+
+       Add a new documentation group for overlays
+
+       * lisp/emacs-lisp/shortdoc.el (overlay): Add documentation group for
+       buffer overlays(bug#48730).
+
+2021-05-30  Daniel Martín  <mardani29@yahoo.es>
+
+       Improve the documentation of documentation groups
+
+       * doc/lispref/help.texi (Documentation Groups): Fix typos and add an
+       example.
+       * lisp/emacs-lisp/shortdoc.el (define-short-documentation-group): Add
+       :no-eval* and :result-string keywords to the docstring.  (Bug#48730)
+
+2021-05-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak octave continuation indentation
+
+       * lisp/progmodes/octave.el (octave-smie-rules): Further tweak
+       continuation indentation (bug#17955).
+
+2021-05-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Clarify indent-line-function doc string
+
+       * lisp/indent.el (indent-line-function): Clarify by avoiding
+       specifics (bug#20846).
+
+2021-05-29  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/mpc.el (mpc-format): Fix inf-loop in constructed predicate
+
+2021-05-29  Andreas Schwab  <schwab@linux-m68k.org>
+
+       * lisp/wdired.el (wdired-normalize-filename): Sync with
+       dired-get-filename.  (Bug#48659)
+
+2021-05-29  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/electric.el: Do auto-indent inside strings and comments by 
default
+
+       This fixes bug#20846 where it transpired that there is no good reason
+       to shy away from auto-indenting inside comments and strings.
+
+       (electric-indent-post-self-insert-function): Don't check syntax-ppss.
+
+2021-05-29  Keith David Bershatsky  <esq@lawlist.com>
+
+       Improve tex fontification of quoted strings
+
+       * lisp/textmodes/tex-mode.el (tex-font-lock-keywords-2): Fontify
+       ``text like this'' that has an apostrophe correctly (bug#16881).
+
+2021-05-29  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix last change
+
+       * lisp/international/quail.el (quail-add-unread-command-events):
+       Fix wording of the doc string.  Move the rationale for the
+       function out of the doc string and into a comment.
+
+2021-05-29  Gregory Heytings  <gregory@heytings.org>
+
+       Fix key recording bug when an input method is activated
+
+       * lisp/international/quail.el (quail-add-unread-command-events):
+       New function.
+       (quail-start-translation, quail-start-conversion)
+       (quail-update-translation, quail-next-translation)
+       (quail-prev-translation, quail-next-translation-block)
+       (quail-prev-translation-block, quail-minibuffer-message): Use
+       'quail-add-unread-command-events' (and partly revert commit
+       03e3440dbb).  (Bug#48042)
+
+       * lisp/subr.el (inhibit--record-char): Now obsolete.
+
+       * lisp/term/xterm.el (xterm--init): New function, with most of the
+       code of former 'terminal-init-xterm'.
+       (terminal-init-xterm): Clear the lossage after terminal
+       initialization (see Bug#44908).
+       (xterm--read-event-for-query): Do not use 'inhibit--record-char'
+       anymore (revert commit 3e6525d69f).
+
+       * src/keyboard.c (syms_of_keyboard): Remove 'inhibit--record-char'
+       (partly revert 03e3440dbb).
+       (record_char, syms_of_keyboard_for_pdumper): Do not use
+       'inhibit_record_char anymore'.
+
+2021-05-29  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix shortdoc examples
+
+       Make sure that each example in shortdoc actually contains the function
+       it illustrates, and add a test for it.
+
+       * lisp/emacs-lisp/shortdoc.el (string, list, buffer, number):
+       Use the right functions in examples for string-version-lessp,
+       lax-plist-put, point-min and ffloor.
+       * test/lisp/emacs-lisp/shortdoc-tests.el: New test file.
+
+2021-05-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add lambda to the pretty Ruby symbols list
+
+       * lisp/progmodes/ruby-mode.el (ruby--prettify-symbols-alist): Add
+       lambda (bug#48681).
+
+2021-05-29  William Denton  <wtd@pobox.com>
+
+       Add pretty symbols to ruby-mode
+
+       * lisp/progmodes/ruby-mode.el (ruby--prettify-symbols-alist): Add
+       pretty symbols (bug#48681).
+       (ruby-mode): Use them.
+
+2021-05-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention the recent floating point reader changes in NEWS
+
+       * etc/NEWS: Mention the floating point reader changes (bug#48678).
+
+2021-05-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve the dired-guess-shell-alist-user doc string
+
+       * lisp/dired-x.el (dired-guess-shell-alist-user): Document how
+       REGEXP is used (bug#17251).
+
+2021-05-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix folding of non-ASCII lines when printing to Postscript
+
+       * lisp/ps-mule.el (ps-mule-plot-string): Fix folding of non-ASCII
+       Latin-1 lines (bug#17758).
+
+2021-05-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve Octave indentation after continuation lines
+
+       * lisp/progmodes/octave.el (octave-smie-rules): Indent
+       continuation lines better (bug#17955).
+
+2021-05-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve the file-accessible-directory-p doc strin
+
+       * src/fileio.c (Ffile_accessible_directory_p): Don't use the
+       phrase "directory name spec", which isn't defined (bug#18201).
+
+2021-05-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix point movement in morse-region and nato-region
+
+       * lisp/play/morse.el (morse-region):
+       (nato-region): Leave point after the translated region
+       (bug#18717).
+
+2021-05-29  Peter Oliver  <p.d.oliver@mavit.org.uk>  (tiny change)
+
+       Rename emacs.appdata.xml to emacs.metainfo.xml and add more data
+
+       * Makefile.in: Replace "appdata" with "metainfo".
+
+       This is the name currently recommended by the spec at
+       
<https://www.freedesktop.org/software/appstream/docs/chap-Metadata.html>.
+
+       * etc/emacs.metainfo.xml: Populate more fields, based on those
+       available in
+       https://www.freedesktop.org/software/appstream/docs/chap-Metadata.html
+       (bug#48662).
+
+2021-05-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Continue checking the same line when hitting SPC in ispell"
+
+       This reverts commit 390044f854fa103020ffca00eb1fe0e16805ad72.
+
+       This breaks the `a' command, so it should be fixed in a different way.
+
+2021-05-28  Juri Linkov  <juri@linkov.net>
+
+       * lisp/outline.el (outline-font-lock-keywords): Fix highlight case 
(bug#48707)
+
+2021-05-28  Utkarsh Singh  <utkarsh190601@gmail.com>  (tiny change)
+
+       * lisp/outline.el (outline-minor-mode-highlight): Fix 
safe-local-variable.
+
+2021-05-28  Eli Zaretskii  <eliz@gnu.org>
+
+       Another stability fix in 'lisp_string_width'
+
+       * src/character.c (lisp_string_width): Compute C pointer to data
+       of STRING immediately before using it, since STRING could be
+       relocated by GC triggered by processing compositions.  (Bug#48711)
+
+2021-05-28  Eli Zaretskii  <eliz@gnu.org>
+
+       Attempt to fix segfaults caused by changes in 'lisp_string_width'
+
+       * src/character.c (lisp_string_width): Validate the value of TO
+       argument before passing it to 'composition_gstring_width'.
+       (Bug#48711)
+
+2021-05-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve previous frames.texi change
+
+       * doc/emacs/frames.texi (Fonts): Use conf names instead of path
+       names (bug#19568).
+
+2021-05-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Specify which Gsetting font names are used in the manual
+
+       * doc/emacs/frames.texi (Fonts): Explicitly say what Gsettings
+       names are used (bug#19568).
+
+2021-05-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix previous admin/emake change
+
+2021-05-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Adjust admin/emake filters
+
+       Recent changes have made etc/doc always be regenerated, so it's no
+       longer interesting.  And all "git pull"s will make
+
+         INFO     Scraping files for cal-loaddefs.el...
+         INFO     Scraping files for cal-loaddefs.el...done
+
+       etc be output, so filter them, too.
+
+2021-05-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Continue checking the same line when hitting SPC in ispell
+
+       * lisp/textmodes/ispell.el (ispell-process-line): Continue
+       checking the same line when hitting SPC (bug#20543).
+
+2021-05-28  Daniel Martín  <mardani29@yahoo.es>
+
+       Fix looking-at-p example in shortdoc.el
+
+       * lisp/emacs-lisp/shortdoc.el (regexp): Use `looking-at-p' instead of
+       `looking-at' (bug#48709).
+
+2021-05-28  Alex Bochannek  <alex@bochannek.com>
+
+       Mention the -e switch in an ange-ftp doc string
+
+       * lisp/net/ange-ftp.el (ange-ftp-ftp-program-args): Mention the -e
+       switch (bug#48494).
+
+2021-05-28  Alex Bochannek  <alex@bochannek.com>
+
+       Fix nnimap lexical conversion problem
+
+       * lisp/gnus/nnimap.el (nnimap-process-expiry-targets): Fix problem
+       introduced when converting to lexical binding -- `set' alters the
+       dynamic value (bug#48577).
+
+2021-05-27  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/byte-opt.el (byte-compile-inline-expand): Silence 
warnings
+
+       (byte-optimize--lexvars): Move before first use instead of using `dlet`
+       on that first use.
+
+2021-05-27  Ingo Lohmar  <ingo.lohmar@posteo.net>
+
+       * lisp/progmodes/sql.el: Turn `sql-*-statement-starters' to defvars.
+
+       These variables hold information on the SQL standard and
+       product-specific additions and should not be user-customizable.
+
+2021-05-27  Eli Zaretskii  <eliz@gnu.org>
+
+       * src/character.c (lisp_string_width): Fix a typo in recent change.
+
+2021-05-27  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix resolution of symlinks during dumping
+
+       * src/comp.c (Fcomp_el_to_eln_rel_filename): Don't use
+       'file-truename', as it is only available once files.el is loaded,
+       which doesn't work during dumping, until loadup loads files.el.
+       Instead, use 'realpath'.  (Bug#48578)
+       * src/w32.c (realpath): New function.
+       * src/w32.h (realpath): Add prototype.
+
+       * nt/mingw-cfg.site (ac_cv_func_realpath)
+       (gl_cv_func_realpath_works): Define to "yes", as this function is
+       now implemented in w32.c.
+
+2021-05-27  Eli Zaretskii  <eliz@gnu.org>
+
+       * src/character.c (lisp_string_width): Fix last change.
+
+2021-05-27  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix lexing of numbers with trailing decimal point and exponent
+
+       Numbers with a trailing dot and an exponent were incorrectly read as
+       integers (with the exponent ignored) instead of the floats they should
+       be.  For example, 1.e6 was read as the integer 1, not 1000000.0 as
+       every sane person would agree was meant. (Bug#48678)
+
+       Numbers with a trailing dot but no exponent are still read as
+       integers.
+
+       * src/lread.c (string_to_number): Fix float lexing.
+       * test/src/lread-tests.el (lread-float): Add test.
+       * doc/lispref/numbers.texi (Float Basics): Clarify syntax.
+
+2021-05-27  Mattias Engdegård  <mattiase@acm.org>
+
+       Don't propagate lexical variables into inlined functions
+
+       Functions compiled when inlined (thus from inside the optimiser)
+       mustn't retain the lexical environment of the caller or there will be
+       tears.  See discussion at
+       https://lists.gnu.org/archive/html/emacs-devel/2021-05/msg01227.html .
+
+       Bug found by Stefan Monnier.
+
+       * lisp/emacs-lisp/byte-opt.el (byte-compile-inline-expand):
+       Bind byte-optimize--lexvars to nil when re-entering the compiler
+       recursively.
+       * test/lisp/emacs-lisp/bytecomp-resources/bc-test-alpha.el:
+       * test/lisp/emacs-lisp/bytecomp-resources/bc-test-beta.el: New files.
+       * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-defsubst): New test.
+
+2021-05-27  Philipp Stephani  <phst@google.com>
+
+       * src/character.c (lisp_string_width): Add missing type checks.
+
+2021-05-27  Eli Zaretskii  <eliz@gnu.org>
+
+       A better fix for 'string-width'
+
+       * src/character.c (lisp_string_width): Compute the width when
+       automatic compositions can happen more accurately, by using the
+       pixel widths of the grapheme clusters, divided by the default
+       face's font width.  Disregard the current state of
+       'auto-composition-mode', for consistency with 'current-column' .
+
+2021-05-27  Deneb Meketa  <deneb@pixar.com>  (tiny change)
+
+       Fix filling of overlong first lines in Python doc strings
+
+       * lisp/progmodes/python.el (python-fill-string): Fill overlong
+       first lines correctly (bug#20860).
+
+2021-05-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve the prompting in read-directory-name
+
+       * lisp/dired-x.el (dired-virtual): Improve doc string and use
+       `read-directory-name' (bug#20993).
+
+2021-05-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix ediff message parsing in non-English locales
+
+       * lisp/vc/ediff-diff.el (ediff-exec-process): Run diff in the C
+       locale to enable parsing the messages (bug#21387).
+
+2021-05-27  Juri Linkov  <juri@linkov.net>
+
+       * lisp/vc/diff-mode.el (diff-hunk-text): Test-driven fix for newlines.
+
+       * lisp/vc/diff-mode.el (diff-hunk-text): Fix handling of newlines
+       to cover all test cases according to new test.
+
+       * test/lisp/vc/diff-mode-tests.el (diff-mode-test-hunk-text-no-newline):
+       New test to cover cases with no newline at end of file.
+
+2021-05-26  Alex Bochannek  <alex@bochannek.com>
+
+       Remove the base64 Face header repadding in Gnus
+
+       * lisp/gnus/gnus-fun.el (gnus-convert-face-to-png): Remove call.
+
+       * lisp/gnus/gnus-util.el (gnus-base64-repad): Remove.
+
+2021-05-26  Karl Fogel  <kfogel@red-bean.com>
+
+       Improve some doc strings in bookmark.el
+
+       * lisp/bookmark.el (bookmark-bmenu-load): Describe prefix argument
+         behavior.  Refer to related functions for more information.
+         (bookmark-bmenu-save): Likewise refer to related functions.
+
+       As discussed in this thread:
+
+         https://lists.gnu.org/archive/html/emacs-devel/2021-05/msg00389.html
+
+         From: Karl Fogel
+         To: Eli Zaretskii
+         Cc: Matthias Meulien, Drew Adams, Lars Ingebrigtsen,
+             Stefan Monnier, Emacs Devel
+         Subject: Re: [External] : Re: [PATCH] When deleting in bookmark menu,
+                  prompt for confirmation.
+         Date: Sun, 09 May 2021 13:37:52 -0500
+         Message-ID: <87h7jboirj.fsf@red-bean.com>
+
+2021-05-26  Eli Zaretskii  <eliz@gnu.org>
+
+       Make 'string-width' auto-composition aware
+
+       * src/composite.c (find_automatic_composition): Now extern.
+       (char_composable_p): Don't assume 'unicode-category-table' is
+       always available.
+       * src/composite.h (find_automatic_composition): Add prototype.
+       * src/character.c (lisp_string_width): Support automatic
+       compositions; call 'find_automatic_composition' when
+       'auto-composition-mode' is ON.
+
+2021-05-26  Filipp Gunbin  <fgunbin@fastmail.fm>
+
+       * src/sysdep.c (system_process_attributes): Fix misspelled Qttname for 
FreeBSD
+
+2021-05-26  Filipp Gunbin  <fgunbin@fastmail.fm>
+
+       Improve system_process_attributes on macOS (Bug#48548)
+
+       * src/sysdep.c (system_process_attributes): Fix misprint in 'tty' attr
+       - should be 'ttname' instead.  Change 'utime', 'stime', 'time',
+       'majflt' attrs to obtain them from proc_pid_rusage, as sysctl call
+       used before doesn't give correct values; remove 'minflt' because it's
+       not available.  Obtain 'vsize' / 'rss' / 'thcount' from proc_pidinfo.
+       Use sysctl with KERN_PROCARGS2 to obtain args: value contains both
+       argc and argv, so argv can be reliably cut out.
+
+2021-05-26  Protesilaos Stavrou  <info@protesilaos.com>
+
+       Remove modus-themes.org build date (bug#48661)
+
+       * doc/misc/modus-themes.org: Delete Org macro of the current export 
date.
+
+       This makes the manual reproducible between Emacs builds.
+
+2021-05-25  Juri Linkov  <juri@linkov.net>
+
+       * lisp/international/mule-cmds.el (mule--ucs-names-group): Better char 
check.
+
+2021-05-25  Tassilo Horn  <tsdh@gnu.org>
+
+       Make the Alacritty terminal an alias of xterm-256color
+
+       * lisp/faces.el (term-file-aliases): Make the Alacritty terminal
+       an alias of xterm-256color (bug#48439).
+
+2021-05-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make hs-set-up-overlay into user option
+
+       * lisp/progmodes/hideshow.el (hs-set-up-overlay): Make into
+       defcustom (bug#48513).
+
+2021-05-25  Stephen Leake  <stephen_leake@stephe-leake.org>
+
+       Restore `ff-find-other-file' buffer selection logic
+
+       * lisp/find-file.el (ff-find-other-file): Restore selection of
+       buffer changed by previous change (bug#48535).
+
+2021-05-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix font and indentation of call-with-port in scheme-mode
+
+       * lisp/progmodes/scheme.el (scheme-font-lock-keywords-2): Add
+       call-with-port (bug#48544).
+       (call-with-port): Indent correctly.
+
+2021-05-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Handle syntactically invalid .dir-locals.el files better
+
+       * lisp/files.el (dir-locals-read-from-dir): Handle syntactically
+       invalid .dir-locals.el files more gently (bug#48568).  Give a
+       message instead of bugging out later.
+
+2021-05-25  Protesilaos Stavrou  <info@protesilaos.com>
+
+       Update modus-themes to version 1.4.0
+
+       * doc/misc/modus-themes.org:
+       (Overview): Document good support for cases with red-green color
+       deficiency (deuteranopia).
+       (Customization Options): Add code block with sample configuration.
+       (Option for mode line presentation): Document new values.
+       (Option for completion framework aesthetics): Reword statements.
+       (Option for mail citations): Include new customization.
+       (Option for line highlighting (hl-line-mode)): Change description
+       of possible value.
+       (Option for diff buffer looks): Update the meaning of 'fg-only',
+       which now is an alias for 'fg-only-deuteranopia'.
+       (Option for org-mode block styles): Rename possible values.
+       (Cycle through arbitrary colors (DIY)): Include code samples for
+       demo case.
+       (Override colors (DIY)): Use correct symbol.
+       (Override color saturation (DIY)): Show how to combine manual and
+       automatic color overrides.
+       (Update Org block delimiter fontification (DIY)): Provide example.
+       (Load theme depending on time of day): Include missing "DIY" label.
+       (Full support for packages or face groups): Update list with
+       additions, removals.
+       (Indirectly covered packages): Update list.
+       (Notes for individual packages)
+       (Note on dimmer.el)
+       (Note on display-fill-column-indicator-mode)
+       (Note on mmm-mode.el background colors)
+       (Note on prism.el)
+       (Note on ERC escaped color sequences)
+       (Note on powerline or spaceline)
+       (Note on Helm grep)
+       (Note on EWW and Elfeed fonts (SHR fonts)): Stylistic change to
+       the heading.
+       (Note on inline Latex in Org buffers)
+       (Note on god-mode.el): Add note.
+       (Frequently Asked Questions (FAQ)): Include new section.
+       (Acknowledgements): Update list of contributors (bug#48647).
+       * etc/themes/modus-operandi-theme.el: Bump version number.
+
+       * etc/themes/modus-themes.el: Add new defcustom forms and update
+       existing ones, edit doc strings, remove old obsolete aliases,
+       tweak internal functions, refine face specifications.
+
+       * etc/themes/modus-vivendi-theme.el: Bump version number.
+
+2021-05-25  Gregory Heytings  <gregory@heytings.org>
+
+       Do not switch to other window when minibuffer is selected
+
+       * lisp/window.el (handle-select-window): Do not silently switch to
+       other window when minibuffer is selected and
+       mouse-autoselect-window is t (Bug#47969).
+
+2021-05-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Restore `dired-do-create-files' return value
+
+       * lisp/dired-aux.el (dired-do-create-files): Preserve the return
+       value from `dired-create-files', which is apparently an
+       undocumented feature used by dired-aux-tests.el (dired-test-bug30624).
+
+2021-05-25  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix documentation of a recent change
+
+       * src/process.c (syms_of_process) <process-prioritize-lower-fds>:
+       Doc fix.
+
+       * etc/NEWS: Reword the entry for 'process-prioritize-lower-fds'.
+
+2021-05-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Update help-tests.el after minibuffer map change
+
+2021-05-25  Miha Rihtaršič  <miha@kamnitnik.top>
+
+       Try to not prioritise reading from lower file descriptors
+
+       * src/process.c (wait_reading_process_output): When looping through
+       fds, continue from where we left off.
+       (syms_of_process): Vprocess_prioritize_lower_fds: New variable
+       (bug#48118).
+
+2021-05-25  Glenn Morris  <rgm@gnu.org>
+
+       * doc/misc/cc-mode.texi: Remove hand-written node pointers (bug#48402).
+
+2021-05-25  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/byte-opt.el: Make the build more reproducible
+
+       (byte-compile-inline-expand): When inlining code from another file,
+       always inline the byte-code version of the function.
+       (byte-optimize--pcase): Simplify edebug spec.
+
+2021-05-25  Philipp Stephani  <phst@google.com>
+
+       Allow years in a copyright range to be separated by en dashes.
+
+       * lisp/emacs-lisp/copyright.el (copyright-regexp)
+       (copyright-years-regexp, copyright-update-year)
+       (copyright-fix-years): Also include en dash.
+
+       * test/lisp/emacs-lisp/copyright-tests.el (copyright-tests--data): New
+       test cases.
+
+2021-05-25  Jonas Bernoulli  <jonas@bernoul.li>
+
+       * lisp/transient.el: Update to package version 0.3.4.
+
+2021-05-25  Gregory Heytings  <gregory@heytings.org>
+
+       Further improvements to completion-list-mode-map
+
+       * doc/emacs/mini.texi (Completion Commands): Mention the change,
+       and mention the 'n' and 'p' keys bound to 'next-completion' and
+       'previous-completion'. (bug#47699).
+       * lisp/minibuffer.el (minibuffer-local-completion-map): Change the
+       M-g key to M-g M-c.
+
+       * lisp/simple.el (completion-list-mode-map): Change the M-g key to
+       M-g M-c.
+       (read-expression-map): Bind M-g M-c to
+       read-expression-switch-to-completions.
+       (read-expression-switch-to-completions): New function.
+
+2021-05-25  Gregory Heytings  <gregory@heytings.org>
+
+       Improve completion-list-mode-map
+
+       * doc/emacs/mini.texi (Completion Commands): Mention it.
+
+       * lisp/minibuffer.el (minibuffer-local-completion-map): Add the M-g key
+       for switch-to-completion (bug#47699).
+
+       * lisp/simple.el (completion-list-mode-map): Make special-mode-map its
+       parent, unbind the 'g' revert key, add the 'n' and 'p' keys for
+       next-completion and previous-completion, and the M-g key for
+       switch-to-minibuffer.
+       (switch-to-minibuffer): New function.
+
+2021-05-25  Gregory Heytings  <gregory@heytings.org>
+
+       Use correct face when pulsing in CEDET
+
+       * lisp/cedet/pulse.el (pulse-momentary-highlight-overlay): Use
+       pulse-highlight-face, not pulse-highlight-start-face (bug#47810).
+
+2021-05-25  Gregory Heytings  <gregory@heytings.org>
+
+       Consider all user-defined bitmaps in gui_init_fringe()
+
+       * src/fringe.c (gui_init_fringe): Consider user-defined bitmaps
+       that override default ones (bug#47832).
+
+2021-05-25  Gregory Heytings  <gregory@heytings.org>
+
+       Fix infloop in Modula-2 mode
+
+       * lisp/progmodes/modula2.el (m2-smie-refine-colon): Stop looping
+       when point does not move with forward-sexp (Bug#48011).
+
+2021-05-25  Amin Bandali  <bandali@gnu.org>
+
+       * lisp/erc/erc-services.el: Fix newly-added Libera.Chat entry 
(bug#48529).
+
+2021-05-25  Gregory Heytings  <gregory@heytings.org>
+
+       Fix bug when moving directories to trash
+
+       * lisp/files.el (move-file-to-trash): Pass the correct dir-flag to
+       make-temp-file so that a directory is created when a directory is
+       being trashed (Bug#47960).
+
+2021-05-24  Corwin Brust  <corwin@bru.st>  (tiny change)
+
+       Add Libera.chat to `erc-nickserv-alist'
+
+       * lisp/erc/erc-services.el (erc-nickserv-alist): Add support for
+       the Libera chat.
+
+2021-05-24  Glenn Morris  <rgm@gnu.org>
+
+       Tweak c-mode bug reporting address
+
+       * lisp/progmodes/cc-mode.el (c-mode-help-address):
+       Switch to bug-gnu-emacs.  This is an alias for the previous
+       submit@debbugs address, except that if no Package header can be found,
+       as often seems to happen for cc-mode reports, debbugs will assign
+       the report to the "emacs" package rather than to "debbugs.gnu.org".
+
+2021-05-23  Philipp Stephani  <phst@google.com>
+
+       Fix find invocation for macOS (Bug#48471).
+
+       * lisp/progmodes/project.el (project--files-in-directory): Instead of
+       appending a slash (which doesn't work well with macOS find), remove
+       trailing slash and pass -H instead.
+
+2021-05-23  Michael Albinus  <michael.albinus@gmx.de>
+
+       Adapt tramp-archive-autoload-file-name-handler
+
+       * lisp/net/tramp-archive.el (tramp-archive-autoload-file-name-handler):
+       Bind `default-directory' to safe value.
+
+2021-05-22  Juri Linkov  <juri@linkov.net>
+
+       * src/editfns.c (Finsert_char): Add docstring reference to 
read-char-by-name.
+
+2021-05-22  Tassilo Horn  <tsdh@gnu.org>
+
+       Document bug-reference setup for 3rd-party packages
+
+       * doc/emacs/maintaining.texi (Bug Reference): Add section explaining
+       adding support for third-party packages.
+       * lisp/progmodes/bug-reference.el (bug-reference-maybe-setup-from-vc)
+       (bug-reference-maybe-setup-from-mail)
+       (bug-reference-maybe-setup-from-irc): Rename from
+       bug-reference--maybe-setup-from-*, i.e., un-privatize them because
+       they are advertised in the docs now.
+
+2021-05-22  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       30e5d93ee1 (origin/emacs-27) Improve documentation of display tables
+       8804ac857b * src/buffer.c (syms_of_buffer) <ctl-arrow>: Doc fix.  (Bu...
+
+2021-05-22  Glenn Morris  <rgm@gnu.org>
+
+       * doc/emacs/maintaining.texi (Bug Reference): Fix cross refs.
+
+       "First argument to cross-reference may not be empty." (makeinfo 4).
+
+2021-05-22  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix bug#48476
+
+       * lisp/net/tramp-archive.el (tramp-archive-autoload-file-name-handler):
+       Add implementation.
+
+       * lisp/net/tramp-integration.el (tramp-rename-files)
+       (tramp-rename-these-files): Declare them.
+
+       * lisp/net/tramp.el (tramp-autoload-file-name-handler):
+       Load tramp-archive.el if needed.  (Bug#48476)
+
+       * test/lisp/net/tramp-archive-tests.el (tramp-archive-test45-auto-load):
+       Extend test.
+
+       Use #' syntax for function symbols.
+
+2021-05-22  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/subr-x.el (if-let*, if-let): Use looser Edebug spec
+
+       This makes the same spec work both for `if-let` and `when-let`.
+
+       (when-let*, and-let*, when-let): Simplify accordingly.
+
+2021-05-22  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Fix native-comp-async-report-warnings-errors :type
+
+       * doc/lispref/compile.texi (Native-Compilation Variables): Document
+       'silent' alternative of native-comp-async-report-warnings-errors.
+       * lisp/emacs-lisp/comp.el
+       (native-comp-async-report-warnings-errors): Fix quoting in
+       :type expression (bug#48586).
+
+2021-05-22  Philipp Stephani  <phst@google.com>
+
+       Give 'when-let' and 'when-let*' their own Edebug specification.
+
+       The Edebug specification of 'if-let' and 'if-let*' doesn't work if the
+       body is empty.  While that's a pathological case, it's not wrong per
+       se, and could arguably happen due to macro expansion.
+
+       * lisp/emacs-lisp/subr-x.el (when-let*, when-let): Don't reuse Edebug
+       specification from 'if-let*' and 'if-let'.
+
+2021-05-22  Philipp Stephani  <phst@google.com>
+
+       * lisp/emacs-lisp/cl-macs.el (cl-loop): Add missing 'when' to spec
+
+2021-05-21  Tassilo Horn  <tsdh@gnu.org>
+
+       Add documentation about bug-reference auto-setup.
+
+       * doc/emacs/maintaining.texi (Bug Reference): Add documentation about
+       the automatic setup.
+       * lisp/progmodes/bug-reference.el
+       (bug-reference-setup-from-irc-alist): Remove doubling in docstring.
+
+2021-05-21  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Robustify parsing of gnus-search search results
+
+       * lisp/gnus/gnus-search.el (gnus-search-indexed-parse-output): Look
+       for a "process finished" tag, and don't choke on mis-parsed lines.
+
+2021-05-21  Juri Linkov  <juri@linkov.net>
+
+       * lisp/dired-aux.el (dired-do-revert-buffer): New defcustom (bug#48456).
+
+       (dired-do-create-files): Use it.
+
+2021-05-21  Juri Linkov  <juri@linkov.net>
+
+       * lisp/simple.el (yank-from-kill-ring): Fix kill-ring-yank-pointer 
(bug#48478)
+
+2021-05-21  Michael Albinus  <michael.albinus@gmx.de>
+
+       Adapt native-comp entries in gitlab-ci.yml
+
+       * test/infra/gitlab-ci.yml (stages): New stages native-comp-images
+       and native-comp.
+       (build-native-bootstrap-speed0): Simplify.
+       (build-native-bootstrap-speed1, build-native-bootstrap-speed2):
+       Deactivate temporarily.
+
+       * test/infra/gitlab-ci.yml (.build-template): Add 'needs:' clause.
+       (.native-comp-template): New template.
+       (build-native-bootstrap-speed0): Use it.
+
+2021-05-21  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid byte-compiler warning during bootstrap
+
+       * lisp/isearch.el (multi-isearch-switch-buffer): Avoid
+       byte-compiler warning.
+
+2021-05-21  Michael Albinus  <michael.albinus@gmx.de>
+
+       Rearrange nativecomp tests for EMBA
+
+       * test/infra/Dockerfile.emba (emacs-native-comp-speed0):
+       Add recipe.
+
+       * test/infra/gitlab-ci.yml (stages): New stages native-comp-images
+       and native-comp.
+       (build-native-bootstrap-speed0): Simplify.
+       (build-native-bootstrap-speed1, build-native-bootstrap-speed2):
+       Deactivate temporarily.
+
+2021-05-21  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of display tables
+
+       * doc/lispref/display.texi (Display Tables): Add a cross-reference
+       to the next section.
+
+2021-05-21  Andrea Corallo  <akrl@sdf.org>
+
+       Fix ahead-of-time native compilation for out-of-tree builds (bug#48497)
+
+       * src/comp.c (Fcomp_el_to_eln_rel_filename): Expand
+       'PATH_DUMPLOADSEARCH' while computing 'loadsearch_re_list'.
+
+2021-05-21  Eli Zaretskii  <eliz@gnu.org>
+
+       * src/buffer.c (syms_of_buffer) <ctl-arrow>: Doc fix.  (Bug#48539)
+
+2021-05-20  Juri Linkov  <juri@linkov.net>
+
+       * lisp/help.el (describe-bindings-outline): New defcustom (bug#45147).
+
+       (describe-bindings): Use describe-bindings-outline.
+       (describe-bindings-internal): Remove function obsolete since 24.4.
+
+2021-05-20  Juri Linkov  <juri@linkov.net>
+
+       * lisp/vc/diff-mode.el (diff-hunk-text): Handle better "\ No newline at 
end".
+
+2021-05-20  Juri Linkov  <juri@linkov.net>
+
+       Fix off-by-one inconsistency of 'M-y C-y' (bug#48478).
+
+       * lisp/simple.el (read-from-kill-ring): Increment 
kill-ring-yank-pointer by 1.
+       (yank-from-kill-ring): Don't increment kill-ring-yank-pointer by 1.
+
+2021-05-20  Juri Linkov  <juri@linkov.net>
+
+       * lisp/international/mule-cmds.el: Use group-function in 
read-char-by-name.
+
+       (mule--ucs-names-group): Simplify for using by group-function.
+       (read-char-by-name-group): Remove defcustom
+       obsoleted by completions-group.
+       (read-char-by-name): Mention completions-group and
+       completions-group-sort in docstring.  Use group-function when
+       completions-group is non-nil.
+       https://lists.gnu.org/archive/html/emacs-devel/2021-05/msg00791.html
+
+2021-05-20  Daniel Mendler  <mail@daniel-mendler.de>
+
+       (minibuffer-completion-help): Add group sorting
+
+       Sort the groups as returned by the `group-function` of the completion
+       table depending on the value of the customizable variable
+       `completions-group-sort`.  By default `completions-group-sort` is set
+       to nil.  The variable can be set to the symbol `alphabetical` in order
+       to configure alphabetical sorting.  Furthermore, a custom sorting
+       function can be used as value of `completions-group-sort`.
+
+       * lisp/minibuffer.el (completions-group-sort): New variable.
+       (minibuffer--group-by): Add SORT-FUN argument.
+       (minibuffer-completion-help): Pass `completions-group-sort` to
+       `minibuffer--group-by`.
+
+2021-05-20  Daniel Mendler  <mail@daniel-mendler.de>
+
+       (completion--insert-vertical): Separate groups completely
+
+       Insert the candidates vertically within the groups, but keep the
+       groups separate using the full width group separators.
+
+       * lisp/minibuffer.el (completion--insert-vertical): Adjust
+       grouping.
+
+2021-05-20  Daniel Mendler  <mail@daniel-mendler.de>
+
+       (minibuffer-completion-help): Do not check `completions-group` centrally
+
+       The guard variable `completions-group` should be checked in each
+       completion table individually.  The guard variable
+       `completions-detailed` variable is used in the same way.
+
+       * lisp/minibuffer.el (minibuffer-completion-help): Remove check of
+       `completions-group`.
+
+2021-05-20  Daniel Mendler  <mail@daniel-mendler.de>
+
+       (completion--insert-strings): Split function; Full group title support
+
+       Split `completion--insert-strings` into a function per completions
+       format in order to increase readability and extensibility.  This
+       change eases the addition of more formats.  Add support for group
+       titles to the vertical and horizontal formatting functions.
+
+       * lisp/minibuffer.el (completion--insert): Add new function.
+       (completion--insert-vertical, completion--insert-horizontal,
+       completion--insert-one-column): Extract function from
+       `completion--insert-strings`.  Use new function `completion--insert`.
+       (completion--insert-strings): Use new insertion functions.
+
+2021-05-20  Daniel Mendler  <mail@daniel-mendler.de>
+
+       (completing-read): Add `group-function` to the completion metadata
+
+       A completion table can specify a `group-function` in its metadata.
+       The group function takes two arguments, a completion candidate and a
+       transform argument.  The group function is used to group the
+       candidates after sorting and to enhance the completion UI with group
+       titles.
+
+       If the transform argument is nil, the function must return the title
+       of the group to which the completion candidate belongs.  The function
+       may also return nil if the candidate does not belong to a group.
+
+       If the transform argument is non-nil, the function must return the
+       transformed candidate.  For example, the transformation allows to
+       remove a redundant part of the candidate, which is then displayed in
+       the title.
+
+       The grouping functionality is guarded by the customizable variable
+       `completions-group` and turned off by default for the *Completions*
+       buffer.
+
+       The specific form of the `group-function` has been chosen in order to
+       allow allocation-free grouping.  This is important for completion UIs,
+       which continuously update the displayed set of candidates (Icomplete,
+       Vertico, Ivy, etc.).  Only when the transform argument is non-nil the
+       candidate transformation is performed, which may involve a string
+       allocation as done in the function `xref--completing-read-group`.
+
+       The function `xref-show-definitions-completing-read` makes use of the
+       `group-function`, by moving the file name prefix to the title.  If
+       grouping is enabled, the *Completions* are displayed as
+       "linenum:summary" instead of "file:linenum:summary".  This way the
+       *Completions* buffer resembles the *Occur* buffer.
+
+       * doc/lispref/minibuf.texi: Add documentation.
+
+       * lisp/minibuffer.el (completion-metadata): Describe the
+       `group-function` in the docstring.
+       (completions-group): Add guard variable, off by default.
+       (completions-group-format): Add variable defining the format string
+       for the group titles.
+       (completions-group-title): Add face used by `completions-group-format`
+       for the group titles.
+       (completions-group-separator): Add face used by
+       `completions-group-format` for the group separator lines.
+       (minibuffer--group-by): New grouping function.
+       (minibuffer-completion-help): Use it.
+       (display-completion-list): Add optional GROUP-FUN argument.
+       (completion--insert-strings): Add optional GROUP-FUN argument.  Insert
+       group titles if `completions-format` is `one-column`.  Transform each
+       candidate with the GROUP-FUN.  Attach the untransformed candidate to
+       the property `completion--string`.
+
+       * lisp/simple.el (choose-completion): Retrieve the untransformed
+       completion candidate from the property `completion--string`.
+
+       * lisp/progmodes/xref.el:
+       (xref--completing-read-group): New grouping function.
+       (xref-show-definitions-completing-read): Use it.
+
+2021-05-20  Michael Albinus  <michael.albinus@gmx.de>
+
+       * doc/emacs/maintaining.texi (Bug Reference): Add debbugs-browse-mode.
+
+2021-05-20  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of 'etags' tests
+
+       * test/manual/etags/README: New file.  (Bug#46055)
+
+       * test/README: Mention separate README files for tests in the
+       'manual' subdirectory
+
+2021-05-20  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix arg-out-of-range errors in 'line-number-at-pos'
+
+       * src/fns.c (Fline_number_at_pos): Pass character position to
+       args_out_of_range.  Suggested by Andreas Schwab
+       <schwab@linux-m68k.org>.  Call args_out_of_range_3 to show both
+       ends of the accessible portion.
+
+2021-05-20  Eli Zaretskii  <eliz@gnu.org>
+
+       Make sure gmalloc's hybrid_free preserves errno
+
+       * src/gmalloc.c (hybrid_free_1): New function, with the body of
+       the previous 'hybrid_free'.
+       (hybrid_free): Call 'hybrid_free_1' while preserving the value of
+       'errno'.  Suggested by Paul Eggert <eggert@cs.ucla.edu>.
+
+2021-05-20  Eli Zaretskii  <eliz@gnu.org>
+
+       Clean up the fix for unexec build on GNU/Linux
+
+       * src/conf_post.h [HYBRID_MALLOC || DARWIN_OS && HAVE_UNEXEC]:
+       Include <stdlib.h> here, before redirecting 'malloc' and friends
+       to their hybrid_* and unexec_* equivalents.  #undef malloc and
+       friends before redefining.  Provide prototypes for the
+       replacements.  Suggested by Paul Eggert <eggert@cs.ucla.edu>.
+       * src/gmalloc.c [HYBRID_MALLOC]: Remove declarations of 'malloc'
+       and friends, as they are now redundant: we include <stdlib.h> in
+       conf_post.h before redefining 'malloc' etc., and that provides
+       prototypes from system headers.
+
+       * configure.ac (HYBRID_MALLOC): Remove kludge to avoid replacement
+       of 'free' by Gnulib.  (Bug#36649)
+
+2021-05-19  Tassilo Horn  <tsdh@gnu.org>
+
+       Add a section about bug-reference-mode.
+
+       * doc/emacs/maintaining.texi (Maintaining): Add a section about
+       bug-reference-mode.
+       * doc/emacs/emacs.texi (Top): Link to the new section about
+       bug-reference-mode.
+
+2021-05-19  Juri Linkov  <juri@linkov.net>
+
+       * lisp/simple.el (yank-from-kill-ring-rotate): New defcustom 
(bug#48478).
+
+       (read-from-kill-ring, yank-from-kill-ring): Use it.
+
+2021-05-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix rare failures in 'window-default-font-height'
+
+       * lisp/window.el (window-default-font-height): Avoid signaling an
+       error when a client TTY frame happens to have an X-style 'display'
+       parameter.  (Bug#48408)
+
+2021-05-19  Eli Zaretskii  <eliz@gnu.org>
+
+       * lisp/startup.el (command-line-1): Avoid byte-compiler warning.
+
+2021-05-19  Glenn Morris  <rgm@gnu.org>
+
+       Fix custom type of recent dired-aux additions
+
+       * lisp/dired-aux.el (dired-compress-file-default-suffix)
+       (dired-compress-directory-default-suffix): Fix :type.
+
+2021-05-19  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/kmacro.el (kmacro-lambda-form): Fix bug#48523
+
+       Re-add `counter` and `format` arguments, since they are used in
+       `insert-kbd-macro`.
+
+2021-05-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix the unexec build on GNU/Linux
+
+       The unexec build on GNU/Linux must use HYBRID_MALLOC (gmalloc.c) and
+       sheap.c.  This was inadvertently disabled because a configure-time
+       test for 'sbrk' was moved as side effect of an unrelated change.
+
+       * configure.ac: Test for 'sbrk' before using the result in the
+       decision about SYSTEM_MALLOC and HYBRID_MALLOC.
+       (HYBRID_MALLOC): Prevent Gnulib from redirecting 'free' to its
+       replacement 'rpl_free'.
+
+       * lib/Makefile.in (not_emacs_OBJECTS): Add mallooc/%.o and free.o.
+
+2021-05-19  Ingo Lohmar  <ingo.lohmar@posteo.net>
+
+       * lisp/progmodes/sql.el: `sql-postgres-statement-starters' defcustom
+
+       Recognize common table expression as statement start in Postgres.
+
+2021-05-19  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Lift restriction for finding theme summary line
+
+       * lisp/cus-theme.el (custom-theme-summary): Don't limit the file to
+       having the deftheme form as the very first form, rather look for the
+       deftheme form explicitly.
+
+2021-05-19  Martin Rudalics  <rudalics@gmx.at>
+
+       Fix recently introduced misbehavior of `quit-restore-window' (Bug#48493)
+
+       * lisp/window.el (quit-restore-window): Unconditionally call
+       `switch-to-prev-buffer' (Bug#48493).
+
+2021-05-19  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/js.el (js--make-framework-matcher): Use a closure
+
+2021-05-19  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/gud.el (gud-tooltip-tips): Use proper closures
+
+       Also prefer #' to quote function names.
+
+       (jdb): Fix $ => \'.
+
+2021-05-19  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/org/org-timer.el (org-timer--run-countdown-timer): Use closures
+
+2021-05-19  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/org/org-mouse.el: Make use of lexical scoping
+
+       (org-mouse-todo-menu): Simplify by eta-reduction.
+       (org-mouse-popup-global-menu): Remove redundant `eval`.
+       (org-mouse-keyword-menu, org-mouse-keyword-replace-menu)
+       (org-mouse-tag-menu, org-mouse-match-closure): Use proper closures.
+
+2021-05-19  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/org/org-colview.el (org-columns-map): Use proper closures
+
+       Also prefer #' to quote function names.
+
+       (org-columns-map): Use derived-mode-p.
+
+2021-05-19  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/org/org-clock.el (org-clock-get-table-data): Use proper closures
+
+       Also, prefer #' to quote function names
+
+2021-05-19  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/net/sieve-manage.el (sieve-sasl-auth): Use proper closures
+
+       * lisp/net/shr.el (shr-image-displayer): Use proper closures
+
+2021-05-19  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/net/imap.el (imap-mailbox-close): Use proper closures
+
+       Also, remove redundant `:group` args, and prefer #' to quote function 
names
+
+2021-05-19  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/net/eudc.el (eudc-menu): Use proper closures
+
+2021-05-19  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/net/browse-url.el: Avoid `(lambda ..)
+
+       (browse-url-netscape, browse-url-mozilla, browse-url-galeon)
+       (browse-url-epiphany, browse-url-elinks): Use proper closures.
+
+2021-05-19  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/misearch.el (multi-isearch-push-state): Use proper closures
+
+2021-05-19  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/menu-bar.el: Avoid `(lambda
+
+       (menu-bar-buffer-vector, menu-bar-update-buffers): Use proper closures.
+
+2021-05-19  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/info.el (Info-isearch-push-state): Use proper closures
+
+       * lisp/imenu.el (imenu--create-keymap): Use proper closures
+
+       * lisp/find-dired.el (find-dired): Use a proper closure
+
+       * lisp/facemenu.el (facemenu-add-new-face): Use `:documentation`
+
+2021-05-18  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/eshell/em-pred.el: Take advantage of lexical scoping
+
+       Also remove redundant `:group` arguments.
+
+       (eshell-parse-modifiers): Make sure we pass a function value.
+       (eshell-parse-arg-modifier, eshell-parse-modifiers)
+       (eshell-add-pred-func, eshell-pred-user-or-group)
+       (eshell-pred-file-time, eshell-pred-file-type, eshell-pred-file-mode)
+       (eshell-pred-file-links, eshell-pred-file-size)
+       (eshell-pred-substitute, eshell-include-members, eshell-join-members)
+       (eshell-split-members): Use proper closures.
+
+2021-05-18  Juri Linkov  <juri@linkov.net>
+
+       * doc/emacs/basic.texi (Repeating): Document repeat-exit-timeout 
(bug#48472).
+
+2021-05-18  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/eieio-core.el (eieio-defclass-internal): Use a closure
+
+2021-05-18  Juri Linkov  <juri@linkov.net>
+
+       * lisp/repeat.el (repeat-exit-timeout): New defcustom (bug#48472).
+
+       (repeat-exit-timer): New variable.
+       (repeat-post-hook): Run idle timer with an "exit function"
+       returned from set-transient-map.
+       Suggested by Gustavo Barros <gusbrs.2016@gmail.com>.
+
+       (repeat-echo-message): Remove own previous message when input arg is 
nil.
+
+       * lisp/window.el (display-buffer-override-next-command): Return exitfun.
+
+2021-05-18  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/calendar/cal-menu.el (cal-menu-holidays-menu): Use a proper 
closure
+
+2021-05-18  Juri Linkov  <juri@linkov.net>
+
+       * lisp/emacs-lisp/lisp-mode.el (lisp-outline-level): Fix imprecise 
numbers.
+
+       (lisp-outline-level): Return right levels starting from 1 instead of 5.
+       Suggested by Howard Melman <hmelman@gmail.com> in bug#46878.
+
+2021-05-18  Juri Linkov  <juri@linkov.net>
+
+       * lisp/simple.el (read-from-kill-ring): Add new arg PROMPT (bug#48478).
+
+       * lisp/simple.el (yank-pop, yank-from-kill-ring):
+       * lisp/isearch.el (isearch-yank-from-kill-ring):
+       Use arg PROMPT in the call read-from-kill-ring.
+
+2021-05-18  Philipp Stephani  <phst@google.com>
+
+       Recreate symptom of Bug#42701.
+
+       The fix to Bug#48489 (commit 9676d41b8301b84e07717e633059a3f2b5c4c9d8)
+       has masked the symptom of Bug#42701 for 'if-let'.  Create a helper
+       macro that still exemplifies the bug.
+
+       * test/lisp/emacs-lisp/edebug-tests.el
+       (edebug-tests--duplicate-symbol-backtrack): New helper macro.
+       (edebug-tests-duplicate-symbol-backtrack): Use it instead of 'if-let'.
+
+2021-05-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix some regressions introduced by the previous dired-aux change
+
+       * lisp/dired-aux.el (dired-compress-file): Check that the file
+       we're compressing exists.  Also work outside the current directory.
+
+2021-05-18  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Look for ElDoc buffer in all visible frames
+
+       * lisp/emacs-lisp/eldoc.el (eldoc--echo-area-prefer-doc-buffer-p):
+       Look for a window displaying the ElDoc documentation buffer in all
+       visible frames, as promised by the user option
+       eldoc-echo-area-prefer-doc-buffer (bug#48278).
+
+2021-05-18  Miha Rihtaršič  <miha@kamnitnik.top>
+
+       Fix problem with focusing in `C-o' in ibuffer in some circumstances
+
+       * lisp/ibuffer.el (ibuffer-visit-buffer-other-window-noselect):
+       Use display-buffer instead of pop-to-buffer and selecting the old
+       window.  `pop-to-buffer' focuses the new frame, but
+       `select-window' usually fails to focus the original frame.  This
+       simple patch fixes that (bug#48218).
+
+2021-05-18  Gong Qijian  <gongqijian@gmail.com>  (tiny change)
+
+       Fix `custom-delayed-init-variables' problem when re-dumping emacs
+
+       * lisp/startup.el (command-line): Don't bug out on redumping Emacs
+       (bug#48492).
+
+2021-05-18  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/kmacro.el: Fix test cases broken by last change
+
+       (kmacro-lambda-form): Remove unused args `counter` and `format`.
+       Arrange to be able to extract `mac` from the function.
+       (kmacro-extract-lambda): Use this new extraction instead of digging
+       into the guts of a function's code.
+
+2021-05-18  Alexandr Vityazev  <avityazev@posteo.org>  (tiny change)
+
+       Fix the length= shortdoc example
+
+       * lisp/emacs-lisp/shortdoc.el (list): Fix the length= example
+       (bug#48495).
+
+2021-05-18  Eli Zaretskii  <eliz@gnu.org>
+
+       Revert "* lisp/bookmark.el: make bookmark-fontify nil default value"
+
+       This reverts commit ed8c3303f945fbd2c16ece0e87d041c75ae05ff9.
+
+2021-05-18  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix pcase 'rx' patterns with a single named submatch (bug#48477)
+
+       pcase 'rx' patterns with a single named submatch, like
+
+         (rx (let x "a"))
+
+       would always succeed because of an over-optimistic transformation.
+       Patterns with 0 or more than 1 named submatches were not affected.
+
+       Reported by Philipp Stephani.
+
+       * lisp/emacs-lisp/rx.el (rx--pcase-macroexpander):
+       Special case for a single named submatch.
+       * test/lisp/emacs-lisp/rx-tests.el (rx-pcase): Add tests.
+
+2021-05-18  Paul W. Rankin  <pwr@bydasein.com>
+
+       * lisp/bookmark.el: make bookmark-fontify nil default value
+
+2021-05-18  Philipp Stephani  <phst@google.com>
+
+       * lisp/emacs-lisp/subr-x.el (if-let): Swap &or branches (Bug#48489)
+
+2021-05-18  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/kmacro.el: Avoid the dynbound dialect of ELisp
+
+       (kmacro-call-macro, kmacro-lambda-form): Use proper closures.
+       (kmacro-keymap): Prefer #' top quote function names.
+
+2021-05-18  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Visually truncate excessively long lines in Xref
+
+       * lisp/progmodes/xref.el (xref-truncation-width): New option.
+       (xref--apply-truncation): New function.
+       (xref--insert-xrefs): Use it (bug#46859).
+
+2021-05-17  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix the etags test suite
+
+       * test/manual/etags/ETAGS.good_2:
+       * test/manual/etags/ETAGS.good_3:
+       * test/manual/etags/ETAGS.good_4:
+       * test/manual/etags/ETAGS.good_5:
+       * test/manual/etags/ETAGS.good_6:
+       * test/manual/etags/CTAGS.good: Adjust to addition test.rs.
+
+2021-05-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add an etags test for Rust (bug#46055)
+
+2021-05-17  Eli Zaretskii  <eliz@gnu.org>
+
+       Update the etags/ctags test files
+
+       * test/manual/etags/ETAGS.good_1:
+       * test/manual/etags/ETAGS.good_2:
+       * test/manual/etags/ETAGS.good_3:
+       * test/manual/etags/ETAGS.good_4:
+       * test/manual/etags/ETAGS.good_5:
+       * test/manual/etags/ETAGS.good_6:
+       * test/manual/etags/CTAGS.good: Adjust to current codebase.
+
+2021-05-17  Sun Lin  <sunlin7@yahoo.com>
+
+       Allow specifying the default archive types to compress to in Dired
+
+       * lisp/dired-aux.el (dired-compress-file-default-suffix):
+       (dired-compress-directory-default-suffix): New user options
+       (bug#47119).
+       (dired-compress-file-alist): New variable.
+
+       * lisp/dired-aux.el (dired-compress-file): Use them.
+       (dired-compress-file-suffixes): Remove the directory item.
+
+2021-05-17  Pierre-Antoine Rouby  <contact@parouby.fr>
+
+       Add support for Rust in etags
+
+       * lib-src/etags.c (Rust_functions): New function to make tags for rust
+       files.
+       (Rust_help, Rust_suffixes): New constant.
+       * doc/emacs/maintaining.texi (Tag Syntax): Add Rust item.
+       * doc/man/etags.1: Add Rust (bug#46055).
+
+2021-05-17  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid crashes in condition-case
+
+       * src/eval.c (internal_lisp_condition_case): Don't take XCAR
+       without making sure the value is a cons cell.  (Bug#48479)
+
+2021-05-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention *-nov-is-evil in the Extra Headers Gnus manual section
+
+       * doc/misc/gnus.texi (To From Newsgroups): Mention nov-is-evil.
+
+2021-05-17  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of new behavior of 'M-y'
+
+       * lisp/minibuffer.el (minibuffer-local-map): Switch the order of
+       '\r' and '\n' bindings.
+       * lisp/simple.el (yank-pop, read-from-kill-ring)
+       (yank-from-kill-ring): Doc fixes.
+
+       * doc/emacs/search.texi (Isearch Yank):
+       * doc/emacs/killing.texi (Yanking): Improve the description of the
+       new functionality of 'M-y'.
+       * doc/lispref/text.texi (Yank Commands): Remove inaccurate
+       description of 'M-y' in Isearch.
+
+       * etc/NEWS: Improve the wording of 'M-y' entry.
+
+2021-05-17  Philipp Stephani  <phst@google.com>
+
+       Add a unit test to reproduce Bug#48471.
+
+       * test/lisp/progmodes/project-tests.el (project-tests--trivial)
+       (project-root, project-ignores): New test project type.
+       (project-ignores): New unit test.
+
+2021-05-17  Philipp Stephani  <phst@google.com>
+
+       Fix a few Edebug specifications where code is wrapped in lambdas.
+
+       As the Info node `(elisp) Specification List' explains, it is not
+       correct to use `body' or t for a piece of code that the macro wraps in
+       a `lambda' form.  These should use `def-body' instead.
+
+       * lisp/info-xref.el (info-xref-with-file):
+       * lisp/subr.el (subr--with-wrapper-hook-no-warnings, track-mouse)
+       (combine-change-calls, with-eval-after-load):
+       * lisp/emacs-lisp/bytecomp.el (displaying-byte-compile-warnings):
+       * lisp/emacs-lisp/cl-macs.el (cl-do-symbols, cl-progv):
+       * lisp/emacs-lisp/ert-x.el (ert-with-test-buffer):
+       * lisp/emacs-lisp/gv.el (gv-letplace):
+       * lisp/emacs-lisp/nadvice.el (define-advice):
+       * lisp/emacs-lisp/thunk.el (thunk-delay):
+       * lisp/vc/vc-dispatcher.el (vc-run-delayed): Use 'def-body' instead of
+       t or 'body' where applicable.
+
+       * lisp/emacs-lisp/package.el (package--with-response-buffer): Remove
+       evaluation of the body altogether.  I have no idea how to write it
+       correctly in this case.
+
+2021-05-16  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Add a 'silent option for native-comp-async-report-warnings-errors
+
+       * lisp/emacs-lisp/comp.el (native-comp-async-report-warnings-errors):
+       Set to 'silent to log warnings, but not pop up the *Warnings* buffer.
+       * lisp/emacs-lisp/comp.el (comp-accept-and-process-async-output):
+       Check value.
+
+2021-05-16  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Use condition-case-unless-debug in nnselect-run
+
+       * lisp/gnus/nnselect.el (nnselect-run): This is confusing for users,
+       make it more yielding to common debugging strategies.
+
+2021-05-16  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Fix function signature for gnus-search-indexed-parse-output
+
+       * lisp/gnus/gnus-search.el (gnus-search-indexed-parse-output): Generic
+       function arg list didn't match the method arglist, which made for
+       confusing function help.
+
+2021-05-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       mouse-wheel-progressive-speed doc string clarification
+
+       * lisp/mwheel.el (mouse-wheel-progressive-speed): Doc string
+       improvement (bug#45322).
+
+2021-05-16  Ingo Lohmar  <ingo.lohmar@posteo.net>
+
+       prepend newline in sqli buffer
+
+       (sql-remove-continuation-prompt, sql-send-string): Move newline
+       insertion.
+
+       Previously, the preoutput filter `sql-remove-continuation-prompt'
+       inserted a leading newline in the interactive SQL buffer if it decided
+       that is has to remove continuation prompts and that it had found all
+       it was looking for.
+
+       1) This filter function was a doubtful place to do that (arguably, its
+          name does not suggest any action like this).
+       2) The behavior worked inconsistently, eg, when sending a single-line
+          "SELECT" statement, because it only ran when the filter function
+          needed to remove any prompts (for example, not when sending a
+          region without newlines).
+
+          This can lead to misaligned table headers, which explains why
+          emacswiki and stackoverflow both present several fixes to this
+          behavior.
+
+2021-05-16  Tassilo Horn  <tsdh@gnu.org>
+
+       Add bug-reference-mode-force-auto-setup
+
+       * lisp/progmodes/bug-reference.el
+       (bug-reference-try-setup-from-rmail): Match the Rmail mbox filename
+       against GROUP-REGEXP in bug-reference-setup-from-mail-alist.
+       (bug-reference-mode-force-auto-setup): New function which forces
+       auto-setup even if bug-reference-bug-regexp and
+       bug-reference-url-format are already set.
+
+2021-05-16  Dario Gjorgjevski  <dario.gjorgjevski+git@gmail.com>
+
+       Add more completion tests
+
+       * test/lisp/minibuffer-tests.el (completion--pcm-score)
+       (completion--pcm-first-difference-pos): New helpers.
+       (completion-pcm-test-1, completion-pcm-test-2)
+       (completion-pcm-test-3, completion-pcm-test-4)
+       (completion-pcm-test-5, completion-pcm-test-6)
+       (completion-substring-test-1, completion-substring-test-2)
+       (completion-substring-test-3, completion-substring-test-4)
+       (completion-flex-test-1, completion-flex-test-2)
+       (completion-flex-test-3): New tests (bug#42149)
+
+2021-05-16  Sebastian Urban  <mrsebastianurban@gmail.com>  (tiny change)
+
+       Improve some quotation quoting in the Emacs manual
+
+       * doc/emacs/text.texi (Quotation Marks, Quotation Marks):
+       * doc/emacs/display.texi (Text Display): Fix some issues when
+       quoting quote marks and the like (bug#35885).
+
+       * doc/emacs/emacs.texi: Switch on double-sided printing headings.
+
+2021-05-16  Noam Postavsky  <npostavs@gmail.com>
+
+       Remove unreliable test for match data clobbering
+
+       * src/search.c (Freplace_match): Don't test for change in search_regs
+       start and end, this is unreliable if change hooks modify text earlier
+       in the buffer (bug#35264).
+
+2021-05-16  Philipp Stephani  <phst@google.com>
+
+       Optimize calls to 'eql', 'memql' and similar for fixnums.
+
+       It's good practice to compare integers using 'eql' because two bignum
+       objects representing the same integer might not be 'eq'.  However,
+       'eql' is slower and doesn't have its own byte code.  Therefore,
+       replace it with 'eq' if one argument is guaranteed to be a fixnum on
+       all platforms.
+
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize--fixnump): New helper
+       function.
+       (byte-optimize-equal, byte-optimize-member, byte-optimize-assoc): Use
+       it to optimize 'eql' etc. to 'eq' if it will always compare fixnums.
+
+2021-05-16  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix handling of stderr buffer in Tramp's make-process (Bug#47861)
+
+       * lisp/net/tramp-sh.el (tramp-sh-handle-make-process):
+       Reimplement stderr buffer handling.  (Bug#47861)
+       (tramp-maybe-open-connection): Improve traces.
+
+       * test/lisp/net/tramp-tests.el (tramp-test30-make-process):
+       Rework for stderr buffer.
+
+2021-05-16  Tassilo Horn  <tsdh@gnu.org>
+
+       Bug reference auto-setup for Rmail
+
+       * lisp/progmodes/bug-reference.el
+       (bug-reference-try-setup-from-rmail): New function setting up
+       `bug-reference-mode' from the current Rmail message.
+
+2021-05-15  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Update CSS completion tests
+
+       * test/lisp/textmodes/css-mode-tests.el (css-test-complete-pseudo-class)
+       (css-test-complete-pseudo-element): Update the tests for recent changes.
+
+2021-05-15  Tassilo Horn  <tsdh@gnu.org>
+
+       Refactor bug-reference setup functions into a defvar
+
+       * lisp/progmodes/bug-reference.el
+       (bug-reference-auto-setup-functions): New defvar so that other
+       packages can add their own auto-setup functions to it.
+       * lisp/progmodes/bug-reference.el (bug-reference--run-auto-setup): Use
+       the new variable instead of hard-coding the 4 functions we've had
+       already.
+
+2021-05-15  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix segfaults when byte-compiling with native-compilation
+
+       * src/emacs.c (main): Call 'set_initial_minibuffer_mode' before
+       entering recursive-exit.
+       * src/minibuf.c (init_minibuf_once_for_pdumper): Don't call
+       'set_minibuffer_mode' here...
+       (set_initial_minibuffer_mode): ... set it in this new function.
+       (Bug#48446)
+       * src/lisp.h: Add prototype for 'set_initial_minibuffer_mode'.
+
+2021-05-15  Alan Mackenzie  <acm@muc.de>
+
+       Miscellaneous corrections to src/minibuf.c for bug #48337
+
+       * src/minibuf.c (read_minibuf): Call get_minibuffer before incrementing
+       minibuf_level, in case a hook function calls Factive_minibuffer_window.
+       (init_minibuf_once_for_pdumper): Create  *Minibuf-0* here (moved from
+       init_minibuf_once), and set its mode, so that clicking in the 
mini-window
+       immediately after start up works (thanks, Eli Z.).
+
+2021-05-15  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix launching net-utils on MS-Windows
+
+       * lisp/net/net-utils.el (net-utils-run-simple): Bind
+       coding-system-for-read around the code which starts the process.
+       (Bug#48375)
+
+2021-05-15  pillule  <pillule@riseup.net>  (tiny change)
+
+       Fix `quit-restore-window' when all previous buffers got killed 
(Bug#48367)
+
+       * lisp/window.el (quit-restore-window): Simplify calculation of
+       WINDOW's previous buffer.  Avoid that killing WINDOW's previous
+       buffers results in a state where `quit-window' has no more
+       effect, by simply deleting WINDOW in that case (Bug#48367).
+
+2021-05-15  Daniel Semyonov  <cmstr@dsemy.com>  (tiny change)
+
+       Mairix: use 'mairix-search-options' as documented
+
+       * lisp/net/mairix.el (mairix-call-mairix): Append
+       'mairix-search-options' to the arguments passed to mairix.
+
+2021-05-15  Daniel Semyonov  <cmstr@dsemy.com>  (tiny change)
+
+       Mairix: autoload main interactive functions
+
+       * lisp/net/mairix.el (mairix-search, mairix-use-saved-search)
+       (mairix-edit-saved-searches-customize, mairix-search-from-this-article)
+       (mairix-search-thread-this-article, 
mairix-widget-search-based-on-article)
+       (mairix-edit-saved-searches, mairix-widget-search, 
mairix-update-database):
+       Add magic autoload comment.
+
+2021-05-15  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve doc string of 'log-edit-generate-changelog-from-diff'
+
+       * lisp/vc/log-edit.el (log-edit-generate-changelog-from-diff):
+       Improve the doc string.  (Bug#48269)
+
+2021-05-15  Martin Rudalics  <rudalics@gmx.at>
+
+       Have X builds handle VisibilityNotify events (Bug#48268, Bug#48413)
+
+       * src/xterm.c (handle_one_xevent): Handle VisibilityNotify
+       events (Bug#48268, Bug#48413).
+
+2021-05-15  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Add :company-kind support to nxml-mode completion
+
+       * lisp/nxml/rng-nxml.el (rng-complete-tag)
+       (rng-complete-attribute-name, rng-complete-attribute-value):
+       Support :company-kind.
+
+2021-05-15  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Add :company-kind support to sh-mode completion
+
+       * lisp/progmodes/sh-script.el (sh--completion-keywords):
+       New variable.
+       (sh--cmd-completion-table): Extracted from here.
+       (sh-completion-at-point-function): Add :company-kind.
+
+2021-05-15  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Include colons in the completion strings
+
+       * lisp/textmodes/css-mode.el
+       (css--complete-pseudo-element-or-class):
+       Include colons in the completion strings. That's simply the nicer
+       behavior (e.g. someone typing : will see pseudo-elements in
+       completions as well), and by the standards, the colons are part of
+       their names anyway (of pseudo-elements and classes).
+
+2021-05-15  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Add :company-kind support to css-mode completion
+
+       * lisp/textmodes/css-mode.el (css--complete-pseudo-element-or-class)
+       (css--complete-property-value, css-completion-at-point)
+       (css--complete-at-rule): Add :company-kind properties, to annotate
+       completions with kinds returned in each case.
+
+2021-05-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make the M-x obsoletion check more robust
+
+       * lisp/simple.el (read-extended-command): Make the obsoletion
+       check more robust.
+
+2021-05-14  Alan Mackenzie  <acm@muc.de>
+
+       Various detailed fixes to minibuf.c, etc., to fix bug #48337
+
+       Also fix some unsafe coding.
+
+       * lisp/window.el (push-window-buffer-onto-prev): New function, 
extracted from
+       (record-window-buffer): Refactor by extracting the above, and removing 
the now
+       redundant parameter DO-MINIBUF.
+
+       * src/minibuf.c (zip_minibuffer_stacks, read_minibuf): Replace calls to
+       get_minibuffer (0) by nth_minibuffer (0).  Replace calls to
+       Qrecord_window_buffer by calls to Qpush_window_buffer_onto_prev.
+       (Factive_minibuffer_window, read_minibuf_unwind): Call abort_emacs 
should an
+       "impossible" null value be returned by nth_minibuffer.
+       (read_minibuf): Move the get_minibuffer_call to just after the 
incrementation
+       of minibuf_level as a precaution against a missing buffer in
+       Vminibuffer_list.
+       (nth_minibuffer): Replace XCAR by Fcar, to allow (car nil) to work.
+       (init_minibuf_once): Create the inactive buffer  *Minibuf-0*.
+       (syms_of_minibuf): New DEFSYM, Qpush_window_buffer_onto_prev.
+
+       * src/window.c (restore_window_configuration): Replace some XCARs and 
XCDRs
+       by Fcar_safe and Fcdr_safe.
+
+2021-05-13  Glenn Morris  <rgm@gnu.org>
+
+       * doc/misc/calc.texi: Remove most hand-written node pointers.
+
+       The complex, conditional node layout makes this one of the very
+       few cases that can't be done entirely automatically.
+
+2021-05-13  Glenn Morris  <rgm@gnu.org>
+
+       Remove more hand-written node pointers in doc/misc
+
+       * doc/misc/ede.texi, doc/misc/mh-e.texi, doc/misc/reftex.texi:
+       * doc/misc/todo-mode.texi: Remove hand-written node pointers.
+
+2021-05-13  Glenn Morris  <rgm@gnu.org>
+
+       * doc/misc/epa.texi: Remove hand-written node pointers.
+
+2021-05-13  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       bcd92b5708 (origin/emacs-27) Improve documentation of Hexl mode
+       c233f4eccd ; * etc/NEWS: Fix decoded-time-set-defaults typo.
+       4c3abb3dd1 Fix compilation errors with latest w32 API headers
+       127f1f330b Improve doc strings in log-edit.el
+       e36183ff46 ; * etc/TODO (etc/DOC): Update the todo entries.
+
+       # Conflicts:
+       #       etc/NEWS
+
+2021-05-13  Glenn Morris  <rgm@gnu.org>
+
+       * doc/misc/epa.texi: Fix @nodes in previous change.
+
+2021-05-13  Michael Albinus  <michael.albinus@gmx.de>
+
+       Improve Tramp traces
+
+       * lisp/net/tramp-cmds.el (tramp-list-tramp-buffers):
+       List also trace buffers.
+
+       * lisp/net/tramp.el (tramp-buffer-name):
+       Add `tramp-suppress-trace' property.
+       (tramp-get-debug-file-name): Fix docstring.
+       (tramp-trace-buffer-name): New defun.
+       (tramp-trace-functions): New defvar.
+       (tramp-debug-message): Obey also `tramp-trace-functions'.
+
+       * test/lisp/net/tramp-tests.el (tramp--test-instrument-test-case):
+       Handle trace buffer accordingly.
+
+2021-05-13  dickmao  <none>
+
+       Process sentinels need to work under X and commandline
+
+       * src/process.c (add_non_keyboard_read_fd): Make this a public function.
+       (add_process_read_fd): Fold old, static add_non_keyboard_read_fd guts
+       into here.
+       * src/xsmfns.c (ice_conn_watch_CB): Call add_non_keyboard_read_fd
+       (bug#43834).
+
+2021-05-13  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix vertical cursor motion across tall text or small images
+
+       'line-move-partial' should in general leave it to the display
+       engine to scroll or recenter the window due to vertical motion of
+       the cursor.  The only purpose of this function is to produce
+       vscroll suitable for scrolling across large (relatively to the
+       window's height) images, where moving by display lines is not
+       appropriate.
+
+       * src/xdisp.c (Fdisplay__line_is_continued_p): New primitive.
+
+       * lisp/simple.el (line-move-partial): Call
+       'display--line-is-continued-p' to decide whether to leave it to
+       redisplay to scroll the window as appropriate.  (Bug#48170)
+
+2021-05-13  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix bug#48349 in file-name-non-special
+
+       * lisp/files.el (file-name-non-special): Use Tramp file name
+       handler only in case of `copy-file', 'rename-file' and
+       `copy-directory'.  (Bug#48349)
+
+2021-05-13  Stefan Kangas  <stefan@marxist.se>
+
+       Document `package-quickstart' in the user manual
+
+       * doc/emacs/package.texi (Package Installation): Document
+       `package-quickstart' (bug#44748).
+
+2021-05-13  Nicolás Bértolo  <nicolasbertolo@gmail.com>
+
+       Make searching for files faster under Windows
+
+       * src/lread.c (openp): Use faccessat to check that a file exists
+       before opening it on Windows (bug#41646).  This speeds up
+       searching for files.
+
+2021-05-13  Stefan Kangas  <stefan@marxist.se>
+
+       Don't consider obsolete commands for completion in some cases
+
+       * lisp/simple.el (read-extended-command): Exclude obsolete commands
+       that are either lacking a 'current-name' or were obsoleted in a
+       previous major version (bug#43300).
+
+       (There's been some back and forth here.  Obsolete commands used to be
+       treated normally for completion, and then they were removed.  Then
+       they were put back again, but annotated with what they were
+       obsoleting.  There was some pushback on this change, so this latest
+       changes is a compromise between the last two states.)
+
+2021-05-13  Radon Rosborough  <radon.neon@gmail.com>
+
+       Use an explicit line width of 1 on hollow cursors under X
+
+       * src/xterm.c (x_draw_hollow_cursor): Specify a line width of
+       1 explicitly to avoid problems on some X implementations (bug#42452).
+
+2021-05-13  Eli Zaretskii  <eliz@gnu.org>
+
+       * src/image.c (xpm_image_p): Avoid another compiler warning.
+
+       * src/image.c: Avoid compiler warnings in Cairo builds without XPM.
+
+2021-05-12  Tom Gillespie  <tgbugs@gmail.com>
+
+       Fix evaluation order for hack-local-variables
+
+       * lisp/files.el (hack-local-variables): Fix the ordering which
+       local variables are evaluated by `hack-local-variables' so that
+       prop-line local variables are evaluated first. There is a hidden
+       nreverse lurking in `hack-local-variables-apply' which means that
+       the prop line variables must come second in order to be evaluated
+       before the end of file variables.
+
+2021-05-12  Philip K  <philipk@posteo.net>
+
+       Don't mark interactive commands as internal functions
+
+       * lisp/epa-ks.el (epa-ks-search-mode-map): Rename commands from
+       "--" to "-" throughout.
+
+2021-05-12  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve doc strings and prompt in epa-ks.el
+
+       * lisp/epa-ks.el (epa-ks--mark-key-to-fetch, epa-ks--fetch-key)
+       (epa-search-keys): Doc fixes.
+       (epa-ks-do-key-to-fetch): Better wording for the fetch prompt.
+
+2021-05-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Even further `text-property-search-forward' clarifications
+
+       * lisp/emacs-lisp/text-property-search.el
+       (text-property-search-forward): Further doc string clarifications.
+
+2021-05-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Update email address in epa-ks.el
+
+2021-05-12  Philip K  <philipk@posteo.net>
+
+       All a GPG key server client
+
+       * lisp/epa-ks.el (epa-keyserver): New file (bug#39886).
+       * doc/misc/epa.texi (Quick start): Mention it.
+       (Querying a key server): Document it.
+
+2021-05-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix `uniquify-managed' unbounded growth
+
+       * lisp/uniquify.el (uniquify-rationalize-file-buffer-names):
+       Protect against exponential `uniquify-managed' growth when
+       reverting several (more than two) buffers that have the same file
+       name (bug#36877).
+
+2021-05-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Further corrections for the text-property-search doc strings
+
+       * lisp/emacs-lisp/text-property-search.el
+       (text-property-search-forward): Correct doc string.
+       (text-property-search-backward): Ditto.
+
+2021-05-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak indentation of #foo in js-mode
+
+       * lisp/progmodes/js.el (js--proper-indentation): Indent #define
+       (etc) to column 0, but otherwise indent #foo normally (bug#47488).
+
+2021-05-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove unused variable in rmail.el
+
+       * lisp/mail/rmail.el (rmail-reply): Remove unused lexical variable
+       introduced in previous patch.
+
+2021-05-12  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix the tests for 'string-limit'
+
+       * test/lisp/emacs-lisp/subr-x-tests.el (subr-string-limit-coding):
+       Fix the expected results of string-limit when encoding with
+       UTF-16.  Add tests for UTF-8 with BOM.  (Bug#48324)
+
+       * lisp/emacs-lisp/subr-x.el (string-limit): Add FIXME comment
+       about the current implementation, which is faulty by design.
+
+2021-05-12  Jim Porter  <jporterbugs@gmail.com>
+
+       Abbreviate rgrep command on MS Windows (bug#48302)
+
+       * lisp/progmodes/grep.el (grep-mode-font-lock-keywords):
+       Adapt regexp to match MS Windows-style shell-quoting.
+
+       * test/lisp/progmodes/grep-tests.el: New file.
+
+2021-05-12  Martin Rudalics  <rudalics@gmx.at>
+
+       Handle Bug#24526 without breaking Emacs on tiling WMs (Bug#48268)
+
+       Since tiling window managers may react allergically to resize
+       requests immediately following MapNotify events on X, make sure
+       that such requests are issued only when a new frame should not
+       become visible and a size has been explicitly requested for it.
+
+       * lisp/faces.el (x-create-frame-with-faces): Mark frame as
+       'was-invisible' if it should be initially invisible or iconified
+       and has its size specified explicitly.
+       * src/frame.c (make_frame): Initialize new frame's was_invisible
+       flag.
+       (Fframe__set_was_invisible): New internal function.
+       * src/frame.h (struct frame): Specify size of new_size_p slot.
+       New flag was_invisible.
+       * src/w32fns.c (Fx_create_frame)
+       * src/nsfns.m (Fx_create_frame)
+       * src/xfns.c (Fx_create_frame): Set new frame's was_invisible
+       flag.
+       * src/xterm.c (handle_one_xevent): Call xg_frame_set_char_size
+       after a PropertyNotify or MapNotify event only if F's
+       was_invisible flag was set.
+
+2021-05-12  Richard Stallman  <rms@gnu.org>
+
+       Avoid querying in a noninteractive Emacs.
+
+       * lisp/mail/sendmail.el (mail-send): In noninteractive Emacs,
+       don't ask about combining header fields.
+
+2021-05-12  Richard Stallman  <rms@gnu.org>
+
+       Handle empty string as mail-header-separator
+
+       * lisp/mail/sendmail.el (mail-mode):
+       (mail-sendmail-undelimit-header): Handle mail-header-separator empty.
+       (mail-send): Search for mail-header-separator as entire contents of 
line.
+
+2021-05-12  Richard Stallman  <rms@gnu.org>
+
+       Handle multi-line FROM.
+
+       * lisp/mail/rmailsum.el (rmail-header-summary): Handle multi-line FROM.
+
+2021-05-12  Richard Stallman  <rms@gnu.org>
+
+       Little improvements in rmail.el.  Recognize encryped override headers.
+
+       * lisp/mail/rmail.el (rmail-simplified-subject): Delete `[External] :'.
+       (rmail-reply): In encrypted message, search for other header fields
+               inside the encrypted part, and use them instead of the real 
header.
+       (rmail-epa-decrypt): Don't set MIME unless it's Rmail mode.
+
+2021-05-12  Richard Stallman  <rms@gnu.org>
+
+       Use rfc822-goto-eoh rather that mail-header-separator.
+
+       * lisp/epa-mail.el (epa-mail-sign)
+       (epa-mail-default-recipients, epa-mail-encrypt):
+       Use rfc822-goto-eoh, not mail-header-separator.
+       (epa-mail-default-recipients): Assume epa-mail-aliases
+       elements are lower case, search case-independently.
+
+2021-05-11  Eli Zaretskii  <eliz@gnu.org>
+
+       Move the Text Properties menu back to Edit
+
+       * lisp/textmodes/enriched.el (enriched-mode): Don't add "Text
+       Properties" sub-menu to Text mode menu.
+       * lisp/facemenu.el (menu-bar-edit-menu): Add "Text Properties"
+       sub-menu back to the Edit menu.
+
+2021-05-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove purecopy throughout facemenu.el (since it's not preloaded)
+
+2021-05-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Move facemenu to enriched mode
+
+       * lisp/menu-bar.el (menu-bar-edit-menu): Move from here...
+
+       * lisp/textmodes/enriched.el (enriched-mode): ... to here.
+
+2021-05-11  Tassilo Horn  <tsdh@gnu.org>
+
+       Fix dired confirm message asking to kill buffers of deleted dir 
(bug#48301)
+
+       * lisp/dired.el (dired-clean-up-after-deletion): Fix dired
+       confirmation message asking to kill buffers of deleted dir in the case
+       where `dired-listing-switches' contain -p (bug#48301).
+
+2021-05-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/font-lock.el: Fix `font-lock-comment-end-skip` fallback 
(bug#34088)
+
+       (font-lock-fontify-syntactically-region): Use `comment-end-skip` as
+       fallback for `font-lock-comment-end-skip`, as is done for
+       `font-lock-comment-start-skip` (and as the name suggests).
+
+       * lisp/progmodes/opascal.el (opascal-mode): Revert last change,
+       made unnecessary.
+
+2021-05-11  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of Hexl mode
+
+       * doc/emacs/misc.texi (Editing Binary Files): Explain that Hexl can
+       also be used for editing text, including non-ASCII text.
+
+2021-05-11  Andrea Corallo  <akrl@sdf.org>
+
+       Rename comp-deferred-compilation
+
+       * lisp/progmodes/elisp-mode.el
+       (emacs-lisp-native-compile-and-load): Rename
+       comp-deferred-compilation -> native-comp-deferred-compilation.
+       * src/comp.c (maybe_defer_native_compilation, syms_of_comp):
+       Likewise.
+
+2021-05-11  Andrea Corallo  <akrl@sdf.org>
+
+       Rename comp-deferred-compilation-deny-list
+
+       * lisp/emacs-lisp/comp.el (native-comp-deferred-compilation-deny-list)
+       (native-compile-async-skip-p): Rename
+       comp-deferred-compilation-deny-list ->
+       native-comp-deferred-compilation-deny-list.
+
+2021-05-11  Eli Zaretskii  <eliz@gnu.org>
+
+       Mention native compilation in the user manual
+
+       * doc/emacs/building.texi (Lisp Libraries): Mention native
+       compilation.
+
+2021-05-11  Stefan Kangas  <stefankangas@gmail.com>
+
+       Fix exiting Emacs when savehist-file not writable
+
+       * lisp/savehist.el (savehist-save): Show warning when 'savehist-file'
+       is not writable.  (Bug#34093)
+       (savehist--has-given-file-warning): New variable.
+
+2021-05-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix comment end delimiter fontification in OPascal mode
+
+       * lisp/progmodes/opascal.el (opascal-mode): Fontify the ending
+       brace with `font-lock-comment-delimiter-face' correctly (bug#34088).
+
+2021-05-11  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix assertions in nth_minibuffer
+
+       * src/minibuf.c (nth_minibuffer): Avoid assertion violation when
+       DEPTHth minibuffer doesn't exist.  (Bug#48337)
+
+2021-05-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       `text-property-search-forward' doc string improvement
+
+       * lisp/emacs-lisp/text-property-search.el
+       (text-property-search-forward): Correct and clarify the doc string
+       (bug#48317).
+
+2021-05-11  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix Hexl handling of coding-systems with BOM
+
+       * lisp/international/mule-cmds.el (encode-coding-char): If
+       CODING-SYSTEM produces BOM, remove the BOM bytes from the produced
+       byte sequence.  (Bug#48324)
+
+       * lisp/hexl.el (hexl-mode): Use bufferpos-to-filepos to convert
+       point to offset into the original file.
+       (hexl-mode-exit, hexl-maybe-dehexlify-buffer): Use
+       filepos-to-bufferpos to restore point in the original buffer.
+       (hexl-mode, hexl-insert-multibyte-char)
+       (hexl-self-insert-command, hexl-insert-hex-char)
+       (hexl-insert-decimal-char, hexl-insert-octal-char)
+       (hexl-find-file): Enhance the doc strings, mainly explaining the
+       complications of inserting multibyte characters.
+       (hexl-insert-multibyte-char): Don't treat CH as unibyte if the
+       coding-system isn't ASCII-compatible.  Don't treat null bytes as
+       multibyte.
+
+2021-05-11  Glenn Morris  <rgm@gnu.org>
+
+       * doc/misc/erc.texi (Connecting): Fix cross reference.
+
+2021-05-11  Amin Bandali  <bandali@gnu.org>
+
+       Tweak documentation relating to 'erc-tls'
+
+       * doc/misc/erc.texi (Connecting): Add a reference to the auth manual.
+       * etc/NEWS: Remove the verbose, detailed example of client certificate
+       specification and refer to the ERC manual instead.
+       * lisp/erc/erc.el (erc-tls): Fix leftover path example in docstring.
+
+2021-05-10  Glenn Morris  <rgm@gnu.org>
+
+       * lib/Makefile.in (maintainer-clean): Fully ignore rmdir errors.
+
+2021-05-10  Glenn Morris  <rgm@gnu.org>
+
+       * Makefile.in: Simplify maintainer-clean.
+
+       (maintainer_clean_dirs): Remove.
+       (maintainer-clean): Don't duplicate clean by running bootstrap-clean,
+       which can lead to issues with parallel clean.
+
+2021-05-10  Glenn Morris  <rgm@gnu.org>
+
+       * test/src/emacs-module-tests.el (mod-test-file): Unbreak out-of-tree.
+
+       * test/Makefile.in (clean): Remove generated mml-sec file.
+
+2021-05-10  Glenn Morris  <rgm@gnu.org>
+
+       Always include the test/ directory in tarfiles
+
+       In hindsight, it's hard to see why not including it was ever an option.
+       * make-dist: Always include the test/ directory.
+       (with_tests): Remove.
+       (--tests, --no-tests): Make these options no-ops.
+       * Makefile.in (mostlyclean_dirs, maintainer_clean_dirs): Add "test".
+       (mostlyclean, clean, distclean, maintainer-clean):
+       Remove special-casing for "test".
+       ($(CHECK_TARGETS)): Simplify.
+
+2021-05-10  Michael Albinus  <michael.albinus@gmx.de>
+
+       Extend meaning of UNIQUIFY `auto-save-file-name-transforms'.  
(Bug#47493)
+
+       * doc/lispref/backups.texi (Auto-Saving): Explain UNIQUIFY being a
+       secure hash in auto-save-file-name-transforms.
+
+       * etc/NEWS: Mention change in `auto-save-file-name-transforms'.
+
+       * lisp/files.el (auto-save-file-name-transforms): Adapt docstring.
+       (make-auto-save-file-name): Care, if UNIQ is a secure hash symbol.
+
+2021-05-10  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Avoid saving session customizations in the custom-file
+
+       * lisp/custom.el (custom-theme-recalc-variable): Only stash theme
+       settings for void variables.
+       (custom-declare-variable): After initializing a variable, unstash a
+       theme setting, if present.
+       (disable-theme): When disabling a theme, maybe unstash a theme
+       setting.
+
+       * test/lisp/custom-resources/custom--test-theme.el: Add two settings
+       for testing the fix.
+
+2021-05-10  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Always heed the `lexical-binding' local variable
+
+       * doc/lispref/variables.texi (File Local Variables): Document
+       `permanently-enabled-local-variables'.
+
+       * lisp/files.el (enable-local-variables): Mention the new variable.
+       (set-auto-mode): Always call `hack-local-variables'.
+       (hack-local-variables): Factor out the variable gathering into its
+       own function, and respect the new variable (bug#47843).
+       (hack-local-variables--find-variables): Factored out from
+       `hack-local-variables'.
+       (permanently-enabled-local-variables): New variable.
+
+2021-05-10  Glenn Morris  <rgm@gnu.org>
+
+       * lib-src/Makefile.in (clean): Tidy up seccomp-filter files.
+
+       * test/Makefile.in (SUBDIRS, subdir_template): Fix out-of-tree.
+
+2021-05-10  Glenn Morris  <rgm@gnu.org>
+
+       Small fixes for out-of-tree clean rules.
+
+       * Makefile.in (top_maintainer_clean, extraclean): Fix out-of-tree.
+
+2021-05-10  Glenn Morris  <rgm@gnu.org>
+
+       Small fixes for Makefile clean rules
+
+       * Makefile.in (maintainer-clean): Move some items from extraclean.
+       (extraclean): doc/emacs already deletes emacsver.texi.
+
+2021-05-10  Glenn Morris  <rgm@gnu.org>
+
+       Base the "extraclean" Make rule on "maintainer-clean"
+
+       * Makefile.in (FIND_DELETE): New, set by configure.
+       (extraclean_dirs): Remove.
+       (extraclean): Make it just a small variation on maintainer-clean.
+       * admin/charsets/Makefile.in (extraclean):
+       * admin/grammars/Makefile.in (extraclean):
+       * admin/unidata/Makefile.in (extraclean):
+       * leim/Makefile.in (extraclean):
+       * lib-src/Makefile.in (extraclean):
+       * lisp/Makefile.in (extraclean):
+       * lwlib/Makefile.in (extraclean):
+       * nt/Makefile.in (extraclean):
+       * src/Makefile.in (extraclean): Remove target.
+       * lib/Makefile.in (extraclean): Merge into maintainer-clean.
+
+2021-05-09  Juri Linkov  <juri@linkov.net>
+
+       * lisp/misearch.el (multi-isearch-switch-buffer): New function.
+
+       * lisp/isearch.el (isearch-search-string):
+       * lisp/misearch.el (multi-isearch-wrap, multi-isearch-pop-state): Use 
it.
+
+       https://lists.gnu.org/archive/html/emacs-devel/2021-05/msg00309.html
+
+2021-05-09  Michael Albinus  <michael.albinus@gmx.de>
+
+       Cleanups for Tramp out-of-band methods on MS Windows
+
+       * doc/misc/tramp.texi (Frequently Asked Questions):
+       tramp-use-ssh-controlmaster-options is nil on MS Windows.
+
+       * lisp/net/tramp.el (tramp-unquote-shell-quote-argument): Revert 
previous
+       change, it worked (not as expected but) properly.
+
+       * test/lisp/net/tramp-tests.el (tramp-test17-dired-with-wildcards):
+       Don't skip on MS Windows.
+       (tramp--test-windows-nt-and-scp-p): Remove.
+       (tramp--test-special-characters): Skip for out-of-band methods on
+       MS Windows, sometimes.
+
+2021-05-09  Andreas Schwab  <schwab@linux-m68k.org>
+
+       Make autoloads-force work in build directory
+
+       * lisp/Makefile.in (autoloads-force): Remove $(lisp)/loaddefs.el,
+       not loaddefs.el.
+
+2021-05-09  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Default to 1970 in decoded-time-set-defaults
+
+       * lisp/calendar/time-date.el (decoded-time-set-defaults): Set an
+       unspecified year field to 1970, as promised in the docstring, and to
+       ensure it's representable on all systems (bug#48298).
+
+2021-05-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Reintroduce autoloads for edebug-all-defs/edebug-all-forms
+
+       * lisp/emacs-lisp/edebug.el (edebug-all-defs, edebug-all-forms):
+       Reintroduce ;;;###autoload of these user options that were removed
+       in bae2cfe63c, because this leads to errors in a common (and
+       recommended) use case (bug#47516).
+
+2021-05-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix indentation of lines starting with # in js-mode
+
+       * lisp/progmodes/js.el (js--proper-indentation): # is not like in
+       C -- it doesn't have to appear on the beginning of the line
+       (bug#47488).
+
+2021-05-09  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix compilation errors with latest w32 API headers
+
+       * src/w32common.h: Rename OS_* to OS_SUBTYPE__*, as w32 API
+       headers started defining OS_NT, which breaks the use of the
+       enumeration.  All users changed.  (Bug#48303)
+
+2021-05-08  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Tiny fixes to recent native compilation docs
+
+       For discussion, see the following thread:
+       https://lists.gnu.org/r/emacs-devel/2021-05/msg00347.html
+
+       * doc/lispref/compile.texi (Native Compilation): Fix grammar in @ref
+       online label.
+       (Native-Compilation Functions): Consistently unhyphenate
+       'sub-process'.  Fix grammar.
+       (Native-Compilation Variables): Fix @cindex entry.
+
+2021-05-08  Eli Zaretskii  <eliz@gnu.org>
+
+       Document native-compilation
+
+       * doc/lispref/loading.texi (How Programs Do Loading)
+       (Library Search): Update for native-compilation features.
+       * doc/lispref/compile.texi (Native Compilation)
+       (Native-Compilation Functions, Native-Compilation Variables): New
+       chapter and sections.
+       * doc/lispref/elisp.texi (Top): Update the top-level menus.
+
+       * etc/NEWS: Add a reference to the ELisp manual.
+
+2021-05-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't delete socket on server exit if it was passed in
+
+       * lisp/server.el (server-sentinel): Don't delete the socket if it
+       was passed in to Emacs (bug#47511).
+
+2021-05-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove dead URL in isearchb.el comments
+
+       * lisp/isearchb.el: Remove dead URL in comments (bug#47514).
+
+2021-05-08  Alan Mackenzie  <acm@muc.de>
+
+       Prevent the selected window being a dead mini-window when switching 
frames
+
+       This fixes bug #48249 and also a situation where, with recursive 
minibuffers
+       enabled and minibuffer-follows-selected-frame t, switching frames when a
+       minibuffer was open would leave the mini-window selected on the old 
frame.
+
+       * lisp/window.el (record-window-buffer): Add extra parameter 
DO-MINIBUF, and
+       amend the code such that minibuffers only get processed when that 
parameter is
+       non-nil.
+
+       * src/minibuf.c (zip_minibuffer_stacks, read_minibuf): Call
+       Qrecord_window_buffer with the new argument set to Qt.
+       (move_minibuffers_onto_frame): Set the selected window on the old frame 
when
+       this would otherwise remain the mini-window.
+
+2021-05-08  dalanicolai  <dalanicolai@gmail.com>  (tiny change)
+
+       Mention that Emacs is usually case-insensitive in a couple of places
+
+       * doc/lispref/searching.texi (Regular Expressions): Mention
+       `case-fold-search'.
+
+       * lisp/emacs-lisp/re-builder.el (re-builder): Mention case
+       sensitivity toggles (bug#47534).
+
+2021-05-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Fix moving directories with the same name to trash"
+
+       This reverts commit f618cc5bc83d3822759c5bb85d15320651ca2431.
+
+       This patch doesn't cover some corner cases, I think.
+
+2021-05-08  Codruț Constantin Gușoi  <mail@codrut.pro>  (tiny change)
+
+       Fix moving directories with the same name to trash
+
+       * lisp/files.el (move-file-to-trash): Allow moving several
+       directories with the same name to Trash (bug#48280).
+
+2021-05-08  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/gnus/nnoo.el (defvoo, deffoo): Add `doc-string` property
+
+2021-05-08  Jim Porter  <jporterbugs@gmail.com>
+
+       Ensure `<menu-bar> <edit> <clear>' handles rectangular regions
+
+       * lisp/delsel.el (delete-active-region): Autoload it and make it 
interactive.
+       * lisp/menu-bar.el (menu-bar-edit-menu): Bind "Clear" to
+       `delete-active-region'.
+
+2021-05-07  Philipp Stephani  <phst@google.com>
+
+       Don't use symbolic links in the test resource directory.
+
+       This doesn't work on Windows.  Instead, use the EMACS_TEST_DIRECTORY
+       environment variable to find the BPF files.
+
+       * test/src/emacs-tests.el (emacs-tests--lib-src): New constant.
+       (emacs-tests/seccomp/allows-stdout)
+       (emacs-tests/seccomp/forbids-subprocess)
+       (emacs-tests/bwrap/allows-stdout): Use it.
+
+2021-05-07  Michael Albinus  <michael.albinus@gmx.de>
+
+       Tramp: Fix file name quoting on MS Windows
+
+       * lisp/net/tramp-sh.el (tramp-make-copy-program-file-name):
+       Use `tramp-unquote-shell-quote-argument'.
+
+       * lisp/net/tramp.el (tramp-unquote-shell-quote-argument):
+       Adapt for MS Windows.
+
+       * test/lisp/net/tramp-tests.el (tramp--test-special-characters):
+       Adapt for MS Windows.
+
+2021-05-07  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix a recent change in rmc.el
+
+       * lisp/emacs-lisp/rmc.el (read-multiple-choice): Doc fix.  Improve
+       the message when entering recursive-edit.
+
+2021-05-07  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix some annoyances wrt file-name-non-special
+
+       * lisp/files.el (file-name-non-special): Do not expand `file-truename'.
+
+       * lisp/net/tramp-sh.el (tramp-do-copy-or-rename-file-out-of-band):
+       Use local `default-directory' for `start-process'.
+
+2021-05-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       `mail-envelope-from' doc clarification
+
+       * lisp/mail/sendmail.el (mail-envelope-from): Note that the buffer
+       should be narrowed before calling (bug#47616).
+
+2021-05-07  Michael Albinus  <michael.albinus@gmx.de>
+
+       Tune Tramp traces
+
+       * doc/misc/tramp.texi (Traces and Profiles): Describe call traces.
+
+       * lisp/net/tramp-compat.el: Add `tramp-suppress-trace' property for all
+       functions.
+
+       * lisp/net/tramp.el (tramp-verbose): Adapt docstring.
+       (tramp-file-name-method, tramp-file-name-user)
+       (tramp-file-name-domain, tramp-file-name-host)
+       (tramp-file-name-port, tramp-file-name-localname)
+       (tramp-file-name-hop, tramp-file-name-user-domain)
+       (tramp-file-name-host-port, tramp-file-name-port-or-default)
+       (tramp-tramp-file-p, tramp-find-method, tramp-find-user)
+       (tramp-find-host, tramp-dissect-file-name)
+       (tramp-dissect-hop-name, tramp-debug-buffer-name)
+       (tramp-debug-outline-level, tramp-get-debug-buffer)
+       (tramp-get-debug-file-name, tramp-read-passwd)
+       (tramp-clear-passwd): Add `tramp-suppress-trace' property.
+       (tramp-debug-message): Activate call traces.
+
+       * test/lisp/net/tramp-tests.el (tramp--test-instrument-test-case): 
Simplify.
+
+2021-05-07  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve doc strings in log-edit.el
+
+       * lisp/vc/log-edit.el (log-edit-new-comment-index)
+       (log-edit-maximum-comment-ring-size, log-edit-previous-comment)
+       (log-edit-next-comment, log-edit-comment-search-backward)
+       (log-edit-comment-search-forward)
+       (log-edit-comment-to-change-log)
+       (log-edit-header-contents-regexp, log-edit-font-lock-gnu-style)
+       (log-edit, log-edit-mode, log-edit-fill-entry, log-edit-done)
+       (log-edit-kill-buffer, log-edit-insert-message-template)
+       (log-edit-insert-cvs-template, log-edit-insert-cvs-rcstemplate)
+       (log-edit-rewrite-fixes, log-edit-add-to-changelog)
+       (log-edit-generate-changelog-from-diff)
+       (log-edit-insert-changelog, log-edit-narrow-changelog)
+       (log-edit-changelog-entry, log-edit-changelog-insert-entries)
+       (log-edit-extract-headers): Enhance and reword doc strings.
+
+2021-05-06  Jim Porter  <jporterbugs@gmail.com>
+
+       Shell-quote the directory when finding a project's files
+
+       * lisp/progmodes/project.el (project--files-in-directory):
+       Shell-quote the directory (bug48247).
+
+2021-05-06  Dmitry Gutov  <dgutov@yandex.ru>
+
+       project--buffer-list: Tighten the check
+
+       * lisp/progmodes/project.el (project--buffer-list): Tighten the
+       check to speed up in the presence of multiple Tramp sessions, too.
+       (https://lists.gnu.org/archive/html/emacs-devel/2021-05/msg00152.html)
+
+2021-05-06  Andrea Corallo  <akrl@sdf.org>
+
+       Rename comp-eln-load-path → native-comp-eln-load-path
+
+       * src/comp.c (Fcomp_el_to_eln_filename): Rename comp-eln-load-path →
+       native-comp-eln-load-path.
+       * src/lread.c (maybe_swap_for_eln): Likewise.
+       * lisp/startup.el (native-comp-eln-load-path)
+       (normal-top-level): Likewise.
+       * lisp/emacs-lisp/comp.el (comp-spill-lap-function, comp-final)
+       (comp-eln-load-path-eff, comp-trampoline-compile)
+       (comp-clean-up-stale-eln, comp-run-async-workers)
+       (comp-lookup-eln, batch-byte-native-compile-for-bootstrap): Likewise.
+
+2021-05-06  Andrea Corallo  <akrl@sdf.org>
+
+       Rename comp-warning-on-missing-source
+
+       * src/lread.c (maybe_swap_for_eln): Rename
+       comp-warning-on-missing-source →
+       native-comp-warning-on-missing-source.
+       * src/comp.c (syms_of_comp): Likewise.
+       * lisp/emacs-lisp/comp.el (native-comp-warning-on-missing-source):
+       Likewise.
+
+2021-05-06  Andrea Corallo  <akrl@sdf.org>
+
+       Rename comp-native-driver-options → native-comp-driver-options
+
+       * src/comp.c (add_driver_options, syms_of_comp): Rename
+       comp-native-driver-options → native-comp-driver-options.
+       * lisp/emacs-lisp/comp.el (native-comp-driver-options)
+       (comp-ctxt, comp-spill-lap-function, comp-final)
+       (comp-run-async-workers): Likewise.
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-from-buffer): Likewise.
+
+2021-05-06  Andrea Corallo  <akrl@sdf.org>
+
+       Rename comp-async-query-on-exit → native-comp-async-query-on-exit
+
+       * lisp/emacs-lisp/comp.el (native-comp-async-query-on-exit)
+       (comp-run-async-workers): Rename comp-async-query-on-exit →
+       native-comp-async-query-on-exit.
+
+2021-05-06  Andrea Corallo  <akrl@sdf.org>
+
+       Rename comp-async-report-warnings-errors
+
+       * lisp/emacs-lisp/comp.el (native-comp-async-report-warnings-errors)
+       (comp-accept-and-process-async-output): Rename
+       comp-async-report-warnings-errors →
+       native-comp-async-report-warnings-errors.
+
+2021-05-06  Andrea Corallo  <akrl@sdf.org>
+
+       Rename comp-async-env-modifier-form → 
native-comp-async-env-modifier-form
+
+       * lisp/emacs-lisp/comp.el (native-comp-async-env-modifier-form)
+       (comp-final, comp-run-async-workers): Rename
+       comp-async-env-modifier-form → native-comp-async-env-modifier-form.
+
+2021-05-06  Andrea Corallo  <akrl@sdf.org>
+
+       Rename comp-async-all-done-hook → native-comp-async-all-done-hook
+
+       * lisp/emacs-lisp/comp.el (native-comp-async-all-done-hook)
+       (comp-run-async-workers): Rename comp-async-all-done-hook →
+       native-comp-async-all-done-hook.
+
+2021-05-06  Andrea Corallo  <akrl@sdf.org>
+
+       Rename comp-async-cu-done-functions → 
native-comp-async-cu-done-functions
+
+       * lisp/emacs-lisp/comp.el (native-comp-async-cu-done-functions)
+       (comp-run-async-workers): Rename comp-async-cu-done-functions →
+       native-comp-async-cu-done-functions.
+
+2021-05-06  Andrea Corallo  <akrl@sdf.org>
+
+       Rename comp-async-jobs-number → native-comp-async-jobs-number
+
+       * lisp/emacs-lisp/comp.el (native-comp-async-jobs-number)
+       (comp-effective-async-max-jobs, native--compile-async)
+       (native-compile-async): Rename comp-async-jobs-number →
+       native-comp-async-jobs-number.
+
+2021-05-06  Andrea Corallo  <akrl@sdf.org>
+
+       Rename comp-never-optimize-functions → 
native-comp-never-optimize-functions
+
+       * lisp/emacs-lisp/nadvice.el (advice--add-function): Rename
+       comp-never-optimize-functions → native-comp-never-optimize-functions.
+       * lisp/emacs-lisp/comp.el (native-comp-never-optimize-functions)
+       (comp-subr-trampoline-install, comp-call-optim-form-call): Likewise.
+
+2021-05-06  Andrea Corallo  <akrl@sdf.org>
+
+       Rename comp-bootstrap-deny-list → native-comp-bootstrap-deny-list
+
+       * lisp/emacs-lisp/comp.el (native-comp-bootstrap-deny-list)
+       (batch-native-compile): Rename comp-bootstrap-deny-list →
+       native-comp-bootstrap-deny-list.
+
+2021-05-06  Andrea Corallo  <akrl@sdf.org>
+
+       Rename comp-always-compile → native-comp-always-compile
+
+       * lisp/emacs-lisp/comp.el (native-comp-always-compile)
+       (comp-run-async-workers): comp-always-compile →
+       native-comp-always-compile.
+
+2021-05-06  Andrea Corallo  <akrl@sdf.org>
+
+       Rename comp-verbose -> native-comp-verbose
+
+       * lisp/emacs-lisp/comp.el (native-comp-verbose, comp-log)
+       (comp-log-func, comp-final, comp-run-async-workers): Rename
+       comp-verbose -> native-comp-verbose.
+
+2021-05-06  Andrea Corallo  <akrl@sdf.org>
+
+       Rename comp-debug -> native-comp-debug
+
+       * src/comp.c (emit_ctxt_code, syms_of_comp): Rename comp-debug ->
+       native-comp-debug.
+       * lisp/emacs-lisp/comp.el (native-comp-debug, comp-ctxt)
+       (comp-spill-lap-function, comp-run-async-workers): Likewise.
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-from-buffer): Likewise.
+       * test/src/comp-tests.el (comp-tests-bootstrap): Likewise.
+
+2021-05-06  Andrea Corallo  <akrl@sdf.org>
+
+       Rename comp-speed -> native-comp-speed
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-from-buffer): Rename
+       comp-speed -> native-comp-speed.
+       * lisp/emacs-lisp/comp.el (native-comp-speed, comp-ctxt, comp-func,
+       comp-spill-lap-function, comp-trampoline-compile,
+       comp-run-async-workers): Likewise.
+       * src/comp.c (emit_ctxt_code, load_comp_unit, syms_of_comp): Likewise.
+       * test/src/comp-tests.el (comp-tests-tco, comp-tests-fw-prop-1)
+       (comp-tests-check-ret-type-spec, comp-tests-pure): Likewise.
+
+2021-05-06  Andrea Corallo  <akrl@sdf.org>
+
+       Rename comp-limple-mode -> native-comp-limple-mode
+
+       * lisp/emacs-lisp/comp.el (comp-limple-lock-keywords): Doc update.
+       (native-comp-limple-mode, comp-log-to-buffer): Rename comp-limple-mode
+       -> native-comp-limple-mode.
+
+2021-05-06  Michael Albinus  <michael.albinus@gmx.de>
+
+       In Tramp, use scp "-T" argument if available
+
+       * lisp/net/tramp-sh.el (tramp-scp-strict-file-name-checking): New 
defvar.
+       (tramp-scp-strict-file-name-checking): New defun.
+       (tramp-do-copy-or-rename-file-out-of-band): Use it.
+       (tramp-methods) <scp, scpx>: Use "%x".
+       (tramp-make-copy-program-file-name): Use local quoting.
+       (tramp-sh-handle-make-process): Don't call
+       `tramp-maybe-open-connection', this happens implicitly by
+       `tramp-send-command'.
+
+       * lisp/net/tramp.el (tramp-methods): Adapt docstring.
+
+       * test/lisp/net/tramp-tests.el (tramp-test40-special-characters)
+       (tramp-test40-special-characters-with-stat)
+       (tramp-test40-special-characters-with-perl)
+       (tramp-test40-special-characters-with-ls): Don't skip for
+       `tramp--test-windows-nt-and-scp-p'.
+
+2021-05-06  Stefan Kangas  <stefan@marxist.se>
+
+       Improve formatting in text-quoting-style docstring
+
+       * src/doc.c (syms_of_doc) <text-quoting-style>: Doc fix; improve
+       formatting for readability.
+
+2021-05-06  Stefan Kangas  <stefan@marxist.se>
+
+       Remove another variable alias obsolete since Emacs 23
+
+       * lisp/menu-bar.el (menu-bar-files-menu): Delete variable alias for
+       `menu-bar-file-menu'.
+       * etc/NEWS: Announce its deletion.
+
+2021-05-06  Mattias Engdegård  <mattiase@acm.org>
+
+       Don't fail image-tests if JPEG format isn't compiled in
+
+       * test/lisp/image-tests.el (image-type/from-filename):
+       Make jpeg test conditional.  Test pbm (always present).
+
+2021-05-06  Mattias Engdegård  <mattiase@acm.org>
+
+       Tidy file-matching regexps and remove some ineffective backslashes
+
+       * lisp/emacs-lisp/package.el (package--delete-directory):
+       * lisp/net/tramp-cmds.el (tramp-recompile-elpa):
+       Escape dot; replace $ with \'.
+       * lisp/help.el (help-for-help):
+       * lisp/transient.el (transient-font-lock-keywords):
+       Remove useless backslashes.
+
+2021-05-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make (setf (map-elt ...)) return the value in the alist/plist cases
+
+       * lisp/emacs-lisp/map.el (map-elt): Return the value in the list
+       case (which can signal a `map-not-inplace' error.
+       (map-elt): Return the value in the list case, too (bug#47572).
+
+2021-05-06  Matt Armstrong  <matt@rfc20.org>
+
+       Add tests for `map-elt'
+
+       * test/lisp/emacs-lisp/map-tests.el: Add (failing) tests for `map-elt'
+       (bug#47572).
+
+2021-05-06  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix bug#47625 in dired
+
+       * lisp/dired-aux.el (dired-create-files): Check, that
+       `dired-do-symlink' does not create symlinks on different hosts.
+       (Bug#47625)
+
+2021-05-06  Alan Mackenzie  <acm@muc.de>
+
+       Fix wrong handling of minibuffers when frames get iconified/made 
invisible
+
+       This should fix bug #47766.
+
+       * lisp/window.el (window-deletable-p): Add a quote where it was missing 
from
+       minibuffer-follows-selected-frame.
+
+       * src/frame.c (check_minibuf_window): Delete the function.
+       (delete_frame): In place of calling check_minibuf_window, call
+       move_minibuffers_onto_frame, possibly to move minibuffers onto the new 
current
+       frame.
+       (Fmake_frame_invisible, Ficonify_frame): Remove calls to 
check_minibuf_window.
+
+       * src/minibuf.c (Factive_minibuffer_window): Search the frames for the 
active
+       minibuffer rather than just assuming minibuf_window has been correctly
+       updated.
+
+2021-05-06  Harald Jörg  <haj@posteo.de>
+
+       cperl-mode: Eliminate bad interpretation of ?foo?
+
+       * lisp/progmodes/cperl-mode.el (cperl-find-pods-heres): Delete
+       ?? from the allowed bare regexp delimiters.
+       (cperl-short-docs): Delete ?...? from the documentation.
+
+       * test/lisp/progmodes/cperl-mode-tests.el (cperl-bug-47598):
+       Add tests for good, bad, and ambiguous use of ? as regex
+       delimiter (bug#47598).
+
+2021-05-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Only look at the headers when computing the envelope from address
+
+       * lisp/mail/smtpmail.el (smtpmail-send-it)
+       (smtpmail-send-queued-mail, smtpmail-via-smtp):
+       * lisp/mail/sendmail.el (sendmail-send-it): Only look at the
+       headers when computing the envelope from (bug#47616).
+
+2021-05-06  Dmitrii Kuragin  <dkuragin@ya.ru>  (tiny change)
+
+       Fix ispell program comparison
+
+       * lisp/textmodes/ispell.el (ispell-set-spellchecker-params):
+       Compare strings with `equal', not `eq' (since the identity of the
+       string may change) (bug#48246).
+
+2021-05-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make Info completion more robust
+
+       * lisp/info.el (Info-build-node-completions): Don't signal an
+       error if there are no nodes in the file we're computing
+       completions over (bug#47771).
+
+2021-05-06  Daniel Martín  <mardani29@yahoo.es>
+
+       Add a help option to the open large files prompt
+
+       * lisp/files.el (files--ask-user-about-large-file-help-text): New
+       function that returns information about opening large files in
+       Emacs.  (Bug#45412)
+       (files--ask-user-about-large-file): Use read-multiple-choice to
+       display the available actions.
+       * etc/NEWS: Advertise the new feature.
+
+2021-05-06  Daniel Martín  <mardani29@yahoo.es>
+
+       Extend read-multiple-choice to support free-form help descriptions
+
+       * lisp/emacs-lisp/rmc.el (read-multiple-choice): Add a new argument to
+       override the default help description in `read-multiple-choice'.  Use
+       the `help-char' variable instead of ?\C-h.  Also support the `edit'
+       action from `query-replace-map', so that help links can be visited by
+       entering a recursive edit.
+
+2021-05-05  Karl Fogel  <kfogel@red-bean.com>
+
+       New option to confirm deletion in bookmark menu
+
+       * lisp/bookmark.el (bookmark-menu-confirm-deletion): New defcustom.
+       (bookmark-delete-all): Add comment explaining why we don't use the new
+       confirmation formula here.
+       (bookmark-bmenu-execute-deletions): Conditionally confirm deletion.
+       Note that the bulk of the code diff here is just reindentation of an
+       otherwise unchanged `let' expression.
+
+       * etc/NEWS: Announce the new option.
+
+       Thanks to Lars Ingebrigtsen and Eli Zaretskii for review, and thanks
+       to Oliver Taylor for suggesting the option in the first place:
+
+         
https://lists.gnu.org/archive/html/emacs-humanities/2021-02/msg00022.html
+         From: Oliver Taylor
+         Subject: Re: [emacs-humanities] Extending Emacs Bookmarks to Work 
with EWW
+         To: Karl Fogel
+         Cc: Stefan Kangas, Emacs-humanities mailing list
+         Date: Wed, 3 Feb 2021 20:21:59 -0800
+         Message-Id: <936D47EA-4D11-452B-8303-971B6386877B@me.com>
+
+2021-05-05  Andrea Corallo  <akrl@sdf.org>
+
+       Rename feature `nativecomp' into `native-compile'
+
+       * test/src/comp-tests.el : Rename feature `nativecomp' into
+       `native-compile'.
+       * test/lisp/help-fns-tests.el (help-fns-test-lisp-defun): Likewise.
+       * src/comp.c (syms_of_comp): Likewise.
+       * lisp/startup.el (normal-top-level): Likewise.
+       * lisp/loadup.el: Likewise.
+       * lisp/help.el (help-function-arglist): Likewise.
+       * lisp/emacs-lisp/package.el (package--native-compile-async)
+       (package--delete-directory): Likewise.
+       * lisp/emacs-lisp/nadvice.el (advice--add-function): Likewise.
+       * lisp/emacs-lisp/comp.el (comp-ensure-native-compiler): Likewise.
+       * lisp/emacs-lisp/advice.el (ad-add-advice): Likewise.
+
+2021-05-05  Martin Rudalics  <rudalics@gmx.at>
+
+       Fix setting of 'width' and 'height' frame parameters
+
+       * src/frame.c (Fframe_parameters): Fix bogus setting of 'height'
+       and 'width' parameters.
+
+2021-05-05  Andrea Corallo  <akrl@sdf.org>
+
+       * test/lisp/help-fns-tests.el (help-fns-test-lisp-defsubst): Fix 
(bug#48221).
+
+2021-05-05  Kazuhiro Ito  <kzhr@d1.dion.ne.jp>
+
+       Tweak how some Japanese punctuation chars are translated to ASCII
+
+       * lisp/language/japan-util.el (japanese-symbol-table): Tweak
+       Japanese punctuation character translation (bug#47767).
+
+2021-05-05  Andrea Corallo  <akrl@sdf.org>
+
+       Better identify native compiler presence in two tests.
+
+       * test/lisp/help-fns-tests.el (help-fns-test-lisp-defun)
+       (help-fns-test-lisp-defsubst): Better identify native-comp
+       presence.
+
+2021-05-05  Daniel Mendler  <mail@daniel-mendler.de>
+
+       Don't bug out in `Info-goto-node' completion
+
+       * lisp/info.el (Info-read-node-name-1): Don't bug out in the
+       middle of completion, but return nil instead (and issue a message)
+       (bug#47771).
+
+2021-05-05  Boruch Baum  <boruch_baum@gmx.com>
+
+       Fix error in ses.el when setting the current row
+
+       * lisp/ses.el (ses-jump, ses-list-local-printers)
+       (ses-list-named-cells): Use `user-error' for user errors.
+       (ses-set-header-row): Function `ses-set-header-row' was
+       determining the current row based upon variable `ses--curcell',
+       but that variable is NIL until one begins an operation on a cell
+       (eg. keybindings '=', '"'), so navigating to a row was
+       insufficient to select that row, and further generated an ERROR
+       because the code was not expecting a NIL value for variable
+       `ses--curcell' (bug#47784).
+
+2021-05-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow `C-x C-k l' to work even if `C-h l' is unbound
+
+       * lisp/kmacro.el (kmacro-edit-lossage): `view-lossage' may be
+       bound to a different key than `C-h l' (bug#47785).
+
+2021-05-05  Matt Beshara  <m@mfa.pw>
+
+       Remove unnecessary call to message in js.el
+
+       * lisp/progmodes/js.el (js--end-of-defun-nested): Remove debugging
+       message left over (bug#48234).
+
+2021-05-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Use @defmac on eval-{and,when}-compile
+
+       * doc/lispref/compile.texi (Eval During Compile):  Use @defmac
+       instead of @defspec on two macros (bug#47862).
+
+2021-05-05  Martin Rudalics  <rudalics@gmx.at>
+
+       Fix two GTK3 event handling issues
+
+       * src/xterm.c (handle_one_xevent): For GTK3 PropertyNotify and
+       MapNotify events explicitly request the stored frame sizes when
+       the frame changes from iconified to a non-hidden state
+       (Bug#24526).  For Expose events do not change the frame's
+       visibility or iconified state.  For FocusIn events on GTK3 do
+       not apply the fix for Bug#42655.  The latter two changes are to
+       avoid that plain invisible frames get reported as iconified.
+
+2021-05-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make the ELC+ELN lines line up with the other lines
+
+2021-05-05  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Add new defvoo nnimap-keepalive-intervals to Gnus nnimap servers
+
+       * lisp/gnus/nnimap.el (nnimap-keepalive-intervals): New per-server
+       config for customizing when keepalive commands are sent.
+       (nnimap-keepalive, nnimap-open-connection-1): Consult in these
+       places.  Additionally, use nnimap-streaming -> t when sending the
+       keepalive NOOP, so we don't wait for the response.
+       * doc/misc/gnus.texi (Customizing the IMAP Connection): Document.
+
+2021-05-04  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Remove unused lexical variables in cc-defs.el
+
+       * lisp/progmodes/cc-defs.el (c-sc-scan-lists-no-category+1+1)
+       (c-sc-scan-lists-no-category+1-1, c-sc-scan-lists-no-category-1+1)
+       (c-sc-scan-lists-no-category-1-1): Remove unused lexical variable
+       'here' to pacify byte-compilation warnings in cc-engine.el.
+
+2021-05-04  Andrea Corallo  <akrl@sdf.org>
+
+       Do not try to load unexistent eln file if async compilation was skipped
+
+       * lisp/emacs-lisp/comp.el (comp-run-async-workers): Don't try to
+       load if the eln file was not produced.
+
+2021-05-04  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix infloop in lsp-mode
+
+       * src/indent.c (line_number_display_width): Make sure the selected
+       window's buffer is current before using display code on it:
+       redisplay assumes that the window's buffer is current at all
+       times.  Reported by Evgeny Kurnevsky via lsp-mode's issue 1621,
+       https://github.com/emacs-lsp/lsp-mode/issues/1621.
+
+2021-05-04  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       40228fffd7 (origin/emacs-27) Fix code for newline-and-indent in skele...
+       56c4c8ef32 * lisp/jka-compr.el (jka-compr-uninstall): Fix function re...
+
+2021-05-04  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       101a049f55 Improve doc string of 'tab-width'.
+       43c154404e * lisp/emacs-lisp/elp.el: Doc fixes.
+       1984213f62 * lisp/emacs-lisp/pp.el: Doc fixes.
+       6486c9dc73 * admin/make-tarball.txt: Note to update more files on web...
+
+2021-05-04  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Remove as of recently unused GDK macro
+
+       Its only use was removed in the recent change of 2021-04-27 "Major
+       rewrite of adjust_frame_size", announced in the following thread:
+       https://lists.gnu.org/r/emacs-devel/2021-04/msg01162.html
+
+       * src/gtkutil.c [USE_GTK && !HAVE_GTK3] (gdk_window_get_geometry):
+       Remove unused macro to pacify -Wunused-macros build warning.
+
+2021-05-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix inconsistent behaviour in find-file-noselect when using nowarn
+
+       * lisp/files.el (after-find-file): Behave the same in when
+       warning/not warning (bug#47850).  This fixes this test case:
+       (switch-to-buffer (find-file-noselect "non-existing-dir/test.el" t))
+       which would leave the buffer read-only.
+
+2021-05-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow TAB to go to a key in EPA key buffers
+
+       * lisp/epa.el (epa--insert-keys): Allow TAB to go to the keys
+       (bug#47876).
+
+2021-05-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix doc marker for previous bookmark NEWS change
+
+2021-05-04  Boruch Baum  <boruch_baum@gmx.com>
+
+       Fontify lines when setting a bookmark
+
+       * lisp/bookmark.el (bookmark-fontify): New user option (bug#48179).
+       (bookmark-face): New face.
+       (bookmark--fontify, bookmark--unfontify): New functions.
+       (bookmark-set-internal, bookmark--jump-via, bookmark-delete): Use
+       them.
+
+2021-05-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Ensure updating the animated image in all windows
+
+       * lisp/image.el (image-show-frame): Simplify the window update --
+       pass in the buffer, which is a noop if the buffer isn't displayed.
+
+2021-05-04  Martin Rudalics  <rudalics@gmx.at>
+
+       Fix a problem with x_set_tab_bar_lines (Bug#46827)
+
+       * src/xfns.c (x_set_tab_bar_lines): Call
+       x_change_tab_bar_height only if the number of tab bar lines
+       changed from or to zero (Bug#46827).
+       * src/xterm.c (x_make_frame_visible): Make frame_size_history
+       update less noisy by doing it only if the frame wasn't visible
+       before.
+
+2021-05-03  Philip K  <philipk@posteo.net>
+
+       project--buffer-list: Avoid Tramp buffers when possible
+
+       * lisp/progmodes/project.el (project--buffer-list): Add
+       file-remote-p check.
+
+2021-05-03  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix unquoting of file names in subprocesses (Bug#48177)
+
+       * lisp/files.el (file-name-non-special):
+       Improve handling of inhibit-file-name-handlers.
+
+       * src/callproc.c (Fcall_process, call_process): Unquote infile,
+       error_file and output_file.  (Bug#48177)
+
+       * test/lisp/files-tests.el 
(files-tests-file-name-non-special--subprocess)
+       (files-tests-file-name-non-special-file-name-all-completions)
+       (files-tests-file-name-non-special-file-name-completion): Adapt tests.
+
+2021-05-03  Alan Third  <alan@idiocy.org>
+           martin rudalics  <rudalics@gmx.at>
+
+       Fix incorrect resizing behaviour on macOS (bug#48157, bug#48162)
+
+       * src/nsterm.m ([EmacsView viewDidResize:]): The drawing buffer can be
+       resized independently of Emacs's idea of the frame size.
+
+2021-05-03  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       ediff shouldn't alter the kill ring when copying a diff
+
+       * lisp/vc/ediff-util.el (ediff-copy-diff, ediff-pop-diff): Don't
+       alter the kill ring (bug#47881).
+
+2021-05-03  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Speed up animation of non-displayed buffers
+
+       * lisp/image.el (image-show-frame): Don't force an update if the
+       buffer with the animation isn't in a window (bug#47895).  Also
+       just update the window in question.
+
+2021-05-03  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Speed up animation of non-displayed images
+
+       * lisp/image.el (image-animate): Only compute the animation data
+       once -- this avoids recomputing the image on every iteration when
+       the image is not displayed (bug#47895).
+
+2021-05-03  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Note that function symbols are preferred in `add-hook'
+
+       * lisp/subr.el (add-hook): Note that FUNCTION should preferably be
+       a symbol (bug#47992).
+
+2021-05-03  Steve Purcell  <steve@sanityinc.com>
+
+       ruby-mode.el: puts and printf do not require args
+
+       * lisp/progmodes/ruby-mode.el (ruby-font-lock-keywords): puts and
+       printf can be called without arguments, so the font locking of
+       "bare" calls to either is incorrect.  The fix is to font-lock them
+       as for other kernel methods which accepts zero or more arguments
+       (bug#48180).
+
+2021-05-03  Lele Gaifax  <lele@metapensiero.it>
+
+       Align TUTORIAL.it to the English version
+
+       * etc/tutorials/TUTORIAL.it: Reference 'describe-command' to replicate
+       recent change.  Add also a space before '<Invio>' in several places,
+       mimicking the usage of <Return> in the English version (bug#48183).
+
+2021-05-02  Philipp Stephani  <phst@google.com>
+
+       Fix code for newline-and-indent in skeleton language.
+
+       The code for this is the symbol 'n', which is usually spelled as '\n'
+       here, not the character ?\n.
+
+       * doc/misc/autotype.texi (Skeleton Language): Fix item for
+       newline-and-indent.
+
+2021-05-02  Martin Rudalics  <rudalics@gmx.at>
+
+       Add two changes announced but not included in previous commit
+
+       * src/frame.c (adjust_frame_size): Remove extra
+       inhibit_horizontal/_vertical checks.  Improve the implied
+       resize check when INHIBIT equals 2.
+
+2021-05-02  Stefan Kangas  <stefan@marxist.se>
+
+       * etc/tutorials/TUTORIAL.sv: Adjust to latest change in TUTORIAL.
+
+       * etc/tutorials/TUTORIAL.es: Adjust to latest change in TUTORIAL.
+
+2021-05-02  Alan Mackenzie  <acm@muc.de>
+
+       * lisp/progmodes/cc-defs.el (c-save-buffer-state): Amend debug
+       spec, t to let*.
+
+       This should solve part of bug #48100.
+
+2021-05-02  Eli Zaretskii  <eliz@gnu.org>
+
+       * etc/tutorials/TUTORIAL.he: Adjust to latest change in TUTORIAL.
+
+2021-05-02  Stefan Kangas  <stefan@marxist.se>
+
+       Add new help command 'describe-command'
+
+       * lisp/help-fns.el (describe-command): New command.
+       (help-fns--describe-function-or-command-prompt): New helper
+       function to prompt for a function or function.  (Bug#46627)
+       (describe-function): Use above new helper function.
+
+       * lisp/help.el (help-map): Bind above new command to `C-h x'.
+       (help-for-help): Add this new command to the help summary.
+       * lisp/menu-bar.el (menu-bar-describe-menu): Add the new command to
+       the help menu.
+
+       * doc/emacs/help.texi (Help Summary, Name Help): Document
+       'describe-command', and update documentation on 'describe-function'.
+       * etc/tutorials/TUTORIAL: Change reference from 'describe-function' to
+       'describe-command'.
+
+2021-05-02  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/apropos.el (apropos-value, apropos-local-value): Tweak for 
lexbind
+
+       Don't skip symbols for the nowadays lexically scoped local vars.
+
+2021-05-02  Alan Third  <alan@idiocy.org>
+
+       Fix crash when resizing GNUstep builds
+
+       The toolkit can send far too many resize notifications, so be more
+       careful when we take action after receiving one.
+
+       * src/nsfns.m (ns_set_tool_bar_lines): Remove unneeded NSTRACE.
+       * src/nsterm.m ([EmacsView viewDidResize:]): Don't report resizes to
+       Emacs when the same change has already been reported and delayed.
+
+2021-05-02  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/help-macro.el: Doc fix.
+
+2021-05-02  Stefan Kangas  <stefan@marxist.se>
+
+       Bind S-SPC to scroll-down in help-for-help
+
+       * lisp/help-macro.el (make-help-screen): Bind S-SPC to
+       scroll-down.  Thanks to Dmitry Gutov <dgutov@yandex.ru>.
+
+2021-05-02  Stefan Kangas  <stefan@marxist.se>
+
+       Minor doc fixes in simple.el
+
+       * lisp/simple.el (next-error-move-function)
+       (next-error-found-function, next-error-found)
+       (previous-error-no-select, eval-expression-get-print-arguments)
+       (undo-adjust-elt, undo-adjust-beg-end): Minor doc fixes.
+
+2021-05-02  Nikolay Kudryavtsev  <nikolay.kudryavtsev@gmail.com>
+
+       Don't use pdumper-stats with unexec
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-refresh-preloaded): Check if
+       pdumper-stats is bound before using it.
+
+2021-05-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Inhibit lines in doc-view-mode
+
+       * lisp/doc-view.el (doc-view-mode): Inhibit line number modes
+       (bug#47974).  Change suggested by Gregory Heytings.
+
+2021-05-02  Eric Skoglund  <eric@pagefault.se>
+
+       Add newline and tab matching documentation to query-replace-regexp
+
+       * lisp/replace.el: Add \n and \t matching information to
+       query-replace-regexp docstring (bug#47981).
+
+2021-05-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak filtering some more
+
+       This should get the ./temacs continuation lines right.
+
+2021-05-02  Martin Rudalics  <rudalics@gmx.at>
+
+       Make adjust_frame_size set up frame's new_width/_height too (Bug#17120)
+
+       The purpose of this change is to have implied frame size changes
+       pick up sizes requested by previous explicit size changes not
+       only after they have been confirmed by the WM but already when
+       they are initially passed to adjust_frame_size (Bug#17120).
+
+       * src/dispextern.h (delayed_size_change): Remove extern.
+       * src/dispnew.c (delayed_size_change): Make static again.
+       (do_pending_window_change): Call change_frame_size only if F's
+       new_size_p flag is set.
+       (change_frame_size_1): Set/reset F's new_size_p flag
+       * src/frame.c (adjust_frame_size): Remove extra
+       inhibit_horizontal/_vertical checks.  Improve the implied
+       resizes check with INHIBIT equals 2.  Set F's new_width and
+       new_height and reset F's new_size_p flag when we run
+       set_window_size_hook with INHIBIT 0 or 1.
+       * src/frame.h (struct frame): New bit slot new_size_p.
+       * src/gtkutil.c (xg_frame_resized): Use F's new_size_p flag
+       instead of delayed_size_change to decide whether to call
+       change_frame_size.
+       (xg_frame_set_char_size): Call frame_size_history_extra before
+       waiting for the ConfigureNotify event.
+       * src/xterm.c (handle_one_xevent): Use F's new_size_p flag
+       instead of delayed_size_change to decide whether to call
+       change_frame_size.
+
+2021-05-02  Boruch Baum  <boruch_baum@gmx.com>
+
+       Suppress false positives in apropos-value
+
+       * lisp/apropos.el (apropos-value): Skip more apropos-internal
+       variables (bug#48063).
+       (apropos-value-internal): Skip the first value in the history
+       values, which always contains the match.
+
+2021-05-02  Philipp Stephani  <phst@google.com>
+
+       * lisp/jka-compr.el (jka-compr-uninstall): Fix function reference.
+
+2021-05-01  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/simple.el (newline): Make the hook function remove itself
+
+       (copy-region-as-kill, kill-ring-save): Simplify interactive spec.
+
+2021-05-01  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/minibuffer.el (completing-read-default): Fix bug#45474
+
+       Set `minibuffer-completion-*` variables buffer-locally instead of using
+       a global let-binding.  This should also help make completion work
+       correctly when multiple minibuffers are simultaneously active.
+
+2021-05-01  Alan Third  <alan@idiocy.org>
+
+       Fix infinite loop on GNUstep when toolbar updated
+
+       * src/nsterm.m ([EmacsView viewDidResize:]): Use Emacs's existing
+       knowledge of the frame size to decide whether to resize or not.
+
+2021-05-01  Alan Third  <alan@idiocy.org>
+
+       Fix NS build warnings
+
+       * src/nsfns.m (Fx_create_frame): Remove unused variables.
+
+2021-05-01  Jim Porter  <jporterbugs@gmail.com>
+
+       Fix GUD overlay arrows in gdb-mi when debugging over Tramp
+
+       * lisp/progmodes/gdb-mi.el (gdb-frame-handler): Use local part of
+       file name when setting `gud-last-frame'.
+
+2021-04-30  Stefan Kangas  <stefan@marxist.se>
+
+       Advertise PgUp/PgDn instead of SPC/DEL in help-for-help
+
+       * lisp/help-macro.el (make-help-screen):
+       * lisp/help.el (help-for-help): Advertise PgUp/PgDn instead of
+       SPC/DEL.
+
+2021-04-30  Mattias Engdegård  <mattiase@acm.org>
+
+       Don't signal scan-error in interactive sexp-based commands
+
+       This takes care of unfinished business from df0f32f04850 (bug#43489).
+
+       * lisp/emacs-lisp/lisp.el (end-of-defun, mark-defun):
+       * lisp/reposition.el (reposition-window):
+       * lisp/simple.el (transpose-sexps): Convert nasty-looking scan-error
+       into a human-readable message.
+
+2021-04-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix the unexec build on MS-Windows
+
+       * src/buffer.c (init_buffer) [USE_MMAP_FOR_BUFFERS]: If dumped
+       with unexec, be sure to map new memory also for the " prin1"
+       buffer.  For the reasons and discussion, see
+       https://lists.gnu.org/archive/html/emacs-devel/2021-04/msg01401.html.
+
+2021-04-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve doc string of 'tab-width'.
+
+       * src/buffer.c (syms_of_buffer) <tab-width>: Clarify doc string.
+       (Bug#48058)
+
+2021-04-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Alter `gnus-article-show-images' to re-display with images installed
+
+       * lisp/gnus/gnus-art.el (gnus-article-show-images): Reselect to
+       display HTML images.
+
+2021-04-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve support for 'display-line-numbers-width-start'
+
+       * lisp/display-line-numbers.el (display-line-numbers-width-start):
+       Allow the value to be a number.  (Bug#48095)
+       (display-line-numbers-mode): Handle
+       'display-line-numbers-width-start' whose value is a number.
+
+2021-04-30  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/doc.c (Fsnarf_documentation): Fix bug#48019
+
+       Don't presume that `custom-delayed-init-variables` holds a list.
+
+2021-04-30  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/mail/supercite.el (sc-select-attribution): Fix lexical conversion
+
+       Mark `citation` and `attribution` as dynamically scoped around
+       `sc-attribs-postselect-hook`, as documented in the function's docstring.
+
+2021-04-29  Andrea Corallo  <akrl@sdf.org>
+
+       Improve `comp-normalize-valset' reproducibility (bug#48021)
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-normalize-valset): Make
+       it more reproducible.
+
+2021-04-29  Glenn Morris  <rgm@gnu.org>
+
+       Automatically generate texinfo.el internal autoloads
+
+       * lisp/textmodes/texinfo.el: Replace manual autoloads.
+       * lisp/textmodes/makeinfo.el (makeinfo-region, makeinfo-buffer)
+       (makeinfo-recenter-compilation-buffer):
+       * lisp/textmodes/texnfo-upd.el (texinfo-make-menu)
+       (texinfo-all-menus-update, texinfo-start-menu-description)
+       (texinfo-indent-menu-description, texinfo-master-menu)
+       (texinfo-update-node, texinfo-every-node-update)
+       (texinfo-sequential-node-update, texinfo-insert-node-lines)
+       (texinfo-multiple-files-update):
+       Add autoload cookies, and set generated-autoload-file.
+
+2021-04-29  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/emacs-lisp/elp.el: Doc fixes.
+
+2021-04-29  Michael Albinus  <michael.albinus@gmx.de>
+
+       Some Tramp corrections, Bug#48067
+
+       * doc/misc/tramp.texi (Frequently Asked Questions): Rephrase GNU
+       ELPA warnings.
+
+       * lisp/net/tramp-sh.el (tramp-sh-gio-monitor-process-filter):
+       Improve handling of gio warning.  (Bug#48067)
+
+2021-04-29  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/emacs-lisp/pp.el: Doc fixes.
+
+       * lisp/emacs-lisp/shortdoc.el: Doc fixes.
+
+2021-04-29  Dmitry Gutov  <dgutov@yandex.ru>
+
+       * lisp/progmodes/project.el: Also bump version.
+
+       * lisp/progmodes/xref.el: Bump version.
+
+2021-04-28  Juri Linkov  <juri@linkov.net>
+
+       * lisp/window.el (window--state-put-2): Set next/prev-buffers even to 
nil.
+
+       When next-buffers or prev-buffers are nil, still use 
set-window-next-buffers
+       or set-window-prev-buffers to set next/prev-buffers to nil.  (Bug#46904)
+
+2021-04-28  Andrea Corallo  <akrl@sdf.org>
+
+       Add a note related to native compilation and Dynamic Binding
+
+       * doc/lispref/variables.texi (Dynamic Binding): Add a note
+       related to native compilation.
+
+2021-04-28  Michael Albinus  <michael.albinus@gmx.de>
+
+       Tramp code cleanup
+
+       * lisp/net/tramp-archive.el (tramp-archive-handle-insert-file-contents):
+       Code cleanup.
+
+       * lisp/net/tramp.el: Reload `tramp-compat' when we reload
+       `tramp-autoloads'.
+       (with-tramp-file-property, with-tramp-connection-property):
+       Use `tramp-cache-undefined'.
+       (tramp-autoload-file-name-handler): Do not load tramp-compat.el.
+       (tramp-handle-insert-file-contents): Code cleanup.
+
+2021-04-28  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix gio warning in Tramp
+
+       * lisp/net/tramp-sh.el (tramp-sh-gio-monitor-process-filter):
+       Improve handling of gio warning.  (Bug#48067)
+
+2021-04-28  Eli Zaretskii  <eliz@gnu.org>
+
+       Doc fixes in avl-tree.el
+
+       * lisp/emacs-lisp/avl-tree.el (avl-tree--root)
+       (avl-tree--dir-to-sign, avl-tree--sign-to-dir)
+       (avl-tree--del-balance, avl-tree--enter-balance)
+       (avl-tree--do-copy, avl-tree--stack-repopulate, avl-tree-empty)
+       (avl-tree-delete, avl-tree-member, avl-tree-member-p)
+       (avl-tree-map, avl-tree-mapc, avl-tree-mapf, avl-tree-mapcar)
+       (avl-tree-copy, avl-tree-clear, avl-tree-stack)
+       (avl-tree-stack-first): Fix doc strings to be less verbose and to
+       have the first line a complete sentence.
+
+2021-04-28  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/emacs-lisp/avl-tree.el: Minor doc fixes.
+
+       * admin/make-tarball.txt: Note to update more files on web page.
+
+2021-04-28  Michael Albinus  <michael.albinus@gmx.de>
+
+       Improve add-log-current-defun-header-regexp
+
+       * lisp/vc/add-log.el (add-log-current-defun-header-regexp):
+       Allow digits.  Require at least one letter.  (Bug#48037)
+
+2021-04-28  Peter Oliver  <p.d.oliver@mavit.org.uk>
+
+       Add tests
+
+       * test/lisp/progmodes/ruby-mode-tests.el (ruby-with-temp-file): New 
helper.
+       (ruby--set-encoding-when-ascii, ruby--set-encoding-when-utf8)
+       (ruby--set-encoding-when-latin-15): Tests for the previous commit 
(bug#48043).
+
+2021-04-28  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Don't add magic comment to Ruby files for utf-8 encoding
+
+       * lisp/progmodes/ruby-mode.el (ruby-encoding-map):
+       Add entry for utf-8 (bug#48043).
+       (ruby--detect-encoding): Don't convert to string too early, so
+       that returning nil is meaningful.
+       (ruby-mode-set-encoding): Convert to string here.
+
+2021-04-27  Andrea Corallo  <akrl@sdf.org>
+
+       Clean-up temporary eln test-suite directory when exiting (bug#48060)
+
+       * lisp/startup.el (normal-top-level): Remove eln test-suite temp
+       dir when exiting.
+
+2021-04-27  Andrea Corallo  <akrl@sdf.org>
+
+       Have `comp-cstr-intersection-no-mem' intersect pos neg value sets
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr-intersection-no-mem):
+       intersect pos and neg value sets
+       * test/lisp/emacs-lisp/comp-cstr-tests.el
+       (comp-cstr-typespec-tests-alist): Add two tests and fix some
+       test number.
+
+2021-04-27  Stefan Kangas  <stefan@marxist.se>
+
+       Avoid missing whitespace in help-for-help
+
+       * lisp/help.el (help--for-help-make-commands): Avoid missing
+       whitespace before description of command.
+       Problem reported by Dmitry Gutov <dgutov@yandex.ru>.
+
+2021-04-27  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix loading problem in Tramp
+
+       * lisp/net/tramp.el (tramp-autoload-file-name-handler): Load also
+       tramp-compat.el.
+
+2021-04-27  Daniel Mendler  <mail@daniel-mendler.de>
+
+       (affixation-function): Allow only three-element list elements
+
+       Restrict the definition of the `affixation-function`.  The function
+       must return a list of three element lists.  Since the
+       `affixation-function` is part of the widely used `completing-read` API
+       a simplification is helpful for both authors of completion UIs and
+       authors of completion tables.
+
+       * doc/lispref/minibuf.texi: Update documentation.
+       * lisp/minibuffer.el: Update documentation.
+       * lisp/simple.el (read-extended-command--affixation):
+       Return three-element lists.
+
+       https://lists.gnu.org/archive/html/emacs-devel/2021-04/msg01193.html
+
+2021-04-27  Mattias Engdegård  <mattiase@acm.org>
+
+       Calc: control digits after decimal point (bug#47302)
+
+       Calc normally displays a trailing decimal point for floats with no
+       fractional part, like '12.'. Some uses require at least one digit
+       after the point; add the governing variable calc-digit-after-point.
+
+       * lisp/calc/calc.el (calc-digit-after-point): New variable.
+       (math-format-number): Use it.
+       * test/lisp/calc/calc-tests.el (calc-display-digit-after-point):
+       New test.
+
+2021-04-27  Martin Rudalics  <rudalics@gmx.at>
+
+       Major rewrite of adjust_frame_size
+
+       Have adjust_frame_size pass native frame sizes to backends
+       instead of text sizes.  Expand frame size history management.
+       Drop PIXELWISE argument from change_frame_size and convert
+       native to text sizes only when calling adjust_frame_size.  Use
+       convention in arguments that -1 instead of 0 means that no size
+       change is required.  When adjusting frame sizes pick up delayed
+       size changes (Bug#46827).
+
+       * lisp/frame.el (frame-notice-user-settings, make-frame): Don't
+       set frame size history.
+       (frame--size-history): Rewrite doc-string.  Handle new formats
+       of `frame-size-history' entries.
+       * src/dispextern.h (delayed_size_change): Extern it.
+       (change_frame_size): Drop last argument from extern.
+       * src/dispnew.c (delayed_size_change): Make it global.
+       (handle_window_change_signal): Reformat.  Drop last argument
+       from change_frame_size call.
+       (do_pending_window_change, init_display_interactive): Drop last
+       argument from change_frame_size call.
+       (change_frame_size_1): NEW_WIDTH and NEW_HEIGHT now specify
+       native sizes.  Drop last argument PIXELWISE.  Queue a change
+       when it either differs from F's current pixel sizes or F's
+       previously queued sizes.  Inject frame_size_history_extra call
+       when queuing.  Adopt convention that for queued sizes -1 means
+       that no size change is required.  Convert from native to text
+       sizes when calling adjust_frame_size.
+       (change_frame_size): Drop last argument PIXELWISE and drop it
+       also in change_frame_size_1 calls.
+       * src/frame.c (frame_size_history_add): Remove.
+       (frame_inhibit_resize): Remove call to frame_size_history_add.
+       (set_menu_bar_lines, set_tab_bar_lines): Simplify.  Drop last
+       argument from change_frame_size call.
+       (frame_windows_min_size): No more static.
+       (keep_ratio): Minor rewrite using macros.
+       (frame_size_history_adjust, frame_size_history_plain)
+       (frame_size_history_extra): New functions.
+       (adjust_frame_size): Major rewrite.  Adopt new convention that
+       negative values for new sizes mean no change.  Pick up delayed
+       size changes from F's new_width and new_height slots
+       (Bug#46827).  Call set_window_size_hook with native instead of
+       text sizes.  Do not sanitize window sizes any more.  Call
+       frame_size_history_adjust instead of frame_size_history_add.
+       Always set F's resized_p slot to true.
+       (make_frame): Initialize new_width and new_height slots to -1.
+       Simplify setup of initial sizes and an adjust_frame_size call.
+       (Fframe_parameters): Drop processing F's new_pixelwise slot.
+       (check_frame_pixels): Reorder to make declarations appear first.
+       (Fset_frame_height, Fset_frame_width, Fset_frame_size): Pass
+       explicit width and height values to adjust_frame_size instead of
+       -1.
+       (gui_set_frame_parameters): Minor rewrite making sure that
+       explicit sizes and the corresponding parameter are passed to
+       adjust_frame_size.  Remove frame_size_history_add call.
+       (gui_figure_window_size): Drop last two arguments.  Simplify
+       assignment of initial size.  Set new_height and new_width slots
+       to -1.  Use adjust_frame_size to set sizes instead of returning
+       them to caller.
+       (syms_of_frame): Drop symbols used by frame size history; these
+       are now built on-the-fly.  Also drop some menu bar related
+       symbols in favor of Qmenu_bar_lines.
+       * src/frame.h (struct frame): Remove new_pixelwise.
+       (SET_FRAME_COLS, SET_FRAME_LINES, SET_FRAME_WIDTH)
+       (SET_FRAME_HEIGHT): Remove macros.
+       (frame_size_history_add): Remove externs.
+       (frame_windows_min_size, frame_size_history_plain)
+       (frame_size_history_extra): Add externs.
+       (FRAME_WINDOWS_WIDTH, FRAME_WINDOWS_HEIGHT): Rename to
+       FRAME_INNER_WIDTH and FRAME_INNER_HEIGHT.
+       (gui_figure_window_size): Drop last two arguments from
+       extern.
+       * src/gtkutil.c (xg_frame_resized): Rename arguments to WIDTH
+       and HEIGHT.  Consult delayed_size_change to handle case where
+       WIDTH and HEIGHT do not match F's new_width and new_height
+       values.  Call change_frame_size with native sizes and without
+       PIXELWISE argument.  Instead of frame_size_history_add call
+       frame_size_history_extra.
+       (xg_frame_set_char_size): WIDTH and HEIGHT are native sizes now;
+       fix adjust_frame_size call accordingly.  Instead of
+       frame_size_history_add call frame_size_history_extra.
+       (style_changed_cb): Call xg_frame_set_char_size with native
+       instead of text sizes.
+       (tb_size_cb): Remove frame_size_history_add call.  Call
+       adjust_frame_size with INHIBIT 5.
+       (free_frame_tool_bar, xg_change_toolbar_position): Remove
+       frame_size_history_add call.
+       (update_frame_tool_bar): Call adjust_frame_size with INHIBIT 2
+       and let it handle frame_inhibit_implied_resize and
+       fullheight/-width.  Remove frame_size_history_add call.
+       * src/keyboard.c (Fsuspend_emacs): Call change_frame_size with
+       native sizes.
+       * src/nsfns.m (ns_set_tool_bar_lines): Call adjust_frame_size
+       with INHIBIT 2 and let it handle frame_inhibit_implied_resize
+       and fullheight/-width.  Remove frame_size_history_add call.
+       (Fx_create_frame): Drop two last arguments in
+       gui_figure_window_size call.  Do not SET_FRAME_WIDTH and
+       SET_FRAME_HEIGHT, the adjust_frame_size in
+       gui_figure_window_size did that already.
+       * src/nsterm.m (ns_set_window_size): Drop PIXELWISE argument and
+       its processing; WIDTH and HEIGHT represent native pixel sizes
+       now.  Call change_frame_size with native sizes.  Remove call to
+       frame_size_history_add.
+       ([EmacsView viewDidResize:]): Call change_frame_size with native
+       sizes.
+       * src/term.c (Fresume_tty): Call change_frame_size with native
+       sizes.
+       * src/termhooks.h (*set_window_size_hook): Drop last argument
+       PIXELWISE.
+       * src/w32fns.c (w32_change_tab_bar_height)
+       (w32_change_tool_bar_height): Fix handling of these in the initial
+       phase before they have been resized at least once.
+       (Fx_create_frame, w32_create_tip_frame): Drop two last arguments
+       in gui_figure_window_size call.  Do not SET_FRAME_WIDTH and
+       SET_FRAME_HEIGHT (or SET_FRAME_COLS and SET_FRAME_LINES), the
+       adjust_frame_size in gui_figure_window_size did that already.
+       * src/w32inevt.c (resize_event, maybe_generate_resize_event):
+       Pass native sizes to change_frame_size.
+       * src/w32term.c (w32_read_socket): When WM_WINDOWPOSCHANGED pass
+       native sizes to change_frame_size.
+       (w32_new_font): Recalculate FRAME_TAB_BAR_HEIGHT.  Simplify
+       code.
+       (w32fullscreen_hook): Call change_frame_size with native sizes.
+       (w32_set_window_size): Drop argument PIXELWISE and its
+       processing; WIDTH and HEIGHT are native sizes now.  Remove
+       frame_size_history_add calls.  Pass native sizes to
+       change_frame_size.
+       * src/widget.c (set_frame_size): Set width and height of widget
+       directly.  Call frame_size_history_plain instead of
+       frame_size_history_add.
+       (update_from_various_frame_slots): Call
+       frame_size_history_extra.
+       (EmacsFrameRealize): Call frame_size_history_plain.
+       (EmacsFrameResize): Call change_frame_size with native sizes.
+       Call frame_size_history_extra instead of frame_size_history_add.
+       (EmacsFrameSetCharSize): Call frame_size_history_extra.  Drop
+       PIXELWISE argument in x_set_window_size call and specify pixels.
+       (pixel_to_text_size): Remove function.
+       * src/xdisp.c (resize_mini_window): Replace FRAME_WINDOWS_HEIGHT
+       with FRAME_INNER_HEIGHT.
+       (redisplay_tab_bar): Don't set tab_bar_redisplayed when we did
+       not redisplay it.
+       (redisplay_tool_bar): Don't call it for external tool bar.
+       Don't set tool_bar_redisplayed when we did not redisplay it.
+       (redisplay_window): When the tool bar is external call
+       update_frame_tool_bar directly.
+       * src/xfns.c (x_set_menu_bar_lines): Call adjust_frame_size only
+       if number of menu bar lines changed and fix 6th argument.
+       (x_change_tab_bar_height, x_change_tool_bar_height): Fix
+       handling of these in the initial phase before they have been
+       resized at least once.
+       (Fx_create_frame, x_create_tip_frame): Drop two last arguments
+       in gui_figure_window_size call.  Do not SET_FRAME_WIDTH and
+       SET_FRAME_HEIGHT (or SET_FRAME_COLS and SET_FRAME_LINES), the
+       adjust_frame_size in gui_figure_window_size did that already.
+       * src/xmenu.c (update_frame_menubar): Fix 6th arg of
+       adjust_frame_size call.
+       (free_frame_menubar): For Motif frames fix fullscreen and
+       `frame-inhibit-implied-resize' handling.  Fix 6th arg of
+       adjust_frame_size calls.
+       * src/xterm.c (x_net_wm_state): Remove call to
+       frame_size_history_add.
+       (handle_one_xevent): For PropertyNotify and UnmapNotify events
+       add frame_size_history_plain calls.  For MapNotify and
+       ConfigureNotify events add a frame_size_history_extra call.  For
+       ConfigureNotify events also handle delayed size changes and call
+       change_frame_size with native sizes.
+       (x_new_font): Recalculate FRAME_TAB_BAR_HEIGHT.  Simplify code.
+       (x_handle_net_wm_state): Remove frame_size_history_add call.
+       (x_check_fullscreen): Remove frame_size_history_add call.  Call
+       change_frame_size with native height.
+       (x_set_window_size_1): WIDTH and HEIGHT are now native.  Remove
+       some frame_size_history_add calls and add frame_size_history_extra
+       calls instead.  If the frame is not visible call adjust_frame_size
+       directly instead of calling change_frame_size.
+       (x_set_window_size): Drop PIXELWISE argument.  WIDTH and HEIGHT
+       represent native sizes now.
+       (x_make_frame_visible, x_make_frame_invisible): Call
+       frame_size_history_plain.
+       * src/xterm.h (x_set_window_size): Drop last argument from
+       extern declaration.
+
+2021-04-27  Glenn Morris  <rgm@gnu.org>
+
+       Doc fixes for comp.el
+
+       * lisp/emacs-lisp/comp.el (comp-deferred-compilation-deny-list)
+       (comp-bootstrap-deny-list, comp-pred-to-cstr, make-comp-mvar)
+       (comp-mvar-used-p, comp-async-compilation): Doc fixes.
+
+2021-04-27  Glenn Morris  <rgm@gnu.org>
+
+       Fix some custom types in comp.el
+
+       * lisp/emacs-lisp/comp.el (comp-deferred-compilation-deny-list)
+       (comp-bootstrap-deny-list, comp-never-optimize-functions)
+       (comp-async-env-modifier-form, comp-native-driver-options):
+       Fix :type (`list' on its own isn't even a valid type).
+
+2021-04-27  Amin Bandali  <bandali@gnu.org>
+
+       * lisp/erc/erc.el: Add past maintainer Michael Olson to Contributors.
+
+2021-04-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix compilation warnings in non-toolkit builds
+
+       * src/xterm.c (x_create_toolkit_scroll_bar)
+       (x_create_horizontal_toolkit_scroll_bar): String constants for
+       XtSetArg are defined as const strings (in
+       /usr/include/X11/Xaw3d/ThreeD.h, for instance), but the argument
+       in XtSetArg is defined as either a const char* or a regular char*
+       in /usr/include/X11/Intrinsic.h.  Cast the argument to String
+       (which should be correct on all platforms, hopefully) to avoid a
+       compilation warning (bug#47452).
+
+2021-04-27  Stefan Kangas  <stefan@marxist.se>
+
+       Rename abnormal hook to comp-async-cu-done-functions
+
+       * lisp/emacs-lisp/comp.el (comp-async-cu-done-functions): Rename
+       from 'comp-async-cu-done-hook' to reflect that it is an abnormal
+       hook.  Doc fix and update single caller.
+
+2021-04-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix failing subr test
+
+       * test/lisp/subr-tests.el (subr-tests-bug22027): Fix mocked
+       signature of `read-string' (bug#48022).
+
+2021-04-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix failing auth-source test
+
+       * test/lisp/auth-source-tests.el
+       (auth-source-test-secrets-create-secret): Fix test failing because
+       the mocked `read-string' had the wrong interface.
+
+2021-04-27  Adam Sjøgren  <asjo@koldfront.dk>
+
+       Ensure that we get an X-Draft-From headers
+
+       * lisp/gnus/gnus-msg.el (gnus-setup-message): Ensure that we get an
+       X-Draft-From headers (bug#48049).
+
+2021-04-27  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/package.el: Fix use of `find-library-name`
+
+       That function caused a warning for a good reason.
+       Don't just declare it and hope it will be available.
+
+       (package--list-of-conflicts): Require `find-func` explicitly before
+       declaring the function.  Also don't ignore all errors but only
+       the `file-error`s which will be emitted by `find-library-name`
+       in normal circumstances.
+
+       * lisp/emacs-lisp/find-func.el (find-library-name): Signal a 
`file-error`
+       Instead of a generic `error`.
+
+2021-04-26  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-ctxt): Initialize it.
+
+2021-04-26  Andrea Corallo  <akrl@sdf.org>
+
+       Rework where `comp-ctxt' is defined.
+
+       * test/lisp/emacs-lisp/comp-cstr-tests.el (comp-ctxt): Remove
+       `comp-ctxt' definition.
+       * lisp/emacs-lisp/comp.el (comp-ctxt): Likewise.
+       * lisp/emacs-lisp/comp-cstr.el (comp-ctxt): Define it here.
+
+2021-04-26  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el: Make it loadable in vanilla builds 
(bug#48021).
+
+       * lisp/emacs-lisp/comp.el (comp-known-type-specifiers): Fix 
string-search.
+
+2021-04-26  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Small tweaks to gnus-registry reindexing messaging
+
+       * lisp/gnus/gnus-registry.el (gnus-registry-fixup-registry): Use
+       `seq-set-equal-p' so we don't care about list element ordering.  Don't
+       show messages within `registry-reindex' if we aren't at gnus-verbose
+       level 9.
+
+2021-04-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix previous emake adjustment
+
+2021-04-26  Andrea Corallo  <akrl@sdf.org>
+
+       Make use of `ert-resource-file' `ert-resource-directory' in comp-tests
+
+       * test/src/comp-resources/comp-test-pure.el: Rename.
+       * test/src/comp-resources/comp-test-funcs.el: Likewise.
+       * test/src/comp-resources/comp-test-funcs-dyn.el: Likewise.
+       * test/src/comp-resources/comp-test-45603.el: Likewise.
+       * test/src/comp-tests.el (comp-test-src, comp-test-dyn-src): Use
+       `ert-resource-file'.
+       (comp-tests-bootstrap): Use ert-resource-directory.
+       (comp-tests-45603-1, comp-tests-pure): Use `ert-resource-file'.
+
+2021-04-26  Andrea Corallo  <akrl@sdf.org>
+
+       Use `expand-file-name' in place of `concat' in comp-tests.el
+
+       * test/src/comp-tests.el (comp-test-src,
+       comp-test-dyn-src) (comp-tests-bootstrap, comp-tests-pure,
+       comp-test-src): Use `expand-file-name' in place of `concat'.
+
+2021-04-26  Andrea Corallo  <akrl@sdf.org>
+
+       Move native compiler test data into proper directory (bug#48031)
+
+       * test/src/comp-tests-resources/comp-test-45603.el: Rename.
+       * test/src/comp-tests-resources/comp-test-funcs-dyn.el: Likewise.
+       * test/src/comp-tests-resources/comp-test-funcs.el: Likewise.
+       * test/src/comp-tests-resources/comp-test-pure.el: Likewise.
+       * test/src/comp-tests.el (comp-test-directory): Update.
+
+2021-04-26  Andrea Corallo  <akrl@sdf.org>
+
+       * test/src/comp-tests.el: Fix it for non native compiled build 
(bug#48031).
+
+2021-04-26  Andrea Corallo  <akrl@sdf.org>
+
+       Fix comp-cstr tests for vanilla build (bug#48021)
+
+       * test/lisp/emacs-lisp/comp-cstr-tests.el (comp-ctxt): Fix tests
+       for vanilla build (bug#48021)
+
+2021-04-26  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (comp-accept-and-process-async-output): Fix 
regexp.
+
+2021-04-26  Michael Albinus  <michael.albinus@gmx.de>
+
+       Some rearrangement in gitlab-ci.yml
+
+       * test/infra/gitlab-ci.yml (test-filenotify-gio, test-gnustep):
+       Add 'needs:' clause.
+       (build-native-bootstrap-speed0, build-native-bootstrap-speed1)
+       (build-native-bootstrap-speed2): Rename from 'test-*'.  Do not use
+       '--without-makeinfo'.
+
+2021-04-26  Dario Gjorgjevski  <dario.gjorgjevski+git@gmail.com>
+
+       Fix typo in tramp-get-remote-gid
+
+       * lisp/net/tramp.el (tramp-get-remote-gid): Pass the correct
+       operation to find-file-name-handler.  (Bug#48026)
+
+2021-04-26  Stefan Kangas  <stefan@marxist.se>
+
+       * src/editfns.c (Fpropertize): Doc fix; reference Info manual.
+
+2021-04-25  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/url/url-proxy.el (url-find-proxy-for-url): Minor simplification
+
+2021-04-25  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/startup.el (comp-eln-load-path): Silence a warning.
+
+2021-04-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Hack around problems in Turkish environments in url-proxy
+
+       * lisp/url/url-proxy.el (url-find-proxy-for-url): Work around a
+       problem in Turkish language environments (where a downcased I is
+       ?ı (bug#44604).
+
+2021-04-25  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/emacs-lisp/comp.el (no-native-compile): Minor doc fixes.
+
+       * lisp/help-macro.el: Remove stale Change Log.
+
+2021-04-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Adjust regexp to extra native-comp lines
+
+2021-04-25  Andrea Corallo  <akrl@sdf.org>
+
+       Merge branch 'feature/native-comp' into into trunk
+
+2021-04-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert window/winner changes (Revert 0454bfd3313)
+
+       See bug#23621 for an explanation.
+
+2021-04-25  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: Get proper search limits in c-font-lock-cut-off-declarators
+
+       * lisp/progmodes/cc-fonts.el (c-font-lock-cut-off-declarators): Instead 
of
+       using a crude 2,000 characters back limit for backward searching, which 
is
+       erroneous when that point is in a literal, use the already calculated
+       c-determine-limit result.
+
+2021-04-25  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       7d5b973959 (origin/emacs-27) * doc/misc/cl.texi (For Clauses): Minor ...
+       4570781f8d ; * doc/lispref/files.texi (Directory Names): Add missing ...
+       1b52fd538d Minor update for make-tarball.txt
+       8efb8491b2 * doc/misc/cl.texi (Iteration Clauses): fix `never' clause...
+       0873134682 ; Fix Texinfo in last change to minibuf.texi.
+       cad8913c89 Improve filling-related documentation
+       2b7eed23eb ; * doc/lispref/keymaps.texi (Easy Menu): Fix typo.
+       47fc92cefc Fix reference to "yanking" in the main Emacs manual
+       1789dcdb35 Improve documentation of 'map-y-or-n-p'
+
+2021-04-25  Stefan Kangas  <stefan@marxist.se>
+
+       Add more scroll key bindings to make-help-screen
+
+       * lisp/help-macro.el (make-help-screen): Add bindings to scroll on
+       <PageUp>, <PageDown>, <up>, <down>.
+
+2021-04-25  Gregory Heytings  <gregory@heytings.org>  (tiny change)
+
+       Fix the handling of the Delete key in help screens.
+
+       * lisp/help-macro.el (make-help-screen): Handle the Delete key
+       in help screens as in Emacs 23 and earlier.
+
+2021-04-25  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/ses.el: Doc fixes.
+
+2021-04-25  Stefan Kangas  <stefan@marxist.se>
+
+       Don't hard-code face of "Install" button
+
+       * lisp/emacs-lisp/package.el (package-make-button): Use the
+       'custom-button' face for the "Install" button.  (Bug#47944)
+
+2021-04-25  Stefan Kangas  <stefan@marxist.se>
+
+       Remove redundant #' before lambda in printing.el
+
+       * lisp/printing.el (pr-menu-create, pr-eval-setting-alist)
+       (pr-complete-alist, pr-file-list, pr-ps-file-list)
+       (pr-insert-section-1, pr-insert-section-2)
+       (pr-insert-section-4, pr-insert-section-5, pr-choice-alist)
+       Remove redundant #' before lambda.
+
+2021-04-25  Stefan Kangas  <stefan@marxist.se>
+
+       * src/keyboard.c (Flossage_size): Improve prompt.
+
+2021-04-25  Stefan Kangas  <stefan@marxist.se>
+
+       Show correct lossage size in help-for-help
+
+       * lisp/help.el (help-for-help): Show correct lossage size.  Add
+       trailing newline.
+       Suggested by Gregory Heytings <gregory@heytings.org>.
+
+2021-04-25  Štěpán Němec  <stepnem@gmail.com>
+
+       * doc/lispref/macros.texi (Eval During Expansion): Copy edit.
+
+2021-04-25  Daniel Mendler  <mail@daniel-mendler.de>
+
+       (completion-all-sorted-completions): Fix history use with boundaries
+
+       Preprocess the history (and the default) through the new function
+       `minibuffer--sort-preprocess-history` to filter out the completion
+       base for completion tables with boundaries (in particular the file
+       completion table).
+
+       * lisp/minibuffer.el (minibuffer--sort-preprocess-history_: New 
function.
+       (completion-all-sorted-completions): Use it.
+       * test/lisp/minibuffer-tests.el (completion-all-sorted-completions):
+       Add tests for various combinations of with/without history/base/default.
+
+2021-04-24  Juri Linkov  <juri@linkov.net>
+
+       * lisp/progmodes/project.el: Use project-prefixed-buffer-name in more 
places.
+
+       (project-shell, project-eshell): Use project-prefixed-buffer-name 
(bug#47975).
+       (project-compilation-buffer-name-function): Add :version tag.
+
+2021-04-24  Philipp Stephani  <phst@google.com>
+
+       * doc/misc/cl.texi (For Clauses): Minor copyedits.
+
+2021-04-24  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/mpc.el: Avoid (implicit) `eval`; prefer #' to quote function 
names
+
+       (mpc-format): Compose functions instead of constructing
+       source-code expressions at run time.
+       Rename `mpc-pred` property to `mpc--uptodate-p`.
+       (mpc-status-buffer-refresh): Adjust to the new property name.
+
+2021-04-24  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/svg.el: Fix typo in sample code; add minor optimization
+
+       (svg--elliptical-arc-command, svg--moveto-command)
+       (svg--lineto-command): Use `mapcan`.
+
+2021-04-24  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * doc/lispref/macros.texi (Eval During Expansion): Fix fixme
+
+2021-04-24  Glenn Morris  <rgm@gnu.org>
+
+       Simlify top-level Makefile since admin is always included
+
+       * Makefile.in (clean_dirs, distclean_dirs, maintainer_clean_dirs):
+       Add admin directories.
+       (clean, distclean, bootstrap-clean, maintainer-clean): Simplify.
+       (maybeclean_dirs): Remove - this dates to when admin/ was not
+       included in tar files.
+
+2021-04-24  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/help.el (help--for-help-make-sections): Fix typo.
+
+2021-04-24  Stefan Kangas  <stefan@marxist.se>
+
+       Redesign and improve the help-for-help (C-h C-h) command
+
+       * lisp/help.el (help-for-help): Redesign help screen; add sections,
+       rearrange and reword.
+       (help-for-help-header): New face.
+       (help--for-help-make-commands, help--for-help-make-sections): New
+       functions.
+       (help-for-help-buffer-name): New variable.
+
+       * lisp/help-macro.el (make-help-screen): New optional argument
+       BUFFER-NAME.  Fontify keys.
+
+       This change was discussed in:
+       https://lists.gnu.org/r/emacs-devel/2021-02/msg01695.html
+       https://lists.gnu.org/r/emacs-devel/2021-03/msg00670.html
+       https://lists.gnu.org/r/emacs-devel/2021-04/msg00292.html
+
+2021-04-24  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve detection of pdumper file and *.eln files
+
+       * src/emacs.c (load_pdump_find_executable): Resolve symlinks even
+       if argv[0] includes leading directories.  (Bug#46790)
+
+2021-04-24  Eli Zaretskii  <eliz@gnu.org>
+
+       Minor update for make-tarball.txt
+
+       * admin/make-tarball.txt (UPDATING THE EMACS WEB PAGES AFTER A
+       RELEASE): Update and enhance the section to make it easier to find
+       the banner and verify the updated pages are in place.
+
+2021-04-24  Jorge P. de Morais Neto  <jorge+git@disroot.org>  (tiny change)
+
+       * doc/misc/cl.texi (Iteration Clauses): fix `never' clause typo
+
+       This fixes bug#47962.
+
+2021-04-24  Eli Zaretskii  <eliz@gnu.org>
+
+       Obsolete the TAB binding in *xref* buffers
+
+       * doc/emacs/maintaining.texi (Xref Commands): Remove the
+       description of the TAB binding.  Enhance the description of the
+       RET binding.  (Bug#44611)
+
+       * etc/NEWS: Announce the obsolescence of TAB binding in XREF.
+
+       * lisp/progmodes/xref.el (xref-goto-xref): Improve doc string.
+
+2021-04-24  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/rot13.el: Improve documentation.  (Bug#47970)
+
+2021-04-24  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve diagnostics of loading *.eln files
+
+       * src/pdumper.c (dump_do_dump_relocation): Improve diagnostics
+       when loading preloaded *.eln files fails.  (Bug#46790)
+
+2021-04-24  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/subr.el (remove-hook): Improve last change
+
+       Don't put a `hook--depth-alist` property if there isn't one already.
+
+2021-04-24  Amin Bandali  <bandali@gnu.org>
+
+       Fix thinko introduced in the last ERC patch (bug#47788)
+
+       * lisp/erc/erc-backend.el (erc-open-network-stream): Need to use apply
+       to call open-network-stream with the supplied arguments because of the
+       plist p of arguments.  Thanks to neverwas for pointing it out.
+
+2021-04-23  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/files.el (minibuffer-with-setup-hook): Fix bug#46326
+
+2021-04-23  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/subr.el (add-hook): Try and fix bug#46326
+
+       Use `eq` indexing on `hook--depth-alist`.
+
+       (remove-hook): Remove old entries from `hook--depth-alist`.
+
+2021-04-23  Michael Albinus  <michael.albinus@gmx.de>
+
+       * lisp/net/tramp-cmds.el (tramp-recompile-elpa-command-completion-p):
+
+       Check, whether Tramp has a package description.
+
+2021-04-23  Juri Linkov  <juri@linkov.net>
+
+       * lisp/wdired.el (wdired--before-change-fn): Wrap body in 
save-match-data.
+
+       Suggested by Michael Heerdegen <michael_heerdegen@web.de> (bug#14013)
+
+2021-04-23  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix a recent change in minibuf.texi
+
+       * doc/lispref/minibuf.texi (Basic Completion)
+       (Programmed Completion): Improve wording, punctuation, and markup
+       of a recently-added text.
+
+2021-04-23  Stefan Kangas  <stefan@marxist.se>
+
+       * etc/NEWS: 'world-clock-mode' is no longer interactive.
+
+2021-04-23  Philipp Stephani  <phst@google.com>
+
+       Expand documentation on nontrivial completion boundaries.
+
+       The interplay between nontrivial completion boundaries and the other
+       completion functions is somewhat subtle, so it deserves a bit more
+       explanation.
+
+       * doc/lispref/minibuf.texi (Basic Completion)
+       (Programmed Completion): Add a few more remarks about nontrivial
+       completion boundaries.
+
+2021-04-23  Philipp Stephani  <phst@google.com>
+
+       Fix small bug in 'completion-table-subvert'.
+
+       Even for a trivial underlying completion table (where the 'boundaries'
+       action returns nil), we need to provide nontrivial boundaries so that
+       they match the behavior of 'all-completions'.
+
+       * lisp/minibuffer.el (completion-table-subvert): Return boundaries
+       even for trivial underlying completion table.
+       * test/lisp/minibuffer-tests.el (completion-table-subvert-test):
+       Amend unit test to also test boundaries.  While there, also test
+       the other completion functions.
+
+2021-04-23  Eli Zaretskii  <eliz@gnu.org>
+
+       Revert "Remove the binding for xref-quit-and-goto-xref"
+
+       This reverts commit 522c34f0e80f60969861b0dc34bc7105249f9994.
+
+       Making changes to which there was an explicit disagreement
+       and a long discussion is unacceptable.  (Bug#44611)
+
+2021-04-23  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Misc changes
+
+       * lisp/progmodes/project.el (project-shell, project-eshell):
+       Simplify.
+       (project-switch-commands, project-switch-use-entire-map):
+       Add :group keywords (to fix misattribution to project-vc).
+
+2021-04-23  Amin Bandali  <bandali@gnu.org>
+
+       Add support for using a TLS client certificate with 'erc-tls' 
(bug#47788)
+
+       * lisp/erc/erc-backend.el (erc-session-client-certificate): New
+       buffer-local variable storing the TLS client certificate used for the
+       current connection.
+       (erc-open-network-stream): Use open-network-stream instead of
+       make-network-process, and pass any additional arguments to it.
+       (erc-server-connect): Add an optional client-certificate argument
+       that if present is passed with the :client-certificate keyword as part
+       of the arguments to erc-server-connect-function.
+       * lisp/erc/erc.el (erc-open): Add new optional client-certificate
+       argument, set it as erc-session-client-certificate, and pass it along
+       to erc-server-connect.
+       (erc): Clarify documentation string with respect to the full-name
+       argument.
+       (erc-tls): Add new client-certificate keyword argument and pass it in
+       the direct call to erc-open (instead of going through erc).
+       (erc-open-tls-stream): Pass any additional arguments (such as
+       :client-certificate) to open-network-stream.  Also allow overriding
+       :nowait if desired.
+
+       * doc/misc/erc.texi: Add documentation for erc-tls, including the new
+       :client-certificate argument.
+
+       * etc/NEWS: Announce the change.
+
+2021-04-23  Ivan Sokolov  <ivan-p-sokolov@ya.ru>  (tiny change)
+
+       Introduce project-compilation-buffer-name-function
+
+       * lisp/progmodes/project.el (project-compilation-buffer-name-function):
+       New option.
+       (project-compile): Use it.
+       (project-prefixed-buffer-name): New function.
+
+2021-04-22  Dmitry Gutov  <dgutov@yandex.ru>
+
+       * lisp/progmodes/xref.el: Remove the "still experimental" note.
+
+2021-04-22  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Remove the binding for xref-quit-and-goto-xref
+
+       * lisp/progmodes/xref.el (xref--xref-buffer-mode-map):
+       Remove the binding for xref-quit-and-goto-xref (bug#44611).
+
+       * doc/emacs/maintaining.texi (Xref Commands): Update.
+
+2021-04-22  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/time.el (world-clock-mode): Make non-interactive.
+
+2021-04-22  Stefan Kangas  <stefan@marxist.se>
+
+       Minor improvements to world-clock
+
+       * lisp/time.el (world-clock-mode-map): New variable.  Bind 'n' and
+       'p' to 'next-line' and 'previous-line'.
+       (world-clock-update): Preserve point.
+
+2021-04-22  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix MS-Windows link switches for unexec
+
+       * configure.ac (LD_SWITCH_SYSTEM_TEMACS) [mingw32]: Disable ASLR
+       when linking for unexec.  Reported by Nikolay Kudryavtsev
+       <nikolay.kudryavtsev@gmail.com>.
+
+2021-04-22  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/progmodes/which-func.el: Doc fixes.
+
+2021-04-22  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Move part of the fix from project to xref
+
+       * lisp/progmodes/project.el (project--find-regexp-in-files):
+       Don't unquote file names here.
+
+       * lisp/progmodes/xref.el (xref-matches-in-files): Do it here.
+       And only if the first element in the list is quoted (bug#47799).
+
+2021-04-22  Philipp Stephani  <phst@google.com>
+
+       Ensure that argument to 'verify' is a constant expression.
+
+       Casting NULL is not a constant expression (Bug#47951).
+
+       * lib-src/seccomp-filter.c (main): Turn check for null pointer
+       representation into a runtime assertion.
+
+2021-04-22  Utkarsh Singh  <utkarsh190601@gmail.com>  (tiny change)
+
+       * lisp/window.el (display-buffer): Doc fix.  (Bug#47950)
+
+2021-04-22  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Fix unload+reload of files using `custom-initialize-delay` (bug#47072)
+
+       * lisp/custom.el (custom-initialize-delay): Don't delay if
+       `custom-delayed-init-variables` has already been processed.
+       * lisp/startup.el (command-line): Mark `custom-delayed-init-variables`
+       as processed.
+
+2021-04-22  Alan Mackenzie  <acm@muc.de>
+
+       Fix unclean "can't happen" error handling in read_minibuf_unwind
+
+       Also fix a bug where, with minibuffer-follows-selected-frame neither 
nil nor
+       t, a minibuffer could appear in two frames at the same time.
+
+       * src/window.c (Fset_window_configuration): Add a new &optional 
parameter
+       DONT-SET-MINIWINDOW, which inhibits the minibuffer from being restored 
from
+       the supplied window configuration.
+       (restore_window_configuration): Enhance to match the above.
+
+       * src/minibuf.c (read_minibuf): Enhance the argument list to the
+       restore_window_configuration calls to match the above.  In the main 
case,
+       restoring the minibuffer is inhibited.
+       (read_minibuf_unwind): Should the frame with the expired minibuffer not 
be
+       found ("can't happen"), unwind the stacked data nevertheless, rather 
than just
+       exiting.
+
+       * src/keyboard.c (read_char_help_form_unwind): Amend a call of
+       Fset_window_configuration.
+
+       * doc/lispref/windows.texi (Window Configurations): Document the new 
form of
+       set-window-configuration.
+
+       * etc/NEWS (Lisp Changes in Emacs 28.1): Amend the entry for
+       set-window-configuration.
+
+2021-04-22  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix Isearch hscrolling in a corner case
+
+       * lisp/isearch.el (isearch-update): When we start hscrolled,
+       consider also the case that point ends up being to the left of the
+       hscrolled window's edge.  (Bug#46316)
+
+2021-04-22  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix 'window-text-pixel-size' when there's after-string at EOB
+
+       * src/xdisp.c (move_it_to): Fix logic of reaching TO_CHARPOS when
+       there's a display or overlay string(s) at EOB.  (Bug#47860)
+
+2021-04-22  Andrea Corallo  <akrl@sdf.org>
+
+       Improve a native compiler test
+
+       * test/src/comp-tests.el (comp-test-47868-1): Improve
+       testcase.
+       * test/src/comp-resources/comp-test-funcs.el (comp-test-47868-3-f)
+       (comp-test-47868-4-f): New functions.
+
+2021-04-22  Stefan Kangas  <stefan@marxist.se>
+
+       Avoid lowering gc-cons-threshold
+
+       * lisp/cedet/semantic/wisent/comp.el (wisent--compile-grammar):
+       * 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.
+
+2021-04-22  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/strokes.el: Doc fix; update URL.
+
+2021-04-22  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Use khaki1 as 'match' background
+
+       * lisp/replace.el (match): Use khaki1 as the background color for
+       light backgrounds (bug#47574).
+
+2021-04-21  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/emacs-lisp/package.el (package-archives): Bump :version.
+
+       * lisp/emacs-lisp/package.el: Doc fix.
+
+2021-04-21  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (comp-imm-equal-test): Style fix.
+
+2021-04-21  Philip K  <philipk@posteo.net>
+
+       Make outline commands repeatable (bug#47878)
+
+       * lisp/outline.el (outline-navigation-repeat-map): Add new map.
+       (outline-editing-repeat-map): Add new map.
+
+2021-04-21  Mattias Engdegård  <mattiase@acm.org>
+
+       Don't erroneously declare `mark` as error-free
+
+       * lisp/emacs-lisp/byte-opt.el (side-effect-free-fns)
+       (side-effect-and-error-free-fns):
+       `mark` is side-effect-free but not error-free.
+
+2021-04-21  Juri Linkov  <juri@linkov.net>
+
+       * lisp/isearch.el (isearch-forward-thing-at-point): New command 
(bug#39512).
+
+       (search-map): Bind "M-s M-." to isearch-forward-thing-at-point.
+       (isearch-forward-thing-at-point): New defcustom.
+
+2021-04-21  Juri Linkov  <juri@linkov.net>
+
+       * lisp/thingatpt.el (region): Put property bounds-of-thing-at-point, 
bug#39512
+
+2021-04-21  Philipp Stephani  <phst@google.com>
+
+       Remove a self-reference from the Emacs Lisp manual.
+
+       * doc/lispref/minibuf.texi (Programmed Completion): Remove
+       self-reference.
+
+2021-04-21  Stefan Kangas  <stefan@marxist.se>
+
+       Improve error message for missing Info manual
+
+       * lisp/info.el (Info-find-file): Improve error message for missing
+       Info manual.  (Bug#46236)
+       Fix suggested by Eli Zaretskii <eliz@gnu.org>.
+
+2021-04-21  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (batch-byte-native-compile-for-bootstrap): 
Fix typo.
+
+2021-04-21  Andrea Corallo  <akrl@sdf.org>
+
+       Fix native compiler string hash consing strategy (bug#47868)
+
+       * test/src/comp-tests.el (comp-test-47868-1): Add new test.
+       * test/src/comp-resources/comp-test-funcs.el (comp-test-47868-1-f)
+       (comp-test-47868-2-f): New functions.
+       * lisp/emacs-lisp/comp.el (comp-imm-equal-test): Define new hash
+       tanble test.
+       (comp-data-container): Use it.
+       (comp-final, comp-run-async-workers): have comp required before
+       reading dumped hashes so that `comp-imm-equal-test' is defined.
+
+2021-04-21  Andrea Corallo  <akrl@sdf.org>
+
+       Introduce `sxhash-equal-including-properties'.
+
+       * src/fns.c (collect_interval): Move it upwards.
+       (Fsxhash_equal_including_properties): New function.
+       (syms_of_fns): Register `sxhash-equal-including-properties'.
+       * etc/NEWS: Add 'sxhash-equal-including-properties'.
+
+2021-04-21  Philip K  <philipk@posteo.net>
+
+       sgml-mode: Only set sgml-xml-mode if guessed to be an XML file
+
+       * lisp/textmodes/sgml-mode.el (sgml-mode): Don't override
+       sgml-xml-mode if the result of the guess is used as the buffer local
+       value.  (Bug#47877)
+
+2021-04-21  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/easy-mmode.el (define-minor-mode): Fix bug#47925
+
+       In order to correctly detect the case of the "new style" with an empty 
body,
+       remove the old optional arguments `init-value`, `lighter`, and `keymap`,
+       so we can distinguish the "nil arg" from the "absent arg" cases.
+
+2021-04-20  Harald Jörg  <haj@posteo.de>
+
+       cperl-mode: Avoid abbrev expansion in variable names
+
+       * lisp/progmodes/cperl-mode.el (cperl-electric-else): Don't expand
+       scalar variables like '$continue' as keywords.  (Bug#47902)
+       * test/lisp/progmodes/cperl-mode-tests.el
+       (cperl-test-hyperactive-electric-else): Verify that keywords are
+       expanded but variable names aren't.
+
+2021-04-20  Juri Linkov  <juri@linkov.net>
+
+       * lisp/wdired.el (wdired--self-insert): Put symbol property 
delete-selection.
+
+       * lisp/isearch.el (isearch-post-command-hook): Revert ff796823e5 
(bug#47894).
+
+2021-04-20  Jonas Bernoulli  <jonas@bernoul.li>
+
+       Add new library transient.el
+
+       * lisp/transient.el: New file.
+
+2021-04-20  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix Rmail-MIME size estimations
+
+       The quoted-printable estimation was obviously wrong: the size becomes
+       smaller when decoded, not larger...
+       * lisp/mail/rmailmm.el (rmail-mime-set-bulk-data): Fix estimations
+       of decoded MIME attachment.
+
+2021-04-20  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/minibuf.c (Fread_no_blanks_input): Move to `minibuffer.el`
+
+       * src/keymap.c (syms_of_keymap):
+       * lisp/minibuffer.el (minibuffer-local-ns-map): Move declaration
+       to initialization.
+       (read-no-blanks-input): Move from `minibuf.c`.
+
+2021-04-20  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/minibuffer.el (minibuffer-mode-map): Make it an alias
+
+       Avoid creating this "dummy" keymap by making it an alias of
+       the parent keymap of all minibuffer keymaps.
+
+2021-04-20  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/minibuf.c (read_minibuf): Change multibyte more safely
+
+       We used to `bset_enable_multibyte_characters` while the buffer is not
+       empty, putting the buffer temporarily in an inconsistent state.
+
+       Further simplifications along the way: Prefer re-using local var 
`histvar`
+       and let `insert` do the unibyte<->multibyte conversion if needed.
+
+2021-04-20  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve filling-related documentation
+
+       * doc/emacs/text.texi (Auto Fill, Fill Commands): Mention special
+       line-breaking rules for CJK characters and the kinsoku rules.
+       (Bug#47856)
+
+       * lisp/textmodes/fill.el
+       (fill-separate-heterogeneous-words-with-space): Doc fix.
+
+2021-04-20  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix localization problem in Tramp
+
+       * lisp/net/tramp-sh.el (tramp-get-remote-stat): Use localized
+       quotation characters for check.
+
+2021-04-20  Alan Mackenzie  <acm@muc.de>
+
+       Fix bug #47781: (window-list-1 nil t) wrongly returned nil.
+
+       * src/window.c (candidate_window_p): In the WINDOW_P (all_frames) 
branch of
+       the conditional, insert "EQ (minibuf, Qt)" in the requisite place.
+
+2021-04-20  Alan Mackenzie  <acm@muc.de>
+
+       Introduce and use minibuffer-mode.  This fixes bug #47150
+
+       * lisp/minibuffer.el (minibuffer-mode): New derived mode.
+
+       * src/minibuf.c (syms_of_minibuf): New DEFSYMs Qminibuffer_mode,
+       Qminibuffer_inactive_mode, Qminibuffer_completing_file_name,
+       Qselect_frame_set_input_focus, Qadd_to_history.
+       (read_minibuf, set_minibuffer_mode, read_minibuf_unwind): Use the new 
DEFSYMs
+       in place of continual interning.
+       (set_minibuffer_mode): Put an active minibuffer into minibuffer-mode 
rather
+       than fundamental-mode.
+
+       * doc/emacs/mini.texi (Minibuffer Edit): Mention minibuffer-mode.
+
+       * doc/lispref/minibuf.texi (Intro to Minibuffers): Add a paragraph about
+       minibuffer-mode.
+
+       * etc/NEWS (Incompatible Lisp Changes in Emacs 28.1): Add an entry.
+
+2021-04-20  Daniel Mendler  <mail@daniel-mendler.de>
+
+       (completion-all-sorted-completions): Additional alphabetical sorting
+
+       Even in the cases where it does not make much visible difference,
+       it brings the benefit of making the result deterministic.
+
+       * lisp/minibuffer.el (minibuffer--sort-by-length-alpha): New function.
+       (minibuffer--sort-by-position): New function extracted from
+       `completion-all-sorted-completions`.
+       (completion-all-sorted-completions): Use use them.
+
+2021-04-19  Daniel Mendler  <mail@daniel-mendler.de>
+
+       minibuffer.el: Use completion--message instead of minibuffer-message
+
+       * lisp/minibuffer.el: Use completion--message consistently for the 
messages
+       "Incomplete", "Sole completion" and "No completions".
+
+2021-04-19  Philipp Stephani  <phst@google.com>
+
+       Seccomp filter: deal with arch_prctl(ARCH_CET_STATUS, ...).
+
+       The dynamic loader of GNU libc 2.28 uses this system call to
+       initialize CPU information, see
+       
https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/x86/cpu-features.c;hb=glibc-2.28#l28.
+       Simulating an older kernel by returning EINVAL should be the most
+       harmless rule here.
+
+       The ARCH_CET_STATUS symbol isn't yet exposed by the kernel headers;
+       see the FIXME at the top of
+       
https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/x86/include/asm/prctl.h;hb=glibc-2.28.
+
+       * lib-src/seccomp-filter.c (ARCH_CET_STATUS): Define if not
+       already present.  Inline the value because there doesn't seem to
+       be a header file exporting this constant yet.
+       (main): Make ARCH_CET_STATUS subfunction of arch_prctl return EINVAL.
+
+2021-04-19  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/minibuffer.el (completion-all-sorted-completions): Fix last 
change
+
+2021-04-19  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/minibuffer.el (minibuffer--sort-by-key): New function
+
+       (completion-all-sorted-completions): Use it.
+
+2021-04-19  Daniel Mendler  <mail@daniel-mendler.de>
+
+       completion-all-sorted-completions: Fix sorting performance bug
+
+       * lisp/minibuffer.el (completion-all-sorted-completions): Use hash
+       table for sorting by history position, O(m+n*log(n)) instead of
+       O(m*n*log(n)) with history length `m` and candidate length `n`.
+
+2021-04-19  Daniel Mendler  <mail@daniel-mendler.de>
+
+       completing-read: If HIST is the symbol `t', history is not recorded.
+
+       * lisp/minibuffer.el (completion-all-sorted-completions): Check if
+       `minibuffer-history-variable` is `t`
+       * src/minibuf.c (completing-read): Update docstring
+       * doc/lispref/minibuf.texi: Update documentation of
+       `read-from-minibuffer` and `completing-read`
+
+2021-04-19  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into native-comp
+
+2021-04-19  Michael Albinus  <michael.albinus@gmx.de>
+
+       Add Tramp recompilation
+
+       * doc/misc/tramp.texi (Frequently Asked Questions): Refer to GNU
+       ELPA Tramp README.
+
+       * lisp/net/tramp-cmds.el (tramp-recompile-elpa-command-completion-p)
+       (tramp-recompile-elpa): New defuns.  Add property 
`completion-predicate'.
+
+2021-04-19  Stefan Kangas  <stefan@marxist.se>
+
+       Don't hard-code "~/.emacs.d/" in two more places
+
+       * lisp/gnus/gnus-group.el (gnus-read-ephemeral-bug-group):
+       * lisp/progmodes/js.el (js-js-tmpdir): Don't hard-code
+       "~/.emacs.d/".
+
+2021-04-19  Philip K  <philipk@posteo.net>
+
+       Don't hard-code "~/.emacs.d/" in rcirc.el
+
+       * lisp/net/rcirc.el (rcirc-log-directory): Use
+       locate-user-emacs-file.  (Bug#47880)
+
+2021-04-18  Philipp Stephani  <phst@google.com>
+
+       Factor out a helper macro to create a temporary directory.
+
+       This is a useful abstraction, and saves a few levels of indentation in
+       the test body.
+
+       * test/lisp/progmodes/project-tests.el
+       (project-tests--with-temporary-directory): New helper macro.
+       (project/quoted-directory): Use it.
+
+2021-04-18  Philipp Stephani  <phst@google.com>
+
+       Add quoted filename support to 'project-find-regexp' (Bug#47799).
+
+       This is only a band-aid; it would be better to fix xref.el to work
+       with quoted filenames as well.
+
+       * lisp/progmodes/project.el (project--find-regexp-in-files): Unquote
+       filenames before passing them to 'xref-matches-in-files'.
+       * test/lisp/progmodes/project-tests.el (project/quoted-directory):
+       Also test 'project-find-regexp'.
+
+2021-04-18  Philipp Stephani  <phst@google.com>
+
+       Extend project test so that 'project-current' works.
+
+       * test/lisp/progmodes/project-tests.el (project/quoted-directory):
+       Verify that 'project-current' returns the right project.
+
+2021-04-18  Philipp Stephani  <phst@google.com>
+
+       Skip a unit test that requires an external program if necessary.
+
+       * test/lisp/progmodes/project-tests.el (project/quoted-directory):
+       Skip if the 'find' program isn't available.  The 'project-files'
+       function uses 'find' to obtain the list of project files.
+
+2021-04-18  Eli Zaretskii  <eliz@gnu.org>
+
+       * src/emacs.c (main): Add back the call to init_callproc_1. (bug#47872)
+
+2021-04-18  Protesilaos Stavrou  <info@protesilaos.com>
+
+       Update modus-themes to version 1.3.2
+
+       * doc/misc/modus-themes.org (COPYING): Reword to match the phrasing of
+       other manuals that are distributed with Emacs.
+
+       (Install from the archives)
+       (Sample configuration for use-package)
+       (Option for more bold constructs)
+       (Option for more slanted constructs)
+       (Option for syntax highlighting)
+       (Option for no font mixing)
+       (Option for links)
+       (Option for command prompt styles)
+       (Option for completion framework aesthetics)
+       (Option for fringe visibility)
+       (Option for language checkers)
+       (Option for org-habit graph styles)
+       (Option for line numbers (display-line-numbers-mode))
+       (Option for parenthesis matching (show-paren-mode))
+       (Option for diff buffer looks)
+       (Option for scaled headings)
+       (Option for variable-pitch font in UI elements)
+       (Option for variable-pitch font in headings)
+       (Case-by-case face specs using the themes' palette (DIY))
+       (Face specs at scale using the themes' palette (DIY))
+       (Font configurations for Org and others (DIY))
+       (Load theme depending on time of day): Minor markup changes for better
+       texi output.
+
+       (Option for mode line presentation): Document new possible values for
+       'modus-themes-mode-line'.
+
+       (Option for line highlighting (hl-line-mode)): Document new
+       'modus-themes-hl-line' variable, which supersedes
+       'modus-themes-intense-hl-line'.
+
+       (Option for active region): Document new possible values for
+       'modus-themes-region'.
+
+       (Option for org-mode block styles): Cite variables that affect
+       fontification.
+
+       (Option for the headings' overall style): Include the option of a
+       per-level nil value.
+
+       (Remap face with local value (DIY))
+       (Override colors (DIY)): Add sections.
+
+       (Full support for packages or face groups): Document newly supported 
packages
+
+       (Note for dimmer.el)
+       (Note for EWW and Elfeed fonts (SHR fonts)): Add notes.
+
+       (Acknowledgements): Add names of new contributors.
+
+       (GNU Free Documentation License): Add tags for html export.
+
+       * etc/themes/modus-operandi-theme.el (File)
+       * etc/themes/modus-vivendi-theme.el (File): Update to version 1.3.1
+
+       * etc/themes/modus-themes.el (modus-themes-operandi-colors)
+       (modus-themes-vivendi-colors)
+       (modus-theme-subtle-red)
+       (modus-themes-subtle-red)
+       (modus-theme-subtle-green)
+       (modus-themes-subtle-green)
+       (modus-theme-subtle-yellow)
+       (modus-themes-subtle-yellow)
+       (modus-theme-subtle-blue)
+       (modus-themes-subtle-blue)
+       (modus-theme-subtle-magenta)
+       (modus-themes-subtle-magenta)
+       (modus-theme-subtle-cyan)
+       (modus-themes-subtle-cyan)
+       (modus-theme-subtle-neutral)
+       (modus-themes-subtle-neutral)
+       (modus-theme-intense-red)
+       (modus-themes-intense-red)
+       (modus-theme-intense-green)
+       (modus-themes-intense-green)
+       (modus-theme-intense-yellow)
+       (modus-themes-intense-yellow)
+       (modus-theme-intense-blue)
+       (modus-themes-intense-blue)
+       (modus-theme-intense-magenta)
+       (modus-themes-intense-magenta)
+       (modus-theme-intense-cyan)
+       (modus-themes-intense-cyan)
+       (modus-theme-intense-neutral)
+       (modus-themes-intense-neutral)
+       (modus-theme-refine-red)
+       (modus-themes-refine-red)
+       (modus-theme-refine-green)
+       (modus-themes-refine-green)
+       (modus-theme-refine-yellow)
+       (modus-themes-refine-yellow)
+       (modus-theme-refine-blue)
+       (modus-themes-refine-blue)
+       (modus-theme-refine-magenta)
+       (modus-themes-refine-magenta)
+       (modus-theme-refine-cyan)
+       (modus-themes-refine-cyan)
+       (modus-theme-active-red)
+       (modus-themes-active-red)
+       (modus-theme-active-green)
+       (modus-themes-active-green)
+       (modus-theme-active-yellow)
+       (modus-themes-active-yellow)
+       (modus-theme-active-blue)
+       (modus-themes-active-blue)
+       (modus-theme-active-magenta)
+       (modus-themes-active-magenta)
+       (modus-theme-active-cyan)
+       (modus-themes-active-cyan)
+       (modus-theme-fringe-red)
+       (modus-themes-fringe-red)
+       (modus-theme-fringe-green)
+       (modus-themes-fringe-green)
+       (modus-theme-fringe-yellow)
+       (modus-themes-fringe-yellow)
+       (modus-theme-fringe-blue)
+       (modus-themes-fringe-blue)
+       (modus-theme-fringe-magenta)
+       (modus-themes-fringe-magenta)
+       (modus-theme-fringe-cyan)
+       (modus-themes-fringe-cyan)
+       (modus-theme-nuanced-red)
+       (modus-theme-nuanced-green)
+       (modus-theme-nuanced-yellow)
+       (modus-theme-nuanced-blue)
+       (modus-theme-nuanced-magenta)
+       (modus-theme-nuanced-cyan)
+       (modus-theme-special-cold)
+       (modus-theme-special-mild)
+       (modus-theme-special-warm)
+       (modus-theme-special-calm)
+       (modus-theme-diff-added)
+       (modus-theme-diff-changed)
+       (modus-theme-diff-removed)
+       (modus-theme-diff-refine-added)
+       (modus-theme-diff-refine-changed)
+       (modus-theme-diff-refine-removed)
+       (modus-theme-diff-focus-added)
+       (modus-theme-diff-focus-changed)
+       (modus-theme-diff-focus-removed)
+       (modus-theme-diff-heading)
+       (modus-theme-pseudo-header)
+       (modus-theme-mark-alt)
+       (modus-theme-mark-del)
+       (modus-theme-mark-sel)
+       (modus-theme-mark-symbol)
+       (modus-theme-heading-1)
+       (modus-theme-heading-2)
+       (modus-theme-heading-3)
+       (modus-theme-heading-4)
+       (modus-theme-heading-5)
+       (modus-theme-heading-6)
+       (modus-theme-heading-7)
+       (modus-theme-heading-8)
+       (modus-theme-hl-line)
+       (modus-theme-bold)
+       (modus-theme-slant)
+       (modus-theme-variable-pitch)
+       (modus-theme-graph-red-0)
+       (modus-theme-graph-red-1)
+       (modus-theme-graph-green-0)
+       (modus-theme-graph-green-1)
+       (modus-theme-graph-yellow-0)
+       (modus-theme-graph-yellow-1)
+       (modus-theme-graph-blue-0)
+       (modus-theme-graph-blue-1)
+       (modus-theme-graph-magenta-0)
+       (modus-theme-graph-magenta-1)
+       (modus-theme-graph-cyan-0)
+       (modus-theme-graph-cyan-1)
+       (modus-theme-lang-note)
+       (modus-theme-lang-warning)
+       (modus-theme-lang-error): Rename all internal faces.
+
+       (modus-themes-headings)
+       (modus-themes-fringes)
+       (modus-themes-lang-checkers)
+       (modus-themes-org-blocks)
+       (modus-themes-org-habit)
+       (modus-themes-mode-line)
+       (modus-themes-diffs)
+       (modus-themes-completions)
+       (modus-themes-prompts)
+       (modus-themes-intense-hl-line)
+       (modus-themes-hl-line)
+       (modus-themes-paren-match)
+       (modus-themes-syntax)
+       (modus-themes-links)
+       (modus-themes-region): Update defcustom.
+
+       (modus-themes--fringe):
+       (modus-themes--headings-choice):
+       (modus-themes--prompt):
+       (modus-themes--org-block-delim):
+       (modus-themes--mode-line-attrs):
+       (modus-themes--link):
+       (modus-themes--region):
+       (modus-themes--hl-line): Adjustments to internal functions.
+
+       (modus-themes-faces): Update faces.
+       (modus-themes-custom-variables): Update custom variables.
+
+2021-04-18  Eli Zaretskii  <eliz@gnu.org>
+
+       * src/comp.c (fixup_eln_load_path): Simplify code.
+
+2021-04-18  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix last change
+
+       * src/emacs.c (load_pdump_find_executable): Fix the value of
+       CANDIDATE_SIZE when the final candidate is a symlink.
+
+2021-04-18  Philipp Stephani  <phst@google.com>
+
+       Fix Seccomp filter on CentOS 8.3 (Bug#47828).
+
+       * lib-src/seccomp-filter.c (main): mmap: Also allow MAP_SHARED.
+
+2021-04-18  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/misearch.el (multi-isearch-pop-state): Doc fix.
+
+2021-04-18  Martin Rudalics  <rudalics@gmx.at>
+
+       Avoid selecting tooltip windows and frames (Bug#47207)
+
+       * src/frame.c (do_switch_frame): Don't switch to a tooltip frame.
+       (Fselect_frame): Do not select a tooltip frame.
+       * src/w32fns.c (Fx_show_tip):
+       * src/xfns.c (Fx_show_tip): Set the tooltip window's
+       `no-other-window' parameter so `other-window' will skip it.
+       * src/window.c (select_window): Do not select a tooltip window.
+       (candidate_window_p): Make sure MINIBUF is live.
+       (decode_next_window_args): Make sure that W's frame's minibuffer
+       window is live before including it.
+       (Qno_other_window): New symbol.
+
+2021-04-18  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/debug.el (debug): Fix (bug#47588)
+
+       Don't bind `load-read-function` to nil but to its actual default value.
+       Actually, I'm not sure it's worth the trouble rebinding this var, but
+       if we do, then we should bind it to a valid value rather than to nil.
+
+       * lisp/emacs-lisp/edebug.el (edebug--eval-defun): Re-install our advice
+       if needed.
+
+2021-04-17  Philipp Stephani  <phst@google.com>
+
+       Attempt to print some debugging information on Seccomp failures.
+
+       Try to search the audit log as well as recent core dumps.
+
+       * test/src/emacs-tests.el (emacs-tests--seccomp-debug): New helper
+       function.
+       (emacs-tests/seccomp/allows-stdout)
+       (emacs-tests/seccomp/forbids-subprocess)
+       (emacs-tests/bwrap/allows-stdout): Use it.
+
+2021-04-17  Eli Zaretskii  <eliz@gnu.org>
+
+       * src/emacs.c (load_pdump): Fix unconditional references to 
strip_suffix.
+
+2021-04-17  Michael Albinus  <michael.albinus@gmx.de>
+
+       Make stderr in Tramp's make-process more robust
+
+       * lisp/net/tramp-sh.el (tramp-sh-handle-make-process): Wrap about
+       error in inserting stderr file.
+
+       * lisp/net/tramp.el (tramp-handle-make-process): Fix docstring.
+
+2021-04-17  Eli Zaretskii  <eliz@gnu.org>
+
+       * src/emacs.c (load_pdump): Fix compilation on picky-complier platforms.
+
+2021-04-17  Daniel Martín  <mardani29@yahoo.es>
+
+       Fix reference to "yanking" in the main Emacs manual
+
+       * doc/emacs/emacs.texi (Top): Yanking is alternatively known as
+       pasting, not copying.  (Bug#47839).
+
+2021-04-17  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/easy-mmode.el (define-minor-mode): Tweak further
+
+       Suggested by Lars Ingebrigtsen <larsi@gnus.org>.
+
+2021-04-17  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix loading *.eln files when Emacs is installed via symlinks
+
+       * src/emacs.c (real_filename, set_invocation_vars)
+       (init_vars_for_load): Functions deleted; callers adjusted.
+       (init_cmdargs): Put back all the code which was extracted into
+       set_invocation_vars.
+       (load_pdump_find_executable): Make sure the return value has any
+       symlinks in it expanded.
+       (load_pdump): Accept only 2 arguments, not 3.  Determine both the
+       file name of the Emacs executable and of the dump file in
+       synchronized manner, so that if we decided to look for the dump
+       file in its hardcoded installation directory, the directory of the
+       Emacs executable will also be where we expect it to be installed.
+       Pass only 2 arguments to pdumper_load.  (Bug#47800)  (Bug#44128)
+       * src/pdumper.c (dump_do_dump_relocation): Use emacs_execdir
+       instead of Vinvocation_directory to produce absolute file names of
+       *.eln files that are recorded in the pdumper file.  Pass the full
+       .eln file name to fixup_eln_load_path.
+       (pdumper_set_emacs_execdir) [HAVE_NATIVE_COMP]: New function.
+       (pdumper_load) [HAVE_NATIVE_COMP]: Call pdumper_set_emacs_execdir.
+       * src/comp.c (fixup_eln_load_path): Use Fsubstring_no_properties
+       instead of Fsubstring.  No need to cons a file name, as the caller
+       already did that.  Use explicit const string to avoid "magic"
+       values.
+
+       * lisp/startup.el (normal-top-level): Use expand-file-name instead
+       of concat.  Decode comp-eln-load-path and expand-file-name its
+       members.
+
+2021-04-17  Alan Third  <alan@idiocy.org>
+
+       Fix :scale's affect on :width and :height (bug#47819)
+
+       * src/image.c (compute_image_size): Multiply width and height values
+       by scale.
+
+2021-04-17  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of 'map-y-or-n-p'
+
+       * lisp/emacs-lisp/map-ynp.el (map-y-or-n-p): Doc fix.  (Bug#47833)
+
+       * doc/lispref/minibuf.texi (Multiple Queries): Fix the wording in
+       the description of 'map-y-or-n-p'.
+
+2021-04-17  Martin Rudalics  <rudalics@gmx.at>
+
+       Don't allow quitting while rebuilding Vwindow_list (Bug#47244)
+
+       * src/window.c (window_list, next_window, window_list_1): Don't
+       allow quitting in Fnconc and Fmemq (Bug#47244).
+
+2021-04-17  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/easy-mmode.el (define-minor-mode): Improve `C-h f` 
output
+
+       Suggested by Michael Heerdegen <michael_heerdegen@web.de>.
+
+2021-04-17  Stefan Kangas  <stefan@marxist.se>
+
+       Cleanup in em-extra.el
+
+       * lisp/eshell/em-xtra.el (cl-lib): Require.
+       (pcomplete, compile): Remove unnecessary requires.
+       (eshell/substitute, eshell/count, eshell/mismatch, eshell/union)
+       (eshell/intersection, eshell/set-difference)
+       (eshell/set-exclusive-or): Use cl-lib.  Doc fixes.
+       (eshell/ff, eshell/gf, eshell/expr): Quote function symbols as such.
+       (eshell/expr): Assume 'calc-eval' is always available.
+
+2021-04-16  Alan Mackenzie  <acm@muc.de>
+
+       Check minibuffer windows are live windows, rather than assuming it
+
+       This partly fixes bug #47207.
+
+       * src/minibuf.c (choose_minibuf_frame, move_minibuffers_onto_frame)
+       (read_minibuf (twice), read_minibuf_unwind): Before using a frame's
+       ->minibuffer_window field, check it is valid with WINDOW_LIVE_P.
+       (choose_minibuf_frame): Remove the emacs_abort for a null minibuffer.
+
+2021-04-16  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       eedad01b4b (origin/emacs-27) Fix typos in manuals
+       24d214652e Fix description of momentary message display
+
+2021-04-16  Ashish SHUKLA  <ashish@FreeBSD.org>
+
+       * lisp/emacs-lisp/comp.el (comp-effective-async-max-jobs): Handle BSD.
+
+2021-04-16  Robert Pluim  <rpluim@gmail.com>
+
+       Improve docstring of 'frame-scale-factor'
+
+       * src/frame.c (Fframe_scale_factor): Explain what happens when the
+       FRAME argument is nil.
+
+2021-04-16  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Improve quoting of directory names in project/xref
+
+       * lisp/progmodes/project.el (project--files-in-directory):
+       Quote LOCALDIR a bit earlier, to affect
+       xref--find-ignores-arguments as well (bug#47799).
+
+       * lisp/progmodes/xref.el (xref-matches-in-directory):
+       Quote the dir passed to xref--rgrep-command.
+
+2021-04-16  Dmitry Gutov  <dgutov@yandex.ru>
+
+       project--files-in-directory: Handle errors reported by 'find'
+
+       * lisp/progmodes/project.el (project--files-in-directory):
+       Handle errors reported by 'find' (bug#47799).
+
+2021-04-15  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix 'garbage-collect-maybe'
+
+       * src/alloc.c (Fgarbage_collect_maybe): No longer interactive.
+       (Bug#47805)
+
+2021-04-15  Alan Third  <alan@idiocy.org>
+
+       Allow use of em in image spec sizes
+
+       * src/image.c (image_get_dimension): New function.
+       (compute_image_size): Use image_get_dimension to set the sizes, and
+       pass in the image struct instead of just the spec.
+       (image_set_transform):
+       (imagemagick_load_image):
+       (svg_load_image): Use the image instead of the spec in 
compute_image_size.
+       (syms_of_image): Add 'em' as a symbol.
+
+2021-04-15  Philipp Stephani  <phst@google.com>
+
+       Improve project support for quoted directory names (Bug#47799)
+
+       * lisp/progmodes/project.el (project--files-in-directory): Unquote
+       directory name before passing it to 'find'.
+       (project--remote-file-names): Requote local filenames if the original
+       directory is quoted.
+       * test/lisp/progmodes/project-tests.el (project/quoted-directory): New
+       unit test.
+
+2021-04-15  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/bindat.el: Allow non-fixed size of `strz`
+
+       (bindat--unpack-strz): Allow `len` to be nil.
+       (bindat--pack-strz): New function.
+       (bindat--type) <strz>: Make `len` arg optional.
+       (bindat-type): Adjust debug spec and docstring accordingly.
+
+       * doc/lispref/processes.texi (Bindat Types): Adjust accordingly.
+
+2021-04-15  Mattias Engdegård  <mattiase@acm.org>
+
+       Add condition-case success handler (bug#47677)
+
+       Allow a condition-case handler on the form (:success BODY) to be
+       specified as the success continuation of the protected form, with
+       the specified variable bound to its result.
+
+       * src/eval.c (Fcondition_case): Update the doc string.
+       (internal_lisp_condition_case): Implement in interpreter.
+       (syms_of_eval): Defsym :success.
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-condition-case):
+       Implement in byte-compiler.
+       * lisp/emacs-lisp/cl-macs.el (cl--self-tco): Allow self-TCO
+       from success handler.
+       * doc/lispref/control.texi (Handling Errors): Update manual.
+       * etc/NEWS: Announce.
+       * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-tests--test-cases)
+       (bytecomp-condition-case-success):
+       * test/lisp/emacs-lisp/cl-macs-tests.el (cl-macs--labels):
+       Add test cases.
+
+2021-04-15  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: Put debug specs inside declare forms.  Add missing debug specs.
+
+       * lisp/progmodes/cc-bytecomp.el, lisp/progmodes/cc-cmds.el,
+       lisp/progmodes/cc-defs.el, lisp/progmodes/cc-engine.el,
+       lisp/progmodes/cc-fonts.el, lisp/progmodes/cc-langs.el,
+       lisp/progmodes/cc-mode.el: Change the explicit def-edebug-spec for many 
macros
+       into a (declare (debug ...) ..) form.  Add such forms to macros which 
were
+       previously lacking def-edebug-spec forms.
+
+2021-04-14  Andrea Corallo  <akrl@sdf.org>
+
+       * configure.ac: Revert prev commit and fix native-comp NetBSD build.
+
+2021-04-14  Juri Linkov  <juri@linkov.net>
+
+       repeat-echo-mode-line-string doesn't need risky-local-variable to keep 
props
+
+       (bug#47566)
+
+2021-04-14  Filipp Gunbin  <fgunbin@fastmail.fm>
+
+       Java Mode: Change the syntax of character @ to prefix syntax
+
+       lisp/progmodes/cc-langs.el (c-make-mode-syntax-table): Change the 
syntax of @
+       as indicated.
+
+2021-04-14  Juri Linkov  <juri@linkov.net>
+
+       * lisp/isearch.el (isearch-mouse-2): Let-bind isearch-mode to nil 
(bug#47755)
+
+2021-04-14  Juri Linkov  <juri@linkov.net>
+
+       Don't error out when selection data is unavailable (bug#47642)
+
+       * src/xselect.c (x_get_window_property_as_lisp_data):
+       Display a message and return nil when data is not available.
+
+2021-04-14  Juri Linkov  <juri@linkov.net>
+
+       * lisp/progmodes/gud.el (gud-repeat-map): New variable (bug#47688).
+
+       (gud-gdb): Populate gud-repeat-map with repeating keys.
+
+2021-04-14  Juri Linkov  <juri@linkov.net>
+
+       * lisp/repeat.el: Add option to indicate repeat-mode in mode-line 
(bug#47566)
+
+       * lisp/repeat.el (repeat-echo-function): Rename from repeat-mode-echo.
+       Add choice repeat-echo-mode-line.
+       (repeat-in-progress): New variable.
+       (repeat-post-hook): Call repeat-echo-function with nil arg
+       at the end of repeating sequence.
+       (repeat-echo-message-string): New function with body from 
repeat-post-hook.
+       (repeat-echo-message): Rename from repeat-mode-message.
+       (repeat-echo-mode-line-string): New variable.
+       (repeat-echo-mode-line): New function.
+
+2021-04-14  Andrea Corallo  <akrl@sdf.org>
+
+       * configure.ac: Fix native-comp FreeBSD build.
+
+2021-04-14  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix MS-Windows build following last change
+
+       * src/emacs.c (real_filename) [WINDOWSNT]: Fix off-by-one error
+       when allocating storage for a file name.
+
+2021-04-14  Andrea Corallo  <akrl@sdf.org>
+
+       Fix native-comp startup for symliked binary (bug#44128)
+
+       * src/emacs.c (real_filename): New function.
+       (set_invocation_vars, load_pdump): Make use of.
+
+2021-04-14  Michael Albinus  <michael.albinus@gmx.de>
+
+       Rearrange argument handling in Tramp scp calls.
+
+       * lisp/net/tramp-sh.el (tramp-do-copy-or-rename-file-out-of-band):
+       Use `start-process' instead of `start-process-shell-command'.
+       (tramp-make-copy-program-file-name): Do not quote `localname'.
+
+       * test/lisp/net/tramp-tests.el (tramp-method-out-of-band-p): Declare.
+       (tramp--test-windows-nt-and-batch-p)
+       (tramp--test-windows-nt-and-pscp-psftp-p): Remove, and also all callees.
+       (tramp--test-windows-nt-and-out-of-band-p)
+       (tramp--test-windows-nt-and-scp-p): New defuns.
+       (tramp-test17-dired-with-wildcards)
+       (tramp-test40-special-characters)
+       (tramp-test40-special-characters-with-stat)
+       (tramp-test40-special-characters-with-perl)
+       (tramp-test40-special-characters-with-ls, tramp-test41-utf8)
+       (tramp-test41-utf8-with-stat, tramp-test41-utf8-with-perl)
+       (tramp-test41-utf8-with-ls): Use them.
+
+2021-04-14  Eli Zaretskii  <eliz@gnu.org>
+
+       Add two optional arguments to 'string-width'
+
+       * src/character.c (Fstring_width, lisp_string_width): Accept two
+       optional arguments FROM and TO, to indicate the substring to be
+       considered.
+       (Fstring_width): Add caveats in the doc string about display
+       features ignored by the function.  (Bug#47712)
+       * src/character.h (lisp_string_width): Update prototype.
+       * src/editfns.c (styled_format): Adjust call of lisp_string_width
+       to its changed signature.
+
+       * test/src/character-tests.el (character-test-string-width): New
+       file with tests for 'string-width'.
+
+       * doc/lispref/display.texi (Size of Displayed Text): Document
+       caveats of using 'string-width'.
+
+       * etc/NEWS: Announce the change.
+
+2021-04-14  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/xdisp.c (wset_update_mode_line): Move from `src/window.c`
+
+       Move that function next to its siblings.  Also simplify it, since
+       after careful analysis it is now clear that the frame's title's update
+       is already handled elsewhere (in `prepare_menu_bars` and 
`redisplay_window`)
+       so we just need to make sure the `redisplay` bit is set.
+
+       * src/window.c (wset_update_mode_line): Move to `src/xdisp.c`.
+       * src/window.h (wset_update_mode_line): Declare.
+
+2021-04-14  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/nxml/xmltok.el (xmltok-defregexp): Don't quote lambda
+
+       * lisp/emacs-lisp/eieio-core.el (list-of): Don't quote lambda
+
+2021-04-13  Filipp Gunbin  <fgunbin@fastmail.fm>
+
+       * doc/lispref/keymaps.texi (Translation Keymaps): Fix small misprint
+
+       * doc/lispref/processes.texi: Fix small misprint
+
+2021-04-13  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Improvements to message-syntax-checks docs and options
+
+       * doc/misc/message.texi: Move the manual entry from the "News Headers"
+       section to the "Message Headers" section, as it is generally
+       applicable, not just to News.
+       * lisp/gnus/message.el (message-syntax-checks): Add an explicit alist
+       type specifying the valid options; point to the manual for more
+       information.
+
+2021-04-13  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/textmodes/two-column.el: Address FIXME
+
+       (2C-associate-buffer): Move minibuffer interactive to the `interactive` 
spec.
+
+2021-04-13  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/textmodes/paragraphs.el (multiple-lines): Remove mistaken 
declaration
+
+       (forward-paragraph): Remove unused var `multiple-lines`.
+
+2021-04-13  Eli Zaretskii  <eliz@gnu.org>
+
+       Resurrect mouse-highlight of close buttons on tab-bar
+
+       * src/w32term.c (w32_draw_image_relief): Support tab-bar drawing
+       with relief as xterm.c does.
+
+       * src/xdisp.c (handle_tab_bar_click): Access the mouse-highlight
+       info.  Call show_mouse_face to show the button in the pressed or
+       the released state, according to value of DOWN_P.
+       (note_tab_bar_highlight): Function added back.
+       (note_mouse_highlight): Call note_tab_bar_highlight when the mouse
+       pointer is in the tab-bar window.
+       (show_mouse_face): Return immediately if mouse_face_window is not
+       set up in HLINFO.  This avoids rare assertion violations.
+
+2021-04-13  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix typos in manuals
+
+       * doc/misc/eshell.texi (Completion):
+       * doc/lispref/objects.texi (Mutability): Fix typos.  (Bug#47738)
+
+2021-04-13  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into native-comp
+
+2021-04-13  Andrea Corallo  <akrl@sdf.org>
+
+       Fix two comp-cstr tests
+
+       * test/lisp/emacs-lisp/comp-cstr-tests.el
+       (comp-cstr-typespec-tests-alist): Fix test 53 70.
+
+2021-04-13  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr-union-1-no-mem): (not null) 
=> t.
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-normalize-valset): Remove 
duplicates.
+
+2021-04-13  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/comint.el: Add `font-lock-face` to `rear-nonsticky`
+
+       (comint--prompt-rear-nonsticky): New const.
+       (comint-send-input, comint-output-filter): Use it.
+
+2021-04-13  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Don't version-control generated file `grammat-wy.el`
+
+       This file is needed for CEDET's bootstrap, tho, so we now keep a copy 
of it
+       under version control in `gram-wy-boot.el`, very much like we do with
+       the `ldefs-boot.el` copy of `loaddefs.el`.
+
+       * lisp/cedet/semantic/grm-wy-boot.el: Rename from
+       `lisp/cedet/semantic/grammar-wy.el`.
+
+       * lisp/cedet/semantic/grammar.el: Load `grm-wy-boot.el` if
+       `grammar-wy.el` hasn't been generated yet.
+
+       * admin/update_autogen: Also refresh `grm-wy-boot.el`.
+
+       * admin/grammars/Makefile.in (WISENT): Add `grammar-wy.el` to the
+       generated files.
+
+       * .gitignore: Add `grammar-wy.el`.
+
+2021-04-13  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/minibuffer.el (completion-table-with-quoting): Fix bug#47678
+
+2021-04-12  Wilson Snyder  <wsnyder@wsnyder.org>
+
+       * lisp/progmodes/verilog-mode.el (vl-memory): Add missing defvar.
+
+2021-04-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/smie.el: Fix URL.  Remove redundant `:group` args
+
+       (smie-indent-forward-token): Improve error message.
+       (smie--funcall): New function.
+       (smie-indent-calculate): Use it.
+
+2021-04-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/memory-report.el (memory-report--object-size-1): 
Simplify
+
+       * lisp/emacs-lisp/float-sup.el (pi): Actually mark it as obsolete
+
+       * lisp/emacs-lisp/edebug.el (edebug--frame): Move docstring where it 
belongs
+
+2021-04-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/vt-control.el: Avoid `called-interactively-p`
+
+       (vt-keypad-on, vt-keypad-off): Use the `tell` arg instead.
+       (vt-numlock): Add `tell` arg.
+
+2021-04-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/files.el (file-modes-number-to-symbolic): Add `filetype` arg.
+
+       * lisp/tar-mode.el (tar-header-block-summarize): Use it.
+       (tar-grind-file-mode): Declare obsolete.
+
+2021-04-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/frame.el (delete-other-frames): Add universal prefix `iconify` 
arg
+
+       (frame--current-backround-mode): New function,
+       extracted from `frame-set-background-mode`.  Use `color-dark-p`.
+       (frame-set-background-mode): Use it.
+
+2021-04-12  Juri Linkov  <juri@linkov.net>
+
+       * lisp/repeat.el (repeat-mode-echo): New defcustom.
+
+       (repeat-post-hook): Use it.
+       (repeat-mode-message): New function (bug#47566).
+       (repeat-post-hook): Use real-this-command instead of this-command
+       to handle e.g. rectangle-exchange-point-and-mark remapped to
+       exchange-point-and-mark (bug#47688).
+
+2021-04-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/dynamic-setting.el: Add missing footer
+
+       * lisp/comint.el (comint-strip-ctrl-m): Avoid `called-interactively-p`
+
+2021-04-12  Glenn Morris  <rgm@gnu.org>
+
+       * lisp/strokes.el (strokes-mode): Fix typo in previous.
+
+2021-04-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       (define-minor-mode): Warn about use of pre-Emacs-21 style args
+
+       * lisp/emacs-lisp/easy-mmode.el (define-minor-mode):
+       Use `advertised-calling-convention` to avoid promoting the old
+       style arguments.  Emit a wanring when old-style arguments are used.
+       Massage the docstring accordingly.
+       * doc/lispref/modes.texi (Defining Minor Modes): Document the keyword
+       arguments rather than the old-style positional arguments.
+
+2021-04-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/vhdl-mode.el: Add note about XEmacs compatibility
+
+2021-04-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Adjust verilog-mode to changes in the completion framework
+
+       * lisp/progmodes/verilog-mode.el (verilog-func-completion): Don't
+       bug out on `C-M-i' (which expects no point movement) (bug#47652).
+       (verilog-declaration-end): There may be no semicolons; don't bug out.
+
+2021-04-12  Shitikanth Kashyap  <shitikanth1@gmail.com>  (tiny change)
+
+       Fix python-shell-switch-to-shell redisplay bug
+
+       * lisp/progmodes/python.el (python-shell-switch-to-shell):
+       Redisplay the switched-to window faster (bug#47679).
+
+2021-04-12  Ralph Schleicher  <rs@ralph-schleicher.de>
+
+       Add command in eww to toggle images
+
+       * lisp/net/eww.el (eww-toggle-images): New function.
+       (eww-mode-map): Add key binding and menu entry.
+       * lisp/net/shr.el (shr-inhibit-images): Make it customizable.
+       * doc/misc/eww.texi (Basics): Document eww-toggle-images.
+       Fix index entries for shr-use-fonts and shr-use-colors.
+       (Advanced): Document shr-inhibit-images
+       (bug#47705).
+
+2021-04-12  Junya Takahashi  <jutakat@gmail.com>  (tiny change)
+
+       Fix args-out-of-range error in epa-file-insert-file-contents
+
+       * lisp/epa-file.el (epa-file-insert-file-contents): Don't bug out
+       on a region that's longer than the file (bug#47718).
+
+2021-04-12  Philipp Stephani  <phst@google.com>
+
+       * lib-src/seccomp-filter.c: Add missing headers.
+
+2021-04-12  Philipp Stephani  <phst@google.com>
+
+       Generate Seccomp filters only if we have the necessary constants.
+
+       If we're missing SECCOMP_SET_MODE_FILTER, the seccomp-filter build
+       fails.  Reuse the existing HAVE_SECCOMP configuration variable, which
+       checks for these macros.
+
+       * configure.ac (HAVE_SECCOMP): Substitute in Makefile.in.
+       * lib-src/Makefile.in (HAVE_SECCOMP): New variable.
+       (SECCOMP_FILTER): Define only if HAVE_SECCOMP.
+
+2021-04-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/**/*.el: Avoid positional args to `define-minor-mode`
+
+       Back in Emacs-21.1, `define-minor-mode` grew keywords arguments to
+       replace its old positional arguments.  Let's make sure we don't use
+       the old-style any more.
+
+       * lisp/org/ox-beamer.el (org-beamer-mode-map): Move initialization
+       into declaration.
+       (org-beamer-mode):
+       * lisp/textmodes/tildify.el (tildify-mode):
+       * lisp/textmodes/sgml-mode.el (html-autoview-mode):
+       * lisp/textmodes/rst.el (rst-minor-mode):
+       * lisp/textmodes/remember.el (remember-notes-mode):
+       * lisp/textmodes/ispell.el (ispell-minor-mode):
+       * lisp/tar-mode.el (tar-subfile-mode):
+       * lisp/strokes.el (strokes-mode):
+       * lisp/so-long.el (so-long-minor-mode):
+       * lisp/shell.el (shell-dirtrack-mode):
+       * lisp/scroll-all.el (scroll-all-mode):
+       * lisp/ruler-mode.el (ruler-mode):
+       * lisp/rect.el (rectangle-mark-mode):
+       * lisp/progmodes/sh-script.el (sh-electric-here-document-mode):
+       * lisp/outline.el (outline-minor-mode):
+       * lisp/org/org.el (org-cdlatex-mode):
+       * lisp/org/org-table.el (org-table-header-line-mode)
+       (org-table-follow-field-mode, orgtbl-mode):
+       * lisp/org/org-src.el (org-src-mode):
+       * lisp/org/org-list.el (org-list-checkbox-radio-mode):
+       * lisp/org/org-indent.el (org-indent-mode):
+       * lisp/org/org-capture.el (org-capture-mode):
+       * lisp/obsolete/pc-select.el (pc-selection-mode):
+       * lisp/obsolete/iswitchb.el (iswitchb-mode):
+       * lisp/net/rcirc.el (rcirc-omit-mode, rcirc-multiline-minor-mode)
+       (rcirc-track-minor-mode):
+       * lisp/net/goto-addr.el (goto-address-mode, goto-address-prog-mode):
+       * lisp/image-mode.el (image-minor-mode):
+       * lisp/ibuf-ext.el (ibuffer-auto-mode):
+       * lisp/gnus/gnus-cite.el (gnus-message-citation-mode):
+       * lisp/font-core.el (font-lock-mode):
+       * lisp/erc/erc.el (define-erc-module):
+       * lisp/erc/erc-track.el (erc-track-minor-mode):
+       * lisp/erc/erc-fill.el (erc-fill-mode):
+       * lisp/epa-mail.el (epa-mail-mode):
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-minor-mode):
+       * lisp/dirtrack.el (dirtrack-mode, dirtrack-debug-mode):
+       * lisp/dired-aux.el (dired-isearch-filenames-mode):
+       * lisp/cedet/semantic/idle.el (semantic-idle-scheduler-mode):
+       * lisp/cedet/semantic/decorate/mode.el (semantic-decoration-mode):
+       * lisp/autoarg.el (autoarg-mode, autoarg-kp-mode):
+       * lisp/vc/pcvs.el (cvs-minor-mode):
+       Avoid old-style positional args to `define-minor-mode`.
+
+2021-04-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/gnus/message.el: Give non-nil defaults for function vars
+
+       Also prefer #' to quote functions.
+
+       (message-send-rename-function, message-reply-to-function)
+       (message-wide-reply-to-function, message-followup-to-function):
+       Use a non-nil default value so it can be used with `add-function`.
+       (message-do-send-housekeeping): Tweak accordingly.
+       (message-get-reply-headers): Simplify by η-reduction.
+
+2021-04-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/eshell/esh-util.el: Require `seq`
+
+       Also remove redundant `:group` args and tweak comment
+
+2021-04-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/eshell/esh-proc.el (eshell-kill-process-function): Use 
`remove-hook`
+
+       Also remove redundant `:group` args
+
+2021-04-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/mail/rmailmm.el (rmail-mime): Simplify interactive spec
+
+       * lisp/progmodes/sql.el (sql-mode-ansi-font-lock-keywords): Fix 
declaration
+
+2021-04-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/vc/log-edit.el (log-edit-diff-function): Give non-nil default
+
+       (log-edit-show-diff): Simplify accordingly.
+
+2021-04-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/bug-reference.el: Avoid old-style `define-minor-mode`
+
+       (bug-reference-mode, bug-reference-prog-mode): Remove redundant args.
+
+2021-04-11  Philipp Stephani  <phst@google.com>
+
+       * src/emacs.c (load_seccomp): Consistently check for nonzero result
+
+2021-04-11  Philipp Stephani  <phst@google.com>
+
+       Add a variant of the Seccomp filter file that allows 'execve'.
+
+       This is useful when starting Emacs with a Seccomp filter enabled,
+       e.g. using 'bwrap'.
+
+       * lib-src/seccomp-filter.c (main): Generate new Seccomp files.
+
+       * lib-src/Makefile.in (all)
+       (seccomp-filter.bpf seccomp-filter.pfc seccomp-filter-exec.bpf
+       seccomp-filter-exec.pfc): Generate new Seccomp files.
+
+       * .gitignore: Ignore new Seccomp files.
+
+       * test/src/emacs-tests.el (emacs-tests/bwrap/allows-stdout): New unit
+       test.
+
+2021-04-11  Philipp Stephani  <phst@google.com>
+
+       * lib-src/seccomp-filter.c (main): Also allow O_NOFOLLOW.
+
+2021-04-11  Philipp Stephani  <phst@google.com>
+
+       Don't attempt to generate Seccomp filter file in Linux < 4.14.
+
+       Only Linux 4.14 and later contain the required support for
+       SECCOMP_RET_KILL_PROCESS.
+
+       * lib-src/Makefile.in (SECCOMP_FILTER): Define only if we run at least
+       Linux 4.14.
+
+2021-04-11  Philipp Stephani  <phst@google.com>
+
+       Seccomp filter: allow reading the current time (Bug#47708).
+
+       * lib-src/seccomp-filter.c (main): Allow reading the current time.
+
+2021-04-11  Andreas Schwab  <schwab@linux-m68k.org>
+
+       Fix check for timer_getoverrun
+
+       * configure.ac (timer_getoverrun): Move check after gnulib checks
+       and use $LIB_TIMER_TIME during check.
+
+2021-04-11  Philipp Stephani  <phst@google.com>
+
+       Use pkg-config to check for libseccomp.
+
+       We need at list version 2.4.0 of libseccomp for seccomp-filter.c to
+       build cleanly.
+
+       * configure.ac: Use pkg-config to check for libseccomp.
+       * lib-src/Makefile.in (HAVE_LIBSECCOMP, LIBSECCOMP_LIBS)
+       (LIBSECCOMP_CFLAGS): New variables.
+       (SECCOMP_FILTER, seccomp-filter$(EXEEXT)): Use them.
+
+2021-04-11  Philipp Stephani  <phst@google.com>
+
+       Remove SCMP_FLTATR_CTL_LOG attribute from Seccomp filter.
+
+       Whether or not we log failing syscalls isn't security-critical, and we
+       shouldn't care.
+
+       * lib-src/seccomp-filter.c (main): Remove log attribute.
+
+2021-04-11  Philipp Stephani  <phst@google.com>
+
+       Only attempt to generate seccomp filter files on x86-64 systems.
+
+       The seccomp filters are always architecture-specific, and
+       seccomp-filter.c right now only supports x86-64.
+
+       * lib-src/Makefile.in (SECCOMP_FILTER): New variable.
+       (DONT_INSTALL, all, seccomp-filter$(EXEEXT)): Use it.
+
+2021-04-11  Philipp Stephani  <phst@google.com>
+
+       * lib-src/seccomp-filter.c: Print trailing newline.
+
+2021-04-11  Stefan Kangas  <stefan@marxist.se>
+
+       * doc/lispref/elisp.texi (Top): Add missing entry.
+
+2021-04-11  Eli Barzilay  <eli@barzilay.org>
+
+       Fix calculator-string-to-number yet again (bug#47694)
+
+       * lisp/calculator.el (calculator-string-to-number):
+       The last bugfix changed the code to just blindly replace ".e".  This
+       has some minor problems like making "-." parse as 0.0 instead of -0.0,
+       and ".1.e1" is parsed as 1 instead of 0.1.  Instead, replace the first
+       "." that is followed by a non-digit with ".0".  Since this has had
+       several problems over the years, add some tests too.  (Also, restore
+       the original if-indentation style.)
+
+2021-04-11  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix typo in cconv
+
+       * lisp/emacs-lisp/cconv.el (cconv-convert): Typo.
+       * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-tests--test-cases):
+       Add test case.
+
+2021-04-11  Philipp Stephani  <phst@google.com>
+
+       Add another check for the required header <linux/filter.h>.
+
+       * configure.ac: Also check for <linux/filter.h>.
+       * src/emacs.c (SECCOMP_USABLE): Also check for <linux/filter.h>.
+
+2021-04-11  Philipp Stephani  <phst@google.com>
+
+       Also check for needed seccomp macros.
+
+       It looks like these are not available on some versions of GNU/Linux,
+       breaking the build.
+
+       * configure.ac: Also check for needed seccomp macros.
+       * src/emacs.c (SECCOMP_USABLE): New macro.
+       (usage_message, main, standard_args): Use it.
+
+2021-04-11  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix handling of mouse clicks on tab-bar buttons
+
+       * src/xdisp.c (note_mouse_highlight): Don't attempt to highlight
+       tab-bar buttons.
+       (note_tab_bar_highlight): Function deleted: it had no effect on
+       display of tab-bar buttons.
+       (tab_bar_item_info): Mention all arguments in the commentary.
+       (get_tab_bar_item): Don't pay attention to mouse-highlight
+       information; instead, compare the button's index with the one
+       recorded in f->last_tab_bar_item.
+       (handle_tab_bar_click): Don't attempt to show tab-bar buttons in
+       pressed or released state: that isn't supported.  Determine
+       whether to generate a tab-bar button click based on DOWN_P
+       argument, not on mouse-highlight, which has no effect on tab-bar
+       display.  (Bug#47581)
+
+2021-04-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/net/shr.el (shr-insert-document): Explain why 
bidi-display-reordering
+
+2021-04-11  Gregory Heytings  <gregory@heytings.org>
+           João Távora  <joaotavora@gmail.com>
+
+       Add new icomplete-vertical-mode
+
+
+       * lisp/icomplete.el (icomplete-completions): Consider 
icomplete-vertical-mode.
+       (icomplete-vertical-mode-minibuffer-map): New map.
+       (icomplete--vertical-minibuffer-setup): New helper.
+       (icomplete-vertical-mode): New minor mode.
+
+       * doc/emacs/buffers.texi (Icomplete): Mention icomplete-vertical-mode.
+
+       * etc/NEWS: Mention icomplete-vertical-mode
+
+2021-04-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/misearch.el (multi-isearch-read-buffers): Fix last change
+
+       These are not buffers but buffer names.
+
+2021-04-10  Philipp Stephani  <phst@google.com>
+
+       * src/emacs.c (read_full): Add a few assertions.
+
+2021-04-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/cus-dep.el: Use lexical-binding
+
+2021-04-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/misearch.el: Use lexical-binding
+
+       (multi-isearch-read-buffers, multi-isearch-read-files):
+       Replace `add-to-list` with `cl-pushnew` for use on a local variable.
+
+2021-04-10  Philipp Stephani  <phst@google.com>
+
+       * src/emacs.c (load_seccomp): Add a useful assertion.
+
+       * src/emacs.c (load_seccomp): Fix condition.
+
+2021-04-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/ps-bdf.el: Use lexical-binding
+
+       * lisp/informat.el: Use lexical-binding
+
+       * lisp/loadup.el: Use lexical-binding
+
+2021-04-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/jka-compr.el: Use lexical-binding
+
+       Prefer #' to quote function names.
+
+2021-04-10  Philipp Stephani  <phst@google.com>
+
+       * etc/NEWS: Extend paragraph about &define form and backtracking
+
+2021-04-10  Alan Mackenzie  <acm@muc.de>
+
+       Convert CC Mode to lexical binding in Emacs
+
+       lisp/progmodes/cc-align.el, lisp/progmodes/cc-awk.el,
+       lisp/progmodes/cc-bytecomp.el, lisp/progmodes/cc-cmds.el,
+       lisp/progmodes/cc-defs.el, lisp/progmodes/cc-engine.el,
+       lisp/progmodes/cc-fonts.el, lisp/progmodes/cc-guess.el,
+       lisp/progmodes/cc-langs.el, lisp/progmodes/cc-menus.el,
+       lisp/progmodes/cc-mode.el, lisp/progmodes/cc-styles.el,
+       lisp/progmodes/cc-subword.el, lisp/progmodes/cc-vars.el: Mark these 
files with
+       a `lexical-binding' setting in line 1.
+
+       lisp/progmodes/cc-align.el, lisp/progmodes/cc-engine.el,
+       lisp/progmodes/cc-vars.el (c-syntactic-context, c-syntactic-element): 
Declare
+       these as special variables.
+
+       lisp/progmodes/cc-bytecomp.el (cc-bytecomp-debug-msg): prefix the 
parameter
+       ARGS with a _, and remove an `ignore' call.
+
+       lisp/progmodes/cc-cmds.el (c-where-wrt-brace-construct): Remove 
`kluge-start',
+       an unused variable.
+       (c-while-widening-to-decl-block): Add an extra parameter, which 
suppresses
+       the generation of a setting of variable `where'.
+       (c-defun-name-and-limits): Remove variable `where' from the function 
and use
+       the new argument to the previous macro.
+
+       lisp/progmodes/cc-engine.el (c-cache-to-parse-ps-state): Remove two 
unneeded
+       variables, `last' and `intermediate'.
+
+       lisp/progmodes/cc-fonts.el (c-font-lock-c++-using): Remove unused 
variable.
+
+       lisp/progmodes/cc-langs.el (c-vsemi-status-unknown-p-fn): Replace the 
doc
+       string with the more precise one from stand-alone CC Mode.
+
+       lisp/progmodes/cc-styles.el (c-set-offset): Give the `ignored' 
parameter a
+       leading _.
+
+2021-04-10  Philipp Stephani  <phst@google.com>
+
+       Add a helper binary to create a basic Secure Computing filter.
+
+       The binary uses the 'seccomp' helper library.  The library isn't
+       needed to load the generated Secure Computing filter.
+
+       * configure.ac: Check for 'seccomp' header and library.
+
+       * lib-src/seccomp-filter.c: New helper binary to generate a generic
+       Secure Computing filter for GNU/Linux.
+
+       * lib-src/Makefile.in (DONT_INSTALL): Add 'seccomp-filter' helper
+       binary if possible.
+       (all): Add Secure Computing filter file if possible.
+       (seccomp-filter$(EXEEXT)): Compile helper binary.
+       (seccomp-filter.bpf seccomp-filter.pfc): Generate filter files.
+
+       * test/src/emacs-tests.el (emacs-tests/seccomp/allows-stdout)
+       (emacs-tests/seccomp/forbids-subprocess): New unit tests.
+
+       * test/Makefile.in (src/emacs-tests.log): Add dependency on the helper
+       binary.
+
+2021-04-10  Philipp Stephani  <phst@google.com>
+
+       * src/emacs.c (load_seccomp): Fix condition.
+
+2021-04-10  Philipp Stephani  <phst@google.com>
+
+       Read file in a loop if necessary.
+
+       This allows for short reads from 'emacs_read'.
+
+       * src/emacs.c (read_full): New helper function.
+       (load_seccomp): Use it.
+
+2021-04-10  Philipp Stephani  <phst@google.com>
+
+       Add support for --seccomp command-line option.
+
+       When passing this option on GNU/Linux, Emacs installs a Secure
+       Computing kernel system call filter.  See Bug#45198.
+
+       * configure.ac: Check for seccomp header.
+
+       * src/emacs.c (usage_message): Document --seccomp option.
+       (emacs_seccomp): New wrapper for 'seccomp' syscall.
+       (load_seccomp, maybe_load_seccomp): New helper functions.
+       (main): Potentially load seccomp filters during startup.
+       (standard_args): Add --seccomp option.
+
+       * lisp/startup.el (command-line): Detect and ignore --seccomp option.
+
+       * test/src/emacs-tests.el (emacs-tests/seccomp/absent-file)
+       (emacs-tests/seccomp/empty-file)
+       (emacs-tests/seccomp/file-too-large)
+       (emacs-tests/seccomp/invalid-file-size): New unit tests.
+       (emacs-tests--with-temp-file): New helper macro.
+
+       * etc/NEWS: Document new --seccomp option.
+
+2021-04-10  Philipp Stephani  <phst@google.com>
+
+       Edebug: Disable backtracking when hitting a &define keyword.
+
+       Edebug doesn't deal well with backtracking out of definitions, see
+       Bug#41988.  Rather than trying to support this rare situation (e.g. by
+       implementing a multipass parser), prevent it by adding an implicit
+       gate.
+
+       * lisp/emacs-lisp/edebug.el (edebug--match-&-spec-op): Disable
+       backtracking when hitting a &define keyword.
+
+       * test/lisp/emacs-lisp/edebug-tests.el
+       (edebug-tests-duplicate-&define): New unit test.
+       (edebug-tests--duplicate-&define): New helper macro.
+
+       * doc/lispref/edebug.texi (Backtracking): Mention &define in the list
+       of constructs that disable backtracking.
+
+       * etc/NEWS: Document new behavior.
+
+2021-04-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/gnus/nnagent.el: Fix spurious empty line at BOB
+
+2021-04-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/edmacro.el: Use lexical-binding
+
+       (edmacro-finish-edit, edmacro-parse-keys): Use `match-string`.
+
+2021-04-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/files-x.el: Use lexical-binding
+
+2021-04-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/ps-mule.el: Use lexical-binding
+
+       (ps-mule-encode-header-string, ps-mule-begin-job): Use `pcase`.
+
+2021-04-10  Gregory Heytings  <gregory@heytings.org>
+
+       Autoload list-colors-display.
+
+       * lisp/facemenu.el (list-colors-display): Autoload, it is mentioned
+       in (info "(emacs)Colors for Faces"), and to be generally available.
+
+2021-04-10  Michael Albinus  <michael.albinus@gmx.de>
+
+       Tramp: fix location of files on W32
+
+       * lisp/net/tramp.el:
+       * lisp/net/tramp-sh.el: Use (eq system-type 'windows-nt) where 
appropriate.
+       (tramp-completion-function-alist-ssh): Fix location of files on W32.
+
+2021-04-10  Jim Porter  <jporterbugs@gmail.com>  (tiny change)
+
+       Further fix of hostname completion on MS Windows
+
+       * lisp/net/tramp.el (tramp-completion-file-name-regexp-simplified)
+       (tramp-completion-file-name-regexp-separate): Fix W32 hostname/method
+       completion for simplified and separate syntaxes (same as the previous 
change
+       to default syntax).
+
+2021-04-10  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix description of momentary message display
+
+       * doc/emacs/mini.texi (Basic Minibuffer): Update the description
+       of momentary message display while minibuffer is active.
+       (Bug#47689)
+
+2021-04-10  João Távora  <joaotavora@gmail.com>
+
+       Fail earlier if stale Flymake report functions called
+
+       If a Flymake backend calls a "stale" report function,
+       flymake--handle-report might be called for a backend function that is
+       no longer in the flymake--backend-state hash table.  This patch makes
+       that erroneous situation slightly more explicit.
+
+       * lisp/progmodes/flymake.el (flymake--handle-report): Improve
+       error reporting.
+
+2021-04-10  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Don't stop when before space or closing paren
+
+       * lisp/progmodes/elisp-mode.el (elisp-completion-at-point):
+       Don't stop when before space or closing paren (bug#47665).
+
+2021-04-09  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: fix c-where-wrt-brace-construct to cope with class declarations
+
+       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
+       of c-beginning-of-decl-1, which was removed some weeks ago, in place of 
a
+       c-syntactic-skip-backward.  Reformulate the code generally.
+
+2021-04-09  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix condition-case optimiser bug
+
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker): Don't
+       perform incorrect optimisations when a condition-case variable shadows
+       another lexical variable.
+       * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-tests--test-cases):
+       New test case.
+
+2021-04-09  Mattias Engdegård  <mattiase@acm.org>
+
+       Better compiler warning tests
+
+       These changes allow all bytecomp-tests to be run interactively.
+
+       * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp--with-warning-test)
+       (bytecomp--define-warning-file-test): Interpret any space in the
+       pattern as arbitrary whitespace to tolerate line breaks.
+       Don't abuse the expected-failure mechanism when checking
+       for the expected absence of a warning.
+       (bytecomp/*.el): Rewrite patterns to work with line breaks
+       in the middle.
+
+2021-04-09  Mattias Engdegård  <mattiase@acm.org>
+
+       Clean up bytecomp-tests.el
+
+       Now all test cases are run with both lexical and dynamic binding
+       where applicable, comparing interpreted against compiled results.
+       Previously, almost all tests were only run with dynamic binding
+       which was definitely not intended.
+
+       * test/lisp/emacs-lisp/bytecomp-tests.el
+       (byte-opt-testsuite-arith-data): Rename to bytecomp-tests--test-cases.
+       (bytecomp-check-1, bytecomp-explain-1, bytecomp-tests)
+       (bytecomp-lexbind-tests, bytecomp-lexbind-check-1)
+       (bytecomp-lexbind-explain-1): Remove.
+       (bytecomp-tests--eval-interpreted, bytecomp-tests--eval-compiled)
+       (bytecomp-tests-lexbind, bytecomp-tests-dynbind)
+       (bytecomp-tests--test-cases-lexbind-only): New.
+
+2021-04-09  Stefan Kangas  <stefan@marxist.se>
+
+       Make refer-every into obsolete alias for seq-every-p
+
+       * lisp/textmodes/refer.el (refer-every): Make into obsolete
+       function alias for seq-every-p.  Update single caller.
+
+2021-04-09  Stefan Kangas  <stefan@marxist.se>
+
+       Remove redundant #' before lambda in ibuf-*.el
+
+       * lisp/ibuf-ext.el (ibuffer-included-in-filters-p)
+       (ibuffer-included-in-filter-p-1, ibuffer-do-kill-lines)
+       (ibuffer-jump-to-buffer, ibuffer-mark-on-buffer)
+       (ibuffer-mark-by-name-regexp, ibuffer-mark-by-mode-regexp)
+       (ibuffer-mark-by-content-regexp, ibuffer-mark-by-mode)
+       (ibuffer-mark-modified-buffers, ibuffer-mark-unsaved-buffers)
+       (ibuffer-mark-dissociated-buffers, ibuffer-mark-help-buffers)
+       (ibuffer-mark-compressed-file-buffers, ibuffer-mark-old-buffers)
+       (ibuffer-mark-special-buffers, ibuffer-mark-read-only-buffers)
+       (ibuffer-mark-dired-buffers, ibuffer-do-occur):
+       * lisp/ibuf-macs.el (ibuffer-save-marks, define-ibuffer-sorter)
+       (define-ibuffer-op): Remove redundant #' before lambda.
+
+2021-04-09  Stefan Kangas  <stefan@marxist.se>
+
+       Don't preserve window-line in tabulated-list-print
+
+       * lisp/emacs-lisp/tabulated-list.el (tabulated-list-print): Don't
+       try to preserve window-line.  (Bug#42747)
+
+2021-04-09  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in winner.el
+
+       * lisp/winner.el: Use lexical-binding.  Remove redundant :group
+       args.
+       (winner-set, winner-mode-map): Quote function symbols as such.
+
+2021-04-09  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Merge branch 'vhdl-mode-lexbind' into trunk
+
+2021-04-09  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in cmuscheme.el
+
+       * lisp/cmuscheme.el: Use lexical-binding.  Doc fixes.  Remove
+       redundant :group args.  Quote function symbols as such.
+
+2021-04-09  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/progmodes/cmacexp.el: Use lexical-binding.
+
+2021-04-09  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in foldout.el
+
+       * lisp/foldout.el: Use lexical-binding.  Doc and formatting fixes.
+       Quote function symbols as such.
+
+2021-04-09  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in loadhist.el and add tests
+
+       * lisp/loadhist.el: Use lexical-binding.
+       * test/lisp/loadhist-tests.el: New file.
+
+2021-04-09  Mattias Engdegård  <mattiase@acm.org>
+
+       Self-TCO in `condition-case` error handlers
+
+       * lisp/emacs-lisp/cl-macs.el (cl--self-tco): Recognise
+       `condition-case` handlers as being in the tail position.
+       * test/lisp/emacs-lisp/cl-macs-tests.el (cl-macs--labels):
+       Extend test.
+
+2021-04-09  Jim Porter  <jporterbugs@gmail.com>  (tiny change)
+
+       Fix hostname completion on MS Windows
+
+       * lisp/net/tramp.el (tramp-completion-file-name-regexp-default):
+       Handle volume letter being added to paths for file name completion on 
W32
+       systems.  This fixes hostname (and method) autocomplete on W32.
+
+2021-04-09  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * test/lisp/shadowfile-tests.el: Fix recent test failures
+
+       (shadow--tests-cleanup): `shadow-hashtable` is now a hash table (duh!).
+
+2021-04-09  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/vhdl-mode.el: Use lexical-binding
+
+       Use #' to quote function names to get better compiler diagnostics.
+       Wrap some lines to avoid arguments "hidden" in positions that are easy
+       to misread.
+       Prefix unused arguments with a semi-colon to silence compiler warnings.
+       Fix a few comments that used ;;; even though they were not headings.
+
+       (vhdl-emacs-21): Delete variable.
+       Replace all uses with (not (featurep 'xemacs)) instead since `vhdl-mode`
+       has been incompatible with Emacs<21 for more than 10 years already.
+       (vhdl-prepare-search-1): Add Edebug declaration.
+       (vhdl-prepare-search-2): Add Edebug declaration and use
+       `with-syntax-table`.
+       (vhdl-visit-file): Add Edebug and indentation declaration.
+       Move the bulk of the code to a function for easier debugging.
+       (vhdl--visit-file): New function extracted from `vhdl-visit-file`.
+       Be careful not to modify syntax tables in unrelated buffers.
+       (vhdl-speedbar-refresh): Remove unused var `pos`.
+       (vhdl-backward-sexp): Remove unused var `last-forward`.
+       (vhdl-electric-tab, vhdl-minibuffer-tab, vhdl-line-expand):
+       Rename arg to avoid conflict with the `prefix-arg`
+       global variable.
+       (vhdl-align-region-1): Remove unused var `indent`.
+       (vhdl-character-to-event): Actually give a body to that poor function.
+       (vhdl-template-context): Remove unused vars `entity-exists` and 
`string`.
+       (vhdl-template-group): Remove unused var `start`.
+       (vhdl-template-argument-list): Remove unused var `start`.
+       (vhdl-port-paste-context-clause): Remove unused var `margin`.
+       (vhdl-port-paste-testbench): Remove unused var `source-buffer`.
+       (vhdl-hs-minor-mode): Declare function `hs-hide-all`.
+       (vhdl-get-hierarchy): Rename arguments `ent-alist`, `conf-alist`, and
+       `conf-key` and bind those dynamically scoped var via `let` instead
+       since arguments can't be dynamically scoped.
+       (vhdl-speedbar-insert-hierarchy, 
vhdl-compose-configuration-architecture):
+       Same thing with arguments `ent-alist` and `conf-alist`.
+       (vhdl-cache-version): Declare variable.
+       (speedbar-expand-line, speedbar-edit-line): Declare functions.
+       (vhdl-speedbar-update-current-unit): Declare before first use.
+       (vhdl-compose-new-component): Remove unused var `project`.
+       (lazy-lock-minimum-size): Declare variable.
+       (vhdl-submit-bug-report): Declare variable 
`reporter-prompt-for-summary-p`.
+
+2021-04-09  Stefan Kangas  <stefan@marxist.se>
+
+       Revert "Load all generic-x.el modes unconditionally"
+
+       This reverts commit 0161c9df6edc02db6bd8871b00df522dd0699157.
+
+2021-04-09  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/shadowfile.el: Use lexical-binding
+
+       Delete redundant `:group` args.
+
+       (shadow-hashtable): Make it an actual hash-table.
+       (shadow-shadows-of, shadow-invalidate-hashtable): Adjust accordingly.
+       (shadow-insert-var): Strength-reduce `eval` to `symbol-value`.
+       (shadow--save-buffers-kill-emacs): New function extracted from
+       `shadow-save-buffers-kill-emacs`.
+       (shadow-save-buffers-kill-emacs): Use it and use 
`save-buffers-kill-emacs`.
+       (shadow-initialize, shadowfile-unload-function):
+       Use `advice-add/remove` rather than override `save-buffers-kill-emacs`
+       with `defalias`.
+
+2021-04-09  Stefan Kangas  <stefan@marxist.se>
+
+       Remove redundant #' before lambda in {calendar,erc,mh-e}/*.el
+
+       * lisp/calendar/icalendar.el (icalendar--get-most-recent-observance):
+       * lisp/calendar/parse-time.el (parse-time-rules):
+       * lisp/erc/erc-dcc.el (pcomplete/erc-mode/DCC):
+       * lisp/erc/erc-track.el (erc-modified-channels-display):
+       * lisp/erc/erc.el (erc-toggle-debug-irc-protocol)
+       (erc-cmd-IGNORE, erc-cmd-JOIN, erc-default-server-handler)
+       (erc-banlist-update):
+       * lisp/mh-e/mh-search.el (mh-search, mh-mairix-convert-to-sop*)
+       (mh-index-create-sequences):
+       * lisp/mh-e/mh-thread.el (mh-toggle-threads, mh-thread-generate)
+       (mh-thread-prune-containers, mh-thread-sort-containers):
+       * lisp/mh-e/mh-utils.el (mh-sub-folders): Remove redundant #' before
+       lambda.
+
+2021-04-08  Gregory Heytings  <gregory@heytings.org>
+
+       Terminate isearch when point has moved to another buffer
+
+       * lisp/isearch.el (isearch-post-command-hook): Terminate isearch
+       when the command just executed has moved point to another buffer.
+       https://lists.gnu.org/archive/html/emacs-devel/2021-04/msg00309.html
+
+2021-04-08  Gregory Heytings  <gregory@heytings.org>
+
+       User option to move to another match when changing direction in isearch.
+
+       * lisp/isearch.el (isearch-direction-change-changes-match):
+       New user option (bug#47599).
+       (isearch-repeat): Use the new option.
+       (isearch-repeat-forward, isearch-repeat-backward): Adapt to the
+       new option.
+
+       * etc/NEWS: Mention the new user option.
+
+       * doc/emacs/search.texi: Document the new user option.
+
+2021-04-08  Juri Linkov  <juri@linkov.net>
+
+       * lisp/repeat.el (repeat-post-hook): Check for prefix-arg.
+
+       This is instead of checking for a list of argument-related commands
+       that set prefix-arg anyway.
+
+2021-04-08  Juri Linkov  <juri@linkov.net>
+
+       * lisp/repeat.el (repeat-post-hook): Skip repeating in minibuffer 
(bug#47566).
+
+       (repeat-map)<defvar>: Add docstring.
+
+2021-04-08  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/vhdl-mode.el: Use progress-reporter
+
+       This was actually prompted by a backward compatibility problem
+       (because of the use of Emacs-27's `time-convert`).  The new code
+       seems to work fine in Emacs-25.
+       It also fixes a minor bug that made the echo area messages of
+       `vhdl-indent-region` compete with those of `indent-region`.
+
+       (vhdl-progress-info): Delete variable.
+       (vhdl--progress-reporter): New var to replace it.
+       (vhdl-update-progress-info): Delete function.
+       (vhdl-indent-line): Call progress-reporter-update instead.
+       (vhdl-indent-region): Make it an obsolete alias of `indent-region`.
+       Change all users.
+       (vhdl-align-region-groups, vhdl-align-region, vhdl-fix-case-region-1):
+       Use `make-progress-reporter` and `progress-reporter-update`.
+
+2021-04-08  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/array.el: Use lexical-binding
+
+2021-04-08  Michael Albinus  <michael.albinus@gmx.de>
+
+       * doc/misc/tramp.texi (Frequently Asked Questions): New item about 
recentf.
+
+2021-04-08  Michael Albinus  <michael.albinus@gmx.de>
+
+       Revert use of powershell in Tramp, there are collateral damages
+
+       * lisp/net/tramp-sh.el (tramp-methods) <sshx, scpx>: Fix quoting
+       for MS Windows.
+       (tramp-connection-properties): Don't set "encoding-shell".
+       (tramp-actions-before-shell): Remove `tramp-no-job-control-regexp'.
+       (tramp-maybe-open-connection): Revert changes for "encoding-shell".
+
+       * lisp/net/tramp.el (tramp-no-job-control-regexp): Remove.
+
+2021-04-07  Alan Third  <alan@idiocy.org>
+
+       Remove hardcoded gcc version
+
+       * configure.ac: Use 'find' to find the brew installed libgccjit libs
+       instead of a hardcoded path.
+
+2021-04-07  Juri Linkov  <juri@linkov.net>
+
+       Don't set isearch-success in isearch-wrap functions
+
+       * lisp/comint.el (comint-history-isearch-wrap):
+       * lisp/simple.el (minibuffer-history-isearch-wrap):
+       Don't set isearch-success to t, so isearch-repeat won't skip the
+       beginning of the wrapped match with (forward-char (if isearch-forward 1 
-1)).
+
+2021-04-07  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix crash on MS-Windows caused by recent changes
+
+       * src/pdumper.c (dump_do_dump_relocation): Don't use
+       expand-file-name, as this crashes on MS-Windows.  Use
+       file_access_p instead of emacs_fopen.
+
+2021-04-07  Andrea Corallo  <akrl@sdf.org>
+
+       Improve some docstring in comp.el
+
+       * lisp/emacs-lisp/comp.el (comp--native-compile)
+       (batch-native-compile, batch-byte-native-compile-for-bootstrap):
+       Improve docstring.
+
+2021-04-07  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       2f5f30671a (origin/emacs-27) Fix broken links in autorevert.el
+       673c02f6d0 * lisp/international/ja-dic-cnv.el (skkdic-convert): Doc fix.
+
+2021-04-07  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       3ec93bb7c2 Improve doc strings in replace.el
+
+2021-04-07  Stefan Kangas  <stefan@marxist.se>
+
+       Clarify obsoletion messages for easy-menu-{add,remove}
+
+       * lisp/emacs-lisp/easymenu.el (easy-menu-remove, easy-menu-add):
+       Clarify obsoletion messages.
+
+2021-04-07  Stefan Kangas  <stefan@marxist.se>
+
+       Update whois-server-tld
+
+       * lisp/net/net-utils.el (whois-server-tld): Update and add some
+       missing entries.
+
+2021-04-07  Andrea Corallo  <akrl@sdf.org>
+
+       Move gitlab-ci native-comp tests into '/test/infra/gitlab-ci.yml'
+
+       * .gitlab-ci.yml: Fix incorrect b8d3ae78c5 merge.
+       * test/infra/gitlab-ci.yml (test-native-bootstrap-speed0)
+       (test-native-bootstrap-speed1, test-native-bootstrap-speed2): Move
+       from .gitlab-ci.yml.
+
+2021-04-07  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix mistakes in bytecomp-tests
+
+       * test/lisp/emacs-lisp/bytecomp-tests.el
+       (byte-opt-testsuite-arith-data): Fix typos and avoid errors that made
+       the tests less powerful than intended.
+
+2021-04-07  Alan Third  <alan@idiocy.org>
+
+       Fix install with NS app bundle
+
+       * configure.ac: Set up CFLAGS and LDFLAGS to find a Homebrew
+       installation of libgccjit.
+       * Makefile.in (ELN_DESTDIR): Set to the app bundle resource dir when
+       required.
+       (install-eln): macOS install doesn't support the -D flag, so make the
+       directories separately.
+
+2021-04-07  Andrea Corallo  <akrl@sdf.org>
+
+       Makefile.in (BIN_DESTDIR, src): Fix 'BIN_DESTDIR' on MacOS.
+
+2021-04-07  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Add explicit support for C-g or ESC ESC ESC after keymap prompt
+
+       * lisp/progmodes/project.el (project-switch-project):
+       Add explicit support for C-g or ESC ESC ESC after keymap prompt
+       (bug#47620).
+
+2021-04-07  Dario Gjorgjevski  <dario.gjorgjevski+git@gmail.com>
+
+       Allow complex key bindings in project-switch-project
+
+       * lisp/progmodes/project.el (project-switch-project): Replace
+       read-event with an overriding local map and read-key-sequence to allow
+       for complex key bindings to be read (bug#47620).
+
+2021-04-06  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/find-file.el: Make the commands oblivious to mouse/non-mouse
+
+       (ff-find-other-file): Add `event` argument.
+       (ff-find-other-file-other-window): Rename from
+       `ff-mouse-find-other-file-other-window` and use this new argument.
+       (ff-mouse-find-other-file, ff-mouse-find-other-file-other-window):
+       Make them obsolete aliases.
+       (ff-upcase-p): Remove unused `start` and `end` arguments and
+       simplify accordingly.
+
+2021-04-06  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/find-file.el: Use lexical-binding
+
+       Remove unused `:group` args.  Prefer #' to quote function.
+
+       (ff-special-constructs, ff-find-the-other-file, ff-get-file-name)
+       (ff-list-replace-env-vars, ff-cc-hh-converter): Use `match-string`.
+       (modula2-other-file-alist): Tighten regexps.
+       (ff-get-other-file, ff-find-other-file): Use dynamic scoping.
+       (ff-find-the-other-file): Minor simplification.
+       (ff-other-file-name): Delete unused function.
+       (ff-string-match): Don't let-bind `case-fold-search` if not needed.
+       (ff-basename): Make it an obsolete alias for `file-name-nondirectory`.
+       (ff-switch-file): Minor simplification.
+       (ff-list-replace-env-vars): Use [:alnum:].
+       (ff-upcase-p): Use [:upper:]
+       (ff-cc-hh-converter): Use [:upper:] and [:lower:].
+
+2021-04-06  Andrea Corallo  <akrl@sdf.org>
+
+       * .gitlab-ci.yml: Move native-comp tests into 'slow' stage.
+
+2021-04-06  Juri Linkov  <juri@linkov.net>
+
+       * lisp/isearch.el (isearch-wrap-pause): New defcustom (bug#47599).
+
+       (isearch-repeat): Use it.
+       (isearch-search): Don't ding when isearch-wrap-pause is no-ding.
+
+2021-04-06  Andrea Corallo  <akrl@sdf.org>
+
+       * src/pdumper.c (dump_do_dump_relocation): Use `expand-file-name'.
+
+2021-04-06  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/ps-mode.el: Use lexical-binding
+
+       And prefer #' to quote function names.
+
+2021-04-06  Damien Cassou  <damien@cassou.me>
+
+       Fix broken links in autorevert.el
+
+       * lisp/autorevert.el (global-auto-revert-non-file-buffers):
+       Fix broken links.  (Bug#47621)
+
+2021-04-06  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix Bug#47601 in Tramp
+
+       * lisp/net/tramp-sh.el (tramp-sh-file-name-handler-alist):
+       Use `tramp-handle-file-newer-than-file-p'.  (Bug#47601)
+       (tramp-sh-handle-file-newer-than-file-p, tramp-run-test2): Remove.
+
+2021-04-06  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/msb.el: Use lexical-binding
+
+       Remove redundant `:group` args.
+       (msb--add-to-menu): Strength-reduce `eval` to `symbol-value` and use 
`push`.
+       (msb--create-sort-item): Strength-reduce `eval` to `symbol-value`.
+       (msb-menu-bar-update-buffers): Replace `(lambda...) with a proper 
closure.
+
+2021-04-06  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/hippie-exp.el: Use lexical-binding
+
+       Remove redundant `:group` args.
+       (make-hippie-expand-function): Turn it into a function returning
+       a closure.
+       (try-expand-all-abbrevs): Strength-reduce `eval` to `symbol-value`
+       and use `abbrev-table-p` rather than `vectorp`.
+
+2021-04-05  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/comint.el: Fix understickiness of non-comint properties
+
+       When a third party package adds properties to the prompt they don't
+       necessarily want to be `read-nonsticky` (e.g. for the 
`cursor-intangible`
+       property), so replace the catchall `rear-nonsticky t` with an
+       actual list of the properties that we want to be `rear-nonsticky`.
+
+       (comint-send-input, comint-output-filter): Don't mark
+       all properties as non-sticky.
+
+2021-04-05  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el: Add repeat-map keymaps.
+
+       * lisp/tab-bar.el (tab-bar-switch-repeat-map): New keymap used for
+       'tab-next' and 'tab-previous'.
+       (tab-bar-move-repeat-map): New keymap used for 'tab-move'.
+       https://lists.gnu.org/archive/html/emacs-devel/2021-03/msg01103.html
+
+2021-04-05  Juri Linkov  <juri@linkov.net>
+
+       * lisp/repeat.el (repeat-keep-prefix): New defcustom.
+
+       * lisp/repeat.el (repeat-map): New autoloaded global variable.
+       (repeat-post-hook): Use 'repeat-map' when non-nil
+       and reset it to nil afterwards.
+       (repeat-post-hook): Keep the current prefix when
+       'repeat-keep-prefix' is non-nil.
+
+       * lisp/window.el (other-window-repeat-map): Add "O" that sets
+       'repeat-map' to 'other-window-repeat-map' before calling
+       '(other-window -1)'.
+
+       https://lists.gnu.org/archive/html/emacs-devel/2021-03/msg01387.html
+
+2021-04-05  Juri Linkov  <juri@linkov.net>
+
+       * lisp/repeat.el (repeat-post-hook): Fix key lookup.
+
+       * lisp/repeat.el (repeat-post-hook): Rename let-bound repeat-map to 
rep-map.
+       Define let-bound prefix-command-p.  Use lookup-key with
+       this-single-command-keys instead of last-command-event.
+       Don't show message when typing prefix keys.
+       https://lists.gnu.org/archive/html/emacs-devel/2021-04/msg00083.html
+
+2021-04-05  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into native-comp
+
+2021-04-05  Andrea Corallo  <akrl@sdf.org>
+
+       Introduce `comp-file-preloaded-p'
+
+       * src/comp.c (syms_of_comp): Define `comp-file-preloaded-p'.
+       (Fcomp_el_to_eln_filename): Account for `comp-file-preloaded-p'.
+
+2021-04-05  Michael Albinus  <michael.albinus@gmx.de>
+
+       Use powershell for Tramp on MS Windows
+
+       * lisp/net/tramp-sh.el (tramp-use-ssh-controlmaster-options):
+       Nil on MS Windows.
+       (tramp-connection-properties): Add "encoding-shell".
+       (tramp-maybe-open-connection): Use it.  Change exit handling.
+       (tramp-actions-before-shell): Add `tramp-no-job-control-regexp'.
+
+       * lisp/net/tramp.el (tramp-methods): Adapt docstring.
+       (tramp-no-job-control-regexp): New defcustom.
+       (tramp-get-debug-buffer): Set coding system.
+
+2021-04-05  Dario Gjorgjevski  <dario.gjorgjevski+git@gmail.com>
+
+       Do not search the global keymap in project--keymap-prompt
+
+       * lisp/progmodes/project.el: (project--keymap-prompt) Pass
+       project--keymap-prompt as a list to where-is-internal so that the
+       global keymap is not searched at all (bug#47501).
+
+2021-04-05  Lin Sun  <lin.sun@zoom.us>
+
+       Don't call `image-toggle-display-text' when toggling
+
+       *lisp/image-mode.el (image-mode-to-text): Do not call the
+       image-toggle-display-text twice when toggle image display (bug#47521).
+
+2021-04-05  Utkarsh Singh  <utkarsh190601@gmail.com>  (tiny change)
+
+       Fix cd to directories called "eshell" in eshell
+
+       * lisp/eshell/em-script.el (eshell-script-initialize): Allow
+       changing directory to directories called "eshell" (bug#47547).
+
+2021-04-05  Glenn Morris  <rgm@gnu.org>
+
+       * lisp/international/ja-dic-cnv.el (skkdic-convert): Doc fix.
+
+2021-04-05  Stefan Kangas  <stefan@marxist.se>
+
+       Remove redundant #' before lambda in calc/*.el
+
+       * lisp/calc/calc-alg.el (math-defsimplify):
+       * lisp/calc/calc-ext.el (math-defintegral, math-defintegral-2):
+       * lisp/calc/calc-prog.el (math-do-arg-check): Remove redundant #'
+       before lambda.
+
+2021-04-05  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/shadowfile.el (cl-lib): Revert removing require.
+
+       * lisp/pcomplete.el: Remove aliases commented out for 20 years.
+
+2021-04-05  Stefan Kangas  <stefan@marxist.se>
+
+       Remove local uniquify functions in favour of seq-uniq
+
+       * lisp/emacs-lisp/seq.el (seq-uniq): Add autoload cookie.
+       * lisp/pcomplete.el: (pcomplete-uniquify-list): Use seq-uniq.
+       * lisp/eshell/esh-util.el (eshell-uniqify-list)
+       (eshell-uniquify-list):
+       * lisp/nxml/rng-util.el (rng-uniquify-equal):
+       * lisp/progmodes/idlwave.el (idlwave-uniquify):
+       * lisp/textmodes/artist.el (artist-uniq): Make into obsolete
+       function aliases for seq-uniq.  Update callers.
+       * lisp/nxml/rng-util.el (rng-uniquify-eq): Make obsolete in favor
+       of seq-uniq.  Update callers.
+
+2021-04-05  Stefan Kangas  <stefan@marxist.se>
+
+       Obsolete local set difference functions in favor of seq-difference
+
+       * lisp/emacs-lisp/seq.el (seq-difference): Add autoload cookie.
+       * lisp/gnus/gnus-range.el (gnus-set-difference):
+       * lisp/gnus/spam.el (spam-set-difference): Make obsolete in favor
+       of seq-difference.  Update callers.
+
+2021-04-05  Stefan Kangas  <stefan@marxist.se>
+
+       Obsolete local list functions in shadowfile.el
+
+       * lisp/shadowfile.el (shadow-union): Make obsolete in favour of
+       cl-union.  Update callers.
+       (shadow-find): Make into obsolete function alias for seq-find.
+       Update callers.
+       (cl-lib): Remove unnecessary require.
+
+2021-04-05  Michael Albinus  <michael.albinus@gmx.de>
+
+       * test/infra/Dockerfile.emba (emacs-gnustep): Do not run parallel make.
+
+2021-04-05  Stefan Kangas  <stefan@marxist.se>
+
+       Remove code commented out since 1995 from ediff-util.el
+
+       * lisp/vc/ediff-util.el (ediff-load-hook): Remove code commented out
+       since the file was added in 1995.
+
+2021-04-05  Stefan Kangas  <stefan@marxist.se>
+
+       Replace local intersection functions with seq-intersection
+
+       * lisp/doc-view.el (doc-view-intersection):
+       * lisp/gnus/gnus-range.el (gnus-intersection):
+       * lisp/htmlfontify.el (hfy-interq):
+       * lisp/loadhist.el (file-set-intersect):
+       * lisp/mail/smtpmail.el (smtpmail-intersection): Make obsolete in
+       favor of seq-intersection.  Update all callers.
+
+       * lisp/url/url-dav.el (url-intersection): Redefine as obsolete
+       function alias for seq-intersection.  Update callers.
+
+       * lisp/mpc.el (mpc-intersection, mpc-cmd-list, mpc-reorder):
+       Use seq-intersection.
+
+2021-04-05  Stefan Kangas  <stefan@marxist.se>
+
+       Make ediff-copy-list alias obsolete
+
+       * lisp/vc/ediff-mult.el (ediff-intersect-directories)
+       (ediff-get-directory-files-under-revision): Don't use above
+       obsolete alias.
+       * lisp/vc/ediff-util.el (ediff-copy-list): Make alias obsolete.
+
+2021-04-05  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/htmlfontify.el (hfy-triplet-regex): Use rx.
+
+       * etc/NEWS: Add entry for new SVG icons in customize.
+
+2021-04-05  Glenn Morris  <rgm@gnu.org>
+
+       * doc/misc/Makefile.in (echo-sources): Make it not the first target.
+
+2021-04-05  Glenn Morris  <rgm@gnu.org>
+
+       Regenerate texi-from-org if ox-texinfo.el changes
+
+       * doc/misc/Makefile.in (top_srcdir): New, set by configure.
+       (emacs): Set load-prefer-newer.
+       (org_template): Make output depend on ox-texinfo.el.
+
+2021-04-05  Glenn Morris  <rgm@gnu.org>
+
+       Regenerate semantic grammars if the generating code changes
+
+       * admin/grammars/Makefile.in (emacs): Set load-prefer-newer.
+       (grammar_bovine, grammar_wisent): New variables.
+       (${bovinedir}/%-by.el, ${bovinedir}/scm-by.el)
+       (${cedetdir}/semantic/%-wy.el, ${wisentdir}/%-wy.el)
+       (${wisentdir}/javat-wy.el, ${cedetdir}/srecode/srt-wy.el):
+       Depend on the source file for the generating function.
+       * lisp/cedet/semantic/bovine/grammar.el (bovine--make-parser-1):
+       * lisp/cedet/semantic/wisent/grammar.el (wisent--make-parser-1):
+       Force generation of the output file.  The previous "is the output
+       newer than the input" failed to account for changes in the
+       generation code itself.  Force so we can let make figure it out.
+
+2021-04-04  Andrea Corallo  <akrl@sdf.org>
+
+       * src/comp.c (fixup_eln_load_path): Fix parameter name.
+
+       * src/comp.c (Fcomp_el_to_eln_filename): Fix doc.
+
+       * lisp/emacs-lisp/comp.el (comp-clean-up-stale-eln): Clean-up all .eln 
dirs.
+
+2021-04-04  Andrea Corallo  <akrl@sdf.org>
+
+       Output native compiled preloaded files into the 'preloaded' subfolder
+
+       * src/comp.c (fixup_eln_load_path): Account the fact that the
+       file can be dumped in the 'preloaded' subfolder.
+       * lisp/loadup.el: Likewise.
+       * src/lread.c (maybe_swap_for_eln1): New function.
+       (maybe_swap_for_eln): Handle 'preloaded' subfolder.
+       * src/Makefile.in (LISP_PRELOADED): Export preloaded files.
+
+2021-04-04  Harald Jörg  <haj@posteo.de>
+
+       cperl-mode: Don't reposition the window when writing messages
+
+       * lisp/progmodes/cperl-mode.el (cperl-find-pods-heres): Avoid
+       printing messages while point is off-screen (Bug#47549).
+
+2021-04-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify the doc string of insert-image
+
+       * lisp/image.el (insert-image): Mention the effect of a whitespace
+       image (bug#47240).
+
+2021-04-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Work around issue with (setq Man-notify-method 'aggressive)
+
+       * lisp/man.el (Man-bgproc-sentinel): Check that the window still
+       exists before trying to select it (bug#38164).
+
+2021-04-04  Glenn Morris  <rgm@gnu.org>
+
+       Make maintainer-clean delete generated files, as per standards
+
+       These are generated files that were once kept in the repository.
+       When they were removed from the repository, as a half-way measure
+       they were only deleted by "extraclean", but this was never
+       necessary and was not a proper use of that rule.
+       * admin/charsets/Makefile.in (gen-clean): New phony target.
+       (maintainer-clean): Delete generated files.
+       * admin/grammars/Makefile.in (gen-clean): New phony target.
+       (maintainer-clean): Delete generated files.
+       * admin/unidata/Makefile.in (gen-clean): New phony target.
+       (maintainer-clean): Delete generated files.
+       * leim/Makefile.in (gen-clean): New phony target.
+       (maintainer-clean): Delete generated files.
+       * GNUmakefile: Doc fix.
+
+2021-04-04  Alan Third  <alan@idiocy.org>
+
+       Work around librsvg bug (bug#47074)
+
+       Librsvg <= 2.40 has restrictions on how certain numbers can be run
+       together in path elements which do not match the SVG spec.
+
+       * etc/images/checkbox-mixed.svg:
+       * etc/images/checked.svg:
+       * etc/images/radio-checked.svg:
+       * etc/images/unchecked.svg: Separate problem numbers.
+       * etc/images/radio-mixed.svg: Separate problem numbers and color and
+       font-weight data.
+
+2021-04-04  Michael Albinus  <michael.albinus@gmx.de>
+
+       * test/lisp/filenotify-tests.el (file-notify--test-timeout):
+
+       Change timing on emba.
+
+2021-04-04  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix MS-Windows build
+
+       * src/image.c: (init_svg_functions) [WINDOWSNT]: Define and load
+       rsvg_handle_set_stylesheet from the DLL for librsvg > 2.48.
+       (lookup_image): Use xmalloc.
+
+2021-04-04  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in hilit-chg.el
+
+       * lisp/hilit-chg.el: Use lexical-binding.  Remove redundant :group
+       args.  Doc and formatting fixes.
+       (highlight-changes-mode, highlight-changes-visible-mode):
+       Use keyword arguments.
+       (hilit-chg-display-changes, highlight-changes-rotate-faces):
+       Quote function symbols as such.
+       (hilit-x, hilit-y, hilit-e): Define variables on top-level to
+       silence the byte-compiler.
+       (highlight-markup-buffers): Improve message format.
+
+2021-04-04  Stefan Kangas  <stefan@marxist.se>
+
+       Remove redundant #' before lambda in tests
+
+       * test/lisp/electric-tests.el (save-electric-modes)
+       (inhibit-in-mismatched-string-inside-ruby-comments)
+       (inhibit-in-mismatched-string-inside-c-comments, js-mode-braces)
+       (js-mode-braces-with-layout)
+       (js-mode-braces-with-layout-and-indent, autowrapping-1)
+       (autowrapping-2, autowrapping-3, autowrapping-4, autowrapping-5)
+       (autowrapping-6, autowrapping-7):
+       * test/lisp/progmodes/xref-tests.el
+       (xref--xref-file-name-display-is-relative-to-project-root):
+       * test/src/thread-tests.el (threads-signal-early)
+       (threads-signal-main-thread): Remove redundant #' before lambda.
+
+2021-04-04  Alan Third  <alan@idiocy.org>
+
+       Fix warnings in image.c
+
+       * src/image.c (svg_load_image): Fix types and move declaration of
+       'css' to the top of the function.
+
+2021-04-04  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix unexec compilation
+
+       * src/pdumper.c (thaw_hash_tables): Now conditioned by
+       HAVE_PDUMPER.
+       (init_pdumper_once): No-op unless HAVE_PDUMPER.  Reported by
+       Nikolay Kudryavtsev <nikolay.kudryavtsev@gmail.com>.
+
+2021-04-04  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix recent changes regarding frame-scale-factor
+
+       * src/frame.c (Fframe_scale_factor): Make more robust and avoid
+       compiler warning while at that.  Doc fix.
+
+2021-04-04  İ. Göktuğ Kayaalp  <self@gkayaalp.com>
+
+       Fix build error in frame.h on non-NS
+
+       * src/frame.h (FRAME_SCALE_FACTOR): Fix syntax of macro in
+       previous change.
+
+2021-04-04  Alan Third  <alan@idiocy.org>
+
+       Make new SVG widgets match character height (bug#47074)
+
+       * etc/images/checkbox-mixed.svg:
+       * etc/images/checked.svg:
+       * etc/images/radio-checked.svg:
+       * etc/images/radio-mixed.svg:
+       * etc/images/radio.svg:
+       * etc/images/unchecked.svg: Use viewBox and set height to 1em.
+
+2021-04-04  Alan Third  <alan@idiocy.org>
+
+       Set CSS for SVG files
+
+       * src/dispextern.h (struct image): Add font details required for the 
CSS.
+       * src/image.c (free_image): Free the font family string.
+       (search_image_cache):
+       (uncache_image): Make image caching understand the font details.
+       (lookup_image): Handle the font details when generating the image and
+       looking up the cache.
+       (svg_css_length_to_pixels): Handle 'em' when we know the font size.
+       (svg_load_image): Generate the CSS and apply it to the SVG.
+       (enum svg_keyword_index):
+       (svg_format):
+       (syms_of_image): Add ':css' attribute.
+       * doc/lispref/display.texi (SVG Images): Add details of new svg image
+       attributes.
+
+2021-04-04  Alan Third  <alan@idiocy.org>
+
+       Fix NSTRACE failure
+
+       * src/nsterm.m ([EmacsSurface getContext]): Remove unneeded '@' symbol.
+
+2021-04-04  Alan Third  <alan@idiocy.org>
+
+       Implement frame-scale-factor
+
+       * src/frame.c (Fframe_scale_factor): New function.
+       (syms_of_frame): Add frame-scale-factor.
+       * src/frame.h: Add FRAME_SCALE_FACTOR.
+       * src/image.c: Move FRAME_SCALE_FACTOR to frame.h.
+
+2021-04-03  Stefan Kangas  <stefan@marxist.se>
+
+       Add SVG icons for customize buffers
+
+       * etc/images/checkbox-mixed.svg:
+       * etc/images/checked.svg:
+       * etc/images/down.svg:
+       * etc/images/left.svg:
+       * etc/images/radio-checked.svg:
+       * etc/images/radio-mixed.svg:
+       * etc/images/radio.svg:
+       * etc/images/right.svg:
+       * etc/images/unchecked.svg:
+       * etc/images/up.svg: New files from the Adwaita Icon Theme (made by
+       the GNOME project).  The background color was changed from gray to
+       none to use the same colors as the current face instead.  (Bug#47074)
+       * etc/images/README: Add license information for the above new files.
+       * lisp/wid-edit.el (widget-image-conversion): Prefer SVG if it exists.
+       (radio-button): Rename radio buttons to "radio-checked" and
+       "radio".  These files did not exist before.
+
+2021-04-03  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/vcursor.el: Use lexical-binding
+
+       Remove redundant `:group` args.
+       (vcursor): Remove unused var declaration.
+
+2021-04-03  Michael Albinus  <michael.albinus@gmx.de>
+
+       * lisp/net/tramp-sh.el (tramp-sh-handle-insert-directory):
+
+       Fix code finding //DIRED//.
+
+2021-04-03  Michael Albinus  <michael.albinus@gmx.de>
+
+       * test/lisp/filenotify-tests.el (file-notify--test-timeout): Change 
timing.
+
+2021-04-03  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve doc strings in replace.el
+
+       * lisp/replace.el (occur, list-matching-lines-prefix-face)
+       (list-matching-lines-jump-to-current-line): Doc fixes.
+
+2021-04-03  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/pixel-scroll.el: Use lexical-binding.
+
+2021-04-03  Stefan Kangas  <stefan@marxist.se>
+
+       Replace two functions with seq-subseq
+
+       * lisp/emacs-lisp/seq.el (seq-subseq): Add autoload cookie.
+       * lisp/eshell/esh-util.el (eshell-sublist): Redefine using seq-subseq
+       and make obsolete.  Update callers.
+       * lisp/wid-edit.el (widget-sublist): Redefine as obsolete function
+       alias for seq-subseq.  Update callers.
+
+2021-04-03  Stefan Kangas  <stefan@marxist.se>
+
+       Remove redundant #' before lambda in eshell/*.el
+
+       * lisp/eshell/em-dirs.el (eshell-dirs-initialize):
+       * lisp/eshell/em-pred.el (eshell-predicate-alist)
+       (eshell-modifier-alist):
+       * lisp/eshell/em-script.el (eshell-script-initialize):
+       * lisp/eshell/eshell.el (eshell-command): Remove redundant #' before
+       lambda.
+
+2021-04-03  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/simula.el: Use lexical-binding
+
+       (simula-tab-always-indent): Mark as obsolete.
+       (simula-mode-map): Don't bind TAB.
+       (simula-indent-command): Mark as obsolete.
+       (hilit-set-mode-patterns): Remove obsolete support for hilit19.
+       (simula-mode-syntax-table): Move initialization code into the 
declaration.
+
+2021-04-03  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in recentf.el
+
+       * lisp/recentf.el: Use lexical-binding.  Doc fix.
+       (recentf-save-file): Strength reduce 'eval' to 'symbol-value'.
+       (recentf-trunc-list): Make into obsolete function alias for
+       'seq-take'.  Update callers.
+       (recentf-show-file-shortcuts-flag): Doc fix.
+       (recentf-menu-elements, recentf-make-menu-items)
+       (recentf-make-menu-item, recentf-dialog-mode-map)
+       (recentf-dialog, recentf-open-files-item)
+       (recentf-open-files-items, recentf-open-files)
+       (recentf-load-list): Quote function symbols as such.
+       (recentf-relative-filter, recentf-file-name-nondir): Remove
+       redundant #' before lambda.
+
+2021-04-03  Stefan Kangas  <stefan@marxist.se>
+
+       Remove references to very old versions of Emacs from eintr
+
+       * doc/lispintro/emacs-lisp-intro.texi (Making Errors)
+       (Void Function, Void Variable, Wrong Type of Argument, debug)
+       (debug-on-entry): Remove commented out references to Emacs 20 or
+       earlier.
+       * doc/lispintro/emacs-lisp-intro.texi (what-line)
+       (print-elements-of-list, debug, X Axis Tic Marks): Don't call version
+       22 or earlier a "recent" version of Emacs.
+
+2021-04-02  Stefan Kangas  <stefan@marxist.se>
+
+       * doc/misc/woman.texi (Introduction): Remove reference to old Emacs.
+
+2021-04-02  Stefan Kangas  <stefan@marxist.se>
+
+       Remove redundant #' before lambda in textmodes/*.el
+
+       * lisp/textmodes/fill.el:
+       * lisp/textmodes/ispell.el (ispell-find-enchant-dictionaries):
+       * lisp/textmodes/rst.el (rst-re, rst-Ado-position)
+       (rst-Hdr-member-ado, rst-mode-abbrev-table)
+       (rst-preferred-adornments, rst-new-preferred-hdr)
+       (rst-classify-adornment, rst-ttl-at-point, rst-hdr-hierarchy)
+       (rst-all-ttls-with-level, rst-get-previous-hdr)
+       (rst-adjust-region, rst-preferred-bullets, rst-find-begs)
+       (rst-straighten-bullets-region, rst-stn-containing-point)
+       (rst-toc-update, rst-forward-section, rst-shift-region)
+       (rst-enumerate-region, rst-bullet-list-region)
+       (rst-line-block-region, rst-forward-indented-block): Remove redundant #'
+       before lambda.
+
+2021-04-02  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * doc/misc/reftex.texi: Remove outdated instructions
+
+       (Building and Installing, Installation with make)
+       (Installation by Hand, Loading @RefTeX{}): Delete sections.
+       (Entering @RefTeX{} Mode): Merge into its parent.
+       (AUCTeX): Point to GNU ELPA for installation.
+       (Problems and Work-Arounds): Remove XEmacs-specific item.
+
+2021-04-02  Arash Esbati  <arash@gnu.org>
+
+       Delete XEmacs-only definition
+
+       * lisp/textmodes/reftex-vars.el (reftex-label-regexps): Remove
+       XEmacs compat code.
+
+2021-04-02  Juri Linkov  <juri@linkov.net>
+
+       * lisp/progmodes/xref.el: Change xref-file-name-display and xref-match 
face.
+
+       * lisp/progmodes/xref.el (xref-file-name-display): Change the default 
value
+       to 'project-relative' (bug#47012).
+       (xref-match)<face>: Inherit from 'match'.
+
+2021-04-02  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Fix C-u project-find-regexp's default dir
+
+       * lisp/progmodes/project.el (project-find-regexp):
+       Default read-directory-name to the current default-directory when
+       called with C-u (bug#47012).
+
+2021-04-02  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/cfengine.el: Use lexical-binding
+
+2021-04-01  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/dcl-mode.el: Clarify what is meant by DCL
+
+2021-04-01  Andrea Corallo  <akrl@sdf.org>
+
+       * src/comp.h (unload_comp_unit): Define for vanilla build (warning 
removal).
+
+2021-04-01  Stefan Kangas  <stefan@marxist.se>
+
+       Remove redundant #' before lambda in {mail,net,url}/*.el
+
+       * lisp/mail/mail-extr.el:
+       * lisp/mail/rmail.el (rmail-start-mail):
+       * lisp/net/gnutls.el (gnutls-boot-parameters):
+       * lisp/net/imap.el (imap-starttls-open):
+       * lisp/net/pop3.el (pop3-list):
+       * lisp/url/url-cookie.el (url-cookie-save-interval):
+       * lisp/url/url-history.el (url-history-save-interval)
+       (url-history-track):
+       * lisp/url/url-mailto.el (url-mailto): Remove redundant #' before 
lambda.
+
+2021-04-01  Andrea Corallo  <akrl@sdf.org>
+
+       Issue a warning when eln look-up fails due to missing .el source file.
+
+       * lisp/emacs-lisp/comp.el (comp-warning-on-missing-source): New
+       customize.
+       * src/lread.c (maybe_swap_for_eln): Issue a warning when eln
+       look-up fails due to missing .el source file.
+       * src/comp.c (syms_of_comp): Define
+       'Qcomp_warning_on_missing_source'.
+
+2021-04-01  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in executable.el and add tests
+
+       * lisp/progmodes/executable.el: Use lexical-binding.
+       * test/lisp/progmodes/executable-tests.el: New file.
+
+2021-04-01  Stefan Kangas  <stefan@marxist.se>
+
+       Remove redundant #' before lambda in progmodes/*.el
+
+       * lisp/progmodes/cc-styles.el (c-set-offset):
+       * lisp/progmodes/ebnf-yac.el (ebnf-yac-token-table):
+       * lisp/progmodes/ebnf2ps.el (ebnf-format-float, ebnf-map-name):
+       * lisp/progmodes/grep.el (lgrep, rgrep-default-command):
+       * lisp/progmodes/inf-lisp.el:
+       * lisp/progmodes/octave.el (octave-lookfor):
+       * lisp/progmodes/python.el (python-pdbtrack-tracking-finish): Remove
+       redundant #' before lambda.
+
+2021-04-01  Stefan Kangas  <stefan@marxist.se>
+
+       Remove redundant #' before lambda in international/*.el
+
+       * lisp/international/characters.el:
+       (use-cjk-char-width-table, update-glyphless-char-display):
+       * lisp/international/fontset.el (build-default-fontset-data)
+       (generate-fontset-menu):
+       * lisp/international/latin1-disp.el (latin1-display-reset):
+       * lisp/international/mule-cmds.el
+       (select-safe-coding-system-interactively):
+       * lisp/international/mule-diag.el (sort-listed-character-sets)
+       (font-show-log):
+       * lisp/international/mule.el (char-displayable-p):
+       * lisp/international/quail.el (quail-keyboard-layout-type)
+       (quail-update-translation, quail-find-key):
+       * lisp/international/titdic-cnv.el (tsang-quick-converter)
+       (ziranma-converter): Remove redundant #' before lambda.
+
+2021-04-01  Eli Zaretskii  <eliz@gnu.org>
+
+       GNUmakefile: Fix last change.
+
+2021-04-01  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix 'extraclean' targets
+
+       * GNUmakefile: Add description of 'extraclean'.
+
+       * Makefile.in (extraclean_dirs): Add lwlib.
+
+       * lwlib/Makefile.in (clean mostlyclean extraclean): Add
+       'extraclean' target.
+
+       * lisp/Makefile.in (extraclean): Remove ${loaddefs}, not just
+       ${LOADDEFS}.  Delete all backup and autosave files.
+
+2021-04-01  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in epg-config.el and add tests
+
+       * lisp/epg-config.el: Use lexical-binding.
+       (epg-find-configuration): Improve error message.
+       * test/lisp/epg-config-tests.el: New file.
+
+2021-04-01  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in isearchb.el
+
+       * lisp/isearchb.el: Use lexical-binding.  Remove redundant :group
+       args.
+
+2021-04-01  Stefan Kangas  <stefan@marxist.se>
+
+       Remove redundant #' before lambda in Gnus
+
+       * lisp/gnus/gnus-group.el (gnus-group-list-cached)
+       (gnus-group-list-dormant, gnus-group-list-ticked):
+       * lisp/gnus/gnus-registry.el (gnus-registry-remove-extra-data):
+       * lisp/gnus/gnus-score.el (gnus-score-edit-file-at-point):
+       * lisp/gnus/gnus-sum.el (gnus-fetch-headers):
+       * lisp/gnus/mm-partial.el (mm-inline-partial):
+       * lisp/gnus/nnselect.el (nnselect-uncompress-artlist)
+       (numbers-by-group, nnselect-request-expire-articles)
+       (nnselect-request-update-info, nnselect-request-thread):
+       * lisp/gnus/nnvirtual.el (nnvirtual-request-expire-articles):
+       * lisp/gnus/spam-stat.el (spam-stat-score-buffer): Remove redundant #'
+       before lambda.
+
+2021-04-01  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in avoid.el
+
+       * lisp/avoid.el: Use lexical-binding.  Remove redundant :group args.
+       (mouse-avoidance-fancy): Quote function symbol as such.
+
+2021-04-01  Stefan Kangas  <stefan@marxist.se>
+
+       Use emacs-version instead of obsolete version variables
+
+       * lisp/calendar/icalendar.el (icalendar-version):
+       * lisp/dframe.el (dframe-version):
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-version):
+       * lisp/emulation/edt.el (edt-version):
+       * lisp/international/mule.el (mule-version):
+       * lisp/linum.el (linum-version):
+       * lisp/play/bubbles.el (bubbles-version):
+       * lisp/textmodes/remember.el (remember-version):
+       * lisp/url/url-vars.el (url-version):
+       * lisp/woman.el (woman-version): Use emacs-version instead of obsolete
+       version variables.
+
+2021-04-01  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/strokes.el: Use lexical-binding.  Remove redundant `:group` args
+
+       (strokes-char-table): Move initialization into declaration.
+
+2021-04-01  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/forms.el: Use lexical-binding.  Remove redundant `:group` args
+
+       (forms--process-format-list, forms--debug): Strength-reduce `eval`
+       to `symbol-value`.
+
+2021-04-01  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/dcl-mode.el: Use lexical-binding
+
+       (dcl-guess-option-value, dcl-save-local-variable)
+       (dcl-save-nondefault-options): Strength-reduce `eval` to `symbol-value`.
+
+2021-03-31  Eli Zaretskii  <eliz@gnu.org>
+
+       * src/comp.c (Fcomp__compile_ctxt_to_file): Fix debug level 1.
+
+2021-03-31  Michael Albinus  <michael.albinus@gmx.de>
+
+       * lisp/net/tramp-sh.el (tramp-sh-gio-monitor-process-filter):
+
+       Make assumption for emba.
+
+2021-03-31  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (comp-final): Clean-up temporary file.
+
+2021-03-31  Andrea Corallo  <akrl@sdf.org>
+
+       Rework native compilation `comp-debug' (bug#46495)
+
+       * lisp/emacs-lisp/comp.el (comp-debug): Update docstring and
+       move default on Windows systems from 0 to 1.
+       * src/comp.c (Fcomp__compile_ctxt_to_file): Tweak debug
+       levels.
+
+2021-03-31  Andrea Corallo  <akrl@sdf.org>
+
+       Do not defer compilation when bytecode is explicitly requested 
(bug#46617)
+
+       * src/comp.c (maybe_defer_native_compilation): Check if the file
+       is registered in 'V_comp_no_native_file_h'.
+       (syms_of_comp): 'V_comp_no_native_file_h' new global.
+       * src/lread.c (maybe_swap_for_eln): Register files in
+       'V_comp_no_native_file_h'.
+       * lisp/faces.el (tty-run-terminal-initialization): Do not
+       explicitly load .elc file to not exclude .eln being loaded in
+       place.
+
+2021-03-31  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in progmodes/inf-lisp.el
+
+       * lisp/progmodes/inf-lisp.el: Use lexical-binding.  Doc fixes.
+       (inferior-lisp-mode-map, lisp-mode-map)
+       (inferior-lisp-install-letter-bindings): Quote function symbols as such.
+       (inferior-lisp-menu, lisp-compile-string, lisp-eval-string)
+       (lisp-show-variable-documentation): Doc fixes.
+
+2021-03-31  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into native-comp
+
+       * lisp/emacs-lisp/comp.el (comp-debug): Fix docstring.
+
+2021-03-31  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in scroll-all.el
+
+       * lisp/scroll-all.el: Use lexical-binding.
+       (scroll-all-scroll-down-all, scroll-all-scroll-up-all)
+       (scroll-all-page-down-all, scroll-all-page-up-all)
+       (scroll-all-beginning-of-buffer-all)
+       (scroll-all-end-of-buffer-all): Doc fixes.
+
+2021-03-31  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/dynamic-setting.el: Use lexical-binding.
+
+2021-03-31  Luke Lee  <luke.lee@synaptics.com>
+
+       Fix incorrect regular expression for more general text replacements.
+
+       * lisp/progmodes/hideif.el (hif-evaluate-macro): fix regexp to trim
+         off leading/trailing spaces, but not within.
+
+2021-03-31  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in chistory.el
+
+       * lisp/chistory.el: Use lexical-binding.  Remove redundant :group
+       args.
+       (command-history-mode-map): Quote function symbols as such.
+
+2021-03-31  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/ebuff-menu.el: Use lexical-binding.
+
+2021-03-31  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in double.el
+
+       * lisp/double.el: Use lexical-binding.  Remove redundant :group
+       args.
+
+2021-03-31  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in dirtrack.el
+
+       * lisp/dirtrack.el: Use lexical-binding.  Remove redundant group
+       args.
+
+2021-03-31  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/progmodes/cwarn.el: Use lexical-binding.
+
+2021-03-30  Stefan Kangas  <stefan@marxist.se>
+
+       Remove redundant #' before lambda in cedet
+
+       * lisp/cedet/mode-local.el (mode-local-map-mode-buffers)
+       (mode-local--activate-bindings, mode-local--deactivate-bindings)
+       (setq-mode-local, describe-mode-local-bindings-in-mode):
+       * lisp/cedet/semantic.el (semantic-repeat-parse-whole-stream):
+       * lisp/cedet/semantic/bovine/c.el (semantic-c-describe-environment):
+       * lisp/cedet/semantic/db-ebrowse.el
+       (semanticdb-ebrowse-get-ebrowse-structure):
+       * lisp/cedet/semantic/db-global.el
+       (semanticdb-enable-gnu-global-databases):
+       * lisp/cedet/semantic/edit.el (semantic-changes-in-region):
+       * lisp/cedet/semantic/fw.el (semantic-install-function-overrides):
+       * lisp/cedet/semantic/grammar.el (semantic-grammar-ASSOC)
+       (semantic-grammar-tag-symbols, semantic-grammar-keywords)
+       (semantic--grammar-macros-regexp-1)
+       (semantic-format-tag-summarize):
+       * lisp/cedet/semantic/idle.el (semantic-idle-core-handler)
+       (semantic-idle-work-core-handler):
+       * lisp/cedet/semantic/imenu.el (semantic-imenu-semanticdb-hook):
+       * lisp/cedet/semantic/java.el (semantic-java-doc-keywords-map)
+       (semantic-java-doc-setup):
+       * lisp/cedet/semantic/lex-spp.el (semantic-lex-spp-save-table)
+       (semantic-lex-spp-macros):
+       * lisp/cedet/semantic/lex.el (semantic-lex-map-symbols)
+       (semantic-lex-keywords, semantic-lex-types):
+       * lisp/cedet/semantic/util-modes.el
+       (semantic-toggle-minor-mode-globally):
+       * lisp/cedet/semantic/wisent/comp.el (wisent-defcontext)
+       (wisent-automaton-lisp-form):
+       * lisp/cedet/semantic/wisent/grammar.el (wisent-grammar-assocs)
+       (wisent-grammar-terminals): Remove redundant #' before lambda.
+
+2021-03-30  Stefan Kangas  <stefan@marxist.se>
+
+       Delete Emacs 19 compat code in foldout.el
+
+       * lisp/foldout.el (foldout-hide-flag):
+       (foldout-show-flag): Delete Emacs 19 compat code and make obsolete.
+       (foldout-exit-fold): Don't use above obsolete variable.
+
+2021-03-30  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in lpr.el and add rudimentary tests
+
+       * lisp/lpr.el: Use lexical-binding.  Remove redundant :group args.
+       (print-region-function): Declare MS-Windows specific function.
+       * test/lisp/lpr-tests.el: New file.
+
+2021-03-30  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in echistory.el
+
+       * lisp/echistory.el: Use lexical-binding.
+       (electric-history-map): Quote function symbols as such.
+       (Electric-history-undefined): Use command substitutions.
+
+2021-03-30  Stefan Kangas  <stefan@marxist.se>
+
+       Delete empty "History" sections
+
+       * lisp/bs.el:
+       * lisp/calendar/timeclock.el:
+       * lisp/cedet/semantic/bovine/grammar.el:
+       * lisp/cedet/semantic/grammar.el:
+       * lisp/cedet/semantic/wisent.el:
+       * lisp/cedet/semantic/wisent/comp.el:
+       * lisp/cedet/semantic/wisent/java-tags.el:
+       * lisp/cedet/semantic/wisent/wisent.el:
+       * lisp/erc/erc.el:
+       * lisp/net/newst-treeview.el:
+       * lisp/recentf.el:
+       * lisp/ruler-mode.el:
+       * lisp/textmodes/remember.el:
+       * lisp/thumbs.el:
+       * lisp/tree-widget.el:
+       * lisp/vc/vc-hg.el: Delete empty "History" sections.
+
+       * lisp/cedet/semantic/grammar.el
+       (semantic-grammar-header-template): Don't add "History" section to
+       generated file.
+
+2021-03-30  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in follow.el
+
+       * lisp/follow.el: Use lexical-binding.
+       (follow-mode-map, follow-debug-message): Quote function symbols as
+       such.
+       (follow-pos-visible-in-window-p): Remove unused variable 'last'.
+       (follow-move-to-window-line): Remove unused variable 'middle-window'.
+
+2021-03-30  Mattias Engdegard  <mattiase@acm.org>
+
+       lisp/progmodes/verilog-mode.el internal code cleanup.
+
+       * lisp/progmodes/verilog-mode.el (verilog-at-close-struct-p):
+       Internal code cleanup.
+
+2021-03-30  Arash Esbati  <arash@gnu.org>
+
+       * lisp/textmodes/reftex-auc.el: Improve the external function 
declarations
+
+       (LaTeX-add-bibitems): Move declaration closer to the others.
+       Fix those declarations to refer to the right file.
+
+2021-03-30  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Provide information to show icons with Elisp completions
+
+       * lisp/progmodes/elisp-mode.el (elisp--company-kind): New function.
+       (elisp-completion-at-point): Use it.  And a couple of anonymous
+       :company-kind functions too.
+
+2021-03-30  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       lisp/progmodes/verilog-mode.el: Prepare for lexical-binding.
+
+       * lisp/progmodes/verilog-mode.el: Activate lexical-binding.
+       Insert newlines to avoid some situations where arguments were easy
+       to misunderstand.
+       (verilog-set-compile-command): Strength-reduce `eval` to `symbol-value`.
+       (verilog-error-regexp-add-emacs): Replace `mapcar` => `mapc` since
+       the result is not used.
+       (verilog-surelint-off): Remove always-nil var `dir`.
+       (verilog-do-indent): Minor simplification of the code.
+       (verilog-pred): Delete var.  It was always nil.
+       (verilog-flag): Delete var; pass the corresponding data via
+       explicit arguments instead.
+       (verilog-keyword-completion): Use `dolist`.
+       (verilog-completion-response): Rename to 
`verilog--complete-with-action`.
+       Change calling convention to match that of `complete-with-action`.
+       Use `complete-with-action` instead when available.
+       Adjust all callers.
+       (verilog-completion, verilog-comp-defun): Change arg names so they
+       don't collide with dynamically scoped vars, and let-bind `verilog-str`
+       explicitly instead.  Use `with-current-buffer`.
+       (verilog-batch-execute-func): Use `with-current-buffer`.
+       (verilog-complete-word): Don't convert the completion list into
+       a completion alist, since lists work just as well.
+       (verilog-showscopes): Use `with-current-buffer`.
+       (verilog-symbol-detick, verilog-symbol-detick-text)
+       (verilog-signals-matching-enum): Strength-reduce `eval` to 
`symbol-value`.
+       (verilog--insert-indent): Rename from `verilog--insert-indent`.
+       Add `indent-pt` argument.
+       (verilog-insert-indent): New macro wrapper to provide the old
+       calling convention.
+       (verilog-auto-assign-modport, verilog-auto-inout-modport):
+       Remove always-nil var `direction-re`.
+       (verilog--auto-inst-first): Rename from `verilog-auto-inst-first`.
+       Add `indent-pt` argument.
+       (verilog-auto-inst-port): Adjust call accordingly.
+
+2021-03-30  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/verilog-mode.el: Use #' where appropriate.
+
+2021-03-30  Wilson Snyder  <wsnyder@wsnyder.org>
+
+       lisp/progmodes/verilog-mode.el: Fix indentation of enum.
+
+       * lisp/progmodes/verilog-mode.el (verilog-at-close-struct-p): Fix
+       indentation of enum with multiple objects. Reported by punzik. (#1716).
+
+2021-03-29  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/completion.el: Activate lexical-binding
+
+       Remove redundant `:group` arguments.
+
+       (list-all-completions-1): Merge into `list-all-completions` and
+       then delete.
+       (list-all-completions-by-hash-bucket-1): Use `push`.  Merge into
+       `list-all-completions-by-hash-bucket` and then delete.
+       (completions-list-return-value): Delete variable, not used any more.
+
+2021-03-29  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/woman.el: Activate lexical-binding.  Require `cl-lib`
+
+       (woman-mode, woman2-roff-buffer): Use `cl-letf`.
+       (woman-request): Move declaration before first use.
+       (woman0-macro): Rename arg to not shadow the dynamically scoped var.
+       (woman-set-arg): Strength-reduce `eval` to `symbol-value`.
+
+2021-03-29  Juri Linkov  <juri@linkov.net>
+
+       * lisp/progmodes/project.el (project-regexp-history-variable): New 
variable.
+
+       (project--read-regexp): Use it as HISTORY arg of 'read-regexp' with
+       'grep-regexp-history' default (bug#47012).
+
+2021-03-29  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/allout*.el: Use lexical-binding
+
+       * lisp/allout.el: Activate lexical-binding.
+       (allout-setup-menubar): Delete "complex no-op" function.
+       (allout-mode): Delete call to it.
+       (allout-hotspot-key-handler): Delete XEmacs-only code.
+       (allout-copy-exposed-to-buffer): Remove always-nil var `start-list`.
+
+       * lisp/allout-widgets.el: Activate lexical-binding.
+       (allout-item-icon-keymap): Use `ignore`.
+       (allout-widgets-exposure-change-processor): Use `cl-callf` instead of
+       relying on dynamic binding to apply some code to two different 
variables.
+
+2021-03-29  Alan Mackenzie  <acm@muc.de>
+
+       Fix an infinite loop in C++ Mode redisplay.  This was bug #47191.
+
+       * lisp/progmodes/cc-defs.el (c-forward-syntactic-ws, 
c-backward-syntactic-ws):
+       When point is on the wrong side of a supplied search limit, leave point
+       unmoved rather than setting it to that limit.
+
+       * lisp/progmodes/cc-engine.el (c-forward-name): After scanning a 
template
+       argument list (which is not itself subject to a search limit) 
recalculate the
+       search limit starting from the end point, since these argument lists can
+       legitimately be long.  At each of the scanning loops, check point 
hasn't gone
+       past the limit.
+
+2021-03-29  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       8a92030f6a (origin/emacs-27) Fix hang in autorevert-tests.el
+
+       # Conflicts:
+       #       test/lisp/autorevert-tests.el
+
+2021-03-29  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       bcc4cc3362 Doc fixes for 'face-foreground' and 'face-background'.
+       bf6442fafd ; * admin/make-tarball.txt: Minor addition to the Web page...
+       38b127d32e * admin/admin.el (set-version): Handle malformed NEWS markup.
+       0d7e2a993e admin.el fix for bug#47394
+       fdec444758 ; * etc/NEWS: Fix typo.
+       1e6ca2765f ; * admin/make-tarball.txt: Another minor addition.
+
+       # Conflicts:
+       #       etc/NEWS
+
+2021-03-29  Michael Albinus  <michael.albinus@gmx.de>
+
+       Some Tramp doc clarifications
+
+       * doc/misc/tramp.texi (Remote shell setup): Explain meaning of
+       `tramp-sh-extra-args' for bash.
+       (Frequently Asked Questions): New item about unloading / reloading 
Tramp.
+
+2021-03-29  Eli Zaretskii  <eliz@gnu.org>
+
+       Protect add-variable-watcher from incorrect usage
+
+       * src/data.c (Fadd_variable_watcher): Avoid crashes if SYMBOL
+       isn't.  (Bug#47462)
+
+2021-03-29  Michael Albinus  <michael.albinus@gmx.de>
+
+       Optimize test jobs for emba
+
+       * test/infra/gitlab-ci.yml (.test-template): Do not run fast and
+       normal test jobs when scheduled.
+
+2021-03-29  Stefan Kangas  <stefan@marxist.se>
+
+       Doc fixes in follow.el
+
+       * lisp/follow.el:
+       (follow-pos-visible-in-window-p, follow-adjust-window)
+       (follow-prev-buffer, follow-internal-force-redisplay):
+       Minor doc fixes.
+
+2021-03-29  Michael Albinus  <michael.albinus@gmx.de>
+
+       * test/infra/gitlab-ci.yml (test-filenotify-gio): Use *.log for 
make_params.
+
+2021-03-28  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix hang in autorevert-tests.el
+
+       * test/lisp/autorevert-tests.el (auto-revert--wait-for-revert):
+       Apply more robust check, whether file notification is used.
+
+2021-03-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix a dbus.el byte compilation warning
+
+       * lisp/net/dbus.el (dbus-register-monitor): Silence a
+       byte-compilation warning on systems without dbus.
+
+2021-03-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Use a 64KB page size for pdump
+
+       * src/pdumper.c (dump_get_page_size): Use a 64KB page size on all
+       architectures, as this many vary between systems (bug#47125).
+
+2021-03-28  Michael Albinus  <michael.albinus@gmx.de>
+
+       * admin/notes/emba: Explain job types and artifacts.
+
+2021-03-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Clarify dired-do-shell-command doc string"
+
+       This reverts commit cf607c262e15c873961fdfcced254e6f8e82f8d7.
+
+       The doc string already explains this.
+
+       (cherry picked from commit 01cf0eb75786834b7a0ee5be34be53f6e8e14c11)
+
+2021-03-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Clarify dired-do-shell-command doc string"
+
+       This reverts commit cf607c262e15c873961fdfcced254e6f8e82f8d7.
+
+       The doc string already explains this.
+
+2021-03-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify dired-do-shell-command doc string
+
+       * lisp/dired-aux.el (dired-do-shell-command): Mention what happens
+       to FILE-LIST (bug#47432).
+
+       (cherry picked from commit cf607c262e15c873961fdfcced254e6f8e82f8d7)
+
+2021-03-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify dired-do-shell-command doc string
+
+       * lisp/dired-aux.el (dired-do-shell-command): Mention what happens
+       to FILE-LIST (bug#47432).
+
+2021-03-28  Eli Zaretskii  <eliz@gnu.org>
+
+       Doc fixes for 'face-foreground' and 'face-background'.
+
+       * lisp/faces.el (face-foreground, face-background): Clarify how a
+       face specified in INHERIT arg is used.  (Bug#47437)
+
+2021-03-28  pillule  <pillule@riseup.net>  (tiny change)
+
+       compilation-goto-locus does not handle right display-buffer
+
+       * lisp/progmodes/compile.el (compilation-goto-locus): Pop to the
+       source buffer if the match buffer is the selected window (bug#47414).
+
+2021-03-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify the doc string of plist-memeber and plist-put
+
+       * src/fns.c (Fplist_member):
+       (Fplist_put): Clarify what comparison function is used for PROP
+       (bug#47426) and don't claim that PROP has to be a symbol.
+
+2021-03-28  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid errors in pulse.el for some face customizations
+
+       * lisp/cedet/pulse.el (pulse-momentary-highlight-overlay): Make
+       sure 'face-background' always returns a color name.  Suggested by
+       Ingo Lohmar <ingo.lohmar@posteo.net> in bug#47437.
+
+2021-03-28  Michael Albinus  <michael.albinus@gmx.de>
+
+       Make artifacts working on emba (hopefully)
+
+       * test/infra/gitlab-ci.yml (.job-template): Use proper docker name.
+       (.test-template): Adapt artifacts path.
+
+2021-03-27  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Demote read-extended-command-predicate errors
+
+       For discussion, see the following thread:
+       https://lists.gnu.org/r/emacs-devel/2021-03/msg00682.html
+
+       * lisp/simple.el (read-extended-command): Demote errors when calling
+       read-extended-command-predicate so M-x completion doesn't break.
+
+2021-03-27  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/wdired.el (wdired--self-insert): Fix thinko
+
+2021-03-27  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/wdired.el: Fix minor regressions and simplify a bit
+
+       Use `wdired--current-column` more consistently to avoid mayhem when it
+       doesn't return the same result as `current-column`.
+
+       (wdired-get-filename): Fix the unprocessed case.
+       (wdired-finish-edit): Don't force processing all the lines.
+       (wdired--col-perm): Remove, redundant with `wdired--perm-beg`.
+       (wdired-change-to-wdired-mode): Don't error in empty directory.
+       (wdired--set-permission-bounds): Set `wdired--perm-beg` when we can't
+       find permissions.  Move `wdired--perm-beg` 1 char further (like
+       `wdired--col-perm`).  Use `wdired--current-column`.
+       (wdired--point-at-perms-p): Fix when `wdired--perm-beg` is nil.
+       (wdired--self-insert): Lookup the keymap to know command to call.
+       (wdired--before-change-fn): Just use `point` instead of `beg`.
+       Use `with-silent-modifications` here rather than in each of the
+       `wdired--preprocess-*` functions.
+       (wdired--preprocess-files): Presume we're at BOL and within
+       `with-silent-modifications`.  Fix application of `read-only`.
+       (wdired-abort-changes): Don't use `with-silent-modifications` since
+       we're really modifying the buffer.
+       (wdired--preprocess-symlinks): Presume we're at BOL and within
+       `with-silent-modifications`.
+       (wdired--preprocess-perms): Presume we're at BOL and within
+       `with-silent-modifications`.
+       (wdired-set-bit): Add `char` argument.  Use `wdired--current-column`.
+       Copy previous text properties rather than duplicating the code of
+       `wdired--preprocess-perms`.
+       (wdired-toggle-bit): Delegate to `wdired-set-bit`.
+
+2021-03-27  Arthur Miller  <arthur.miller@live.com>
+
+       * lisp/wdired.el: Apply text properties lazily
+
+       Entering wdired was taking time proportional to the size of the 
directory,
+       making it inconvenient to quickly enter wdired just to rename one or two
+       files in a large directory.
+
+       (wdired-mode-map): Rebind `self-insert-command`.
+       (wdired--perm-beg, wdired--perm-end): New vars.
+       (wdired--col-perm, wdired--old-content, wdired--old-point)
+       (wdired--old-marks): Rename vars, using "--" rather than "-".
+       All users updated.
+       (wdired--before-change-fn): New function.
+       (wdired-change-to-wdired-mode): Use it `before-change-functions`
+       instead of eagerly putting the various text properties here.
+       (wdired--set-permission-bounds, wdired--current-column)
+       (wdired--point-at-perms-p, wdired--line-preprocessed-p):
+       New auxiliary functions.
+       (wdired--self-insert): New command.
+       (wdired--preprocess-files, wdired--preprocess-symlinks)
+       (wdired--preprocess-perms): Add "--" to the name.  Make it operate only
+       on the current line.  Use `with-silent-modifications`.
+       (wdired-abort-changes): Use `with-silent-modifications`.
+
+2021-03-27  Michael Albinus  <michael.albinus@gmx.de>
+
+       Keep *.log files on emba
+
+       * test/infra/gitlab-ci.yml (.test-template): New template.
+       (test-fast-inotify, test-lisp-inotify, test-lisp-net-inotify)
+       (test-filenotify-gio, test-gnustep, test-all-inotify): Use it.
+
+2021-03-27  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix lisp/files-tests on MS-Windows
+
+       * test/lisp/files-tests.el (files-colon-path)
+       (files-tests-bug-21454): Adapt to MS-DOS/Windows, where
+       parse-colon-path needs and absolute file name with a drive letter.
+       (files-tests-file-name-non-special-get-file-buffer): Forcefully
+       delete the file's buffer if it happens to exist.
+
+2021-03-27  Matt Armstrong  <matt@rfc20.org>
+
+       File unlock errors now issue warnings (Bug#46397)
+
+       The primary idea is to allow `kill-buffer' and `kill-emacs' to
+       complete even if Emacs has trouble unlocking the buffer's file.
+
+       * lisp/userlock.el (userlock--handle-unlock-error): New function, call
+       `display-error'.
+       * src/filelock.c (unlock_file_body): New function, do what
+       'unlock_file' used to.
+       (unlock_file_handle_error): New function, call
+       `userlock--handle-unlock-error' with the captured error.
+       (unlock_file): Handle `file-error' conditions by calling the handler
+       defined above.
+       * test/src/filelock-tests.el (filelock-tests-kill-buffer-spoiled):
+       (filelock-tests-unlock-spoiled): Modify to test new behavior.
+
+2021-03-27  Matt Armstrong  <matt@rfc20.org>
+
+       Add test coverage for src/filelock.c (Bug#46397)
+
+       * test/src/filelock-tests.el: New file.
+
+2021-03-27  Kenichi Handa  <handa@gnu.org>
+
+       Fix encoding by ISO-2022-JP
+
+       * src/coding.c (encode_coding): Reset the CODING_MODE_LAST_BLOCK
+       flag for all iterations but the last one.  (Bug#46933)
+
+2021-03-26  Michael Albinus  <michael.albinus@gmx.de>
+
+       Improve remote file notifications
+
+       * lisp/net/tramp-sh.el (tramp-get-remote-gio-file-monitor): Remove it.
+       (tramp-sh-handle-file-notify-add-watch): Do not call it.
+       (tramp-sh-gio-monitor-process-filter): Read monitor name.
+
+       * test/lisp/filenotify-tests.el (file-notify--test-read-event)
+       (file-notify--test-timeout): Change timings.
+       (file-notify--test-monitor): Read remote monitor name more reliably.
+       (file-notify-test02-rm-watch): Retrieve remote monitor name in time.
+       (file-notify--test-event-actions): New defun.
+       (file-notify--test-with-actions-explainer): Use it.
+       (file-notify--test-with-actions-check): Use it.  Dump traces in
+       case of debug.
+       (file-notify--test-with-actions): Don't stop while debugging.
+       (file-notify-test03-events, file-notify-test04-autorevert)
+       (file-notify-test05-file-validity)
+       (file-notify-test07-many-events, file-notify-test08-backup)
+       (file-notify-test09-watched-file-in-watched-dir): Adapt tests.
+
+2021-03-26  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Address some --without-x byte-compilation warnings
+
+       These came to light in the contexts of bug#29713 and bug#47234.
+
+       * lisp/emulation/edt-mapper.el (edt-xserver):
+       * lisp/emulation/edt.el (edt-xserver):
+       * lisp/gnus/gnus-util.el (gnus-rescale-image):
+       * lisp/gnus/nnimap.el (nnimap-map-port):
+       * lisp/term/w32-win.el:
+       * lisp/image.el (image--get-imagemagick-and-warn):
+       * lisp/frame.el (frame-notice-user-settings): Declare functions that
+       are known to be present at runtime in GUI builds.
+       (make-frame-on-display): Signal more informative error when called
+       interactively in a non-GUI build (bug#29713).
+       * lisp/international/mule-diag.el (describe-font):
+       * lisp/org/org-macs.el (org--string-from-props): Pacify warnings
+       about unknown functions in non-GUI bilds.
+       * lisp/mh-e/mh-mime.el (mh-small-image-p): Avoid eliminating fboundp
+       check in non-GUI builds, to pacify unused lexical variable warning.
+       * lisp/net/newst-plainview.el (newsticker--plainview-tool-bar-map):
+       * lisp/net/newst-treeview.el (newsticker-treeview-tool-bar-map):
+       Declare tool-bar-map as a special variable in non-GUI builds.
+
+2021-03-26  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/obsolete/tpu-extras.el: Avoid defadvice
+
+       (tpu--respect-bottom-scroll-margin): New function, extracted from
+       `newline`s defadvice.
+       (newline, newline-and-indent, do-auto-fill): Delete defadvice.
+       (tpu-set-scroll-margins): Use advice-add instead of
+       `ad-enable-advice`+`ad-activate`.
+       Use an explicit arg instead of `called-interactively-p`.
+
+2021-03-26  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/mh-e/: Take advice-remove of the newly enabled lexical-binding
+
+       * lisp/mh-e/mh-mime.el (mh-mm-inline-message):
+       * lisp/mh-e/mh-inc.el (mh-inc-spool-generator): Replace `(lambda...)
+       with a proper closure.
+
+2021-03-26  Andrea Corallo  <akrl@sdf.org>
+
+       Prevent stale eln loading checking file timestamp before load 
(bug#46617)
+
+       * src/lread.c (maybe_swap_for_eln): Add file timestamp check.
+       (openp): Update 'maybe_swap_for_eln' call sites.
+
+2021-03-25  Glenn Morris  <rgm@gnu.org>
+
+       * admin/admin.el (set-version): Handle malformed NEWS markup.
+
+2021-03-25  Glenn Morris  <rgm@gnu.org>
+
+       admin.el fix for bug#47394
+
+       * admin/admin.el (manual-html-fix-index-2): Handle Texinfo 6.7.
+
+2021-03-25  Spencer Baugh  <sbaugh@catern.com>
+
+       Assert not local-variable-p after setq in let_default binding
+
+       Breaking this is a likely way to break this test, so this saves a bit
+       of time in debugging.
+
+       * test/src/data-tests.el (data-tests--let-buffer-local):
+       Add assertion to test.
+
+2021-03-25  Spencer Baugh  <sbaugh@catern.com>
+
+       Add a test for let-binding unwinding
+
+       Bindings in other buffers are not un-set when we unwind a let-binding
+       which set the default value.  There doesn't seem to be an existing
+       test which covers this, so here's one.
+
+       * test/src/data-tests.el 
(data-tests--let-buffer-local-no-unwind-other-buffers):
+         Add test for let-binding unwinding behavior
+
+2021-03-25  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/htmlfontify.el: Fix misuses of `nconc`
+
+       (hfy-face-to-style-i): `this` is not known to be fresh.
+       (hfy--size-to-int): Rename from `hfy--size-to-int` and return just the
+       integer without wrapping it in a list.
+       (hfy-flatten-style): Avoid O(n²) problems.  Use `float`.
+
+2021-03-25  Bill Wohler  <wohler@newt.com>
+
+       Remove XEmacs support in lexical-binding
+
+       * lisp/mh-e/mh-alias.el (mh-alias-insert-file): Remove reference to
+         remove-specifier.
+
+2021-03-25  Mark A. Hershberger  <mah@nichework.com>
+
+       Update rnc to use Open Document's Relax-NG schema to version 1.3
+
+       * etc/schema/OpenDocument-schema-v1.3+libreoffice.rnc:
+       * etc/schema/OpenDocument-schema-v1.3.rnc: New files.
+       * etc/schema/schemas.xml: Use the LibreOffice Relax-NG files since
+       they include a hack to support 1.2.
+
+       rng source:
+          
https://raw.githubusercontent.com/freedesktop/libreoffice-core/master/
+          schema/libreoffice/OpenDocument-schema-v1.3%2Blibreoffice.rng
+       translation to rnc with trang:
+          trang -I rng -O rnc OpenDocument-schema-v1.3+libreoffice.rng \
+              OpenDocument-schema-v1.3+libreoffice.rnc
+
+2021-03-25  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into native-comp
+
+2021-03-25  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Merge from origin/emacs-27
+
+       291a421c2e * admin/make-tarball.txt: Improve and expand the instructi...
+       0e4795fc98 Fix preeditarea reporting wrong spot.
+
+2021-03-25  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Merge from origin/emacs-27
+
+       deef5efafb ; * ChangeLog.3: Update with the log of the last change.
+       bd991e3c9b Fix frame-inner-height in non-GUI builds
+
+2021-03-25  Eli Zaretskii  <eliz@gnu.org>
+
+       * admin/make-tarball.txt: Improve and expand the instructions.
+
+2021-03-25  Amos Bird  <amosbird@gmail.com>
+
+       Fix preeditarea reporting wrong spot.
+
+       This patch adjust the x position of preeditarea with both left fringe
+       and left margin, which prevents IME preedit box (such as fcitx) from
+       placing at the wrong position in GUI emacs.
+       * src/xfns.c (xic_set_preeditarea): Adjust X for left margin width.
+       (Bug#47377)
+
+2021-03-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       Adapt Tramp file notification support
+
+       * lisp/net/tramp-integration.el (tramp-use-ssh-controlmaster-options):
+       Declare it.
+
+       * lisp/net/tramp-sh.el (tramp-sh-handle-file-notify-add-watch):
+       Remove "gvfs-monitor-dir".
+       (tramp-sh-gvfs-monitor-dir-process-filter)
+       (tramp-get-remote-gvfs-monitor-dir): Remove.
+       (tramp-get-remote-gio-file-monitor): Support also cygwin, and
+       GFamDirectoryMonitor, GPollFileMonitor.
+
+2021-03-25  Glenn Morris  <rgm@gnu.org>
+
+       * doc/emacs/maintaining.texi (Managing Projects): Fixes and copyedits.
+
+2021-03-25  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Fix typo
+
+       * lisp/progmodes/project.el (project-remove-known-project):
+       Fix typo (bug#47287).
+
+2021-03-25  Theodor Thornhill  <theo@thornhill.no>
+
+       Add command project-remove-known-project
+
+       * etc/NEWS: Mention the new command.
+
+       * lisp/progmodes/project.el (project--remove-from-project-list): Add
+       new argument, report-message, used to signal various messages when
+       removal has happened.
+
+       * lisp/progmodes/project.el (project-remove-known-project): New
+       command that removes the selected directory from the project-list-file.
+
+       * lisp/progmodes/project.el (project-current): Add the report message.
+
+       * doc/emacs/maintaining.texi: Add information about the new command to
+       the manual.
+
+2021-03-24  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * list/progmodes/idl*.el: Use lexical-binding
+
+       * lisp/progmodes/idlw-complete-structtag.el: Use lexical-binding.
+
+       * lisp/progmodes/idlw-help.el: Use lexical-binding.
+       Delete redundant `:group` arguments.
+       (idlwave-query-class, idlwave-force-class-query, idlw-help-name)
+       (idlw-help-kwd, idlw-help-link): Declare vars.
+       (idlwave-highlight-linked-completions): Remove unused var `class`.
+       (idlwave-help-find-in-doc-header): Remove unused var `header-re`.
+
+       * lisp/progmodes/idlw-shell.el (idlwave-shell-input-mode-magic):
+       Remove XEmacs-only code.
+       (idlwave-shell-filter, idlwave-shell-scan-for-state):
+       Use `functionp` since a function can also satisfy `listp`.
+       (idlwave-shell--mouse-examine): Rename from 
`idlwave-shell-mouse-examine`.
+       Make it a function, and simplify for Emacs≥22.  Simplify calling 
convention
+       since all callers always immediately `funcall`d the result.
+       Update all callers.
+       (idlwave-default-mouse-track-event-is-with-button): Use `always`.
+       (idlwave-shell-filter-bp): Simplify a tiny bit.
+
+       * lisp/progmodes/idlw-toolbar.el: Use lexical-binding.
+       (idlwave-toolbar-add, idlwave-toolbar-remove)
+       (idlwave-toolbar-add-everywhere, idlwave-toolbar-remove-everywhere)
+       (idlwave-toolbar-toggle): Remove XEmacs-only code.
+
+       * lisp/progmodes/idlwave.el: Use lexical-binding.
+       (idlwave--dlet): New macro.
+       (<toplevel>): Use it.
+       (idlwave-keyword-abbrev): Turn it into a function.
+       (idlwave-code-abbrev): Delete macro.
+       (idlwave-mode-abbrev-table): Use `:enable-function` instead.
+       (idlwave-with-special-syntax): Delete macro; use `with-syntax-table`
+       instead in all callers.
+       (idlwave-action-and-binding): Use `alist-get` and replace `(lambda...)
+       with a proper closure.  Change all callers to prefer passing a function
+       in the `cmd` argument.
+       (idlwave-fill-function): Delete constant var.
+       Replace its uses with its value (the symbol `auto-fill-function`).
+       (idlwave-mode): Set `normal-auto-fill-function` instead of the
+       cumbersome use of `idlwave-fill-function`.  Tighten a regexp.
+       Don't set `imenu-create-index-function` to the value it should already 
have.
+       (idlwave-auto-fill-mode): Make it an obsolete alias for 
`auto-fill-mode`.
+       (idlwave-modify-abbrev): Rename from `idlwave-check-abbrev`.
+       Don't check `idlwave-quoted` since `:enable-function` did it for us 
already.
+       (idlwave--command-function): Rename from `idlwave-command-hook`
+       and make it hold a function rather than an expression.
+       (idlwave-command-hook, idlwave-modify-abbrev): Adjust accordingly.
+       (idlwave-show-begin-check): Don't check `idlwave-quoted` since
+       `:enable-function` did it for us already.
+       (idlwave-do-action): Use `functionp` since a function can also satisfy 
`listp`
+       (idlwave-new-sintern-type): Make it a macro, so we don't need to
+       `declare-function` for the functions it defines.
+       (idlwave--class-selector, idlwave--type-selector)
+       (idlwave--method-selector, idlwave--super-classes): Rename those vars
+       by adding the `idlwave--` prefix.  Adjust all uses.
+       (idlwave-complete-functions): Rename from `idlwave-complete-special`.
+       (idlwave-call-special): Declare obsolete.  Change all callers to use
+       `run-hook-with-args-until-success` instead.
+       (idlwave-complete-filename): Use `dlet`.
+       (idlwave-rinfo-assq-any-class): Remove unused var `class`.
+       (idlwave-determine-class-functions): Rename from
+       `idlwave-determine-class-special`; fix docstring since the functions
+       are called with only one argument.
+       (idlwave--complete-after-success-function): Rename from
+       `idlwave-complete-after-success-form` and make it hold a function.
+       Adjust all users.
+       (idlwave--complete-after-success-force-function): Rename from
+       `idlwave-complete-after-success-form-force` and make it hold a function.
+       Adjust all users.
+       (idlwave-attach-classes): Remove always-t variable `do-dots`.
+       (idlwave-local-value): Use `local-variable-p` and `buffer-local-value`
+       to avoid `with-current-buffer`.
+       (idlwave-default-choose-completion): Comment out (unused and calls
+       a function that doesn't exist).
+       (idlwave-shell-filter-sysvars): Remove unused vars `type`, `name`, and 
`class`
+       (idlwave-fix-module-if-obj_new): Remove unused var `name`.
+       (idlwave-fix-keywords): Bind `idlwave--super-classes` via `let` than
+       via the function's argument.
+       (idlwave-twin-class, idlwave-twin-name): Move before first use.
+       (idlwave-study-twins): Remove stealth/redundant `type` variable.
+       (idlwave-routine-entry-compare-twins): Remove unused var `type`.
+       (idlwave-path-alist-add-flag): Avoid `add-to-list` on a local var.
+       (idlwave-list-abbrevs): Simplify a tiny bit.
+
+2021-03-24  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el (tab-bar-tab-post-change-group-functions): New hook.
+
+       (tab-bar-change-tab-group): Run it.
+       (tab-bar-move-tab-to-group): New command for new hook.
+
+2021-03-24  Alan Mackenzie  <acm@muc.de>
+
+       Improve failure reporting in test/lisp/electric-tests.el
+
+       In particular, on a failure, output the test's doc string to
+       electric-tests.log, along with all the other failure information.
+       Fixes bug #47320.
+
+       * test/lisp/electric-tests.el (electric-pair-test-for) New
+       parameter doc-string.  On a test failure, output the doc-string
+       parameter with message.
+       (electric-pair-define-test-form): Set the new variable doc-string to the
+       generated doc string, and pass this as argument to both ert-deftest and
+       electric-pair-test-for.
+
+2021-03-24  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/auth-source-pass.el (auth-source): Silence spurious warning
+
+2021-03-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix previous format-prompt change: The default can be a symbol
+
+       * lisp/minibuffer.el (format-prompt): The default can also be a
+       symbol.
+
+2021-03-24  Harald Jörg  <haj@posteo.de>
+
+       perl-mode: Fix regexps for fontification
+
+       * test/lisp/progmodes/cperl-mode-tests.el
+       (cperl-test-fontify-declarations): New test to ensure consistency
+       between perl-mode.el and cperl-mode.el (bug#47345).
+       * lisp/progmodes/perl-mode.el (perl-font-lock-keywords-1): pick
+       correct capture groups for "use Pack::Age;"
+       Fontify all components of "Pack::Age", not just "Pack"
+       (perl-font-lock-keywords-2): Use keyword-face for declarators
+
+2021-03-24  Andrea Corallo  <akrl@sdf.org>
+
+       Improve two native compiler related docstrings.
+
+       * lisp/emacs-lisp/comp.el (comp-eln-load-path-eff): Improve docstring.
+       * src/comp.c (comp-eln-load-path): Likewise.
+
+2021-03-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Remove font-lock toggle from font-lock-update"
+
+       This reverts commit 23995414fec483287e7fb9c9a279483319f9fc54.
+
+       The subject is under discussion.
+
+2021-03-24  Paul W. Rankin  <pwr@bydasein.com>
+
+       Remove font-lock toggle from font-lock-update
+
+       * lisp/font-lock.el (font-lock-update): Remove call to
+       font-lock-unfontify-region and font-lock-mode toggle with ARG; this
+       did not perform what original author intended
+
+2021-03-24  Andrea Corallo  <akrl@sdf.org>
+
+       * src/lread.c (maybe_swap_for_eln): Fix eln filename (bug#bug#47337).
+
+2021-03-24  Dmitry Gutov  <dgutov@yandex.ru>
+
+       xref.el: Keep Emacs 26 compatibility
+
+       * lisp/progmodes/xref.el (xref--read-identifier)
+       (xref-find-definitions, xref-find-definitions-other-window)
+       (xref-find-definitions-other-frame, xref-find-references):
+       Undo the latest change for Emacs 26 compatibility (bug#47286).
+
+2021-03-24  Gabriel do Nascimento Ribeiro  <gabriel.nascimento@nubank.com.br>
+
+       Add optional FORMAT argument to 'emacs-init-time'
+
+       * lisp/time.el (emacs-init-time): Add optional FORMAT argument
+       (bug#47306).
+
+2021-03-24  Gabriel do Nascimento Ribeiro  <gabriel.nascimento@nubank.com.br>
+
+       Replace "(default %s)" with 'format-prompt'
+
+       * lisp/cmuscheme.el (scheme-load-file, scheme-compile-file):
+       * lisp/comint.el (comint-get-source):
+       * lisp/emulation/viper-cmd.el (viper-quote-region, viper-kill-buffer)
+       (viper-query-replace, viper-read-string-with-history):
+       * lisp/eshell/esh-mode.el (eshell-find-tag):
+       * lisp/gnus/gnus-sum.el (gnus-articles-to-read)
+       (gnus-summary-search-article-forward)
+       (gnus-summary-search-article-backward):
+       * lisp/international/mule-cmds.el (set-input-method, 
toggle-input-method)
+       (describe-input-method, set-language-environment)
+       (describe-language-environment):
+       * lisp/mh-e/mh-gnus.el (mh-mml-minibuffer-read-disposition):
+       * lisp/mh-e/mh-letter.el (mh-insert-letter):
+       * lisp/mh-e/mh-mime.el (mh-display-with-external-viewer)
+       (mh-mime-save-parts, mh-mh-forward-message)
+       (mh-mml-query-cryptographic-method, mh-minibuffer-read-type):
+       * lisp/mh-e/mh-seq.el (mh-read-seq, mh-read-range):
+       * lisp/mh-e/mh-utils.el (mh-prompt-for-folder):
+       * lisp/progmodes/etags.el (find-tag-tag):
+       (find-tag-noselect, find-tag, find-tag-other-window)
+       (find-tag-other-frame, find-tag-regexp):
+       * lisp/progmodes/idlwave.el (idlwave-find-module):
+       * lisp/progmodes/inf-lisp.el (lisp-load-file, lisp-compile-file):
+       * lisp/progmodes/tcl.el (tcl-load-file, tcl-restart-with-file):
+       * lisp/progmodes/xref.el (xref--read-identifier):
+       (xref-find-definitions, xref-find-definitions-other-window)
+       (xref-find-definitions-other-frame, xref-find-references):
+       * lisp/ses.el (ses-read-printer):
+       (ses-read-cell-printer, ses-read-column-printer)
+       (ses-read-default-printer, ses-define-local-printer):
+       * lisp/subr.el (read-number):
+       * lisp/term.el (term-get-source):
+       * src/minibuf.c (read-buffer): Remove prompt suffix and
+       use 'format-prompt'.
+       * lisp/minibuffer.el (format-prompt): Ignore DEFAULT empty strings
+       (bug#47286).
+
+2021-03-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix problem with filling with a computed fill prefix
+
+       * lisp/textmodes/fill.el (fill-region-as-paragraph): Fix problem
+       when filling text with a computed fill prefix (bug#47338).
+
+2021-03-24  Stefan Kangas  <stefan@marxist.se>
+
+       Convert many more links to use HTTPS
+
+2021-03-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Move string-trim functions to subr.el
+
+       * doc/lispref/strings.texi (Creating Strings): Document them.
+
+       * lisp/faces.el: Don't require subr-x, because that leads to build
+       errors.
+
+       * lisp/subr.el (string-trim, string-trim-right)
+       (string-trim-left): Move here from subr-x.el.
+
+       * lisp/emacs-lisp/shortdoc.el (string): Adjust.
+
+2021-03-24  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in iimage.el
+
+       * lisp/iimage.el: Use lexical-binding.  Remove redundant :group args.
+
+2021-03-24  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/talk.el: Use lexical-binding.
+
+2021-03-24  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in two trivial org-mode files
+
+       This change has already been made on org-mode's master branch.
+
+       * lisp/org/org-install.el:
+       * lisp/org/org-version.el: Use lexical-binding.
+
+2021-03-24  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/help-at-pt.el: Use lexical-binding.
+
+       * lisp/progmodes/simula.el (hilit-set-mode-patterns): Use regexp-opt.
+
+       * lisp/progmodes/modula2.el: Use lexical-binding.
+
+2021-03-24  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in view.el
+
+       * lisp/view.el: Use lexical-binding.  Remove redundant :group args.
+
+2021-03-24  Stefan Kangas  <stefan@marxist.se>
+
+       Delete some commented out defgroups
+
+       * lisp/eshell/esh-opt.el:
+       * lisp/international/ccl.el:
+       * lisp/pcmpl-linux.el:
+       * lisp/shell.el:
+       * lisp/url/url-news.el: Delete some commented out defgroups.
+
+2021-03-24  Stefan Kangas  <stefan@marxist.se>
+
+       Doc fixes in view.el
+
+       * lisp/view.el:
+       (view-try-extend-at-buffer-end, kill-buffer-if-not-modified)
+       (view-buffer, view-buffer-other-window, view-buffer-other-frame)
+       (view-page-size-default, view-set-half-page-size-default)
+       (view-really-at-end, view-end-message)
+       (view-search-no-match-lines): Doc fixes.
+
+2021-03-24  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/master.el: Use lexical-binding.
+
+2021-03-24  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in ruler-mode.el
+
+       * lisp/ruler-mode.el: Use lexical-binding.  Remove redundant
+       :group args.
+
+2021-03-24  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/ebnf-*.el: Use lexical-binding
+
+       * lisp/progmodes/ebnf-abn.el:
+       * lisp/progmodes/ebnf-bnf.el:
+       * lisp/progmodes/ebnf-dtd.el:
+       * lisp/progmodes/ebnf-ebx.el:
+       * lisp/progmodes/ebnf-iso.el:
+       * lisp/progmodes/ebnf-otz.el:
+       * lisp/progmodes/ebnf-yac.el: Enable lexical-binding.
+       * lisp/progmodes/ebnf2ps.el (ebnf-apply-style1)
+       (ebnf-insert-ebnf-prologue): Use lexical-binding.
+
+2021-03-23  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/mh-e: Enable lexical-binding in all the files
+
+       * lisp/mh-e/mh-alias.el: Use lexical-binding.
+       (mh-alias-insert-file): Completion tables can be mere lists of strings.
+
+       * lisp/mh-e/mh-mime.el: Use lexical-binding.
+       (mh-mm-inline-message): Remove always-nil var `visible-headers`.
+
+       * lisp/mh-e/mh-search.el: Use lexical-binding.
+       (mh-search-folder): Remove unused var `pick-folder`.
+
+       * lisp/mh-e/mh-show.el: Use lexical-binding.
+       (mh-display-msg): Remove always-nil var `visible-headers`.
+
+       * lisp/mh-e/mh-utils.el: Use lexical-binding.
+       (completion-root-regexp): Always declare var.
+
+       * lisp/mh-e/mh-buffers.el: Use lexical-binding.
+       * lisp/mh-e/mh-comp.el: Use lexical-binding.
+       * lisp/mh-e/mh-folder.el: Use lexical-binding.
+       * lisp/mh-e/mh-funcs.el: Use lexical-binding.
+       * lisp/mh-e/mh-gnus.el: Use lexical-binding.
+       * lisp/mh-e/mh-identity.el: Use lexical-binding.
+       * lisp/mh-e/mh-inc.el: Use lexical-binding.
+       * lisp/mh-e/mh-junk.el: Use lexical-binding.
+       * lisp/mh-e/mh-letter.el: Use lexical-binding.
+       * lisp/mh-e/mh-limit.el: Use lexical-binding.
+       * lisp/mh-e/mh-print.el: Use lexical-binding.
+       * lisp/mh-e/mh-scan.el: Use lexical-binding.
+       * lisp/mh-e/mh-seq.el: Use lexical-binding.
+       * lisp/mh-e/mh-speed.el: Use lexical-binding.
+       * lisp/mh-e/mh-thread.el: Use lexical-binding.
+       * lisp/mh-e/mh-tool-bar.el: Use lexical-binding.
+       * lisp/mh-e/mh-xface.el: Use lexical-binding.
+
+2021-03-23  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/wdired.el: Fix typo in last change.
+
+       Reported by Michael Heerdegen <michael_heerdegen@web.de>.
+
+       (wdired-change-to-wdired-mode, wdired-change-to-dired-mode):
+       The `(local FOO)` form takes an expression, so the var needs to be 
quoted.
+
+2021-03-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention `C-o' in the `RET' doc string
+
+       * lisp/simple.el (newline-and-indent): Mention `C-o' in the doc
+       string.
+
+2021-03-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix previous face.el change
+
+       * lisp/faces.el (require): Fix compilation warning from previous
+       face.el change.
+
+2021-03-22  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el (tab-bar-new-tab-group): Set default to t.
+
+       (tab-bar-tabs, tab-bar-select-tab, tab-bar-new-tab-to):
+       Use tab-bar--current-tab-make instead of tab-bar--current-tab.
+       (tab-bar--tab): Add arg 'frame' to tab-bar--current-tab-find.
+       (tab-bar--current-tab, tab-bar--current-tab-make): Move most of body
+       from the former to the latter, thus reverting tab-bar--current-tab
+       to its previous behavior.
+       https://lists.gnu.org/archive/html/emacs-devel/2021-03/msg00959.html
+
+2021-03-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Use read-color in read-face-attribute for color attributes
+
+       * lisp/faces.el (read-face-attribute): Use read-color when
+       prompting for a color (bug#47316).
+
+2021-03-22  Michael Albinus  <michael.albinus@gmx.de>
+
+       * lisp/files-x.el (connection-local-criteria-for-default-directory):
+
+       Add optional argument APPLICATION.
+
+2021-03-22  Stefan Kangas  <stefan@marxist.se>
+
+       Remove unnecessary requires of rx
+
+       * lisp/cedet/semantic/wisent/python.el (rx):
+       * test/src/process-tests.el (rx): Remove unnecessary requires.
+
+2021-03-22  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in notifications.el
+
+       * lisp/notifications.el: Use lexical-binding.
+       (notifications-notify): Prefer 'push' to 'add-to-list'.
+
+2021-03-21  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (comp-lookup-eln): Add autoload cookie.
+
+       * lisp/emacs-lisp/comp.el (comp-lookup-eln): Add new function.
+
+2021-03-21  Andrea Corallo  <akrl@sdf.org>
+
+       Prevent unnecessary multiple .el hashing in 'maybe_swap_for_eln'
+
+       * src/comp.c (Fcomp_el_to_eln_rel_filename): New function.
+       (Fcomp_el_to_eln_filename): Make use of.
+       (syms_of_comp): Register 'Scomp_el_to_eln_rel_filename'.
+       * src/lread.c (maybe_swap_for_eln): Make use of
+       'Fcomp_el_to_eln_rel_filename' to hash prevent unnecessary
+       multiple hashing.
+
+2021-03-21  Alan Mackenzie  <acm@muc.de>
+
+       Prevent open minibuffers getting lost when their frame gets deleted
+
+       This happened with minibuffer-follows-selected-frame set to t.
+
+       * doc/emacs/mini.texi (Basic Minibuffer): State where a command's 
action takes
+       place when a minibuffer's frame has been deleted.
+
+       * lisp/window.el (window--before-delete-windows, record-window-buffer): 
Take
+       into account that minibuffers are now recorded on w->prev_buffers field.
+
+       * src/fns.c (merge_c): New version of `merge' taking a C function, 
rather than
+       a Lisp function as the comparison function.
+
+       * src/frame.c (do_switch_frame): Pass arguments sf and for_deletion to
+       move_minibuffers_onnto_frame.
+
+       * src/lisp.h (top level): Declare merge_c and
+       move_minibuffers_onto_selected_frame.
+
+       * src/minibuf.c (MB_frame): New Lisp_Object recording the minibuffer's 
frame.
+       (choose_minibuf_frame): Remove all code except that which sets 
minibuf_window
+       to the current frame's minibuffer.
+       (minibuffer_ent_greater): New comparison function, passed to merge_c.
+       (zip_minibuffer_stacks): New function.
+       (move_minibuffers_onto_frame): Renamed from 
`move_minibuffer_onto_frame' given
+       two arguments, the old frame and for_deletion, and simplified.  
Minibuffers
+       are now stacked in the mini-window's ->prev_buffers field.
+       (read_minibuf): Several detailed amendments.
+       (exp_MB_frame): New Lisp_Object, the expired minibuffer's frame.
+       (read_minibuf_unwind): Search for the expired minibuffer's frame, 
rather than
+       taking it from (unreliable) variables.  Switch temporarily to this 
frame for
+       tidying up operations.
+       (minibuffer_unwind): New function which pops a stacked minibuffer.
+       (syms_of_minibuf): Call staticpro for the two new Lisp variables.
+
+       * src/window.c (Fset_window_configuration): Don't record minibuffers 
with
+       record-window-buffer.
+
+       * src/xdisp.c (gui_consider_frame_title): Remove redundant 
Fselect_window,
+       which caused an unwanted frame switch.  Amend the arguments to
+       format_mode_line_unwind_data to match.
+
+2021-03-21  Andrea Corallo  <akrl@sdf.org>
+
+       Add a tmp dir to `comp-eln-load-path' when running the testsuite.
+
+       * lisp/startup.el (normal-top-level): Tweak `comp-eln-load-path'
+       adding a temp directory when running the testsuite.
+
+2021-03-21  Glenn Morris  <rgm@gnu.org>
+
+       * lisp/thumbs.el (thumbs-conversion-program): Simplify.
+
+       /usr/bin is (normally) always in PATH, and this need not be absolute,
+       so the executable-find is unnecessary.
+
+2021-03-21  Stefan Kangas  <stefan@marxist.se>
+
+       Actually use lexical-binding in wid-browse.el
+
+       * lisp/wid-browse.el: Use lexical-binding.  I apparently forgot to
+       commit the lexical-binding cookie in my previous attempt.
+
+2021-03-21  Andrea Corallo  <akrl@sdf.org>
+
+       Revert "* lisp/emacs-lisp/comp.el (comp-clean-up-stale-eln): Clean-up 
all..."
+
+       This reverts commit be22cda7be9e77e67f224f6f07cca9dd44aaa078.
+
+       Older binaries might still need those .eln if they where preloaded.
+
+2021-03-21  Theodor Thornhill  <theo@thornhill.no>
+
+       Use pop-to-buffer-same-window for shell
+
+       * lisp/progmodes/project.el (project-shell): Behave the same way as
+       'M-x project-eshell'.
+       * lisp/shell.el (shell): Behave the same way as 'M-x eshell'.
+       * etc/NEWS: Add news entry describing the change.
+       * lisp/tutorial.el: Use lexical-binding.
+
+2021-03-21  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (comp-clean-up-stale-eln): Clean-up all .eln 
dirs.
+
+2021-03-21  Zhiwei Chen  <chenzhiwei03@kuaishou.com>  (tiny change)
+
+       Allow hide-ifdef-guts to work in buffers not visiting files
+
+       * lisp/progmodes/hideif.el (hide-ifdef-guts): Allow working in
+       buffers not visiting files (bug#47279).
+
+2021-03-21  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/tutorial.el: Use lexical-binding.
+
+2021-03-21  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/cedet/semantic/ia.el (semantic-ia-complete-symbol): Simplify
+
+       Cut the `semantic-ia-get-completions-deprecated` middle man.
+
+2021-03-20  Stefan Kangas  <stefan@marxist.se>
+
+       Remove support for Syndic8.com, defunct since 2013
+
+       * lisp/gnus/nnrss.el (nnrss-discover-feed)
+       (nnrss-find-rss-via-syndic8): Remove support for Syndic8.com, as
+       the site was shut down in 2013.
+
+2021-03-20  Toby Cubitt  <toby@dr-qubit.org>
+
+       Fix cl-progv binding order
+
+       * lisp/emacs-lisp/cl-macs.el (cl-progv): Bind variables in the
+       correct order (bug#47272).
+
+2021-03-20  Gregory Heytings  <gregory@heytings.org>
+
+       * etc/NEWS: Small corrections for the new command 'font-lock-update'
+
+2021-03-20  Stefan Kangas  <stefan@marxist.se>
+
+       Remove Gnus specific .dir-locals.el
+
+       * lisp/gnus/.dir-locals.el: Delete file.  The only variable it set was
+       'show-trailing-whitespace', but this should be up to the individual
+       developer.  (Bug#47278)
+
+2021-03-20  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer https and fix broken links in ERC
+
+       * lisp/erc/erc-button.el (erc-button-rfc-url)
+       (erc-button-search-url): Prefer https.
+       * lisp/erc/erc-capab.el:
+       * lisp/erc/erc.el (erc-cmd-MODE): Fix broken links.
+
+2021-03-20  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/thumbs.el (thumbs-show-from-dir): Improve prompt.
+
+2021-03-20  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix args-out-of-range error in format.el
+
+       * lisp/format.el (format-deannotate-region): Ignore todo items
+       with FROM > TO.  (Bug#47277)
+
+2021-03-20  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Don’t convert pointer to bool
+
+       Without this patch, Oracle Studio 12.6 complains about converting
+       pointer to bool.
+       * src/editfns.c (styled_format): Use !!.
+
+2021-03-20  Stefan Kangas  <stefan@marxist.se>
+
+       Assume something more recent than X11R6
+
+       * lisp/bindings.el:
+       * lisp/menu-bar.el:
+       * lisp/printing.el:
+       * lisp/thumbs.el (thumbs-conversion-program): Assume we have something
+       more recent than X11R6.
+
+2021-03-20  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in thumbs.el
+
+       * lisp/thumbs.el: Use lexical-binding.  Remove redundant :group args.
+       * test/lisp/thumbs-tests.el: New file.
+
+2021-03-20  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/novice.el: Use lexical-binding.
+
+2021-03-20  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/wdired.el: Use lexical-binding
+
+       Remove redundant `:group` args.
+
+       (wdired-change-to-wdired-mode): Use `add-function` to modify
+       `revert-buffer-function`.
+       (wdired-change-to-dired-mode): Adjust accordingly.
+       (wdired-do-renames): Make sure to bind `dired-backup-overwrite` 
dynamically.
+
+2021-03-20  Stefan Kangas  <stefan@marxist.se>
+
+       Don't tag mouse command as mode exclusive
+
+       * lisp/finder.el (finder-mouse-select): Don't tag for finder-mode.
+
+2021-03-19  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/bytecomp.el: Remember location of unresolved calls
+
+       I've gotten tired of seeing the "function foo not known to be defined"
+       warning without any line number information.  So this patch adds as
+       line number the position of the first use of that function in the file
+       (well, approximately, as usual).
+
+       (byte-compile-unresolved-functions): Add POSITIONs in the alist.
+       (byte-compile-function-warn): Store the current position in
+       `byte-compile-unresolved-functions`.
+       (byte-compile-arglist-warn): Adjust accordingly.
+       (byte-compile-print-syms): Delete unused function.
+       (byte-compile-warn-about-unresolved-functions): Use the stored position
+       to give more precise warnings.
+
+2021-03-19  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/pcase.el (pcase-compile-patterns): New function 
(bug#47261)
+
+       Extracted from `pcase--expand`.
+       (pcase--expand): Use it.
+
+2021-03-19  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into native-comp
+
+2021-03-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve the docs of a recent change in mb-depth.el
+
+       * lisp/mb-depth.el (minibuffer-depth-indicator-function): Improve
+       the wording of the doc string and of the label used for the
+       default value.  (Bug#47252)
+
+2021-03-19  Andrea Corallo  <akrl@sdf.org>
+
+       Do not load native code when `load' is explicitly called on a .elc file
+
+       * src/lread.c (Fload): Do not load native code when `load' is
+       explicitly called on a .elc file.
+       (Flocate_file_internal): Update 'openp' call sites.
+       (maybe_swap_for_eln): Add new 'no_native' parameter.
+       (openp): Likewise + update 'maybe_swap_for_eln' and 'openp' call
+       sites.
+       * src/lisp.h: Update 'openp' signature.
+       * src/w32proc.c (sys_spawnve): Update 'openp' call sites.
+       * src/w32.c (check_windows_init_file): Likewise.
+       * src/sound.c (Fplay_sound_internal): Likewise.
+       * src/process.c (Fmake_process): Likewise.
+       * src/image.c (image_create_bitmap_from_file)
+       (image_find_image_fd): Likewise.
+       * src/emacs.c (set_invocation_vars): Likewise.
+       * src/charset.c (load_charset_map_from_file): Likewise.
+       * src/callproc.c (call_process): Likewise.
+
+2021-03-19  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Fix :type of recently introduced defcustom
+
+       * lisp/mb-depth.el (minibuffer-depth-indicator-function): The option
+       can be nil, so add nil as a choice.  (Bug#47252)
+
+2021-03-19  Gabriel do Nascimento Ribeiro  <gabriel.nascimento@nubank.com.br>
+
+       Make minibuffer-depth-indicator-function a defcustom
+
+       * lisp/mb-depth.el (minibuffer-depth-indicator-function): Make
+       into a user option (bug#47252).
+
+2021-03-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Warn the user if we can't find pkg-config
+
+       * configure.ac (WITH_IFAVAILABLE): Warn the user if we can't find
+       a usable pkg-config (bug#47159).
+
+2021-03-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a note to NEWS as to how to restore the facemenu
+
+2021-03-19  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Fix copyright lines mistakenly treated as outline headers
+
+       * lisp/emacs-lisp/generator.el:
+       * test/lisp/cedet/semantic-utest.el:
+       * test/lisp/cedet/semantic/format-tests.el:
+       * test/lisp/cedet/semantic/fw-tests.el:
+       * test/lisp/cedet/semantic/bovine/gcc-tests.el:
+       * test/lisp/cedet/semantic/format-resources/test-fmt.el:
+       * test/manual/cedet/semantic-tests.el:
+       * lisp/obsolete/inversion.el: Use only 2 semi-colons before "Copyright".
+
+2021-03-19  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       lisp/erc: Use lexical-binding
+
+       Also remove various redundant `:group` arguments.
+
+       * lisp/erc/erc-backend.el (define-erc-response-handler): Move `declare`
+       after the docstring.
+
+       * lisp/erc/erc-capab.el: Use lexical-binding.
+       (erc-capab-identify-activate): Simplify with `member`.
+
+       * lisp/erc/erc-dcc.el (erc-dcc): Move before erc-dcc-mode definition,
+       which refers to it.
+       (erc-dcc-chat-accept): Remove unused vars `nick` and `buffer`.
+
+       * lisp/erc/erc-imenu.el: Use lexical-binding.
+       (erc-create-imenu-index): Remove unused var `prev-pos`.
+
+       * lisp/erc/erc-match.el: Use lexical-binding.
+       (erc-match-message): Remove unused var `old-pt`.
+       (erc-match-message): Strength-reduce `eval` to `symbol-value`.
+
+       * lisp/erc/erc-page.el: Use lexical-binding.
+       (erc-page): Move Custom group before `erg-page-mode` which refers to it.
+
+       * lisp/erc/erc-replace.el: Use lexical-binding.
+       (erc-replace-insert): Use `functionp`.
+
+       * lisp/erc/erc-status-sidebar.el: Use lexical-binding.
+       (erc-status-sidebar-open): Remove unused var `sidebar-window`.
+
+       * lisp/erc/erc.el: Fix header to use the customary 3 semi-colons.
+       (erc-fill-column): Declare variable.
+
+       * lisp/erc/erc-autoaway.el: Use lexical-binding.
+       * lisp/erc/erc-ezbounce.el: Use lexical-binding.
+       * lisp/erc/erc-fill.el: Use lexical-binding.
+       * lisp/erc/erc-goodies.el: Use lexical-binding.
+       * lisp/erc/erc-ibuffer.el: Use lexical-binding.
+       * lisp/erc/erc-identd.el: Use lexical-binding.
+       * lisp/erc/erc-join.el: Use lexical-binding.
+       * lisp/erc/erc-lang.el: Use lexical-binding.
+       * lisp/erc/erc-log.el: Use lexical-binding.
+       * lisp/erc/erc-menu.el: Use lexical-binding.
+       * lisp/erc/erc-netsplit.el: Use lexical-binding.
+       * lisp/erc/erc-networks.el: Use lexical-binding.
+       * lisp/erc/erc-pcomplete.el: Use lexical-binding.
+       * lisp/erc/erc-ring.el: Use lexical-binding.
+       * lisp/erc/erc-speedbar.el: Use lexical-binding.
+       * lisp/erc/erc-spelling.el: Use lexical-binding.
+       * lisp/erc/erc-truncate.el: Use lexical-binding.
+       * lisp/erc/erc-xdcc.el: Use lexical-binding.
+
+2021-03-19  Stefan Kangas  <stefan@marxist.se>
+
+       Do interactive mode tagging for finder.el
+
+2021-03-19  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in finder.el
+
+       * lisp/finder.el: Use lexical-binding.
+       (finder-mode-map, finder-compile-keywords): Remove unused lexical
+       variables.
+
+2021-03-19  Stefan Kangas  <stefan@marxist.se>
+
+       Fix a warning due to not preloading facemenu.el
+
+       * test/src/undo-tests.el (facemenu): Require.
+
+2021-03-18  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/faces.el (help-key-binding): Tweak background.
+
+2021-03-18  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Fix frame-inner-height in non-GUI builds
+
+       Include tab bar in frame's inner height in non-GUI builds that don't
+       define tab-bar-height.  This is consistent with the inclusion of the
+       menu bar in the calculated height.  It is also consistent with TTY
+       frames of GUI builds, for which tab-bar-height is always zero
+       anyway (bug#47234).  Fix suggested by Eli Zaretskii <eliz@gnu.org>.
+
+       * lisp/frame.el (frame-inner-height): Don't assume tab-bar-height is
+       defined in builds --without-x.
+
+2021-03-18  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/cl-macs.el (cl--self-tco): Optimize the "return nil" 
case
+
+2021-03-18  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * test/lisp/progmodes/cperl-mode-tests.el: Silence warnings
+
+       (cperl-test-bug-47112): Actually obey the major-mode for the test.
+
+2021-03-18  Juri Linkov  <juri@linkov.net>
+
+       * lisp/newcomment.el: Allow 'comment-continue' with whitespace 
(bug#47167)
+
+       * lisp/newcomment.el (comment-region-default-1): Still use 
'comment-continue'
+       as a string with whitespace even when 'comment-padright' returns nil.
+
+2021-03-18  Juri Linkov  <juri@linkov.net>
+
+       * lisp/simple.el (next-error-quit-window): New function (bug#44611).
+
+       (next-error-found-function): Add it as a choice.
+
+2021-03-18  Glenn Morris  <rgm@gnu.org>
+
+       * admin/make-tarball.txt: Be kind to people merging branches.
+
+2021-03-18  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       d5b160d7cc (tag: emacs-27.2-rc1, origin/emacs-27) Prepare the Emacs 2...
+       216bd67a4f ; * admin/make-tarball.txt: Advise to remove stale subdire...
+
+       # Conflicts:
+       #       ChangeLog.3
+       #       README
+       #       configure.ac
+       #       etc/AUTHORS
+       #       etc/NEWS
+       #       lisp/ldefs-boot.el
+       #       msdos/sed2v2.inp
+       #       nt/README.W32
+
+2021-03-18  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       a7f95d5244 Remove duplicate @table item from ELisp manual
+       be1b3512f7 Fix reference to 'diff-font-lock-syntax' in diff-mode docu...
+
+2021-03-18  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       f60eb988f6 Fix typos and omissions for (elisp)Button Buffer Commands
+       876b95bf90 Teach Rmail about NBSP in "Re:"
+
+       # Conflicts:
+       #       lisp/mail/rmail.el
+
+2021-03-18  Eli Zaretskii  <eliz@gnu.org>
+
+       Prepare the Emacs 27.2 release.
+
+       * etc/HISTORY: Update for Emacs 27.2.
+
+       * README:
+       * configure.ac:
+       * nt/README.W32:
+       * msdos/sed2v2.inp: Set version to 27.2
+
+2021-03-18  Mattias Engdegård  <mattiase@acm.org>
+
+       Optimise tail calls in `and` and `or` forms in `cl-labels` functions
+
+       * lisp/emacs-lisp/cl-macs.el (cl--self-tco): Handle `and` and `or`.
+       * test/lisp/emacs-lisp/cl-macs-tests.el (cl-macs--labels):
+       Add test cases.
+
+2021-03-18  Michael Albinus  <michael.albinus@gmx.de>
+
+       Extend handled events in 'while-no-input-ignore-events' (Bug#47205)
+
+       * etc/NEWS: Mention changes to 'while-no-input-ignore-events'.
+
+       * src/keyboard.c (kbd_buffer_store_buffered_event): Handle also
+       Qfile_notify and Qdbus_event as ignore_event.  (Bug#47205)
+
+2021-03-18  Stefan Kangas  <stefan@marxist.se>
+
+       Add comint-password-prompt-regexp test for "zip -e ..."
+
+       * test/lisp/comint-tests.el (comint-testsuite-password-strings):
+       Add test for "zip -e ...".  (Bug#47209)
+
+2021-03-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Compute chart-face-list dynamically
+
+       * lisp/emacs-lisp/chart.el (chart-face-list): Allow a function as
+       the value (bug#47133) so that we can compute the faces dynamically
+       on different displays.
+       (chart--face-list): New function.
+       (chart-draw-data): Use it.
+
+2021-03-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Document that `buffer-string' retains text properties
+
+       * doc/lispref/text.texi (Buffer Contents): Mention text properties
+       in the `buffer-string' documentation.
+       * src/editfns.c (Fbuffer_string): Mention text properties in the
+       doc string (bug#47220).
+
+       (cherry picked from commit 60af754170f22f5d25510af069ed0ebfec95f992)
+
+2021-03-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix breaking undo-test
+
+2021-03-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make "not found" message in dictionary less misleading
+
+       * lisp/net/dictionary.el (dictionary-do-search): Don't say there
+       are more words when there aren't (bug#47056).
+
+2021-03-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make memory-report work with buffer-local unbound vars
+
+       * lisp/emacs-lisp/memory-report.el (memory-report--buffer-data):
+       Protect against buffer-local unbound variables (bug#47057).
+
+2021-03-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix sorting in speedbar sub-groups
+
+       * lisp/speedbar.el (speedbar-prefix-group-tag-hierarchy): Sort
+       entries in sub-groups (bug#47073).
+
+2021-03-18  Gabriel do Nascimento Ribeiro  <gabriel.nascimento@nubank.com.br>
+
+       lisp/cedet/pulse.el: Use color.el
+
+       * lisp/cedet/pulse.el: (pulse-int-to-hex): Remove function.
+       (pulse-color-values-to-hex): Remove function.
+       (pulse-lighten-highlight): Remove function.
+       (pulse-momentary-iteration): Add variable.
+       (pulse-momentary-highlight-overlay): Use color-gradient from color.el.
+       (pulse-tick): Receive colors and update overlay background (bug#47083).
+
+2021-03-18  Harald Jörg  <haj@posteo.de>
+
+       cperl-mode: Don't interpret y_ as start of y// function.
+
+       * lisp/progmodes/cperl-mode.el (cperl-find-pods-heres): Avoid
+       treating underscores as word-terminators.
+
+       * test/lisp/progmodes/cperl-mode-tests.el
+       (cperl-test-bug-47112): Test case for that bug (bug#47112).
+
+2021-03-18  Gabriel do Nascimento Ribeiro  <gabriel.nascimento@nubank.com.br>
+
+       Fix uniquify-trailing-separator-p + uniquify-strip-common-suffix
+
+       (uniquify-item): New slot 'original-dirname'.
+       (uniquify-rationalize-file-buffer-names): Use new slot.
+       (uniquify-rationalize): Use new slot.
+       (uniquify-get-proposed-name): New optional argument 'original-dirname'
+       to properly add a trailing separator when the corresponding user option
+       is set and the dirname is an existing directory (bug#47132).
+
+2021-03-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix problem of trashing files to an inconsistent trash directory
+
+       * lisp/files.el (move-file-to-trash): Allow moving files to trash
+       even if there's a file in trash with the same name (but no entry
+       in info) (bug#47135).
+
+2021-03-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Autoload 'mouse-wheel-mode'
+
+       * lisp/mwheel.el (mouse-wheel-mode): Autoload, since the mode can
+       be used (but isn't preloaded) when there isn't any window system
+       (bug#47162).
+
+2021-03-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Recognise "Verify password" as a password prompt
+
+       * lisp/comint.el (comint-password-prompt-regexp): Also react to
+       "Verify password" (output by "zip -e") (bug#47209).
+
+2021-03-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Document that `buffer-string' retains text properties
+
+       * doc/lispref/text.texi (Buffer Contents): Mention text properties
+       in the `buffer-string' documentation.
+       * src/editfns.c (Fbuffer_string): Mention text properties in the
+       doc string (bug#47220).
+
+2021-03-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't pre-load facemenu
+
+       * lisp/facemenu.el (facemenu-add-face-function): Move to avoid a
+       compilation warning.
+       (facemenu-color-alist): Made obsolete.
+
+       * lisp/faces.el (read-color): Don't use it.
+
+       * lisp/loadup.el ("emacs-lisp/syntax"): Don't load facemenu.
+
+       * lisp/wid-edit.el (color): Don't use facemenu-color-alist.
+       (widget-color--choose-action): Require facemenu.
+       (widget-color-action): Ditto.
+
+       * lisp/progmodes/cperl-mode.el (facemenu): Require.
+
+       * lisp/textmodes/sgml-mode.el (facemenu): Require.
+
+2021-03-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Unbind `M-o' and add new `C-x x f' binding
+
+       * doc/lispref/modes.texi (Other Font Lock Variables):
+       `font-lock-fontify-block' is no longer bound.
+       * lisp/bindings.el (ctl-x-x-map): Bind `font-lock-update'.
+
+       * lisp/font-lock.el (font-lock-update): New command written by
+       Gregory Heytings <gregory@heytings.org>.
+
+       * lisp/loadup.el: Remove transitional experimental code.
+
+2021-03-18  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/textmodes: Use lexical-binding
+
+       * lisp/textmodes/enriched.el: Use lexical-binding.
+       (enriched-mode): Use `delete-dups` to avoid `add-to-list` on
+       a local variable.
+
+       * lisp/textmodes/makeinfo.el: Use lexical-binding.
+       (makeinfo-region): Remove unused var `filename-or-header`.
+
+       * lisp/textmodes/refbib.el: Use lexical-binding.
+       (r2b-put-field): Remove unused var `multi-line`.
+       (r2b-barf-output): Remove unused var `match`.
+
+       * lisp/textmodes/refer.el: Use lexical-binding.
+       (refer-find-entry-internal): Remove unused vars `old-buffer` and 
`found`.
+
+       * lisp/textmodes/reftex-auc.el: Use lexical-binding.
+       (LaTeX-add-bibitems): Declare function.
+       (reftex-plug-into-AUCTeX): Use `add-function` and `advice-add` so we
+       can properly unplug.
+
+       * lisp/textmodes/reftex-cite.el: Use lexical-binding.
+       (reftex-create-bibtex-file): Remove unused var `file`.
+       (reftex--found-list): Declare var.
+       (reftex-offer-bib-menu): Rename local var to `reftex--found-list`.
+
+       * lisp/textmodes/reftex-dcr.el: Use lexical-binding.
+       (reftex-use-itimer-in-xemacs): Delete XEmacs-only var.
+       (reftex-toggle-auto-view-crossref): Delete XEmacs-only code.
+       (reftex-start-itimer-once): Delete XEmacs-only function.
+
+       * lisp/textmodes/reftex-global.el: Use lexical-binding.
+       (reftex-isearch-push-state-function): Use a closure instead of 
`(lambda).
+
+       * lisp/textmodes/reftex-index.el: Use lexical-binding.
+       (mark-active, transient-mark-mode): Delete var declarations.
+       (reftex-index-mode-map): Remove XEmacs-only code.
+       Use `mapc` so we can use closures instead of hand-built lambdas.
+       (reftex-index-next, reftex-index-previous): Tweak interactive spec to
+       remove unused prefix arg and mark it as a motion command.
+       (reftex-index-phrases-font-lock-keywords)
+       (reftex-index-phrases-font-lock-keywords): Move initialization into
+       declaration.
+       (reftex-index-initialize-phrases-buffer, reftex-index-phrases-mode)
+       reftex-index-phrases-apply-to-region: Remove XEmacs-only code.
+       (TeX-master): Remove redundant declaration.
+       (reftex--chars-first): Rename dynvar from `chars-first`.  Adjust all 
uses.
+
+       * lisp/textmodes/reftex-parse.el: Use lexical-binding.
+
+       * lisp/textmodes/reftex-ref.el: Use lexical-binding.
+       (reftex-label): Remove always-nil var `text`.
+       (reftex-refstyle): Declare before first use.
+       (<toplevel>): Use closures rather than `eval` when building commands 
from
+       `reftex-ref-style-alist`.
+
+       * lisp/textmodes/reftex-sel.el: Use lexical-binding.
+       (reftex-select-label-mode-map, reftex-select-bib-mode-map):
+       Use `mapc` so we can use closures instead of hand-built lambdas.
+       (reftex-select-label-mode, reftex-select-bib-mode): Remove XEmacs-only 
code.
+       (reftex-select-data, reftex-select-prompt, reftex-refstyle):
+       Move declaration before first use.
+       (reftex--found-list, reftex--cb-flag, reftex--last-data)
+       (reftex--call-back, reftex--help-string): Move declaration before use,
+       and rename by adding `reftext--` prefix.  Adjust all uses in this file.
+       For `reftex--found-list` adjust corresponding uses in `reftex-cite.el`.
+       (reftex-select-item): Explicitly let-bind them.
+       Remove XEmacs-only code.
+
+       * lisp/textmodes/reftex-toc.el: Use lexical-binding.
+       (reftex-toc-mode-map, reftex-toc-mode, reftex-toc-restore-region)
+       (reftex-toc-next, reftex-toc-previous, reftex-toc-next-heading)
+       (reftex-toc-previous-heading, reftex-toggle-auto-toc-recenter
+       (reftex-make-separate-toc-frame): Remove XEmacs-only code.
+
+       * lisp/textmodes/reftex-vars.el: Use lexical-binding.
+
+       * lisp/textmodes/reftex.el: Use lexical-binding.
+       (reftex-mode-map, reftex-mode, reftex-fontify-select-label-buffer)
+       (reftex-verified-face): Remove XEmacs-only code.
+       (reftex-region-active-p, reftex-overlay-put, reftex-move-overlay)
+       (reftex-make-overlay, reftex-get-buffer-visiting, 
reftex-delete-overlay):
+       Redefine as obsolete aliases.  Replace all callers.
+       (current-message): Remove XEmacs-only definition.
+
+       * lisp/textmodes/remember.el: Use lexical-binding.
+
+       * lisp/textmodes/table.el (<toplevel>): Use closures rather than 
`(lambda)
+       to build commands.
+
+       * lisp/textmodes/texinfmt.el: Use lexical-binding.
+       (texinfo-example-start): Declare var.
+       (texinfo-format-region, texinfo-format-buffer-1): Remove unused var
+       `last-input-buffer`.
+       (texinfo-format-scan): Use `dlet` to bind `whitespace-silent`.
+       (texinfo-optional-braces-discard, texinfo-format-parse-line-args)
+       (texinfo-format-parse-args): Remove unused var `start`.
+       (texinfo-multitable-widths): Remove unused var `start-of-templates`.
+       (texinfo-multitable-item): Strength-reduce `eval` to `symbol-value`.
+       (texinfo-alias): Remove unused vars `start` and `args`.
+       (texinfo-defun-type symbol-property): Change the car to help the type
+       symbol rather than an expression returning it.
+       (texinfo-format-deffn): Remove corresponding `eval`.
+       (texinfo-clear): Remove unused var `value`.
+       (texinfo-format-ifeq): Remove unused var `end`.
+
+       * lisp/textmodes/texinfo.el: Use lexical-binding.
+       (tex-show-print-queue): Declare function.
+
+       * lisp/textmodes/texnfo-upd.el: Use lexical-binding.
+       (texinfo-start-menu-description): Remove unused var `end`.
+       (texinfo-insert-node-lines): Remove unused var `beginning-marker`.
+       (texinfo-multiple-files-update): Remove unused vars `next-node-name`
+       and `previous-node-name`.
+
+       * lisp/textmodes/two-column.el: Use lexical-binding.
+
+2021-03-18  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Leave signaling the exact error to cl-generic's internals
+
+       * lisp/progmodes/project.el (project-root): Extract default
+       definition to a new method, predicated on a context
+       (https://lists.gnu.org/archive/html/emacs-devel/2021-03/msg00771.html).
+
+2021-03-18  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/benchmark.el (benchmark-call): New function
+
+       (benchmark-run, benchmark-run-compiled, benchmark): Use it.
+       (benchmark--adaptive): New internal function.
+
+2021-03-17  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-line.el: Face cleanup.
+
+2021-03-17  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el: New faces and face options.
+
+       * lisp/tab-bar.el (tab-bar-tab-group-current)
+       (tab-bar-tab-group-inactive, tab-bar-tab-ungrouped): New deffaces.
+       (tab-bar-tab-face-function): New defcustom.
+       (tab-bar-tab-face-default): New function.
+       (tab-bar-tab-name-format-default): Use it.
+       (tab-bar-tab-group-format-default): Use tab-bar-tab-group-inactive face.
+       (tab-bar-tab-group-face-function): New defcustom.
+       (tab-bar-tab-group-face-default): New function.
+       (tab-bar--format-tab-group): Add new arg 'current-p'.
+       (tab-bar-format-tabs-groups): Prepend current group name before first 
tab.
+       Override tab-bar-tab-face-function with tab-bar-tab-group-face-function.
+
+2021-03-17  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Stop project-root from going into infinite recursion
+
+       * lisp/progmodes/project.el (project--within-roots-fallback):
+       New variable.
+       (project-root, project-roots): Use it (bug#47168).
+
+2021-03-17  Fabrice Bauzac  <noon@mykolab.com>
+
+       Remove duplicate @table item from ELisp manual
+
+       * doc/lispref/objects.texi (Special Read Syntax): Remove duplicate
+       item "#@N" from the table of Special Read Syntax.  (Bug#47200)
+
+2021-03-16  Juri Linkov  <juri@linkov.net>
+
+       New commands xref-next-line-no-show and xref-prev-line-no-show 
(bug#44611)
+
+       * lisp/progmodes/xref.el (xref-next-line-no-show)
+       (xref-prev-line-no-show): New commands.
+       (xref-next-line, xref-prev-line): Use them.
+
+2021-03-16  Juri Linkov  <juri@linkov.net>
+
+       Minor fixes
+
+       * lisp/frame.el (set-frame-property--interactive): Remove '(point)'
+       that makes no sense as the default value.  (Bug#9970)
+
+       * lisp/simple.el (next-error-found-function): Move defcustom
+       closer to function 'next-error-found' where it's used.
+
+2021-03-16  Andrea Corallo  <akrl@sdf.org>
+
+       Fix `no-byte-compile' native compilation interaction (bug#47169)
+
+       * lisp/emacs-lisp/comp.el (comp-spill-lap-function): Throw
+       no-native-compile when `byte-native-qualities' are null.
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-from-buffer): No need
+       to consider `no-byte-compile'.
+
+2021-03-16  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el (tab-bar-select-tab): Support negative arg.
+
+2021-03-16  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el: Simplify internal functions.
+
+       * lisp/tab-bar.el (tab-bar-tabs-set): New function.
+       (tab-bar-tabs): Use tab-bar--current-tab-find and tab-bar-tabs-set.
+       (tab-bar--tab): Use tab-bar--current-tab-find.
+       (tab-bar--current-tab): Remove unused line (assq 'current-tab ...)
+       because there is no current-tab when it's called.  Remove unused arg 
'frame'.
+       (tab-bar--current-tab-find): Simplify.
+       (tab-bar-move-tab-to, tab-bar-move-tab-to-frame)
+       (tab-bar-new-tab-to, tab-bar-close-tab)
+       (tab-bar-close-other-tabs, tab-bar-undo-close-tab)
+       (tab-switcher-delete-from-list): Use tab-bar-tabs-set
+       instead of set-frame-parameter.
+       (tab-bar-close-group-tabs): Simplify using tab-bar--current-tab-find
+       without arg.
+
+2021-03-16  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix problem of image-tests.el on emba
+
+       * test/README: Mention $EMACS_TEST_DIRECTORY.
+
+       * test/lisp/image-tests.el (image-tests--emacs-images-directory):
+       Use `data-directory', for runs w/o of make.
+       (image-type/from-filename): Check for `image-load-path'.
+
+2021-03-16  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix problem in Tramp running two async processes in parallel
+
+       * lisp/net/tramp-integration.el
+       (tramp-compile-disable-ssh-controlmaster-options): New defun.  Add
+       it to `compilation-mode-hook'.  (Bug#45518)
+
+       * lisp/progmodes/compile.el (compilation-get-file-structure):
+       Revert commit 4ce5646d59, it isn't needed.
+
+2021-03-16  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * etc/themes/modus-themes.el: Bump version for GNU ELPA release
+
+       (News:): New section.
+
+2021-03-16  Andrea Corallo  <akrl@sdf.org>
+
+       Have `no-byte-compile' implies also `no-native-compile'.
+
+       * lisp/emacs-lisp/comp.el (no-native-compile): Update doctring.
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-from-buffer): when
+       `no-byte-compile' is set to non-nil it overrides this.
+
+2021-03-16  Daniel Martín  <mardani29@yahoo.es>
+
+       Add minibuffer input support to commands that set the frame size
+
+       * lisp/frame.el (set-frame-property--interactive): Internal function to
+       produce the interactive form of `set-frame-width' and
+       `set-frame-height'.  Offer the current size as default.  (Bug#9970)
+       * src/frame.c (Fset_frame_height): Modify to call
+       `set-frame-property--interactive'.
+       (Fset_frame_width): Modify to call `set-frame-property--interactive'.
+       * doc/lispref/frames.texi (Frame Size): Update the manuals.
+       * etc/NEWS: Advertise the change (bug#9970).
+
+2021-03-15  Eli Zaretskii  <eliz@gnu.org>
+
+       * lisp/emacs-lisp/byte-opt.el: Fix native re-compilation (bug#47161).
+
+2021-03-15  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el (tab-bar-new-tab-group): New defcustom.
+
+       (tab-bar--current-tab, tab-bar-new-tab-to, tab-bar-duplicate-tab): Use 
it.
+
+2021-03-15  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el (tab-bar-tab-group-format-function): New defcustom.
+
+       (tab-bar-tab-group-default): New function.
+       (tab-bar-tab-group-format-default, tab-bar-format-tabs-groups)
+       (tab-bar-change-tab-group, tab-bar-close-group-tabs): Use it.
+
+2021-03-15  Glenn Morris  <rgm@gnu.org>
+
+       * CONTRIBUTE: Refer to gnulib for request-assign.future.
+
+       The vast majority of the exchanges on this topic are "please send me
+       the form; ok I sent you the form", and there's no need to involve a
+       mailing list for that.
+
+2021-03-15  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/bytecomp.el: Fix native re-compilation (bug#47161).
+
+2021-03-15  Eli Zaretskii  <eliz@gnu.org>
+
+       Prefer expand-file-name to concat in native-compilation code
+
+       * lisp/emacs-lisp/comp.el (comp-eln-load-path-eff):
+       * src/comp.c (Fcomp_el_to_eln_filename)
+       (eln_load_path_final_clean_up): Prefer expand-file-name to concat.
+       (Bug#43725)
+
+2021-03-15  Protesilaos Stavrou  <info@protesilaos.com>
+
+       Make the `kbd` macro work in both Emacs-26 and Emacs-28
+
+       This is so that elpa.gnu.org's Emacs-26 can successfully build the
+       Info version of it for the GNU ELPA package.
+
+2021-03-15  Michael Albinus  <michael.albinus@gmx.de>
+
+       Improve command completion in tramp-crypt.el
+
+       * lisp/net/tramp-crypt.el (tramp-crypt-command-completion-p):
+       Rename from `tramp-crypt-enabled-p'.  Handle
+       `tramp-crypt-remove-directory' special.
+
+2021-03-15  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/textmodes/refill.el: Use lexical-binding.
+
+2021-03-15  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/cedet: Convert remaining files to lexical-binding
+
+       Remove a few more redundant `:group` args.
+       Make use of lexical scoping to replace `(lambda...) with proper 
closures.
+
+       * lisp/cedet/ede/custom.el (ede-project-sort-targets-list):
+       Use `dotimes` and replace `(lambda..) with closures.
+
+       * lisp/cedet/ede/proj-comp.el (proj-comp-insert-variable-once):
+       * lisp/cedet/ede/pmake.el (ede-pmake-insert-variable-once):
+       Remove unused var `addcr`.
+
+       * lisp/cedet/semantic/complete.el: Use lexical-binding.
+       (semantic-displayer-show-request): Remove unused var `typing-count`.
+       Use `equal` instead of `stringp+string=`.
+
+       * lisp/cedet/semantic/db-ebrowse.el: Use lexical-binding.
+       (semanticdb-create-ebrowse-database): Remove unused vars `mma` and 
`regexp`.
+       (semanticdb-ebrowse-strip-trees): Remove unused var `class` and 
`filename`.
+       (semanticdb-ebrowse-add-globals-to-table): Remove unused var `fname`.
+
+       * lisp/cedet/semantic/db-find.el: Use lexical-binding.
+       (semanticdb-find-adebug-insert-scanned-tag-cons): Remove always-nil var
+       `tip`.
+
+       * lisp/cedet/semantic/db-global.el: Use lexical-binding.
+       (semanticdb-enable-gnu-global-databases): Access local var
+       `semantic--ih` by sticking its value in the code passed to `eval`
+       rather than by dynamic scoping.
+
+       * lisp/cedet/semantic/db-typecache.el: Use lexical-binding.
+       (semanticdb-db-typecache-dump): Remove unused var `junk`.
+
+       * lisp/cedet/semantic/debug.el: Use lexical-binding.
+
+       * lisp/cedet/semantic/dep.el: Use lexical-binding.
+       (semantic-add-system-include): Avoid `add-to-list` on a local variable.
+       Access local var `value` by sticking its value in the code passed to
+       `eval` rather than by dynamic scoping.
+       (semantic-remove-system-include): Don't use `delete` on a list received
+       from elsewhere.
+       Access local var `value` by sticking its value in the code passed to
+       `eval` rather than by dynamic scoping.
+       (semantic-reset-system-include): Simplify a bit.
+
+       * lisp/cedet/semantic/ede-grammar.el: Use lexical-binding.
+       (project-compile-target): Remove unused vars `csrc` and `cb`.
+       Use `cl-incf`.  Remove apparently unneeded `with-no-warnings`.
+
+       * lisp/cedet/semantic/edit.el: Use lexical-binding.
+       (semantic-edits-change-over-tags): Remove unused var `inner-start`.
+       (semantic-edits-incremental-parser-1): Silence warnings about
+       intentionally unused var `last-cond`.
+
+       * lisp/cedet/semantic/fw.el: Use lexical-binding.
+       (recentf-exclude, semantic-init-hook, ede-auto-add-method)
+       (flymake-start-syntax-check-on-find-file, auto-insert): Declare vars.
+
+       * lisp/cedet/semantic/ia-sb.el: Use lexical-binding.
+       (semantic-ia-sb-key-map): Move initialization into declaration.
+       (semantic-ia-sb-more-buttons): Remove unused var `idx`.
+       (semantic-ia-sb-line-path): Simplify `if` -> `or`.
+
+       * lisp/cedet/semantic/idle.el (semantic-idle-breadcrumbs--tag-function):
+       Make it a function returning a closure.
+
+       * lisp/cedet/semantic/senator.el: Use lexical-binding.
+       (senator-search-set-tag-class-filter): Replace `(lambda..) with a 
closure.
+
+       * lisp/cedet/semantic/sort.el: Use lexical-binding.
+       (semanticdb-search-system-databases): Declare var.
+       (semantic-tag-external-member-children-default): Replace `(lambda..)
+       with a closure.
+
+       * lisp/cedet/semantic/tag-ls.el: Use lexical-binding.
+       (semantic-tag-protection-default, semantic-tag-abstract-p-default):
+       Simplify with `member`.
+
+       * lisp/cedet/semantic/util.el: Use lexical-binding.
+       (semantic-something-to-tag-table): Declare function
+       `semanticdb-abstract-table--eieio-childp` called via `cl-typep`.
+
+       * lisp/cedet/semantic/bovine/scm.el (semantic-default-scheme-setup):
+       Remove duplicate setting of `imenu-create-index-function`.
+
+       * lisp/cedet/semantic/decorate/mode.el 
(semantic-decoration-build-style-menu):
+       Replace `(lambda..) with a closure.
+
+       * lisp/cedet/srecode/cpp.el (srecode-semantic-apply-tag-to-dict):
+       Remove always-t variable `member`.
+
+       * lisp/cedet/srecode/mode.el (srecode-minor-mode-templates-menu):
+       Replace `(lambda..) with a closure.  Use `push`.
+
+       * lisp/cedet/semantic/chart.el: Use lexical-binding.
+       * lisp/cedet/semantic/db-debug.el: Use lexical-binding.
+       * lisp/cedet/semantic/db-el.el: Use lexical-binding.
+       * lisp/cedet/semantic/db-file.el: Use lexical-binding.
+       * lisp/cedet/semantic/db-javascript.el: Use lexical-binding.
+       * lisp/cedet/semantic/db-mode.el: Use lexical-binding.
+       * lisp/cedet/semantic/db-ref.el: Use lexical-binding.
+       * lisp/cedet/semantic/decorate.el: Use lexical-binding.
+       * lisp/cedet/semantic/doc.el: Use lexical-binding.
+       * lisp/cedet/semantic/find.el: Use lexical-binding.
+       * lisp/cedet/semantic/format.el: Use lexical-binding.
+       * lisp/cedet/semantic/html.el: Use lexical-binding.
+       * lisp/cedet/semantic/ia.el: Use lexical-binding.
+       * lisp/cedet/semantic/imenu.el: Use lexical-binding.
+       * lisp/cedet/semantic/java.el: Use lexical-binding.
+       * lisp/cedet/semantic/mru-bookmark.el: Use lexical-binding.
+       * lisp/cedet/semantic/symref.el: Use lexical-binding.
+       * lisp/cedet/semantic/tag-file.el: Use lexical-binding.
+       * lisp/cedet/semantic/tag-write.el: Use lexical-binding.
+       * lisp/cedet/semantic/texi.el: Use lexical-binding.
+       * lisp/cedet/semantic/util-modes.el: Use lexical-binding.
+
+2021-03-15  Gabriel do Nascimento Ribeiro  <gabriel.nascimento@nubank.com.br>
+
+       Init archive and add noconfirm to 'package-install-selected-packages'
+
+       * lisp/emacs-lisp/package.el (package-install-selected-packages):
+       Add call to 'package--archives-initialize' and add optional argument
+       NOCONFIRM to skip user confirmation when installing packages.  
(Bug#47124)
+
+2021-03-15  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/vc/ediff-vers.el: Remove XEmacs compat code.
+
+2021-03-15  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in expand.el
+
+       * lisp/expand.el: Use lexical-binding.  Remove redundant :group args.
+
+2021-03-15  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/help-macro.el: Use lexical-binding.
+
+2021-03-15  Stefan Kangas  <stefan@marxist.se>
+
+       Add three new tests for image.el
+
+       * test/lisp/image-tests.el (image-find-image)
+       (image-type-from-file-name, image-type/from-filename): New tests.
+
+2021-03-15  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/wid-edit.el (widget-field): Add subtle border to face.
+
+2021-03-14  Andrea Corallo  <akrl@sdf.org>
+
+       Fix some entry in `comp-known-type-specifiers' (bug#46847)
+
+       * lisp/emacs-lisp/comp.el (comp-known-type-specifiers): Some
+       fix.
+       * test/src/comp-tests.el (comp-tests-46670-1): Update test.
+
+2021-03-14  Pip Cet  <pipcet@gmail.com>
+
+       Don't call setjmp through a function pointer on Windows (bug#47067)
+
+       * src/comp.c (ABI_VERSION): Bump.
+       (emit_setjmp): Call setjmp directly.
+       (declare_runtime_imported_funcs): Remove setjmp.
+       (helper_link_table): Remove entry for setjmp.
+
+2021-03-14  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Revert "* lisp/calendar/appt.el (appt-activate): Set the local 
`write-file-functions`"
+
+       This reverts commit 587a97bcb23bc6ea429ab790efa03f2260a9bca8.
+       We really do want to affect the global part of the hook.
+       Reported by Gabriel <gabriel376@hotmail.com>.
+
+2021-03-14  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix hang due to failure to clean up *.eln.old files at exit
+
+       * src/comp.c (eln_load_path_final_clean_up): Call
+       internal_delete_file, not Fdelete_file, to ignore any errors.
+       (Bug#46972)
+
+2021-03-14  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el: Tab groups can be displayed with 
tab-bar-format-tabs-groups
+
+       * lisp/tab-bar.el (tab-bar-format): Turn defvar into defcustom.
+       Add :options and force-mode-line-update in :set.
+       (tab-bar--format-tab): New function refactored from tab-bar-format-tabs.
+       (tab-bar-format-tabs): Move most of code to tab-bar--format-tab and 
call it.
+       (tab-bar-tab-group-format-function): New defcustom.
+       (tab-bar-tab-group-format-default): New function.
+       (tab-bar--format-tab-group, tab-bar-format-tabs-groups): New functions.
+       (tab-bar-format-align-right, tab-bar-format-global): Shorten id.
+       (tab-bar-change-tab-group): Add refs to tab-bar-format in docstring.
+
+2021-03-14  Gabriel do Nascimento Ribeiro  <gabriel.nascimento@nubank.com.br>
+
+       * lisp/tab-line.el: Update docstring of 'tab-line-tabs-function' 
(bug#47117)
+
+       (tab-line-tabs-function): Mention 'tab-line-tabs-buffer-groups'
+       in the docstring.
+       (tab-line-tabs-buffer-groups): Add docstring.
+
+2021-03-14  Gabriel do Nascimento Ribeiro  <gabriel.nascimento@nubank.com.br>
+
+       * lisp/tab-line.el: Add face for group-tab (bug#47118)
+
+       (tab-line-tab-face-functions): Add choice for 'tab-line-tab-face-group'.
+       (tab-line-tab-group): New face.
+       (tab-line-tabs-buffer-groups): Set alist key 'group-tab' for group tabs.
+       (tab-line-tab-face-group): New function to set face for group tabs.
+
+2021-03-14  Michael Albinus  <michael.albinus@gmx.de>
+
+       * lisp/net/tramp-crypt.el (tramp-crypt-add-directory):
+
+       Don't autoload setting property `completion-predicate'.
+
+2021-03-14  Daniel Martín  <mardani29@yahoo.es>
+
+       Fix reference to 'diff-font-lock-syntax' in diff-mode documentation
+
+       * doc/emacs/files.texi (Diff Mode): Add the omitted name of the
+       variable.  (Bug#47129)
+
+2021-03-14  Alan Third  <alan@idiocy.org>
+
+       Fix buffer overflow in xbm_scan (bug#47094)
+
+       * src/image.c (xbm_scan): Ensure reading a string doesn't overflow the
+       buffer.
+
+       (cherry picked from commit ebc3b25409dd614c1814a0643960452683e37aa3)
+
+2021-03-13  Alan Third  <alan@idiocy.org>
+
+       Fix buffer overflow in xbm_scan (bug#47094)
+
+       * src/image.c (xbm_scan): Ensure reading a string doesn't overflow the
+       buffer.
+
+2021-03-13  Juri Linkov  <juri@linkov.net>
+
+       Separate values 'override' and 'append' in 
'outline-minor-mode-highlight'
+
+       * lisp/outline.el (outline-font-lock-keywords): Handle 'override' and 
'append'
+       separately.
+       (outline-minor-mode-highlight): Separate values 'override' and 'append'.
+       (outline-minor-mode-highlight-buffer): Go to match-beginning
+       before checking '(point)'.
+
+2021-03-13  Stefan Kangas  <stefan@marxist.se>
+
+       Add help-key-binding styling to wombat theme
+
+       * etc/themes/wombat-theme.el (help-key-binding): Add face
+       definition.
+
+2021-03-13  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix rare redisplay glitches when image has been removed from display
+
+       * src/dispnew.c (update_window): Make sure all glyph rows below
+       the last visible one are marked as invalid, even when the loop
+       which "updates the rest of the lines" didn't examine the last
+       visible row.  (Bug#47093)
+
+2021-03-13  Stefan Kangas  <stefan@marxist.se>
+
+       Adjust colors of help-key-binding face for readability
+
+       * lisp/faces.el (help-key-binding): Adjust colors for improved
+       readability, and use a flat :box for highlighting (with negative
+       :line-width height to avoid any vertical resizing of the minibuffer).
+
+       This was discussed in:
+       https://lists.gnu.org/r/emacs-devel/2021-03/msg00535.html
+
+2021-03-13  Michael Albinus  <michael.albinus@gmx.de>
+
+       Remove ;;;###tramp-autoload cookie from Tramp defcustoms (Bug#47063)
+
+       * lisp/net/tramp-crypt.el (tramp-crypt-enabled-p): New defun.
+       (tramp-crypt-add-directory, tramp-crypt-remove-directory):
+       Add property `completion-predicate'.
+
+       * lisp/net/tramp-sh.el (tramp-terminal-type, tramp-remote-path)
+       (tramp-remote-process-environment): Remove.  Move them to ...
+
+       * lisp/net/tramp.el: ... here.
+
+2021-03-13  Eli Zaretskii  <eliz@gnu.org>
+
+       Extend support for faces in Enriched mode
+
+       * lisp/textmodes/enriched.el (enriched-face-ans): Support faces
+       with bold and italic attributes.  (Bug#46507)
+
+2021-03-13  Matt Armstrong  <matt@rfc20.org>
+
+       Fix typos and omissions for (elisp)Button Buffer Commands
+
+       * doc/lispref/display.texi (Button Buffer Commands): Minor
+       typo and omission fixes `backward-button' and
+       `forward-button'.  (Bug#47051)
+
+2021-03-13  Eli Zaretskii  <eliz@gnu.org>
+
+       Teach Rmail about NBSP in "Re:"
+
+       * lisp/mail/rmail.el (rmail-simplified-subject)
+       (rmail-reply-regexp): Allow NBSP in "RE:" prefixes.
+
+2021-03-12  Andrea Corallo  <akrl@sdf.org>
+
+       Fix circular dependency when loading a modified comp.el (bug#47049)
+
+       * lisp/emacs-lisp/comp.el (comp-subr-trampoline-install): Move it
+       before other functional code.
+
+2021-03-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/keyboard.c (parse_solitary_modifier): Accept `click` modifier
+
+2021-03-12  Yuan Fu  <casouri@gmail.com>
+
+       Fix simple-tests--undo*
+
+       * test/lisp/simple-tests.el (simple-tests--undo-in-region,
+       simple-tests--undo-equiv-table): Re-enable in batch mode.
+       Enable 'transient-mark-mode' in temp buffer.
+
+2021-03-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/filesets.el: Address byte-compiler warning
+
+       (filesets-run-cmd): Let-bind `filesets--files`.
+       (filesets-cmd-isearch-getargs): Use it.
+
+2021-03-12  Glenn Morris  <rgm@gnu.org>
+
+       * lisp/tooltip.el (tooltip): Restore group that was not "redundant".
+
+2021-03-12  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       02a5cfce47 (origin/emacs-27) * lisp/mouse.el: Fix mouse-1-clock-follo...
+       c881e990e3 * lisp/emacs-lisp/gv.el (edebug-after): Don't run the gett...
+
+2021-03-12  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       fc83f37951 Fix initialization of 'while-no-input-ignore-events'
+       8f603da44c Update documentation of reading passwords
+
+2021-03-12  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       2c5f215419 Avoid crashes in Mew due to corrupted tool-bar label
+       7a23915618 * lisp/tooltip.el (tooltip): Doc fix for GTK.
+       c4bbe02cc4 * lisp/help.el (help-for-help-internal): Doc fix; use impe...
+
+       # Conflicts:
+       #       lisp/help.el
+       #       lisp/tooltip.el
+
+2021-03-12  Glenn Morris  <rgm@gnu.org>
+
+       Skip recent undo tests in batch mode for now
+
+       * test/lisp/simple-tests.el (simple-tests--undo-in-region):
+       Split into separate test.  Skip in batch mode for now.
+       (simple-tests--undo-equiv-table): Skip in batch mode for now.
+
+2021-03-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/cedet/{*.el,ede/*.el}: Use lexical-binding
+
+       Remove a few redundant `:group` arguments as well.
+
+       * lisp/cedet/ede.el: Use lexical-binding.
+       Don't load `ede/files` at compile-time.
+       (ede-speedbar): Declare function.
+       (ede-load-project-file): Allow `rootreturn` to be a reference rather
+       than a symbol.
+       (ede-initialize-state-current-buffer): Pass `ROOT` as a reference
+       rather than a symbol to `ede-directory-get-open-project` and
+       `ede-load-project-file` so we don't need to make it dynamically scoped.
+       (ede-flush-deleted-projects): Avoid `add-to-list` on a local var.
+
+       * lisp/cedet/ede/files.el: Use lexical-binding.
+       (ede-directory-get-open-project): Allow `rootreturn` to be a reference
+       rather than a symbol.
+       (ede-project-root-directory): Remove unused var `root`.
+       (ede-expand-filename-impl): Remove unused vars `path` and `proj`.
+
+       * lisp/cedet/cedet-idutils.el: Use lexical-binding.
+       (cedet-idutils-search): Remove always-nil variable `scopeflags`.
+
+       * lisp/cedet/data-debug.el: Use lexical-binding.
+       (data-debug-insert-overlay-button, 
data-debug-insert-overlay-list-button)
+       (data-debug-insert-buffer-button, data-debug-insert-buffer-list-button)
+       (data-debug-insert-process-button): Remove always-nil variable `tip`.
+       (data-debug-insert-ring-button): Remove unused var `ringthing`.
+       (data-debug-insert-widget-properties): Remove unused var `type`.
+
+       * lisp/cedet/semantic.el: Use lexical-binding.
+       (semantic-mode): Strength-reduce `eval` to `symbol-value`.
+
+       * lisp/cedet/ede/custom.el: Use lexical-binding.
+       (ede-project-sort-targets): Remove unused vars `count`, `current`, and
+       `order`.
+
+       * lisp/cedet/ede/pconf.el: Use lexical-binding.
+       (ede-proj-configure-synchronize): Remove unused var `add-missing`.
+
+       * lisp/cedet/ede/pmake.el (ede-proj-makefile-garbage-patterns):
+       Simplify via η-reduction.
+       (ede-proj-makefile-dependencies): Use `seq-some` rather than `eval+or`.
+
+       * lisp/cedet/ede/proj-elisp.el: Use lexical-binding.
+       (project-compile-target): Remove unused var `elc`.
+       (ede-update-version-in-source): Remove unused var `match`.
+       (project-compile-target): Declare function `cedet-update-autoloads`
+       from file we don't have.
+
+       * lisp/cedet/cedet-cscope.el: Use lexical-binding.
+       * lisp/cedet/cedet-files.el: Use lexical-binding.
+       * lisp/cedet/cedet-global.el: Use lexical-binding.
+       * lisp/cedet/cedet.el: Use lexical-binding.
+       * lisp/cedet/ede/auto.el: Use lexical-binding.
+       * lisp/cedet/ede/autoconf-edit.el: Use lexical-binding.
+       * lisp/cedet/ede/config.el: Use lexical-binding.
+       * lisp/cedet/ede/cpp-root.el: Use lexical-binding.
+       * lisp/cedet/ede/detect.el: Use lexical-binding.
+       * lisp/cedet/ede/generic.el: Use lexical-binding.
+       * lisp/cedet/ede/linux.el: Use lexical-binding.
+       * lisp/cedet/ede/locate.el: Use lexical-binding.
+       * lisp/cedet/ede/makefile-edit.el: Use lexical-binding.
+       * lisp/cedet/ede/proj-info.el: Use lexical-binding.
+       * lisp/cedet/ede/proj-obj.el: Use lexical-binding.
+       * lisp/cedet/ede/proj-prog.el: Use lexical-binding.
+       * lisp/cedet/ede/proj-shared.el: Use lexical-binding.
+       * lisp/cedet/ede/proj.el: Use lexical-binding.
+       * lisp/cedet/ede/shell.el: Use lexical-binding.
+       * lisp/cedet/ede/simple.el: Use lexical-binding.
+       * lisp/cedet/ede/source.el: Use lexical-binding.
+       * lisp/cedet/ede/speedbar.el: Use lexical-binding.
+       * lisp/cedet/ede/util.el: Use lexical-binding.
+
+2021-03-12  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into native-comp
+
+2021-03-12  Michael Albinus  <michael.albinus@gmx.de>
+
+       Tramp sshfs fixes
+
+       * doc/misc/tramp.texi (FUSE setup): Fix typo.
+
+       * lisp/net/tramp-sshfs.el (tramp-sshfs-handle-set-file-modes):
+       Use `tramp-compat-set-file-modes'.
+
+       * test/lisp/net/tramp-tests.el
+       (tramp-test43-asynchronous-requests): Don't run for tramp-sshfs.
+
+2021-03-12  Andrea Corallo  <akrl@sdf.org>
+
+       Implement `no-native-compile' (bug#46983)
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-from-buffer): Capture
+       `no-native-compile'.
+       * lisp/emacs-lisp/comp.el (no-native-compile): Define new
+       variable.
+       (comp-spill-lap-function): Throw when `no-native-compile' was
+       captured non-nil.
+       (comp--native-compile): Catch `no-native-compile' if necessary and
+       return nil in case.
+
+2021-03-12  Robert Pluim  <rpluim@gmail.com>
+
+       Document how to create a branch for Git/Mercurial
+
+       * doc/emacs/maintaining.texi (Creating Branches): Add instructions
+       for git/Mercurial.
+
+2021-03-12  Andrea Corallo  <akrl@sdf.org>
+
+       Fix error reporting for async native compilation (bug#47024)
+
+       * lisp/emacs-lisp/comp.el (comp--native-compile): During async
+       compilation if we catch an error print it in a parsable way so we
+       can report it to the user.
+
+2021-03-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/cconv.el (cconv--analyze-use): Simplify (doh!)
+
+2021-03-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/cconv.el (cconv--analyze-use): Tune down the warning
+
+       Don't warn for always-nil bindings if the binding is made explicit.
+       Fixes bug#47080.
+
+2021-03-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/syntax.el (syntax-propertize-rules): Use 
`macroexp-let2`
+
+       This also silences the recently introduced compilation warning.
+
+2021-03-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Rename to image--transform-smoothing in image-mode.el
+
+       * lisp/image-mode.el (image--transform-smoothing): Rename from
+       image-transform-smoothing.
+       (image-transform-properties, image-transform-reset): Adjust usage.
+
+2021-03-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a new `image-transform-smoothing' user option
+
+       * doc/lispref/display.texi (Image Descriptors): Document it.
+       * lisp/image.el (image-transform-smoothing): New user option.
+       (create-image): Use it.
+       (image--default-smoothing): New function.
+
+2021-03-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix compilation warning in python-wy.el after lexical rewrite
+
+       * admin/grammars/python.wy: Require semantic/tag.
+
+       In end of data:
+       cedet/semantic/wisent/python-wy.el:862:1: Warning: the function
+           `semantic-tag-name' might not be defined at runtime.
+
+2021-03-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make byte-compiled uses of `define-minor-mode' more compatible
+
+       * lisp/emacs-lisp/easy-mmode.el (define-minor-mode): Be more
+       defensive about accessing minor mode variables.
+
+2021-03-11  Yuan Fu  <casouri@gmail.com>
+
+       Map redo records for undo in region to 'undo-in-region
+
+       * lisp/simple.el (undo-equiv-table): Add explanation for
+       undo-in-region, undo to the beginning of undo list and null undo.
+       (undo): If equiv is 'undo-in-region, empty or t, set pending-undo-list
+       to t.  If the redo is undo-in-region, map buffer-undo-list to
+       'undo-in-region instead of t, if it is an identity mapping, map to
+       'empty.
+       (undo-make-selective-list): Only continue when ulist is a proper list.
+       * test/lisp/simple-tests.el (simple-tests--undo): Add test for
+       undo-only in region.
+       (simple-tests--sans-leading-nil): New helper function.
+       (simple-tests--undo-equiv-table): New test for 'undo-equiv-table'.
+
+2021-03-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/mail/: Use lexical-binding
+
+       Remove some redundant `:group` args as well.
+
+       * lisp/mail/supercite.el: Use lexical-binding.
+       (completer-disable): Declare var.
+       (sc-set-variable): Don't rely on dynbind to access `help` variable.
+
+       * lisp/mail/mail-extr.el: Use lexical-binding.
+       (mail-extract-address-components): Avoid use of dynamic scoping to
+       refer to local vars.
+
+       * lisp/mail/mailabbrev.el: Use lexical-binding.
+       (mail-abbrev-make-syntax-table): Rename `_` variable to `syntax-_`.
+
+       * lisp/mail/mailheader.el: Use lexical-binding.
+       (headers): Don't declare as dynbound globally.
+       (mail-header-set, mail-header-merge): Declare `headers` as dynbound
+       locally, instead.  Mark those functions as obsolete.
+       (mail-header-format): Use `alist-get` instead of `mail-header`.
+
+       * lisp/mail/binhex.el (binhex-decode-region-external): Remove always-nil
+       var `firstline`.
+
+       * lisp/mail/emacsbug.el: Use lexical-binding.
+       (report-emacs-bug): Remove always-nil var `message-end-point`.
+
+       * lisp/mail/rmail-spam-filter.el: Use lexical-binding.
+       (bbdb/mail_auto_create_p): Declare variable.
+
+       * lisp/mail/rmail.el (rmail-get-new-mail): Remove always-nil var
+       `delete-files`.
+
+       * lisp/mail/rmailout.el: Use lexical-binding.
+       (rmail-output-read-file-name): Remove unused var `err`.
+       (rmail-convert-to-babyl-format): Remove unused var `count`.
+       (rmail-output-as-mbox): Remove unused vars `from` and `date`.
+
+       * lisp/mail/rmailsort.el: Use lexical-binding.
+       (rmail-sort-messages): Remove unused var `msginfo`.
+
+       * lisp/mail/rfc822.el: Use lexical-binding.
+       * lisp/mail/rmailedit.el: Use lexical-binding.
+       * lisp/mail/mailclient.el: Use lexical-binding.
+       * lisp/mail/blessmail.el: Use lexical-binding.
+       * lisp/mail/mail-hist.el: Use lexical-binding.
+       * lisp/mail/rmailkwd.el: Use lexical-binding.
+       * lisp/mail/rmailmsc.el: Use lexical-binding.
+       * lisp/mail/uce.el: Use lexical-binding.
+       * lisp/mail/unrmail.el: Use lexical-binding.
+
+2021-03-11  Juri Linkov  <juri@linkov.net>
+
+       Update docstrings of 'delete'/'remove' to interlink each other 
(bug#47054)
+
+       * lisp/subr.el (remove): Add xref to 'delete'.
+       * src/fns.c (Fdelete): Add xref to 'remove'.
+
+2021-03-11  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el (tab-bar--current-tab-find): New function.
+
+       (tab-bar-close-other-tabs, tab-bar-close-group-tabs): Use it.
+       (tab-bar--history-pre-change): Rename from
+       'tab-bar-history--pre-change' to follow naming convention.
+       (tab-bar-history-mode): Use renamed 'tab-bar--history-pre-change'.
+
+2021-03-11  Paul Eggert  <eggert@cs.ucla.edu>
+
+       On MS-Windows, fflush stderr after newline
+
+       Problem reported by Ioannis Kappas (Bug#46388).
+       * src/sysdep.c (errputc) [WINDOWSNT]: Flush stderr after newline.
+
+2021-03-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/outline.el (outline-font-lock-keywords): Simplify
+
+       The `laxmatch` part of `font-lock-keywords` is just a boolean.
+
+2021-03-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp: Remove yet more always-nil variables
+
+       * lisp/align.el (align-region):
+       Remove always-nil variable `group-c`.
+       * lisp/ido.el (ido-make-prompt): Remove always-nil variable `prefix`.
+
+       * lisp/xdg.el (xdg-mime-collect-associations):
+       Remove always-nil variable `end`.
+
+       * lisp/calc/calc-yank.el (calc-edit):
+       Remove always-nil variable `flag`.
+
+       * lisp/calendar/todo-mode.el (todo-edit-item--header):
+       Remove always-nil variable `dayname`.
+       (todo-show-categories-table):
+       Remove always-nil variable `sortkey`.
+
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-ispell-docstring-engine):
+       Remove always-nil variable `err`.
+
+       * lisp/emacs-lisp/tcover-ses.el: Remove always-nil variable `pause`.
+
+       * lisp/eshell/em-ls.el (eshell-ls-files):
+       Remove always-nil variable `ignore`.
+
+       * lisp/net/ange-ftp.el (ange-ftp-copy-file-internal): Remove always-nil
+       variable `temp2`.
+
+       * lisp/progmodes/cperl-mode.el (cperl-tags-hier-init): Remove
+       always-nil variables `l1`, `l2`, `l3`.
+       (cperl-tags-treeify): Remove always-nil variable `l1`.
+
+       * lisp/progmodes/ebrowse.el (ebrowse-tags-read-member+class-name):
+       Remove always-nil variable `class`.
+
+       * lisp/textmodes/artist.el (artist-draw-ellipse-with-0-height):
+       Remove always-nil variable `fill-info`.
+
+       * lisp/textmodes/flyspell.el (flyspell-emacs-popup):
+       Remove always-nil variable `show-affix-info`.
+
+       * lisp/textmodes/rst.el (rst-Ado):
+       Remove always-nil variable `char`.
+
+       * lisp/vc/vc.el (vc-diff-build-argument-list-internal):
+       Remove always-nil variable `rev2-default`.
+
+2021-03-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/cedet: Remove always-nil variables
+
+       * lisp/cedet/ede/pmake.el (ede-proj-makefile-insert-variables):
+       Remove always-nil variable `conf-done`.
+
+       * lisp/cedet/ede/project-am.el: Use ref instead of dynbound var.
+       (project-rescan): Pass the ref.
+       (project-am-expand-subdirlist): Use it.
+
+       * lisp/cedet/semantic/idle.el (semantic-idle-work-core-handler):
+       Fix misuse of the wrong `errbuf `variable.
+
+       * lisp/cedet/semantic/scope.el (semantic-analyze-scoped-type-parts):
+       Remove always-nil variable `extmeth`.
+
+       * lisp/cedet/semantic/wisent/comp.el (wisent-context-name)
+       (wisent-context-bindings): Make them into functions.
+       (wisent-with-context): Use `dlet`.
+
+2021-03-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emulation/edt.el (edt-with-position): Don't bind `left`
+
+       (edt-find-forward, edt-find-next-forward, edt-sentence-forward)
+       (edt-paragraph-forward): Adjust accordingly.
+
+2021-03-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/vc/pcvs-parse.el: Fix lexical-binding breakage
+
+       (cvs-parse-table, cvs-parse-merge, cvs-parse-status, cvs-parse-commit):
+       Declare vars set by `cvs-match` as dynamic.
+
+2021-03-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/ses.el (ses-set-cell): Use `macroexp-let2`
+
+       (ses--\,@); Rename from `ses--metaprogramming`.
+
+2021-03-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/obsolete/iswitchb.el: Remove dead code
+
+       (most-len, most-is-exact): Delete vars.
+       (iswitchb-output-completion): Delete function.
+       (iswitchb-completions): Delete dead code consequence of `most` being 
nil.
+
+2021-03-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/org/: Delete some always-nil variables
+
+       * lisp/org/ob-lilypond.el (org-babel-lilypond-compile-lilyfile):
+       Remove always-nil variable `arg-2`.
+
+       * lisp/org/ol-gnus.el (org-gnus-store-link):
+       Remove always-nil variables `newsgroup` and `xarchive`.
+
+       * lisp/org/ol.el (org-store-link):
+       Remove always-nil variable `description`.
+
+       * lisp/org/org-clock.el (org-clock-special-range):
+       Remove always-nil variables `m1` and `m`.
+
+       * lisp/org/org-crypt.el (org--matcher-tags-todo-only): Declare var.
+
+       * lisp/org/org-protocol.el (org-protocol-open-source):
+       Remove always-nil variable `result`.
+
+       * lisp/org/ox-odt.el (org-odt-format-label):
+       Remove always-nil variable `short-caption`.
+       (org-odt-link--inline-formula):
+       Remove always-nil variables `width` and `height`.
+
+       * lisp/org/ox.el (org-export--missing-definitions):
+       Remove always-nil variable `seen`.
+
+2021-03-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/cconv.el (cconv--analyze-use): Warn never-initialized 
vars
+
+       (byte-compile-not-lexical-var-p): Remove Emacs<24 compatibility.
+
+2021-03-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Re-fix previous Info-fontify-node change
+
+       * lisp/info.el (Info-fontify-node): Re-fix previous fix here
+       (bug#34661) by fixing an off-by-one error in the `looking-back'.
+
+2021-03-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/mouse.el: Fix mouse-1-clock-follows-mouse = double
+
+       This functionality was broken by commit 3d5e31eceb9dc1fb62b2b2,
+       the problem being that we end up considering as distinct the events
+       `down-double-mouse-1` and `double-down-mouse-1`.
+
+       Reported by Eyal Soha <eyalsoha@gmail.com>
+
+       (mouse--click-1-maybe-follows-link): Make sure the last element of
+       the list passed to `event-convert-list` is indeed a "basic" event.
+
+2021-03-11  Michael Albinus  <michael.albinus@gmx.de>
+
+       Add remote processes to Tramp sshfs method
+
+       * doc/misc/tramp.texi (FUSE setup): Method sshfs supports also
+       remote processes.
+
+       * lisp/net/tramp-cache.el (tramp-get-file-property)
+       (tramp-set-file-property): Move setting of
+       `tramp-cache-unload-hook' out of function.
+
+       * lisp/net/tramp.el (tramp-expand-args): New defun.
+       (tramp-handle-make-process):
+       * lisp/net/tramp-sh.el (tramp-do-copy-or-rename-file-out-of-band)
+       (tramp-maybe-open-connection):
+       * lisp/net/tramp-sshfs.el (tramp-sshfs-maybe-open-connection):
+       * lisp/net/tramp-sudoedit.el (tramp-sudoedit-send-command): Use it.
+
+       * lisp/net/tramp-sshfs.el (tramp-methods) <sshfs>:
+       Adapt `tramp-mount-args'.  Add `tramp-login-args',
+       `tramp-direct-async', `tramp-remote-shell',
+       `tramp-remote-shell-login' and `tramp-remote-shell-args'.
+       (tramp-connection-properties): Set "direct-async-process" fir sshfs.
+       (tramp-sshfs-file-name-handler-alist): Add `exec-path',
+       `make-process', `process-file', `set-file-modes', `shell-command',
+       `start-file-process', `tramp-get-remote-gid',
+       `tramp-get-remote-uid' and `tramp-set-file-uid-gid'.
+       (tramp-sshfs-handle-exec-path, tramp-sshfs-handle-process-file)
+       (tramp-sshfs-handle-set-file-modes): New defuns.
+
+       * test/lisp/net/tramp-tests.el (tramp-test20-file-modes)
+       (tramp-test28-process-file, tramp-test29-start-file-process)
+       (tramp-test30-make-process, tramp-test32-shell-command)
+       (tramp-test32-shell-command-dont-erase-buffer)
+       (tramp-test34-explicit-shell-file-name, tramp-test35-exec-path)
+       (tramp-test43-asynchronous-requests): Run also for tramp-sshfs.
+       (tramp--test-shell-file-name): New defun.
+       (tramp-test28-process-file)
+       (tramp-test34-explicit-shell-file-name)
+       (tramp-test43-asynchronous-requests): Use it.
+       (tramp-test40-special-characters-with-stat)
+       (tramp-test40-special-characters-with-perl)
+       (tramp-test40-special-characters-with-ls)
+       (tramp-test41-utf8-with-stat, tramp-test41-utf8-with-perl)
+       (tramp-test41-utf8-with-ls): Remove superfluous skip.
+
+2021-03-11  Petteri Hintsanen  <petterih@iki.fi>
+
+       Make tags tables from Texinfo sources
+
+       * doc/misc/Makefile.in (ETAGS, texifiles): New variables.
+       (TAGS, tags, FORCE, ${ETAGS}): New targets.
+       (bootstrap-clean maintainer-clean): Delete TAGS.
+       * doc/lispref/Makefile.in (ETAGS, texifiles): New variables.
+       (TAGS, tags, FORCE, ${ETAGS}): New targets.
+       (bootstrap-clean maintainer-clean): Delete TAGS.
+       * doc/lispintro/Makefile.in (ETAGS, texifiles): New variables.
+       (TAGS, tags, FORCE, ${ETAGS}): New targets.
+       (bootstrap-clean maintainer-clean): Delete TAGS.
+       * doc/emacs/Makefile.in (ETAGS, texifiles): New variables.
+       (TAGS, tags, FORCE, ${ETAGS}): New targets.
+       (bootstrap-clean maintainer-clean): Delete TAGS.
+       * Makefile.in (TAGS tags): Make tags in doc/emacs, doc/lispintro,
+       doc/lispref and doc/misc.
+
+2021-03-11  Philipp Stephani  <phst@google.com>
+
+       * src/image.c (image_set_transform): Don't use ! for Lisp object.
+
+       * src/image.c (FRAME_SCALE_FACTOR): Define only when needed.
+
+2021-03-11  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix wording of a recently added documentation
+
+       * etc/NEWS:
+       * doc/lispref/display.texi (Image Descriptors): Fix wording of the
+       description of :transform-smoothing.
+
+2021-03-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/gnus/nnmh.el (nnmh-newsgroup-articles): Declare var
+
+       Reported by Barry Fishman <barry@ecubist.org>.
+
+       Along the way, I checked other variables which are similarly let-bound
+       to nil and then read with any intervening assignment, which found
+       another similar case of missing `defvar`s plus a bit of dead code.
+
+       * lisp/gnus/gnus-kill.el (gnus-apply-kill-file-internal):
+       Remove constant nil var `beg`.
+       * lisp/gnus/gnus-search.el (gnus-search-query-parse-kv):
+       Remove constant nil var `return`.
+       * lisp/gnus/gnus-start.el (gnus-ask-server-for-new-groups):
+       Remove constant nil var `group`.
+       (gnus-killed-assoc, gnus-marked-assoc, gnus-newsrc-assoc): Declare vars.
+       * lisp/gnus/gnus-sum.el (gnus-compute-read-articles):
+       Remove constant nil var `first`.
+       * lisp/gnus/nnbabyl.el (nnbabyl-request-accept-article):
+       Remove constant nil var `beg`.
+       * lisp/gnus/nnfolder.el (nnfolder-possibly-change-group):
+       Remove constant nil var `inf`.
+       * lisp/gnus/nnrss.el (nnrss-request-article):
+       Remove constant nil var `err`.
+
+2021-03-10  Alan Third  <alan@idiocy.org>
+
+       Enable selectable image smoothing (bug#38394)
+
+       * lisp/doc-view.el (doc-view-insert-image): Always use smoothing in
+       docview.
+       * lisp/image-mode.el (image-transform-smoothing): New variable.
+       (image-mode-map): Add smoothing binding.
+       (image-transform-properties): Apply smoothing when requested.
+       (image-transform-set-smoothing): New function.
+       (image-transform-reset): Reset smoothing.
+       * src/image.c (image_set_transform): Use new :transform-smoothing
+       attribute.
+       (syms_of_image): Add :transform-smoothing attribute.
+       * doc/lispref/display.texi (Image Descriptors): Document new
+       :transform-smoothing property.
+
+2021-03-10  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el (tab-bar-close-group-tabs): New command.
+
+       (tab-close-group): New alias.
+       (tab-bar-close-other-tabs): Rewrite to fix old bug where regardless of
+       the returned value from tab-bar-tab-prevent-close-functions,
+       only one tab was retained.
+
+2021-03-10  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el: 'C-x t G' (tab-group) assigns a group name to the 
tab.
+
+       * lisp/tab-bar.el (tab-bar--tab, tab-bar--current-tab): Add tab group 
if any.
+       (tab-bar-change-tab-group): New command.
+       (display-buffer-in-new-tab): Handle tab-group alist entry.
+       (tab-group): New alias.
+       (tab-prefix-map): Bind "G" to 'tab-group'.
+
+2021-03-10  Kévin Le Gouguec  <kevin.legouguec@gmail.com>
+
+       Highlight the entire summary line for selected articles
+
+       * lisp/gnus/gnus-sum.el (gnus-highlight-selected-summary):
+       Highlight the entire summary line (bug#47026).
+
+2021-03-10  Stefan Kangas  <stefan@marxist.se>
+
+       Remove Emacs 19 workaround from cperl-mode.el
+
+       * lisp/progmodes/cperl-mode.el (cperl-make-indent): Remove Emacs 19
+       workaround.
+
+2021-03-10  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/loadup.el: Don't load pcase on native builds (bug#47025).
+
+2021-03-10  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix byte-compilation warning in benchmark-run
+
+       * lisp/emacs-lisp/benchmark.el (benchmark-run): Avoid a
+       byte-compilation warning about an empty let body (bug#46819).
+
+2021-03-10  Andrea Corallo  <akrl@sdf.org>
+
+       Fix truncated warnings (bug#47024)
+
+       * lisp/emacs-lisp/comp.el (comp-run-async-workers): Bind
+       `warning-fill-column' to `most-positive-fixnum'.
+
+2021-03-10  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/files.el (cd): Improve error message.
+
+2021-03-10  Mattias Engdegård  <mattiase@acm.org>
+
+       Mark string predicates side-effect-free
+
+       * lisp/emacs-lisp/byte-opt.el (side-effect-free-fns): Add string>,
+       string-greaterp, string-empty-p, string-prefix-p, string-suffix-p
+       and string-blank-p, all recently marked pure.
+
+2021-03-10  Stefan Kangas  <stefan@marxist.se>
+
+       Remove several references to Emacs 22 and earlier
+
+       * admin/charsets/mapfiles/README:
+       * doc/emacs/custom.texi (Saving Customizations):
+       * doc/lispintro/emacs-lisp-intro.texi (Simple Extension):
+       * doc/misc/efaq-w32.texi (Location of init file):
+       * doc/misc/gnus-faq.texi (FAQ 1-3):
+       * doc/misc/gnus.texi (Top, Various, Image Enhancements):
+       * lisp/erc/erc-menu.el (menu):
+       * lisp/progmodes/cfengine.el (cfengine-fill-paragraph):
+       Remove some references to Emacs 22 and earlier.
+
+       * doc/lispref/buffers.texi:
+       * doc/lispref/eval.texi:
+       * doc/lispref/files.texi:
+       * doc/lispref/keymaps.texi:
+       * doc/lispref/loading.texi:
+       * doc/lispref/minibuf.texi:
+       * doc/lispref/positions.texi:
+       * doc/lispref/variables.texi: Remove comments about "Emacs 19
+       specific" features.
+
+2021-03-10  Stefan Kangas  <stefan@marxist.se>
+
+       Fix duplicate ":" in ert-find-test-other-window prompt
+
+       * lisp/emacs-lisp/ert.el (ert-find-test-other-window): Don't insert
+       duplicate ":" in prompt.
+
+2021-03-10  Stefan Kangas  <stefan@marxist.se>
+
+       Do mode tagging in ert.el
+
+2021-03-10  Stefan Kangas  <stefan@marxist.se>
+
+       Use proper command substitutions in some docstrings
+
+       * lisp/arc-mode.el (archive-mode):
+       * lisp/ibuffer.el (ibuffer):
+       * lisp/tar-mode.el (tar-mode):
+       * lisp/textmodes/table.el (table-insert): Use substitute-command-keys
+       instead of hardcoded keys in some docstrings.
+
+2021-03-10  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/userlock.el: Use lexical-binding.
+
+2021-03-10  Stefan Kangas  <stefan@marxist.se>
+
+       Use 'help-key-binding' face in userlock.el
+
+       * lisp/userlock.el (userlock--fontify-key): New function.
+       (ask-user-about-lock, ask-user-about-lock-help,
+       (ask-user-about-supersession-threat)
+       (ask-user-about-supersession-help): Add face 'help-key-binding' to
+       displayed keys.
+
+2021-03-10  Dmitry Gutov  <dgutov@yandex.ru>
+
+       (project-switch-commands): Remove the ###autoload instruction
+
+       * lisp/progmodes/project.el (project-switch-commands):
+       Remove the ###autoload instruction.  It's unnecessary and can
+       cause surprises in some circumstances (bug#46986).
+
+2021-03-10  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/help.el (help--describe-translation): Fix typo.
+
+2021-03-09  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/mail/rmailmm.el: Use `cl-defstruct` and `lexical-binding`
+
+       Remove redundant `:group` args.
+       (rmail-mime-entity): Make it a `cl-defstruct`.
+       (rmail-mime-entity-set-truncated): Mark as obsolete.
+       (rmail-mime-display): New `cl-defstruct`.
+       (rmail-mime-shown-mode, rmail-mime-hidden-mode, rmail-mime-raw-mode)
+       (rmail-mime-toggle-hidden, rmail-mime-update-tagline)
+       (rmail-mime-text-handler, rmail-mime-bulk-handler)
+       (rmail-mime-process-multipart, rmail-mime-handle, rmail-mime-process)
+       (rmail-mime-parse, rmail-mime-insert, rmail-show-mime): Adjust 
accordingly.
+       (rmail-mime-toggle-raw): Apply de Morgan.
+       (rmail-mime-insert-text): Remove unused var `tagline`.
+       (rmail-mime-insert-image): Remove unused var `content-type`.
+       (shr-inhibit-images, shr-width): Declare vars.
+       (rmail-mime-insert-multipart): Remove unused vars `tagline` and `body`.
+       (rmail-mime-insert): Remove unused var `tagline`.
+       (rmail-search-mime-message): Remove unused var `body-end`.
+
+2021-03-09  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Port alternate signal stack to upcoming glibc 2.34
+
+       * src/sysdep.c (sigsegv_stack): Increase size to 64 KiB and align
+       it to max_align_t.  This copies from Gnulib’s c-stack.c, and works
+       around a portability bug in draft glibc 2.34, which no longer
+       defines SIGSTKSZ when _GNU_SOURCE is defined.
+
+2021-03-09  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/buffer.c (Fbuffer_swap_text): Swap `mark-active` as well
+
+       This avoids undesirable situations where `mark-active` is set even
+       though the `mark` isn't.
+
+2021-03-09  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el (tab-bar-select-tab): Set window-state-put WINDOW arg 
to nil
+
+       WINDOW arg nil will always create a new window regardless of the value
+       returned by 'frame-root-window' that is nondeterministic - it returns
+       an internal window when there are more than 1 window on the frame/tab,
+       otherwise it returns a live window that was reused between different 
tabs
+       (bug#46904)
+       (tab-prefix-map): Bind "u" to 'tab-undo'.
+
+2021-03-09  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/cconv.el: Don't confuse a string for a docstring
+
+       (cconv--convert-funcbody): Check there's something after a docstring.
+
+       * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-string-vs-docstring):
+       New corresponding test.
+
+2021-03-09  Andrea Corallo  <akrl@sdf.org>
+
+       * src/comp.c (ABI_VERSION): Bump following-up 380ba045c4.
+
+       * test/src/comp-resources/comp-test-funcs.el
+       (comp-test-46670-1-f): Remove a warning.
+
+       Merge commit '9cbdf20316' into native-comp
+
+2021-03-09  Pip Cet  <pipcet@gmail.com>
+
+       * Fix comp unit type decl in eln files to fix GC crash (bug#46256)
+
+       * src/comp.c (emit_ctxt_code): Allocate comp_unit as a Lisp_Object,
+       not a pointer to pointer to Lisp_Object.
+
+2021-03-09  Pip Cet  <pipcet@gmail.com>
+
+       Zero stale pointer when unloading comp units (bug#46256)
+
+       * src/alloc.c (cleanup_vector): Call unload_comp_unit.
+       * src/comp.c (unload_comp_unit): New function.
+
+2021-03-09  Konstantin Kharlamov  <Hi-Angel@yandex.ru>
+
+       smerge-vc-next-conflict: Move to conflict markers more reliably
+
+       * lisp/vc/smerge-mode.el (smerge-vc-next-conflict): Search for a
+       conflict marker if call to (vc-find-conflicted-file) haven't resulted in
+       a jump to one.  And remove `buffer` variable that becomes unused.
+
+2021-03-09  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Strip text properties from the default string
+
+       * lisp/progmodes/project.el (project--read-regexp):
+       Strip text properties from the default string (bug#47012).
+
+2021-03-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make semantic/idle not move point after last change
+
+       * lisp/cedet/semantic/idle.el (semantic--eldoc-info): Don't move
+       point (bug#46999).
+
+2021-03-08  Juri Linkov  <juri@linkov.net>
+
+       * lisp/progmodes/xref.el (xref-after-update-hook): New defcustom 
(bug#46992).
+
+       (xref--insert-xrefs): Use run-hooks on it.
+
+2021-03-08  Juri Linkov  <juri@linkov.net>
+
+       * lisp/faces.el (help-argument-name): Use grey background, not 
foreground
+
+       https://lists.gnu.org/archive/html/emacs-devel/2021-03/msg00402.html
+
+2021-03-08  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/net/*.el: Use lexical-binding
+
+       Also remove some redundant `:group` arguments.
+
+       * lisp/net/eudc-export.el: Use lexical-binding.
+       (eudc-create-bbdb-record): Use `cl-progv` and `apply` to avoid `eval`.
+
+       * lisp/net/eudc-hotlist.el: Use lexical-binding.
+
+       * lisp/net/eudc.el (eudc-print-attribute-value): Use `funcall` to avoid
+       `eval`.
+
+       * lisp/net/eudcb-bbdb.el: Use lexical-binding.
+       (eudc-bbdb-filter-non-matching-record): Use `funcall` to avoid `eval`.
+       Move `bbdb-val` binding to avoid `setq`.
+       Use `seq-some` instead of `eval+or`.
+       (eudc-bbdb-format-record-as-result): Use `dolist` and `pcase`.
+       Use `funcall` to avoid `eval`.
+       (eudc-bbdb-query-internal): Simplify a bit.
+
+       * lisp/net/eudcb-ldap.el: Use lexical-binding.
+       (eudc-ldap-get-host-parameter): Use `defalias` to avoid 
`eval-and-compile`.
+
+       * lisp/net/telnet.el: Use lexical-binding.
+       * lisp/net/quickurl.el: Use lexical-binding.
+       * lisp/net/newst-ticker.el: Use lexical-binding.
+       * lisp/net/newst-reader.el: Use lexical-binding.
+       * lisp/net/goto-addr.el: Use lexical-binding.
+       * lisp/net/gnutls.el: Use lexical-binding.
+       * lisp/net/eudcb-macos-contacts.el: Use lexical-binding.
+       * lisp/net/eudcb-mab.el: Use lexical-binding.
+
+       * lisp/net/net-utils.el: Use lexical-binding.
+       (finger): Remove unused var `found`.
+
+       * lisp/net/network-stream.el (open-protocol-stream): Remove redundant
+       `defalias`.
+
+       * lisp/net/newst-plainview.el: Use lexical-binding.
+       (newsticker-hide-entry, newsticker-show-entry): Remove unused var
+       `is-invisible`.
+       (w3m-fill-column, w3-maximum-line-length): Declare vars.
+
+       * lisp/net/tramp.el (tramp-compute-multi-hops):
+       * lisp/net/tramp-compat.el (tramp-compat-temporary-file-directory):
+       * lisp/net/tramp-cmds.el (tramp-default-rename-file):
+       * lisp/net/webjump.el (webjump): Don't forget lexical-binding for 
`eval`.
+
+2021-03-08  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix handling of `tramp-cache-{g,s}et-count-*'
+
+       * lisp/net/tramp-cache.el (tramp-get-file-property)
+       (tramp-set-file-property): Fix handling of 
`tramp-cache-{g,s}et-count-*'.
+
+2021-03-08  Philipp Stephani  <phst@google.com>
+
+       Fix structure of condition object in nested 'ert-fail'.
+
+       See the test 'ert-test-fail' for the expected structure.
+
+       * lisp/emacs-lisp/ert.el (ert--should-signal-hook): Condition list
+       should be (SYMBOL . DATA), not (SYMBOL DATA).
+       * test/lisp/emacs-lisp/ert-tests.el (ert-test-fail-inside-should): Fix
+       unit test.
+
+2021-03-08  Simen Heggestøyl  <simenheg@gmail.com>
+
+       Use `pop-to-buffer-same-window' in `project-eshell'
+
+       * lisp/progmodes/project.el (project-eshell): Use
+       `pop-to-buffer-same-window' instead of `pop-to-buffer' to match the
+       behavior of `M-x eshell'.
+
+2021-03-08  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Make checkdoc--next-docstring use the doc-string-elt property
+
+       This follows from a fix for Bug#46918 and a discussion to use
+       doc-string-elt:
+       https://lists.gnu.org/archive/html/emacs-devel/2021-03/msg00232.html
+
+       * lisp/emacs-lisp/checkdoc.el (checkdoc--next-docstring): Check for a
+       non-nil doc-string-elt property, instead of hard-coding the
+       supported symbols.  Use that property to position point at the
+       doc-string.
+
+2021-03-08  Michael Albinus  <michael.albinus@gmx.de>
+
+       Add Tramp sshfs method
+
+       * doc/misc/tramp.texi (Top, Configuration): Insert sections 'FUSE-based
+       methods' and 'FUSE setup' in menu.
+       (Quick Start Guide): Fix @anchors.  Add doas.  Extend section
+       'Using @command{rclone}' to 'Using @acronym{FUSE}-based methods'.
+       (External methods): Remove rclone paragraph.
+       (FUSE-based methods, FUSE setup): New nodes.
+       (Predefined connection information): Mention "mount-point".
+
+       * etc/NEWS: Mention Tramp sshfs method.
+       Fix typos and other oddities.
+
+       * lisp/net/tramp-fuse.el: New file.
+
+       * lisp/net/tramp-rclone.el (tramp-fuse): Require.
+       (tramp-rclone-file-name-handler-alist): Replace `tramp-rclone-handle-*'
+       by `tramp-fuse-handle-*' where appropriate.
+       (tramp-rclone-handle-delete-directory)
+       (tramp-rclone-handle-delete-file)
+       (tramp-rclone-handle-directory-files)
+       (tramp-rclone-handle-file-attributes)
+       (tramp-rclone-handle-file-executable-p)
+       (tramp-rclone-handle-file-name-all-completions)
+       (tramp-rclone-handle-file-readable-p)
+       (tramp-rclone-handle-insert-directory)
+       (tramp-rclone-handle-insert-file-contents)
+       (tramp-rclone-handle-make-directory, tramp-rclone-mount-point)
+       (tramp-rclone-mounted-p, tramp-rclone-local-file-name):
+       Remove.  Functionality moved to tramp-fuse.el.
+       (tramp-rclone-remote-file-name)
+       (tramp-rclone-maybe-open-connection): Use `tramp-fuse-*' functions.
+
+       * lisp/net/tramp-sh.el (tramp-do-copy-or-rename-file-out-of-band):
+       Simplify check.
+
+       * lisp/net/tramp-sshfs.el: New file.
+
+       * lisp/net/tramp.el: Remove TODO item.
+
+       * test/lisp/net/tramp-tests.el (tramp--test-sshfs-p): New defun.
+       (tramp-test14-delete-directory): Use it.
+
+2021-03-08  Stefan Kangas  <stefan@marxist.se>
+
+       Delete two more items obsoleted in Emacs 23.1
+
+       * lisp/calendar/icalendar.el
+       (icalendar--datetime-to-noneuropean-date): Remove alias obsolete since
+       * lisp/obsolete/nnir.el (nnir-swish-e-index-file):
+       Delete items obsolete since Emacs 23.1.
+
+2021-03-08  Stefan Kangas  <stefan@marxist.se>
+
+       Normalize version specifiers for make-obsolete and friends
+
+       * lisp/auth-source.el (auth-source-forget-user-or-password)
+       (auth-source-user-or-password, auth-source-hide-passwords):
+       * lisp/calendar/icalendar.el (icalendar--datetime-to-noneuropean-date):
+       * lisp/cedet/semantic/db-el.el (semanticdb-elisp-sym-function-arglist):
+       * lisp/emacs-lisp/debug.el (debugger-insert-backtrace):
+       * lisp/obsolete/nnir.el (nnir-swish-e-index-file):
+       * lisp/obsolete/starttls.el (starttls-any-program-available):
+       Normalize version specifiers for make-obsolete and friends.
+
+2021-03-08  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/help-mode.el (help-mode-tool-bar-map): Fix tooltips.
+
+2021-03-08  Stefan Kangas  <stefan@marxist.se>
+
+       Add new face 'help-key-binding' for keybindings in help
+
+       * lisp/faces.el (help-key-binding): New face.
+       * lisp/help.el
+       (help-for-help): Rename from 'help-for-help-internal'.  Use
+       'substitute-command-keys' syntax.
+       (help): Make into alias for 'help-for-help'.
+       (help-for-help-internal): Make into obsolete alias for
+       'help-for-help'.
+       (help--key-description-fontified): New function to add the
+       'help-key-binding' face.
+       (help-key-description, substitute-command-keys)
+       (describe-map-tree, help--describe-command)
+       (help--describe-translation, describe-map):
+       * lisp/help-fns.el (help-fns--key-bindings, describe-mode):
+       Use above new function.
+       * lisp/isearch.el (isearch-help-for-help-internal): Use
+       `substitute-command-keys' syntax.
+       * lisp/help-macro.el (make-help-screen): Use
+       'substitute-command-keys' and 'help--key-description-fontified'.
+       Simplify.
+       * src/keymap.c (describe_key_maybe_fontify): New function to add
+       the 'help-key-binding' face to keybindings.
+       (describe_vector): Use above new keybinding.
+       (syms_of_keymap) <Qfont_lock_face, Qhelp_key_binding>: New
+       DEFSYMs.
+       (fontify_key_properties): New static variable.
+       * lisp/tooltip.el (tooltip-show): Avoid overriding faces in
+       specified tooltip text.
+       * test/lisp/help-tests.el (with-substitute-command-keys-test):
+       Don't test for text properties.
+       (help-tests-substitute-command-keys/add-key-face)
+       (help-tests-substitute-command-keys/add-key-face-listing):
+       New tests.
+
+2021-03-08  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Speed up xref rendering for matches on very long lines
+
+       * lisp/progmodes/xref.el (xref--insert-xrefs): Cut up the current
+       line into pieces here for multiple matches's summaries, so that
+       xref--insert-xrefs can do less work (bug#46859).
+       (xref--insert-xrefs): Do less work.
+       (xref--outdated-p):
+       Update accordingly to how the summary creation logic changed.
+       (xref--buf-pairs-iterator): Update to the new calling convention.
+       (xref-location-column): Effectively rename back to
+       xref-file-location-column since the generic version is now unused.
+
+       * test/lisp/progmodes/xref-tests.el
+       (xref-matches-in-directory-finds-two-matches-on-the-same-line)
+       (xref-matches-in-directory-finds-an-empty-line-regexp-match):
+       Adjust to the xref-location-column change.
+       (xref-matches-in-files-trims-summary-for-matches-on-same-line):
+       New test.
+
+       * test/lisp/progmodes/xref-resources/file1.txt:
+       Change contents slightly to test the new xref--outdated-p code.
+
+2021-03-08  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Xref test improvements
+
+       * test/lisp/progmodes/xref-tests.el
+       (xref--xref-file-name-display-is-abs):
+       Fix not to rely on the default value.
+       (xref-matches-in-files-includes-matches-from-all-the-files):
+       New test.
+
+2021-03-08  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/net/tramp-cache.el: Fix misuse of bound-and-true-p
+
+       (tramp-get-file-property, tramp-set-file-property): Check the var's
+       value rather than its name.
+
+2021-03-08  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/net/ange-ftp.el: Fix problem pointed out by compiler warning
+
+       (ange-ftp-fix-name-for-bs2000): Remove redundant `boundp` test.
+
+2021-03-08  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/erc/erc.el: Fix problem pointed out by compiler warning
+
+       [ Also use `read-string` instead of `read-from-minibuffer`.  ]
+
+       (erc-part-from-channel): Comment out improbable
+       reference to the formal argument from within the interactive spec.
+
+2021-03-08  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/cedet/semantic/fw.el (semantic-find-file-noselect): Fix warning
+
+       Remove ugly hack trying to warn the user about some unknown problem,
+       and which stopped working in 2013 when files.el started using
+       lexical-binding.
+
+2021-03-08  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/skeleton.el (skeleton-read): Silence compiler warning
+
+2021-03-08  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/cedet/semantic/bovine.el: Fix recent regression
+
+       The conversion to `lexical-binding` introduced a regression because
+       `bovine/c.el` relied on inspecting the local variable `lse` in one of
+       its callers.
+
+       (semantic-bovinate-stream): Bind `lse` dynamically, because of
+       `semantic-parse-region-c-mode`.
+       (semantic-bovinate-nonterminal-check-map): Rename from
+       `semantic-bovinate-nonterminal-check-obarray` to hold some other kind
+       of table.
+       (semantic-bovinate-nonterminal-check): Use a hash-table instead of an 
obarray.
+
+       * lisp/cedet/semantic/bovine/c.el (semantic-parse-region-c-mode):
+       Declare use of `lse` via dynamic scoping.
+
+       * test/lisp/cedet/semantic-utest-c.el
+       (semantic-test-c-preprocessor-simulation): Re-enable test.
+
+2021-03-08  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/bytecomp.el: Warn about unprefixed vars in `boundp`
+
+       (byte-compile--check-prefixed-var): New fun,
+       extracted from `byte-compile--declare-var`.
+       (byte-compile--declare-var): Use it.
+       (byte-compile-maybe-guarded): Use it as well.
+
+2021-03-07  Andrea Corallo  <akrl@sdf.org>
+
+       Handle `comp-native-driver-options' both as file-local both as global
+
+       * src/comp.c (add_driver_options): Throw an error if
+       `comp-native-driver-options' is set globally but
+       'gcc_jit_context_add_driver_option' is not available, ignore for
+       the file-local case.
+
+2021-03-07  Andrea Corallo  <akrl@sdf.org>
+
+       Use `length=' and family where possible in native comp code
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-intersect-typesets)
+       (comp-cstr-imm): Use Use `length=' and family where possible.
+       * lisp/emacs-lisp/comp.el (comp-add-cond-cstrs-target-block)
+       (comp-compute-dominator-frontiers)
+       (batch-byte-native-compile-for-bootstrap): Likewise.
+
+2021-03-07  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (w32-get-nproc): Suppress warning declaring 
it.
+
+       For non Windows system.
+
+2021-03-07  Andrea Corallo  <akrl@sdf.org>
+
+       Allow for `comp-native-driver-options' to work as a file-local variable.
+
+2021-03-07  Juri Linkov  <juri@linkov.net>
+
+       Remove outline-cycle-minor-mode and outline-cycle-highlight-minor-mode
+
+       * lisp/outline.el (outline-font-lock-keywords): Use OVERRIDE or
+       LAXMATCH depending on outline-minor-mode-highlight in 
outline-minor-mode.
+       (outline-minor-mode-cycle, outline-minor-mode-highlight): Promote
+       defvar to defcustom.
+       (outline-minor-mode-highlight-buffer): Don't override existing faces.
+       (outline-cycle-minor-mode, outline-cycle-highlight-minor-mode):
+       Remove minor modes.
+
+       * etc/compilation.txt:
+       * etc/grep.txt: Enable outline-minor-mode-cycle and
+       outline-minor-mode-highlight with outline-minor-mode.
+       https://lists.gnu.org/archive/html/emacs-devel/2021-03/msg00144.html
+
+2021-03-07  Andrea Corallo  <akrl@sdf.org>
+
+       Work around GCC PR99126 on all libgccjit < 11
+
+       * src/comp.c (Fcomp__compile_ctxt_to_file): Work around GCC
+       PR99126 on all libgccjit < 11.
+
+2021-03-07  Michael Albinus  <michael.albinus@gmx.de>
+
+       * test/infra/Dockerfile.emba: Install texinfo.
+
+2021-03-07  Glenn Morris  <rgm@gnu.org>
+
+       Tag a semantic test that seems to hang recently
+
+       * test/lisp/cedet/semantic-utest-c.el
+       (semantic-test-c-preprocessor-simulation): Mark as unstable.
+
+2021-03-07  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Fix string-replace error data
+
+       * lisp/subr.el (string-replace): Signal an error with data that is a
+       list, and whose contents are consistent with other uses of
+       wrong-length-argument.
+       * test/lisp/subr-tests.el (string-replace): Test for this.
+       (subr-test-define-prefix-command): Pacify byte-compiler warnings.
+
+2021-03-07  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid aborts in native-comp subprocesses when exiting Emacs on Windows
+
+       * src/w32.c (shutdown_handler): Clear the message stack when being
+       shut down in noninteractive mode, to avoid aborting in
+       shut_down_emacs when a native-compilation subprocess is killed
+       because the parent Emacs exits.
+
+2021-03-07  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix encoding of file names in comp.c
+
+       * src/comp.c (Fcomp__compile_ctxt_to_file) [WINDOWSNT]: Fix
+       encoding of file names passed to libgccjit.
+
+2021-03-07  Eli Zaretskii  <eliz@gnu.org>
+
+       Use MS-Windows system APIs to get number of processors
+
+       * lisp/emacs-lisp/comp.el: Use 'w32-get-nproc' instead of the
+       environment variable NUMBER_OF_PROCESSORS.
+
+       * src/w32proc.c (Fw32_get_nproc): New primitive.
+       * src/w32.c (w32_get_nproc): New function.
+       (sample_system_load): Call w32_get_nproc to initialize the number
+       of processors on this system.
+       * src/w32.h (w32_get_nproc): Add prototype.
+
+2021-03-07  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix libgccjit PROGNAME on MS-Windows
+
+       * src/comp.c [WINDOWSNT]: Import gcc_jit_context_set_str_option.
+       (init_gccjit_functions): Load gcc_jit_context_set_str_option.
+       (gcc_jit_context_set_str_option) [WINDOWSNT]: New macro.
+       (Fcomp__compile_ctxt_to_file) [WINDOWSNT]: Pass the actual name of
+       the libgccjit DLL to the library, to be used as PROGNAME.
+
+2021-03-07  Michael Albinus  <michael.albinus@gmx.de>
+
+       * test/infra/Dockerfile.emba: Touch "info/emacs".
+
+2021-03-07  Michael Albinus  <michael.albinus@gmx.de>
+
+       Adapt Dockerfile.emba according to recent configure changes
+
+       * test/infra/Dockerfile.emba: Remove "--without-makeinfo" from
+       configure.  Add "lisp" to make.
+
+2021-03-07  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/cedet/semantic/wisent: Use lexical-binding
+
+       * lisp/cedet/semantic/wisent/comp.el: lexical-binding.
+       (wisent-defcontext): Make sure the vars are also dynbound in the files
+       that `require` us.
+       (wisent-state-actions, wisent-automaton-lisp-form): Use `obarray-make`.
+       (wisent--compile-grammar): Rename from `wisent-compile-grammar`.
+       (wisent-compile-grammar): Redefine as an obsolete function.
+       (wisent-automaton-lisp-form): Avoid variable `state`.
+
+       * lisp/cedet/semantic/grammar.el: Use lexical-binding.
+       (semantic-grammar-require-form): New var.
+       (semantic-grammar-header): Use it to provide new element `require-form`.
+       (semantic-grammar-header-template): Use it.
+
+       * lisp/cedet/semantic/wisent.el (wisent-compiled-grammar): New macro.
+
+       * lisp/cedet/semantic/wisent/grammar.el 
(wisent-grammar-parsetable-builder):
+       Use it in the generated code instead of the `wisent-compile-grammar` 
function.
+       (wisent-grammar-mode): Set `semantic-grammar-require-form` so
+       the generated ELisp files require `semantic/wisent` rather than
+       `semantic/bovine`.
+
+       * lisp/cedet/semantic/wisent/wisent.el: Use lexical-binding.
+       * lisp/cedet/semantic/wisent/java-tags.el: Use lexical-binding.
+       * lisp/cedet/semantic/wisent/python.el: Use lexical-binding.
+       * lisp/cedet/semantic/wisent/javascript.el: Use lexical-binding.
+       (semantic-ctxt-current-symbol): Remove unused var `symlist`.
+
+       * admin/grammars/python.wy (wisent-python-EXPANDING-block):
+       Declare dynbound var.
+
+       * lisp/cedet/semantic/grammar-wy.el: Regenerate.
+
+2021-03-07  Stefan Kangas  <stefan@marxist.se>
+
+       Remove additional items obsolete since Emacs 22/23
+
+       * lisp/speedbar.el (speedbar-update-speed)
+       (speedbar-navigating-speed): Remove variables obsolete since Emacs 23.
+       (speedbar-dir-follow, speedbar-directory-buttons-follow): Don't use
+       above removed variables.
+
+       * lisp/erc/erc.el (erc-announced-server-name, erc-process)
+       (erc-default-coding-system, erc-send-command): Remove variables and
+       functions obsolete since Emacs 22.
+
+2021-03-07  Stefan Kangas  <stefan@marxist.se>
+
+       Remove some items obsolete since Emacs 22/23 from Gnus
+
+       * lisp/gnus/gnus-art.el (gnus-article-hide-pgp-hook)
+       (gnus-treat-strip-pgp, gnus-treat-display-xface):
+       * lisp/gnus/gnus-msg.el (gnus-inews-mark-gcc-as-read):
+       * lisp/gnus/gnus-start.el (nnmail-spool-file):
+       * lisp/gnus/nnmail.el (nnmail-spool-file)
+       (nnmail-fix-eudora-headers): Remove items obsolete since 22.1.
+       * lisp/gnus/gnus-art.el (gnus-treat-display-x-face):
+       * lisp/gnus/gnus-msg.el (gnus-inews-do-gcc): Don't use above obsolete 
symbols.
+       * doc/misc/gnus.texi (Washing Mail, Not Reading Mail): Don't refer to
+       above obsolete variables.
+
+       * lisp/gnus/gnus.el (gnus-local-domain, gnus-carpal):
+       * lisp/gnus/nnimap.el (nnimap-split-rule):
+       * lisp/gnus/nntp.el (nntp-authinfo-file): Fix obsolete variable
+       version format.
+
+2021-03-07  Stefan Kangas  <stefan@marxist.se>
+
+       Remove some references to Emacs 21
+
+       * lisp/erc/erc-track.el (erc-track-position-in-mode-line):
+       * lisp/erc/erc.el (erc-header-line-format):
+       * lisp/ibuffer.el (ibuffer-mode):
+       * lisp/ruler-mode.el: Remove some references to Emacs 21.
+
+2021-03-07  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/mouse-drag.el: Use lexical-binding.
+
+       * lisp/mouse-copy.el: Use lexical-binding.
+
+2021-03-07  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/cedet/semantic/bovine/*.el: Use lexical-binding
+
+       * lisp/cedet/semantic/bovine/c.el: Use lexical-binding.
+       (semantic-lex-cpp-define): Remove unused var `name`.
+       (semantic-c-do-lex-if): Remove unused var `pt`.
+       (semantic-analyze-tag-references): Remove unused var `refs`.
+       (semantic-c-dereference-namespace): Remove unused vars `tmp` and
+       `usingname`.
+       (semantic-c-dereference-namespace-alias): Remove unused var `newtype`.
+       (semantic-c-check-type-namespace-using): Remove unused vars `tmp` and
+       `shortname`.
+       (semanticdb-find-table-for-include): Remove unused var `prefix`.
+       (semantic-default-c-setup, semantic-c-describe-environment):
+       Use `derived-mode-p`.
+
+       * lisp/cedet/semantic/bovine/debug.el: Use lexical-binding.
+
+       * lisp/cedet/semantic/bovine/make.el: Use lexical-binding.
+
+       * lisp/cedet/semantic/bovine/scm.el: Use lexical-binding.
+
+       * lisp/cedet/semantic/lex.el (define-lex-analyzer): Define the var (and
+       the function) in a single step.
+
+2021-03-07  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/obsolete/inversion.el: Use lexical-binding
+
+2021-03-07  Glenn Morris  <rgm@gnu.org>
+
+       * admin/admin.el (make-manuals-dist-output-variables): Update.
+
+2021-03-07  Glenn Morris  <rgm@gnu.org>
+
+       Simplify silent-rules build machinery
+
+       * src/verbose.mk.in: New file.
+       * configure.ac (AM_V, AM_DEFAULT_V): Remove output variables.
+       (src/verbose.mk): New output file.
+       * Makefile.in, admin/charsets/Makefile.in:
+       * admin/grammars/Makefile.in, admin/unidata/Makefile.in:
+       * doc/emacs/Makefile.in, doc/lispintro/Makefile.in:
+       * doc/lispref/Makefile.in, doc/misc/Makefile.in, leim/Makefile.in:
+       * lib-src/Makefile.in, lib/Makefile.in, lisp/Makefile.in:
+       * lwlib/Makefile.in, nt/Makefile.in, oldXMenu/Makefile.in:
+       * src/Makefile.in, src/verbose.mk.in, test/Makefile.in:
+       Include src/verbose.mk rather than repeatedly defining AM_V_at etc.
+
+2021-03-06  Andrea Corallo  <akrl@sdf.org>
+
+       Fix `comp-cstr-intersection-no-hashcons' for negated result cstr
+
+       * lisp/emacs-lisp/comp-cstr.el
+       (comp-cstr-intersection-no-hashcons): When negated and
+       necessary relax dst to t.
+       * test/src/comp-tests.el (comp-tests-type-spec-tests): Add a test.
+
+2021-03-06  Pip Cet  <pipcet@gmail.com>
+
+       Fix miscompilation of funcall forms in some cases (bug#46974)
+
+       * lisp/emacs-lisp/comp.el (comp-call-optim-func): Call
+       comp-cstr-imm-vld-p before relying on comp-cstr-imm to return the
+       right value.
+
+2021-03-06  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (comp-add-cond-cstrs-simple): Suppress 
warning.
+
+2021-03-06  Andrea Corallo  <akrl@sdf.org>
+
+       Fix `=' propagation to handle -0.0 0.0 case
+
+       * lisp/emacs-lisp/comp-cstr.el
+       (comp-cstr-intersection-homogeneous): Fix indent + use `memql'.
+       (comp-cstr-=): Handle 0.0 -0.0 idiosyncrasy
+       * test/src/comp-tests.el (comp-tests-type-spec-tests): Add two
+       tests and fix enumeration.
+
+2021-03-06  Glenn Morris  <rgm@gnu.org>
+
+       * src/Makefile.in (base_obj): Remove GMP_OBJ, undefined since 202007.
+
+2021-03-06  Glenn Morris  <rgm@gnu.org>
+
+       Don't pass implicit flags to sub-makes
+
+       * Makefile.in (info_misc, uninstall, texi_misc):
+       Don't pass any implicit make flags to sub-makes.
+       Ref https://lists.gnu.org/r/help-make/2021-03/msg00007.html
+
+2021-03-06  Glenn Morris  <rgm@gnu.org>
+
+       Remove the --without-makeinfo configure option (bug#46837)
+
+       * configure.ac (--without-makeinfo): Remove option.
+       (HAVE_MAKEINFO): Remove output variable.
+
+       * Makefile.in (HAVE_MAKEINFO): Remove.
+       (info_misc): Remove HAVE_MAKEINFO check.
+       (info-real): Remove target.
+       (info): Simplify.
+
+2021-03-06  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/cedet/srecode/compile.el: Fix last change
+
+       (srecode-compile-inserter): Call `make-instance` properly.
+
+2021-03-06  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Speed up json.el encoding
+
+       This replaces most json-encode-* functions with similar
+       json--print-* counterparts that insert into the current buffer
+       instead of returning a string (bug#46761).
+
+       Some unused but useful json-encode-* functions are kept for backward
+       compatibility and as a public API, and the rest are deprecated.
+
+       * etc/NEWS: Announce obsoletions.
+
+       * lisp/json.el: Document organization of library.  Make subsection
+       headings more consistent.
+       (json--encoding-current-indentation): Rename...
+       (json--print-indentation-prefix): ...to this, to reflect new use.
+       (json--encode-stringlike, json--encode-alist): Rename...
+       (json--print-stringlike, json--print-alist): ...to these,
+       respectively, and encode argument into current buffer instead.  All
+       callers changed.
+
+       (json--print-string, json--print-unordered-map, json--print-array)
+       (json--print): New functions.
+       (json-encode-string, json-encode-plist, json-encode-array)
+       (json-encode): Use them, respectively.
+
+       (json-encode-number, json-encode-hash-table): Mark as obsolete
+       aliases of json-encode.
+       (json-encode-key, json-encode-list): Mark as obsolete in preference
+       for json-encode.
+
+       (json--print-indentation-depth, json--print-keyval-separator): New
+       variables.
+       (json--with-output-to-string): New macro.
+       (json--print-indentation, json--print-keyword, json--print-key)
+       (json--print-pair, json--print-map, json--print-list): New
+       functions.
+
+       (json--with-indentation): Use json--print-indentation-depth to avoid
+       unnecessary string allocation.
+       (json-encoding-default-indentation, json-pretty-print-max-secs):
+       Clarify docstrings.
+       (json--escape, json--long-string-threshold, json--string-buffer):
+       Remove; no longer used.
+
+       * lisp/progmodes/js.el (js--js-encode-value): Replace
+       json-encode-string and json-encode-number with json-encode.
+       (js-eval-defun): Use json--print-list to avoid
+       json-encode-list->insert roundtrip.
+
+       * test/lisp/json-tests.el (test-json-encode-number)
+       (test-json-encode-hash-table, test-json-encode-hash-table-pretty)
+       (test-json-encode-hash-table-lisp-style)
+       (test-json-encode-hash-table-sort,  test-json-encode-list):  Replace
+       uses of obsolete functions with the equivalent use of json-encode.
+       (test-json-encode-key): Suppress obsoletion warnings.
+       (test-json-encode-string): Check that text properties are stripped.
+
+2021-03-06  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/bindat.el (bindat-struct): Fix Edebug def
+
+2021-03-06  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emulation/: Use lexical-binding
+
+       * lisp/emulation/cua-base.el: Use lexical-binding.
+       Remove redundant `:group` arguments.
+       (cua-mode): Don't use `:require` since the autoload on 
`define-minor-mode`
+       takes care of loading the mode when custom-setting it.
+
+       * lisp/emulation/cua-gmrk.el: Use lexical-binding.
+       (cua--copy-rectangle-to-global-mark): Remove unused var `src-buf`.
+
+       * lisp/emulation/edt-mapper.el: Use lexical-binding.
+
+       * lisp/emulation/edt.el: Use lexical-binding.
+       Remove redundant `:group` arguments.
+       (edt-with-position): Allow `top`, `left`, and `far` to be left unused
+       in `body`.
+
+       * lisp/emulation/keypad.el: Use lexical-binding.
+
+       * lisp/emulation/viper-cmd.el: Move `provide` to the end.
+       (viper-read-string-with-history): Strength reduce `eval` to 
`symbol-value`.
+
+       * lisp/emulation/viper-ex.el: Use lexical-binding.
+       Remove redundant `:group` arguments.
+       Move `provide` to the end.
+
+       * lisp/emulation/viper-init.el: Use lexical-binding.
+
+       * lisp/emulation/viper-keym.el (viper-toggle-key): Use `dolist`.
+       (viper-insert-diehard-map): Use `string`.
+       (viper-modify-major-mode): Use `alist-get` and `setf`.
+
+       * lisp/emulation/viper-macs.el (viper-ex-work-buf):
+       Move `provide` to the end.
+       (viper-record-kbd-macro): Strength reduce `eval` to `symbol-value`.
+       (viper-describe-kbd-macros): Return value is not significant.
+       (viper-keyseq-is-a-possible-macro): Use `seq-some`.
+       (viper-common-seq-prefix): Use `seq-every-p`.
+
+       * lisp/emulation/viper-mous.el: Use lexical-binding.
+       Remove redundant `:group` arguments.
+       Move `provide` to the end.
+       (viper-remember-current-frame): Accept arbitrary ignored args.
+       (viper-parse-mouse-key): Strength reduce `eval` to `symbol-value`.
+       Remove unused var `key-spec`.
+       (viper-bind-mouse-search-key, viper-bind-mouse-insert-key):
+       Apply de Morgan.
+
+       * lisp/emulation/viper-util.el: Move `provide` to the end.
+       (viper-move-marker-locally, viper-push-onto-ring, viper-save-setting):
+       Strength reduce `eval` to `symbol-value`.
+       (viper-event-vector-p, viper-char-symbol-sequence-p, 
viper-char-array-p):
+       Use `seq-every-p`.
+
+       * lisp/emulation/viper.el (viper-non-hook-settings): Eta-reduce use of
+       `viper-remember-current-frame`.
+
+2021-03-06  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Various map.el improvements
+
+       * lisp/emacs-lisp/seq.el (seq-do-indexed): Return nil as per doc.
+
+       * lisp/emacs-lisp/map.el: Require Emacs >= 26 due to dependence on
+       5-arg alist-get.  Bump package to version 3.0.  Fix other
+       headers.  (Bug#46754)
+       (map--plist-p): Detect list starting with nil as plist, not alist.
+       (map-elt, map-filter, map-apply, map--make-pcase-bindings)
+       (map--make-pcase-patterns): Simplify.
+       (map-let, map-put, map-nested-elt, mapp): Update docstring for plist
+       support.
+       (map-delete): Fix OBOE on arrays.  Split into cl-defmethods.
+       (map-values, map-values-apply): Specialize for arrays.
+       (map-pairs, map-keys-apply, map-put!): Improve docstring.
+       (map-length): Clarify docstring w.r.t. duplicate keys.  Split into
+       cl-defmethods.  Optimize default implementation.
+       (map-copy): Use copy-alist on alists.  Split into cl-defmethods.
+       (map-contains-key): Add plist support.  Clarify docstring
+       w.r.t. optional argument.  Simplify default implementation.
+       (map-some, map-every-p, map-merge, map-merge-with, map--into-hash):
+       Don't use map-apply for side effects.
+       (map-into): Preserve plist ordering.  Improve docstrings.
+       (map-insert): Add hash-table and array support.
+       (map-inplace): Remove unused error symbol.
+       (map-do): Return nil as per doc.
+
+       * etc/NEWS: Announce new user-visible behavior.
+
+       * test/lisp/emacs-lisp/map-tests.el: Prefer should-not
+       over (should (not ...)) in general.
+       (with-maps-do): Fix docstring.
+       (with-empty-maps-do): New macro.
+       (test-map-elt-default, test-mapp, test-map-keys, test-map-values)
+       (test-map-pairs, test-map-length, test-map-copy, test-map-apply)
+       (test-map-do, test-map-keys-apply, test-map-values-apply)
+       (test-map-filter, test-map-remove, test-map-empty-p)
+       (test-map-contains-key, test-map-some, test-map-every-p):
+       Use it.
+
+       (test-map-plist-p, test-map-put!-new-keys, test-map-insert-empty)
+       (test-map-insert, test-map-delete-empty, test-map-copy-alist)
+       (test-map-contains-key-testfn, test-map-into-hash-test)
+       (test-map-into-empty, test-map-merge, test-map-merge-empty):
+       New tests.
+
+       (test-map-elt): Test array key that is within bounds but not fixnum.
+       (test-map-put!): Use map--plist-p.  Remove redundant tests.
+       (test-map-put-alist-new-key): Don't modify list literal.
+       (test-map-put-testfn-alist, test-map-put-return-value): Silence
+       obsoletion warnings.
+       (test-map-delete): Check for OBOE on arrays.
+       (test-map-delete-return-value): Remove test made redundant by
+       test-map-delete.
+       (test-map-nested-elt, test-map-into): Test plists too.
+
+2021-03-06  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: Fix calculation of c-parse-state when there're macros with 
braces
+
+       This fixes bug #46951.
+
+       * lisp/progmodes/cc-engine.el 
(c-append-lower-brace-pair-to-state-cache):
+       Ensure the starting point for backward scanning is not within a macro 
which
+       doesn't contain HERE.
+
+2021-03-06  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/flymake.el (flymake-log): Push the right code
+
+       * lisp/progmodes/flymake.el (flymake-log): Simplify
+
+2021-03-06  Eli Zaretskii  <eliz@gnu.org>
+
+       Revert "Fix Makefile subshell output when run in parallel"
+
+       This reverts commit 117505454ce04c0c0ce2c2b4058823cf764fc2eb.
+       It breaks the build for versions of GNU Make that don't support -O.
+
+2021-03-06  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Fix Makefile subshell output when run in parallel
+
+       For discussion, see the following thread:
+       https://lists.gnu.org/r/emacs-devel/2021-03/msg00255.html
+
+       * Makefile.in (texi_misc): Avoid interspersing parallel Make output
+       with that from subshell.
+
+2021-03-06  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Pacify some semantic-tag-make-plist warnings
+
+       * lisp/cedet/semantic/tag.el (semantic-tag-make-plist): Define
+       before its first use to pacify some recent "may not be defined at
+       runtime" warnings after turning on lexical-binding.
+
+2021-03-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove mention of using defun- and defvar- as prefixes
+
+       * doc/lispref/tips.texi (Coding Conventions): Remove mention of
+       using defun- and defvar- as prefixes, as this is something that we
+       rarely do in Emacs (bug#46899).
+
+2021-03-06  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of Bindat
+
+       * doc/lispref/processes.texi (Bindat Types, Bindat Functions)
+       (Bindat Computed Types): Improve wording and add indexing.
+
+       * etc/NEWS: Add a pointer to the ELisp manual for "Bindat".
+
+2021-03-06  Protesilaos Stavrou  <info@protesilaos.com>
+
+       Pull Modus themes version 1.2.3 from upstream
+
+       This syncs with the following upstream revision:
+
+       Update to version 1.2.3
+       0a36239 2021-03-05 19:43:30 +0200
+       
https://gitlab.com/protesilaos/modus-themes/-/commit/0a36239baf908585cdf32c6188eb86713d9bf6c6
+
+       For discussion, see bug#45068 and the following upstream issue:
+       https://gitlab.com/protesilaos/modus-themes/-/issues/162
+
+       * doc/misc/modus-themes.org:
+       * etc/themes/modus-operandi-theme.el:
+       * etc/themes/modus-themes.el:
+       * etc/themes/modus-vivendi-theme.el: Update to version 1.2.3.
+
+2021-03-06  Protesilaos Stavrou  <info@protesilaos.com>
+
+       Update Modus themes to their version 1.2.0
+
+       * doc/misc/modus-themes.org: Add new version of the manual, with
+       changes to markup and references to the latest state of the project.
+
+       * etc/themes/modus-vivendi-theme.el:
+       * etc/themes/modus-operandi-theme.el: Provide updated version of each
+       theme, which expands the contents of 'modus-themes.el' (bug#45068).
+
+       * etc/themes/modus-themes.el: Add new supportive file.  This is where
+       theme data, functions, and face definitions are defined.
+
+2021-03-06  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Conditionally use macroexp-file-name in Flymake
+
+       * lisp/progmodes/flymake.el (flymake-log): Reinstate Emacs 26
+       support by conditionally using macroexp-file-name which is new in
+       Emacs 28 (bug#46957).
+
+2021-03-06  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * * lisp/cedet/semantic: Use lexical-binding in the generated grammars
+
+       * admin/grammars/c.by (typesimple): Bind `semantic-c-classname` 
dynamically.
+
+       * lisp/cedet/semantic/bovine.el: Use lexical-binding.
+       (semantic-lambda): Silence warnings if the `vals` arg is not used.
+
+       * lisp/cedet/semantic/grammar-wy.el: Re-generate.
+
+       * lisp/cedet/semantic/bovine/grammar.el: Use lexical-binding.
+       (bovine-grammar-expand-action): Silence warnings if some of the
+       `vals`, `start`, or `end` args is not used.
+       (bovine--make-parser-1): Use lexical-binding in the generated files.
+
+       * lisp/cedet/semantic/wisent/grammar.el: Use lexical-binding.
+       (wisent--make-parser-1): Use lexical-binding in the generated files.
+
+2021-03-06  Stefan Kangas  <stefan@marxist.se>
+
+       Add some new tests for keymap.c
+
+       * test/src/keymap-tests.el (keymap-define-key/undefined)
+       (keymap-define-key/keyboard-macro, keymap-define-key/lambda)
+       (keymap-define-key/keymap, keymap-define-key/menu-item)
+       (keymap-lookup-key/list-of-keymaps, keymap-lookup-key/too-long):
+       New tests.
+       (keymap-lookup-key): Extend test slightly.
+
+2021-03-06  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/cedet/srecode/*.el: Use lexical-binding
+
+       * lisp/cedet/srecode/compile.el (srecode-compile-inserter):
+       Use `make-instance` instead of the class name-as-function.
+
+       * lisp/cedet/srecode/fields.el (srecode-field-behind-hook):
+       Remove unused var `field`.
+
+       * lisp/cedet/srecode/find.el (srecode-load-tables-for-mode): Simplify.
+
+       * lisp/cedet/srecode/getset.el (srecode-semantic-selected-tag): Declare 
var.
+
+       * lisp/cedet/srecode/mode.el (srecode-minor-mode): Mark references to
+       non-existing `srecode-m3-items` function.
+
+       * lisp/cedet/srecode/srt-mode.el (srecode-parse-this-macro): Remove
+       unused var `raw`.
+
+2021-03-06  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Bindat: new macro-expansion based data layout language
+
+       Thorough redesign of the Bindat system, which makes it possible
+       to define new Bindat type forms, define recursive types, control
+       the values returned when unpacking, freely mix arbitrary computations
+       with type definitions, as well as support for arbitrary sized
+       integers.
+
+       This also reverts the recent addition of the `bindat-spec` macro and
+       the support for 64bit integers in the old Bindat language since that
+       is now considered obsolete anyway.
+
+       * doc/lispref/processes.texi (Bindat Types): Rename from `Bindat Spec`
+       and rewrite for the new sublanguage.
+       (Bindat Functions): Adjust to the new terminology.
+       (Bindat Computed Types): New node.
+
+       * lisp/emacs-lisp/bindat.el (bindat--type): New type.
+       (bindat--unpack-u64, bindat--unpack-u64r): Delete functions.
+       (bindat--unpack-item, bindat--pack-item, bindat--fixed-length-alist):
+       Revert addition of support for 64bit integers.
+       (bindat--unpack-group, bindat--length-group, bindat--pack-group):
+       Handle the new `bindat--type` values.
+       (bindat-spec): Revert addition of this macro.
+       (bindat--unpack-uint, bindat--unpack-uintr, bindat--pack-uint)
+       (bindat--pack-uintr): New functions.
+       (bindat-type, bindat-defmacro, bindat--pcase): New macros.
+       (bindat-type): New Edebug elem.
+       (bindat--type): New generic function.
+       (bindat--primitives): New constant.
+       (bindat--macroenv, bindat--op): New vars.
+       (bindat--make-docstring, bindat--fun, bindat--makefun, 
bindat--toplevel):
+       New functions.
+
+       * test/lisp/emacs-lisp/bindat-tests.el: Use `bindat-type`.
+       (ip): New Bindat type.
+       (header-bindat-spec, data-bindat-spec, packet-bindat-spec): Adjust to
+       new `bindat-type` macro.
+       (bindat-test-unpack): Simplify now that the order of fields is 
preserved.
+       (bindat-test--int-websocket-type, bindat-test--LEB128): New consts.
+       (bindat-test--pack-val, bindat-test--sint, bindat-test--recursive):
+       New tests.
+
+2021-03-05  Mattias Engdegård  <mattiase@acm.org>
+
+       Make lambda-lifting work again
+
+       * lisp/emacs-lisp/cconv.el (cconv--analyze-use): Fix typo.
+       * test/lisp/emacs-lisp/cconv-tests.el (cconv-convert-lambda-lifted):
+       Add test case.
+
+2021-03-05  Tassilo Horn  <tsdh@gnu.org>
+
+       Improve rcirc-authenticated-hook docstring
+
+       * lisp/net/rcirc.el (rcirc-authenticated-hook): Improve docstring.
+
+2021-03-05  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/bindat.el: Minor refactoring
+
+       (bindat--unpack-str, bindat--unpack-strz, bindat--unpack-bits):
+       New functions, extracted from `bindat--unpack-item`.
+       (bindat--unpack-item): Use them.
+       (bindat--align): New function.
+       (bindat--unpack-group, bindat--length-group, bindat--pack-group): Use 
it.
+       (bindat-get-field): Allow integers to index both lists (as returned by
+       `repeat`) and vectors (as returned by `vec`).
+       (bindat--pack-str, bindat--pack-bits): New functions, extracted from
+       `bindat--pack-item`.
+       (bindat--pack-item): Use them.
+
+       * test/lisp/emacs-lisp/bindat-tests.el (struct-bindat): Place the fields
+       in the order in which they appear in the structs.
+
+2021-03-05  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/gv.el (edebug-after): Don't run the getter in the 
setter
+
+       This fixes bug#46573 which was introduced by commit
+       d79cf638f278e50c22feb53d6ba556f5ce9d7853.
+       The new code is a middle ground, which makes sure the instrumentation
+       point is used (so the coverage checker won't have ghost unreachable
+       instrumentation points) yet without artificially running the getter
+       when we only need to run the setter.
+
+2021-03-05  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/fns.c (Frandom): Handle bignum `limit`s
+
+       (ccall2, get_random_bignum): New functions.
+
+2021-03-05  Michael Albinus  <michael.albinus@gmx.de>
+
+       Declare some completion predicates
+
+       * lisp/filenotify.el (file-notify-handle-event):
+       * lisp/net/dbus.el (dbus-handle-event): Declare `completion-predicate'.
+
+2021-03-05  Masahiro Nakamura  <tsuucat@icloud.com>
+
+       * doc/misc/tramp.texi (Remote shell setup): Fix reference.
+
+       * doc/misc/tramp.texi (Remote shell setup): Fix reference. (Do not 
merge)
+
+2021-03-05  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix some unsafe uses of SSDATA in comp.c
+
+       * src/comp.c (comp_hash_source_file)
+       (Fcomp__compile_ctxt_to_file, Fnative_elisp_load): Encode file
+       names before passing them to library APIs.
+       (Fcomp__compile_ctxt_to_file): use emacs_fopen instead of fopen.
+       (declare_lex_function): Avoid keeping a 'char *' pointer around
+       while calling Lisp, which could trigger GC, which could relocate
+       string data.
+
+2021-03-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve the documentation of :extra in cl-defmethod
+
+       * doc/lispref/functions.texi (Generic Functions): Improve
+       documentation of :extra (bug#46917).
+
+       * lisp/emacs-lisp/cl-generic.el (cl-defmethod): Ditto.
+
+2021-03-05  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Fix qualifiers order for loadhist-unload-element in elp.el
+
+       * lisp/emacs-lisp/elp.el (loadhist-unload-element): The :extra
+       qualifier is expected to come before the other qualifiers, so do
+       that (bug#46917).
+
+2021-03-05  Stephen Berman  <stephen.berman@gmx.net>
+
+       Restrict the version guesser to top-level headings
+
+       * lisp/help-fns.el (help-fns--first-release): Restrict the version
+       guesser to top-level section -- looking in all headings leads to
+       false positives (bug#46889).
+
+2021-03-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Actually fill the correct paragraph in `lisp-fill-paragraph'
+
+       * lisp/emacs-lisp/lisp-mode.el (lisp-fill-paragraph): Fix previous
+       change here by actually filling the correct paragraph (bug#28937).
+
+2021-03-05  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix initialization of 'while-no-input-ignore-events'
+
+       * src/keyboard.c (syms_of_keyboard_for_pdumper): Don't reset
+       'while-no-input-ignore-events' after loading the dump file.
+       (Bug#46940)
+
+2021-03-05  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Don't override load-path in require-theme
+
+       * lisp/custom.el (require-theme): Open-code 'require' error, because
+       binding load-path can prevent other libraries from loading on error,
+       such as debug.el, which gives a misleading error.  (Bug#45068)
+
+2021-03-05  Andrea Corallo  <akrl@sdf.org>
+
+       Harden `comp-abi-hash' computation
+
+       Account for subr arity in `comp-abi-hash' computation as that's part
+       of the ABI exposed to .eln files.
+
+       * src/comp.c (Fcomp__subr_signature): New support function.
+       (hash_native_abi): Make use of.
+       (syms_of_comp): Register 'Scomp__subr_signature'.
+
+2021-03-05  Pip Cet  <pipcet@gmail.com>
+
+       Don't ignore lexically-bound variables in a defvar (bug#46912)
+
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker): Walk
+       the value form of a defvar.
+
+2021-03-05  Glenn Morris  <rgm@gnu.org>
+
+       * Makefile.in: Ensure non-info forms of doc/misc have an Emacs binary.
+
+2021-03-05  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/cl-generic.el: Make `doc-string` prop work with 
qualifiers
+
+       (cl--defmethod-doc-pos): New function.
+       (cl-defmethod): Use it.
+
+2021-03-04  Andrea Corallo  <akrl@sdf.org>
+
+       Makefile.in (ELN_DESTDIR): Remove unnecessary double quoting.
+
+2021-03-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a command in package mode for opening home pages directly
+
+       * doc/emacs/package.texi (Package Menu): Document it.
+       * lisp/emacs-lisp/package.el (package-browse-url): New command and
+       keystroke (bug#46927).
+
+2021-03-04  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix typos and doc strings in native-compilation files
+
+       * lisp/emacs-lisp/comp.el (comp-speed, comp-debug, comp-verbose)
+       (comp-always-compile, comp-deferred-compilation-deny-list)
+       (comp-bootstrap-deny-list, comp-never-optimize-functions)
+       (comp-async-jobs-number, comp-async-cu-done-hook)
+       (comp-async-all-done-hook, comp-async-env-modifier-form)
+       (comp-pass, comp-native-compiling, comp-post-pass-hooks)
+       (comp-known-predicate-p, comp-pred-to-cstr)
+       (comp-symbol-values-optimizable, comp-limple-assignments)
+       (comp-limple-calls, comp-limple-branches, comp-block)
+       (comp-vec--verify-idx, comp-vec-aref, comp-vec-append)
+       (comp-vec-prepend, comp-block-preds)
+       (comp-ensure-native-compiler, comp-log, comp-log-func)
+       (comp-loop-insn-in-block, comp-byte-frame-size)
+       (comp-add-func-to-ctxt, comp-spill-lap-function, comp-spill-lap)
+       (comp-lap-fall-through-p, comp-new-frame, comp-emit-set-call)
+       (comp-copy-slot, comp-latch-make-fill, comp-emit-cond-jump)
+       (comp-body-eff, comp-op-case, comp-prepare-args-for-top-level)
+       (comp-limplify-top-level, comp-negate-arithm-cmp-fun)
+       (comp-emit-assume, comp-cond-cstrs-target-mvar)
+       (comp-function-foldable-p, comp-function-call-maybe-fold)
+       (comp-form-tco-call-seq, comp-clean-up-stale-eln)
+       (comp-delete-or-replace-file, comp--native-compile)
+       (native--compile-async, native-compile)
+       (batch-byte-native-compile-for-bootstrap): Fix typos, wording, and
+       punctuation in doc strings.
+       * lisp/loadup.el: Fix typos.
+
+       * src/lread.c (syms_of_lread): Doc fix.
+
+2021-03-04  Eli Zaretskii  <eliz@gnu.org>
+
+       Update documentation of reading passwords
+
+       * doc/emacs/mini.texi (Passwords): Update to match the modified
+       implementation.  (Bug#46902)  Add indexing.
+
+2021-03-04  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Make checkdoc work with qualified methods
+
+       * lisp/emacs-lisp/checkdoc.el (checkdoc--next-docstring): Handle
+       cl-defmethod in a case of its own.  Check for the presence of
+       qualifiers, and skip them accordingly until the docstring.
+
+       * test/lisp/emacs-lisp/checkdoc-tests.el 
(checkdoc-cl-defmethod-qualified-ok)
+       (checkdoc-cl-defmethod-with-extra-qualifier-ok)
+       (checkdoc-cl-defmethod-with-extra-and-nil-args-ok): Add tests for the 
fix.
+
+2021-03-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add "of" as a keyword in js-mode
+
+       * lisp/progmodes/js.el (js--keyword-re): Add the "of" of "for
+       ... of" in ECMAScript 2018 (bug#46924).
+
+2021-03-04  Matt Armstrong  <matt@mdeb>
+
+       Call the set_buffer_overlays_ setters
+
+       * src/buffer.c (Fkill_buffer): Call set_buffer_overlays_before and
+       set_buffer_overlays_after instead of setting the fields directly
+       (bug#46914).
+
+2021-03-04  Glenn Morris  <rgm@gnu.org>
+
+       Generate info/dir directly from any org sources
+
+       * Makefile.in (texi_misc): New variable.
+       (srcdir_doc_info_dir_inputs): Use texi_misc.
+       (${srcdir}/info/dir): No longer depend on info-real.
+
+2021-03-04  Glenn Morris  <rgm@gnu.org>
+
+       * doc/misc/Makefile.in (echo-sources): New phony target.
+
+       * build-aux/make-info-dir: Handle .org input files.
+
+2021-03-04  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Decouple require-theme from load-theme
+
+       * lisp/custom.el (require-theme): Refashion after 'require', as a
+       function for loading only named features.  Do not call
+       load-theme (bug#45068).
+       * etc/NEWS: Update its announcement accordingly.
+       * doc/lispref/customize.texi (Custom Themes): Document it.
+
+       * etc/themes/modus-operandi-theme.el:
+       * etc/themes/modus-vivendi-theme.el: Remove redundant calls to
+       'provide'.
+
+       * test/lisp/custom-tests.el (custom-tests--with-temp-dir): New
+       macro.
+       (custom-theme--load-path): Use it.
+       (custom-tests-require-theme): New test.
+
+2021-03-04  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Remove copy-pasto from image-dired.el
+
+       * lisp/image-dired.el (image-dired-dired-edit-comment-and-tags):
+       Remove reference to widget-example-repeat.
+
+2021-03-04  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Remove duplicated tests in checkdoc-tests.el
+
+       * test/lisp/emacs-lisp/checkdoc-tests.el (checkdoc-cl-defmethod-ok)
+       (checkdoc-cl-defmethod-with-types-ok, checkdoc-cl-defun-with-key-ok)
+       (checkdoc-cl-defun-with-allow-other-keys-ok)
+       (checkdoc-cl-defun-with-default-optional-value-ok)
+       (checkdoc-cl-defun-with-destructuring-ok): This tests were duplicated,
+       so keep one copy of them.  Checked by diffing two files with the
+       suspected tests, and supported by the fact that running occur with the
+       regexp "^(ert-deftest" reported 14 matches, while the tests being run
+       were 8.
+
+2021-03-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make radio checkboxes work in eww
+
+       * lisp/net/eww.el (eww-toggle-checkbox): Actually update the
+       :checked values in the form.
+
+2021-03-04  Andrea Corallo  <akrl@sdf.org>
+
+       * src/comp.c (hash_native_abi): Account for 
`system-configuraton-options'.
+
+2021-03-04  Glenn Morris  <rgm@gnu.org>
+
+       Fix a doc/misc clean rule
+
+       * doc/misc/Makefile.in (TEXI_FROM_ORG): New variable.
+       (orgclean): Fix rule.
+
+2021-03-04  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Fix pcase dontcare pattern in cl--sm-macroexpand
+
+       For discussion, see the following thread:
+       https://lists.gnu.org/r/emacs-devel/2021-03/msg00119.html
+
+       * lisp/emacs-lisp/cl-macs.el (cl--sm-macroexpand): Fix recently
+       uncovered use of old name for pcase--dontcare.
+
+2021-03-04  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/pcase.el (pcase-defmacro): Fix `pcase-tests-macro`
+
+       * lisp/emacs-lisp/radix-tree.el (radix-tree-leaf): Simplify accordingly.
+
+2021-03-03  Ulf Jasper  <ulf.jasper@web.de>
+
+       Preserve group structure on opml import and export.
+
+       * lisp/net/newst-backend.el (newsticker--raw-url-list-defaults),
+         (newsticker-url-list-defaults),
+         (newsticker--get-news-by-url),
+         (newsticker--sentinel-work),
+         (newsticker--parse-atom-0.3),
+         (newsticker--decode-rfc822-date),
+         (newsticker--image-download-by-wget),
+         (newsticker--image-save),
+         (newsticker--image-download-by-url),
+         (newsticker--cache-save),
+         (newsticker--stat-num-items): Fix indentation.
+         (newsticker-opml-export): Preserve group structure on export.
+         (newsticker--opml-insert-elt),
+         (newsticker--opml-insert-group),
+         (newsticker--opml-insert-feed): New.
+         (newsticker--opml-import-outlines):
+         (newsticker-opml-import): Preserve group structure on import. (Fixes
+         fourth issue in Bug#41376.)
+
+2021-03-03  Pip Cet  <pipcet@gmail.com>
+
+       Don't call _setjmp through a function pointer (Bug#46824)
+
+       * src/comp.c (helper_link_table): Don't include SETJMP except on 
Windows.
+       (emit_setjmp): Don't use function pointers except on Windows.
+       (declare_runtime_imported_funcs): Don't import SETJMP at runtime.
+       (ABI_VERSION): Bump.
+       * test/src/comp-tests.el (46824-1): New test.
+       * test/src/comp-resources/comp-test-funcs.el
+       (comp-test-46824-1-f): New function.
+
+2021-03-03  Andrea Corallo  <akrl@sdf.org>
+
+       * src/comp.c (return_nil): Make it not a nested function.
+
+2021-03-03  Andrea Corallo  <akrl@sdf.org>
+
+       Fix two compiler ICEs dealing with nan and infinity
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr-=): Don't crash when
+       truncate fails.
+       * test/src/comp-test-funcs.el (comp-test-=-nan): Add two functions
+       to be compiled.
+
+2021-03-03  Juri Linkov  <juri@linkov.net>
+
+       New mode outline-cycle-minor-mode with Orgmode-like TAB cycling on 
headings
+
+       * lisp/outline.el (outline-mode-cycle-map): New keymap from 
outline-mode-map.
+       (outline-mode-map): Inherit from outline-mode-cycle-map.
+       (outline-font-lock-keywords): Append keymap and face depending on
+       'outline-minor-mode-cycle' and 'outline-minor-mode-highlight'.
+       (outline-minor-mode-cycle, outline-minor-mode-highlight): New variables.
+       (outline-minor-mode-highlight-buffer): New function.
+       (outline-minor-mode): Handle 'outline-minor-mode-cycle' and
+       'outline-minor-mode-highlight'.
+       (outline-cycle-minor-mode, outline-cycle-highlight-minor-mode):
+       New minor modes (bug#45147).
+
+       * etc/compilation.txt:
+       * etc/grep.txt:
+       Enable outline-cycle-highlight-minor-mode.
+
+2021-03-03  Stefan Kangas  <stefan@marxist.se>
+
+       Make inversion.el obsolete (Bug#46841)
+
+       * lisp/cedet/inversion.el:
+       * test/lisp/cedet/inversion-tests.el: Move from here...
+       * lisp/obsolete/inversion.el:
+       * test/lisp/obsolete/inversion-tests.el: ...to here.
+
+       * lisp/cedet/cedet.el (cedet-version): Make obsolete.
+       * lisp/cedet/cedet-cscope.el (cedet-cscope-version-check):
+       * lisp/cedet/cedet-global.el (cedet-gnu-global-version-check):
+       * lisp/cedet/cedet-idutils.el (cedet-idutils-version-check):
+       * lisp/cedet/ede/make.el (ede-make-check-version): Use 'version<'
+       instead of 'inversion-check-version'.
+       * lisp/cedet/semantic/db-file.el (semanticdb-load-database): Don't
+       use 'inversion-test'.
+       * lisp/cedet/semantic/ede-grammar.el
+       (ede-proj-makefile-insert-variables): Don't add inversion to
+       loadpath.
+       * lisp/speedbar.el: Remove stale comment.
+
+2021-03-03  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix compilation warnings in --with-wide-int build on Windows
+
+       * src/comp.c (emit_rvalue_from_emacs_uint)
+       (emit_rvalue_from_lisp_word_tag): Fix comparison of unsigned
+       values.
+       (gcc_jit_context_new_rvalue_from_ptr): Define only if
+       LISP_WORDS_ARE_POINTERS, to avoid compilation warning.
+       (init_gccjit_functions): Load gcc_jit_context_new_rvalue_from_ptr
+       only if LISP_WORDS_ARE_POINTERS.
+
+2021-03-03  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid aborting on MS-Windows at startup
+
+       * src/emacs.c (set_invocation_vars) [WINDOWSNT]: If argv0 is not
+       an absolute file name, obtain the absolute file name of the Emacs
+       executable from 'w32_my_exename'.
+
+2021-03-03  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve NEWS entries about native-compilation
+
+       * etc/NEWS: Add an entry about native-compilation.  Improve
+       wording of the entry about 'package-native-compile'.
+
+2021-03-03  Alan Mackenzie  <acm@muc.de>
+
+       C++ Mode: Handle "if constexpr (...)" with a simple statement correctly
+
+       * lisp/progmodes/cc-engine.el (c-beginning-of-statement-1): Add a check 
and
+       handling for c-block-stmt-hangon-key in the main loop.
+
+2021-03-02  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/pcase.el (pcase--u1): Fix typo
+
+2021-03-02  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: Fix analysis of brace lists, particularly in C++ Mode
+
+       Fix some alignment functionality in cc-align.el.
+
+       * lisp/progmodes/cc-align.el (c-lineup-arglist-intro-after-paren): 
Align the
+       next line under the previous entry rather than one to the right of the 
paren.
+       (c-lineup-2nd-brace-entry-in-arglist): Take the anchor point from the
+       brace-list-entry element, not the brace-list-intro one.
+
+       * lisp/progmodes/cc-engine.el (c-looking-at-decl-block): Use
+       c-looking-at-statement-block to test whether "struct A {" begins a 
brace list
+       or a struct declaration.
+       (c-looking-at-or-maybe-in-bracelist): Several detailed amendments, 
correctly
+       to recognize brace lists.
+       (c-looking-at-statement-block): No longer search for commas, as they 
are not
+       reliable indicators of a brace list.  Search now for a restricted set of
+       keywords, since some can appear in brace lists in C++ mode.
+
+       * lisp/progmodes/cc-langs.el (c-stmt-block-only-keywords)
+       (c-stmt-block-only-keywords-regexp): New lang consts/vars.
+       (c-pre-id-bracelist-kwds): New lang const.
+       (c-pre-id-bracelist-key): Derive now from the above.
+       (c-pre-brace-non-bracelist-key): New lang const/var.
+
+2021-03-02  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el: Minor stylistic fixes.
+
+       (tab-bar-select-tab-modifiers): Use tab-bar--undefine-keys and
+       tab-bar--define-keys instead of turning tab-bar-mode on/off.
+
+2021-03-02  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/trace.el (trace-values): Work outside of traced 
function
+
+2021-03-02  Andrea Corallo  <akrl@sdf.org>
+
+       Fix = propagation semantic for constrained inputs
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr): Synthesize
+       `comp-cstr-shallow-copy'.
+       (comp-cstr-=): Relax inputs before intersecting them.
+       * test/src/comp-tests.el (comp-tests-type-spec-tests): Add three
+       tests.
+
+2021-03-02  Dmitry Gutov  <dgutov@yandex.ru>
+
+       (ruby-find-library-file): Also recognize 'gem' statements
+
+       * lisp/progmodes/ruby-mode.el (ruby-find-library-file):
+       Also recognize 'gem' statements.
+
+2021-03-02  Pip Cet  <pipcet@gmail.com>
+
+       Compile closures that modify their bound vars correctly (Bug#46834)
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile--reify-function): Don't
+       move let bindings into the lambda. Don't reverse list of
+       bindings. (byte-compile): Evaluate the return value if it was
+       previously reified.
+       * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-reify-function):
+       Add tests.
+
+2021-03-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve the dired-do-kill-lines doc string
+
+       * lisp/dired-aux.el (dired-do-kill-lines): Document the FMT
+       parameter (bug#46867).
+
+2021-03-02  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/pcase.el: Bind all the vars in `or` patterns
+
+       Improve the handling of `or` patterns where not all sub-patterns bind 
the
+       same set of variables.  This used to be "unsupported" and behaved in
+       somewhat unpredictable ways.
+
+       (pcase--expand): Rewrite.
+       (pcase-codegen): Delete.
+
+       * doc/lispref/control.texi (pcase Macro): Adjust accordingly.
+       Also remove the warning about "at least two" sub patterns.
+       These work fine, AFAICT, and if not we should fix it.
+
+       * test/lisp/emacs-lisp/pcase-tests.el (pcase-tests-or-vars): New test.
+
+2021-03-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix previous completion-pcm--optimize-pattern fix
+
+       * lisp/minibuffer.el (completion-pcm--optimize-pattern): Re-fix
+       previous change.
+
+2021-03-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix warning in completion-pcm--optimize-pattern
+
+       * lisp/minibuffer.el (completion-pcm--optimize-pattern): Remove
+       unused variable.
+
+2021-03-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make easymenu downcase the menu symbol for greater backwards compat
+
+       * lisp/cmuscheme.el (map): Revert previous fix.
+
+       * lisp/woman.el (woman-dired-define-keys): Ditto.
+
+       * lisp/emacs-lisp/easymenu.el (easy-menu-do-define): Downcase the
+       menu name for greater backwards compatibility.
+
+2021-03-01  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/pcase.el: Fix bug#46786
+
+       Revert commit a218c9861573b5ec4979ff2662f5c0343397e3ff, but in order
+       to avoid the spurious warnings that this commit tried to squash,
+       keep track of the vars used during the match so as to add
+       corresponding annotations to explicitly silence the spurious warnings.
+
+       To do this, we change the VARS used in `pcase-u` (and throughout
+       the pcase code): they used to hold elements of the form (NAME . VAL)
+       and now they hold elements of the form (NAME VAL . USED).
+
+       (pcase--expand): Bind all vars instead of only those found via fgrep.
+       (pcase-codegen): Silence "unused var" warnings for those vars that have
+       already been referenced during the match itself.
+       (pcase--funcall, pcase--eval): Record the vars that are used.
+       (pcase--u1): Record the vars that are used via non-linear patterns.
+
+       * lisp/textmodes/mhtml-mode.el (mhtml-forward):
+       * lisp/vc/diff-mode.el (diff-goto-source): Silence newly
+       discovered warnings.
+
+       * test/lisp/emacs-lisp/pcase-tests.el (pcase-tests-bug46786): New test.
+
+2021-03-01  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix multiple Calc defmath errors (bug#46750)
+
+       Fix incorrect variable scoping in `let*`, `for` and `foreach`.
+       Fix loop variable value in `foreach` (should be element, not tail).
+       Fix function quoting, as in ('cons x y) -- didn't work at all.
+
+       Reported by Stephan Neuhaus.
+
+       * lisp/calc/calc-prog.el (math-define-exp, math-handle-foreach):
+       * test/lisp/calc/calc-tests.el: (var-g, test1, test2, test3, test4)
+       (test5, test6, test7, calc-defmath): Test various defmath forms.
+
+2021-03-01  Mattias Engdegård  <mattiase@acm.org>
+
+       Remove references to old bignums from Calc manual
+
+       * doc/misc/calc.texi: Remove references to the old Calc representation
+       of big integers, outdated references to fixnums, an any text and
+       examples that only made sense at the time.
+
+2021-03-01  Mattias Engdegård  <mattiase@acm.org>
+
+       * lisp/calc/calc-ext.el (math-equal-int): Work for bignums.
+
+2021-03-01  Juri Linkov  <juri@linkov.net>
+
+       * lisp/isearch.el: Minor doc fix.
+
+       * lisp/tab-bar.el (tab-bar--define-keys): Add check for 
tab-bar-format-global.
+
+2021-03-01  Protesilaos Stavrou  <info@protesilaos.com>
+
+       Add 'require-theme' function
+
+       * etc/NEWS: Document new function.
+       * lisp/custom.el (require-theme): Add function.
+
+       This follows from the discussion on bug#45068 where it became apparent
+       that there was no equivalent mechanism to 'require' that read through
+       the 'custom-theme-load-path'.
+
+2021-03-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix woman.el menu alteration code
+
+       * lisp/woman.el (woman-dired-define-keys): Fix naming of menu
+       after dired menu changes.
+
+2021-03-01  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: Amend C-M-a/e to handle lambda function in C++ arglist
+
+       * lisp/progmodes/cc-cmds.el (c-where-wrt-brace-construct): Reformulate 
latter
+       part such that the least enclosing braces and parentheses are used when
+       determining containment in such.  c-beginning-of-decl-1 has been 
superseded
+       by list movement and syntactic whitespace movement.
+       (c-backward-to-nth-BOF-{): Work on least enclosing parens rather than 
parens
+       at any level when moving back to an opening brace.
+       (c-forward-to-nth-EOF-\;-or-}): Work on least enclosing parens, as 
above.
+       Move the correction of point when in a "function trailer" to after the 
main
+       loop, correcting a minor bug.
+
+2021-03-01  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/pcase.el (pcase--split-pred): Re-fix bug#14773
+
+       Adjust to calling convention of `macroexp--fgrep`.
+
+2021-03-01  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Fix misuses of `byte-compile-macro-environment`
+
+       These seem to be left overs from Emacs<24 when `macroexpand-all` was
+       implemented in the CL library and hence the macros's evaluation
+       environment could come from different places depending on the
+       circumstance (either `byte-compile-macro-environment`, or
+       `cl-macro-environment`, or ...).
+
+       `byte-compile-macro-environment` contains definitions which expand to
+       code that is only understood by the rest of the byte-compiler,
+       so using it for code which isn't being byte-compiled leads to errors
+       such as references to non-existing function
+       `internal--with-suppressed-warnings`.
+
+       * lisp/emacs-lisp/cl-extra.el (cl-prettyexpand): Remove left-over
+       binding from when `macroexpand-all` was implemented in the CL library.
+
+       * lisp/emacs-lisp/ert.el (ert--expand-should-1):
+       * lisp/emacs-lisp/cl-macs.el (cl--compile-time-too): Properly preserve 
the
+       macroexpand-all-environment.
+       (cl--macroexp-fboundp): Pay attention to `cl-macrolet` macros as well.
+
+2021-03-01  Andrea Corallo  <akrl@sdf.org>
+
+       Fix `eql' `equal' propagation of non hash consed values (bug#46843)
+
+       Extend assumes allowing the following form:
+
+       (assume dst (and-nhc src1 src2))
+
+       `and-nhc' assume operator allow for constraining correctly
+       intersections where non hash consed values are not propagated as
+       values but rather promoted to their types.
+
+       * lisp/emacs-lisp/comp-cstr.el
+       (comp-cstr-intersection-no-hashcons): New function.
+       * lisp/emacs-lisp/comp.el (comp-emit-assume): Logic update to emit
+       `and-nhc' operator (implemented in fwprop by
+       `comp-cstr-intersection-no-hashcons').
+       (comp-add-cond-cstrs): Map `eq' to `and' assume operator and
+       `equal' `eql' into `and-nhc'.
+       (comp-fwprop-insn): Update to handle `and-nhc'.
+       * test/src/comp-tests.el (comp-tests-type-spec-tests): Add two
+       tests covering `eql' and `equal' propagation of non hash consed
+       values.
+
+2021-03-01  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/eval.c (init_eval_once): Bump max_specpdl_size (bug46818)
+
+       Further testing seems to confirm my suspicion that the increase in the
+       specpdl comes from the recent change to `pcase--if`.
+
+       * lisp/international/mule-cmds.el (update-leim-list-file): Revert 
workaround.
+
+2021-03-01  Matt Armstrong  <matt@rfc20.org>
+
+       Clean up obsolete comment
+
+       * src/marker.c (unchain_marker): Clean up obsolete comment
+       (bug#46836).
+
+       Commit cf3164523b (* src/alloc.c: Avoid O(N²) complexity when
+       unchaining markers (bug#24548)., 2018-03-23) removed the call from GC
+       into unchain_marker, so there is no need to warn about it.
+
+2021-03-01  F. Jason Park  <jp@neverwas.me>
+
+       Fix Bootstring skew parameter in puny.el
+
+       * lisp/net/puny.el: change puny-skew to match value given in RFC3492.
+       * test/lisp/net/puny-tests.el (puny-test-encode-domain)
+       (puny-test-decode-domain): add regression case for popular
+       domain. (bug#46838).
+
+2021-03-01  Stefan Kangas  <stefan@marxist.se>
+
+       Convert various menus to easymenu
+
+       * lisp/emacs-lisp/lisp-mode.el (lisp-mode-map): Move menu from
+       here...
+       (lisp-mode-menu): ...to here, and convert to easymenu.
+
+       * lisp/progmodes/elisp-mode.el (lisp-interaction-mode-map): Move
+       menu definition from here...
+       (lisp-interaction-mode-menu): ...to here, and convert to easymenu.
+
+       * lisp/replace.el (occur-menu-map): Convert to easymenu.
+
+2021-03-01  Glenn Morris  <rgm@gnu.org>
+
+       Improve admin.el's Makefile in standalone manual tarfiles
+
+       * admin/admin.el (make-manuals-dist-output-variables):
+       Fix abs_top_builddir.  Add EMACS.
+       (make-manuals-dist--1): Respect case when replacing output variables.
+
+2021-03-01  Glenn Morris  <rgm@gnu.org>
+
+       info/dir needs generated texi files to exist
+
+       * Makefile.in (misc-info): Depend on lisp.
+       (${srcdir}/info/dir): Depend on info-real.
+       (info): Simplify.
+
+2021-03-01  Glenn Morris  <rgm@gnu.org>
+
+       Make generation of texi from org overwrite output
+
+       * doc/misc/Makefile.in (org_template): Don't delete output.
+       * lisp/org/ox-texinfo.el (org-texinfo-export-to-texinfo-batch):
+       Overwrite existing output.
+
+2021-02-28  Andrea Corallo  <akrl@sdf.org>
+
+       Don't treat '=' as simple equality emitting constraints (bug#46812)
+
+       Extend assumes allowing the following form
+
+       (assume dst (= src1 src2))
+
+       to capture '=' semanting during fwprop handling float integer
+       conversions.
+
+       * lisp/emacs-lisp/comp.el (comp-equality-fun-p): Don't treat '=' as
+       simple equality.
+       (comp-arithm-cmp-fun-p, comp-negate-arithm-cmp-fun)
+       (comp-reverse-arithm-fun): Rename and add '=' '!='.
+       (comp-emit-assume, comp-add-cond-cstrs, comp-fwprop-insn): Update
+       for new function nameing and to handle '='.
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr-=): New function.
+       * test/src/comp-tests.el (comp-tests-type-spec-tests): Add a bunch
+       of '=' specific tests.
+
+2021-02-28  Andrea Corallo  <akrl@sdf.org>
+
+       Migrate and rename a bunch of functions from comp.el to comp-cstr.el
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr-imm-vld-p)
+       (comp-cstr-imm, comp-cstr-fixnum-p, comp-cstr-symbol-p)
+       (comp-cstr-cons-p): Move and rename from 'comp.el'.
+       * lisp/emacs-lisp/comp.el (comp-mvar-type-hint-match-p)
+       (make-comp-mvar, comp-emit-assume, comp-fwprop-prologue)
+       (comp-function-foldable-p, comp-function-call-maybe-fold)
+       (comp-fwprop-call, comp-fwprop-insn, comp-call-optim-func)
+       (comp-compute-function-type): Update for renamed functions.
+       * src/comp.c (emit_mvar_rval): Likewise.
+       * test/src/comp-tests.el (comp-tests-mentioned-p-1)
+       (comp-tests-cond-rw-checker-val): Likewise.
+
+2021-02-28  Glenn Morris  <rgm@gnu.org>
+
+       * doc/misc/modus-themes.org: Add copying markup.  (Bug#45141)
+
+2021-02-28  Glenn Morris  <rgm@gnu.org>
+
+       Update admins make-manuals for new output variable
+
+       * admin/admin.el (make-manuals-dist-output-variables):
+       Add abs_top_builddir.
+
+2021-02-28  Stefan Kangas  <stefan@marxist.se>
+
+       Convert dired menus to easymenu
+
+       * lisp/dired.el (dired-mode-map): Move menus from here...
+       (dired-mode-subdir-menu, dired-mode-immediate-menu)
+       (dired-mode-regexp-menu, dired-mode-mark-menu)
+       (dired-mode-operate-menu): ...to here, and convert to easymenu.
+
+2021-02-28  Stefan Kangas  <stefan@marxist.se>
+
+       Convert hi-lock-menu to easymenu
+
+       * lisp/hi-lock.el (hi-lock-menu): Convert to easymenu.
+
+2021-02-28  Alan Mackenzie  <acm@muc.de>
+
+       Combine and reconcile two conflicting entries in NEWS on 
goto-line-history
+
+       * etc/NEWS: Amend.
+
+       * doc/lispref/minibuf.texi (Minibuffer History): Amend the entry about
+       goto-line-history, which is now buffer local only after being so 
customized.
+
+2021-02-28  Mattias Engdegård  <mattiase@acm.org>
+
+       Declare more string predicates as pure
+
+       * lisp/emacs-lisp/byte-opt.el (pure-fns): Treat string>,
+       string-greaterp, string-empty-p, string-blank-p, string-prefix-p and
+       string-suffix-p as pure functions in the compiler.
+
+2021-02-28  Stefan Kangas  <stefan@marxist.se>
+
+       Convert ibuffer menus to easymenu
+
+       * lisp/ibuffer.el (ibuffer-mode-map): Move menu from here...
+       (ibuffer-mode-mark-menu, ibuffer-mode-view-menu): ...to here.
+       Convert to easymenu.
+       (ibuffer-mode--groups-menu-definition): New function.  Fix bug where
+       "Kill filter by group named" and "Yank last killed filter group
+       before" was overwritten and never shown in the menu.
+       (ibuffer-mode-groups-popup): Convert to easymenu.
+       (ibuffer-mode-operate-menu): Rename from 'ibuffer-mode-operate-map'
+       and update uses.  Convert to easymenu.
+       (ibuffer-mode-operate-map): Make into obsolete alias for above
+       renamed variable.
+
+2021-02-28  Michael Albinus  <michael.albinus@gmx.de>
+
+       Add `completion-predicate' to some Tramp commands
+
+       * lisp/net/tramp-cmds.el (tramp-cleanup-this-connection)
+       (tramp-rename-these-files): Add property `completion-predicate'.
+
+       * lisp/net/tramp.el (tramp-command-completion-p): New defun.
+
+2021-02-28  Kapuze Martin  <m.s.p@posteo.de>  (tiny change)
+
+       Enable Python type hints and non-trivial base classes in wisent
+
+       * admin/grammars/python.wy: Enable understanding Python type hints
+       and non-trivial base classes (bug#46817).
+
+2021-02-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Adjust cmuscheme.el menu bar after previous scheme.el change
+
+       * lisp/cmuscheme.el (map): Adjust the keymap lookup after recent
+       scheme.el change (bug#46820).
+
+2021-02-28  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix pcase 'rx' pattern match-data bug
+
+       The pcase 'rx' pattern would in some cases allow the match data to be
+       clobbered before it is read.  For example:
+
+         (pcase "PQR"
+           ((and (rx (let a nonl)) (rx ?z)) (list 'one a))
+           ((rx (let b ?Q))                 (list 'two b)))
+
+       The above returned (two "P") instead of the correct (two "Q").
+       This occurred because the calls to string-match and match-string were
+       presented as separate patterns to pcase, which would interleave them
+       with other patterns.
+
+       As a remedy, combine string matching and match-data extraction into a
+       single pcase pattern.  This introduces a slight inefficiency for two
+       or more submatches as they are grouped into a list structure which
+       then has to be destructured.
+
+       Found by Stefan Monnier.  See discussion at
+       https://lists.gnu.org/archive/html/emacs-devel/2021-02/msg02010.html
+
+       * lisp/emacs-lisp/rx.el (rx--reduce-right): New helper.
+       (rx [pcase macro]): Combine string-match and match-string calls into a
+       single pcase pattern.
+       * test/lisp/emacs-lisp/rx-tests.el (rx-pcase): Add test cases.
+
+2021-02-28  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/international/mule-cmds.el: Try and fix bug#46818
+
+       (update-leim-list-file): Reduce stack/pdl use.
+
+2021-02-28  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/macroexp.el: Rewrite the code warning about '(lambda 
...)
+
+       (macroexp--expand-all): Use `pcase--dontcare` so pcase generates
+       slightly better code.  Don't hardcode which functions takes function
+       arguments; rely on a new `funarg-positions` symbol property instead.
+
+2021-02-28  Stefan Kangas  <stefan@marxist.se>
+
+       Convert text-mode menu to easymenu
+
+       * lisp/textmodes/text-mode.el (text-mode-map): Move menu
+       definition from here...
+       (text-mode-menu): ...to here, and convert to easymenu.
+
+2021-02-28  Stefan Kangas  <stefan@marxist.se>
+
+       Convert isearch menu to easymenu
+
+       * lisp/isearch.el (isearch-menu-bar-yank-map)
+       (isearch-menu-bar-map, isearch-mode-map): Move menu definition
+       from here...
+       (isearch-menu-bar-map): ...to here, and convert to easymenu.
+
+       * lisp/loadup.el ("emacs-lisp/easymenu"): Move before isearch.el.
+
+2021-02-28  Stefan Kangas  <stefan@marxist.se>
+
+       Checkdoc fixes in isearch.el
+
+       * lisp/isearch.el (isearch--set-state, isearch-yank-pop-only)
+       (isearch-search-and-update, isearch-complete-edit, isearch-search):
+       Minor doc fixes.
+
+2021-02-27  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el: Support displaying global-mode-string in the tab bar.
+
+       * lisp/tab-bar.el (tab-bar--define-keys): Update global-mode-string
+       in mode-line-misc-info with condition to disable global-mode-string
+       in the mode line.
+       (tab-bar-format): New variable.
+       (tab-bar-format-history, tab-bar-format-add-tab)
+       (tab-bar-format-tabs): New functions with body from
+       'tab-bar-make-keymap-1'.
+       (tab-bar-format-align-right, tab-bar-format-global): New functions for
+       'tab-bar-format' list.
+       (tab-bar-format-list): New utility function.
+       (tab-bar-make-keymap-1): Just call 'tab-bar-format-list'.
+       https://lists.gnu.org/archive/html/emacs-devel/2020-11/msg01210.html
+
+2021-02-27  Juri Linkov  <juri@linkov.net>
+
+       * lisp/subr.el (read-char-choice-with-read-key): New function.
+
+       * lisp/subr.el (read-char-choice): Move most of the function body to
+       'read-char-choice-with-read-key'.
+       (read-char-choice-with-read-key): New function with body from
+       'read-char-choice'.
+
+2021-02-27  Stefan Kangas  <stefan@marxist.se>
+
+       Convert Buffer-menu-mode menu to easymenu
+
+       * lisp/buff-menu.el (Buffer-menu-mode-map): Move menu
+       definition from here...
+       (Buffer-menu-mode-menu): ...to here, and convert to easymenu.
+
+2021-02-27  Stefan Kangas  <stefan@marxist.se>
+
+       Minor fixes after preloading easymenu
+
+       * lisp/cedet/ede/dired.el:
+       * lisp/dired-x.el:
+       * lisp/filesets.el:
+       * lisp/follow.el:
+       * lisp/gnus/gnus-registry.el:
+       * lisp/net/eudc.el:
+       * lisp/printing.el:
+       * lisp/recentf.el:
+       * lisp/speedbar.el: Remove redundant require of easymenu; it is now
+       preloaded.
+       * lisp/org/org.el:
+       * lisp/progmodes/antlr-mode.el:
+       * lisp/progmodes/vhdl-mode.el:
+       * lisp/textmodes/reftex.el: Don't require easymenu in Emacs 28 or
+       later.
+
+       * etc/NEWS: Announce that 'easymenu' is now preloaded.
+
+2021-02-27  Glenn Morris  <rgm@gnu.org>
+
+       Fix doc/misc Makefile for out-of-tree with relative path
+
+       * doc/misc/Makefile.in (org_template): Fix for relative srcdir.
+
+2021-02-27  Glenn Morris  <rgm@gnu.org>
+
+       Improve Makefile treatment of org sources in doc/misc
+
+       * doc/misc/Makefile.in (ORG_SETUP): New variable.
+       (ORG_SRC): Use wildcard rather than hard-coding.
+       (org_template): Adjust for input containing $srcdir and suffix.
+       (org_setup_template): New template.
+
+2021-02-27  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/bytecomp.el: Fix minor regression introduced by pdump
+
+       After `rm **/*.elc; make` we'd sometimes get loads and loads of 
unnecessary
+       "Reloading ...".
+
+       (byte-compile-refresh-preloaded): Don't reload files that are more
+       recent than `temacs` but older than the `.pdmp` file.
+
+2021-02-27  Stefan Kangas  <stefan@marxist.se>
+
+       Don't require overlay; that's only needed in XEmacs
+
+       * lisp/allout.el:
+       * lisp/net/eudc.el:
+       * lisp/org/org.el: Don't require overlay; that's only needed in
+       XEmacs.
+
+2021-02-27  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/cconv.el: Fix uncaught brain farts in last change
+
+       (cconv--convert-funcbody, cconv-convert): Use `macroexp--warn-wrap` 
properly.
+
+2021-02-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add sexp navigation commands to elisp-mode
+
+       * lisp/progmodes/elisp-mode.el (emacs-lisp-mode-menu): Add some
+       navigation commands (bug#24774).
+
+2021-02-27  Stefan Kangas  <stefan@marxist.se>
+
+       Convert emacs-lisp-mode menu to easy-menu-define
+
+       * lisp/loadup.el: Preload easymenu.
+
+       * lisp/progmodes/elisp-mode.el (emacs-lisp-mode-map): Convert menu to
+       use easy-menu-define (bug#24774).
+
+2021-02-27  Matt Armstrong  <matt@rfc20.org>
+
+       Remove unnecessary unlock-buffer calls
+
+       * lisp/files.el (revert-buffer-insert-file-contents--default-function):
+       Remove vestigial call to `unlock-buffer'.
+       * lisp/simple.el (primitive-undo): Assume unlock-buffer is always
+       bound.  (Bug#46701)
+
+2021-02-27  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid crashes in Mew due to corrupted tool-bar label
+
+       * src/gtkutil.c (update_frame_tool_bar): Don't keep around a
+       'char *' pointer to a Lisp string's contents when calling Lisp,
+       because that could relocate string data; keep the Lisp string
+       itself instead.  This avoids crashes in Mew.  (Bug#46791)
+
+2021-02-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Compute grep defaults earlier
+
+       * lisp/progmodes/grep.el (grep): Always compute the defaults
+       (bug#46801).
+       (grep-highlight-matches): Clarify that it's not just used
+       interactively.
+
+2021-02-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Change defcustom types of two non-standard hooks
+
+       * lisp/erc/erc.el (erc-before-connect, erc-after-connect): Change
+       type from 'hook to 'function (bug#34657).
+
+2021-02-27  F. Jason Park  <jp@neverwas.me>
+
+       Accept string argument in erc-add-to-input-ring
+
+       * lisp/erc/erc-ring.el: (erc-add-to-input-ring)
+       (erc-previous-command): Use existing API to grab input.
+       * test/lisp/erc/erc-tests.el: (erc-ring-previous-command)
+       See (bug#46339).
+
+2021-02-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add generated .texi files to .gitignore
+
+2021-02-27  Glenn Morris  <rgm@gnu.org>
+
+       Fixes for doc/misc org source files
+
+       * doc/misc/org-setup.org: Fix "version" file lookup.  Add copyright.
+       * doc/misc/modus-themes.org: Fix up doclicense include.
+       * doc/misc/org.org: Remove non-working and unused "modification-time".
+       Fix up doclicense include.  Adjust setupfile inclusion.
+
+2021-02-27  Glenn Morris  <rgm@gnu.org>
+
+       Distribute the real source for some doc/misc manuals (bug#45143)
+
+       * doc/misc/modus-themes.texi, doc/misc/org.texi:
+       Remove generated files from repository.
+       * doc/misc/Makefile.in: Add rules for building .texi from .org.
+       (ORG_SRC, abs_top_builddir, EMACS, emacs):
+       New variables.
+       (org_template): New template.
+       (orgclean): New phony target.
+       * Makefile.in (info): Depend on lisp.
+       * lisp/org/ox-texinfo.el (org-texinfo-export-to-texinfo-batch):
+       New function.
+       * doc/misc/org.org, doc/misc/org-setup.org: New files.
+       Import from https://code.orgmode.org d8e8a97a14.
+
+2021-02-27  Protesilaos Stavrou  <info@protesilaos.com>
+
+       Import org source file for modus-themes manual
+
+       * doc/misc/modus-themes.org: New file.
+       Import from https://gitlab.com/protesilaos/modus-themes 515180ac.
+
+2021-02-27  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in progmodes/icon.el
+
+       * lisp/progmodes/icon.el: Use lexical-binding.
+       (electric-icon-brace): Very minor cleanup.
+
+2021-02-27  Stefan Kangas  <stefan@marxist.se>
+
+       Convert change-log-mode menu to easy-menu-define
+
+       * lisp/vc/add-log.el (change-log-mode-map): Move menu from here...
+       (change-log-mode-menu): ...to here; convert to easy-menu-define.
+
+2021-02-27  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/cconv.el: Improve line-nb info of unused var warnings
+
+       Instead of warning about unused vars during the analysis phase of
+       closure conversion, do it in the actual closure conversion by
+       annotating the code with "unused" warnings, so that the warnings
+       get emitted later by the bytecomp phase, like all other warnings,
+       at which point the line-number info is a bit less imprecise.
+
+       Take advantage of this change to wrap the expressions of unused
+       let-bound vars inside (ignore ...) so the byte-compiler can better
+       optimize them away.
+
+       Finally, promote `macroexp--warn-and-return` to "official" status
+       by removing its "--" marker.
+
+       (cconv-captured+mutated, cconv-lambda-candidates): Remove vars.
+       (cconv-var-classification): New var to replace them.
+       (cconv-warnings-only): Delete function.
+       (cconv--warn-unused-msg, cconv--var-classification): New functions.
+       (cconv--convert-funcbody): Add warnings for unused args.
+       (cconv-convert): Add warnings for unused vars in `let` and 
`condition-case`.
+       (cconv--analyze-use): Don't emit an "unused var" warning any more,
+       but instead remember the fact in `cconv-var-classification`.
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-force-lexical-warnings):
+       Remove variable.
+       (byte-compile-preprocess): Remove corresponding case.
+
+       * lisp/emacs-lisp/pcase.el (pcase--if): Don't throw away `test` effects.
+       (\`):
+       * lisp/emacs-lisp/cl-macs.el (cl--do-arglist): Use `car-safe` instead
+       of `car`, so it can more easily be removed by the optimizer if the
+       result is not used.
+
+       * lisp/emacs-lisp/macroexp.el (macroexp--warn-wrap): New function.
+       (macroexp-warn-and-return): Rename from `macroexp--warn-and-return`.
+
+2021-02-26  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       lisp/vc/*.el: Use lexical-bindings in all the files
+
+       Also remove some redundant `:group` arguments.
+
+       * lisp/vc/vc.el (vc-ignore): Autoload.
+
+       * lisp/vc/pcvs-util.el (cvs-every, cvs-union, cvs-map): Delete 
functions.
+       * lisp/vc/cvs-status.el: Require `cl-lib` at runtime.
+       (cvs-tree-tags-insert): Use `cl-mapcar` and `cl-every` instead.
+       * lisp/vc/pcvs.el: Require `cl-lib` at runtime.
+       (cvs-do-removal): Use `cl-every` instead.
+
+       * lisp/vc/ediff-init.el: Require `ediff-util` (for `ediff-cleanup-mess`
+       and `ediff-default-suspend-function`).
+
+       * lisp/vc/pcvs-info.el (cvs-fileinfo<): Remove unused vars `subtypea`
+       and `subtypeb`.
+
+       * lisp/vc/vc-git.el:
+       * lisp/vc/vc-bzr.el: Require `vc-dispatcher` at runtime for
+       `vc-do-async-command`.
+
+2021-02-26  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/cedet/semantic/idle.el: Fix compilation warning
+
+       (eldoc-last-message): Remove var declaration.
+       (eldoc-message): Remove function declaration.
+       (semantic--eldoc-info): Rename from semantic-idle-summary-idle-function.
+       Make it usable on `eldoc-documentation-functions`.
+       (semantic-idle-summary-mode): Use `eldoc-mode`.
+       (semantic-idle-summary-refresh-echo-area): Delete function.
+
+2021-02-26  Andrea Corallo  <akrl@sdf.org>
+
+       Canonicalize filenames on Windows before hashing (bug#46256)
+
+       * src/comp.c (Fcomp_el_to_eln_filename): On Windowns
+       canonicalize filenames before hashing.
+
+2021-02-26  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/cedet/semantic/analyze*.el: Use lexical-binding
+
+       * lisp/cedet/semantic/analyze.el: Use lexical-binding.
+       Rename the dynbound var `prefixtypes` to `semantic--prefixtypes`.
+       (semantic--prefixtypes): Declare var.
+
+       * lisp/cedet/semantic/analyze/complete.el: Use lexical-binding.
+       (semantic--prefixtypes): Declare var.
+       (semantic-analyze-possible-completions-default): Remove unused var 
`any`.
+       Rename `prefixtypes` to `semantic--prefixtypes`.
+
+       * lisp/cedet/semantic/analyze/debug.el: Use lexical-binding.
+       (semantic-analyzer-debug-global-symbol): Remove no-op use of 
`prefixtypes`.
+
+       * lisp/cedet/semantic/analyze/refs.el:
+       * lisp/cedet/semantic/analyze/fcn.el: Use lexical-binding.
+
+2021-02-26  Andrea Corallo  <akrl@sdf.org>
+
+       Change native compiler configure flag into '--with-native-compilation'
+
+       * configure.ac: Rename configure nativecomp flags into
+       --with-native-compilation.
+
+2021-02-26  Andrea Corallo  <akrl@sdf.org>
+
+       Interactive tag native compilation function in emacs-lisp-mode
+
+       * lisp/progmodes/elisp-mode.el
+       (emacs-lisp-native-compile-and-load): Tag it for `emacs-lisp-mode'.
+
+2021-02-26  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into native-comp
+
+2021-02-26  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix Tramp manual
+
+       * doc/misc/tramp.texi (External methods): Mention "about-args".
+       (Remote shell setup): Use sshx.
+
+2021-02-26  Stefan Kangas  <stefan@marxist.se>
+
+       Make some defcustom types stricter in comp.el
+
+       * lisp/emacs-lisp/comp.el (comp-speed, comp-debug, comp-verbose)
+       (comp-async-jobs-number, comp-async-env-modifier-form): Use stricter
+       types.
+
+2021-02-26  Stefan Kangas  <stefan@marxist.se>
+
+       Add :version tags to defcustoms in comp.el
+
+       * lisp/emacs-lisp/comp.el (comp-speed, comp-debug, comp-verbose)
+       (comp-never-optimize-functions, comp-async-jobs-number)
+       (comp-async-cu-done-hook, comp-async-all-done-hook)
+       (comp-async-env-modifier-form)
+       (comp-async-report-warnings-errors, comp-native-driver-options)
+       (comp-libgccjit-reproducer): Add :version tags.
+
+2021-02-26  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/progmodes/dcl-mode.el: Minor doc fixes.
+
+2021-02-26  Stefan Kangas  <stefan@marxist.se>
+
+       Convert some more progmode menus to easy-menu-define
+
+       * lisp/progmodes/dcl-mode.el (dcl-mode-map):
+       * lisp/progmodes/icon.el (icon-mode-map):
+       * lisp/progmodes/scheme.el (scheme-mode-map):
+       Move menu definitions from here...
+       * lisp/progmodes/dcl-mode.el (dcl-mode-menu):
+       * lisp/progmodes/icon.el (icon-mode-menu)
+       * lisp/progmodes/scheme.el (scheme-mode-menu):
+       ...to here, and use easy-menu-define.
+
+       * lisp/progmodes/icon.el
+       (icon-mode-map, icon-mode-syntax-table): Simplify.
+
+2021-02-26  Stefan Kangas  <stefan@marxist.se>
+
+       Convert simula-mode menu to easy-menu-define
+
+       * lisp/progmodes/simula.el (simula-mode-map): Move menu definition
+       from here...
+       (simula-mode-menu): ...to here, and use easy-menu-define.
+       (simula-popup-menu): Declare unused function obsolete.
+
+2021-02-26  Stefan Kangas  <stefan@marxist.se>
+
+       Fix syntax highlighting of easy-menu-define docstrings
+
+       * lisp/emacs-lisp/easymenu.el (easy-menu-define): Add doc-string
+       declaration for correct syntax highlighting.
+
+2021-02-26  Stefan Kangas  <stefan@marxist.se>
+
+       Remove redundant requires of easymenu
+
+       * lisp/allout.el:
+       * lisp/emacs-lisp/edebug.el:
+       * lisp/emacs-lisp/ert.el:
+       * lisp/erc/erc-menu.el:
+       * lisp/help-mode.el:
+       * lisp/net/dictionary.el:
+       * lisp/nxml/rng-nxml.el:
+       * lisp/progmodes/ebrowse.el:
+       * lisp/progmodes/meta-mode.el:
+       * lisp/progmodes/prolog.el:
+       * lisp/progmodes/ps-mode.el:
+       * lisp/progmodes/vera-mode.el:
+       * lisp/wid-browse.el: Remove redundant require of easymenu.  We only
+       use the autoloaded macro 'easy-menu-define' here.
+
+2021-02-26  Stefan Kangas  <stefan@marxist.se>
+
+       Remove check for missing easymenu from cperl-mode.el
+
+       * lisp/progmodes/cperl-mode.el (cperl-menu): Don't wrap definition
+       in condition-case; easymenu always exists in Emacs.
+       (easymenu): Remove redundant require.
+
+2021-02-26  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix last change
+
+       * lisp/emacs-lisp/comp.el (comp-async-report-warnings-errors):
+       Improve wording of the doc string.
+
+2021-02-26  Andrea Corallo  <akrl@sdf.org>
+
+       Improve `comp-async-report-warnings-errors' docstring
+
+       * lisp/emacs-lisp/comp.el (comp-async-report-warnings-errors):
+       Improve docstring.
+
+2021-02-26  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of last change
+
+       * lisp/emacs-lisp/comp.el (comp-async-query-on-exit)
+       (comp-async-report-warnings-errors): Improve wording.
+
+2021-02-26  Andrea Corallo  <akrl@sdf.org>
+
+       Add `comp-async-query-on-exit' customize.
+
+       * lisp/emacs-lisp/comp.el (comp-async-query-on-exit): New customize.
+       (comp-run-async-workers): Make use of.
+
+2021-02-26  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Function-quote completion property of declare form
+
+       For discussion, see the following thread:
+       https://lists.gnu.org/r/emacs-devel/2021-02/msg01666.html
+
+       * lisp/emacs-lisp/byte-run.el (byte-run--set-completion): Quote with
+       'function' for syntactical consistency with other declare form
+       properties.  This allows writing (declare (completion foo)) instead
+       of (declare (completion 'foo)).
+       * lisp/emacs-lisp/easymenu.el (easy-menu-do-define):
+       * lisp/gnus/gnus-sum.el (gnus-summary-make-menu-bar): Prefer
+       function-put over put for function symbols.
+       * lisp/subr.el (ignore, undefined): Remove #'-quoting from declare
+       form; it is no longer needed.
+
+2021-02-26  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix pcase rx pattern bugs
+
+       Two unrelated bugs: A missing type check caused an error in rx
+       patterns for non-string match targets, and rx patterns did not work at
+       all in pcase-let or pcase-let*.
+
+       Second bug reported by Basil Contovounesios and Ag Ibragimov; fixes
+       proposed by Stefan Monnier.  Discussion and explanation in thread at
+       https://lists.gnu.org/archive/html/emacs-devel/2021-02/msg01924.html
+
+       * lisp/emacs-lisp/rx.el (rx): Add (pred stringp) to avoid type errors,
+       and replace the `pred` clause for the actual match with something that
+       works with pcase-let(*) without being optimised away.
+       * test/lisp/emacs-lisp/rx-tests.el (rx-pcase): Add test cases.
+
+2021-02-26  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/tooltip.el (tooltip): Doc fix for GTK.
+
+2021-02-25  Andrea Corallo  <akrl@sdf.org>
+
+       Fix some comp-vec logic
+
+       * lisp/emacs-lisp/comp.el (comp-vec-length, comp-vec-append)
+       (comp-vec-prepend): Fix logic.
+       (comp-vec-aref): Fix indentation.
+
+2021-02-25  Andrea Corallo  <akrl@sdf.org>
+
+       Fix two docstrings in comp.el
+
+       * lisp/emacs-lisp/comp.el (comp-new-frame,
+       comp-maybe-add-vmvar): Fix docstring.
+
+2021-02-25  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix documentation of a recent change
+
+       * src/fns.c (Fyes_or_no_p): Don't use braces around one-line
+       block.
+       (syms_of_fns) <use-short-answers>: Improve the wording of the doc
+       string.
+       * etc/NEWS: Improve wording of the entry about 'use-short-answers'.
+
+2021-02-25  Juri Linkov  <juri@linkov.net>
+
+       New variable 'use-short-answers' to use 'y-or-n-p' instead of 
'yes-or-no-p'
+
+       * lisp/cus-start.el: Add use-short-answers.
+
+       * lisp/emacs-lisp/map-ynp.el (read-answer): Handle use-short-answers.
+       (read-answer-short): Add use-short-answers to docstring.
+
+       * src/fns.c (Fyes_or_no_p): Call y-or-n-p if use_short_answers is true.
+       (syms_of_fns): Add DEFVAR_BOOL use-short-answers (bug#46594).
+
+2021-02-25  Alan Third  <alan@idiocy.org>
+
+       Fix freeze on older macOS's (bug#46687)
+
+       * src/nsterm.m ([EmacsView windowDidChangeBackingProperties:]):
+       ([EmacsView viewWillDraw]): Only run this code when actually drawing
+       to an offscreen bitmap.
+
+2021-02-25  Robert Pluim  <rpluim@gmail.com>
+
+       Re-enable network-stream-tests.el :nowait t tests
+
+       After the fix for Bug#46709, these no longer fail in the absence of a
+       working Internet connection
+
+       * test/lisp/net/network-stream-tests.el (internet-is-working): Remove
+       defvar, it's no longer needed in this file.
+
+       * test/lisp/net/network-stream-tests.el
+       (connect-to-tls-ipv4-nowait):
+       (connect-to-tls-ipv6-nowait):
+       (open-network-stream-tls-nowait):
+       (open-gnutls-stream-new-api-nowait):
+       (open-gnutls-stream-old-api-nowait): Remove check for 
internet-is-working.
+
+2021-02-25  Robert Pluim  <rpluim@gmail.com>
+
+       Don't crash if gnutls_handshake fails
+
+       In some situations involving Internet access not being fully
+       functional, gnutls_handshake returns a fatal error, which we were
+       ignoring, causing us to call gnutls_handshake again.  Now we check for
+       the error and return it to the caller.
+
+       * src/gnutls.c (gnutls_try_handshake): Return immediately if
+       gnutls_handshake returns a fatal error (Bug#46709).
+
+2021-02-25  Robert Pluim  <rpluim@gmail.com>
+
+       * Specify 'ipv4 when testing ipv4 in network-stream-tests.el
+
+       * test/lisp/net/network-stream-tests.el
+       (connect-to-tls-ipv4-nowait): Specify :family 'ipv4.
+
+2021-02-25  Stefan Kangas  <stefan@marxist.se>
+
+       Convert epa-key-list-mode menu to easy-menu-define
+
+       * lisp/epa.el (epa-key-list-mode-map): Move menu from here...
+       (epa-key-list-mode-menu): ...to here, and convert to easy-menu-define.
+
+2021-02-25  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Remove last remaining external uses of `edebug-form-spec`
+
+       * lisp/emacs-lisp/gv.el (gv-place): Use `def-edebug-elem-spec`.
+
+       * lisp/obsolete/erc-compat.el (erc-define-minor-mode): Remove redundant
+       `edebug-form-spec`.
+
+2021-02-25  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * test/lisp/emacs-lisp/macroexp-tests.el (macroexp--tests-file-name): 
Add case
+
+       Add use of `macroexp-file-name` from a macro called from within
+       a function, which works thanks to eager-macroexpansion (so the macro
+       is expanded which the file is being loaded rather than only later
+       when the function is called).
+
+       * test/lisp/emacs-lisp/macroexp-resources/m1.el
+       (macroexp--m1-tests-file-name): New function.
+
+2021-02-25  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * test/lisp/emacs-lisp/macroexp-tests.el (macroexp--tests-file-name): 
New test
+
+       * test/lisp/emacs-lisp/macroexp-resources/m1.el:
+       * test/lisp/emacs-lisp/macroexp-resources/m2.el: New files.
+
+2021-02-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Include a "make check-maybe" in the admin/emake script
+
+2021-02-24  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/macroexp.el (macroexp-file-name): Work in 
`eval-buffer`
+
+       Rely on `current-load-list` instead of `load-file-name`.
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-close-variables):
+       Change the var we override accordingly.
+
+2021-02-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve quail-update-leim-list-file error messaging
+
+       * lisp/international/quail.el (quail-update-leim-list-file): Give
+       a better error message.
+
+2021-02-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix warning generated by indian.el + quail.el
+
+       * lisp/leim/quail/indian.el (quail-define-indian-trans-package):
+       Reintroduce kludge to fix automatic detection by Quail.
+
+2021-02-24  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el: Move aliases down closer to keybindings.
+
+2021-02-24  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el (tab-switch): New defalias to 'tab-bar-switch-to-tab'.
+
+       (tab-prefix-map): Bind "O" to 'tab-previous'.
+
+2021-02-24  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/macroexp.el (macroexp-file-name): New function.
+
+       Yes, finally: a function that tells you the name of the file where
+       the code is located.  Finding this name is non-trivial in practice,
+       as evidenced by the "4 shift/reduce conflicts" warning when compiling
+       CEDET's python.el, because its `wisent-source` got it wrong in that
+       case, thinking the grammar came from `python.el` instead of
+       `python-wy.el`.
+
+       While at it, also made `macroexp-compiling-p` public, since it's
+       useful at various places.
+
+       (macroexp-compiling-p): Rename from `macroexp--compiling-p`.
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-close-variables):
+       Bind `load-file-name` to nil so we can distinguish a load that calls
+       the byte compiler from a byte compilation which causes a load.
+
+       * lisp/cedet/semantic/wisent/python.el 
(wisent-python--expected-conflicts):
+       Remove; it was just a workaround.
+       * lisp/subr.el (do-after-load-evaluation): Avoid `byte-compile--` vars.
+       * lisp/cedet/semantic/fw.el (semantic-alias-obsolete):
+       Use `macroexp-compiling-p` and `macroexp-file-name`.
+       * lisp/cedet/semantic/wisent/comp.el (wisent-source): Use 
`macroexp-file-name`
+       (wisent-total-conflicts): Tighten regexp.
+       * lisp/emacs-lisp/cl-lib.el (cl--compiling-file): Delete function
+       and variable.  Use `macroexp-compiling-p` instead.
+       * lisp/progmodes/flymake.el (flymake-log):
+       * lisp/emacs-lisp/package.el (package-get-version):
+       * lisp/emacs-lisp/ert-x.el (ert-resource-directory):
+       Use `macroexp-file-name`.
+
+2021-02-24  Ulf Jasper  <ulf.jasper@web.de>
+
+       Add options to use feed names from newticker-url-list
+
+       * lisp/net/newst-treeview.el
+         (newsticker-treeview-use-feed-name-from-url-list-in-treeview): New.
+         (newsticker-treeview-use-feed-name-from-url-list-in-itemview): New.
+         (newsticker--treeview-item-show): Show feed name from
+         newsticker-url-list if wanted.
+         (newsticker--treeview-propertize-tag): Add argument 'tooltip'.
+         (newsticker--treeview-tree-get-tag): Usefeed name from
+         newsticker-url-list if wanted.  (Fixes third issue in
+         Bug#41376.)
+
+2021-02-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix wisent/python.el grammar warning
+
+       * lisp/cedet/semantic/wisent/python.el: Fix warning about
+       shift/reduce conflicts in the Python grammar.
+
+2021-02-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix warning generated by indian.el + quail.el
+
+       * lisp/leim/quail/indian.el (quail-define-indian-trans-package):
+       Reintroduce kludge to fix automatic detection by Quail.
+
+2021-02-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove the "Documentation:" line from the variable help
+
+       * lisp/help-fns.el (describe-variable): Remove the
+       "Documentation:" line (bug#46702).  This makes the help text more
+       compact and seems easier to read, too.
+
+2021-02-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix Calc menu item for vector dot products
+
+       * lisp/calc/calc-menu.el (calc-vectors-menu): Use the correct
+       function `calc-times' instead of the non-existent `calc-mult'
+       function (bug#46710).
+
+2021-02-24  Doug Davis  <ddavis@ddavis.io>
+
+       Interactive tag byte compilation functions in emacs-lisp-mode
+
+       * lisp/progmodes/elisp-mode.el (emacs-lisp-byte-compile)
+       (emacs-lisp-byte-compile-and-load): Add interactive tagging
+       (bug#46721).
+
+2021-02-24  Miha Rihtaršič  <miha@kamnitnik.top>  (tiny change)
+
+       Run all functions in `prefix-command-echo-keystrokes-functions'
+
+       * lisp/simple.el (internal-echo-keystrokes-prefix): Really run all
+       functions in `prefix-command-echo-keystrokes-functions' (bug#46727).
+
+2021-02-24  Protesilaos Stavrou  <info@protesilaos.com>
+
+       Use named faces in shortdoc
+
+       * lisp/emacs-lisp/shortdoc.el (shortdoc-heading): Define new face
+       for headings.
+       (shortdoc-display-group): Apply new heading face.
+       (shortdoc--display-function): Use existing face for section text.
+       * etc/NEWS: Document new face (bug#46748).
+
+2021-02-24  Utkarsh Singh  <utkarsh190601@gmail.com>  (tiny change)
+
+       Use sh-mode for PKGBUILD files
+
+       * lisp/files.el (auto-mode-alist): Use sh-mode for PKGBUILD files
+       (bug#46660).
+
+2021-02-24  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix dangerous code in xdisp.c
+
+       * src/xdisp.c (move_it_to, display_line): Make sure ZV_BYTE is
+       greater than 1 before fetching previous byte.
+
+2021-02-24  Eli Zaretskii  <eliz@gnu.org>
+
+       Better support for 'truncate-line' non-nil in the mini-window
+
+       * src/xdisp.c (resize_mini_window): Resize the mini-window
+       when multi-line text is displayed under truncate-lines
+       non-nil in the minibuffer.  (Bug#46718)
+
+2021-02-24  Protesilaos Stavrou  <info@protesilaos.com>
+
+       Specify the Emacs version of new vc-dir faces
+
+       * vc-dir.el (vc-dir-header)
+       (vc-dir-header-value)
+       (vc-dir-directory)
+       (vc-dir-file)
+       (vc-dir-mark-indicator)
+       (vc-dir-status-warning)
+       (vc-dir-status-edited)
+       (vc-dir-status-up-to-date)
+       (vc-dir-status-ignored): Add version 28.1.  (Bug#46745)
+
+2021-02-24  Andrea Corallo  <akrl@sdf.org>
+
+       Fix async compilation and paramenter naming
+
+       * lisp/emacs-lisp/comp.el (native--compile-async)
+       (native-compile-async): Fix broken parameter renaming.
+
+2021-02-23  Andrea Corallo  <akrl@sdf.org>
+
+       Do not emit assumptions referencing clobbered mvars (bug#46670)
+
+       * lisp/emacs-lisp/comp.el (comp-func): Add `vframe-size' slot.
+       (comp-new-frame): Add `vsize' parameter.
+       (comp-limplify-top-level, comp-limplify-function): Update for new
+       `comp-new-frame'.
+       (comp-maybe-add-vmvar): New function.
+       (comp-add-cond-cstrs): Logic update to emit assumptions not
+       referencing clobbered variables.
+       (comp-place-phis, comp-ssa, comp-ssa-rename-insn)
+       (comp-ssa-rename): Update rename logic to rename also negative
+       slots.
+       (comp-fwprop-insn): Update to handle `(assume mvar mvar)' form.
+       * test/src/comp-tests.el (46670-1): Add testcase.
+       * test/src/comp-test-funcs.el (comp-test-46670-1-f)
+       (comp-test-46670-2-f): New functions.
+
+2021-02-23  Andrea Corallo  <akrl@sdf.org>
+
+       Move ssa rename from vector to comp-vec
+
+       * lisp/emacs-lisp/comp.el (comp-block): Updated `final-frame' slot
+       type.
+       (comp-limplify): Updated `frame' slot type.
+       (comp-slot-n, comp-new-frame, comp-place-phis, comp-ssa)
+       (comp-ssa-rename-insn, comp-ssa-rename, comp-finalize-phis): Use
+       `comp-vec'.
+
+2021-02-23  Andrea Corallo  <akrl@sdf.org>
+
+       Add a simple growable vector like type
+
+       * lisp/emacs-lisp/comp.el (comp-vec): Define struct.
+       (comp-vec-copy, comp-vec-length, comp-vec--verify-idx)
+       (comp-vec-aref, comp-vec-append, comp-vec-prepend): New functions.
+
+2021-02-23  Juri Linkov  <juri@linkov.net>
+
+       Small fixes
+
+       * lisp/emacs-lisp/seq.el (seq-contains): Move the ‘declare’ form
+       after the docstring.
+       * lisp/misc.el (copy-from-above-command): Fix whitespace regexp.
+
+2021-02-23  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-line.el (tab-line-tab-name-format-function): New defcustom.
+
+       (tab-line-tab-name-format-default): New function as the default value.
+       (tab-line-format-template): Funcall tab-line-tab-name-format-function.
+       This is like recently added tab-bar-tab-name-format-function.
+
+2021-02-23  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el (tab-prefix-map): Bind "n" to 'tab-duplicate'.
+
+       (tab-bar-separator): New function.
+       (tab-bar-make-keymap-1): Use it.
+
+2021-02-23  Ulf Jasper  <ulf.jasper@web.de>
+
+       Leave other windows unchanged, use search instead of re-search
+
+       * lisp/net/newst-backend.el (newsticker-customize-feed): Leave other
+         windws unchanged.  Use search instead of re-search.
+
+2021-02-23  Ulf Jasper  <ulf.jasper@web.de>
+
+       Fix invalid interactive-statement
+
+       * lisp/net/newst-backend.el (newsticker-customize): Fix invalid
+         interactive-statement.
+
+2021-02-23  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * test/: Use lexical-binding the few remaining files
+
+       * test/manual/biditest.el: Use lexical-binding.
+       (biditest-generate-testfile): Remove unused var `levels`.
+
+       * test/manual/image-circular-tests.el: Use lexical-binding.
+
+       * test/manual/image-size-tests.el: Use lexical-binding.
+       (image-size-tests): Check `fboundp` before calling `imagemagick-types`.
+
+       * test/manual/redisplay-testsuite.el: Use lexical-binding.
+
+       * test/manual/cedet/cedet-utests.el: Use lexical-binding.
+       Use `with-current-buffer`.
+       (cedet-utest): Test `fboundp` i.s.o `featurep` to silence warning.
+       (srecode-map-save-file): Declare var.
+       (pulse-test): Test `fboundp` before calling `pulse-available-p`.
+       Declare `pulse-momentary-highlight-overlay` since it's not autoloaded.
+
+       * test/manual/cedet/semantic-tests.el: Use lexical-binding.
+       Use `with-current-buffer`.
+       (semanticdb-ebrowse-dump): Remove unused var `ab`.
+       (semanticdb-test-gnu-global): Don't use obsolete "name" arg to 
constructor.
+       (cedet-utest-directory): Declare var.
+
+2021-02-23  Ulf Jasper  <ulf.jasper@web.de>
+
+       Add command for customizing current newsticker feed
+
+       * lisp/net/newst-backend.el (newsticker-customize-feed): New.
+         (newsticker--insert-bytes): Add documentation string.
+         (newsticker--decode-iso8601-date): Fix documentation string.
+       * lisp/net/newst-treeview.el 
(newsticker-treeview-customize-current-feed):
+         New.
+         (newsticker-treeview-mode-map): Add key for new command
+         'newsticker-treeview-customize-current-feed'. (Fixes second issue in
+         Bug#41376.)
+
+2021-02-23  Robert Pluim  <rpluim@gmail.com>
+
+       * doc/misc/tramp.texi: Grammar/style fixes
+
+       * doc/misc/tramp.texi (Overview):
+       (Obtaining @value{tramp}):
+       (Quick Start Guide):
+       (Configuration):
+       (Connection types):
+       (Inline methods):
+       (External methods):
+       (Password handling):
+       (Predefined connection information):
+       (Remote shell setup):
+       (Remote processes):
+       (Frequently Asked Questions):
+       (External packages):
+       (Traces and Profiles): Grammar/style fixes.
+
+2021-02-23  Robert Pluim  <rpluim@gmail.com>
+
+       * lisp/net/dictionary-connection.el: Grammar fixes
+
+       * lisp/net/dictionary-connection.el: Grammar fix
+       (dictionary-connection-open): Use active voice.
+       (dictionary-connection-status): Reword and improve formatting.
+
+2021-02-23  Robert Pluim  <rpluim@gmail.com>
+
+       Make message-mailto work for emacsclient
+
+       * doc/misc/message.texi (System Mailer Setup): Add index entry.
+       Mention option to use emacsclient.
+
+       * etc/NEWS: Mention emacsclient option for 'mailto:' handling.
+
+       * etc/emacs-mail.desktop: Add example using emacsclient.
+
+       * lisp/gnus/message.el (message-mailto): Add optional url argument
+       so we can call it from emacsclient.
+
+2021-02-23  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: Fix bug in "state cache" invalidation function.
+
+       * lisp/progmodes/cc-engine.el (c-invalidate-state-cache-1): Rewrite 
part of
+       it, following the code in c-parse-state-1, to get a proper setting of
+       c-state-cache-good-pos.
+
+2021-02-23  Stefan Kangas  <stefan@marxist.se>
+
+       Convert some more menus to easy-menu-define
+
+       * lisp/tar-mode.el (tar-mode-map):
+       * lisp/textmodes/sgml-mode.el (sgml-mode-map, html-mode-map):
+       * lisp/wdired.el (wdired-mode-map): Move menus from here...
+
+       * lisp/tar-mode.el (tar-mode-immediate-menu, tar-mode-mark-menu)
+       * lisp/textmodes/sgml-mode.el (sgml-mode-menu, html-mode-menu):
+       * lisp/wdired.el (wdired-mode-menu): ...to here, and convert to
+       easy-menu-define.
+
+2021-02-23  Stefan Kangas  <stefan@marxist.se>
+
+       Improve easymenu.el Commentary section
+
+       * lisp/emacs-lisp/easymenu.el: Improve Commentary section.
+
+2021-02-22  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/antlr-mode.el: Fix bootstrap failure
+
+       (antlr-mode): Remove compatibility code with older CC-mode.
+       This somehow appears to fix the error:
+
+           In antlr-mode:
+           progmodes/antlr-mode.el:2426:20: Error: `c-init-language-vars' 
defined
+               after use in (c-init-language-vars) (missing `require' of a 
library
+               file?)
+           progmodes/antlr-mode.el:2427:26: Warning: c-init-language-vars 
called
+               with 0 arguments, but requires 1
+
+       No idea what caused the error to appear after the previous patch either.
+
+2021-02-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Do mode tagging in decipher.el
+
+       Do mode tagging in bubbles.el
+
+2021-02-22  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/obsolete: Use lexical-binding
+
+       Use lexical-binding in all the lisp/obsolete/*.el files.
+       While at it, removed redundant :group arguments and used #' to quote
+       functions.  Commented out the key bindings which the #' revealed
+       to lead to non-existing commands, and replaced those revealed to be 
obsolete.
+
+       * lisp/obsolete/cl-compat.el: Use cl-lib.
+
+       * lisp/obsolete/cust-print.el: Assume `defalias` exists.
+       (with-custom-print): Use `declare`.
+
+       * lisp/obsolete/iswitchb.el (iswitchb-init-XEmacs-trick)
+       (iswitchb-xemacs-backspacekey): Remove functions.
+
+       * lisp/obsolete/landmark.el (landmark, landmark-nslify-wts):
+       Prefer `apply` to `eval`.
+
+       * lisp/obsolete/longlines.el (longlines-mode): Don't use `add-to-list`
+       on a hook.
+
+       * lisp/obsolete/pgg-gpg.el (pgg-gpg-process-region): Use `clear-string`.
+
+       * lisp/obsolete/pgg-pgp.el (pgg-pgp-encrypt-region): Remove oddly
+       unused var `passphrase`.
+       (pgg-pgp-verify-region): Declare var `jam-zcat-filename-list`.
+
+       * lisp/obsolete/pgg-pgp5.el (pgg-pgp5-encrypt-region): Remove oddly
+       unused var `passphrase`.
+       (pgg-pgp5-verify-region): Declare var `jam-zcat-filename-list`.
+
+       * lisp/obsolete/pgg.el: Remove some XEmacs compatibility code.
+       (pgg-run-at-time, pgg-cancel-timer, pgg-clear-string): Remove functions.
+       Use their core equivalent instead.
+
+       * lisp/obsolete/rcompile.el (remote-compile): Remove unused vars `l`,
+       `l-host`, `l-user`, and `localname`.
+
+       * lisp/obsolete/starttls.el (starttls-any-program-available):
+       Use `define-obsolete-function-alias`.
+
+       * lisp/obsolete/tls.el (tls-format-message): Delete function, use
+       `format-message` instead.
+
+       * lisp/obsolete/url-ns.el (url-ns-prefs): Use `with-current-buffer`
+       and `dlet`.
+
+       * lisp/obsolete/vip.el (vip-escape-to-emacs): Remove unused var `key`.
+       (vip-command-argument, vip-read-string, ex-delete, ex-line): Remove
+       unused var `conditions`.
+       (ex-map): Use a closure instead of `eval`.
+       (ex-set): Make it an alias of `set-variable`.
+       (ex-substitute): Remove unused var `cont`.
+
+       * lisp/obsolete/abbrevlist.el:
+       * lisp/obsolete/bruce.el:
+       * lisp/obsolete/cc-compat.el:
+       * lisp/obsolete/cl-compat.el:
+       * lisp/obsolete/cl.el:
+       * lisp/obsolete/complete.el:
+       * lisp/obsolete/crisp.el:
+       * lisp/obsolete/cust-print.el:
+       * lisp/obsolete/erc-compat.el:
+       * lisp/obsolete/erc-hecomplete.el:
+       * lisp/obsolete/eudcb-ph.el:
+       * lisp/obsolete/fast-lock.el:
+       * lisp/obsolete/gs.el:
+       * lisp/obsolete/gulp.el:
+       * lisp/obsolete/html2text.el:
+       * lisp/obsolete/info-edit.el:
+       * lisp/obsolete/iswitchb.el:
+       * lisp/obsolete/landmark.el:
+       * lisp/obsolete/lazy-lock.el:
+       * lisp/obsolete/longlines.el:
+       * lisp/obsolete/mailpost.el:
+       * lisp/obsolete/mantemp.el:
+       * lisp/obsolete/meese.el:
+       * lisp/obsolete/messcompat.el:
+       * lisp/obsolete/metamail.el:
+       * lisp/obsolete/mouse-sel.el:
+       * lisp/obsolete/nnir.el:
+       * lisp/obsolete/old-emacs-lock.el:
+       * lisp/obsolete/otodo-mode.el:
+       * lisp/obsolete/patcomp.el:
+       * lisp/obsolete/pc-mode.el:
+       * lisp/obsolete/pc-select.el:
+       * lisp/obsolete/pgg-def.el:
+       * lisp/obsolete/pgg-gpg.el:
+       * lisp/obsolete/pgg-parse.el:
+       * lisp/obsolete/pgg-pgp.el:
+       * lisp/obsolete/pgg-pgp5.el:
+       * lisp/obsolete/pgg.el:
+       * lisp/obsolete/rcompile.el:
+       * lisp/obsolete/s-region.el:
+       * lisp/obsolete/sb-image.el:
+       * lisp/obsolete/sregex.el:
+       * lisp/obsolete/starttls.el:
+       * lisp/obsolete/sup-mouse.el:
+       * lisp/obsolete/terminal.el:
+       * lisp/obsolete/tls.el:
+       * lisp/obsolete/tpu-edt.el:
+       * lisp/obsolete/tpu-extras.el:
+       * lisp/obsolete/tpu-mapper.el:
+       * lisp/obsolete/url-ns.el:
+       * lisp/obsolete/vc-arch.el:
+       * lisp/obsolete/vi.el:
+       * lisp/obsolete/vip.el:
+       * lisp/obsolete/ws-mode.el:
+       * lisp/obsolete/yow.el: Use lexical-binding.
+
+2021-02-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention the problems with newlines in Dired
+
+       * doc/emacs/dired.texi (Dired Enter): Mention newlines and what to
+       do about them.
+
+       * lisp/dired.el (dired-listing-switches): Mention newlines
+       (bug#46705).
+
+2021-02-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Buttonize function values in help (and add a blank line)
+
+       * lisp/help-fns.el (describe-variable): Add a newline for better
+       readability (bug#46702).  This also has the side effect of
+       buttonizing `function-references-like-this' in the "Its value is"
+       part.
+
+       * lisp/help-mode.el (help-make-xrefs): Adjust comments.
+
+2021-02-22  Andrea Corallo  <akrl@sdf.org>
+
+       Revert "* configure.ac: Rename configure nativecomp flags..."
+
+       This reverts commit f6c5f0dd5c8167b6f8f724f42632a4b8808efe7a.
+
+       Reason for this is that I overlooked few other suggestions and this
+       change has to be discussed before a final decision is taken.
+
+2021-02-22  Andrea Corallo  <akrl@sdf.org>
+
+       Some clean-up in comp.el
+
+       * lisp/emacs-lisp/comp.el (comp-func): Remove 'array-h'.
+       (comp-spill-lap-function, comp-intern-func-in-ctxt)
+       (comp-spill-lap-function, comp-addr-to-bb-name): Update
+       accordingly.
+
+2021-02-22  Andrea Corallo  <akrl@sdf.org>
+
+       * configure.ac: Rename configure nativecomp flags into 
--with-native-comp.
+
+       Configure now with '--with-native-comp'!
+
+2021-02-22  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/antlr-mode.el: Remove XEmacs compatibility
+
+       (cond-emacs-xemacs, cond-emacs-xemacs-macfn, defunx, ignore-errors-x):
+       Remove those functions and macros.  Replace every use with the result
+       of their use.
+       (antlr-default-directory): Remove function, use the `default-directory`
+       variable instead.
+       (antlr-read-shell-command): Remove function, use
+       `read-shell-command` instead.
+       (antlr-with-displaying-help-buffer): Remove function, by inlining it at
+       its only call site.
+       (antlr-end-of-rule, antlr-beginning-of-rule, antlr-end-of-body)
+       (antlr-beginning-of-body): Mark them as movement commands.
+
+2021-02-22  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el: 'C-x t N' bound to tab-new-to supports a negative 
argument
+
+       * lisp/tab-bar.el (tab-bar-new-tab-to): Negative TO-INDEX counts
+       tabs from the end of the tab bar.
+       (tab-bar-new-tab): Fix docstring to add reference to
+       'tab-bar-new-tab-to'.
+       (tab-prefix-map): Bind "N" to tab-new-to.
+
+2021-02-22  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el: 'C-x t M' bound to tab-move-to supports a negative 
argument
+
+       * lisp/tab-bar.el (tab-bar-move-tab-to): Negative TO-INDEX counts
+       tabs from the end of the tab bar.
+       (tab-bar-move-tab): Fix docstring to add reference to 
tab-bar-move-tab-to.
+       (tab-prefix-map): Bind "M" to tab-move-to.
+
+2021-02-22  Juri Linkov  <juri@linkov.net>
+
+       'Mod-9' bound to 'tab-last' now switches to the last tab like in web 
browsers
+
+       * lisp/tab-bar.el (tab-bar--define-keys): Rebind 0 from
+       tab-bar-switch-to-recent-tab to its alias tab-recent.
+       Bind 9 to tab-last.
+       (tab-bar-switch-to-last-tab): New command.
+       (tab-last): New alias to tab-bar-switch-to-last-tab.
+       (tab-bar-switch-to-tab, tab-bar-undo-close-tab): Fix docstrings to
+       avoid mentioning the term "last" for "most recently used" meaning.
+
+2021-02-22  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el (tab-bar--undefine-keys): New function from 
tab-bar-mode.
+
+2021-02-22  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Prefer `declare` over a `put` of `list-indent-function`.
+
+       While at it, I enabled lexical-binding in the affected files.
+
+       * lisp/cedet/semantic/sb.el: Enable lexical-binding.
+       (semantic-sb-with-tag-buffer): Use `declare`.
+
+       * lisp/cedet/semantic/bovine/el.el: Enable lexical-binding.
+       (semantic-elisp-setup-form-parser): Use `declare`.
+
+       * lisp/emacs-lisp/ert.el:
+       * lisp/emacs-lisp/ert-x.el: Remove redundant `put`.
+
+       * lisp/emulation/cua-rect.el: Enable lexical-binding.
+       (cua--rectangle-operation, cua--rectangle-aux-replace): Use `declare`.
+
+       * lisp/mh-e/mh-acros.el: Enable lexical-binding.
+       (mh-do-in-gnu-emacs, mh-do-in-xemacs, mh-funcall-if-exists, defun-mh)
+       (defmacro-mh, with-mh-folder-updating, mh-in-show-buffer)
+       (mh-do-at-event-location, mh-iterate-on-messages-in-region)
+       (mh-iterate-on-range): Use `declare`.
+
+       * lisp/mh-e/mh-compat.el: Enable lexical-binding.
+       (mh-flet): Use `declare`.
+
+       * lisp/mh-e/mh-e.el: Enable lexical-binding.
+       (defgroup-mh, defcustom-mh, defface-mh): Use `declare`.
+
+       * lisp/net/sieve.el: Enable lexical-binding.  Remove redundant :group 
args.
+       (sieve-activate, sieve-remove, sieve-edit-script): Remove unused arg
+       from the interactive spec.
+       (sieve-deactivate-all): Remove unused var `name`.
+       (sieve-change-region): Use `declare`.
+
+       * lisp/obsolete/fast-lock.el: Enable lexical-binding.
+       Remove redundant :group args.  Remove XEmacs compat code.
+       (save-buffer-state): Remove macro.
+       (fast-lock-add-properties): Use `with-silent-modifications` instead.
+
+       * lisp/obsolete/lazy-lock.el: Enable lexical-binding.
+       Remove redundant :group args.
+       (do-while): Use `declare`.
+       (save-buffer-state): Remove macro.
+       (lazy-lock-fontify-rest-after-change, lazy-lock-defer-line-after-change)
+       (lazy-lock-defer-rest-after-change, lazy-lock-after-fontify-buffer)
+       (lazy-lock-after-unfontify-buffer, lazy-lock-fontify-region):
+       Use `with-silent-modifications` instead.
+
+       * lisp/obsolete/pgg.el: Enable lexical-binding.  Remove XEmacs compat 
code.
+       (pgg-save-coding-system, pgg-as-lbt, pgg-process-when-success):
+       Use `declare`.
+       (pgg-add-passphrase-to-cache): Remove unused var `new-timer`.
+       (pgg-decrypt-region): Remove unused var `buf`.
+
+       * lisp/org/org-agenda.el (org-let, org-let2): Move from org-macs and
+       use `declare`.
+
+       * lisp/org/org-macs.el (org-let, org-let2): Move these functions that
+       are inherently harmful to your karma to the only package that uses them.
+       (org-scroll): Use `pcase` to avoid `eval` and use more readable syntax
+       for those integers standing for events.
+
+       * lisp/progmodes/antlr-mode.el: Enable lexical-binding.
+       (save-buffer-state-x): Use `declare` and `with-silent-modifications`.
+
+       * lisp/international/mule-util.el (with-coding-priority):
+       * lisp/cedet/ede/proj-comp.el (proj-comp-insert-variable-once):
+       * lisp/org/org-element.el (org-element-map):
+       * test/lisp/emacs-lisp/bytecomp-tests.el 
(test-byte-comp-compile-and-load):
+       * test/lisp/emacs-lisp/generator-tests.el (cps-testcase): Use `declare`.
+
+2021-02-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix ANSI coloring problem in large outputs in eshell
+
+       * lisp/ansi-color.el (ansi-color-apply-on-region): Ensure that we
+       fontize from where we left off, and don't skip to the end of the
+       region (bug#46332).
+
+2021-02-22  Julian Scheid  <julians37@gmail.com>
+
+       cl-extra: Fix docstring retrieval
+
+       * lisp/emacs-lisp/cl-extra.el (cl--describe-class-slots): Fix
+       docstring retrieval (bug#46662).
+
+2021-02-22  Robert Pluim  <rpluim@gmail.com>
+
+       Skip tests that require Internet when there's no Internet
+
+       Bug#46641
+
+       The network-stream-tests actually work fine when the local machine has
+       no IP at all, but cause a crash in the GnuTLS library when there is an
+       IP configured but the interface is down.
+
+       * test/lisp/net/network-stream-tests.el (internet-is-working): New
+       defvar, checks if we can resolve "google.com".
+       (connect-to-tls-ipv4-nowait, connect-to-tls-ipv6-nowait)
+       (open-network-stream-tls-nowait, open-gnutls-stream-new-api-nowait)
+       (open-gnutls-stream-old-api-nowait): Use it to check for working
+       Internet access.
+
+       * test/src/process-tests.el (internet-is-working): New defvar, checks
+       if we can resolve "google.com".
+       (lookup-family-specification, lookup-unicode-domains)
+       (unibyte-domain-name, lookup-google, non-existent-lookup-failure): Use
+       it to check for working Internet access.
+
+2021-02-22  Robert Pluim  <rpluim@gmail.com>
+
+       Fix hang when running dns-query with no working internet
+
+       * lisp/net/dns.el (dns-set-servers): reduce the timeout and retry
+       count when using 'nslookup' for "localhost".
+       (dns-query): Check to see if we actually managed to initiate a dns
+       request before starting a busy-wait for the result.
+
+2021-02-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Simplify comint-watch-for-password-prompt
+
+       * lisp/comint.el (comint-watch-for-password-prompt): Simplify by
+       using `string-trim'.
+
+2021-02-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix prompt for the `M-S-x' command
+
+       * lisp/simple.el (read-extended-command): Further kludge the
+       hard-coded "M-x" prompt for the new `M-S-x' command.
+
+2021-02-22  Andrea Corallo  <akrl@sdf.org>
+
+       Don't use paths to indicate filenames
+
+       * lisp/emacs-lisp/comp.el (native--compile-async)
+       (native-compile-async): Replace `paths' argname with `files'.
+
+2021-02-22  Andrea Corallo  <akrl@sdf.org>
+
+       Fix union constraint for mixed pos/neg constraints
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr-union-1-no-mem): Fix neg
+       type shadowing pos values.
+       * test/lisp/emacs-lisp/comp-cstr-tests.el
+       (comp-cstr-typespec-tests-alist): Add testcase.
+       * test/src/comp-tests.el (comp-tests-type-spec-tests): Fix testcase.
+
+2021-02-22  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer mailing lists to newsgroups in FAQ
+
+       * doc/misc/efaq.texi (Real meaning of copyleft)
+       (Guidelines for mailing list postings, Mailing list archives)
+       (Packages that do not come with Emacs): Prefer mailing lists to
+       newsgroups.  (Bug#46633)
+
+2021-02-22  Stefan Kangas  <stefan@marxist.se>
+
+       Improve wrong number of args error message in propertize
+
+       * src/editfns.c (Fpropertize): Improve error message.
+       (syms_of_editfns) <Qpropertize>: New DEFSYM.
+       * test/src/editfns-tests.el
+       (propertize/error-wrong-number-of-args): New test.
+
+2021-02-22  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix compilation of closures with nontrivial doc strings
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-make-closure):
+       Use the supplied doc string if it's a literal; fall back to the old
+       slow way of building a closure otherwise.
+
+2021-02-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix up previous conf-mode.el and nroff-mode.el change slightly
+
+       * lisp/textmodes/conf-mode.el (conf-mode-map): Remove variable now
+       unused.
+
+       * lisp/textmodes/nroff-mode.el (nroff-mode-map): Remove variable
+       now unused.
+
+2021-02-22  Glenn Morris  <rgm@gnu.org>
+
+       * test/misc/test-custom-libs.el (test-custom-libs): Skip on hydra.
+
+       * test/misc/test-custom-noloads.el (custom-test-load): Unstable.
+
+2021-02-22  Stefan Kangas  <stefan@marxist.se>
+
+       Convert some textmodes menus to easy-menu-define
+
+       * lisp/textmodes/artist.el (artist-menu-map): Convert menu definition
+       to easy-menu-define.
+
+       * lisp/textmodes/conf-mode.el (conf-mode-map):
+       * lisp/textmodes/nroff-mode.el (nroff-mode-map): Move menu
+       definition from here...
+       * lisp/textmodes/conf-mode.el (conf-mode-menu):
+       * lisp/textmodes/nroff-mode.el (nroff-mode-menu): ...to here, and
+       convert to use easy-menu-define.
+
+2021-02-21  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (comp-spill-lap): Fix doc string.
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2021-02-21  Mattias Engdegård  <mattiase@acm.org>
+
+       Faster, more compact, and readable closure creation
+
+       Simplify closure creation by calling a single function at run time
+       instead of putting it together from small pieces.  This is faster
+       (by about a factor 2), takes less space on disk and in memory, and
+       makes internal functions somewhat readable in disassembly listings 
again.
+
+       This is done by creating a prototype function at compile-time whose
+       closure variables are placeholder values V0, V1... which can be seen
+       in the disassembly.  The prototype is then cloned at run time using
+       the new make-closure function that replaces the placeholders with
+       the actual closure variables.
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-make-closure):
+       Generate call to make-closure from a prototype function.
+       * src/alloc.c (Fmake_closure): New function.
+       (syms_of_alloc): Defsubr it.
+       * src/data.c (syms_of_data): Defsym byte-code-function-p.
+
+2021-02-21  Stefan Kangas  <stefan@marxist.se>
+
+       Run admin/cus-tests.el tests from test suite
+
+       * test/Makefile.in (SUBDIRS): Run tests in new directory "misc",
+       intended for tests not belonging to any one file.
+       * test/misc/test-custom-deps.el:
+       * test/misc/test-custom-libs.el:
+       * test/misc/test-custom-noloads.el:
+       * test/misc/test-custom-opts.el: New files.
+       * test/lisp/custom-tests.el (custom--test-local-option): Move test to
+       above new file test-custom-opts.el.
+
+       * admin/cus-test.el: Document running tests from regular test suite.
+       * test/file-organization.org (Test Files): Document new test directory
+       "misc" for tests not belonging to any one file.
+
+2021-02-21  Stefan Kangas  <stefan@marxist.se>
+
+       Fix interactive mode tagging for man and woman
+
+       * lisp/man.el (man-common): New mode inheriting special-mode.
+       (Man-mode):
+       * lisp/woman.el (woman-mode): Inherit from man-common.
+
+       * lisp/man.el (man-follow, Man-update-manpage)
+       (Man-fontify-manpage, Man-cleanup-manpage, Man-next-section)
+       (Man-previous-section, Man-goto-section)
+       (Man-goto-see-also-section, Man-follow-manual-reference)
+       (Man-kill, Man-goto-page, Man-next-manpage)
+       (Man-previous-manpage): Change interactive mode tag to man-common.
+
+       This was discussed in:
+       https://lists.gnu.org/r/emacs-devel/2021-02/msg01619.html
+
+2021-02-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Declare that `ignore' and `undefined' shouldn't be completed over
+
+       * lisp/subr.el (ignore, undefined): Declare that these shouldn't
+       be completed over.
+
+2021-02-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Use `undefined' instead of `ignore' in wdired
+
+       * lisp/wdired.el (wdired-mode-map): Use `undefined' here instead
+       of `ignore' to give the user more feedback.
+
+2021-02-21  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Fix json.el encoding of confusable object keys
+
+       * lisp/json.el (json-encode-string): Clarify commentary.
+       (json--encode-stringlike): New function that covers a subset of
+       json-encode.
+       (json-encode-key): Use it for more efficient encoding and
+       validation, and to avoid mishandling confusable keys like boolean
+       symbols (bug#42545).
+       (json-encode-array): Make it clearer that argument can be a list.
+       (json-encode): Reuse json-encode-keyword and json--encode-stringlike
+       for a subset of the dispatch logic.
+       (json-pretty-print): Ensure confusable keys like ":a" survive a
+       decoding/encoding roundtrip (bug#24252, bug#45032).
+
+       * test/lisp/json-tests.el (test-json-encode-string)
+       (test-json-encode-hash-table, test-json-encode-alist)
+       (test-json-encode-plist, test-json-pretty-print-object): Test
+       encoding of confusable keys.
+
+2021-02-21  Stefan Kangas  <stefan@marxist.se>
+
+       Make unused variable menu-bar-handwrite-map obsolete
+
+       * lisp/play/handwrite.el (menu-bar-handwrite-map): Make unused
+       variable obsolete.
+
+2021-02-21  Stefan Kangas  <stefan@marxist.se>
+
+       Convert bubbles menu to easy-menu-define
+
+       * lisp/play/bubbles.el (bubbles-game-theme-menu)
+       (bubbles-graphics-theme-menu, bubbles-menu, bubbles-mode-map):
+       Move menu definition from here...
+       (bubbles-menu): ...to here, and convert to easy-menu-define.
+
+2021-02-21  Stefan Kangas  <stefan@marxist.se>
+
+       * etc/NEWS.19: Add entry for 'easy-menu-define'.
+
+2021-02-21  Stefan Kangas  <stefan@marxist.se>
+
+       Convert some progmodes menus to easy-menu-define
+
+       * lisp/progmodes/asm-mode.el (asm-mode-map):
+       * lisp/progmodes/grep.el (grep-mode-map):
+       * lisp/progmodes/m4-mode.el (m4-mode-map):
+       * lisp/progmodes/sh-script.el (sh-mode-map): Move menu definition from 
here...
+       * lisp/progmodes/asm-mode.el (asm-mode-menu):
+       * lisp/progmodes/grep.el (grep-menu-map):
+       * lisp/progmodes/m4-mode.el (m4-mode-menu):
+       * lisp/progmodes/sh-script.el (sh-mode-menu): ...to here, and rewrite
+       using easy-menu-define.
+
+2021-02-21  Michael Albinus  <michael.albinus@gmx.de>
+
+       Clarification of password handling in Tramp manual
+
+       * doc/misc/tramp.texi (Password handling): Describe, how to
+       suppress `auth-sources' for Tramp.
+       (Remote shell setup, Remote processes)
+       (Cleanup remote connections, Frequently Asked Questions):
+       Handle reference to Emacs manual.
+
+2021-02-20  Alan Third  <alan@idiocy.org>
+
+       Fix memory leak
+
+       * src/nsterm.m ([EmacsSurface dealloc]): Release will remove all
+       objects and free the memory.
+
+2021-02-20  Stefan Kangas  <stefan@marxist.se>
+
+       Convert makefile-mode menu to easy-menu-define
+
+       * lisp/progmodes/make-mode.el (makefile-mode-map): Move menu
+       definition from here...
+       (makefile-mode-menu): ...to here, and rewrite using easy-menu-define.
+
+2021-02-20  F. Jason Park  <jp@neverwas.me>
+
+       Mute noisy test fixture for socks.el
+
+       * test/lisp/net/socks-tests.el:
+       (socks-tests-perform-hello-world-http-request): Bind
+       'inhibit-message' non-nil when in batch mode.
+       (Bug#46342)
+
+2021-02-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Change command-completion-using-modes-p to defun
+
+       * lisp/simple.el (command-completion-using-modes-p): Change into a
+       defun for now because of a build problem.
+
+2021-02-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention `M-S-x' in the Emacs manual.
+
+       * doc/emacs/m-x.texi (M-x): Mention `M-S-x' in the Emacs manual.
+
+2021-02-20  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/help.el (help-for-help-internal): Doc fix; use imperative.
+
+2021-02-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a new command for mode-specific commands
+
+       * doc/lispref/commands.texi (Interactive Call): Document it.
+       * lisp/simple.el (command-completion-using-modes-p): Refactored
+       out into its own function for reuse...
+       (command-completion-default-include-p): ... from here.
+       (execute-extended-command-for-buffer): New command and keystroke
+       (`M-S-x').
+
+2021-02-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Change how (declare (modes store the data
+
+       * lisp/emacs-lisp/byte-run.el (byte-run--set-modes): Change from
+       being a predicate to storing the modes.  This allows using the
+       modes for positive command discovery, too.
+       * src/data.c (Fcommand_modes): Look at the `command-modes' symbol
+       property, too.
+
+2021-02-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add the `always' function
+
+       * doc/lispref/functions.texi (Calling Functions): Document it.
+       * lisp/subr.el (always): New function.
+
+       * lisp/emacs-lisp/byte-opt.el (side-effect-free-fns): Mark it as
+       side effect free.
+
+2021-02-20  F. Jason Park  <jp@neverwas.me>
+
+       Use raw bytes for SOCKS 4 IP addresses
+
+       * lisp/net/socks.el: (socks--open-network-stream, socks-send-command):
+       * test/lisp/net/socks-tests.el: (socks-tests-v4-basic): (Bug#46342).
+
+2021-02-20  F. Jason Park  <jp@neverwas.me>
+
+       Add more auth-related tests for socks.el
+
+       * test/lisp/net/socks-tests.el (auth-registration-and-suite-offer)
+       (filter-response-parsing-v4, filter-response-parsing-v5): Assert
+       auth-method selection wrangling and socks-filter parsing.
+       (v5-auth-user-pass, v5-auth-user-pass-blank, v5-auth-none): Show prep
+       and execution of the SOCKS connect command and proxying of an HTTP
+       request; simplify fake server.  (Bug#46342)
+
+2021-02-20  Stefan Kangas  <stefan@marxist.se>
+
+       Convert re-builder menu to easy-menu-define
+
+       * lisp/emacs-lisp/re-builder.el (reb-mode-map): Move menu
+       definition from here...
+       (reb-mode-menu): ...to here, and rewrite using easy-menu-define.
+
+2021-02-20  Stefan Kangas  <stefan@marxist.se>
+
+       Convert finder menu to easy-menu-define
+
+       * lisp/finder.el (finder-mode-map): Move menu definition from
+       here...
+       (finder-mode-menu): ...to here, and rewrite using
+       easy-menu-define.
+
+2021-02-20  Stefan Kangas  <stefan@marxist.se>
+
+       Add toolbar for help-mode
+
+       * lisp/help-mode.el (help-mode): Add toolbar.
+       (help-mode-tool-bar-map): New variable.
+       (help-mode-menu): Disable forward/backward items when stack is empty.
+
+       (help-bookmark-make-record, help-bookmark-jump): Minor doc fixes.
+
+2021-02-20  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/woman.el: Doc fix; remove redundant setup info.
+
+2021-02-19  Thomas Fitzsimmons  <fitzsim@fitzsim.org>
+
+       * lisp/url/url-http.el (url-http): Fix docstring typo.
+
+2021-02-19  Thomas Fitzsimmons  <fitzsim@fitzsim.org>
+
+       ntlm-tests: Remove missing dependency warnings
+
+       * test/lisp/net/ntlm-tests.el: Remove warnings about dependencies
+       not being present.
+
+2021-02-19  Thomas Fitzsimmons  <fitzsim@fitzsim.org>
+           Michael Albinus  <michael.albinus@gmx.de>
+
+       ntlm-tests: Skip tests if dependencies are too old
+
+       * test/lisp/net/ntlm-tests.el (ntlm-tests--dependencies-present):
+       Add version and functionality checks.
+
+2021-02-19  Andrea Corallo  <akrl@sdf.org>
+
+       Work around bug#46495 (GCC PR99126)
+
+       * src/comp.c (gcc_jit_context_add_command_line_option): Import for
+       dynamic load.
+       (Fcomp__compile_ctxt_to_file): Disable GCC "isolate-paths" on GCC
+       10.
+
+2021-02-19  Andrea Corallo  <akrl@sdf.org>
+
+       Remove unnecessary function 'emit_rvalue_from_unsigned_long_long'
+
+       * src/comp.c (emit_rvalue_from_unsigned_long_long): Remove
+       function.
+       (emit_rvalue_from_emacs_uint, emit_rvalue_from_lisp_word_tag)
+       (emit_rvalue_from_lisp_word): Make use of
+       'emit_rvalue_from_long_long'.
+
+2021-02-19  Andrea Corallo  <akrl@sdf.org>
+
+       Pacify GCC warning on non wide-int configurations
+
+       * src/comp.c (emit_rvalue_from_emacs_uint)
+       (emit_rvalue_from_lisp_word_tag): Pacify GCC warning.
+       (emit_rvalue_from_unsigned_long_long): Define it only when
+       necessary.
+
+2021-02-19  Alan Third  <alan@idiocy.org>
+
+       Fix frame contents scaling bug on macOS (bug#46155)
+
+       Discussion in bug#46406.
+
+       * src/nsterm.m ([EmacsView focusOnDrawingBuffer:]): Set the scale
+       factor for the backing layer.
+
+2021-02-19  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/bytecomp.el: Don't warn for repeated _ args
+
+       (byte-compile-check-lambda-list): Skip warnings of repeated arg for
+       those that are declared as unused anyway.
+
+2021-02-19  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * test/lisp/emacs-lisp/edebug-tests.el: Adjust to new 
`edebug-eval-defun`.
+
+       (edebug-tests-trivial-backquote): Adjust to the way `eval-defun`
+       outputs its result.
+       (edebug-tests-cl-macrolet): Adjust to the fact that now macro expansion
+       takes place during the `eval-defun` even when Edebugging.
+
+2021-02-19  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       8e8b46ef81 (origin/emacs-27) More accurate documentation of the "r" i...
+       dcb2015a5b Mention the GNU Kind Communications Guidelines in the FAQ
+       9882e63eea ; * CONTRIBUTE: Another wording change regarding tiny chan...
+       850f18ef23 Allow newlines in password prompts again in comint
+       c977370dd7 Avoid point movement when visiting image files
+       da64a257a4 ; * CONTRIBUTE: Yet another clarification of significant c...
+       d03f2a6ee9 Avoid assertion violation in callproc.c
+       dcc00bbb19 ; * CONTRIBUTE: Clarify the "15-lines" rule a bit more.
+
+2021-02-19  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       4712c75ab8 Clarify when activate-mark-hook is run
+       abedf3a865 Fix language-environment and font selection on MS-Windows
+       8b8708eadd Fix example in Sequence Functions node in the manual
+
+2021-02-19  Ulf Jasper  <ulf.jasper@web.de>
+
+       Enable newsticker--group-shift-feed-(up|down) to move groups as well
+
+       Fix broken newsticker--group-shift-group-(up-down).
+
+       * lisp/net/newst-treeview.el (newsticker-treeview-jump): Change prompt
+       string.
+       (newsticker--group-shift): Move the group when a group is currently
+       selected. Fix error when explicitly shifting a group. (Fixes first
+       issue in Bug#41376.)
+
+2021-02-19  Eli Zaretskii  <eliz@gnu.org>
+
+       More accurate documentation of the "r" interactive spec
+
+       * doc/lispref/commands.texi (Interactive Codes): Describe the
+       effect of 'mark-even-if-inactive'.
+
+2021-02-19  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix regexp mistakes
+
+       * lisp/progmodes/cperl-mode.el (cperl--package-regexp):
+       Avoid double repetition; cperl--ws-or-comment-regexp is already
+       repeated with 1+.
+       * test/lisp/textmodes/dns-mode-tests.el
+       (dns-mode-tests-dns-mode-soa-increment-serial): Escape literal '$'.
+       * test/lisp/emacs-lisp/rx-tests.el (rx-regexp): Modify test to not
+       trigger a linting warning while retaining its testing power.
+
+2021-02-19  Stefan Kangas  <stefan@marxist.se>
+
+       Mention the GNU Kind Communications Guidelines in the FAQ
+
+       * doc/misc/efaq.texi (Guidelines for newsgroup postings): Mention
+       the GNU Kind Communications Guidelines.
+
+2021-02-19  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/calculator.el: Minor doc fix.  Remove redundant :group args.
+
+2021-02-19  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix Tramp bug#46625
+
+       * test/lisp/net/tramp-tests.el (tramp-test33-environment-variables):
+       Adapt test.  (Bug#46625)
+
+2021-02-19  Stefan Kangas  <stefan@marxist.se>
+
+       Do interactive mode tagging for snake.el
+
+       Do interactive mode tagging for tetris.el
+
+       Do interactive mode tagging for man.el
+
+       Do interactive mode tagging for package.el
+
+2021-02-19  Thomas Fitzsimmons  <fitzsim@fitzsim.org>
+
+       Implement NTLM server for ntlm.el testing
+
+       * test/Makefile.in
+       (GNU_ELPA_DIRECTORY, elpa_dependencies, elpa_els, elpa_opts): New
+       variables.
+       (EMACSOPT, ert_opts): Add elpa_opts.
+       * test/README: Document GNU_ELPA_DIRECTORY make variable.
+       * test/lisp/net/ntlm-tests.el: Fix checkdoc-reported issues.
+       (ntlm-tests-message, ntlm-server-build-type-2, ntlm-server-hash)
+       (ntlm-server-check-authorization, ntlm-server-do-token)
+       (ntlm-server-filter, ntlm-server-handler, ntlm-server-start)
+       (ntlm-server-stop, ntlm-tests--url-retrieve-internal-around)
+       (ntlm-tests--authenticate)
+       (ntlm-tests--start-server-authenticate-stop-server): New
+       functions.
+       (ntlm-tests--username-oem, ntlm-tests--username-unicode)
+       (ntlm-tests--client-supports-unicode, ntlm-tests--challenge)
+       (ntlm-tests--result-buffer, ntlm-tests--successful-result): New
+       variables.
+       (ntlm-authentication)
+       (ntlm-authentication-old-compatibility-level): New tests.
+       * test/lisp/net/ntlm-resources/authinfo: New file.  (Bug#43566)
+
+2021-02-18  Andrea Corallo  <akrl@sdf.org>
+
+       * src/pdumper.c (dump_do_dump_relocation): Use emacs_fopen + 
ENCODE_FILE.
+
+       * src/emacs.c (syms_of_emacs): Add a FIXME for Windows native-comp.
+
+2021-02-18  Andrea Corallo  <akrl@sdf.org>
+
+       Add a bunch of assertions for fixnums coming from Lisp later used as int
+
+       * src/comp.c (emit_limple_insn, declare_lex_function)
+       (compile_function, Fcomp__compile_ctxt_to_file): Add some
+       assertion.
+
+2021-02-18  Andrea Corallo  <akrl@sdf.org>
+
+       Add assertion guarding against emitting a relocation array overflow
+
+       * src/comp.c (reloc_array_t): New type.
+       (comp_t, imm_reloc_t): Make use of 'reloc_array_t'.
+       (obj_to_reloc): Add an assertion not to overflow relocation
+       arrays.
+       (emit_lisp_obj_reloc_lval, emit_limple_insn)
+       (declare_imported_data_relocs): Make use of 'reloc_array_t'.
+
+2021-02-18  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/bindat.el: Tweak example in comment
+
+       Suggested by Kim Storm <storm@cua.dk>.
+
+2021-02-18  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix typos
+
+       * doc/lispref/display.texi (Size of Displayed Text):
+       * doc/lispref/windows.texi (Buffer Display Action Functions):
+       * etc/NEWS:
+       * etc/ORG-NEWS (Org-Attach has been refactored and extended):
+       * lisp/battery.el (display-battery-mode, battery--upower-subsribe):
+       * lisp/calendar/parse-time.el:
+       * lisp/dired-x.el:
+       * lisp/emacs-lisp/chart.el (chart-sequece, chart-bar-quickie):
+       * lisp/emacs-lisp/eldoc.el (eldoc-echo-area-use-multiline-p)
+       (eldoc-documentation-strategy):
+       * lisp/emacs-lisp/pcase.el (pcase--split-pred, pcase--u1):
+       * lisp/gnus/gnus-search.el (gnus-search-expandable-keys)
+       (gnus-search-parse-query, gnus-search-query-return-string)
+       (gnus-search-imap, gnus-search-imap-search-command)
+       (gnus-search-transform-expression):
+       * lisp/gnus/nnselect.el:
+       * lisp/isearch.el (isearch-lazy-count-format):
+       * lisp/mh-e/mh-show.el (mh-show-msg):
+       * lisp/net/dictionary-connection.el (dictionary-connection-open):
+       * lisp/net/dictionary.el (dictionary-default-popup-strategy)
+       (dictionary, dictionary-split-string, dictionary-do-select-dictionary)
+       (dictionary-display-dictionarys, dictionary-search)
+       (dictionary-tooltip-mode):
+       * lisp/net/eudcb-macos-contacts.el (eudc-macos-contacts-set-server):
+       * lisp/net/mailcap.el (mailcap-mime-data):
+       * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection):
+       * lisp/nxml/nxml-mode.el (nxml-mode):
+       * lisp/progmodes/cc-engine.el:
+       * lisp/progmodes/cperl-mode.el (cperl-mode)
+       (cperl-fontify-syntaxically):
+       * lisp/progmodes/flymake.el (flymake-diagnostic-functions):
+       * lisp/progmodes/verilog-mode.el (verilog--supressed-warnings)
+       (verilog-preprocess):
+       * lisp/simple.el (self-insert-uses-region-functions):
+       * lisp/textmodes/bibtex.el (bibtex-copy-summary-as-kill):
+       * lisp/textmodes/texnfo-upd.el (texinfo-insert-master-menu-list):
+       * src/dispnew.c:
+       * src/font.c (Ffont_get):
+       * src/indent.c (compute_motion):
+       * src/process.c (init_process_emacs):
+       * src/w32fns.c (deliver_wm_chars):
+       * test/lisp/jsonrpc-tests.el (deferred-action-complex-tests):
+       Fix typos in documentation, comments, and internal identifiers.
+
+2021-02-18  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/edebug.el (eval-defun): Simplify
+
+       (edebug-all-defs, edebug-all-forms): Don't autoload since the problem
+       it was working around has been fixed a while back.
+       (edebug--eval-defun): Rename from `edebug-eval-defun` and simplify by
+       making it an `:around` advice.
+       (edebug-install-read-eval-functions)
+       (edebug-uninstall-read-eval-functions): Adjust accordingly.
+       (edebug-eval-defun): Redefine as an obsolete wrapper.
+
+       * lisp/progmodes/elisp-mode.el (elisp--eval-defun):
+       Use `load-read-function` so it obeys `edebug-all-(defs|forms)`.
+       (elisp--eval-defun): Fix recent regression introduced with
+       `elisp--eval-defun-result`.
+
+2021-02-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Do interactive mode tagging for python.el navigation functions."
+
+       This reverts commit 546f552e7b2439b482c7d28222fb88761a9c876a.
+
+       This is a "core package", so can't use the new syntax.
+
+2021-02-18  Ryan Prior  <rprior@protonmail.com>  (tiny change)
+
+       Allow newlines in password prompts again in comint
+
+       * lisp/comint.el (comint-password-prompt-regexp): Match all
+       whitespace (including newline) at the end of the passphrase, not
+       just space and \t (bug#46609).
+       (comint-watch-for-password-prompt): Remove trailing newlines from
+       the prompt (bug#46609).
+
+2021-02-18  Doug Davis  <ddavis@ddavis.io>  (tiny change)
+
+       Do interactive mode tagging for python.el navigation functions.
+
+       * lisp/progmodes/python.el (navigation functions): Add python-mode to
+       `interactive' declarations for mode-specific commands (bug#46610).
+
+2021-02-18  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix rx `regexp` form with deprecated syntax
+
+       The argument of the rx `regexp` form is assumed to evaluate to a valid
+       regexp, but certain kinds of deprecated but still accepted usage were
+       not handled correctly, such as unescaped literal (special) characters:
+        (rx "a" (regexp "*")) => "a*" which is wrong.
+       Handle these cases; there is no extra trouble.
+
+       * lisp/emacs-lisp/rx.el (rx--translate-regexp): Force bracketing
+       of single special characters.
+       * test/lisp/emacs-lisp/rx-tests.el (rx-regexp): Add test case.
+
+2021-02-18  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Move 'project-try-ede' to the back of 'project-find-functions'
+
+       * lisp/cedet/ede.el (project-find-functions):
+       Move 'project-try-ede' further back, so that 'project-try-vc' has
+       priority (bug46202).
+
+2021-02-18  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Present C source files as absolute file names too when possible
+
+       * lisp/progmodes/elisp-mode.el (xref-location-group):
+       Present C source files as absolute file names too when possible
+       (bug#46514).
+
+2021-02-17  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Fix recent Command Modes changes in Elisp manual
+
+       * doc/lispref/commands.texi (Command Modes): Fix typos and grammar.
+       Cross-reference the 'declare' form node.
+
+2021-02-17  Matt Armstrong  <matt@rfc20.org>
+
+       doc/lispref/commands.texi (Command Modes): Fix typo.
+
+       * doc/lispref/commands.texi (Command Modes): Fix typo.
+
+2021-02-17  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into native-comp
+
+2021-02-17  Alan Mackenzie  <acm@muc.de>
+
+       Make goto-line-history buffer local only when so customized
+
+       * lisp/simple.el (goto-line-history-local): New customizable option.
+       (goto-line-history): Define this simply with defvar, not defvar-local.
+       (goto-line-read-args): Handle goto-line-history-local, and changes to 
it.
+
+       * doc/emacs/basic.texi (Moving Point): Add a paragraph about
+       goto-line-history-local.
+
+       * etc/NEWS: Add an item under "Editing Changes in Emacs 28.1".
+
+2021-02-17  Andrea Corallo  <akrl@sdf.org>
+
+       Fix inverted logic in constraint comparison (bug#46540)
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr->, comp-cstr->=)
+       (comp-cstr-<, comp-cstr-<=): Fix inverted logic.
+       * test/src/comp-tests.el (comp-tests-type-spec-tests): Add
+       three integer constrain tests.
+
+2021-02-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Adjust the edebug spec for `interactive'
+
+       * lisp/emacs-lisp/edebug.el: Adjust the edebug spec for
+       `interactive' for the new syntax.
+
+2021-02-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make unused `Buffer-menu-sort' alias obsolete
+
+       * lisp/buff-menu.el (Buffer-menu-sort): Make unused alias obsolete.
+       * test/lisp/progmodes/elisp-mode-tests.el
+       (find-defs-defalias-defun-el): Adjust test to use an alias that's
+       not obsolete.
+
+2021-02-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mark up commands in buff-menu.el for modes
+
+2021-02-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Explicate on how to tag commands with modes
+
+       * doc/lispref/commands.texi (Command Modes): New node.
+       (Using Interactive): Move the `modes' text to the new node.
+
+2021-02-17  Andrea Corallo  <akrl@sdf.org>
+
+       * src/comp.c (Fcomp__compile_ctxt_to_file): Clean-up unused variable.
+
+2021-02-17  Juri Linkov  <juri@linkov.net>
+
+       New transient mode 'repeat-mode' to allow shorter key sequences 
(bug#46515)
+
+       * doc/emacs/basic.texi (Repeating): Document repeat-mode.
+
+       * lisp/repeat.el (repeat-exit-key): New defcustom.
+       (repeat-mode): New global minor mode.
+       (repeat-post-hook): New function.
+
+       * lisp/bindings.el (undo-repeat-map): New variable.
+       (undo): Put 'repeat-map' property with
+       'undo-repeat-map'.
+       (next-error-repeat-map): New variable.
+       (next-error, previous-error): Put 'repeat-map' property with
+       'next-error-repeat-map'.
+
+       * lisp/window.el (other-window-repeat-map): New variable.
+       (other-window): Put 'repeat-map' property with
+       'other-window-repeat-map'.
+       (resize-window-repeat-map): New variable.
+       (enlarge-window, enlarge-window-horizontally)
+       (shrink-window-horizontally, shrink-window): Put 'repeat-map'
+       property with 'resize-window-repeat-map'.
+
+2021-02-17  Juri Linkov  <juri@linkov.net>
+
+       New command 'tab-duplicate' like in web browsers
+
+2021-02-17  Michael Albinus  <michael.albinus@gmx.de>
+
+       Further Tramp code cleanup
+
+       * doc/misc/tramp.texi (Predefined connection information):
+       Mention "about-args".
+
+       * lisp/net/tramp-cmds.el (tramp-version): Adapt docstring.
+
+       * lisp/net/tramp.el (tramp-handle-expand-file-name):
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-handle-expand-file-name):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-expand-file-name)
+       * lisp/net/tramp-smb.el (tramp-smb-handle-expand-file-name):
+       * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-expand-file-name):
+       Handle local "/..".
+
+       * lisp/net/tramp-rclone.el (tramp-methods) <rclone>:
+       Adapt `tramp-mount-args'.
+       (tramp-rclone-flush-directory-cache): Remove.
+       (tramp-rclone-do-copy-or-rename-file)
+       (tramp-rclone-handle-delete-directory)
+       (tramp-rclone-handle-delete-file)
+       (tramp-rclone-handle-make-directory): Don't use that function.
+       (tramp-rclone-maybe-open-connection): Fix use of `tramp-mount-args'.
+
+       * lisp/net/trampver.el (tramp-inside-emacs): New defun.
+       * lisp/net/tramp.el (tramp-handle-make-process):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-make-process)
+       (tramp-sh-handle-process-file, tramp-open-shell): Use it.
+       (tramp-get-env-with-u-option): Remove.
+
+       * test/lisp/net/tramp-tests.el (tramp-test05-expand-file-name-top):
+       New test.
+
+2021-02-17  Eli Zaretskii  <eliz@gnu.org>
+
+       Disable filtering of commands in M-x completion
+
+       This makes the default behavior like it was before:
+       M-x completion doesn't filter out any commands.  To
+       have commands filtered based on their relevance to the
+       current buffer's modes, customize the option
+       'read-extended-command-predicate' to call
+       'command-completion-default-include-p'.
+       * doc/lispref/commands.texi (Interactive Call):
+       * doc/emacs/m-x.texi (M-x): Update the description of
+       'read-extended-command-predicate' and improve wording.
+
+       * etc/NEWS: Update the entry about
+       'read-extended-command-predicate'.
+
+       * lisp/simple.el (read-extended-command-predicate): Change default
+       value to nil.  Update doc string.  Add :group.
+       (read-extended-command): Handle nil as meaning to apply
+       no-filtering.
+
+2021-02-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix recently introduced bug in `byte-compile-lambda'
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-lambda): Fix recently
+       introduced error when compiling non-lexical commands (bug#46589).
+
+2021-02-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify 'read-extended-command-predicate' in NEWS
+
+2021-02-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Change name for the completion-* predicates
+
+       * lisp/simple.el (command-completion-default-include-p)
+       (command-completion-with-modes-p, command-completion-button-p):
+       Rename from completion-*.
+       (read-extended-command-predicate): Adjust default predicate.
+
+       * lisp/emacs-lisp/byte-run.el (byte-run--set-modes): Adjust
+       predicate name.
+
+2021-02-17  Glenn Morris  <rgm@gnu.org>
+
+       * configure.ac: Replace obsolete AC_CHECK_HEADER usage.  (Bug#46578)
+
+       * configure.ac: Replace obsolete AC_TRY_LINK with AC_LINK_IFELSE.
+
+2021-02-17  Glenn Morris  <rgm@gnu.org>
+
+       Remove TIME_WITH_SYS_TIME, unused for a long time
+
+       * configure.ac (AC_HEADER_TIME): Remove.  (Bug#46578)
+
+2021-02-17  Harald Jörg  <haj@posteo.de>
+
+       cperl-mode: Improve detection of index entries for imenu
+
+       * lisp/progmodes/cperl-mode.el
+       (cperl-imenu-addback): Customization variable deleted.  This
+       variable has been declared obsolete in 1998.
+       (cperl--basic-identifier-regexp) and many other variables:
+       defining regular expressions for basic Perl constructs.
+       (cperl-imenu--create-perl-index): This function has been
+       completely rewritten, keeping only some parts of the output
+       formatting.  It now recognizes a lot more package and
+       subroutine declarations which came since Perl 5.14: Packages
+       with a version and/or a block attached, lexical subroutines,
+       declarations with a newline between the keyword "package" and
+       the package name, and several more.  This version also
+       correctly separates subroutine names from attributes, does no
+       longer support "unnamed" packages (which don't exist in Perl),
+       and doesn't fall for false positives like stuff that looks
+       like a declaration in a multiline string.
+       (cperl-tags-hier-init): Eliminate call to
+       `cperl-imenu-addback` (which actually was commented out in
+       1997)
+
+       * test/lisp/progmodes/cperl-mode-tests.el
+       (cperl-test--validate-regexp) and six other new tests for the
+       new regular expressions and the index creation.
+
+       * test/lisp/progmodes/cperl-mode-resources/grammar.pl: New
+       file showcasing different syntax variations for package and
+       sub declarations (bug#46574).
+
+2021-02-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't move point in `exif-parse-buffer'
+
+       * lisp/image/exif.el (exif-parse-buffer): Don't move point
+       (bug#46552).
+
+2021-02-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix edebug spec for minibuffer-with-setup-hook
+
+       * lisp/files.el (minibuffer-with-setup-hook): Instrument the
+       :append form for edebug (bug#46531).
+
+2021-02-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify Gnus Agent expiry quirks
+
+       * doc/misc/gnus.texi (Agent Expiry): Mention that the last article
+       won't be expired (bug#46533).
+
+2021-02-16  Andrea Corallo  <akrl@sdf.org>
+
+       Clean-up some signal related dead-code
+
+       * src/comp.c (restore_sigmask): Remove function.
+       (Fcomp__compile_ctxt_to_file): Remove some dead-code.
+
+2021-02-16  Andrea Corallo  <akrl@sdf.org>
+
+       * src/comp.c (check_comp_unit_relocs): Prefer ptrdiff_t to EMACS_INT.
+
+2021-02-16  Andrea Corallo  <akrl@sdf.org>
+
+       Better long range check
+
+       * src/comp.c (emit_rvalue_from_emacs_uint)
+       (emit_rvalue_from_emacs_int, emit_rvalue_from_lisp_word_tag)
+       (emit_rvalue_from_lisp_word): Better long range check.
+
+2021-02-16  Andrea Corallo  <akrl@sdf.org>
+
+       Sanitize frame slot access in final
+
+       * src/comp.c (comp_t): Add 'frame_size' field.
+       (emit_mvar_lval): Add sanity check on frame element access.
+       (compile_function): Initialize 'comp.frame_size' and
+       'comp.frame_size'.
+
+2021-02-16  Glenn Morris  <rgm@gnu.org>
+
+       thumbs.el: avoid creating thumbs directory on loading library
+
+       * lisp/thumbs.el (thumbs-cleanup-thumbsdir):
+       Don't create the thumbs directory if it does not exist.
+
+2021-02-16  Glenn Morris  <rgm@gnu.org>
+
+       * admin/cus-test.el (cus-test-load-libs): Quieten loading.
+
+       * admin/cus-test.el (cus-test-get-lisp-files): Ignore loaddefs files.
+
+2021-02-16  Bastian Beranek  <bastian.beischer@rwth-aachen.de>
+
+       * lisp/tab-bar.el: Fix behavior of toggle-frame-tab-bar (bug #46299)
+
+       (toggle-frame-tab-bar): Add frame parameter to protect tab bar state.
+       (tab-bar--update-tab-bar-lines): Check parameter.
+
+2021-02-16  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Pacify unused function warning in xfns.c with GTK2
+
+       * src/xfns.c (x_get_net_workarea, x_get_monitor_for_frame)
+       (x_make_monitor_attribute_list, x_get_monitor_attributes_fallback):
+       [HAVE_XINERAMA] (x_get_monitor_attributes_xinerama)
+       [HAVE_XRANDR] (x_get_monitor_attributes_xrandr)
+       (x_get_monitor_attributes): Fix #ifdefs around definitions to avoid
+       unused function warnings regardless of GTK use (bug#46509).
+       [HAVE_XRANDR] (x_get_monitor_attributes_xrandr): Undefine
+       RANDR13_LIBRARY after it's been used.
+
+2021-02-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Fix problem of point movement in image-mode"
+
+       This reverts commit 7c7377288a125ef47f2b422cf131f044a3b418e1.
+
+       This is fixed differently in Emacs 27.
+
+2021-02-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix problem of point movement in image-mode
+
+       * lisp/image-mode.el (image-mode): Switch disable-point-adjustment
+       on, otherwise `C-c C-c' will move point around oddly.
+       (image-toggle-display): Ensure that point is on the image (bug#46552).
+
+2021-02-16  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid point movement when visiting image files
+
+       * lisp/image-mode.el (image-toggle-display-image): Preserve point
+       around the call to exif-parse-buffer, to prevent it from moving
+       into the image data.  (Bug#46552)
+
+2021-02-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Do interactive mode tagging for info.el
+
+2021-02-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't resize images in image-mode if we have a rotation
+
+       * lisp/image-mode.el (image-fit-to-window): Don't resize of we
+       have a manually rotated imaged (and explain the resizing logic a
+       bit).
+
+2021-02-16  Konstantin Kharlamov  <Hi-Angel@yandex.ru>
+
+       make smerge-vc-next-conflict wrap around
+
+       * lisp/vc/smerge-mode.el:
+       (smerge-vc-next-conflict): While searching for conflict markers,
+       wrap search around if current file is the last one with conflicts
+       (bug#46538).
+
+2021-02-16  Stefan Kangas  <stefan@marxist.se>
+
+       Do `interactive' mode tagging in gomoku.el
+
+       * lisp/play/gomoku.el: Do `interactive' mode tagging.
+
+2021-02-16  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/play/gomoku.el: Minor doc fixes; formatting.
+
+2021-02-16  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/bindat.el: Add 64bit int support
+
+       (bindat--unpack-u64, bindat--unpack-u64r, bindat--pack-u64)
+       (bindat--pack-u64r): New functions.
+       (bindat--unpack-item, bindat--pack-item): Use them.
+       (bindat--fixed-length-alist): Add new types.
+
+2021-02-16  Stefan Kangas  <stefan@marxist.se>
+
+       Fix admin/check-doc-strings for new DEFUN format
+
+       * admin/check-doc-strings: Various fixes, including for the new DEFUN
+       format.  The script still produces a ton of false positives, however.
+
+2021-02-16  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/bindat.el: Clarify when field labels are optional
+
+       The fixes the doc and the Edebug spec, as well as a subtle issue in
+       the code where a field whose name is (eval 'fill) was mistakenly
+       considered as an anonymous field of type `fill`.
+
+       (bindat--unpack-item, bindat--unpack-group, bindat--length-group)
+       (bindat--pack-item, bindat--pack-group): Use dotimes, dolist, and pcase.
+       (bindat--item-aux): New edebug elem.
+       (bindat-item): Use it to fix the handling of optional fields.
+       (bindat-format-vector): Use `mapconcat`.
+
+2021-02-16  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/bindat.el (bindat-spec): New macro.
+
+       It's basically an alias for `quote`, but it offers the advantage of
+       providing Edebug support and opens the possibility of compiling
+       the bindat spec to ELisp code.
+
+       * doc/lispref/processes.texi (Bindat Spec): Document `bindat-spec`.
+       (Bindat Functions): Tweak a few things to adjust to the state of the 
code.
+
+       * test/lisp/emacs-lisp/bindat-tests.el: Use it.
+
+       * test/lisp/emacs-lisp/edebug-tests.el (edebug-tests--read): New 
function.
+       (edebug-tests--&rest-behavior): New test.
+
+2021-02-15  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/macroexp.el (macroexp--expand-all): Warn on empty let 
bodies
+
+2021-02-15  Ulf Jasper  <ulf.jasper@web.de>
+
+       Display yearly ical events from first year on.  Fix Bug#23100.
+
+       Convert yearly rrule starting in year x into diary-anniversary entry
+       for year x-1 when importing an icalendar.  Correspondingly convert
+       diary-anniversary for year x into yearly rrule starting in year x+1.
+
+       *
+       
test/lisp/calendar/icalendar-resources/import-rrule-anniversary.diary-american:
+       *
+       
test/lisp/calendar/icalendar-resources/import-rrule-anniversary.diary-european:
+       *
+       
test/lisp/calendar/icalendar-resources/import-rrule-anniversary.diary-iso:
+       *
+       
test/lisp/calendar/icalendar-resources/import-rrule-yearly.diary-american:
+       *
+       
test/lisp/calendar/icalendar-resources/import-rrule-yearly.diary-european:
+       *
+       test/lisp/calendar/icalendar-resources/import-rrule-yearly.diary-iso:
+       *
+       test/lisp/calendar/icalendar-tests.el 
(icalendar-convert-anniversary-to-ical):
+       Match new diary-anniversary/yearly-rrule behaviour.
+
+       * lisp/calendar/icalendar.el (icalendar--datestring-to-isodate): Add
+       year-shift option.  (icalendar--convert-anniversary-to-ical): Shift
+       the year as diary-anniversary is not displayed in the initial year.
+       (icalendar--convert-recurring-to-diary): Shift the year as
+       diary-anniversary is not displayed in the initial year. (Bug#23100)
+
+2021-02-15  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/calc/calc-sel.el (calc-replace-sub-formula): Fix typo
+
+       Reported by Sébastien Miquel <sebastien.miquel@posteo.eu>
+
+2021-02-15  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/bindat.el: Expose the `struct` variable (bug#46534)
+
+       (bindat--unpack-group, bindat--length-group, bindat--pack-group):
+       Mark it as dynamically scoped.
+
+2021-02-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow overriding declared predicates, too
+
+       * lisp/simple.el (completion-default-include-p): Rename and move
+       the checking for an explicit predicate down here...
+       (read-extended-command): ... from here.
+       (read-extended-command-predicate): Adjust default value.
+
+2021-02-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Do `interactive' mode tagging in the remaining lisp/gnus files
+
+2021-02-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a new variable `global-minor-modes'
+
+       * doc/lispref/modes.texi (Minor Modes): Document it.
+       * lisp/simple.el (global-minor-modes): New variable.
+       (completion-in-mode-p): Use it.
+       (completion-with-modes-p): Use it.
+
+       * lisp/emacs-lisp/easy-mmode.el (define-minor-mode): Support it.
+
+2021-02-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Rename minor-modes to local-minor-modes
+
+       * doc/lispref/modes.texi (Minor Modes): Update documentation.
+       * lisp/simple.el (completion-with-modes-p): Change usage.
+
+       * lisp/emacs-lisp/easy-mmode.el (define-minor-mode): Change usage.
+
+       * src/buffer.c: Rename from minor_modes to local_minor_modes
+       throughout.
+       (syms_of_buffer): Rename minor-modes to local-minor-modes.
+
+       * src/buffer.h (struct buffer): Rename minor_modes_.
+
+       * src/pdumper.c (dump_buffer): Update hash and usage.
+
+2021-02-15  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/edebug.el (edebug-&optional, edebug-&rest): Remove 
vars
+
+       According to my tests, `edebug-&optional` never has any effect.
+       And `edebug-&rest` can be replaced with a closure.
+
+       (edebug-&rest-wrapper): Remove function.
+       (edebug--match-&-spec-op): Use a closure to remember the `specs`.
+
+2021-02-15  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/byte-run.el (compiler-macro): Make it Edebuggable
+
+       * lisp/emacs-lisp/gv.el (gc-expander, gv-setter): Reuse the spec of
+       `compiler-macro`.
+
+2021-02-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make the button completion predicate be more useful
+
+       * lisp/simple.el (completion-button-p): Rework from
+       `completion-at-point-p'.
+
+       * lisp/net/shr.el (shr-show-alt-text): It should be possible to
+       complete to commands that aren't bound to a key.
+
+2021-02-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Speed up completion-in-mode-p in the common case
+
+       * lisp/simple.el (completion-in-mode-p): Make predicate more
+       efficient in the common one-mode case.
+
+2021-02-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix two syntax errors in Specification List
+
+       * doc/lispref/edebug.texi (Specification List): Add a couple of
+       missing @s.
+
+2021-02-15  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Edebug: Generalize `&lookup`, use it for `cl-macrolet` and `cl-generic`
+
+       This allows the use of (declare (debug ...)) in the lexical macros
+       defined with `cl-macrolet`.  It also fixes the names used by Edebug
+       for the methods of `cl-generic` so it doesn't need to use gensym
+       and so they don't include the formal arg names any more.
+
+       * lisp/emacs-lisp/edebug.el (edebug--match-&-spec-op):
+       Rename from `edebug--handle-&-spec-op`.
+       (edebug--match-&-spec-op <&interpose>): Rename from `&lookup` and
+       generalize so it can let-bind dynamic variables around the rest of the 
parse.
+       (edebug-lexical-macro-ctx): Rename from `edebug--cl-macrolet-defs` and
+       make it into an alist.
+       (edebug-list-form-args): Use the specs from `edebug-lexical-macro-ctx`
+       when available.
+       (edebug--current-cl-macrolet-defs): Delete var.
+       (edebug-match-cl-macrolet-expr, edebug-match-cl-macrolet-name)
+       (edebug-match-cl-macrolet-body): Delete functions.
+       (def-declarations): Use new `&interpose`.
+       (edebug--match-declare-arg): Rename from `edebug--get-declare-spec` and
+       adjust to new calling convention.
+
+       * lisp/subr.el (def-edebug-elem-spec): Fix docstring.
+       (eval-after-load): Use `declare`.
+
+       * lisp/emacs-lisp/cl-generic.el: Fix Edebug names so we don't need
+       gensym any more and we only include the specializers but not the formal
+       arg names.
+       (cl--generic-edebug-name): New var.
+       (cl--generic-edebug-remember-name, cl--generic-edebug-make-name): New 
funs.
+       (cl-defgeneric, cl-defmethod): Use them.
+
+       * lisp/emacs-lisp/cl-macs.el: Add support for `debug` declarations in
+       `cl-macrolet`.
+       (cl-declarations-or-string):
+       Fix use of `lambda-doc` and allow use of `declare`.
+       (edebug-lexical-macro-ctx): Declare var.
+       (cl--edebug-macrolet-interposer): New function.
+       (cl-macrolet): Use it to pass the right `lexical-macro-ctx` to the body.
+
+       * lisp/emacs-lisp/pcase.el (pcase-PAT): Use new `&interpose`.
+       (pcase--edebug-match-pat-args): Rename from `pcase--get-edebug-spec` and
+       adjust to new calling convention.
+
+       * test/lisp/emacs-lisp/cl-generic-tests.el 
(cl-defgeneric/edebug/method):
+       Adjust to the new names.
+
+       * test/lisp/emacs-lisp/edebug-tests.el (edebug-cl-defmethod-qualifier)
+       (edebug-tests-cl-flet): Adjust to the new names.
+
+       * doc/lispref/edebug.texi (Specification List): Document &interpose.
+
+2021-02-15  Stefan Kangas  <stefan@marxist.se>
+
+       Avoid asking repeatedly about reloading bookmarks file
+
+       * lisp/bookmark.el (bookmark-maybe-load-default-file): Reload watched
+       bookmarks file only if its mtime has changed since the last query.
+       This avoids asking repeatedly about reloading the bookmarks file if
+       the user has already said "no" to a previous query.
+       (bookmark--watch-file-already-queried-p): New function.
+       (bookmark--watch-already-asked-mtime): New variable.
+
+2021-02-14  Stefan Kangas  <stefan@marxist.se>
+
+       Mark up bookmark.el for correct modes
+
+       * lisp/bookmark.el: Mark up all commands with applicable modes.
+
+2021-02-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a comment to `read-extended-command'
+
+       * lisp/simple.el (read-extended-command): Add a comment.
+
+2021-02-14  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/startup.el (normal-top-level): Use `path-separator' in place of 
":".
+
+2021-02-14  Eli Zaretskii  <eliz@gnu.org>
+
+       * src/xdisp.c (move_it_to): Fix last change.  (Bug#46316)
+
+2021-02-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a possible completion predicate for buttons
+
+       * lisp/simple.el (completion-at-point-p): New predicate.
+
+       * lisp/net/shr.el (shr-show-alt-text): Mark up as a button.
+
+2021-02-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make completion-with-modes-p work with minor modes, too
+
+       * lisp/simple.el (completion-with-modes-p): Work with minor modes,
+       too.
+
+2021-02-14  Andrea Corallo  <akrl@sdf.org>
+
+       Revert "* src/comp.c (define_jmp_buf): Use 'jmp_buf' instead of 
'sys_jmp_buf'."
+
+       This reverts commit bebec46bcbf0e52460b08234c067d7a2cb0f2246.
+
+       Looking at the git history I realize now the use of 'sys_jmp_buf' was
+       intentional.
+
+2021-02-14  Andrea Corallo  <akrl@sdf.org>
+
+       * src/comp.c (define_jmp_buf): Use 'jmp_buf' instead of 'sys_jmp_buf'.
+
+       * src/comp.c (load_comp_unit): Fix 'data_ephemeral_vec' shadowing decl.
+
+2021-02-14  Bastian Beranek  <bastian.beischer@rwth-aachen.de>
+
+       Fix showing and hiding of tab-bar on new frames (bug#46299)
+
+       * lisp/tab-bar.el (tab-bar--update-tab-bar-lines)
+       (tab-bar--tab-bar-lines-for-frame):
+       New functions to update value of tab-bar-lines in frames.
+       (tab-bar-mode, tab-bar-new-tab-to, tab-bar-close-tab)
+       (tab-bar-close-other-tab, tab-bar-show :set):
+       Use new function.
+       (tab-bar-select-tab-modifiers :set):
+       Work around visual glitch.
+
+2021-02-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Do command markup in blackbox.el
+
+2021-02-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix byte-run--set-modes call signature
+
+       * lisp/emacs-lisp/byte-run.el (byte-run--set-modes): We take a
+       list of modes, not a single one (and fix the quoting).
+
+2021-02-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix missing ' in NEWS
+
+2021-02-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Also mention `M-o M-o' removal
+
+       * lisp/loadup.el (facemenu-keymap-restore): Also restore `M-o M-o'.
+
+2021-02-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't update `minor-modes' in global modes
+
+       * lisp/emacs-lisp/easy-mmode.el (define-minor-mode): There's no
+       point in setting the buffer-local `minor-modes' in global modes.
+
+2021-02-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mark up 5x5 for interactive mode
+
+2021-02-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix problem with the newly introduces `minor-modes' variable
+
+       * lisp/help-fns.el (describe-mode): Apparently buffer-local
+       variables take precedence over lexically bound variables?
+
+2021-02-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Do `interactive' mode markup in all Gnus files
+
+2021-02-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Really fix the syntax problem in define-minor-mode
+
+       * lisp/emacs-lisp/easy-mmode.el (define-minor-mode): Fix
+       interactive extension in previous change.
+
+2021-02-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix previous define-minor-mode change
+
+       * lisp/emacs-lisp/easy-mmode.el (define-minor-mode): Fix
+       interactive extension in previous change.
+
+2021-02-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mark up eww.el for correct modes
+
+       * lisp/net/eww.el: Mark up all commands with applicable modes.
+
+2021-02-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make `C-h m' list unbound commands applicable for the mode
+
+       * lisp/help-fns.el (help-fns--list-local-commands): New function.
+       (describe-mode): Use it.
+
+2021-02-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow define-minor-mode to take an :interactive keyword
+
+       * lisp/emacs-lisp/easy-mmode.el (define-minor-mode): Allow
+       specifying the :interactive state and the modes.
+
+2021-02-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix dumping of buffers after minor_modes was added
+
+       * src/pdumper.c (dump_buffer): Set minor_modes to nil before dumping.
+
+2021-02-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert the bit about command_modes in previous patch set
+
+       * src/data.c (Fcommand_modes): Remove the subr bit -- it's not
+       necessary since it can just use a predicate.
+       * src/lisp.h (GCALIGNED_STRUCT): Remove command_modes.
+
+       * src/lread.c (defsubr): Remove command_modes.
+
+2021-02-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add 'read-extended-command-predicate'
+
+       * doc/emacs/m-x.texi (M-x): Document it.
+       * doc/lispref/commands.texi (Interactive Call): Document it further.
+
+       * lisp/simple.el (read-extended-command-predicate): New user option.
+       (read-extended-command-predicate): Use it.
+       (completion-in-mode-p): New function (the default predicate).
+
+2021-02-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mark easy-menu-do-define menus as "not interesting"
+
+       * lisp/emacs-lisp/easymenu.el (easy-menu-do-define): Mark menu
+       keymaps as "not interesting" when doing completion.
+
+2021-02-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add new 'declare' forms for command completion predicates
+
+       * doc/lispref/functions.texi (Declare Form): Document the new
+       `completion' and `modes' declarations.
+       * lisp/simple.el (completion-with-modes-p): New helper functions.
+
+       * lisp/emacs-lisp/byte-run.el (byte-run--set-completion)
+       (byte-run--set-modes):
+       (defun-declarations-alist): New declarations for `completion' and
+       `modes'.
+
+2021-02-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Extend the syntax of `interactive' to list applicable modes
+
+       * doc/lispref/commands.texi (Using Interactive): Document the
+       extended `interactive' form.
+       * doc/lispref/loading.texi (Autoload): Document list-of-modes
+       form.
+
+       * lisp/emacs-lisp/autoload.el (make-autoload): Pick the list of
+       modes from `interactive' out of the functions.
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-lambda): Allow for the
+       extended `interactive' form.
+
+       * src/callint.c (Finteractive): Document the extended form.
+
+       * src/data.c (Finteractive_form): Return the interactive form in
+       the old format (even when there's an extended `interactive') to
+       avoid having other parts of Emacs be aware of this.
+       (Fcommand_modes): New defun.
+
+       * src/emacs-module.c (GCALIGNED_STRUCT): Allow for modules to
+       return command modes.
+
+       * src/lisp.h: New function module_function_command_modes.
+
+2021-02-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix how `shell-mode' avoids being called interactively
+
+       * lisp/shell.el (shell-mode): Make noninteractive instead of
+       erroring out after being called.
+
+2021-02-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Introduce an :interactive keyword for `defined-derived-mode'
+
+       * doc/lispref/modes.texi (Derived Modes): Document it.
+       * lisp/emacs-lisp/derived.el (define-derived-mode): Introduce a
+       new :interactive keyword.
+
+2021-02-14  Stefan Kangas  <stefan@marxist.se>
+
+       Remove redundant :group args from textmodes/*.el
+
+       * lisp/textmodes/enriched.el:
+       * lisp/textmodes/ispell.el:
+       * lisp/textmodes/makeinfo.el:
+       * lisp/textmodes/paragraphs.el:
+       * lisp/textmodes/picture.el:
+       * lisp/textmodes/refbib.el:
+       * lisp/textmodes/refer.el:
+       * lisp/textmodes/remember.el:
+       * lisp/textmodes/texinfo.el:
+       * lisp/textmodes/tildify.el:
+       * lisp/textmodes/two-column.el: Remove redundant :group args.
+
+2021-02-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a new buffer-local variable `minor-modes'
+
+       * lisp/emacs-lisp/easy-mmode.el (define-minor-mode): Keep
+       `minor-modes' updated.
+       * src/buffer.c (bset_minor_modes, Fmake_indirect_buffer)
+       (reset_buffer, init_buffer_once): Initialise `minor-modes'.
+       (syms_of_buffer): Add `minor-modes' as a new permanently-local
+       variable.
+
+       * src/buffer.h (struct buffer): Add minor_modes_.
+
+2021-02-14  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/edebug.el (edebug-make-enter-wrapper): Reinstate.
+
+       Removed by accident.
+
+2021-02-14  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/edebug.el: Fix `called-interactively-p`
+
+       And get rid of the old special-case handling of `interactive-p`, which
+       is now redundant.
+
+       (edebug--called-interactively-skip): Fix lexical-binding case,
+       and adjust to some formerly missed call patterns.
+       (edebug-def-interactive, edebug-interactive-p): Remove vars.
+       (edebug-interactive-p-name, edebug-wrap-def-body)
+       (edebug-make-enter-wrapper): Remove functions.
+       (edebug-list-form): Don't special-case `interactive-p`.
+
+2021-02-13  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/edebug.el (edebug-match-lambda-expr): Delete function
+
+       (lambda-expr): Define with `def-edebug-elem-spec` instead.
+       (edebug--handle-&-spec-op): Remove left over code.
+       (interactive): Re-add mistakenly removed spec elem.
+
+       * doc/lispref/edebug.texi (Specification List): Remove `function-form`.
+
+2021-02-13  Alan Third  <alan@idiocy.org>
+
+       Fix flicker when resizing NS frame programmatically (bug#46155)
+
+
+       * src/nsterm.m ([EmacsView viewWillDraw]): New function.
+       ([EmacsView viewDidResize:]): We now have to mark the frame for
+       display on resize.
+       ([EmacsView initFrameFromEmacs:]): Retain frame contents on resize.
+       ([EmacsView updateLayer]): Don't update the layer if the frame is
+       still garbaged.
+
+2021-02-13  Alan Third  <alan@idiocy.org>
+
+       Remove aliasing on SVG images under scaled NS frames
+
+       * src/image.c (FRAME_SCALE_FACTOR): New #define for getting frame
+       scale factor.
+       (image_set_transform):
+       (svg_load_image): Use FRAME_SCALE_FACTOR.
+       * src/nsterm.m (ns_frame_scale_factor): Get the scale factor for an NS
+       frame.
+
+2021-02-13  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/edebug.el (edebug--handle-&-spec-op <&name>): New 
method
+
+       (edebug--concat-name): New function.
+       (edebug-match-name, edebug-match-cl-generic-method-qualifier)
+       (edebug-match-cl-generic-method-args): Delete functions.
+
+       * doc/lispref/edebug.texi (Specification List): Document it.
+
+       * lisp/emacs-lisp/cl-generic.el (cl-defgeneric): Use `&name`.
+       (cl-generic--method-qualifier-p): New predicate.
+       (cl-defmethod): Use it and `&name`.
+       * lisp/emacs-lisp/cl-macs.el (cl-defun, cl-iter-defun, cl-flet):
+       * lisp/emacs-lisp/eieio-compat.el (defmethod):
+       * lisp/emacs-lisp/gv.el (gv-define-setter):
+       * lisp/emacs-lisp/ert.el (ert-deftest): Use `&name`.
+       * lisp/erc/erc-backend.el (define-erc-response-handler): Use `declare`
+       and `&name`.
+
+2021-02-13  Philipp Stephani  <phst@google.com>
+
+       * etc/NEWS: Document new JSON behavior.
+
+2021-02-13  Augusto Stoffel  <arstoffel@gmail.com>  (tiny change)
+
+       Small correction to `isearch-lazy-highlight-buffer-update'
+
+       The value of point is now read after a potential change of buffer.
+       * lisp/isearch.el (isearch-lazy-highlight-buffer-update): Move call
+       to `point' after `select-window'.
+
+2021-02-13  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       (backtrace-goto-source-functions): Make it a normal abnormal hook
+
+       * lisp/emacs-lisp/backtrace.el (backtrace-goto-source-functions):
+       Don't mark it as buffer-local any more.
+       (backtrace-goto-source): Use `run-hook-with-args-until-success`.
+
+       * lisp/emacs-lisp/edebug.el (edebug-pop-to-backtrace): Clarify that the
+       hook is only intended to be modified buffer-locally.
+
+2021-02-13  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix I-search at EOB when long lines are truncated
+
+       * src/xdisp.c (move_it_to): Fix logic when TO_CHARPOS is at the
+       end of an hscrolled line which ends at EOB.  (Bug#46316)
+
+2021-02-13  Philipp Stephani  <phst@google.com>
+
+       Pass 'struct json_configuration' as const where possible.
+
+       The JSON serialization and parsing functions don't need to modify
+       these structures.
+
+       * src/json.c (lisp_to_json_nonscalar_1, lisp_to_json_nonscalar)
+       (lisp_to_json, json_to_lisp): Mark configuration object parameter as
+       const.
+
+2021-02-13  Philipp Stephani  <phst@google.com>
+
+       Allow any JSON value at the top level (Bug#42994).
+
+       Newer standards like RFC 8259, which obsoletes the earlier RFC 4627,
+       now allow any top-level value unconditionally, so Emacs should too.
+
+       * src/json.c (Fjson_serialize, Fjson_insert): Pass JSON_ENCODE_ANY to
+       allow serialization of any JSON value.  Call 'lisp_to_json' instead of
+       'lisp_to_json_toplevel'.  Remove obsolete comments
+       (neither JSON_DECODE_ANY nor JSON_ALLOW_NUL are allowed here).  Reword
+       documentation strings.
+       (Fjson_parse_string, Fjson_parse_buffer): Pass JSON_DECODE_ANY to
+       allow deserialization of any JSON value.  Reword documentation
+       strings.
+       (lisp_to_json_nonscalar, lisp_to_json_nonscalar_1): Rename from
+       "toplevel" to avoid confusion.
+       (lisp_to_json): Adapt caller.
+       * test/src/json-tests.el (json-serialize/roundtrip-scalars): New unit
+       test.
+       * doc/lispref/text.texi (Parsing JSON): Update documentation.
+
+2021-02-13  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Remove stale comments from gnus-msg.el
+
+       * lisp/gnus/gnus-msg.el (gnus-group-mail, gnus-group-news)
+       (gnus-summary-mail-other-window, gnus-summary-news-other-window):
+       Remove stale comments about let-binding gnus-newsgroup-name, as they
+       should have been addressed (bug#37871#38).
+
+2021-02-13  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix vertical cursor motion among many images
+
+       * src/xdisp.c (move_it_in_display_line_to): Consider it
+       MOVE_POS_MATCH_OR_ZV if we are just after an image, stretch, or
+       display string, and the position matches exactly.  This is needed
+       when one image follows another at TO_CHARPOS.  (Bug#46464)
+
+2021-02-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       add-minor-mode doc string clarification
+
+       * lisp/subr.el (add-minor-mode): Clarify that this function isn't
+       only about XEmacs compat stuff.
+
+2021-02-13  Stefan Kangas  <stefan@marxist.se>
+
+       Delete 20 year old comment in executable.el
+
+       * lisp/progmodes/executable.el (executable-insert): Delete 20 year old
+       comment.
+
+2021-02-13  Stefan Kangas  <stefan@marxist.se>
+
+       Remove redundant :group args in progmodes/*.el
+
+       * lisp/progmodes/bug-reference.el:
+       * lisp/progmodes/cfengine.el:
+       * lisp/progmodes/cmacexp.el:
+       * lisp/progmodes/cpp.el:
+       * lisp/progmodes/cwarn.el:
+       * lisp/progmodes/dcl-mode.el:
+       * lisp/progmodes/executable.el:
+       * lisp/progmodes/flymake.el:
+       * lisp/progmodes/gud.el:
+       * lisp/progmodes/hideshow.el:
+       * lisp/progmodes/icon.el:
+       * lisp/progmodes/inf-lisp.el:
+       * lisp/progmodes/js.el:
+       * lisp/progmodes/ld-script.el:
+       * lisp/progmodes/make-mode.el:
+       * lisp/progmodes/modula2.el:
+       * lisp/progmodes/pascal.el:
+       * lisp/progmodes/perl-mode.el:
+       * lisp/progmodes/prog-mode.el:
+       * lisp/progmodes/simula.el:
+       * lisp/progmodes/xscheme.el: Remove redundant :group args.
+
+2021-02-13  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Edebug: Make it possible to debug `gv-expander`s in `declare`
+
+       Arrange for declarations to be able to specify their own specs via
+       the `edebug-declaration-spec` property.
+
+       * lisp/emacs-lisp/edebug.el: (edebug--get-declare-spec): New function.
+       (def-declarations): New spec element.
+       (defun, defmacro): Use it in their spec.
+
+       * lisp/emacs-lisp/gv.el (gv-expander, gv-setter):
+       Set `edebug-declaration-spec`.
+
+       * test/lisp/emacs-lisp/edebug-tests.el (edebug-tests-gv-expander): New 
test.
+
+       * test/lisp/emacs-lisp/edebug-resources/edebug-test-code.el
+       (edebug-test-code-use-gv-expander): New test case.
+
+2021-02-13  Stefan Kangas  <stefan@marxist.se>
+
+       Comment out mysterious code from cperl-mode.el
+
+       * lisp/progmodes/cperl-mode.el: Comment out mysterious code referring
+       to some unknown variable 'edit-var-mode-alist'.  No one seems to know
+       what it is used for, so comment it out and see if anyone complains
+       before Emacs 28.1 or 28.2.
+
+2021-02-13  Stefan Kangas  <stefan@marxist.se>
+
+       Remove outdated documentation from cperl-mode.el
+
+       * lisp/progmodes/cperl-mode.el (cperl-tips, cperl-problems)
+       (cperl-praise, cperl-speed, cperl-mode): Doc fixes; remove references
+       to very old versions of Emacs and other "Emaxen".
+       (cperl-problems-old-emaxen): Make obsolete and remove information on
+       Emacs 20.3 and older.
+
+2021-02-13  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Edebug: Overload `edebug-form-spec` even less
+
+       The `edebug-form-spec` symbol property was used both to map forms's
+       head symbol to the corresponding spec, and to map spec element names
+       to their expansion.
+
+       This lead to name conflicts which break instrumentation of examples 
such as
+
+           (cl-flet ((gate (x) x)) (gate 4))
+
+       because of the Edebug spec element `gate`.
+       So introduce a new symbol property `edebug-elem-spec`.
+
+       * lisp/subr.el (def-edebug-elem-spec): New function.
+
+       * lisp/emacs-lisp/edebug.el (edebug--get-elem-spec): New function.
+       (edebug-match-symbol): Use it.
+       (Core Edebug elems): Put them on `edebug-elem-spec` instead of
+       `edebug-form-spec`.
+       (ELisp special forms): Set their `edebug-form-spec` via dolist.
+       (Other non-core Edebug elems): Use `def-edebug-elem-spec`.
+       (edebug-\`): Use `declare`.
+
+       * lisp/emacs-lisp/pcase.el (pcase-PAT, pcase-FUN, pcase-QPAT):
+       * lisp/skeleton.el (skeleton-edebug-spec):
+       * lisp/emacs-lisp/cl-macs.el: Use `def-edebug-elem-spec`.
+
+       * test/lisp/emacs-lisp/edebug-tests.el
+       (edebug-tests--conflicting-internal-names): New test.
+       * test/lisp/emacs-lisp/edebug-resources/edebug-test-code.el
+       (edebug-test-code-cl-flet1): New test case.
+
+       * doc/lispref/edebug.texi (Specification List): Add 
`def-edebug-elem-spec`.
+       (Specification Examples): Use it.
+
+       * doc/lispref/loading.texi (Hooks for Loading): Avoid the use of
+       `def-edebug-spec` in example (better use `debug` declaration).
+
+2021-02-13  Stefan Kangas  <stefan@marxist.se>
+
+       Remove XEmacs and Emacs 21 compat code from cperl-mode
+
+       * lisp/progmodes/cperl-mode.el (cperl-mode): Remove XEmacs and
+       Emacs 21 compat code.
+       (cperl-compilation-error-regexp-list): New variable.
+       (cperl-compilation-error-regexp-alist): Make obsolete.
+
+2021-02-12  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Fix ElDoc setup for eval-expression
+
+       * lisp/emacs-lisp/eldoc.el (eldoc--eval-expression-setup): Don't set
+       global value of eldoc-documentation-strategy (bug#44886).
+
+2021-02-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Use `declare` instead of `def-edebug-spec` in most places
+
+       * lisp/speedbar.el: Use lexical-binding.
+       (speedbar-with-writable): Use `declare`.
+
+       * lisp/subr.el (def-edebug-spec): Use `declare`.
+
+       * lisp/cedet/ede/base.el: Use lexical-binding.
+       (ede-with-projectfile): Use `declare`.
+       (recentf-exclude): Declare var.
+
+       * lisp/cedet/ede/pmake.el: Use lexical-binding.
+       (ede-pmake-insert-variable-shared, ede-pmake-insert-variable-once):
+       Use `declare`.
+
+       * lisp/cedet/ede/proj-comp.el: Use lexical-binding.
+       (ede-compiler-begin-unique, ede-compiler-only-once)
+       (ede-linker-begin-unique, ede-linker-only-once): Use `declare`.
+
+       * lisp/cedet/semantic/ctxt.el: Use lexical-binding.
+       (semantic-with-buffer-narrowed-to-context)
+       (semantic-with-buffer-narrowed-to-command): Use `declare`.
+       (semantic--progress-reporter): Declare var.
+       (semantic-ctxt-end-of-symbol-default): Remove unused var `fieldsep`.
+
+       * lisp/cedet/semantic/lex-spp.el: Use lexical-binding.
+       (define-lex-spp-macro-declaration-analyzer)
+       (define-lex-spp-include-analyzer, semantic-lex-with-macro-used)
+       (define-lex-spp-macro-undeclaration-analyzer): Use `declare`.
+       (semantic-lex-spp-symbol-remove): Rename arg to avoid colliding with
+       dynamic variable `obarray`.
+       (semantic-lex-spp-symbol-pop): Remove unused var `oldvalue`.
+       (semantic-lex-spp-lex-text-string): Remove unused var `analyzer`.
+
+       * lisp/cedet/semantic/lex.el (define-lex)
+       (semantic-lex-unterminated-syntax-protection, define-lex-analyzer)
+       (define-lex-regex-analyzer, define-lex-block-analyzer)
+       (semantic-lex-catch-errors): Use `declare`.
+
+       * lisp/cedet/semantic/tag.el: Use lexical-binding.
+       (semantic-with-buffer-narrowed-to-current-tag)
+       (semantic-with-buffer-narrowed-to-tag): Use `declare`.
+
+       * lisp/cedet/semantic/wisent.el: Use lexical-binding.
+       (define-wisent-lexer): Use `declare`.
+
+       * lisp/emacs-lisp/cl-lib.el (cl-pushnew): The arg to :test can be any
+       form not just function form.
+
+       * lisp/org/ob-comint.el (org-babel-comint-in-buffer)
+       (org-babel-comint-with-output): Use `declare`.
+
+       * lisp/org/ob-core.el (org-babel-map-src-blocks): Use `declare`.
+       (org-babel-result-cond): Simplify edebug spec.
+
+       * lisp/org/org-clock.el (org-with-clock-position, org-with-clock):
+       * lisp/org/org-agenda.el (org-agenda-with-point-at-orig-entry):
+       * lisp/org/ob-tangle.el (org-babel-with-temp-filebuffer): Use `declare`.
+
+       * lisp/textmodes/rst.el (push): Remove redundant edebug spec.
+
+       * lisp/vc/pcvs-parse.el: Use lexical-binding.
+       (cvs-parse-buffer): Rename arg to avoid dynbound conflict.
+       (cvs-or): Use `declare`.
+
+2021-02-12  Mattias Engdegård  <mattiase@acm.org>
+
+       Simplify expression in byte-code decompiler
+
+       * lisp/emacs-lisp/byte-opt.el (byte-decompile-bytecode-1):
+       Replace roundabout expression with what it essentially does.
+
+2021-02-12  Mattias Engdegård  <mattiase@acm.org>
+
+       byte-opt.el: More concise expression
+
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker):
+       Refactor `setq` clause.
+
+2021-02-12  Mattias Engdegård  <mattiase@acm.org>
+
+       Avoid traversing dead `if` branches in bytecode optimiser
+
+       There is no point in traversing conditional branches that are
+       statically known never to be executed.  This saves some optimisation
+       effort, but more importantly prevents variable assignments and
+       references in those branches from blocking effective constant
+       propagation.
+
+       Also attempt to traverse as much as possible in an unconditional
+       context, which enables constant-propagation through (linear)
+       assignments.
+
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize-form):
+       Rewrite the (tail) recursion into an explicit loop.  Normalise a
+       return value of (quote nil) to nil, for easier subsequent
+       optimisations.
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker): Don't
+       traverse dead `if` branches.  Use unconditional traversion context
+       when possible.
+
+2021-02-12  Mattias Engdegård  <mattiase@acm.org>
+
+       Don't inline tramp-debug-message
+
+       * lisp/net/tramp.el (tramp-debug-message): Change defsubst into defun.
+       Until now the byte-compiler hasn't been clever enough to inline this
+       function but this is about to change; the code expansion is
+       unnecessary and makes compiler improvements more difficult to gauge.
+
+2021-02-12  Stefan Kangas  <stefan@marxist.se>
+
+       Use regexp-opt for font lock defaults in meta-mode.el
+
+       * lisp/progmodes/meta-mode.el: Remove redundant :group args.
+
+       (meta-font-lock-keywords): Use regexp-opt.
+
+2021-02-12  Stefan Kangas  <stefan@marxist.se>
+
+       Minor cleanups in scheme.el
+
+       * lisp/progmodes/scheme.el: Remove redundant :group args.
+       (dsssl-font-lock-keywords): Use regexp-opt.
+
+2021-02-12  Stefan Kangas  <stefan@marxist.se>
+
+       Add font locking for many missing macros in m4-mode
+
+       * lisp/progmodes/m4-mode.el (m4--macro-list): New variable.
+       (m4-font-lock-keywords): Use regexp-opt and add many missing macros
+       sourced from the M4 manual.
+
+2021-02-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/edebug.el (edebug--handle-&-spec-op) <&lookup>: New 
method
+
+       * doc/lispref/edebug.texi (Specification List): Document it.
+
+       * lisp/emacs-lisp/pcase.el (pcase-PAT): Use it.
+       (pcase-MACRO): Remove Edebug element.
+       (pcase--get-edebug-spec): New function.
+       (pcase--edebug-match-macro): Remove function.
+
+2021-02-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/cl-macs.el (cl-flet): Fix edebug spec
+
+2021-02-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/edebug.el: Misc cleanups.
+
+       Move all definitions under the `edebug-` prefix.
+
+       (edebug-get-spec): Rename from `get-edebug-spec`.
+       (edebug-move-cursor): Use `cl-callf`.
+       (edebug-spec-p): Remove unused function.
+       (def-edebug-spec, edebug-spec-list, edebug-spec): Remove unused specs
+       (nothing in there gets instrumented anyway).
+       (edebug-tracing): Use `declare`.
+       (edebug-cancel-on-entry): Rename from `cancel-edebug-on-entry`.
+       (edebug-global-prefix): Rename from `global-edebug-prefix`.
+       (edebug-global-map): Rename from `global-edebug-map`.
+
+       * lisp/emacs-lisp/pcase.el (pcase-PAT): Remove `let`.
+       (let): Use `declare` instead.
+       (pcase--edebug-match-macro): Use new name `edebug-get-spec`.
+
+2021-02-12  Robert Pluim  <rpluim@gmail.com>
+
+       Remove Motif support
+
+       * configure.ac: Remove support for configuring --with-x-toolkit=motif
+
+       * etc/NEWS: Mention removal of Motif support.
+
+2021-02-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow minor modes to specify major modes they're useful in
+
+2021-02-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/gv.el (gv-place): Simplify
+
+2021-02-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/cedet/semantic/symref/: Use lexical-binding
+
+       * lisp/cedet/semantic/symref/cscope.el:
+       * lisp/cedet/semantic/symref/filter.el:
+       * lisp/cedet/semantic/symref/global.el:
+       * lisp/cedet/semantic/symref/grep.el:
+       * lisp/cedet/semantic/symref/idutils.el:
+       * lisp/cedet/semantic/symref/list.el: Use lexical-binding.
+
+2021-02-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/cedet/semantic/decorate/: Use lexical-binding in all files
+
+       * lisp/cedet/semantic/decorate/include.el
+       (semantic-decoration-fileless-include-describe): Remove unused var `mm`.
+       * lisp/cedet/semantic/decorate/mode.el: Use lexical-binding.
+
+2021-02-11  Alan Mackenzie  <acm@muc.de>
+
+       Make recursive minibuffers and recursive edits work together
+
+       * lisp/minibuffer.el (exit-minibuffer): When in a minibuffer, throw an 
error
+       should the command loop nesting level be wrong.
+
+       * src/lisp.h (minibuffer_quit_level): declare as an extern.
+       (command_loop_level): Move definition from src/window.h
+
+       * src/window.h (command_loop_level): move definition to src/lisp.h.
+
+       * src/eval.c (minibuffer_quit_level): Move this variable to file level 
from
+       being a static inside internal_catch.
+       (internal_catch): Simplify the logic.
+
+       * src/minibuf.c (Vcommand_loop_level_list): New variable.
+       (move_minibuffer_onto_frame): Set the major mode of  *Minibuf-0*.
+       (Fminibuffer_innermost_command_loop_p): New primitive.
+       (Fabort_minibuffers): Check the command loop level before throwing t to 
'exit,
+       and set minibuffer_quit_level too.
+       (read_minibuf): New variable calling_window.
+       Before stacking up minibuffers on the current mini-window, check that 
the
+       mini-window is not the current one.
+       Do not call choose_minibuf_frame from read_minibuf's unwinding process.
+       Bind calling_frame and calling_window over the recursive edit.
+       Set the new minibuffer's major mode directly.
+       Remove the switching away from the minibuffer after the recursive edit.
+       (get_minibuffer): Record the command loop level in new variable
+       Vcommand_loop_level_list.  No longer set the major mode of a returned
+       minibuffer.
+       (minibuf_c_loop_level): New function.
+       (read_minibuf_unwind): New variables calling_frame, calling_window are 
unbound
+       from the binding stack.  Remove old variable `window', which could not 
be set
+       reliably to the expired mini-window.
+       The expired minibuffer is determined as the nth in the list, rather 
than the
+       contents of the current or previous mini-window.
+       Switch the current window away from the mini-window here (moved from
+       read_minibuf).
+
+2021-02-11  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in erc-sound.el
+
+       * lisp/erc/erc-sound.el: Use lexical-binding.  Remove redundant :group
+       args.
+
+2021-02-11  Stefan Kangas  <stefan@marxist.se>
+
+       Drop XEmacs and SXEmacs support from EDE
+
+       * lisp/cedet/ede/emacs.el (ede-emacs-version): Drop XEmacs and
+       SXEmacs support from EDE.
+
+2021-02-11  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in various ede files
+
+       * lisp/cedet/ede/dired.el:
+       * lisp/cedet/ede/emacs.el:
+       * lisp/cedet/ede/make.el:
+       * lisp/cedet/ede/proj-archive.el:
+       * lisp/cedet/ede/proj-aux.el:
+       * lisp/cedet/ede/proj-misc.el:
+       * lisp/cedet/ede/proj-scheme.el:
+       * lisp/cedet/ede/srecode.el:
+       * lisp/cedet/ede/system.el: Use lexical-binding.
+
+2021-02-11  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (comp-trampoline-compile): Default to speed 1.
+
+2021-02-11  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in wid-browse.el
+
+       * lisp/wid-browse.el: Use lexical-binding.
+       (widget-browse-mode): Use define-derived-mode.
+       (widget-browse-mode-hook): Remove redundant :group arg.
+       (widget-browse-action, widget-browse-value-create): Doc fixes.
+
+2021-02-11  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/ps-samp.el: Use lexical-binding.
+
+2021-02-11  Stefan Kangas  <stefan@marxist.se>
+
+       Fix two Emacs version references in misc manuals
+
+       * doc/misc/forms.texi: Fix reference to Emacs version.
+       * doc/misc/remember.texi: Fix version reference to indicate Emacs
+       version instead of version of remember.  The corresponding version
+       variable and header have been marked obsolete.
+
+2021-02-11  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Fix Octave double-quoted string line continuations
+
+       * lisp/progmodes/octave.el (octave-string-continuation-marker): New
+       defconst after octave-continuation-string.
+       (octave-continuation-string): Mention it in docstring.
+       (octave-maybe-insert-continuation-string): Mark unused function as
+       obsolete.
+       (octave-help-function): Simplify action.
+       (octave--indent-new-comment-line): Insert
+       octave-string-continuation-marker instead of
+       octave-continuation-string within double-quoted strings (bug#46420).
+       (octave-indent-new-comment-line):
+       * etc/NEWS: Describe new behavior.
+
+2021-02-11  Andrii Kolomoiets  <andreyk.mad@gmail.com>
+
+       Use frame monitor in frame_float
+
+       * src/frame.c (frame_float): Use frame monitor attributes instead
+       of attributes of the main monitor (bug#46406).
+
+2021-02-11  Stefan Kangas  <stefan@marxist.se>
+
+       Avoid having erc in irrelevant finder categories
+
+       * lisp/erc/erc-backend.el:
+       * lisp/erc/erc-button.el:
+       * lisp/erc/erc-dcc.el:
+       * lisp/erc/erc-identd.el:
+       * lisp/erc/erc-join.el:
+       * lisp/erc/erc-lang.el:
+       * lisp/erc/erc-log.el:
+       * lisp/erc/erc-match.el:
+       * lisp/erc/erc-menu.el:
+       * lisp/erc/erc-pcomplete.el:
+       * lisp/erc/erc-replace.el:
+       * lisp/erc/erc-spelling.el:
+       * lisp/erc/erc-stamp.el:
+       * lisp/erc/erc-track.el:
+       * lisp/erc/erc-xdcc.el: Remove irrelevant entries in Keywords header.
+
+2021-02-11  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/progmodes/cperl-mode.el (cperl-init-faces): Use regexp-opt.
+
+2021-02-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/play/decipher.el: Use lexical-binding
+
+       (decipher-mode-syntax-table): Move initialization into declaration.
+       (decipher-mode, decipher-stats-mode): Use `define-derived-mode`.
+       (decipher-stats-buffer): Use `buffer-local-value`.
+
+2021-02-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/leim/quail: Use lexical-binding
+
+       * lisp/leim/quail/hangul.el:
+       * lisp/leim/quail/indian.el:
+       * lisp/leim/quail/ipa.el:
+       * lisp/leim/quail/japanese.el:
+       * lisp/leim/quail/lao.el:
+       * lisp/leim/quail/latin-ltx.el:
+       * lisp/leim/quail/lrt.el:
+       * lisp/leim/quail/sisheng.el:
+       * lisp/leim/quail/thai.el:
+       * lisp/leim/quail/tibetan.el: Use lexical-binding.
+       * lisp/leim/quail/uni-input.el (ucs-input-method): Remove unused var 
`str`.
+
+2021-02-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/leim/quail: Use lexical-binding
+
+       * lisp/leim/quail/hangul.el:
+       * lisp/leim/quail/indian.el:
+       * lisp/leim/quail/ipa.el:
+       * lisp/leim/quail/japanese.el:
+       * lisp/leim/quail/lao.el:
+       * lisp/leim/quail/latin-ltx.el:
+       * lisp/leim/quail/lrt.el:
+       * lisp/leim/quail/sisheng.el:
+       * lisp/leim/quail/thai.el:
+       * lisp/leim/quail/tibetan.el: Use lexical-binding.
+       * lisp/leim/quail/uni-input.el (ucs-input-method): Remove unused var 
`str`.
+
+2021-02-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/subr.el (combine-change-calls-1): Don't presume integer args
+
+       This avoids problems where the `after-change-functions` end up called
+       with the new length rather than the old length.
+
+2021-02-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/macroexp.el (macroexp--fgrep): Break cycles
+
+       * test/lisp/emacs-lisp/macroexp-tests.el: New file.
+
+2021-02-10  Andrea Corallo  <akrl@sdf.org>
+
+       Add late load pdumper hooks so these can call into Lisp
+
+       * src/pdumper.h (pdumper_do_now_and_after_late_load): New function.
+       * src/pdumper.c (dump_late_hooks, nr_dump_late_hooks): New static
+       variables.
+       (dump_metadata_for_pdumper): Add support for late load hooks.
+       (pdumper_do_now_and_after_late_load_impl): New functions.
+       (pdumper_load): Add support for late load hooks.
+       * src/window.c (init_window_once): Register
+       'init_window_once_for_pdumper' to be executed after late load.
+
+2021-02-10  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2021-02-10  Juri Linkov  <juri@linkov.net>
+
+       Fix ediff even/odd faces to increase their contrast and readability
+
+       * lisp/vc/ediff-init.el (ediff-even-diff-A, ediff-even-diff-B)
+       (ediff-even-diff-C, ediff-even-diff-Ancestor, ediff-odd-diff-A)
+       (ediff-odd-diff-B, ediff-odd-diff-C): Add :distant-foreground
+       "Black" for light background.  For dark background
+       add :distant-foreground "White", and use darker shades of grey
+       for background colors (bug#46396).
+
+2021-02-10  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix build problem with previous facemenu change
+
+       * lisp/facemenu.el (facemenu-add-face-function): Move to avoid a
+       warning.
+       (list-colors-display): Autoload.
+
+2021-02-10  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Simplify and speed up after-find-file
+
+       Use newer primitives like file-accessible-directory-p to simplify
+       and speed up longstanding code in after-find-file.
+       * lisp/files.el (after-find-file):
+       Prefer file-exists-p + file-symlink-p to file-attributes +
+       file-symlink-p + file-chase-links + file-exists-p.
+       Prefer file-accessible-directory-p to directory-file-name +
+       file-attributes.
+       Prefer file-directory-p to file-name-directory + file-exists-p.
+
+2021-02-10  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix file lock issue (Bug#46397)
+
+       * src/filelock.c (current_lock_owner):
+       Also treat ENOTDIR as meaning the lock file does not exist.
+
+2021-02-10  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove the 'M-o' ('facemap-keymap') binding experimentally
+
+       * doc/lispref/maps.texi (Standard Keymaps):
+       * doc/lispref/keymaps.texi (Prefix Keys): Remove mentions.
+
+       * etc/facemenu-removal.txt: New temporary file.
+
+       * lisp/loadup.el: Don't load facemenu.el.
+       (removed-facemenu-command): New command.
+       (facemenu-keymap-restore): New function.
+
+       * lisp/textmodes/text-mode.el (center-paragraph): Remove binding.
+       (center-line): Remove binding.
+
+2021-02-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/edebug.el: Tweak last change
+
+       Use generic functions i.s.o `edebug--spec-op-function`.
+
+       <toplevel>: No need to register the &foo and :foo handler any more.
+       (edebug--handle-&-spec-op, edebug--handle-:-spec-op): New generic 
functions.
+       (edebug-match-specs): Use them.
+       (edebug--get-spec-op): Remove function.
+       (edebug-match-&optional, edebug-match-&rest, edebug-match-&or)
+       (edebug-match-&not, edebug-match-&key, edebug-match-&error)
+       (edebug-match-&define): Turn functions into methods of
+       `edebug--handle-&-spec-op`.
+       (edebug-match-:name, edebug-match-:unique): Turn functions into methods 
of
+       `edebug--handle-:-spec-op`.
+
+2021-02-10  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid assertion violation in callproc.c
+
+       * src/callproc.c (call_process): Avoid assertion violation when
+       DESTINATION is a cons cell '(:file . "FOO")'.  (Bug#46426)
+
+2021-02-10  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in dns-mode.el
+
+       * lisp/textmodes/dns-mode.el: Use lexical-binding.  Remove
+       redundant :group args.
+       * test/lisp/textmodes/dns-mode-tests.el
+       (dns-mode-tests-dns-mode-soa-increment-serial): New test.
+
+2021-02-10  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in mail-utils.el and add tests
+
+       * lisp/mail/mail-utils.el: Use lexical-binding.
+       * test/lisp/mail/mail-utils-tests.el: New file.
+
+2021-02-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/edebug.el: Don't overload `edebug-form-spec`.
+
+       The `edebug-form-spec` symbol property was used to store two different 
things:
+       the handlers for spec elements like `body` and the handlers for
+       spec operators like `&or`.  But these two sets use different calling
+       conventions, so they're fundamentally incompatible.
+
+       So, move the handlers to spec operators to the new property
+       `edebug--spec-op-function`.  This unbreaks Edebugging of:
+
+           (cl-flet ((f (&rest x) x)) 3)
+
+       * lisp/emacs-lisp/edebug.el <toplevel>: Split the alist of built in
+       spec elements into normal spec element and spec ops.
+       (edebug--get-spec-op): New function.
+       (edebug-match-specs): Use it.
+       (edebug-match-:name): Rename from `edebug-match-colon-name`.
+
+2021-02-10  Eli Zaretskii  <eliz@gnu.org>
+
+       Bump FACE_CACHE_BUCKETS_SIZE to 1009
+
+       * src/xfaces.c (FACE_CACHE_BUCKETS_SIZE): Make it 1009, a prime
+       number, per the comment.  Reported by Win Treese <treese@acm.org>.
+
+2021-02-10  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix local defvar scoping error (bug#46387)
+
+       This bug was introduced by the lexical variable constant propagation
+       mechanism.  It was discovered by Michael Heerdegen.
+
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize-let-form)
+       (byte-optimize-body): Let the effects of a local defvar declaration be
+       scoped by let and let*, not any arbitrary Lisp expression body (such
+       as progn).
+       * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-tests--get-vars)
+       (bytecomp-local-defvar): New test.
+
+2021-02-10  Stefan Kangas  <stefan@marxist.se>
+
+       Minor cleanup in imenu.el
+
+       * lisp/imenu.el: Doc fix; these examples have been removed.  Remove
+       redundant :group args.
+
+2021-02-10  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in snmp-mode.el
+
+       * lisp/net/snmp-mode.el: Use lexical-binding.  Remove redundant :group
+       args.  Doc fix; remove outdated information.
+       (snmp-mode, snmpv2-mode): Add FIXME to use define-derived-mode.
+
+2021-02-10  Stefan Kangas  <stefan@marxist.se>
+
+       Declare empty macro imenu-progress-menu obsolete
+
+       * lisp/imenu.el: Remove commented out code.
+       (imenu-progress-message): Declare macro obsolete.
+
+       * lisp/erc/erc-imenu.el (erc-create-imenu-index):
+       * lisp/net/snmp-mode.el (snmp-mode-imenu-create-index):
+       * lisp/progmodes/antlr-mode.el (antlr-imenu-create-index-function):
+       Don't use or mention above obsolete macro.
+
+2021-02-10  Protesilaos Stavrou  <info@protesilaos.com>
+
+       Update NEWS entry for vc-dir faces
+
+       * NEWS: Remove reference to specific backend, as it now applies to all
+       of them.  Update name of 'vc-dir-status-ignored'.
+
+       This follows from the discussion in bug#46358.
+
+2021-02-10  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/cedet/semantic/bovine/gcc.el: Use lexical-binding.
+
+2021-02-10  Stefan Kangas  <stefan@marxist.se>
+
+       Move cedet test resource files to follow our conventions
+
+       * test/lisp/cedet/semantic-utest-ia.el (ert, ert-x): Require.
+       (cedet-utest-directory, semantic-utest-test-directory): Remove
+       variables.
+       (semantic-utest-ia-doublens.cpp, semantic-utest-ia-subclass.cpp)
+       (semantic-utest-ia-typedefs.cpp, semantic-utest-ia-struct.cpp)
+       (semantic-utest-ia-templates.cpp, semantic-utest-ia-using.cpp)
+       (semantic-utest-ia-nsp.cpp, semantic-utest-ia-localvars.cpp)
+       (semantic-utest-ia-namespace.cpp)
+       (semantic-utest-ia-sppcomplete.c, semantic-utest-ia-varnames.c)
+       (semantic-utest-ia-javacomp.java)
+       (semantic-utest-ia-varnames.java, semantic-utest-ia-wisent.wy)
+       (semantic-utest-ia-texi, semantic-utest-ia-make)
+       (semantic-utest-ia-srecoder): Use 'ert-resource-file'.  Don't
+       check if file exists; we can assume that it does.
+
+       * test/manual/cedet/tests/testjavacomp.java:
+       * test/manual/cedet/tests/testlocalvars.cpp:
+       * test/manual/cedet/tests/testnsp.cpp:
+       * test/manual/cedet/tests/testsppcomplete.c:
+       * test/manual/cedet/tests/teststruct.cpp:
+       * test/manual/cedet/tests/testsubclass.cpp:
+       * test/manual/cedet/tests/testsubclass.hh:
+       * test/manual/cedet/tests/testtemplates.cpp:
+       * test/manual/cedet/tests/testtypedefs.cpp:
+       * test/manual/cedet/tests/testusing.cpp:
+       * test/manual/cedet/tests/testusing.hh:
+       * test/manual/cedet/tests/testvarnames.c:
+       * test/manual/cedet/tests/testvarnames.java:
+       * test/manual/cedet/tests/testwisent.wy: Move from here...
+       * test/lisp/cedet/semantic-utest-ia-resources/testjavacomp.java:
+       * test/lisp/cedet/semantic-utest-ia-resources/testlocalvars.cpp:
+       * test/lisp/cedet/semantic-utest-ia-resources/testnsp.cpp:
+       * test/lisp/cedet/semantic-utest-ia-resources/testsppcomplete.c:
+       * test/lisp/cedet/semantic-utest-ia-resources/teststruct.cpp:
+       * test/lisp/cedet/semantic-utest-ia-resources/testsubclass.cpp:
+       * test/lisp/cedet/semantic-utest-ia-resources/testsubclass.hh:
+       * test/lisp/cedet/semantic-utest-ia-resources/testtemplates.cpp:
+       * test/lisp/cedet/semantic-utest-ia-resources/testtypedefs.cpp:
+       * test/lisp/cedet/semantic-utest-ia-resources/testusing.cpp:
+       * test/lisp/cedet/semantic-utest-ia-resources/testusing.hh:
+       * test/lisp/cedet/semantic-utest-ia-resources/testvarnames.c:
+       * test/lisp/cedet/semantic-utest-ia-resources/testvarnames.java:
+       * test/lisp/cedet/semantic-utest-ia-resources/testwisent.wy:
+       ...to here.
+
+2021-02-10  Stefan Kangas  <stefan@marxist.se>
+
+       Convert tests for srecode/fields.el to ert
+
+       * test/manual/cedet/srecode-tests.el: Move from here...
+       * test/lisp/cedet/srecode/fields-tests.el: ...to here.
+       (srecode-field-utest-impl): Convert test to ert.  Silence
+       byte-compiler.
+
+       * test/manual/cedet/cedet-utests.el (cedet-utest-libs): Don't
+       list the above moved file.
+
+2021-02-10  Stefan Kangas  <stefan@marxist.se>
+
+       Make texinfmt-version variable obsolete
+
+       * lisp/textmodes/texinfmt.el (texinfmt-version): Make variable and
+       command obsolete in favour of 'emacs-version'.
+       (texinfo-format-region, texinfo-format-buffer-1): Use
+       'emacs-version' instead of above obsolete variable.
+
+2021-02-10  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in bib-mode.el
+
+       * lisp/textmodes/bib-mode.el: Use lexical-binding.  Remove
+       redundant :group args.
+
+2021-02-10  Stefan Kangas  <stefan@marxist.se>
+
+       Move semantic/format.el tests to follow our conventions
+
+       * test/lisp/cedet/semantic-utest-fmt.el: Move from here...
+       * test/lisp/cedet/semantic/format-tests.el: ...to here.
+       (ert, ert-x): Require.
+       (semantic-fmt-utest-file-list): Use ert-resource-file.
+       * test/manual/cedet/tests/test-fmt.cpp:
+       * test/manual/cedet/tests/test-fmt.el: Move from here...
+       * test/lisp/cedet/semantic/format-resources/test-fmt.cpp:
+       * test/lisp/cedet/semantic/format-resources/test-fmt.el: ...to here.
+
+2021-02-10  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in some test files
+
+       * test/manual/cedet/ede-tests.el:
+       * test/manual/cedet/srecode-tests.el:
+       * test/manual/cedet/tests/test.el: Use lexical-binding.
+
+       * test/manual/etags/el-src/TAGTEST.EL: Add lexical-binding cookie.
+       * test/manual/etags/ETAGS.good_1: Update expected result for the
+       above change.
+
+2021-02-10  Stefan Kangas  <stefan@marxist.se>
+
+       Change default semantic-lex-analyzer to semantic-lex
+
+       * lisp/cedet/semantic/lex.el (semantic-lex-analyzer): Change default
+       to semantic-lex, since semantic-flex was obsolete and has been
+       removed.
+
+2021-02-10  Stefan Kangas  <stefan@marxist.se>
+
+       Convert many manual cedet tests to ert
+
+       * test/manual/cedet/cedet-utests.el
+       (cedet-files-utest): Move test from here...
+       * test/lisp/cedet/cedet-files-tests.el: ...to this new file.
+
+       * test/manual/cedet/srecode-tests.el
+       (srecode-document-function-comment-extract-test): Move test from
+       here...
+       * test/lisp/cedet/srecode/document-tests.el: ...to this new file.
+
+       * test/manual/cedet/cedet-utests.el
+       (inversion-unit-test): Move test from here...
+       * test/lisp/cedet/inversion-tests.el: ...to this new file.
+
+       * test/manual/cedet/semantic-tests.el
+       (semantic-gcc-test-output-parser): Move test from here...
+       * test/lisp/cedet/semantic/bovine/gcc-tests.el: ...to this new file.
+
+       * test/manual/cedet/semantic-tests.el
+       (semantic-test-data-cache): Move test from here...
+       * test/lisp/cedet/semantic/fw-tests.el: ...to this new file.
+
+2021-02-10  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in almost all of play/*.el
+
+       * lisp/play/5x5.el: Use lexical-binding.
+       (5x5-draw-grid-end, 5x5-draw-grid, 5x5-solver)
+       (5x5-solve-suggest): Silence byte-compiler.
+
+       * lisp/play/cookie1.el: Use lexical-binding.
+       (cookie-shuffle-vector, cookie-apropos): Silence byte-compiler.
+
+       * lisp/play/zone.el: Use lexical-binding.
+       (zone): Convert lambda to proper lexical closure.
+       (zone-replace-char, zone-fill-out-screen): Silence byte-compiler.
+
+       * lisp/play/blackbox.el:
+       * lisp/play/doctor.el:
+       * lisp/play/gametree.el:
+       * lisp/play/hanoi.el: Use lexical-binding.
+
+       * test/lisp/play/cookie1-resources/cookies:
+       * test/lisp/play/cookie1-tests.el: New files.
+
+2021-02-10  Protesilaos Stavrou  <info@protesilaos.com>
+
+       Refine use of vc-dir faces; apply to all backends
+
+       * lisp/vc/vc-dir.el (vc-default-dir-printer): Add check for the
+       "ignored" status and make 'vc-dir-status-edited' the default face.
+       Also extend condition for more states that qualify as "warnings".
+
+       (vc-dir-ignored, vc-dir-status-ignored): Rename face for consistency.
+
+       * lisp/vc/vc-git.el (vc-git-dir-printer): Use the
+       'vc-dir-status-edited' as the default for the Git backend.  And
+       reference the renamed face.  Also stop treating the empty stash
+       differently from other header values.
+
+       * lisp/vc/vc-bzr.el (vc-bzr-dir-extra-headers): Implement new faces.
+       * lisp/vc/vc-cvs.el (vc-cvs-dir-extra-headers): Same.
+       * lisp/vc/vc-hg.el (vc-hg-dir-extra-headers): Same.
+       * lisp/vc/vc-svn.el (vc-svn-dir-extra-headers): Same.
+
+       This follows from the discussion in bug#46358.
+
+2021-02-09  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Tiny simplification to read-char-by-name
+
+       * lisp/international/mule-cmds.el (mule--ucs-names-sort-by-code):
+       Sort with car-less-than-car instead of slower lambda.
+       (mule--ucs-names-affixation): Just stick character into a list to
+       avoid trip through format and char-to-string.
+       (read-char-by-name): Quote function symbols as such.
+
+2021-02-09  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix syntax category of some characters
+
+       * lisp/international/characters.el (modify-syntax-entry): Fix
+       syntax of numerical subscripts and superscripts.  (Bug#46240)
+
+2021-02-09  Juri Linkov  <juri@linkov.net>
+
+       * lisp/net/dictionary.el: Dictionary improvements (bug#45262)
+
+       * lisp/net/dictionary.el (dictionary-link-dictionary): New defcustom.
+       (dictionary-mark-reference): Use dictionary-link-dictionary.
+       (dictionary-post-buffer-hook): New defcustom.
+       (dictionary-post-buffer): Run dictionary-post-buffer-hook.
+       (dictionary-mode-map): Bind 'S-SPC' to scroll-down-command.
+       (dictionary-search-default): Use possibly multi-word data at point.
+
+2021-02-09  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Use lexical-binding in a few more scattered files
+
+       * lisp/registry.el: Use lexical-binding.
+       (registry-reindex): Remove unused var `values`.
+
+       * lisp/cedet/pulse.el: Use lexical-binding.
+
+       * lisp/cedet/semantic/idle.el: Use lexical-binding.
+       (semantic-idle-core-handler): Remove unused var `safe`.
+       (ede-auto-add-method): Declare var.
+       (define-semantic-idle-service): Use `declare`.  Remove unused var 
`setup`.
+       (pulse-flag): Declare var.
+
+       * lisp/net/ldap.el: Use lexical-binding.
+       (ldap-search-internal): Remove unused var `proc`.
+
+       * lisp/net/mairix.el: Use lexical-binding.
+       Remove redundant `:group` args.
+       (mairix-widget-create-query): Remove unnused var `allwidgets`.
+
+2021-02-09  Juri Linkov  <juri@linkov.net>
+
+       New options read-char-by-name-sort and read-char-by-name-group 
(bug#46240)
+
+       * lisp/international/mule-cmds.el (mule--ucs-names-sort-by-code)
+       (mule--ucs-names-group): New functions.
+       (read-char-by-name-sort, read-char-by-name-group): New defcustoms.
+       (read-char-by-name): Use them.
+
+2021-02-09  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/cedet/{semantic/scope.el,ede/project-am.el}: Use lexical-scoping
+
+       * lisp/cedet/ede/project-am.el: Remove redundant `:group` args.
+       (recentf-exclude): Declare variable.
+       (project-am--with-makefile-current): New function extracted from
+       `project-am-with-makefile-current`.  Use `with-current-buffer` and
+       `unwind-protect`.
+       (project-am-with-makefile-current): Use `declare` and
+       `project-am--with-makefile-current`.
+       (project-am-with-config-current): Use `declare` and `with-temp-buffer`.
+       (project-am-extract-shell-variable): Turn it into a `defun`; the use of
+       `defmacro` appears to have been a plain mistake.
+
+2021-02-09  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize--pcase): New macro
+
+       (byte-optimize-form-code-walker): Use it.
+
+2021-02-09  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/macroexp.el: Break cycle with bytecomp/byte-opt
+
+       The recent change in macroexp triggered a cyclic dependency error
+       during eager macroexpansion when neither `bytecomp` nor `byte-opt` had
+       been byte-compiled yet.  This fixes it by moving the offending
+       function to macroexp.el.
+
+       * lisp/emacs-lisp/macroexp.el (macroexp--unfold-lambda): Move from
+       byte-opt.el and rename.
+       (macroexp--expand-all): Use it.
+
+       * lisp/emacs-lisp/byte-opt.el (byte-compile-unfold-lambda): Move to
+       macroexp.el.
+       (byte-compile-inline-expand, byte-optimize-form-code-walker):
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-form):
+       Use `macroexp--unfold-lambda` instead.
+
+2021-02-09  Stefan Kangas  <stefan@marxist.se>
+
+       Remove some dead, commented out code from lisp-mode.el
+
+       * lisp/emacs-lisp/lisp-mode.el (lisp-data-mode-syntax-table):
+       Remove code commented out since 2005.
+
+2021-02-09  Stefan Kangas  <stefan@marxist.se>
+
+       Load all generic-x.el modes unconditionally
+
+       * lisp/generic-x.el: Load all modes unconditionally.
+       (generic-default-modes, generic-mswindows-modes)
+       (generic-unix-modes, generic-other-modes)
+       (generic-extras-enable-list): Make obsolete.
+       Ref: https://lists.gnu.org/r/emacs-devel/2021-01/msg01403.html
+
+2021-02-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Note that the `values' variable is now obsolete
+
+       * src/lread.c (syms_of_lread): Note that it's obsolete in the doc
+       string (because we can't mark it as obsolete "properly" yet,
+       because that leads to compilation warnings when somebody
+       (let (values) ... values).
+
+2021-02-09  Alan Mackenzie  <acm@muc.de>
+
+       Allow exit-minibuffer to be called from Lisp code.  Fixes bug #46373
+
+       * lisp/minibuffer.el (exit-minibuffer): Throw the error "Not in most 
nested
+       minibuffer" only when the current buffer is a minibuffer (thus the 
command
+       came directly from a key binding).
+
+       * doc/lispref/minibuf.texi (Minibuffer Commands): Change the 
documentation
+       accordingly.
+
+2021-02-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make pcomplete-ignore-case obsolete
+
+       * lisp/pcomplete.el (pcomplete-completions-at-point)
+       (pcomplete-stub, pcomplete--entries, pcomplete-insert-entry):
+       * lisp/eshell/em-cmpl.el (eshell-cmpl-initialize):
+       * lisp/eshell/em-cmpl.el (eshell-cmpl-ignore-case):
+       * lisp/erc/erc-pcomplete.el (pcomplete-erc-setup): Use
+       `completion-ignore-case' instead (bug#23117).
+
+       * lisp/pcomplete.el (pcomplete-ignore-case): Make obsolete.
+
+2021-02-09  Matt Armstrong  <matt@rfc20.org>
+
+       Preserve leading whitespace in `lm-commentary'.
+
+       * lisp/emacs-lisp/lisp-mnt.el (lm-commentary): Preserve leading
+       whitespace (bug#46364).
+
+2021-02-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Move all usages of `values' to `values--store-value'
+
+       * lisp/simple.el (eval-expression):
+       * lisp/progmodes/elisp-mode.el (eval-last-sexp):
+       * lisp/emacs-lisp/pp.el (pp-eval-expression):
+       * lisp/emacs-lisp/edebug.el (edebug-eval-expression):
+       * lisp/emacs-lisp/pp.el (pp-eval-expression):
+       * lisp/emacs-lisp/edebug.el (edebug-eval-expression):
+       * lisp/cedet/data-debug.el (data-debug-eval-expression): Use it
+       instead of pushing to `values' directly (bug#22066).
+
+       * lisp/subr.el (values--store-value): New function.
+
+2021-02-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't use `values' in elisp--eval-defun
+
+       * lisp/progmodes/elisp-mode.el (elisp--eval-defun): Don't use
+       `values', since it's being deprecated (bug#22066).
+
+2021-02-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Finish customize-changed-options/customize-changed fix up
+
+       * doc/emacs/custom.texi (Specific Customization): Fix
+       customize-changed/customize-changed-options documentation.
+       * lisp/cus-dep.el (custom-make-dependencies): Adjust doc string
+       (bug#23085).
+
+       * lisp/menu-bar.el (menu-bar-custom-menu): Adjust menu options.
+
+2021-02-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix count-lines problem in non-ASCII buffers
+
+       * src/fns.c (Fline_number_at_pos): Get the correct start position
+       in non-ASCII buffers (bug#22763).
+
+2021-02-09  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/gnus/gnus-topic.el: Fix a backward incompatibility
+
+       (gnus-topic-insert-topic-line): Make the vars used in
+       `gnus-topic-line-format-spec` dynamically scoped since it seems
+       that they're sometimes accessed from functions called by
+       `gnus-topic-line-format-spec` :-(
+
+       * lisp/gnus/gnus-util.el (gnus--\,@): Move macro to here...
+       * lisp/gnus/gnus-art.el (gnus--\,@): .. from here.
+
+       * lisp/gnus/gnus.el (gnus-method-to-server): Apply DeMorgan.
+
+2021-02-08  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Run Gnus group names through regexp-quote when matching results
+
+       * lisp/gnus/gnus-search.el (gnus-search-indexed-parse-output): Be more
+       careful about making sure group names will match search results
+       correctly.
+
+2021-02-08  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix scrolling past tall images
+
+       * src/xdisp.c (try_window): Don't try checking the margins if the
+       window is vscrolled, as that could cause unnecessary recentering
+       when tall images are displayed.  (Bug#46320)
+
+2021-02-08  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/indent.el (beginning-of-line-text): Mark it as a movement command
+
+       So that combining it with `shift` selects the text, as usual, in case
+       you have it bound for example to `C-a` in a mode like `enriched-mode`.
+
+2021-02-08  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/avoid.el: Doc fixes.
+
+2021-02-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Record the value of `C-x C-e' in `values'
+
+       * lisp/progmodes/elisp-mode.el (eval-last-sexp): Record the value
+       in `values' (bug#22066) since we're messaging it.
+
+2021-02-08  Protesilaos Stavrou  <info@protesilaos.com>
+
+       Add vc-dir faces; also apply them to vc-git
+
+       * etc/NEWS: Document the new faces.
+
+       * lisp/vc/vc-dir.el (vc-dir-header, vc-dir-header-value)
+       (vc-dir-directory, vc-dir-file, vc-dir-mark-indicator)
+       (vc-dir-status-warning, vc-dir-status-edited, vc-dir-status-up-to-date)
+       (vc-dir-ignored): Add new faces.
+
+       * lisp/vc/vc-git.el (vc-git-permissions-as-string, vc-git-dir-printer)
+       (vc-git-dir-extra-headers): Apply new faces (bug#46358).
+
+2021-02-08  Sean Whitton  <spwhitton@spwhitton.name>
+
+       Bind clone-buffer to C-x x n
+
+       * lisp/bindings.el (ctl-x-x-map): Bind clone-buffer.
+       * etc/NEWS: Document the change (bug#46369).
+
+2021-02-08  Anticrisis  <anticrisisg@gmail.com>  (tiny change)
+
+       Fix tcl-mode indentation of namespaced code
+
+       * lisp/progmodes/tcl.el (tcl-calculate-indent): Fix indentation
+       when using namespaces (bug#44834).
+       (tcl-beginning-of-defun-function): Remove.  This partially reverts
+       cd5bb4bf3dbad8941d25823f398b595b8f0edbb9.
+
+2021-02-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify "changes" in CONTRIBUTE
+
+       * CONTRIBUTE: Clarify that "changes" doesn't include removing code
+       (bug#44834).
+
+2021-02-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make `C-a' in enriched-mode behave more line in other modes
+
+       * lisp/textmodes/enriched.el (enriched-mode-map): Don't rebind
+       beginning-or-line, because it makes `C-S-a' not mark the region,
+       and it doesn't allow actually moving to the beginning of the line
+       if the line starts with characters in `adaptive-fill-regexp'
+       (bug#22554).
+
+2021-02-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix noninteractive gnus-article-press-button
+
+       * lisp/gnus/gnus-art.el (gnus-article-press-button): Make the `b'
+       summary mode command work again.
+
+2021-02-08  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in a few more places
+
+       * lisp/calc/calc-embed.el (calc-embedded-make-info):
+       * lisp/calc/calcalg2.el (calcFunc-integ):
+       * lisp/comint.el (comint-mode):
+       * lisp/epa.el (epa--list-keys, epa--show-key):
+       * lisp/epg.el (epg--start):
+       * lisp/vc/ediff-util.el (ediff-activate-mark): Prefer setq-local.
+
+2021-02-08  Stefan Kangas  <stefan@marxist.se>
+
+       Add tests for count-lines
+
+       * test/lisp/simple-tests.el (simple-test-count-lines)
+       (simple-test-count-lines/ignore-invisible-lines): Add tests.
+
+2021-02-07  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Fix namazu search result parsing in gnus-search
+
+       * lisp/gnus/gnus-search.el (gnus-search-indexed-extract): This method
+       is documented to leave point at the end of the extracted search
+       result. The namazu implementation wasn't doing that.
+
+2021-02-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify when activate-mark-hook is run
+
+       * doc/lispref/markers.texi (The Mark):
+       * lisp/simple.el (activate-mark-hook): Clarify when the hook is
+       run (bug#23444).
+
+2021-02-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Use `line-number-at-pos' in `count-lines'
+
+       * lisp/simple.el (count-lines): Use `line-number-at-pos', which
+       should be faster.
+
+2021-02-07  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix language-environment and font selection on MS-Windows
+
+       These changes improve setting the language-environment and font
+       selection when MS-Windows returns useless "ZZZ" as the "language
+       name", which then disrupts all the setup of the locale-dependent
+       stuff, and in particular font selection.
+       * lisp/w32-fns.el (w32-charset-info-alist): Add an element for
+       "iso8859-5", in case LANG is set to something unusable, like
+       "ZZZ".  This allows fonts capable of displaying Cyrillic
+       characters to be used even when language preferences are screwed.
+
+       * src/w32.c (init_environment): If GetLocaleInfo returns "ZZZ" as
+       the "language name" for LOCALE_USER_DEFAULT, try again with locale
+       ID based on what GetUserDefaultUILanguage returns.  (Bug#39286)
+
+2021-02-07  Tino Calancha  <ccalancha@suse.com>
+
+       Add command to recenter errors from Occur/Grep buffers
+
+       To scroll up/down the current displayed occurrence/error
+       without abandon the Occur/Grep buffer.
+
+       Add also a command 'recenter-other-window' to recenter
+       the other window from any kind of buffer.
+
+       * lisp/window.el (recenter-other-window): New command.
+       Bind recenter-other-window to S-M-C-l (Bug#46119).
+
+       * lisp/simple.el (recenter-current-error): New command.
+       * lisp/progmodes/grep.el (grep-mode-map):
+       Delete bidings for n and p.
+
+       * lisp/progmodes/compile.el (compilation-minor-mode-map):
+       Move here the n and p bindings.
+       Bind `recenter-current-error' to l.
+       * lisp/replace.el (occur-mode-map):
+       Same.
+
+       * doc/emacs/windows.texi (Other Window):
+       * doc/emacs/display.texi (Recentering):
+       Document recenter-other-window.
+
+       * etc/NEWS (Changes in Specialized Modes and Packages in Emacs 28.1):
+       Announce the changes.
+
+2021-02-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow Fline_number_at_pos being called with a marker
+
+       * src/fns.c (Fline_number_at_pos): Also allow being called with a
+       marker (since the Lisp function allowed that).
+
+2021-02-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Move line-number-at-pos to C
+
+       * doc/lispref/positions.texi (Text Lines): Revert previous change.
+
+       * lisp/simple.el (line-number-at-pos): Remove definition.
+
+       * lisp/simple.el (count-lines): Revert back to using
+       `forward-line', because there seems to be a disagreement on how
+       lines should be counted in a region...
+
+       * src/fns.c (Fline_number_at_pos): Rename from
+       Fline_number_at_position and adjust parameter list.
+
+2021-02-07  Stefan Kangas  <stefan@marxist.se>
+
+       Minor doc fixes in dictionary-connection.el
+
+       * lisp/net/dictionary-connection.el:
+       (dictionary-connection-p, dictionary-connection-read-to-point):
+       Minor doc fixes to adhere to our conventions.
+
+2021-02-07  Stefan Kangas  <stefan@marxist.se>
+
+       Fix copyright and license statement in dictionary*.el
+
+       * lisp/net/dictionary-connection.el:
+       * lisp/net/dictionary.el: Add copyright statement and fix license
+       statement.
+
+2021-02-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a new function 'line-number-at-position'
+
+       * doc/lispref/positions.texi (Text Lines): Document it.
+
+       * lisp/simple.el (count-lines): Use it.
+       (line-number-at-pos): Ditto.
+
+       * src/fns.c (Fline_number_at_position): New function (bug#22763).
+
+2021-02-07  Stefan Kangas  <stefan@marxist.se>
+
+       Various doc fixes in dictionary.el
+
+       * lisp/net/dictionary.el (dictionary-set-server-var)
+       (dictionary-server, dictionary-port)
+       (dictionary-default-dictionary)
+       (dictionary-default-popup-strategy, dictionary-proxy-server)
+       (dictionary-proxy-port, dictionary-description-open-delimiter)
+       (dictionary-description-close-delimiter)
+       (dictionary-window-configuration, dictionary-selected-window)
+       (dictionary-position-stack, dictionary-data-stack)
+       (dictionary-positions, dictionary-current-data)
+       (dictionary-connection, dictionary-instances)
+       (dictionary-color-support, dictionary-word-history)
+       (dictionary-mode, dictionary, dictionary-check-connection)
+       (dictionary-mode-p, dictionary-send-command)
+       (dictionary-read-reply-and-split, dictionary-check-reply)
+       (dictionary-check-initial-reply, dictionary-store-state)
+       (dictionary-store-positions, dictionary-new-search)
+       (dictionary-new-search-internal, dictionary-do-search)
+       (dictionary-display-search-result)
+       (dictionary-display-word-definition)
+       (dictionary-special-dictionary, dictionary-set-strategy)
+       (dictionary-tooltip-dictionary, dictionary-switch-tooltip-mode)
+       (dictionary-tooltip-mode, global-dictionary-tooltip-mode): Doc fixes
+       to adhere to our conventions.
+
+2021-02-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Fix inferior octave single-quote font lock"
+
+       This reverts commit 9e68413c7f0a7f71e1cee923ace7282d14c2e686.
+
+       This patch led to bug#46327:
+
+       x = [2 2]'
+       disp(x)
+
+       Which meant that the transpose operator was interpreted
+       as the start of a string.
+
+2021-02-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Reverse customize-changed and customize-changed-options aliasing
+
+       * lisp/cus-edit.el (customize-changed): Rename from
+       customize-changed-options (bug#23085), since the old name doesn't
+       reflect what it does: It's not just about user options, but also
+       faces and the like.
+       (customize-changed-options): Make into an obsolete alias.
+
+2021-02-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify that #s(hash-table ...) doesn't always create a new hash table
+
+       * doc/lispref/hash.texi (Creating Hash): Note that the printed
+       representation doesn't necessarily create a new table (bug#23417).
+
+       * doc/lispref/lists.texi (Rearrangement): Link to Self-Evaluating
+       Forms to further expand upon immutability.
+
+2021-02-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add more commands to the new `C-x x' keymap
+
+       * doc/emacs/killing.texi (Accumulating Text):
+       * doc/emacs/display.texi (Line Truncation):
+       * doc/emacs/buffers.texi (Misc Buffer): Document it.
+
+       * lisp/bindings.el (ctl-x-x-map): Add new bindings for
+       rename-buffer, rename-uniquely, insert-buffer and
+       toggle-truncate-lines.
+
+2021-02-07  Sean Whitton  <spwhitton@spwhitton.name>
+
+       Move 'revert-buffer' global binding to 'C-x g g'
+
+       * lisp/bindings.el: Define ctl-x-g-map and bind 'revert-buffer' to
+       'C-x x g' globally.
+       * doc/emacs/files.texi: Replace 'C-x g' with 'C-x x g'.
+       * etc/NEWS: Document the change (bug#46300).
+
+2021-02-07  Petteri Hintsanen  <petterih@iki.fi>
+
+       Fix example in Sequence Functions node in the manual
+
+       * doc/lispref/sequences.texi (Sequence Functions): Fix the result
+       from the example.
+
+2021-02-06  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Revert "Fix the previous change"
+
+       This reverts commit fc37dc298f27025823fad2d944e11cc7ee6a058d.
+
+       That change was only needed in the release branch.
+
+2021-02-06  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix spurious warnings from unwise condition order in inlined code
+
+       These are both conditions having the form (and A B) where A is
+       side-effect-free and B may be known to be nil at compile time.
+       The compiler will then warn about A being useless and thrown away.
+       The fix is to test B first.
+
+       * lisp/gnus/gnus.el (gnus-method-to-server):
+       Test `(not no-enter-cache)` first.
+       (gnus-server-get-method): Test `group` first.
+
+2021-02-06  Mattias Engdegård  <mattiase@acm.org>
+
+       Constprop of lexical variables
+
+       Lexical variables bound to a constant value (symbol, number or string)
+       are substituted at their point of use and the variable then eliminated
+       if possible.  Example:
+
+         (let ((x (+ 2 3))) (f x))  =>  (f 5)
+
+       This reduces code size, eliminates stack operations, and enables
+       further optimisations.  The implementation is conservative, and is
+       strongly curtailed by the presence of variable mutation, conditions
+       and loops.
+
+       * lisp/emacs-lisp/byte-opt.el
+       (byte-optimize-enable-variable-constprop)
+       (byte-optimize-warn-eliminated-variable): New constants.
+       (byte-optimize--lexvars, byte-optimize--vars-outside-condition)
+       (byte-optimize--vars-outside-loop, byte-optimize--dynamic-vars):
+       New dynamic variables.
+       (byte-optimize--substitutable-p, byte-optimize-let-form):
+       New functions.
+       (byte-optimize-form-code-walker): Adapt clauses for variable
+       constprop, and add clauses for 'setq' and 'defvar'.
+       * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-test-var)
+       (bytecomp-test-get-var, bytecomp-test-identity)
+       (byte-opt-testsuite-arith-data): Add test cases.
+
+2021-02-06  Ioannis Kappas  <ioannis.kappas@gmail.com>  (tiny change)
+
+       New test for src/process.c on MS-Windows
+
+       * test/src/process-tests.el (process-sentinel-interrupt-event):
+       New test.  (Bug#46284)
+
+2021-02-06  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Fix TEXT check in gnus-search IMAP search
+
+       * lisp/gnus/gnus-search.el (gnus-search-run-search): It's a string,
+       not a buffer!
+
+2021-02-06  Martin Rudalics  <rudalics@gmx.at>
+
+       Permit zero value for 'child-frame-border-width' parameter (Bug#46184)
+
+       * doc/lispref/frames.texi (Layout Parameters): Update entry on
+       'child-frame-border-width' parameter.
+       * src/frame.c (make_frame): Init child_frame_border_width to -1.
+       (Fframe_child_frame_border_width): Return internal border width if
+       child frame border width parameter is nil.
+       (gui_report_frame_params): Report nil as child frame border
+       width parameter if the frame value is negative.
+       * src/frame.h (FRAME_INTERNAL_BORDER_WIDTH): Return value of
+       child frame border width only if it is not negative.
+       * src/xfns.c (Fx_create_frame): Default child frame border to -1
+       when recording it in its frame slot via gui_default_parameter.
+       * src/nsfns.m (ns_set_child_frame_border_width): Handle nil ARG.
+       (Fx_create_frame): Default child frame border width parameter to
+       nil.
+       * src/w32fns.c (w32_set_child_frame_border_width): Handle nil ARG.
+       (Fx_create_frame): Default child frame border width parameter to
+       nil.
+       * src/xfns.c (x_set_child_frame_border_width): Handle nil ARG.
+       (Fx_create_frame): Default child frame border width parameter to
+       nil.
+
+2021-02-06  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       8ad48a0bdd (origin/emacs-27) Improve doc string of 'text-scale-adjust'
+       7a25ff767d Clarify the indent-rigidly doc string
+       6c5ddf0e0b Fix two small tab bar issues
+       c71e08eba9 Fix last change in syntax.texi
+
+       # Conflicts:
+       #       lisp/indent.el
+
+2021-02-06  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       8c27af3ff4 Clarify how transient indentation modes are exited in the ...
+       fc37dc298f Fix the previous change
+
+2021-02-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix previous change in testcover.el
+
+       * lisp/emacs-lisp/testcover.el
+       (testcover-analyze-coverage-edebug-after): The wrapper macro is
+       called `1value', not `testcover-1value'.
+
+2021-02-06  Eli Zaretskii  <eliz@gnu.org>
+
+       Support file names with whitespace in Nroff mode
+
+       * lisp/textmodes/nroff-mode.el (nroff-view): Quote argument of
+       'Man-getpage-in-background' to support file names with special
+       characters.  (Bug#46051)
+
+2021-02-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak provided-mode-derived-p doc string
+
+       * lisp/subr.el (provided-mode-derived-p): Remove detail about "or
+       their aliases", since that seems self-evident (bug#46331) (and
+       derived-mode-p works the same, and doesn't have the bit in
+       question).
+
+2021-02-06  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve doc string of 'text-scale-adjust'
+
+       * lisp/face-remap.el (text-scale-adjust): Clarify that "default
+       face height" refers to the 'default' face.  (Bug#25168)
+
+2021-02-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Warn in message.el when sending encryptable mail
+
+       * lisp/gnus/message.el (message-send): Query if it looks like
+       encryption was intended, but is not going to happen.
+
+       * lisp/gnus/mml-sec.el (mml-secure-is-encrypted-p): Allow saying
+       whether there's any <#secure tags present (bug#24411).
+
+2021-02-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Rename the `1value' symbol in testcover.el
+
+       * lisp/emacs-lisp/testcover.el: Rename the symbol `1value'
+       throughout the file to `testcover-1value' to allow using the
+       variable in code that's to be tested (bug#25471).
+
+2021-02-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow provided-mode-derived-p to work on aliases
+
+       * lisp/subr.el (provided-mode-derived-p): Allow this to work on
+       modes that are aliases of other modes (bug#46331).  For instance:
+       (provided-mode-derived-p 'javascript-mode 'prog-mode)
+
+2021-02-06  Michael Albinus  <michael.albinus@gmx.de>
+
+       Modernize use of prompts in auth-source.el
+
+       * lisp/auth-source.el (auth-source-search): Adapt docstring
+       (auth-source-format-prompt): Remove trailing ": ".
+       (auth-source-netrc-create, auth-source-secrets-create)
+       (auth-source-plstore-create): Adapt prompts.  Use `format-prompt'.
+       Do not ask interactively if `auth-source-save-behavior' is nil.
+
+2021-02-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify the indent-rigidly doc string
+
+       * lisp/indent.el (indent-rigidly): Clarify exiting the transient
+       mode (bug#46296).
+
+2021-02-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix problem when ~/.mailcap had several entries for a MIME type
+
+       * lisp/net/mailcap.el (mailcap-mime-info): Use all the matching
+       entries from ~/.mailcap, not just the first (bug#46318).
+
+2021-02-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Avoid a compilation warning in iter-do
+
+       * lisp/emacs-lisp/generator.el (iter-do): Avoid a compilation
+       warning on using variables marked for not using (bug#31641).
+       Eg. (iter-do (_ i))
+
+2021-02-06  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix copying text properties in 'format'
+
+       * src/editfns.c (styled_format): Fix accounting for text
+       properties that come from the format string.  (Bug#46317)
+
+       * test/src/editfns-tests.el (format-properties): Add new tests for
+       bug#46317.
+
+2021-02-06  Martin Rudalics  <rudalics@gmx.at>
+
+       Fix two small tab bar issues
+
+       * lisp/cus-start.el (frame-inhibit-implied-resize): Update version tag.
+       * lisp/frame.el (frame-inner-height): Do not count in tab bar.
+
+2021-02-05  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/pcase.el (let): Reimplement as a pcase macro
+
+       (pcase--macroexpand, pcase--u1): Remove handling of `let` from
+       `pcase`s core.
+
+2021-02-05  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix 'C-d' on the first line in Rmail summary buffer
+
+       * lisp/mail/rmailsum.el (rmail-summary-delete-forward): Fix
+       deleting backward past the beginning of the summary buffer.
+       (Bug#46325)
+
+2021-02-05  Michael Albinus  <michael.albinus@gmx.de>
+
+       Add command 'dbus-monitor'
+
+       * doc/misc/dbus.texi: (Monitoring Messages): Document 'dbus-monitor'.
+
+       * etc/NEWS: Mention 'dbus-monitor' but 'dbus-register-monitor'.
+       Fix typos and other oddities.
+
+       * lisp/net/dbus.el (dbus-monitor): New command.
+
+       * test/lisp/net/dbus-tests.el (dbus--test-register-service): Extend 
test.
+
+2021-02-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't hard-code ignored functions in `indent-according-to-mode'
+
+       * lisp/indent.el (indent-line-ignored-functions): New variable
+       (bug#26945).
+       (indent-according-to-mode): Use it.
+
+2021-02-05  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix last change in 'window-text-pixel-size'
+
+       * src/xdisp.c (Fwindow_text_pixel_size): Fix last change: preserve
+       the original Y coordinate after start_display, instead of zeroing
+       it out.  Reported by martin rudalics <rudalics@gmx.at>.
+
+2021-02-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fontize more automatic variables in makefile-gmake-mode
+
+       * lisp/progmodes/make-mode.el (makefile-gmake-font-lock-keywords):
+       Fontize the $ in more automatic variables (bug#27842).
+
+2021-02-05  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix last change in syntax.texi
+
+       * doc/lispref/syntax.texi (Syntax Properties): Fix wording in last
+       change.  (Bug#46274)
+
+2021-02-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Correct the lispref manual about flushing ppss info
+
+       * doc/lispref/syntax.texi (Syntax Properties): Correct the
+       information about flushing the state by copying the text from the
+       doc string (bug#46274).
+
+       (cherry picked from commit ff701ce2b261acce1dfcd1fe137268d87d5eab35)
+
+2021-02-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify how transient indentation modes are exited in the manual
+
+       * doc/emacs/indent.texi (Indentation Commands): Clarify that the
+       other keys don't just exit the transient mode, but are also
+       handled as normally (bug#46296).
+
+2021-02-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Protect against killed buffers in term-emulate-terminal
+
+       * lisp/term.el (term-emulate-terminal): Ensure that the buffer is
+       still alive before selecting it (bug#46323).  This avoids an error
+       when saying `C-x k' in an ansi-term buffer.
+
+2021-02-05  Sean Whitton  <spwhitton@spwhitton.name>
+
+       Fix repeating complex commands
+
+       * lisp/repeat.el (repeat): Fix repeating complex commands
+       (bug#46290).  This makes `M-: date RET C-x z' work again (like in
+       Emacs 21, apparently).
+
+2021-02-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make octave-send-region deactivate the region
+
+       * lisp/progmodes/octave.el (octave-send-region): Deactivate mark
+       after sending the region (bug#32282), since this is how these commands
+       usually work.
+
+2021-02-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Correct the lispref manual about flushing ppss info
+
+       * doc/lispref/syntax.texi (Syntax Properties): Correct the
+       information about flushing the state by copying the text from the
+       doc string (bug#46274).
+
+2021-02-05  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/emacs-lisp/checkdoc.el: Doc fix; don't mention built-ins.
+
+2021-02-05  Stefan Kangas  <stefan@marxist.se>
+
+       Remove some unnecessary references to Emacs 18
+
+       * lisp/progmodes/cmacexp.el:
+       * lisp/progmodes/f90.el:
+       * lisp/shell.el: Doc fix; don't mention Emacs 18.
+
+2021-02-05  Stefan Kangas  <stefan@marxist.se>
+
+       Remove Emacs 19 compat code from dcl-mode.el
+
+       * lisp/progmodes/dcl-mode.el: Doc fix.
+       (dcl-mode-map, dcl-mode): Remove compat code for Emacs 19.
+
+2021-02-05  Stefan Kangas  <stefan@marxist.se>
+
+       Remove Emacs 20 compat code for header-line-format
+
+       * lisp/cedet/semantic/util-modes.el (semantic-stickyfunc-mode):
+       * lisp/erc/erc.el (erc-update-mode-line-buffer):
+       * lisp/ibuffer.el (ibuffer-use-header-line): Remove Emacs 20 compat
+       code; header-line-format is always defined starting with Emacs 21.
+
+2021-02-05  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/color.el: Remove Emacs 23.2 compat code.
+
+       * lisp/textmodes/rst.el (rst-directive): Remove XEmacs compat code.
+
+2021-02-05  Stefan Kangas  <stefan@marxist.se>
+
+       Assume font-lock-mode variable is not void
+
+       * lisp/align.el (align-rules-list):
+       * lisp/cedet/semantic/idle.el
+       (semantic-idle-summary-useful-context-p):
+       * lisp/org/org-table.el (org-table-edit-field):
+       * lisp/org/org.el (org-restart-font-lock):
+       * lisp/progmodes/antlr-mode.el (antlr-language-option-extra):
+       * lisp/progmodes/idlwave.el (idlwave-choose):
+       * lisp/progmodes/sql.el (sql-product-font-lock):
+       * lisp/progmodes/verilog-mode.el
+       (verilog-save-font-no-change-functions, verilog-preprocess):
+       * lisp/vc/cvs-status.el:
+       * lisp/vc/smerge-mode.el (smerge-mode):
+       * lisp/woman.el (woman-decode-buffer): Assume font-lock-mode variable
+       is not void; it is preloaded.
+
+2021-02-05  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Fix the previous change
+
+       * lisp/progmodes/project.el (project-find-regexp):
+       Fix the previous change (project-root is not defined in this version).
+       (project-or-external-find-regexp): Same.
+
+2021-02-04  Harald Jörg  <haj@posteo.de>
+
+       cperl-mode: eliminate dead code
+
+       * lisp/progmodes/cperl-mode.el (cperl-update-syntaxification):
+       Eliminate check for `syntax-propertize-rules` (always true)
+       and eliminate unused first parameter.
+       (cperl-mode): Eliminate obsolete `font-lock-syntactic-keywords`,
+       Eliminate check for `syntax-propertize-rules` (always true).
+       (cperl-fontify-syntaxically): Eliminate call to
+       no-longer-existing function `edebug-backtrace` (bug#46302).
+
+2021-02-04  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid overwriting minibuffer prompt by keystrokes echo
+
+       * src/lread.c (Fread_char, Fread_event, Fread_char_exclusive):
+       Call cancel_echoing to make sure the prompt is not obscured by
+       keystrokes echo.  (Bug#46243)
+
+2021-02-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Deactivate region in `C-c C-r' in python-mode
+
+       * lisp/progmodes/python.el (python-shell-send-region): Deactivate
+       mark after executing (bug#28789).  This is how this command worked
+       in Emacs 24, apparently.
+
+2021-02-04  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix 'window-text-pixel-size' for short spans of text
+
+       * src/xdisp.c (Fwindow_text_pixel_size): Support the use case
+       where FROM and TO belong to the same screen line.  Reported by
+       Yuan Fu <casouri@gmail.com>.
+
+2021-02-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve filling of Emacs Lisp doc strings
+
+       * lisp/emacs-lisp/lisp-mode.el (lisp-fill-paragraph): When filling
+       a Lisp string, try to avoid filling bits that follow it
+       (bug#28937).
+
+2021-02-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow a :variable keyword in define-globalized-minor-mode
+
+       * doc/lispref/modes.texi (Defining Minor Modes): Document it.
+       * lisp/emacs-lisp/easy-mmode.el (define-globalized-minor-mode):
+       Allow specifying a :variable to be used if the underlying mode has
+       a divergent variable to store the state (bug#29081).
+
+2021-02-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix previous ibuffer patch
+
+       * lisp/ibuffer.el (ibuffer-last-sorting-mode): Restore variable
+       removed by mistake in previous change.
+
+2021-02-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make the recency sorting stable when we have inverted sorting
+
+       * lisp/ibuffer.el (recency): Remove.
+       (recency): New macro function so that sorting by recency is
+       stable when inverted sorting is switched on (bug#30129).
+
+2021-02-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Tweak how ibuffer-invert-sorting updates the buffer"
+
+       This reverts commit b8b3263eab688b97530a7bf7d565b084df56ea08.
+
+       This doesn't fix other instances of ibuffer-redisplay
+
+2021-02-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak how ibuffer-invert-sorting updates the buffer
+
+       * lisp/ibuf-ext.el (ibuffer-invert-sorting): Enable calling this
+       function repeatedly with more predictable results (bug#30129).
+
+2021-02-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't ask the user to make a bug report on missing arglists
+
+       * lisp/help-fns.el (help-fns--signature): Don't ask the user to
+       make a bug report (bug#30223) because the symbol may very well be
+       one that the user has defined themselves.
+       (help-fns-function-description-header): Ditto.
+
+2021-02-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify the "Sentinels" node in the lispref manual
+
+       * doc/lispref/processes.texi (Sentinels): Mention "run" and that
+       the strings can be anything (bug#30461).
+
+2021-02-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow eshell to have an "erasedups"-like history
+
+       * lisp/eshell/em-hist.el (eshell-add-input-to-history): Use the
+       new value (bug#30466).
+       (eshell-hist-ignoredups): Allow "erasedups"-like value.
+
+2021-02-04  Robert Pluim  <rpluim@gmail.com>
+
+       Update description of 'tramp-crypt-remove-directory'
+
+       * doc/misc/tramp.texi (Keeping files encrypted): Correct name of
+       function to use to indicate files should no longer be encrypted,
+       and update its description.
+
+2021-02-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Be stricter when going back to the previous node in Info-find-node-2
+
+       * lisp/info.el (Info-find-node-2): When going back to the previous
+       node, be strict (bug#31137) since we have the exact node name.
+
+2021-02-04  Juri Linkov  <juri@linkov.net>
+
+       * lisp/replace.el (occur-rename-buffer): Check for overlay (bug#46268).
+
+       (occur-1): Don't use occur--garbage-collect-revert-args
+       when reverting the Occur buffer with same bufs.
+
+2021-02-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix epg filtering out keys that contain revoked IDs
+
+       * lisp/epg.el (epg--filter-revoked-keys): Only filter out the
+       revoked user ids, not the entire key that contains revoked user
+       ids (bug#46138).
+
+2021-02-04  Stefan Kangas  <stefan@marxist.se>
+
+       Don't set removed variable facemenu-unlisted-faces
+
+       * lisp/vc/ediff-init.el (ediff-hide-face): Redefine as obsolete
+       function alias for 'ignore'; the variable 'facemenu-unlisted-faces'
+       was removed in Emacs 22.  Remove all calls.
+
+       * lisp/mh-e/mh-e.el: Add comment saying that the variable
+       'facemenu-unlisted-faces' is removed.
+
+2021-02-04  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/man.el (Man-notify-method): Remove Emacs 19.28 compat code.
+
+2021-02-04  Stefan Kangas  <stefan@marxist.se>
+
+       Use require instead of boundp+load-library in double.el
+
+       * lisp/double.el (isearch): Use require instead of
+       boundp+load-library.
+
+2021-02-04  Stefan Kangas  <stefan@marxist.se>
+
+       Remove some unnecessary references to Emacs 19
+
+       * lisp/emacs-lisp/elp.el:
+       * lisp/mouse-copy.el:
+       * lisp/mouse-drag.el:
+       * lisp/progmodes/simula.el (simula-mode-map):
+       * lisp/term.el (term-matching-input-from-input-string):
+       * lisp/vcursor.el: Doc fix; don't mention Emacs 19.
+
+2021-02-04  Stefan Kangas  <stefan@marxist.se>
+
+       Remove XEmacs compat code from edebug.el
+
+       * lisp/emacs-lisp/edebug.el (edebug-window-live-p, edebug-mark):
+       Make obsolete.  Update callers.
+
+2021-02-04  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Bind default-directory to the project root
+
+       * lisp/progmodes/project.el (project-find-regexp):
+       Bind default-directory to the project root, to save this value
+       in the resulting buffer (esp. if the project selector was used,
+       (https://lists.gnu.org/archive/html/emacs-devel/2021-02/msg00140.html).
+       (project-or-external-find-regexp): Same.
+
+2021-02-03  Andrea Corallo  <akrl@sdf.org>
+
+       Remove `system-configuration' from eln filename
+
+       * src/comp.c (hash_native_abi): Remove `system-configuration'
+       from eln filename. Add `system-configuration' and
+       `emacs-version' into `comp-abi-hash'.
+
+2021-02-03  Andrea Corallo  <akrl@sdf.org>
+
+       Short eln filename hashes
+
+       * src/comp.c (HASH_LENGTH): New macro.
+       (comp_hash_string, comp_hash_source_file): Trim the hash before
+       returning.
+
+2021-02-03  Michael Albinus  <michael.albinus@gmx.de>
+
+       Tramp code cleanup
+
+       * lisp/net/tramp.el (tramp-signal-hook-function)
+       (tramp-handle-access-file, tramp-handle-copy-directory)
+       (tramp-handle-directory-files, tramp-handle-file-local-copy)
+       (tramp-handle-insert-file-contents, tramp-handle-load):
+       * lisp/net/tramp-adb.el 
(tramp-adb-handle-directory-files-and-attributes)
+       (tramp-adb-handle-make-directory)
+       (tramp-adb-handle-file-local-copy, tramp-adb-handle-copy-file)
+       (tramp-adb-handle-rename-file):
+       * lisp/net/tramp-crypt.el (tramp-crypt-do-copy-or-rename-file)
+       (tramp-crypt-handle-directory-files)
+       (tramp-crypt-handle-make-directory):
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-dbus-event-error)
+       (tramp-gvfs-do-copy-or-rename-file)
+       (tramp-gvfs-handle-make-directory):
+       * lisp/net/tramp-rclone.el (tramp-rclone-do-copy-or-rename-file)
+       (tramp-rclone-handle-directory-files):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-make-symbolic-link)
+       (tramp-sh-handle-directory-files-and-attributes)
+       (tramp-sh-handle-file-name-all-completions)
+       (tramp-sh-handle-copy-directory, tramp-do-copy-or-rename-file)
+       (tramp-sh-handle-make-directory)
+       (tramp-sh-handle-file-local-copy)
+       (tramp-sh-inotifywait-process-filter):
+       * lisp/net/tramp-smb.el (tramp-smb-handle-copy-directory)
+       (tramp-smb-handle-copy-file, tramp-smb-handle-directory-files)
+       (tramp-smb-handle-file-local-copy)
+       (tramp-smb-handle-make-directory, tramp-smb-handle-rename-file):
+       * lisp/net/tramp-sudoedit.el (tramp-sudoedit-do-copy-or-rename-file):
+       Unify error report.
+
+       * lisp/net/tramp-adb.el (tramp-adb-file-name-handler): Sync args
+       with other `tramp-*-file-name-handler'.
+
+       * lisp/net/tramp-compat.el (tramp-error): Declare.
+       (tramp-compat-file-missing): New defsubst.
+
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-do-copy-or-rename-file):
+       Handle volatile files.
+       (tramp-gvfs-set-attribute): New defun.
+       (tramp-gvfs-handle-set-file-modes)
+       (tramp-gvfs-handle-set-file-times)
+       (tramp-gvfs-handle-set-file-uid-gid): Use it.
+
+       * lisp/net/tramp-sh.el (tramp-do-copy-or-rename-file):
+       Use `msg-operation'.
+
+       * lisp/net/tramp-smb.el (tramp-smb-handle-insert-directory):
+       Remove superfluous `format:
+       (tramp-smb-maybe-open-connection): Simplify loop.
+
+       * lisp/net/tramp.el (tramp-handle-file-truename): Drop volume letter 
from
+       symlinked files.
+
+       * test/lisp/net/tramp-tests.el (tramp--test-gdrive-p): New defun.
+       (tramp--test-nextcloud-p): Remove.
+       (tramp-test40-special-characters-with-ls): Do not skip on MS Windows.
+       (tramp-test41-utf8): Skip if needed.
+
+2021-02-03  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       7355209f53 (origin/emacs-27) * lisp/window.el (recenter-top-bottom): ...
+       dc78f8a4ea (emacs-27) url-http.el: Special-case NTLM authentication
+       85b0137858 * lisp/isearch.el (isearch-lazy-highlight): Fix defcustom ...
+       cbeda21083 Sync latest SKK-JISYO.L
+
+2021-02-03  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       9c75434173 Fix build failure on macOS 10.7 (bug#46036)
+       ca44ea18ef Improve documentation of auto-resize-tool/tab-bars
+
+2021-02-03  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       74a71c41e0 (tag: emacs-27.1.91) Update files for 27.1.91 pretest
+
+       # Conflicts:
+       #       ChangeLog.3
+       #       etc/AUTHORS
+       #       lisp/ldefs-boot.el
+
+2021-02-03  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make backslash characters no longer escape in `f90-mode'
+
+       * lisp/progmodes/f90.el (f90-backslash-not-special): Make obsolete
+       (bug#32766).
+       (f90-mode-syntax-table): Make the backslash be a normal
+       (non-escape) character, which is the default since about 2007 (and
+       F2K): https://gcc.gnu.org/bugzilla/show_bug.cgi?id=34203
+
+2021-02-03  Wilson Snyder  <wsnyder@wsnyder.org>
+
+       Update lisp/progmodes/verilog-mode.el
+
+       * lisp/progmodes/verilog-mode.el: Cleanup compile-time warning
+       suppression.  Use underscore for unused arguments and other style
+       cleanups.  Use '# for function references.  By Stefan Monnier.
+       (verilog-auto-reset, verilog-sig-tieoff):
+       Fix AUTORESET '0 (#1714). Reported by Paul Adams.
+       (verilog-simplify-range-expression):
+       Fix AUTOWIRE simplifying X/Y where there is a remainder (#1712).
+       Reported by Joachim Lechner.
+       (verilog-read-sub-decls-expr):
+       Fix multiplication in multidimensional AUTOINST output (#1698).
+       Reported by alanamckee.
+       (verilog-at-constraint-p, verilog-at-streaming-op-p, 
verilog-streaming-op-re):
+       Add streaming operator support (#1692) (#1516),
+       (verilog-auto-assign-modport, verilog-auto-inout-modport):
+       Support adding prefix to AUTOASSIGNMODPORT and AUTOINOUTMODPORT (#1690).
+       (verilog-signals-matching-dir-re):
+       Fix error when matching regexp with 2D packed memory.
+       Reported by Chris DeMarco.
+       (verilog-declaration-core-re): Allow parameter
+       declaration statements to align like any other declaration (#1683).
+       Suggested by Vinam Arora.
+       (verilog-auto-inout, verilog-auto-inout-in)
+       (verilog-auto-inout-module, verilog-auto-input, verilog-auto-inst)
+       (verilog-auto-inst-param, verilog-auto-output-every)
+       (verilog-signals-matching-regexp)
+       (verilog-signals-not-matching-regexp):
+       When "?!" is at the front of a signal-matching regexp, invert it.
+       (verilog-declaration-varname-matcher)
+       (verilog-highlight-max-lookahead, verilog-mode)
+       (verilog-single-declaration-end) (verilog-font-lock-keywords-1):
+       Improve syntax highlighting in declaration statements, and support
+       multi-line declarations, #1681.  Reported by Vinam Arora.
+
+2021-02-02  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: Prevent "const" inside an identifier being recognized as the 
keyword
+
+       This fixes bug #45560.
+
+       * lisp/progmodes/cc-engine.el (c-forward-declarator)
+       (c-forward-decl-or-cast-1): Amend certain regexp match numbers on 
account of
+       the change below.  Surround some looking-at calls with save-match-data.
+
+       * lisp/progmodes/cc-langs.el (c-type-decl-prefix-keywords-key): New lang
+       const.
+       (c-type-decl-prefix-key): Reformulate to match operators and keywords
+       separately, using the new lang const (above).
+
+2021-02-02  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/gnus/gnus-art.el: Fix misuse of `standard-value`.
+
+       * lisp/custom.el (custom--standard-value): New function.
+
+       * lisp/gnus/gnus-art.el: (gnus-article-browse-html-parts)
+       (gnus-article-browse-html-article):
+       * lisp/dired-aux.el (dired-do-find-regexp-and-replace):
+       * lisp/emacs-lisp/package-x.el (package-upload-buffer-internal):
+       * lisp/startup.el (command-line): Use it.
+
+2021-02-02  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/gnus/gnus-group.el: Fix a regression due to lexical scoping
+
+       (gnus-group-highlight): Improve docstring.
+       (gnus-group-update-eval-form): Add `group` and `method` to the vars
+       provided to `eval`.
+
+2021-02-02  Eli Zaretskii  <eliz@gnu.org>
+
+       * lisp/window.el (recenter-top-bottom): Clarify doc string.
+
+2021-02-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Handle errors in `comint-strip-ctrl-m' in some cases
+
+       * lisp/comint.el (comint-strip-ctrl-m): Don't signal errors when
+       used noninteractively (bug#33115).
+
+2021-02-02  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/lisp-mode.el (lisp-mode): Also set `comment-end-skip`
+
+2021-02-02  chuntaro  <chuntaro@sakura-games.jp>  (tiny change)
+
+       Fix |# fontification in lisp-mode
+
+       * lisp/emacs-lisp/lisp-mode.el (lisp-mode): Give the |# the
+       correct (font-lock-comment-delimited-face) face (bug#39820).
+
+2021-02-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Have `dired-mode' refer to Customize instead of listing some variables
+
+       * lisp/dired.el (dired-mode): Punt to Customize instead of listing
+       some of the dired variables (bug#46239).
+
+2021-02-02  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer defvar-local in remaining libraries
+
+       * lisp/align.el (align-mode-rules-list)
+       (align-mode-exclude-rules-list):
+       * lisp/bookmark.el (bookmark-current-bookmark)
+       (bookmark-annotation-name)
+       (bookmark--annotation-from-bookmark-list):
+       * lisp/calc/calc-embed.el (calc-embedded-all-active)
+       (calc-embedded-some-active):
+       * lisp/comint.el (comint-password-function):
+       * lisp/completion.el (completion-syntax-table):
+       * lisp/dframe.el (dframe-track-mouse-function)
+       (dframe-help-echo-function, dframe-mouse-click-function)
+       (dframe-mouse-position-function, dframe-timer)
+       (dframe-attached-frame, dframe-controlled):
+       * lisp/ehelp.el (electric-help-orig-major-mode):
+       * lisp/eshell/esh-util.el (eshell-path-env):
+       * lisp/expand.el (expand-pos, expand-index, expand-point):
+       * lisp/face-remap.el (text-scale-mode-remapping)
+       (text-scale-mode-lighter, text-scale-mode-amount)
+       (text-scale-remap-header-line, buffer-face-mode-remapping):
+       * lisp/ffap.el (ffap-menu-alist):
+       * lisp/files-x.el (connection-local-variables-alist):
+       * lisp/foldout.el (foldout-fold-list, foldout-mode-line-string):
+       * lisp/follow.el (follow-start-end-invalid):
+       * lisp/forms.el (forms--mode-setup):
+       * lisp/gnus/message.el (message-cross-post-old-target)
+       (message-options):
+       * lisp/help-mode.el (help-xref-stack, help-xref-forward-stack)
+       (help-xref-stack-item, help-xref-stack-forward-item):
+       * lisp/hexl.el (hexl-mode--old-var-vals, hexl-ascii-overlay):
+       * lisp/hilit-chg.el (hilit-chg-string):
+       * lisp/ido.el (ido-eoinput):
+       * lisp/imenu.el (imenu-generic-expression)
+       (imenu-create-index-function, imenu-default-goto-function)
+       (imenu-prev-index-position-function)
+       (imenu-extract-index-name-function, imenu-name-lookup-function)
+       (imenu-syntax-alist, imenu-case-fold-search):
+       * lisp/jka-compr.el (jka-compr-really-do-compress):
+       * lisp/language/ethio-util.el (ethio-prefer-ascii-space):
+       * lisp/leim/quail/hangul.el (hangul-input-method-help-text):
+       * lisp/leim/quail/japanese.el (quail-japanese-package-saved):
+       * lisp/linum.el (linum-overlays, linum-available):
+       * lisp/man.el (Man-original-frame, Man-arguments, Man--sections)
+       (Man--refpages, Man-page-list, Man-current-page)
+       (Man-page-mode-string):
+       * lisp/pcomplete.el (pcomplete-current-completions)
+       (pcomplete-last-completion-length)
+       (pcomplete-last-completion-stub, pcomplete-last-completion-raw)
+       (pcomplete-last-window-config, pcomplete-window-restore-timer):
+       * lisp/reveal.el (reveal-open-spots, reveal-last-tick):
+       * lisp/ruler-mode.el (ruler-mode):
+       * lisp/scroll-lock.el (scroll-lock-preserve-screen-pos-save):
+       * lisp/server.el (server-buffer-clients, server-existing-buffer):
+       * lisp/tab-line.el (tab-line-exclude):
+       * lisp/tar-mode.el (tar-data-buffer, tar-data-swapped):
+       * lisp/thumbs.el (thumbs-current-tmp-filename)
+       (thumbs-current-image-filename, thumbs-extra-images)
+       (thumbs-image-num, thumbs-buffer, thumbs-marked-list):
+       * lisp/tutorial.el (tutorial--point-before-chkeys)
+       (tutorial--point-after-chkeys, tutorial--lang):
+       * lisp/url/url-vars.el (url-current-object)
+       (url-current-mime-headers, url-current-lastloc):
+       * lisp/view.el (view-mode, view-old-buffer-read-only)
+       (view-old-Helper-return-blurb, view-page-size)
+       (view-half-page-size, view-last-regexp, view-return-to-alist)
+       (view-exit-action, view-overlay):
+       * lisp/wid-edit.el (widget-global-map, widget-field-new)
+       (widget-field-list, widget-field-last, widget-field-was):
+       * lisp/woman.el (woman-imenu-done): Prefer defvar-local.
+
+2021-02-02  Stefan Kangas  <stefan@marxist.se>
+
+       Remove redundant :group args in play/*.el
+
+       * lisp/play/bubbles.el:
+       * lisp/play/cookie1.el:
+       * lisp/play/decipher.el:
+       * lisp/play/dunnet.el:
+       * lisp/play/gametree.el:
+       * lisp/play/gomoku.el:
+       * lisp/play/hanoi.el: Remove redundant :group args.
+
+2021-02-02  Sean Whitton  <spwhitton@spwhitton.name>
+
+       Bind 'revert-buffer' to 'C-x g' globally
+
+       * lisp/bindings.el: Bind 'revert-buffer' to 'C-x g' globally.
+       * doc/emacs/files.texi: Replace 'M-x revert-buffer' with 'C-x g'.
+       * etc/NEWS: Document the change (bug#46151).
+
+2021-02-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix up invalid_syntax error signalling
+
+       * src/lread.c (invalid_syntax_lisp): Instead of putting the
+       line/column in a string, signal an error containing the numbers as
+       data.  This allows for easier post-processing and is how other
+       similar errors (like (forward-sexp 1)) do it.
+
+2021-02-02  Dmitry Gutov  <dgutov@yandex.ru>
+
+       ruby-syntax-propertize: Fix certain cases following ::
+
+       * lisp/progmodes/ruby-mode.el (ruby-syntax-propertize):
+       Make sure to backtrack if the "symbols with special characters"
+       rule is aborted because of preceding colon.
+
+2021-02-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make syntax errors say the line/column they appear at
+
+       * src/lisp.h: Add count_lines prototype.
+       * src/lread.c (invalid_syntax_lisp): New function (bug#36970).
+       (invalid_syntax): Extend function to take a readcharfun parameter.
+       (read_emacs_mule_char, character_name_to_code): Pass in.
+       (read_escape, invalid_radix_integer, read1): Ditto.
+
+       * src/xdisp.c (count_lines): Add a more succinct shim over
+       display_count_lines.
+
+2021-02-01  Stefan Kangas  <stefan@marxist.se>
+
+       * test/src/minibuf-tests.el (test-inhibit-interaction): Fix test.
+
+2021-02-01  Stefan Kangas  <stefan@marxist.se>
+
+       Remove another variable obsolete since Emacs 23.2
+
+       * src/keymap.c (syms_of_keymap, Fdefine_key):
+       * lisp/subr.el (define-key-rebound-commands): Remove variable obsolete
+       since Emacs 23.2.
+
+2021-02-01  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/hi-lock.el (hi-lock-mode): Doc fix; don't mention Emacs 21.
+
+2021-02-01  Stefan Kangas  <stefan@marxist.se>
+
+       Make XEmacs compat alias obsolete in allout-widgets.el
+
+       * lisp/allout-widgets.el (allout-frame-property): Redefine compat
+       alias as obsolete function alias for 'frame-parameter'.
+       (allout-fetch-icon-image): Update caller.
+
+2021-02-01  Stefan Kangas  <stefan@marxist.se>
+
+       Redefine two functions as regular defuns
+
+       * lisp/dframe.el (dframe-popup-kludge, dframe-mouse-event-p):
+       Redefine as regular defun.
+
+2021-02-01  Stefan Kangas  <stefan@marxist.se>
+
+       Make two eshell aliases obsolete
+
+       * lisp/eshell/esh-util.el (eshell-user-name): Redefine as obsolete
+       function alias for 'user-login-name'.
+       (eshell-copy-tree): Redefine as obsolete function alias for
+       'copy-tree'.
+       * lisp/eshell/esh-cmd.el (eshell-do-eval): Don't use above
+       obsolete alias.
+
+2021-02-01  Stefan Kangas  <stefan@marxist.se>
+
+       Add cross-references to defvar-local
+
+       * src/data.c (Fmake_variable_buffer_local):
+       * src/eval.c (Fdefvar): Add cross-references to 'defvar-local'.
+
+2021-02-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix indentation of non-comment HTML with -- in it
+
+       * lisp/textmodes/sgml-mode.el (sgml-comment-indent-new-line): Only
+       indent as if we're in a comment if syntax-ppss says that we're in
+       a comment (bug#36227).
+
+2021-02-01  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/eshell/em-cmpl.el (eshell--complete-commands-list): Fix last fix
+
+       Complete `*firef` to `*firefox` rather than to `firefox`.
+
+2021-02-01  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/eshell/em-cmpl.el: Try and fix bug#41423
+
+       (eshell--complete-commands-list): Rename from 
`eshell-complete-commands-list`.
+       Return a (dynamic) completion table rather than a list of completions.
+       Use `dolist` and `push`.
+
+2021-02-01  Thomas Fitzsimmons  <fitzsim@fitzsim.org>
+
+       url-http.el: Special-case NTLM authentication
+
+       * lisp/url/url-http.el (url-http-handle-authentication): Do not
+       signal an error on NTLM authorization strings.  (Bug#43566)
+
+2021-02-01  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * admin/*.el: Use lexical-binding
+
+       * admin/admin.el: Use lexical-binding.
+       (manual-misc-manuals): Pass a limit to `looking-back`.
+       (reminder-for-release-blocking-bugs): Don't use `_` for a real variable.
+
+       * admin/authors.el: Use lexical-binding.
+       (authors-disambiguate-file-name): Remove unused var `parent`.
+
+       * admin/cus-test.el:
+       * admin/find-gc.el:
+       * admin/gitmerge.el: Use lexical-binding.
+
+2021-01-31  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Merge remote-tracking branch 'origin/scratch/lexical-gnus' into trunk
+
+2021-01-31  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/gnus/gnus-group.el: Defvar all the `gnus-tmp-*` vars
+
+       These were collected via
+
+           sed -n -e 's/.*\(gnus-tmp-[^     ()]*\).*/(defvar \1)/p' \
+               lisp/gnus/gnus-group.el
+
+2021-01-31  Juri Linkov  <juri@linkov.net>
+
+       * lisp/isearch.el (isearch-lazy-highlight): Fix defcustom type 
(bug#46208)
+
+2021-01-31  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer defvar-local in preloaded files
+
+       * lisp/abbrev.el:
+       * lisp/bindings.el (mode-line-mule-info, mode-line-modified)
+       (mode-line-remote, mode-line-process)
+       (mode-line-buffer-identification):
+       * lisp/buff-menu.el (Buffer-menu-files-only):
+       * lisp/files.el (buffer-file-number, buffer-file-read-only)
+       (local-write-file-hooks, write-contents-functions)
+       (file-local-variables-alist, dir-local-variables-alist)
+       (save-buffer-coding-system, buffer-save-without-query):
+       * lisp/font-core.el (font-lock-defaults):
+       * lisp/font-lock.el (font-lock-keywords-case-fold-search)
+       (font-lock-syntactically-fontified)
+       (font-lock-extend-after-change-region-function)
+       (font-lock-extend-region-functions, font-lock-major-mode):
+       * lisp/menu-bar.el (list-buffers-directory):
+       * lisp/simple.el (next-error--message-highlight-overlay)
+       (next-error-buffer, next-error-function)
+       (next-error-move-function, goto-line-history)
+       (minibuffer-default-add-done, undo-extra-outer-limit):
+       * lisp/tab-bar.el (tab-switcher-column):
+       * lisp/term/ns-win.el (ns-select-overlay):
+       * lisp/window.el (window-size-fixed, window-area-factor)
+       (window-group-start-function, window-group-end-function)
+       (set-window-group-start-function)
+       (recenter-window-group-function)
+       (pos-visible-in-window-group-p-function)
+       (selected-window-group-function)
+       (move-to-window-group-line-function): Prefer defvar-local.
+
+2021-01-31  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer defvar-local in mail/*.el
+
+       * lisp/mail/emacsbug.el (report-emacs-bug-send-command)
+       (report-emacs-bug-send-hook):
+       * lisp/mail/reporter.el (reporter-initial-text):
+       * lisp/mail/supercite.el (sc-mail-info, sc-attributions):
+       * lisp/mail/rmail.el (rmail-buffer-swapped, rmail-view-buffer):
+       Prefer defvar-local.
+
+2021-01-31  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer defvar-local in progmodes/*.el
+
+       This skips libraries that might want compatibility with Emacs 24.2.
+
+       * lisp/progmodes/compile.el (compilation-auto-jump-to-next)
+       (compilation--previous-directory-cache, compilation--parsed)
+       (compilation-gcpro):
+       * lisp/progmodes/cpp.el (cpp-overlay-list, cpp-edit-buffer)
+       (cpp-parse-symbols, cpp-edit-symbols):
+       * lisp/progmodes/ebnf2ps.el (ebnf-eps-upper-x, ebnf-eps-upper-y)
+       (ebnf-eps-prod-width, ebnf-eps-max-height, ebnf-eps-max-width):
+       * lisp/progmodes/f90.el (f90-cache-position):
+       * lisp/progmodes/gud.el (gud-marker-acc):
+       * lisp/progmodes/js.el (js--quick-match-re)
+       (js--quick-match-re-func, js--cache-end, js--last-parse-pos)
+       (js--state-at-last-parse-pos, js--tmp-location):
+       * lisp/progmodes/octave.el (inferior-octave-directory-tracker-resync):
+       * lisp/progmodes/sh-script.el (sh-header-marker): Prefer defvar-local.
+
+2021-01-31  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer defvar-local in textmodes/*.el
+
+       This skips libraries that might want compatibility with Emacs 24.2.
+
+       * lisp/textmodes/artist.el (artist-curr-go)
+       (artist-line-char-set, artist-line-char, artist-fill-char-set)
+       (artist-fill-char, artist-erase-char, artist-default-fill-char)
+       (artist-draw-region-min-y, artist-draw-region-max-y)
+       (artist-borderless-shapes):
+       * lisp/textmodes/css-mode.el (css--at-ids, css--bang-ids)
+       (css--nested-selectors-allowed):
+       * lisp/textmodes/enriched.el (enriched-old-bindings):
+       * lisp/textmodes/flyspell.el (flyspell-generic-check-word-predicate)
+       (flyspell-consider-dash-as-word-delimiter-flag)
+       (flyspell-dash-dictionary, flyspell-dash-local-dictionary)
+       (flyspell-word-cache-start, flyspell-word-cache-end)
+       (flyspell-word-cache-word, flyspell-word-cache-result)
+       (flyspell-changes, flyspell-auto-correct-pos)
+       (flyspell-auto-correct-region, flyspell-auto-correct-ring)
+       (flyspell-auto-correct-word):
+       * lisp/textmodes/ispell.el (ispell-local-dictionary-overridden)
+       (ispell-local-pdict, ispell-buffer-session-localwords):
+       * lisp/textmodes/refill.el (refill-ignorable-overlay)
+       (refill-doit):
+       * lisp/textmodes/sgml-mode.el (html--buffer-classes-cache)
+       (html--buffer-ids-cache):
+       * lisp/textmodes/table.el (table-mode-indicator):
+       * lisp/textmodes/tex-mode.el (tex-send-command-modified-tick):
+       * lisp/textmodes/two-column.el (2C-autoscroll-start, 2C-mode):
+       Prefer defvar-local.
+
+2021-01-31  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer defvar-local in cedet
+
+       * lisp/cedet/ede.el (ede-object-root-project)
+       (ede-object-project, ede-object):
+       * lisp/cedet/mode-local.el (mode-local-symbol-table):
+       * lisp/cedet/semantic.el (semantic--parse-table)
+       (semantic-symbol->name-assoc-list)
+       (semantic-symbol->name-assoc-list-for-type-parts)
+       (semantic-case-fold, semantic--buffer-cache)
+       (semantic-unmatched-syntax-cache)
+       (semantic-unmatched-syntax-cache-check, semantic-parser-name)
+       (semantic--completion-cache, semantic-parse-tree-state)
+       (semantic-init-mode-hook, semantic-parser-warnings):
+       * lisp/cedet/semantic/bovine.el
+       (semantic-bovinate-nonterminal-check-obarray):
+       * lisp/cedet/semantic/complete.el (semantic-collector-per-buffer-list):
+       * lisp/cedet/semantic/ctxt.el (semantic-command-separation-character)
+       (semantic-function-argument-separation-character):
+       * lisp/cedet/semantic/db-find.el (semanticdb-find-lost-includes)
+       (semanticdb-find-scanned-include-tags):
+       * lisp/cedet/semantic/db.el (semanticdb-new-database-class)
+       (semanticdb-default-find-index-class)
+       (semanticdb-current-database, semanticdb-current-table)
+       (semanticdb-project-system-databases)
+       (semanticdb-out-of-buffer-create-table-fcn):
+       * lisp/cedet/semantic/debug.el (semantic-debug-parser-source)
+       (semantic-debug-parser-class)
+       (semantic-debug-parser-debugger-source):
+       * lisp/cedet/semantic/dep.el (semantic-dependency-include-path)
+       (semantic-dependency-system-include-path):
+       * lisp/cedet/semantic/format.el (semantic-function-argument-separator)
+       (semantic-format-parent-separator):
+       * lisp/cedet/semantic/fw.el (semantic-new-buffer-fcn-was-run):
+       * lisp/cedet/semantic/grammar.el (semantic-grammar-macros)
+       (semantic--grammar-macros-regexp-1)
+       (semantic--grammar-macros-regexp-2):
+       * lisp/cedet/semantic/idle.el (semantic-idle-scheduler-mode):
+       * lisp/cedet/semantic/imenu.el (semantic-imenu-expandable-tag-classes):
+       * lisp/cedet/semantic/lex-spp.el
+       (semantic-lex-spp-macro-symbol-obarray)
+       (semantic-lex-spp-project-macro-symbol-obarray)
+       (semantic-lex-spp-dynamic-macro-symbol-obarray)
+       (semantic-lex-spp-dynamic-macro-symbol-obarray-stack):
+       * lisp/cedet/semantic/lex.el (semantic-flex-keywords-obarray)
+       (semantic-lex-types-obarray, semantic-lex-analyzer)
+       (semantic-lex-syntax-modifications, semantic-lex-syntax-table)
+       (semantic-lex-comment-regex, semantic-lex-number-expression)
+       (semantic-lex-depth, semantic-flex-extensions)
+       (semantic-flex-syntax-modifications, semantic-ignore-comments)
+       (semantic-flex-enable-newlines, semantic-flex-enable-whitespace)
+       (semantic-flex-enable-bol, semantic-number-expression)
+       (semantic-flex-depth):
+       * lisp/cedet/semantic/senator.el (senator-isearch-semantic-mode):
+       * lisp/cedet/semantic/sort.el
+       (semantic-orphaned-member-metaparent-type):
+       * lisp/cedet/semantic/tag.el (semantic-tag-expand-function):
+       * lisp/cedet/semantic/util-modes.el (semantic-show-parser-state-string)
+       (semantic-stickyfunc-sticky-classes)
+       (semantic-highlight-func-ct-overlay):
+       * lisp/cedet/semantic/util.el
+       (semantic-type-relation-separator-character)
+       (semantic-equivalent-major-modes):
+       * lisp/cedet/semantic/wisent.el (wisent-error-function)
+       (wisent-lexer-function): Prefer defvar-local.
+
+2021-01-31  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer defvar-local in net/*.el
+
+       * lisp/net/browse-url.el (browse-url-temp-file-name):
+       * lisp/net/rcirc.el (rcirc-ignore-buffer-activity-flag)
+       (rcirc-low-priority-flag, rcirc-parent-buffer)
+       (rcirc-activity-types, rcirc-last-sender):
+       * lisp/net/soap-inspect.el (soap-inspect-previous-items)
+       (soap-inspect-current-item):
+       * lisp/net/telnet.el (telnet-remote-echoes)
+       (telnet-interrupt-string, telnet-count): Prefer defvar-local.
+
+2021-01-31  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer defvar-local in vc/*.el
+
+       * lisp/vc/ediff-diff.el (ediff-whitespace, ediff-word-1)
+       (ediff-word-2, ediff-word-3, ediff-word-4):
+       * lisp/vc/ediff-init.el (ediff-defvar-local):
+       * lisp/vc/smerge-mode.el (smerge-check-cache):
+       * lisp/vc/vc-bzr.el (vc-bzr-annotation-table):
+       * lisp/vc/vc-dispatcher.el (vc-mode-line-hook): Prefer defvar-local.
+
+2021-01-31  Philipp Stephani  <phst@google.com>
+
+       * etc/MACHINES: Document that we support AArch64 with macOS.
+
+2021-01-31  Alan Mackenzie  <acm@muc.de>
+
+       Minimise the time Vminibuffer_list is in an inconsistent state 
(src/minibuf.c)
+
+       src/minibuf.c (get_minibuffer): Move the XSETCAR which writes the new
+       minibuffer into Vminibuffer_list to immediately after the MB's 
creation, so
+       that the list is in a consistent state before calling fundamental-mode 
or
+       minibuffer-inactive-mode.
+
+2021-01-31  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer defvar-local in international/*.el
+
+       * lisp/international/mule-cmds.el (current-input-method)
+       (current-input-method-title, current-transient-input-method)
+       (previous-transient-input-method, input-method-history)
+       (deactivate-current-input-method-function)
+       (describe-current-input-method-function):
+       * lisp/international/mule.el (buffer-file-coding-system-explicit):
+       * lisp/international/quail.el (quail-current-package)
+       (quail-guidance-str, quail-overlay, quail-conv-overlay)
+       (quail-current-key, quail-current-str)
+       (quail-current-translations, quail-current-data):
+       * lisp/international/robin.el (robin-mode)
+       (robin-current-package-name): Prefer defvar-local in
+       international/*.el.
+
+2021-01-31  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer defvar-local in nxml/*.el
+
+       * lisp/nxml/rng-cmpct.el (rng-c-current-token)
+       (rng-c-escape-positions, rng-c-file-name):
+       * lisp/nxml/rng-pttrn.el (rng-current-schema):
+       * lisp/nxml/rng-valid.el (rng-validate-timer)
+       (rng-validate-quick-timer, rng-error-count, rng-message-overlay)
+       (rng-message-overlay-inhibit-point, rng-message-overlay-current)
+       (rng-validate-up-to-date-end, rng-conditional-up-to-date-start)
+       (rng-conditional-up-to-date-end, rng-dtd): Prefer defvar-local.
+
+2021-01-31  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer defvar-local in emacs-lisp/*.el
+
+       * lisp/emacs-lisp/chart.el (chart-local-object):
+       * lisp/emacs-lisp/easy-mmode.el (define-minor-mode)
+       (define-globalized-minor-mode):
+       * lisp/emacs-lisp/edebug.el:
+       * lisp/emacs-lisp/generic.el (generic-font-lock-keywords):
+       * lisp/emacs-lisp/re-builder.el (reb-regexp, reb-regexp-src)
+       (reb-overlays):
+       * lisp/emacs-lisp/syntax.el
+       (syntax-propertize-extend-region-functions): Prefer defvar-local.
+
+2021-01-31  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer defvar-local in allout
+
+       * lisp/allout.el (allout-just-did-undo, allout-mode)
+       (allout-layout, allout-regexp, allout-bullets-string)
+       (allout-bullets-string-len, allout-depth-specific-regexp)
+       (allout-depth-one-regexp, allout-line-boundary-regexp)
+       (allout-bob-regexp, allout-header-subtraction)
+       (allout-plain-bullets-string-len, allout-mode-prior-settings)
+       (allout-outside-normal-auto-fill-function)
+       (allout-encryption-plaintext-sanitization-regexps)
+       (allout-encryption-ciphertext-rejection-regexps)
+       (allout-explicitly-deactivated, allout-recent-prefix-beginning)
+       (allout-recent-prefix-end, allout-recent-depth)
+       (allout-recent-end-of-subtree, allout-post-goto-bullet)
+       (allout-command-counter, allout-this-command-hid-text):
+       * lisp/allout-widgets.el (allout-widgets-mode)
+       (allout-widgets-tally, allout-widgets-mode-inhibit)
+       (allout-inhibit-body-modification-hook)
+       (allout-widgets-changes-record)
+       (allout-widgets-undo-exposure-record)
+       (allout-escaped-prefix-regexp, allout-item-icon-keymap)
+       (allout-item-body-keymap, allout-cue-span-keymap)
+       (allout-widgets-last-decoration-timing)
+       (allout-container-item-widget): Prefer defvar-local.
+
+2021-01-31  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer defvar-local in cua
+
+       * lisp/emulation/cua-base.el (cua-inhibit-cua-keys)
+       (cua--status-string):
+       * lisp/emulation/cua-rect.el (cua--rectangle)
+       (cua--rectangle-overlays): Prefer defvar-local.
+
+2021-01-31  Stefan Kangas  <stefan@marxist.se>
+
+       Obsolete viper-deflocalvar for defvar-local
+
+       * lisp/emulation/viper-init.el (viper-deflocalvar): Make obsolete.
+       Use defvar-local.
+
+       * lisp/emulation/viper-cmd.el (viper--undo-change-group-handle):
+       * lisp/emulation/viper-init.el (viper-vi-intercept-minor-mode)
+       (viper-vi-basic-minor-mode, viper-vi-local-user-minor-mode)
+       (viper-vi-global-user-minor-mode)
+       (viper-vi-state-modifier-minor-mode)
+       (viper-vi-diehard-minor-mode, viper-vi-kbd-minor-mode)
+       (viper-insert-intercept-minor-mode)
+       (viper-insert-basic-minor-mode)
+       (viper-insert-local-user-minor-mode)
+       (viper-insert-global-user-minor-mode)
+       (viper-insert-state-modifier-minor-mode)
+       (viper-insert-diehard-minor-mode, viper-insert-kbd-minor-mode)
+       (viper-replace-minor-mode, viper-emacs-intercept-minor-mode)
+       (viper-emacs-local-user-minor-mode)
+       (viper-emacs-global-user-minor-mode, viper-emacs-kbd-minor-mode)
+       (viper-emacs-state-modifier-minor-mode)
+       (viper-vi-minibuffer-minor-mode)
+       (viper-insert-minibuffer-minor-mode)
+       (viper-automatic-iso-accents, viper-special-input-method)
+       (viper-intermediate-command, viper-began-as-replace)
+       (viper-replace-overlay, viper-last-posn-in-replace-region)
+       (viper-last-posn-while-in-insert-state)
+       (viper-sitting-in-replace, viper-replace-chars-to-delete)
+       (viper-replace-region-chars-deleted, viper-current-state)
+       (viper-cted, viper-current-indent, viper-preserve-indent)
+       (viper-auto-indent, viper-electric-mode, viper-insert-point)
+       (viper-pre-command-point, viper-com-point)
+       (viper-ex-style-motion, viper-ex-style-editing)
+       (viper-ESC-moves-cursor-back, viper-delete-backwards-in-replace)
+       (viper-related-files-and-buffers-ring)
+       (viper-local-search-start-marker, viper-search-overlay)
+       (viper-last-jump, viper-last-jump-ignore)
+       (viper-minibuffer-current-face, viper-minibuffer-overlay):
+       * lisp/emulation/viper-keym.el (viper-vi-local-user-map)
+       (viper-insert-local-user-map, viper-emacs-local-user-map)
+       (viper--key-maps, viper-need-new-vi-local-map)
+       (viper-need-new-insert-local-map)
+       (viper-need-new-emacs-local-map):
+       * lisp/emulation/viper-mous.el (viper-mouse-click-search-noerror)
+       (viper-mouse-click-search-limit):
+       * lisp/emulation/viper-util.el (viper-non-word-characters)
+       (viper-ALPHA-char-class):
+       * lisp/emulation/viper.el: Use defvar-local instead of now obsolete
+       macro viper-deflocalvar.
+
+2021-01-31  Alan Mackenzie  <acm@muc.de>
+
+       Don't attempt to display input method guidance in expired minibuffers
+
+       This caused infinite waits in circumstances involving setting an input 
method
+       in a global minor mode.  This commit fixes bug #45792.
+
+       * lisp/international/quail.el (quail-show-guidance): Test the major 
mode is
+       not minibuffer-inactive-mode before proceding with the function.
+
+2021-01-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       execute-kbd-macro doc string clarification
+
+       * src/macros.c (Fexecute_kbd_macro): Mention that the buffer is
+       (potentially) changed (bug#37396).
+
+2021-01-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make operating-system-release obsolete
+
+       * lisp/subr.el (operating-system-release): Make obsolete
+       (bug#39940).  There are no in-tree usages any more, and the data
+       doesn't seem all that interesting on its own.
+
+2021-01-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Doc string improvements around `default-korean-keyboard'
+
+       * lisp/language/korea-util.el (default-korean-keyboard): Mention
+       "Hangul" here for easier discoverability.
+       (toggle-korean-input-method, quail-hangul-switch-symbol-ksc)
+       (quail-hangul-switch-hanja): Mention the variable.
+
+2021-01-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Improve fontifying of #| ... |# in `lisp-mode'"
+
+       This reverts commit 1275dc4711af77c9c223063dcd149d782d497463.
+
+       Setting comment-end isn't the correct thing to do -- it makes M-; 
insert that string.
+
+2021-01-31  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer defvar-local in play/*.el
+
+       * lisp/play/5x5.el
+       (5x5-grid, 5x5-x-pos, 5x5-y-pos, 5x5-moves, 5x5-cracking):
+       * lisp/play/decipher.el (decipher-alphabet)
+       (decipher-stats-buffer, decipher-undo-list-size)
+       (decipher-undo-list):
+       * lisp/play/gamegrid.el (gamegrid-use-glyphs)
+       (gamegrid-use-color, gamegrid-font, gamegrid-face)
+       (gamegrid-display-options, gamegrid-buffer-width)
+       (gamegrid-buffer-height, gamegrid-blank, gamegrid-timer)
+       (gamegrid-display-mode, gamegrid-display-table)
+       (gamegrid-face-table, gamegrid-buffer-start)
+       (gamegrid-score-file-length):
+       * lisp/play/snake.el (snake-length, snake-velocity-x)
+       (snake-velocity-y, snake-positions, snake-score, snake-paused)
+       (snake-moved-p, snake-velocity-queue):
+       * lisp/play/tetris.el (tetris-shape, tetris-rot)
+       (tetris-next-shape, tetris-n-shapes, tetris-n-rows)
+       (tetris-score, tetris-pos-x, tetris-pos-y, tetris-paused):
+       Prefer defvar-local.
+
+       * lisp/play/5x5.el (5x5-defvar-local): Make obsolete.
+
+2021-01-31  Stefan Kangas  <stefan@marxist.se>
+
+       Remove redundant defvar for artist-mode
+
+       * lisp/textmodes/artist.el (artist-mode): Remove redundant
+       defvar; it is defined by define-minor-mode.
+
+2021-01-31  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer defvar-local in erc
+
+       * lisp/erc/erc-backend.el (erc-server-current-nick)
+       (erc-server-process, erc-session-server, erc-session-connector)
+       (erc-session-port, erc-server-announced-name)
+       (erc-server-version, erc-server-parameters)
+       (erc-server-connected, erc-server-reconnect-count)
+       (erc-server-quitting, erc-server-reconnecting)
+       (erc-server-timed-out, erc-server-banned)
+       (erc-server-error-occurred, erc-server-lines-sent)
+       (erc-server-last-peers, erc-server-last-sent-time)
+       (erc-server-last-ping-time, erc-server-last-received-time)
+       (erc-server-lag, erc-server-filter-data, erc-server-duplicates)
+       (erc-server-processing-p, erc-server-flood-last-message)
+       (erc-server-flood-queue, erc-server-flood-timer)
+       (erc-server-ping-handler):
+       * lisp/erc/erc-capab.el (erc-capab-identify-activated)
+       (erc-capab-identify-sent):
+       * lisp/erc/erc-dcc.el (erc-dcc-byte-count, erc-dcc-entry-data)
+       (erc-dcc-file-name):
+       * lisp/erc/erc-ezbounce.el (erc-ezb-session-list):
+       * lisp/erc/erc-join.el (erc--autojoin-timer):
+       * lisp/erc/erc-netsplit.el (erc-netsplit-list):
+       * lisp/erc/erc-networks.el (erc-network):
+       * lisp/erc/erc-notify.el (erc-last-ison, erc-last-ison-time):
+       * lisp/erc/erc-ring.el (erc-input-ring, erc-input-ring-index):
+       * lisp/erc/erc-stamp.el (erc-timestamp-last-inserted)
+       (erc-timestamp-last-inserted-left)
+       (erc-timestamp-last-inserted-right):
+       * lisp/erc/erc.el (erc-session-password, erc-channel-users)
+       (erc-server-users, erc-channel-topic, erc-channel-modes)
+       (erc-insert-marker, erc-input-marker, erc-last-saved-position)
+       (erc-dbuf, erc-active-buffer, erc-default-recipients)
+       (erc-session-user-full-name, erc-channel-user-limit)
+       (erc-channel-key, erc-invitation, erc-channel-list)
+       (erc-bad-nick, erc-logged-in, erc-default-nicks)
+       (erc-nick-change-attempt-count, erc-send-input-line-function)
+       (erc-channel-new-member-names, erc-channel-banlist)
+       (erc-current-message-catalog): Prefer defvar-local.
+
+2021-01-31  Stefan Kangas  <stefan@marxist.se>
+
+       Remove redundant requires of 'derived'
+
+       * lisp/net/newst-backend.el (derived):
+       * lisp/net/newst-plainview.el (derived):
+       * lisp/play/gametree.el (derived):
+       * lisp/textmodes/less-css-mode.el (derived): Remove redundant require;
+       'define-derived-mode' is autoloaded.
+
+2021-01-31  Stefan Kangas  <stefan@marxist.se>
+
+       Sync latest SKK-JISYO.L
+
+       * leim/SKK-DIC/SKK-JISYO.L: Sync to current upstream version.
+
+2021-01-31  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Recompute mode-lines when marking conflicts resolved
+
+       * lisp/vc/vc.el (vc-mark-resolved):
+       Recompute the mode lines of the affected files.
+
+2021-01-31  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/gnus: Use closures now that we activated `lexical-binding`
+
+       * lisp/gnus/nnml.el (nnml-request-accept-article):
+       * lisp/gnus/nnmairix.el (nnmairix-request-marks):
+       * lisp/gnus/nnmail.el (nnmail-get-new-mail-1):
+       * lisp/gnus/mm-view.el (mm-inline-image)
+       (mm-inline-text-html-render-with-w3m, mm-inline-text)
+       (mm-insert-inline, mm-inline-message):
+       * lisp/gnus/mm-partial.el (mm-inline-partial):
+       * lisp/gnus/mm-archive.el (mm-archive-dissect-and-inline):
+       * lisp/gnus/gnus-util.el (gnus-create-info-command):
+       * lisp/gnus/gnus-topic.el (gnus-topic-edit-parameters)
+       (gnus-topic-sort-topics-1):
+       * lisp/gnus/gnus-sum.el (gnus-summary-edit-article):
+       * lisp/gnus/gnus-srvr.el (gnus-server-edit-server):
+       * lisp/gnus/gnus-msg.el (gnus-inews-make-draft)
+       (gnus-inews-add-send-actions, gnus-summary-cancel-article)
+       (gnus-summary-supersede-article, gnus-summary-resend-message)
+       (gnus-configure-posting-styles):
+       * lisp/gnus/gnus-kill.el (gnus-execute):
+       * lisp/gnus/gnus-html.el (gnus-html-wash-images):
+       * lisp/gnus/gnus-group.el (gnus-group-edit-group)
+       (gnus-group-nnimap-edit-acl):
+       * lisp/gnus/gnus-draft.el (gnus-draft-edit-message, gnus-draft-setup):
+       * lisp/gnus/gnus-art.el (gnus-article-edit-part)
+       (gnus-mm-display-part, gnus-article-edit):
+       * lisp/gnus/gnus-agent.el (gnus-category-edit-predicate)
+       (gnus-category-edit-score, gnus-category-edit-groups):
+       Use closures instead of `(lambda ...).
+
+       * lisp/gnus/nnoo.el (noo--defalias): New function.
+       (nnoo-import-1, nnoo-define-skeleton-1): Use it to avoid `eval`.
+
+2021-01-31  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/gnus: Use lexical-binding in all the files
+
+       * lisp/gnus/gnus-group.el (features): Use `dlet`.
+       (gnus-tmp-level, gnus-tmp-marked, gnus-tmp-group): Declare vars.
+       (gnus-group-insert-group-line): Bind dynbound vars via `let` rather
+       than as formal args.  Bind `number` as dynbound.
+       (gnus-visual, gnus-score-find-score-files-function)
+       (gnus-home-score-file, gnus-apply-kill-hook)
+       (gnus-summary-expunge-below): Declare vars.
+       (gnus-group-restart, gnus-group-list-plus): Fix `interactive` spec
+       since the arg is unused.
+
+       * lisp/gnus/mail-source.el (mail-source-bind, mail-source-bind-common):
+       Use `dlet` and suppress the warnings about the non-prefixed dynbound 
vars.
+       (mail-source-set-1): Remove unused var `auth-info`.
+       (mail-source-call-script): Remove unused var `background`.
+       (mail-source-fetch-pop, mail-source-check-pop): Bind pop3 vars with 
`dlet`.
+
+       * lisp/gnus/gnus-int.el (mail-source-plugged, gnus-inhibit-demon):
+       Declare vars.
+       (gnus-server-opened, gnus-status-message)
+       (gnus-open-server, gnus-close-server, gnus-request-list)
+       (gnus-finish-retrieve-group-infos, gnus-retrieve-group-data-early)
+       (gnus-request-list-newsgroups, gnus-request-newgroups)
+       (gnus-request-regenerate, gnus-request-compact, gnus-request-group)
+       (gnus-retrieve-groups, gnus-request-post, gnus-request-expunge-group)
+       (gnus-request-scan, gnus-request-update-info, gnus-request-marks)
+       (gnus-request-accept-article, gnus-request-create-group)
+       (gnus-asynchronous-p, gnus-remove-denial):
+       Bind `gnus-command-method` via `let` rather than as formal args.
+
+       * lisp/gnus/gnus-topic.el (gnus-topic-insert-topic-line):
+       Pass documented vars to eval for `gnus-topic-line-format-spec`.
+
+       * lisp/gnus/message.el (message-yank-original): Use `cl-progv` rather
+       than `eval` to bind the vars from `message-cite-style`.
+
+       * lisp/gnus/mml.el (mml-parse-1): Use `apply` instead of `eval`.
+       (gnus-newsgroup-name, gnus-displaying-mime, gnus-newsgroup-name)
+       (gnus-article-prepare-hook, gnus-newsgroup-charset)
+       (gnus-original-article-buffer, gnus-message-buffer)
+       (message-this-is-news, message-this-is-mail): Declare vars.
+
+       * lisp/gnus/deuglify.el (gnus-outlook-rearrange-article): Remove unused
+       var `cite-marks`.
+       * lisp/gnus/gnus-art.el (ansi-color-context-region): Declare var.
+       (gnus-mime-display-attachment-buttons-in-header): Move declaration
+       before first use.
+       (gnus-mime-display-alternative): Remove unused var `from`.
+       * lisp/gnus/gnus-bookmark.el (gnus-bookmark-bmenu-list): Remove unused
+       var `start` `end`.
+       * lisp/gnus/gnus-cache.el (gnus-article-decode-hook)
+       (nnml-generate-active-function): Declare var.
+       * lisp/gnus/gnus-cite.el (gnus-message-citation-mode): Remove unused
+       var `keywords`.
+       * lisp/gnus/gnus-cloud.el (gnus-cloud-encode-data): Remove unused var
+       `cipher`.
+       (gnus-cloud-ensure-cloud-group): Remove unused var `method`.
+       * lisp/gnus/gnus-delay.el (gnus-delay-article): Remove unused var 
`days`.
+       * lisp/gnus/gnus-html.el (gnus-html-wash-images): Remove unused vars
+       `tag`, `string`, and `images`.
+       (gnus-html-wash-tags): Remove unused vars `string` and `images`.
+       * lisp/gnus/gnus-msg.el (gnus-msg-mail): Remove unused var `group-name`.
+       (gnus-group-mail, gnus-group-news, gnus-summary-mail-other-window)
+       (gnus-summary-news-other-window):
+       Remove unused vars `group` and `buffer`.
+       (gnus-configure-posting-styles): Remove unused vars `style` and 
`attribute`.
+       * lisp/gnus/gnus-picon.el (gnus-picon-find-face): Remove unused vars
+       `database`, `directory`, and `instance`.
+       (gnus-picon-transform-newsgroups): Remove unused var `point`.
+       * lisp/gnus/gnus-range.el (gnus-range-difference): Remove unused var 
`safe`.
+       * lisp/gnus/gnus-score.el (gnus-score-load-file): Remove unused var
+       `score-fn`.
+       * lisp/gnus/gnus-sum.el (message-options-set-recipient): Declare var.
+       * lisp/gnus/gnus-undo.el (gnus-undo): Fix docstring lie.
+       * lisp/gnus/gnus-util.el (print-string-length)
+       (iswitchb-make-buflist-hook): Declare vars.
+       (gnus-emacs-version): Remove unused var `codename`.
+       (gnus-rename-file): Remove unused vars `old-name` and `new-name`.
+       * lisp/gnus/gnus-uu.el (gnus-uu-yenc-article): Remove unused var
+       `start-char`.
+       (gnus-asynchronous): Declare var.
+       * lisp/gnus/mm-partial.el (gnus-displaying-mime): Declare var.
+       (mm-inline-partial): Remove unused var `buffer`.
+       * lisp/gnus/mm-view.el (w3m-force-redisplay, w3m-safe-url-regexp)
+       (gnus-displaying-mime, gnus-original-article-buffer)
+       (gnus-article-prepare-hook): Declare vars.
+       * lisp/gnus/mml-smime.el (mml-smime-epg-encrypt): Remove unused var
+       `boundary`.
+       (mml-smime-epg-verify): Remove unused vars `plain` and `signature-file`.
+       * lisp/gnus/mml1991.el (pgg-text-mode): Declare var.
+       * lisp/gnus/mml2015.el (pgg-text-mode): Declare var.
+       (mml2015-pgg-decrypt): Remove unused var `result`.
+       (mml2015-epg-key-image-to-string): Remove unused var `error`.
+       (mml2015-epg-decrypt): Remove unused var `result`.
+       (mml2015-epg-verify): Remove unused vars `plain` and `signature-file`.
+       * lisp/gnus/nnbabyl.el (nnml-current-directory): Declare var.
+       * lisp/gnus/nndiary.el (nndiary-files): Move declaration before first 
use.
+       * lisp/gnus/nnfolder.el (nnfolder-request-accept-article):
+       Remove unused var `buf`.
+       * lisp/gnus/nnmail.el (nnmail-parse-active): Remove unused var `err`.
+       * lisp/gnus/nnmairix.el (nnmairix-request-group): Remove unused var 
`args`.
+       (nnmairix-request-create-group): Remove unused var `info`.
+       (nnmairix-request-list): Remove unused var `folder`.
+       (nnmairix-request-set-mark): Remove unused var `propto`.
+       (nnmairix-request-set-mark): Remove unused vars `number` and `method`.
+       (nnmairix-close-group): Remove unused var `method`.
+       (nnmairix-create-search-group-from-message): Remove unused var `cq`.
+       (nnmairix-create-server-and-default-group): Remove unused var `create`.
+       (nnmairix-purge-old-groups): Remove unused var `folder`.
+       (nnmairix-remove-tick-mark-original-article, 
nnmairix-get-valid-servers):
+       Remove unused var `cur`.
+       (nnmairix-replace-group-and-numbers): Remove unused var `header`.
+       (nnmairix-goto-original-article): Remove unused var `rval`.
+       (nnmairix-widget-create-query): Remove unused var `allwidgets`.
+       * lisp/gnus/nnmbox.el (nnml-current-directory): Declare var.
+       * lisp/gnus/nnmh.el (nnmh-toplev): Move declaration before first use.
+       (nnmh-request-list-1): Remove unused var `rdir`.
+       * lisp/gnus/nnml.el (nnml-generate-nov-file): Remove unused var `file`.
+       * lisp/gnus/nnrss.el (nnrss-request-article): Remove unused var `post`.
+       (nnrss-request-article): Remove unused var `fn`.
+       (nnrss-check-group): Remove unused var `rdf-ns`.
+       * lisp/gnus/nnweb.el (nnweb-request-article): Remove unused var 
`active`.
+       (nnweb-google-parse-1): Remove unused var `Score`.
+       * lisp/gnus/spam-stat.el (spam-stat-error-holder): Remove var.
+       (spam-stat-buffer-words-with-scores): Remove unused var `word`.
+       (spam-stat-score-buffer): Remove unused var `spam-stat-error-holder`.
+       (spam-stat-split-fancy): Use `err` instead of `spam-stat-error-holder`.
+       * lisp/gnus/spam-wash.el (spam-wash): Remove unused var `handle`.
+       * lisp/gnus/spam.el (spam-copy-or-move-routine): Remove unused vars
+       `article` and `mark`.
+       (spam-register-routine): Remove unused var `article`.
+       (spam-log-undo-registration): Remove unused var `found`.
+       (spam-ifile-register-with-ifile): Remove unused var `parameters`.
+       (spam-check-stat): Remove unused vars `category` and `return`.
+       (spam-parse-list): Remove unused var `found`.
+       (spam-filelist-register-routine): Remove unused var `from`.
+
+2021-01-30  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/gnus: Misc simplifications found during conversion to lexical
+
+       * lisp/gnus/nnoo.el (noo-import-1, nnoo-define-skeleton-1): Use 
`dolist`.
+       (noo-map-functions, nnoo-define-basics): Directly emit the code rather 
than
+       going through an intermediate function; this also avoids the use of 
`eval`.
+       (noo-map-functions-1, nnoo-define-basics-1): Delete functions,
+       folded into their corresponding macro.
+
+       * lisp/gnus/gmm-utils.el (gmm-tool-bar-from-list): Demote `eval` to
+       `symbol-value`.
+
+       * lisp/gnus/gnus-art.el (gnus-button-handle-describe-key): Avoid `eval`
+       since `kbd` is a function nowadays.
+       (gnus-treat-part-number): Rename from `part-number`.
+       (gnus-treat-total-parts): Rename from `total-parts`.
+       (gnus-treat-article, gnus-treat-predicate): Adjust accordingly.
+
+       * lisp/gnus/gnus-cache.el (gnus-agent-load-alist): Use 
`declare-function`.
+
+       * lisp/gnus/gnus-group.el (gnus-cache-active-hashtb): Use `defvar`.
+       (gnus-group-iterate): Make it a normal function since lexical scoping
+       avoids the risk of name capture anyway.
+       (gnus-group-delete-articles): Actually use the `oldp` arg.
+
+       * lisp/gnus/gnus-html.el (gnus-html-wash-images): Fix debug message so
+       it's emitted after the `url` var it prints is actually initialized.
+       And avoid `setq` while we're at it.
+
+       * lisp/gnus/gnus-msg.el (gnus-group-mail, gnus-group-news)
+       (gnus-summary-mail-other-window, gnus-summary-news-other-window):
+       Merge `let`s using `let*`.
+
+       * lisp/gnus/gnus-spec.el (gnus-update-format-specifications):
+       Tighten the scope of `buffer`, and tighten a regexp.
+       (gnus-parse-simple-format): Reduce code duplication.
+
+       * lisp/gnus/gnus-start.el (gnus-child-mode): Don't `defvar` it since we
+       never use that variable and accordingly don't define it as a minor mode.
+
+       * lisp/gnus/gnus-util.el (gnus-byte-compile): Simplify so it obeys
+       `gnus-use-byte-compile` not just on the first call.
+       (iswitchb-minibuffer-setup): Declare.
+
+       * lisp/gnus/mail-source.el (mail-source-bind-1)
+       (mail-source-bind-common-1): Use `mapcar`.
+       (mail-source-set-common-1): Use `dolist`.
+       (display-time-event-handler): Declare.
+
+       * lisp/gnus/mml-smime.el (mml-smime-epg-verify): Reduce code 
duplication.
+
+       * lisp/gnus/mml.el (mml-parse-1): Reduce code duplication.
+
+       * lisp/gnus/mml2015.el (mml2015-epg-verify): Reduce code duplication.
+
+       * lisp/gnus/nnmail.el (nnmail-get-split-group): Tighten regexp.
+       (nnmail-split-it): Reduce code duplication.
+
+       * lisp/gnus/nnweb.el (nnweb-request-article): Avoid `setq`.
+
+       * lisp/gnus/spam.el (BBDB): Use the `noerror` arg of `require`, and
+       define all the functions for BBDB regardless if the require succeeded.
+       (spam-exists-in-BBDB-p): Don't inline, not worth it.
+
+2021-01-30  Alan Third  <alan@idiocy.org>
+
+       Fix build failure on macOS 10.7 (bug#46036)
+
+       * src/nsfns.m (ns_set_represented_filename): Define the NSNumber in a
+       more compatible manner.
+
+2021-01-30  Alan Mackenzie  <acm@muc.de>
+
+       With minibuffer-follows-selected-frame `hybrid', preserve recursive 
Mbuffers
+
+       ...when enable-recursive-minibuffers is non-nil, and several 
minibuffers are
+       activated from different frames.  Also set the major mode of a reused 
active
+       minibuffer to `fundamental-mode' - up till now it's been
+       minibuffer-inactive-mode.
+
+       * src/minibuf.c (read_minibuf): with the indicated settings of 
variables,
+       "stack up" all containing minibuffers on the mini-window of the current
+       frame.  Delete another, now superfluous such stacking up.
+       (set_minibuffer_mode): New function.
+       (get_minibuffer): Call the above new function (twice), in place of 
inline
+       code, ensuring active minibuffers are never left in 
minibuffer-inactive-mode.
+
+2021-01-30  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/gnus: Remove redundant `:group` args
+
+       * lisp/gnus/spam-stat.el:
+       * lisp/gnus/spam-report.el:
+       * lisp/gnus/smime.el:
+       * lisp/gnus/nnrss.el:
+       * lisp/gnus/nnmairix.el:
+       * lisp/gnus/nnimap.el:
+       * lisp/gnus/nndiary.el:
+       * lisp/gnus/mm-url.el:
+       * lisp/gnus/mail-source.el:
+       * lisp/gnus/gnus-win.el:
+       * lisp/gnus/gnus-topic.el:
+       * lisp/gnus/gnus-sieve.el:
+       * lisp/gnus/gnus-search.el:
+       * lisp/gnus/gnus-registry.el:
+       * lisp/gnus/gnus-notifications.el:
+       * lisp/gnus/gnus-gravatar.el:
+       * lisp/gnus/gnus-eform.el:
+       * lisp/gnus/gnus-dup.el:
+       * lisp/gnus/gnus-diary.el:
+       * lisp/gnus/gnus-demon.el:
+       * lisp/gnus/gnus-delay.el:
+       * lisp/gnus/gnus-cloud.el:
+       * lisp/gnus/gnus-cite.el:
+       * lisp/gnus/gnus-bookmark.el:
+       * lisp/gnus/gmm-utils.el:
+       * lisp/gnus/deuglify.el:
+       * lisp/gnus/canlock.el: Remove redundant `:group` arguments
+
+2021-01-30  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/gnus: Demote some macros and defsubsts, plus a fix
+
+       * lisp/gnus/gnus-sum.el (gnus-summary-thread-level)
+       (gnus-summary-article-mark): Turn macros into `defsubst`.
+
+       * lisp/gnus/mail-source.el (mail-source-bind-common): Actually use its 
arg.
+
+       * lisp/gnus/nntp.el (nntp-copy-to-buffer): Turn macro into a `defsubst`.
+       (nntp-wait-for, nntp-retrieve-data, nntp-send-command): Don't inline
+       those, it's not worth it.
+
+2021-01-30  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/gnus: Use `with-current-buffer` at a few more places
+
+       * lisp/gnus/nnmbox.el (nnmbox-request-scan, nnmbox-read-mbox):
+       * lisp/gnus/nnmairix.el (nnmairix-create-search-group):
+       * lisp/gnus/nnfolder.el (nnfolder-existing-articles):
+       * lisp/gnus/nndraft.el (nndraft-auto-save-file-name):
+       * lisp/gnus/nndoc.el (nndoc-request-article):
+       * lisp/gnus/nnbabyl.el (nnbabyl-read-mbox):
+       * lisp/gnus/gnus-score.el (gnus-score-body):
+       * lisp/gnus/gnus-start.el (gnus-dribble-enter)
+       (gnus-dribble-eval-file, gnus-ask-server-for-new-groups)
+       (gnus-read-newsrc-file, gnus-read-descriptions-file):
+       * lisp/gnus/gnus-spec.el (gnus-update-format-specifications):
+       * lisp/gnus/gnus-draft.el (gnus-draft-edit-message):
+       * lisp/gnus/gnus-art.el (gnus-request-article-this-buffer)
+       (gnus-article-edit-exit): Use `with-current-buffer`.
+
+2021-01-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix NS build broken by a recent change
+
+       * src/nsmenu.m (set_frame_menubar, Fns_reset_menu): Adapt to
+       recent changes in set_frame_menubar.  (Bug#45759)
+
+2021-01-30  Juri Linkov  <juri@linkov.net>
+
+       Allow the caller to specify own face on suffix in annotation-function
+
+       * lisp/minibuffer.el (completion--insert-strings):
+       Don't add 'completions-annotations' face when the caller
+       specified own face in annotation-function.
+       Remove no-op code for 'unless prefix' branch.
+       (completion-metadata, completion-extra-properties):
+       Update docs of affixation-function.
+       Suggested by Clemens <clemera@posteo.net> (bug#45780)
+
+       * test/lisp/minibuffer-tests.el: Rename package name from
+       completion-tests.el to minibuffer-tests.el.
+       Add new test completion--insert-strings-faces.
+
+       * doc/lispref/minibuf.texi (Completion Variables)
+       (Programmed Completion): Update descriptions of
+       annotation-function and affixation-function.
+
+2021-01-30  Augusto Stoffel  <arstoffel@gmail.com>  (tiny change)
+
+       Reduce flicker in Isearch mode
+
+       Lazy highlighting now happens immediately when the search string is at
+       least as long as the value of the new custom variable
+       `lazy-highlight-no-delay-length`.  Also avoid updating the lazy
+       count in the echo area too often.
+       * lisp/isearch.el (lazy-highlight-no-delay-length): New defcustom.
+       (lazy-lazy-count-format): Avoid a momentarily incorrect
+       count when reversing search direction.
+       (isearch-lazy-highlight-new-loop): Avoid a call to
+       `isearch-message` that is quickly succeed by a second echo area
+       update, thus causing flicker.
+       (isearch-lazy-highlight-new-loop):
+       Start lazy highlight immediately if appropriate.
+       * etc/NEWS: Announce the change.
+       * doc/emacs/search.texi: Document `lazy-highlight-no-delay-length'.
+
+2021-01-30  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/gnus/gnus-msg.el: Remove empty `unwind-protect`s
+
+       (gnus-msg-mail, gnus-group-mail)
+       (gnus-group-news, gnus-summary-mail-other-window)
+       (gnus-summary-news-other-window): Remove empty `unwind-protect`.
+
+2021-01-30  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/gnus/mm-encode.el (mm-default-file-type): New name
+
+       Rename from misleading `mm-default-file-encoding`.
+       (mm-default-file-encoding): Redefine as obsolete alias.
+
+       * lisp/mail/sendmail.el (mail-add-attachment):
+       * lisp/mh-e/mh-mime.el (mh-minibuffer-read-type):
+       * lisp/gnus/gnus-art.el (gnus-mime-view-part-as-type-internal):
+       * lisp/gnus/gnus-dired.el (gnus-dired-attach):
+       * lisp/gnus/mml.el (mml-generate-mime-1, mml-minibuffer-read-type)
+       (mml-attach-file): Use the new name.
+
+2021-01-30  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/gnus: Quote functions with #'
+
+       To get better warnings, try and use #' to quote function names.
+
+       * lisp/gnus/canlock.el:
+       * lisp/gnus/deuglify.el:
+       * lisp/gnus/gmm-utils.el:
+       * lisp/gnus/gnus-agent.el:
+       * lisp/gnus/gnus-art.el:
+       * lisp/gnus/gnus-bookmark.el:
+       * lisp/gnus/gnus-cache.el:
+       * lisp/gnus/gnus-cite.el:
+       * lisp/gnus/gnus-cus.el:
+       * lisp/gnus/gnus-delay.el:
+       * lisp/gnus/gnus-diary.el:
+       * lisp/gnus/gnus-dired.el:
+       * lisp/gnus/gnus-draft.el:
+       * lisp/gnus/gnus-fun.el:
+       * lisp/gnus/gnus-group.el:
+       * lisp/gnus/gnus-html.el:
+       * lisp/gnus/gnus-int.el:
+       * lisp/gnus/gnus-kill.el:
+       * lisp/gnus/gnus-mlspl.el:
+       * lisp/gnus/gnus-msg.el:
+       * lisp/gnus/gnus-notifications.el:
+       * lisp/gnus/gnus-picon.el:
+       * lisp/gnus/gnus-registry.el:
+       * lisp/gnus/gnus-rfc1843.el:
+       * lisp/gnus/gnus-salt.el:
+       * lisp/gnus/gnus-score.el:
+       * lisp/gnus/gnus-search.el:
+       * lisp/gnus/gnus-sieve.el:
+       * lisp/gnus/gnus-srvr.el:
+       * lisp/gnus/gnus-start.el:
+       * lisp/gnus/gnus-topic.el:
+       * lisp/gnus/gnus-undo.el:
+       * lisp/gnus/gnus-util.el:
+       * lisp/gnus/gnus-uu.el:
+       * lisp/gnus/gnus.el:
+       * lisp/gnus/mail-source.el:
+       * lisp/gnus/message.el:
+       * lisp/gnus/mm-archive.el:
+       * lisp/gnus/mm-decode.el:
+       * lisp/gnus/mm-url.el:
+       * lisp/gnus/mm-util.el:
+       * lisp/gnus/mm-view.el:
+       * lisp/gnus/mml-sec.el:
+       * lisp/gnus/mml-smime.el:
+       * lisp/gnus/mml.el:
+       * lisp/gnus/nnagent.el:
+       * lisp/gnus/nndiary.el:
+       * lisp/gnus/nndoc.el:
+       * lisp/gnus/nndraft.el:
+       * lisp/gnus/nnfolder.el:
+       * lisp/gnus/nnheader.el:
+       * lisp/gnus/nnmail.el:
+       * lisp/gnus/nnmaildir.el:
+       * lisp/gnus/nnmairix.el:
+       * lisp/gnus/nnmh.el:
+       * lisp/gnus/nnml.el:
+       * lisp/gnus/nnrss.el:
+       * lisp/gnus/nnselect.el:
+       * lisp/gnus/nnspool.el:
+       * lisp/gnus/nnvirtual.el:
+       * lisp/gnus/nnweb.el:
+       * lisp/gnus/smiley.el:
+       * lisp/gnus/smime.el:
+       * lisp/gnus/spam-report.el:
+       * lisp/gnus/spam-stat.el:
+       * lisp/gnus/spam-wash.el:
+       * lisp/gnus/spam.el:
+
+2021-01-30  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/gnus/gnus-art.el: Add `event` args and operate at its position.
+
+       (gnus-mime-save-part-and-strip)
+       (gnus-mime-delete-part, gnus-mime-save-part, gnus-mime-pipe-part)
+       (gnus-mime-view-part, gnus-mime-view-part-as-type)
+       (gnus-mime-copy-part, gnus-mime-print-part, gnus-mime-inline-part)
+       (gnus-mime-view-part-as-charset, gnus-mime-view-part-externally)
+       (gnus-mime-view-part-internally, gnus-article-press-button):
+       Add `event` arg and operate at its position.
+
+2021-01-30  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/gnus: Use `declare`.
+
+       * lisp/gnus/nnoo.el (defvoo, deffoo, nnoo-declare, nnoo-import)
+       (nnoo-map-functions):
+       * lisp/gnus/nnmaildir.el (nnmaildir--with-nntp-buffer)
+       (nnmaildir--with-work-buffer, nnmaildir--with-nov-buffer)
+       (nnmaildir--with-move-buffer, nnmaildir--condcase):
+       * lisp/gnus/mm-decode.el (mm-with-part):
+       * lisp/gnus/gnus-msg.el (gnus-setup-message):
+       * lisp/gnus/gnus-agent.el (gnus-agent-with-fetch, 
gnus-agent-while-plugged):
+       * lisp/gnus/mail-source.el (mail-source-set-1, mail-source-value):
+       Use `declare`.
+
+       * lisp/gnus/gnus-util.el (gnus-define-keys): Use `declare`, and also
+       don't quote `keymap` if it's a variable name.
+       (gnus-define-keys-1): Reject the case where `keymap` is a variable name.
+       (gnus-eval-in-buffer-window, gnus-define-keys-safe)
+       (gnus-define-keymap, gnus-atomic-progn, gnus-with-output-to-file)
+       (gnus-parse-without-error): Use `declare`.
+       (gnus-atomic-progn-assign, gnus-atomic-setq): Delete macros.
+
+       * lisp/gnus/gnus-undo.el (gnus-undo-register): Drop indent and edebug 
spec
+       since they're not really appropriate for a function.
+
+       * lisp/gnus/gnus-art.el (gnus--\,@): New macro.
+       Use it at top-level to construct the `gnus-article-FOO` => `article-FOO`
+       wrapper functions.
+       (gnus-with-article-headers, gnus-with-article-buffer): Use `declare`.
+
+2021-01-30  Stefan Kangas  <stefan@marxist.se>
+
+       Remove unused argument from set_frame_menubar (Bug#45759)
+
+       * src/w32menu.c (set_frame_menubar):
+       * src/xmenu.c (set_frame_menubar): Remove unused argument.
+       All callers updated.
+
+2021-01-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of auto-resize-tool/tab-bars
+
+       * src/xdisp.c (syms_of_xdisp) <auto-resize-tool-bars>
+       <auto-resize-tab-bars>: Doc fix.  (Bug#46178)
+
+2021-01-30  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Also highlight 'conflict' with the warning face
+
+       * lisp/vc/vc-git.el (vc-git-dir-printer):
+       Also highlight 'conflict' with the warning face, like
+       vc-default-dir-printer does already.
+
+2021-01-30  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into native-comp
+
+2021-01-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       auth-source-search doc string fix
+
+       * lisp/auth-source.el (auth-source-search): Fix example (bug#36286).
+
+2021-01-30  Jared Finder  <jared@finder.org>
+
+       * lisp/tab-line.el (tab-line-new-tab): Use tty menus when supported.
+
+2021-01-30  Eli Zaretskii  <eliz@gnu.org>
+
+       New Rmail option 'rmail-show-message-set-modified'
+
+       * lisp/mail/rmail.el (rmail-show-message-set-modified): New
+       option.
+       (rmail-show-message-1): If 'rmail-show-message-set-modified' is
+       non-nil, don't reset the buffer's modified state.  (Bug#45941)
+
+       * etc/NEWS: Announce the new option.
+
+2021-01-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix vc-hg-rename-file on file names like ~/foo/bar
+
+       * lisp/vc/vc-hg.el (vc-hg-rename-file): Use absolute file names,
+       because hg doesn't like getting file names like "~/foo/bar"
+       (bug#36932).
+
+2021-01-30  Jeff Spencer  <jeffspencerd@gmail.com>  (tiny change)
+
+       Fix interaction between two dired cleanup variables
+
+       * lisp/dired.el (dired-clean-up-after-deletion): Kill the buffers
+       if you have `dired-clean-up-buffers-too' set and
+       `dired-clean-confirm-killing-deleted-buffers' nil (bug#38037).
+
+2021-01-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve :foreground description in the manual
+
+       * doc/lispref/frames.texi (Font and Color Parameters): Make the
+       description less confusing (bug#38710).
+
+2021-01-30  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Add source to sgml-empty-tags
+
+       * lisp/textmodes/sgml-mode.el (html-mode): Add "source" as an empty
+       tag to fix indentation when this element is present (bug#46181).
+
+2021-01-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       rmail-summary-mark-deleted optional argument fix
+
+       * lisp/mail/rmailsum.el (rmail-summary-mark-deleted): Argument N
+       is optional, so don't assume that it's a number (bug#39076).
+
+2021-01-30  Dmitry Gutov  <dgutov@yandex.ru>
+
+       vc-dir-mode-map: Remove the mouse-2 binding
+
+       * lisp/vc/vc-dir.el (vc-dir-mode-map):
+       Remove the mouse-2 binding (bug#13692).
+       (vc-dir-mode): Update the docstring accordingly.
+       (vc-dir-status-mouse-map): New variable.
+       (vc-default-dir-printer): Use it on the state buttons.
+
+       * lisp/vc/vc-git.el (vc-git-dir-printer): Same.
+
+2021-01-30  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in mpuz.el
+
+       * lisp/play/mpuz.el: Use lexical-binding.  Remove redundant :group
+       args.
+       (mpuz-switch-to-window): Minor cleanup.
+
+2021-01-30  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in handwrite.el
+
+       * lisp/play/handwrite.el: Use lexical-binding.  Remove redundant
+       :group args.  Minor cleanups.
+
+       (handwrite): Minor cleanups.
+       (handwrite-set-pagenumber-off, handwrite-set-pagenumber-on): Make
+       comments into docstrings.
+
+2021-01-29  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * test/lisp/electric-tests.el: Fix switch to lexical-binding.
+
+       (define-electric-pair-test): Don't presume that function values are
+       self-evaluating.
+
+2021-01-29  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in sasl.el and add tests
+
+       * lisp/net/sasl.el:
+       * lisp/net/sasl-digest.el:
+       * lisp/net/sasl-cram.el:
+       * lisp/net/sasl-ntlm.el: Use lexical-binding.
+
+       * test/lisp/net/sasl-tests.el:
+       * test/lisp/net/sasl-cram-tests.el: New files.
+
+2021-01-29  Dmitry Gutov  <dgutov@yandex.ru>
+
+       (xref-revert-buffer): Also 'erase-buffer' when handling a user-error
+
+       * lisp/progmodes/xref.el (xref-revert-buffer):
+       Also 'erase-buffer' when handling a user-error (bug#46042).
+
+       (cherry picked from commit e86b30d6fd04070b86560774ec82392dbe24ca1e)
+
+2021-01-29  Dmitry Gutov  <dgutov@yandex.ru>
+
+       (xref-revert-buffer): Also 'erase-buffer' when handling a user-error
+
+       * lisp/progmodes/xref.el (xref-revert-buffer):
+       Also 'erase-buffer' when handling a user-error (bug#46042).
+
+2021-01-29  Eli Zaretskii  <eliz@gnu.org>
+
+       Update files for 27.1.91 pretest
+
+       * ChangeLog.3:
+       * etc/AUTHORS
+       * lisp/ldefs-boot.el: Update.
+
+2021-01-29  Eli Zaretskii  <eliz@gnu.org>
+
+       Support 'operating-system-release' on MS-Windows
+
+       * src/w32fns.c (w32_version_string) [WINDOWSNT]: New function.
+       * src/w32common.h (w32_version_string) [WINDOWSNT]: Add prototype.
+       * src/editfns.c (init_editfns) [WINDOWSNT]: Produce a non-nil
+       string with the OS version.
+
+2021-01-29  Michael Albinus  <michael.albinus@gmx.de>
+
+       * test/lisp/net/tramp-tests.el (tramp--test-special-characters):
+
+       Adapt test for docker.
+
+2021-01-29  Juri Linkov  <juri@linkov.net>
+
+       Use save-mark-and-excursion in query-replace-read-args (bug#45617)
+
+2021-01-29  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix Bug#45518 in compile.el
+
+       * lisp/progmodes/compile.el (compilation-get-file-structure):
+       Avoid call of `file-truename' for remote files.  (Bug#45518)
+
+2021-01-29  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve doc string of 'operating-system-release'
+
+       * src/editfns.c (syms_of_editfns) <operating-system-release>: Doc
+       fix.  (Bug#39940)
+
+2021-01-29  Sean Whitton  <spwhitton@spwhitton.name>
+
+       Fix previous commit regarding revert-buffer-function
+
+       * lisp/simple.el (shell-command, shell-command-on-region): Set
+       revert-buffer-function buffer-locally, not globally.  Also, avoid an
+       unnecessary call to (current-buffer) by taking advantage of the
+       closure (bug#46151).
+
+2021-01-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Describe pointer shapes in the manual
+
+       * doc/lispref/frames.texi (Pointer Shape): Describe what the
+       typical pointer shapes are (and add `nhdrag') (bug#39246).
+
+2021-01-29  Marco Wahl  <marcowahlsoft@gmail.com>
+
+       Add a command for redisplay during keyboard macros
+
+       * doc/emacs/kmacro.texi (Basic Keyboard Macro): Document it
+       (bug#39252).
+
+       * lisp/kmacro.el (kdb-macro-redisplay): New function.
+       (kmacro-keymap): Bind it.
+
+2021-01-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve fontifying of #| ... |# in `lisp-mode'
+
+       * lisp/emacs-lisp/lisp-mode.el (lisp-mode): Fontify the end
+       delimiter in #| ... |# correctly (bug#39820).
+
+2021-01-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       operating-system-release doc string improvement
+
+       * src/editfns.c (syms_of_editfns): Be more precise about what
+       `operating-system-release' is (bug#39940).
+
+2021-01-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       flymake-diagnostic-beg/end doc string and error reporting improvement
+
+       * lisp/progmodes/flymake.el (flymake-diagnostic-beg):
+       (flymake-diagnostic-end): Improve doc string and error reporting
+       (bug#39971).
+
+2021-01-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix position in empty buffers in checkdoc-file-comments-engine
+
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-file-comments-engine):
+       Don't give invalid positions on empty buffers (bug#39987).
+
+2021-01-29  Sean Whitton  <spwhitton@spwhitton.name>
+
+       Set revert-buffer-function in shell command output buffers
+
+       * lisp/simple.el (shell-command, shell-command-on-region): Set
+       revert-buffer-function in shell command output buffers
+       (bug#46151).
+
+2021-01-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention using buffer-list-update-hook in recentf-mode
+
+       * lisp/recentf.el (recentf-mode): Mention using
+       `buffer-list-update-hook' (bug#46153).
+
+2021-01-29  Stefan Kangas  <stefan@marxist.se>
+
+       Remove Emacs 21 compat code from sasl.el
+
+       * lisp/net/sasl.el (sasl-read-passphrase): Remove compat code;
+       'read-passwd' is preloaded since Emacs 22.
+
+2021-01-29  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/flow-ctrl.el: Use lexical-binding.
+
+       * lisp/flow-ctrl.el (enable-flow-control): Minor cleanup.
+
+2021-01-29  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in find-cmd.el and add tests
+
+       * lisp/find-cmd.el: Use lexical-binding.
+       * test/lisp/find-cmd-tests.el: New file.
+
+2021-01-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Slight gravatar.el code clean up
+
+       * lisp/image/gravatar.el (gravatar--service-libravatar): Clean the
+       code up slightly.
+
+2021-01-29  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Merge branch 'master' of git+ssh://git.sv.gnu.org/srv/git/emacs into 
trunk
+
+2021-01-28  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in nroff-mode.el
+
+       * lisp/textmodes/nroff-mode.el: Use lexical-binding.  Remove
+       redundant :group args.
+
+2021-01-28  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/progmodes/bat-mode.el: Use lexical-binding.
+
+2021-01-28  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in generic-x.el
+
+       * lisp/generic-x.el: Use lexical-binding.  Remove redundant :groups.
+       (generic-rul-mode-setup-function): Prefer setq-local.
+
+2021-01-28  Stefan Kangas  <stefan@marxist.se>
+
+       Define compat alias obsolete
+
+       * lisp/generic-x.el (generic-mode-ini-file-find-file-hook): Define
+       compat alias introduced after rename in 22.1 obsolete.
+
+2021-01-28  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Use lexical-binding in all of `lisp/emacs-lisp`
+
+       * lisp/emacs-lisp/bindat.el: Use lexical-binding.
+       (bindat--unpack-group, bindat--length-group, bindat--pack-group):
+       Declare `last` and `tag` as dyn-scoped.
+       (bindat-unpack, bindat-pack): Bind `bindat-raw` and `bindat-idx` via
+       `let` rather than via the formal arglist.
+
+       * lisp/emacs-lisp/package-x.el:
+       * lisp/emacs-lisp/generic.el:
+       * lisp/emacs-lisp/eieio-opt.el:
+       * lisp/emacs-lisp/derived.el:
+       * lisp/emacs-lisp/crm.el: Use lexical-binding.
+
+       * lisp/emacs-lisp/helper.el: Use lexical-binding.
+       (Helper-help-map): Move initialization into declaration.
+
+       * lisp/emacs-lisp/regi.el: Use lexical-binding.
+       (regi-interpret): Remove unused var `tstart`.
+       Declare `curframe`, `curentry` and `curline` as dyn-scoped.
+
+       * lisp/emacs-lisp/shadow.el: Use lexical-binding.
+       (load-path-shadows-find): Remove unused var `file`.
+       Tighten a regexp, use `push`.
+
+       * lisp/emacs-lisp/tcover-ses.el: Use lexical-binding.  Require `ses`.
+       Remove correspondingly redundant declarations.
+       (ses--curcell-overlay): Declare.
+       (ses-exercise): Use `dlet` and use a properly-prefixed var name.
+       Fix name of `curcell-overlay` variable.
+
+       * lisp/emacs-lisp/unsafep.el: Use lexical-binding.
+       (unsafep): Bind `unsafep-vars` via `let` rather than via the formal 
arglist.
+
+2021-01-28  Juri Linkov  <juri@linkov.net>
+
+       Use isearch-tmm-menubar when tmm-menubar is called in isearch-mode 
(bug#43966)
+
+       * lisp/isearch.el (isearch-menu-bar-commands): Add tmm-menubar to 
defaults.
+       (isearch-mode-map): Remove remapping of tmm-menubar to 
isearch-tmm-menubar.
+
+       * lisp/tmm.el (tmm-menubar): Call isearch-tmm-menubar in isearch-mode.
+
+2021-01-28  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/wdired.el: Minor doc fixes.
+
+2021-01-28  Stefan Kangas  <stefan@marxist.se>
+
+       Avoid recommending Google
+
+       * doc/misc/org.texi (Link Abbreviations):
+       * lisp/net/webjump.el (webjump-sample-sites):
+       * lisp/org/ol.el (org-link-shell-confirm-function)
+       (org-link-elisp-confirm-function):
+       * lisp/org/org.el (org-highlight-links):
+       * lisp/wdired.el: Avoid recommending Google.
+
+       squash! Avoid recommending Google
+
+2021-01-28  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/leim/quail/viqr.el: Use lexical-binding.
+
+       * lisp/leim/quail/compose.el: Use lexical-binding.
+
+       * lisp/ezimage.el: Use lexical-binding.
+
+2021-01-28  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/fns.c (hash_string): Fix bug#46111
+
+       Use `memcpy` instead of an unaligned memory access.  On x86 at least,
+       GCC turns this `memcpy` into a single `mov`, so it's about as fast.
+
+2021-01-28  Stefan Kangas  <stefan@marxist.se>
+
+       Add cross-reference to with-eval-after-load
+
+       * lisp/subr.el (eval-after-load): Doc fix; add cross-reference to
+       'with-eval-after-load'.
+
+2021-01-28  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/generic-x.el (hosts-generic-mode): Support IPv6 addresses.
+
+2021-01-28  Stefan Kangas  <stefan@marxist.se>
+
+       Add missing file systems to etc-fstab-generic-mode
+
+       * lisp/generic-x.el (etc-fstab-generic-mode): Add entries for missing
+       file systems.
+
+2021-01-28  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * test/Makefile.in (emacs): Use the C locale
+
+       This fixes spurious test failures in my environment for
+       `diff-mode-test-font-lock-syntax-one-line` (where my `diff` otherwise
+       returns "No newline at end of file" in French) and for
+       various tests in `emacs-module-tests` because errors signal
+       "Abandon" instead of "Abort".
+
+2021-01-28  Michael Albinus  <michael.albinus@gmx.de>
+
+       * lisp/net/ange-ftp.el (ange-ftp-ls): Handle several "--dired" switches.
+
+2021-01-28  Michael Albinus  <michael.albinus@gmx.de>
+
+       Simplify auto-revert buffer list by watch descriptor  (Bug#44639)
+
+       * lisp/autorevert.el (auto-revert--buffer-by-watch-descriptor):
+       Rename from `auto-revert--buffers-by-watch-descriptor'.  Make it
+       an assoc list.
+       (auto-revert-notify-rm-watch, auto-revert-notify-add-watch)
+       (auto-revert-notify-handler): Adapt accordingly.  Based on a
+       patch provided by Spencer Baugh <sbaugh@catern.com>.  (Bug#44639)
+
+2021-01-28  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Use lexical-binding in lisp/{term,nxml,language}
+
+       * test/lisp/electric-tests.el:
+       * lisp/term/w32console.el:
+       * lisp/nxml/rng-util.el:
+       * leim/leim-ext.el: Use lexical-binding.
+
+       * lisp/international/titdic-cnv.el (tit-process-header)
+       (miscdic-convert):
+       * lisp/international/mule-cmds.el (leim-list-header):
+       * lisp/international/ja-dic-cnv.el (skkdic-convert):
+       Use lexical-binding in the generated file.
+
+2021-01-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Protect against bad results from libravatar
+
+       * lisp/image/gravatar.el (gravatar--service-libravatar): Don't
+       have (gravatar-retrieve "foobar@zjp.codes" 'ignore) (which returns
+       a CNAME) bug out.
+
+2021-01-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix numerical `comment-padding' value
+
+       * lisp/newcomment.el (comment-padright): Allow using a number for
+       `comment-padding', like the doc string says (bug#40056).
+
+2021-01-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make the default `whitespace-enable-predicate' use `derived-mode-p'
+
+       * lisp/whitespace.el (whitespace-enable-predicate): Use
+       `derived-mode-p' to check modes instead of `eq' (bug#40481).
+
+2021-01-28  Mattias M  <mattias@marka.ee>  (tiny change)
+
+       Fix fill-paragraph in asm-mode
+
+       * lisp/progmodes/asm-mode.el: The value of fill-prefix ought to be nil
+       not "\t" so that fill-context-prefix can do its thing. In fact,
+       fill-prefix does not have to be set at all because asm-mode derives
+       from prog-mode and fill-prefix is set in simple.el.
+
+       * test/lisp/progmodes/asm-mode-tests.el: Add relevant test (bug#41064).
+
+2021-01-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow commenting out white space lines in latex-mode
+
+       * lisp/newcomment.el (comment-region-default-1): Allow commenting
+       out whitespace-only regions (bug#41793).
+
+       * lisp/textmodes/tex-mode.el (latex--comment-region): Use it.
+       (latex-mode): Set a comment style shim.
+
+2021-01-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix Gnus icalendar button navigation
+
+       * lisp/gnus/gnus-icalendar.el (gnus-icalendar-insert-button): Mark
+       buttons correctly for TAB navigation (bug#46135).
+
+2021-01-28  Harald Jörg  <haj@posteo.de>
+
+       perl-mode.el: Eliminate keywords which are not in Perl.
+
+       * lisp/progmodes/perl-mode.el (perl-imenu-generic-expression):
+       Remove keywords which are not part of Perl.
+       (perl-font-lock-keywords-2): Remove keywords which are not part of
+       Perl (bug#46024).  (These keywords are part of Raku; aka. Perl 6.)
+
+2021-01-28  João Távora  <joaotavora@gmail.com>
+
+       Allow project/xref packages to be used in Emacs 26.1
+
+       * lisp/progmodes/project.el: Change Package-Requires to Emacs 26.1
+       (bug#44671).
+
+       * lisp/progmodes/xref.el: Ditto.
+
+2021-01-28  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/macroexp.el (macroexp-if): Fix typo
+
+2021-01-28  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/pcase.el (pcase--split-pred): Handle `memq` pred.
+
+       Improve handling of the `member` tests generated from (or 'a 'b 'c).
+       This will expand
+
+           (pcase EXP ((and (or 1 2 3) (guard (FOO))) EXP1) (1 EXP2) (6 EXP3))
+
+       to
+
+           (cond ((memql '(3 2 1) EXP)
+                  (cond ((FOO) EXP1) ((eql EXP 1) EXP2)))
+                 ((eql EXP 6) EXP3))
+
+       rather than to
+
+           (cond ((memql '(3 2 1) EXP)
+                  (cond ((FOO) EXP1) ((eql EXP 1) EXP2) ((eql EXP 6) EXP3)))
+                 ((eql EXP 1) EXP2)
+                 ((eql EXP 6) EXP3))
+
+2021-01-28  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/macroexp.el (macroexp--expand-all): Perform 
β-reduction
+
+       Also, in `funcall` macroexpand the function before checking to see if
+       we can remove the `funcall`.
+
+       (macroexp-if): Trim trailing `nil` in the generated code while we're at 
it.
+
+2021-01-27  Juri Linkov  <juri@linkov.net>
+
+       * lisp/replace.el (query-replace-read-from-suggestions): New function.
+
+       (query-replace-read-from): Use it instead of hard-coded '(car 
search-ring)'.
+       (read-regexp-suggestions): Add the active region (bug#41692).
+
+2021-01-27  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * admin/notes/unicode: titdic-cnv.el is now utf-8.
+
+2021-01-27  Juri Linkov  <juri@linkov.net>
+
+       Support multi-line prompt and contents in 
previous-line-or-history-element.
+
+       * lisp/simple.el (previous-line-or-history-element): Move to the
+       beginning of minibuffer contents if there is editable minibuffer 
contents
+       on the same line after moving point to the prompt (bug#46033).
+       Fix minimal old-column from 0 to 1 to put point at the beginning of
+       minibuffer contents after going to the previous history element.
+
+2021-01-27  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/international/titdic-cnv.el (tsang-quick-converter): Simplify
+
+       Merge branches which only differed in the `charset` property of the
+       strings they intended to return, since that info gets lost later
+       on anyway.
+
+2021-01-27  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/international/titdic-cnv.el: Revert to utf-8 encoding
+
+       While it's true that using the iso-2022-jp encoding on the file does
+       allow Emacs to render the two strings differently, this only applies to
+       the source file.  The .elc files all use `utf-8-emacs` encoding anyway,
+       so that info is lost.  And the difference is even lost before we write
+       the .elc file because when Emacs byte-compiles that code the
+       byte-compiler considers those two strings as "equal" and emits only one
+       string in the byte-code (so the two branches return `eq` strings).
+
+       So, I think using `iso-2022-jp` is a bad idea here: it gives the
+       illusion that the the `charset` info exists, even it will be lost.
+       Eli discussed it with Handa-san a year ago, and they arrived at the
+       conclusion that the charset information is indeed no longer important.
+
+2021-01-27  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Use lexical-binding in of all lisp/language
+
+       * lisp/international/titdic-cnv.el (pinyin-convert):
+       Enable lexical-binding in the generated file(s).
+
+       * lisp/language/ethio-util.el: Use lexical-binding.
+       (ethio-tex-to-fidel-buffer): Use `inhibit-read-only`.  Remove unused
+       vars `p` and `ch`.
+
+       * lisp/language/hanja-util.el: Use lexical-binding.
+
+       * lisp/language/ind-util.el: Use lexical-binding.
+       (indian-translate-region): Actually use the `from` and `to` arguments.
+       (<toplevel>): Use `dlet`.  Remove unused var `current-repertory`.
+       (indian-2-column-to-ucs-region): Remove unused var `pos`.
+
+       * lisp/language/japan-util.el: Use lexical-binding.
+       (japanese-katakana-region, japanese-hiragana-region)
+       (japanese-zenkaku-region): Remove unused var `next`.
+
+       * lisp/language/korea-util.el: Use lexical-binding.
+
+       * lisp/language/lao-util.el: Use lexical-binding.
+       (lao-composition-function): Remove unused var `glyph`.
+
+       * lisp/language/thai-util.el: Use lexical-binding.
+       (thai-composition-function): Remove unused var `glyph`.
+
+       * lisp/language/thai-word.el: Use lexical-binding.
+       (thai-forward-word): Remove unused var `tail`.
+
+       * lisp/language/tibet-util.el: Use lexical-binding.
+       (tibetan-add-components): Remove unused var `tmp`.
+       (tibetan-compose-region): Remove unused vars `str`, `result`, `chars`.
+
+       * lisp/language/viet-util.el:
+       * lisp/language/tv-util.el:
+       * lisp/language/cyril-util.el:
+       * lisp/language/china-util.el: Use lexical-binding.
+
+2021-01-27  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       3443a1c698 Fix last change
+
+2021-01-27  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       3f610177ad Avoid sending systemd shutdown notifications if non-daemon
+       009df5cb3c * src/cmds.c (Fforward_line): Doc fix.  (Bug#46027)
+       ee1c54ebc0 Improve documentation of sendmail.el defcustom's
+
+2021-01-27  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       b58fd1eab9 ; * lisp/language/cham.el: Fix copy-paste mistake in comment.
+
+2021-01-27  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix display of stretches of whitespace in the display margins
+
+       * src/xdisp.c (produce_stretch_glyph): Truncate the stretch glyph
+       due to line wrap only when drawing in the text area.
+       * src/xterm.c (x_draw_stretch_glyph_string):
+       * src/w32term.c (w32_draw_stretch_glyph_string): Fix the
+       adjustment of the stretch X and width so that stretch glyphs could
+       be drawn in the left margin.  Reported by Paul W. Rankin
+       <pwr@bydasein.com>.
+
+2021-01-27  Michael Albinus  <michael.albinus@gmx.de>
+
+       Some Tramp fixes
+
+       * doc/misc/tramp.texi (GVFS-based methods): Ban sftp RemoteCommand
+       option.
+
+       * lisp/net/tramp-adb.el (tramp-adb-handle-copy-file)
+       (tramp-adb-handle-rename-file): Avoid calling jka-compr when
+       writing the target file.
+
+       * lisp/net/tramp-sh.el (tramp-sh-handle-file-ownership-preserved-p):
+       Skip GROUP test on *BSD machines.
+
+       * test/lisp/net/tramp-tests.el (tramp-test17-insert-directory-one-file):
+       Skip for tamp-crypt.el.
+       (tramp--test-sh-no-ls--dired-p): Ignore errors.
+
+2021-01-27  Michael Albinus  <michael.albinus@gmx.de>
+
+       * lisp/net/dbus.el (dbus-monitor-handler): Disable buffer undo.
+
+2021-01-27  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of 'read-regexp' and friends
+
+       * doc/emacs/glossary.texi (Glossary): Add "Tag" to the Glossary.
+       * doc/emacs/maintaining.texi (Xref): Mention that identifiers are
+       also known as "tags".
+
+       * lisp/replace.el (read-regexp, read-regexp-suggestions): Improve
+       wording of doc strings.  (Bug#46088)  (Bug#46089)
+
+       (cherry picked from commit 49eb03d6c8a181fd46adbbcf1f0a976d0a9efa87)
+
+2021-01-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       read-regexp-suggestions doc string improvement
+
+       * lisp/replace.el (read-regexp-suggestions): Add a link to the
+       manual to explain what a tag is (bug#46089).
+
+       (cherry picked from commit f9cc2d48246fe8370e9286866e6115ba8e2acf44)
+
+2021-01-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Try to improve the read-regexp doc string
+
+       * lisp/replace.el (read-regexp): Attempt to clarify the semantics
+       (bug#46088).
+
+       (cherry picked from commit eded2a7ad7d456a417354a2797c18e9a578414d7)
+
+2021-01-27  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of 'read-regexp' and friends
+
+       * doc/emacs/glossary.texi (Glossary): Add "Tag" to the Glossary.
+       * doc/emacs/maintaining.texi (Xref): Mention that identifiers are
+       also known as "tags".
+
+       * lisp/replace.el (read-regexp, read-regexp-suggestions): Improve
+       wording of doc strings.  (Bug#46088)  (Bug#46089)
+
+2021-01-27  Juri Linkov  <juri@linkov.net>
+
+       * lisp/subr.el (empty-history): Move defvar to functions where it's 
used.
+
+2021-01-27  Juri Linkov  <juri@linkov.net>
+
+       Support variable name for previous-window in 
display-buffer-in-previous-window
+
+       * lisp/window.el (display-buffer-in-previous-window): Support the value 
of
+       'previous-window' entry as a symbol for variable name (bug#45688).
+
+2021-01-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix indentation in sieve-mode
+
+       * lisp/net/sieve-mode.el (sieve-mode-indent-function): New function.
+       (sieve-mode): Don't inherit from C mode, because the syntax
+       doesn't really resemble C mode that much (except being curly braced).
+
+2021-01-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix setting of line/point style in calc gnuplot
+
+       * lisp/calc/calc-graph.el (calc-graph-set-styles): Modern gnuplot
+       requires "ls" before the line style and "ps" before the point
+       style (bug#46070).
+
+2021-01-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       read-regexp-suggestions doc string improvement
+
+       * lisp/replace.el (read-regexp-suggestions): Add a link to the
+       manual to explain what a tag is (bug#46089).
+
+2021-01-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Try to improve the read-regexp doc string
+
+       * lisp/replace.el (read-regexp): Attempt to clarify the semantics
+       (bug#46088).
+
+2021-01-27  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Use lexical-binding in all of `lisp/url`
+
+       * lisp/url/url-dav.el: Use lexical-binding.
+       (url-dav-process-DAV:prop): Remove unused var `handler-func`.
+       (url-dav-lock-resource): Remove unused var `child-url`.
+       (url-dav-active-locks): Remove unused var `properties`.
+       (url-dav-delete-directory): Remove unused var `props`.
+       (url-dav-file-name-completion): Remove unused var `result`.
+
+       * lisp/url/url-expand.el (url-expand-file-name): Use \s
+
+       * lisp/url/url-file.el (url-file): Improve regexp.
+
+       * lisp/url/url-gw.el: Use lexical-binding.
+       (url-open-stream): Remove unused var `cur-retries`, `retry`, `errobj`.
+
+       * lisp/url/url-imap.el: Use lexical-binding.
+       (imap-username, imap-password): Declare.
+
+       * lisp/url/url-mailto.el: Use lexical-binding.
+       (url-mailto): Remove unused var `func`.  Use `push`.
+
+       * lisp/url/url-news.el: Use lexical-binding.
+       (url-news): Remove unused var `article-brackets`.
+
+       * lisp/url/url-cid.el:
+       * lisp/url/url-cache.el:
+       * lisp/url/url-about.el:
+       * lisp/url/url-tramp.el:
+       * lisp/url/url-proxy.el:
+       * lisp/url/url-privacy.el:
+       * lisp/url/url-nfs.el:
+       * lisp/url/url-ldap.el:
+       * lisp/url/url-misc.el:
+       * lisp/url/url-methods.el: Use lexical-binding.
+
+2021-01-26  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/sh-script.el (sh-smie-sh-rules): Tweak indent of new 
`for`
+
+       The new `for (TEST) { BODY }` syntax introduces various challenges.
+       This patch just fixes a trivial subcase.
+
+2021-01-26  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Revert "Allow gnus-retrieve-headers to return headers directly"
+
+       This reverts commit 20add1cd22f9775a4475148b300cf2a4de4bd54a. This
+       needs more work before it's ready to merge.
+
+2021-01-26  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix typos and punctuation
+
+       * src/w32fns.c:
+       * src/frame.h:
+       * doc/lispref/frames.texi (Frame Layout):
+       * etc/NEWS: Fix typos and punctuation in recent changes.
+
+2021-01-26  Martin Rudalics  <rudalics@gmx.at>
+
+       Fix typo in last change of FRAME_INTERNAL_BORDER_WIDTH
+
+       * src/frame.h (FRAME_INTERNAL_BORDER_WIDTH): Fix typo in last
+       change.
+
+2021-01-26  Alexander Miller  <alexanderm@web.de>
+
+       Add distinct controls for child frames' borders (Bug#45620)
+
+       The background of the 'child-frame-border' face instead of the
+       'internal-border' face now controls the color of child frames'
+       borders.
+
+       The 'child-frame-border-width' frame parameter is now used for the
+       width of child frames' borders instead of internal-border-width',
+       though we still fall back on using the latter if the former is not
+       set.
+
+       * doc/lispref/frames.texi (Frame Layout): Mention
+       'child-frame-border' and 'child-frame-border-width'.
+       (Layout Parameters): Mention 'child-frame-border-width'.
+       * etc/NEWS: Mention new face 'child-frame-border' and frame
+       parameter 'child-frame-border-width'.
+       * lisp/faces.el (child-frame-border): New face.
+       * src/dispextern.h (enum face_id): Add CHILD_FRAME_BORDER_FACE_ID.
+       * src/frame.c (Fframe_child_frame_border_width): New function.
+       (gui_report_frame_params): Add entry for Qchild_frame_border_width.
+       * src/frame.h (struct frame): New slot child_frame_border_width.
+       (FRAME_CHILD_FRAME_BORDER_WIDTH): New inlined function.
+       * src/nsfns.m (ns_set_child_frame_border_width): New function.
+       (Fx_create_frame): Handle Qchild_frame_border_width parameter.
+       (ns_frame_parm_handlers): Add ns_set_child_frame_border_width.
+       * src/nsterm.m (ns_clear_under_internal_border): Handle
+       CHILD_FRAME_BORDER_FACE_ID.
+       * src/w32fns.c (w32_clear_under_internal_border): Handle
+       CHILD_FRAME_BORDER_FACE_ID.
+       (w32_set_internal_border_width): New function.
+       (Fx_create_frame): Handle Qchild_frame_border_width parameter.
+       (w32_frame_parm_handlers): Add w32_set_child_frame_border_width.
+       * src/xfaces.c (lookup_basic_face, realize_basic_faces): Handle
+       CHILD_FRAME_BORDER_FACE_ID.
+       * src/xfns.c (x_set_child_frame_border_width): New function.
+       (Fx_create_frame): Handle Qchild_frame_border_width parameter.
+       (x_frame_parm_handlers): Add x_set_child_frame_border_width.
+       * src/xterm.c (x_clear_under_internal_border)
+       (x_after_update_window_line): Handle CHILD_FRAME_BORDER_FACE_ID.
+
+2021-01-26  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Use `lexical-binding` in all `lisp/international` files
+
+       * lisp/startup.el (keyboard-type): Make obsolete and lex-bound.
+
+       * admin/unidata/unidata-gen.el (unidata-gen-file)
+       (unidata-gen-charprop): Mark the generated files to use lexical binding.
+
+       * lisp/international/isearch-x.el: Use lexical-binding.
+       (junk-hist): Declare locally.
+
+       * lisp/international/iso-cvt.el:
+       * lisp/international/utf-7.el:
+       * lisp/international/robin.el:
+       * lisp/international/ogonek.el:
+       * lisp/international/latin1-disp.el:
+       * lisp/international/kkc.el:
+       * lisp/international/kinsoku.el:
+       * lisp/international/ja-dic-utl.el: Use lexical-binding.
+
+       * lisp/international/ja-dic-cnv.el: Use lexical-binding.
+       (skkdic-breakup-string): Remove unused var `kana-len`.
+
+       * lisp/international/latexenc.el: Use lexical-binding.
+       (tex-start-of-header): Declare.
+
+       * lisp/international/mule-diag.el: Use lexical-binding.
+       (list-character-sets): Remove unused var `pos`.
+       (list-character-sets-1): Remove unused vars `tail` and `charset`.
+       (list-charset-chars): Remove unused vars `chars` and `plane`.
+       (describe-coding-system): Remove unused var `extra-spec`.
+       (mule--print-opened): New var.
+       (print-fontset): Bind it.
+       (print-fontset-element): Use it instead of `print-opened`.
+
+       * lisp/international/quail.el: Use lexical-binding.
+       (quail-start-translation, quail-start-conversion):
+       Remove unused var `generated-events`.
+       (quail-help-insert-keymap-description): Use local dynbound var 
`the-keymap`.
+
+2021-01-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make subdirs . nil in dir-locals in ~/ work
+
+       * lisp/files.el (dir-locals-collect-variables): Compare directory
+       names after expanding.  This makes a (subdirs . nil) in ~/ work as
+       expected (bug#17205).
+
+       Test case:
+
+       ((nil . ((a .  "hallo")
+                (subdirs . nil))))
+
+       in ~/
+
+2021-01-25  Juri Linkov  <juri@linkov.net>
+
+       Don't move point to the prompt in previous-line-or-history-element 
(bug#46033)
+
+       * lisp/simple.el (previous-line-or-history-element):
+       Avoid moving point to the prompt.
+
+2021-01-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fontify special forms and macros the same
+
+       * lisp/emacs-lisp/lisp-mode.el (lisp--el-match-keyword): Handle
+       special forms and macros the same way (bug#43265).  This makes
+       things like (setq a '(if a b)) be fontified correctly (i.e., not
+       fontified as a keyword).
+
+2021-01-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Rewrite lisp--el-funcall-position-p to be inverse of the -not function
+
+       * lisp/emacs-lisp/lisp-mode.el (lisp--el-funcall-position-p):
+       Rename and rewrite to return the inverse value.  Non-inverted
+       predicate functions are easier to reason about.
+       (lisp--el-non-funcall-position-p): Make obsolete.
+
+2021-01-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix macro fontification in `condition-case' handler bodies
+
+       * lisp/emacs-lisp/lisp-mode.el (lisp--el-non-funcall-position-p):
+       Fontify macros in the BODY of HANDLERS in `condition-case'
+       correctly (bug#43265).
+
+2021-01-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak `condition-case' keyword highlights
+
+       * lisp/emacs-lisp/lisp-mode.el (lisp--el-non-funcall-position-p):
+       Tweak `condition-case' position check to skip the VAR form.
+
+2021-01-24  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into native-comp
+
+2021-01-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add some elisp-mode font lock tests
+
+2021-01-24  Michael Albinus  <michael.albinus@gmx.de>
+
+       Make Tramp's insert-directory more robust
+
+       * lisp/net/tramp-sh.el (tramp-sh-handle-insert-directory):
+       Use `tramp-sh--quoting-style-options'.
+
+       * test/lisp/net/tramp-tests.el (tramp--test-hpux-p, tramp--test-ksh-p):
+       Remove superfluous nil.
+       (tramp--test-sh-no-ls--dired-p): New defun.
+       (tramp--test-special-characters): Use it.
+
+2021-01-24  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Fix insertion logic of newly subscribed Gnus groups
+
+       * lisp/gnus/gnus-start.el (gnus-subscribe-newsgroup): This was a
+       misunderstanding of the next/previous argument: no group should ever
+       be inserted before "dummy.group".
+       (gnus-group-change-level): Make it clearer that PREVIOUS can be
+       nil. In fact none of this code would error on a nil value, but it
+       _looks_ like nil is unexpected.
+
+2021-01-24  Philipp Stephani  <phst@google.com>
+
+       Add more assertions to recently-added process test.
+
+       * test/src/process-tests.el (process-tests/multiple-threads-waiting):
+       Also check that 'thread-join' and 'thread-last-error' return the
+       expected errors.
+
+2021-01-24  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Erase the buffer only after fetching the new contents
+
+       * lisp/progmodes/xref.el (xref-revert-buffer):
+       Erase the buffer only after fetching the new contents (bug#46042).
+
+       (cherry picked from commit 5821dee0949b2913c07970d6e4b8bb8e8a35f036)
+
+2021-01-24  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Fix recently uncovered 'make check' failures
+
+       For discussion, see the following thread:
+       https://lists.gnu.org/r/emacs-devel/2021-01/msg01111.html
+
+       * test/lisp/autorevert-tests.el
+       (auto-revert-test07-auto-revert-several-buffers):
+       * test/lisp/emacs-lisp/seq-tests.el (test-seq-do-indexed)
+       (test-seq-random-elt-take-all): Fix errors from using add-to-list on
+       lexical variables.
+       * test/lisp/emacs-lisp/cl-lib-tests.el
+       (cl-lib-defstruct-record): Expect test to succeed when byte-compiled
+       following change of 2021-01-23 'Fix missing file&line info in
+       "Unknown defun property" warnings'.
+       (cl-lib-tests--dummy-function): Remove; no longer needed.
+       (old-struct): Silence byte-compiler warning about unused lexical
+       variable.
+
+2021-01-24  Jean Louis  <bugs@gnu.support>
+
+       Add support for dired compressing .lz/.lzo files
+
+       * lisp/dired-aux.el (dired-compress-files-alist): Add support for
+       .lz/.lzo files (bug#44901).
+
+2021-01-23  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Properly initialize gnus-search-namazu-index-directory
+
+       * lisp/gnus/gnus-search.el (gnus-search-namazu): We were missing the
+       appropriate :initform on this slot definition (Bug#46047).
+
+2021-01-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make (subdirs . nil) in .dir-locals.el work
+
+       * lisp/files.el (dir-locals-collect-variables): Don't
+       destructively modify the cached structure (bug#17205), because
+       that means that (subdirs . nil) doesn't work.
+
+2021-01-23  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Fix missing file&line info in "Unknown defun property" warnings
+
+       * lisp/emacs-lisp/byte-run.el (defmacro, defun): Use
+       `macroexp--warn-and-return` rather than `message`.
+
+       * lisp/emacs-lisp/macroexp.el: Fix `macroexp--compiling-p`.
+       (macroexp--warn-and-return): Don't try and detect repetition on forms
+       like `nil`.
+       (macroexp-macroexpand): Don't forget to bind 
`macroexpand-all-environment`.
+
+2021-01-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Provide a (thing-at-point 'url) in eww buffers
+
+       * lisp/net/eww.el (eww-mode): Allow (thing-at-point 'url) to work
+       in eww buffers.
+       (eww--url-at-point): New function.
+
+2021-01-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a mechanism for buffer-local thing-at-points
+
+       * doc/lispref/text.texi (Buffer Contents): Document it.
+
+       * lisp/thingatpt.el (thing-at-point-provider-alist): New variable.
+       (thing-at-point): Use it.
+
+2021-01-23  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from Gnulib by running admin/merge-gnulib
+
+2021-01-23  Gabriel do Nascimento Ribeiro  <gabriel.nascimento@nubank.com.br>
+
+       Use single post-command-hook on hl-line modes
+
+       * lisp/hl-line.el (hl-line-mode, global-hl-line-mode): Ensure
+       that 'maybe-unhighlight' is called after line is highlighted.
+       (Bug#45946)
+       (hl-line-unhighlight, global-hl-line-unhighlight): Set overlay
+       variable to nil after overlay is deleted.
+
+2021-01-23  Philipp Stephani  <phst@google.com>
+
+       Add a unit test testing interaction between threads and processes.
+
+       This unit test tests that we can call 'accept-process-output' in
+       parallel from multiple threads.
+
+       * test/src/process-tests.el (process-tests/multiple-threads-waiting):
+       New unit test.
+
+2021-01-23  Philipp Stephani  <phst@google.com>
+
+       Avoid a few compilation warnings in Objective-C code.
+
+       * src/nsfns.m (Fns_frame_restack): Remove unused variable 'flag'.
+
+       * src/nsmenu.m (ns_update_menubar): Remove unused variable 'pool'.
+
+       * src/nsterm.m (focus_view, hide_bell): Define conditionally.
+       (ns_update_end): Define variable 'view' conditionally.
+       (ns_redraw_scroll_bars): Don't define unused function.
+       (copyRect): Don't perform arithmetic on 'void' pointers.
+       (nswindow_orderedIndex_sort): Make static.
+
+2021-01-23  Philipp Stephani  <phst@google.com>
+
+       * .clang-format: Fix base style.
+
+2021-01-23  Philipp Stephani  <phst@google.com>
+
+       Add a FIXME comment to improve the SIGCHLD race condition handling.
+
+       * src/process.c: Add FIXME comment describing how we could avoid the
+       self-pipe on modern Unix-like systems.
+
+2021-01-23  Philipp Stephani  <phst@google.com>
+
+       Mark both ends of self-pipe a nonblocking.
+
+       While no deadlocks caused by the blocking write end have been reported
+       yet, marking both ends nonblocking is consistent and also recommended
+       in the GNU/Linux manpage of 'select'.
+
+       * src/process.c (child_signal_init): Mark write end of self-pipe as
+       nonblocking.
+
+2021-01-23  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix failed autorevert test on emba
+
+       * test/lisp/autorevert-tests.el (auto-revert-test05-global-notify):
+       Check, whether buffer is alive.
+
+2021-01-23  Michael Albinus  <michael.albinus@gmx.de>
+
+       * test/infra/gitlab-ci.yml (.job-template): Check also for 
test/lib-src/*.el.
+
+2021-01-23  Eli Zaretskii  <eliz@gnu.org>
+
+       Clean up the recently added self-pipe mechanism for WINDOWSNT
+
+       * src/process.c (child_signal_init, child_signal_read)
+       (child_signal_notify): #ifdef away on WINDOWSNT.
+
+2021-01-23  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix last change
+
+       * doc/lispref/text.texi (Undo): Add a cross-reference to the
+       description of 'undo-amalgamate-change-group'.
+       (Atomic Changes): Expand and improve the description of
+       'undo-amalgamate-change-group'.  (Bug#42303)
+
+2021-01-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention undo-amalgamate-change-group in the lispref manual
+
+       * doc/lispref/text.texi (Atomic Changes): Mention
+       undo-amalgamate-change-group (bug#42303).
+
+       (cherry picked from commit ba25a82855a2c03c25fec83f3056c166b692e94f)
+
+2021-01-23  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Erase the buffer only after fetching the new contents
+
+       * lisp/progmodes/xref.el (xref-revert-buffer):
+       Erase the buffer only after fetching the new contents (bug#46042).
+
+2021-01-22  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/simple.el (newline-and-indent): Disable `electric-indent-mode`
+
+       With `electric-indent-mode` enabled, `newline-and-indent` ends up 
indenting
+       3 times: once for the original line and twice on the new line.
+       `reindent-then-newline-and-indent` is even worse, indenting twice
+       both lines.
+       None of those commands should be affected by `electric-indent-mode`
+       since they even explicitly say in their name when and how they do
+       indentation.
+
+       (reindent-then-newline-and-indent): Temporarily disable
+       `electric-indent-mode` as well.
+
+2021-01-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention undo-amalgamate-change-group in the lispref manual
+
+       * doc/lispref/text.texi (Atomic Changes): Mention
+       undo-amalgamate-change-group (bug#42303).
+
+2021-01-22  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Work around __has_attribute bug in clang 3.4
+
+       * src/conf_post.h (HAS_ATTRIBUTE):
+       * src/emacs-module.h.in (EMACS_ATTRIBUTE_NONNULL):
+       Port to clang 3.4 and earlier.
+
+2021-01-22  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from Gnulib by running admin/merge-gnulib
+
+2021-01-22  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Prepare for update from Gnulib
+
+       * configure.ac: Also create lib/malloc and lib/deps/malloc
+       if the dynarray module is in use, as Gnulib regex will
+       start needing it due to recent glibc changes.
+
+2021-01-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix up previous mh-speed.el ignored variable change
+
+       * lisp/mh-e/mh-speed.el (mh-speed-toggle, mh-speed-view): Mark the
+       ignored parameter with _ instead of using the Common Lispish
+       (declare (ignore args)) (which Emacs Lisp doesn't really support),
+       except by accident.
+
+2021-01-22  Keith David Bershatsky  <esq@lawlist.com>
+
+       Add more isearch-related bindings to ns-win.el
+
+       * lisp/term/ns-win.el (minibuffer-local-isearch-map): Add more
+       bindings to mirror bindings in isearch.el (bug#15667).
+
+2021-01-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make nnml handle invalid non-ASCII headers more consistently
+
+       * lisp/gnus/nnml.el (nnml--encode-headers): New function to
+       RFC2047-encode invalid Subject/From headers (bug#45925).  This
+       will make them be displayed more consistently in the Summary
+       buffer (but still "wrong" sometimes, since there's not that much
+       we can guess at at this stage, charset wise).
+       (nnml-parse-head): Use it.
+
+2021-01-22  Michael Albinus  <michael.albinus@gmx.de>
+
+       Use RemoteCommand option for Tramp's sshx and scpx methods
+
+       * doc/misc/tramp.texi (Inline methods) <sshx>:
+       (External methods) <scpx>: Adapt call sequence.
+       (Remote shell setup): Mention, that sshx and scpx overwrite
+       RemoteCommand.
+       (Remote processes): Restriction: direct asynchronous processes
+       cannot be used when RemoteCommand is in use.
+       `tramp-remote-process-environment' is not ignored any longer.
+
+       * lisp/net/tramp-sh.el (tramp-methods) <sshx, scpx>: Handle login
+       shell via RemoteCommand.  Remove `tramp-direct-async' parameter.
+       (tramp-maybe-open-connection): Add "-i" to login.
+
+       * lisp/net/tramp-smb.el (tramp-smb-errors):
+       Add "NT_STATUS_NOT_SUPPORTED".
+       (tramp-smb-handle-insert-directory): Fix point moving error.
+
+       * test/lisp/net/tramp-tests.el (tramp-test34-explicit-shell-file-name):
+       Use `get-buffer-process' where appropriate.
+
+2021-01-22  Mattias Engdegård  <mattiase@acm.org>
+
+       Calc: use big brackets around function arguments
+
+       * lisp/calc/calccomp.el (math-compose-expr): Use big brackets around
+       arguments in Big mode, so that expressions like sin(a/b) look a bit
+       better.
+
+2021-01-22  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid sending systemd shutdown notifications if non-daemon
+
+       * src/emacs.c (Fkill_emacs): Send the shutdown notification only
+       in daemon mode.  (Bug#46022)
+
+2021-01-22  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix last change for DOS_NT systems
+
+       * src/term.c (tty_draw_row_with_mouse_face)
+       (tty_write_glyphs_with_face): Don't define on MSDOS and WINDOWSNT,
+       as those have their own implementations of that.
+
+2021-01-22  João Távora  <joaotavora@gmail.com>
+
+       Enable TTY mouse-face support when built without GPM support
+
+       * src/term.c (tty_write_glyphs_with_face): Move definition out of
+       ifdef block.
+       * src/xdisp.c (draw_row_with_mouse_face): Now called
+       unconditionally on all platforms.
+
+2021-01-22  Glenn Morris  <rgm@gnu.org>
+
+       * lisp/textmodes/remember.el (remember-text-format-function): Fix type.
+
+2021-01-22  Eli Zaretskii  <eliz@gnu.org>
+
+       * src/cmds.c (Fforward_line): Doc fix.  (Bug#46027)
+
+2021-01-22  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of sendmail.el defcustom's
+
+       * lisp/mail/sendmail.el (mail-archive-file-name)
+       (mail-default-reply-to, mail-self-blind, mail-default-headers):
+       Say in the doc string that 'message-default-mail-headers' shall be
+       customized when using 'message-mode' for email composition.
+       (Bug#46029)
+
+2021-01-21  Ted Zlatanov  <tzz@lifelogs.com>
+
+       * test/infra/gitlab-ci.yml: Copy newer files to image to build less 
often.
+
+2021-01-21  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Fix spurious "Lexical argument shadows the dynamic variable" due to 
inlining
+
+       Before this patch doing:
+
+           rm lisp/calendar/calendar.elc
+           make lisp/calendar/cal-hebrew.elc
+
+       would spew out lots of spurious such warnings about a `date` argument,
+       pointing to code which has no `date` argument in sight.  This was
+       because that code had calls to inlinable functions (taking a `date`
+       argument) defined in `calendar.el`, and while `date` is a normal
+       lexical var at the site of those functions' definitions, it was
+       declared as dynbound at the call site.
+
+       * lisp/emacs-lisp/byte-opt.el (byte-compile-inline-expand):
+       Don't impose our local context onto the inlined function.
+
+       * test/lisp/emacs-lisp/bytecomp-tests.el: Add matching test.
+
+2021-01-21  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/net/webjump.el: Add Maintainer: emacs-devel.
+
+       Ref: https://lists.gnu.org/r/emacs-devel/2021-01/msg01019.html
+
+2021-01-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't have type-break-mode signal errors on corrupted files
+
+       * lisp/type-break.el (type-break-get-previous-time):
+       (type-break-get-previous-count): Signal a warning instead of an
+       error (bug#38246).  type-break will still continue to work even if
+       the database can't be loaded after a restart, but this allows
+       Emacs to be started.
+
+2021-01-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix message.el build warning from previous change
+
+       * lisp/gnus/message.el (subr-x): Fix build warning from previous
+       commit.
+
+2021-01-21  Ted Zlatanov  <tzz@lifelogs.com>
+
+       * test/infra/gitlab-ci.yml: Revert to always building.
+
+2021-01-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add dired support for compressing .pax files
+
+       * lisp/dired-aux.el (dired-compress-files-alist): Add support for
+       compressing .pax files (bug#40135).
+
+2021-01-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak previous message-forward-included-mime-headers change
+
+       * lisp/gnus/message.el (message-forward-included-mime-headers):
+       Should probably not include Content-Transfer-Encoding, because we
+       will re-encode anyway.
+
+2021-01-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make Message respect header removal instructions more
+
+       * doc/misc/message.texi (Forwarding): Document it.
+
+       * lisp/gnus/message.el (message-forward-ignored-headers): Improve
+       documentation.
+       (message-forward-included-headers): Ditto.
+       (message-forward-included-mime-headers): New user option.
+       (message-remove-ignored-headers): Use it to preserve the necessary
+       MIME headers.
+       (message-forward-make-body): Remove headers when forwarding as
+       MIME, too.
+
+2021-01-21  Eli Zaretskii  <eliz@gnu.org>
+
+       A better fix for 'kill-visual-line'
+
+       * lisp/simple.el (kill-visual-line): Use the 6th element of the
+       return value of 'posn-at-point', which provides the coordinates in
+       terms or row and column, and is thus more reliable for deciding
+       whether we moved to the next screen line.  (Bug#45837)
+
+2021-01-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix thinko in previous footnote.el change
+
+       * lisp/mail/footnote.el (footnote--regenerate-alist): Don't error
+       out when there's no footnotes.
+
+2021-01-21  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Use `lexical-binding` in all the cal-*.el files
+
+       * lisp/calendar/cal-bahai.el: Use lexical-binding.
+       (calendar-bahai-date-string): Use `calendar-dlet*`.
+
+       * lisp/calendar/cal-china.el: Use lexical-binding.
+       (calendar-chinese-zodiac-sign-on-or-after)
+       (calendar-chinese-new-moon-on-or-after): Declare `year`.
+       (calendar-chinese-from-absolute-for-diary)
+       (calendar-chinese-to-absolute-for-diary)
+       (calendar-chinese-mark-date-pattern): Avoid dynbound var `date` as
+       function argument.
+
+       * lisp/calendar/cal-coptic.el: Use lexical-binding.
+       (calendar-coptic-date-string): Use `calendar-dlet*`.
+       (calendar-ethiopic-to-absolute, calendar-ethiopic-from-absolute)
+       (calendar-ethiopic-date-string, calendar-ethiopic-goto-date):
+       Avoid dynbound var `date` as function argument.
+
+       * lisp/calendar/cal-french.el: Use lexical-binding.
+
+       * lisp/calendar/cal-hebrew.el: Use lexical-binding.
+       (holiday-hebrew-hanukkah): Don't use the third form in `dotimes`.
+
+       * lisp/calendar/cal-islam.el: Use lexical-binding.
+       (calendar-islamic-to-absolute): Comment out unused vars `month` and 
`day`.
+
+       * lisp/calendar/cal-move.el:
+       * lisp/calendar/cal-mayan.el:
+       * lisp/calendar/cal-iso.el: Use lexical-binding.
+
+       * lisp/calendar/cal-persia.el: Use lexical-binding.
+       (calendar-persian-date-string): Use `calendar-dlet*`.
+
+       * lisp/calendar/cal-html.el: Use lexical-binding.
+       (cal-html-insert-minical): Comment out unused var `date`.
+       (cal-html-cursor-month, cal-html-cursor-year): Mark `event` arg as 
unused.
+
+       * lisp/calendar/cal-menu.el: Use lexical-binding.
+       (diary-list-include-blanks): Declare var.
+
+       * lisp/calendar/cal-x.el: Use lexical-binding.
+
+       * lisp/calendar/cal-tex.el: Use lexical-binding.
+       (diary-list-include-blanks): Declare var.
+       (cal-tex-insert-days, cal-tex-cursor-week-iso, cal-tex-week-hours)
+       (cal-tex-weekly-common, cal-tex-cursor-filofax-2week)
+       (cal-tex-cursor-filofax-daily, cal-tex-daily-page): Declare `date`
+       as dynbound for the benefit of `cal-tex-daily-string`.
+
+2021-01-21  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Use `calendar-read-sexp` instead of the now obsolete `calendar-read`
+
+       * lisp/calendar/diary-lib.el (diary-insert-cyclic-entry):
+       * lisp/calendar/cal-persia.el (calendar-persian-read-date):
+       * lisp/calendar/cal-move.el (calendar-goto-day-of-year):
+       * lisp/calendar/cal-mayan.el (calendar-mayan-read-haab-date)
+       (calendar-mayan-read-tzolkin-date):
+       * lisp/calendar/cal-julian.el (calendar-julian-goto-date)
+       (calendar-astro-goto-day-number):
+       * lisp/calendar/cal-iso.el (calendar-iso-read-date):
+       * lisp/calendar/cal-islam.el (calendar-islamic-read-date):
+       * lisp/calendar/cal-hebrew.el (calendar-hebrew-read-date)
+       (calendar-hebrew-list-yahrzeits):
+       * lisp/calendar/cal-french.el (calendar-french-goto-date):
+       * lisp/calendar/cal-coptic.el (calendar-coptic-read-date):
+       * lisp/calendar/cal-china.el (calendar-chinese-goto-date):
+       * lisp/calendar/cal-bahai.el (calendar-bahai-read-date):
+       * lisp/calendar/holidays.el (list-holidays): Use `calendar-read-sexp`.
+
+2021-01-21  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/calendar/cal-french.el (calendar-french-accents-p): Obsolete 
function
+
+       Always assume accented letters can be used
+
+       (calendar-french-month-name-array)
+       (calendar-french-special-days-array): Use the accented names.
+       (calendar-french-multibyte-month-name-array)
+       (calendar-french-multibyte-special-days-array): Make those vars
+       obsolete aliases.
+       (calendar-french-month-name-array, calendar-french-day-name-array)
+       (calendar-french-special-days-array): Mark functions as obsolete.
+       (calendar-french-date-string, calendar-french-goto-date): Always use
+       the text with accents.
+
+2021-01-21  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/calendar/calendar.el (calendar-read-sexp): New function
+
+       (calendar-read): Mark as obsolete.
+       (calendar-read-date): Use it.  Add `default-date` argument.
+       Provide defaults for the month and day (fixes bug#32105).
+
+2021-01-21  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile--declare-var): Fix warning
+
+       Make sure the "declared after first use" is under the control of
+       the `lexical` option.
+
+2021-01-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix recent remember-diary-extract-entries change
+
+       * lisp/textmodes/remember.el (remember-diary-extract-entries): Use
+       `remember-diary-file' over `diary-file'.
+
+2021-01-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       checkdoc-spellcheck-documentation-flag doc string improvement
+
+       * lisp/emacs-lisp/checkdoc.el
+       (checkdoc-spellcheck-documentation-flag): Mention
+       `ispell-kill-ispell' (bug#6221).
+
+2021-01-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Always send Lisp words to checkdoc-ispell-init"
+
+       This reverts commit 93141d581330d94e7eec9f114def2bec15f87866.
+
+       This would make checkdoc words be used in other flyspell
+       buffers.
+
+2021-01-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Always send Lisp words to checkdoc-ispell-init
+
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-ispell-init): Always send
+       the Lisp words to the process (bug#6221).  This allows an existing
+       ispell process to be correctly initialised.
+
+2021-01-20  Juri Linkov  <juri@linkov.net>
+
+       Move the ‘declare’ form before the interactive spec in 10 functions.
+
+       * lisp/emacs-lisp/package.el (package-menu-hide-package):
+       * lisp/font-lock.el (font-lock-debug-fontify):
+       * lisp/image.el (image-jpeg-p):
+       * lisp/mail/flow-fill.el (fill-flowed-test):
+       * lisp/mh-e/mh-speed.el (mh-speed-toggle, mh-speed-view):
+       * lisp/progmodes/project.el (project-async-shell-command)
+       (project-shell-command, project-compile):
+       * lisp/progmodes/sh-script.el (sh-assignment):
+       Fix special forms to follow in this order: docstring, declare, 
interactive.
+
+2021-01-20  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/subr-x.el (named-let): New macro
+
+2021-01-20  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize-lapcode): Add 2 new opts
+
+       This introduces two new optimizations.  They're designed for code like
+
+           (while
+               (let (...)
+                 (if ... (progn blabla t) (progn blabla nil)))
+             ...)
+
+       and they allow the elimination of the test internal to `while` since
+       we can immediately know when we return `t` or `nil` what the result
+       of the test will be.
+
+       `cl-labels` tends to generate this kind of code when it applies the
+       tail-call optimization.
+
+2021-01-20  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize-lapcode): Move some opts.
+
+       This moves two optimizations from the final pass to the main loop.
+       Both may enable further optimizations (and the second can be applied
+       repeatedly but "from the end", so the loop in the final pass only gets
+       to apply it once).
+
+2021-01-20  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize-lapcode): Re-indent
+
+2021-01-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix footnote-mode problem when reopening an old file
+
+       * lisp/mail/footnote.el (footnote--regenerate-alist): New function
+       (bug#7258).
+       (footnote-mode): Use it to restore footnotes after opening an old
+       file with footnotes.
+
+2021-01-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       cua-toggle-global-mark doc string clarification
+
+       * lisp/emulation/cua-gmrk.el (cua-toggle-global-mark): Clarify
+       that also inserted characters are affected (bug#8083).
+
+2021-01-20  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix environment handling in tramp-handle-make-process
+
+       * lisp/net/tramp.el (tramp-test-message): Add `tramp-suppress-trace' 
property.
+       (tramp-handle-make-process): Handle also 
'tramp-remote-process-environment'.
+
+2021-01-20  Gabriel do Nascimento Ribeiro  <gabriel.nascimento@nubank.com.br>
+
+       Respect remember-save-after-remembering on 
remember-diary-extract-entries
+
+       * lisp/textmodes/remember.el (remember-diary-extract-entries):
+       Save automatically if `remember-save-after-remembering' is non-nil
+       (bug#45811).
+
+2021-01-20  Gabriel do Nascimento Ribeiro  <gabriel376@hotmail.com>
+
+       Add option remember-text-format-function
+
+       * lisp/textmodes/remember.el (remember-text-format-function): New
+       variable (bug#45809).
+       (remember-append-to-file): Use it.
+
+2021-01-20  Gabriel do Nascimento Ribeiro  <gabriel.nascimento@nubank.com.br>
+
+       Add option remember-diary-regexp
+
+       * lisp/textmodes/remember.el (remember-diary-extract-entries): Use
+       it (bug#45808).
+       (remember-diary-regexp): New variable.
+
+2021-01-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak tty-find-type to allow TERM=screen.xterm
+
+       * lisp/faces.el (tty-find-type): Allow TERM=screen.xterm to find
+       term/screen.el (bug#45824).
+
+2021-01-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make symbol-at-point return nil if there's no symbols in the buffer
+
+       * lisp/thingatpt.el (thing-at-point--beginning-of-symbol): Special
+       op that errors out when there's no symbols in the buffer before
+       point (bug#14234).
+       (symbol): Use it.
+
+2021-01-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add tests for symbol-at-point (bug#14234)
+
+2021-01-20  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Don't let `maybe_quit` prevent resetting `consing_until_gc` (bug#43389)
+
+       * src/alloc.c (garbage_collect): Postpone `unblock_input` a bit.
+       * src/window.c (window_parameter): Avoid `maybe_quit`.
+
+2021-01-20  Fabrice Bauzac  <noon@mykolab.com>  (tiny change)
+
+       Sort Ibuffer filename/process column as displayed
+
+       * lisp/ibuf-ext.el (ibuffer-do-sort-by-filename/process): Use the
+       same function for sorting and for displaying the
+       filename/process (Bug#45800).
+
+2021-01-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Make `symbol-at-point' work in buffers with no symbols"
+
+       This reverts commit 40a5df81434ce02fba01779256b50976fb74da4f.
+
+       This fails when a point is after a symbol, and there's
+       nothing else in the buffer.
+
+2021-01-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't add Content-Type when ceasing an rmail edit
+
+       * lisp/mail/rmailedit.el (rmail-cease-edit): Take an optional
+       parameter to avoid altering the message (bug#13327).
+       (rmail-abort-edit): Use it.
+
+2021-01-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make `symbol-at-point' work in buffers with no symbols
+
+       * lisp/thingatpt.el (thing-at-point--end-of-symbol): New function
+       (bug#14234).
+       (symbol): Use it instead of `forward-symbol', because the latter
+       will move to the end of the buffer even if there is no symbol
+       there.  Instead error out like `forward-sexp' and friends.
+
+2021-01-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix up example in the Modifying Menus node in the lispref manual
+
+       * doc/lispref/keymaps.texi (Modifying Menus): Make the second
+       example more regular (bug#14257).
+
+2021-01-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention that the mouse will switch on transient-mark-mode in manual
+
+       * doc/lispref/markers.texi (The Mark): Mention that the mouse will
+       enable the `(only)' transient mark mode (bug#14945).
+
+2021-01-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make sh-mode use `auto-mode-interpreter-regexp'
+
+       * lisp/progmodes/sh-script.el (sh-mode): Use
+       `auto-mode-interpreter-regexp' instead of open-coding the value
+       (bug#17158).
+
+2021-01-20  Nick Drozd  <nicholasdrozd@gmail.com>
+
+       test/lisp/replace-tests.el: Add nested match group test
+
+       * test/lisp/replace-tests.el (replace-regexp-bug45973): Add test
+       (bug#45973).
+
+2021-01-19  Andrea Corallo  <akrl@sdf.org>
+
+       Do not add unnecessary arg constraints (bug#45812 bug#45705 bug#45751).
+
+       These have the effect of bloating the IR for no effect killing compile
+       time.  The typical cases for that are extremely long backuoted lists.
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr-t): New var.
+       * lisp/emacs-lisp/comp.el (comp-add-call-cstr): No need to add
+       arg call constraints if this is t.
+
+2021-01-19  Philipp Stephani  <phst@google.com>
+
+       Make child signal read pipe non-blocking.
+
+       Otherwise Emacs might hang when trying to read the pipe twice in a
+       row.  This is consistent with the other file descriptors we pass to
+       'pselect'.
+
+       * src/process.c (child_signal_init): Make read end of pipe
+       non-blocking.
+
+2021-01-19  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Declare some project commands interactive-only
+
+       * lisp/progmodes/project.el (project-async-shell-command)
+       (project-shell-command, project-compile):
+       Declare interactive-only (bug#45765).
+
+2021-01-19  Juri Linkov  <juri@linkov.net>
+
+       * lisp/help-fns.el: Move defvar keymap-name-history closer to where 
it's used.
+
+2021-01-19  Juri Linkov  <juri@linkov.net>
+
+       Better check for nil in search-/query-replace-highlight-submatches 
(bug#45973)
+
+       * lisp/isearch.el (isearch-highlight):
+       * lisp/replace.el (replace-highlight):
+       Use integer-or-marker-p to check matches.
+
+2021-01-19  Ted Zlatanov  <tzz@lifelogs.com>
+
+       * test/infra/gitlab-ci.yml: Bootstrap only from web, schedule, or 
C-related.
+
+2021-01-19  Mattias Engdegård  <mattiase@acm.org>
+
+       Calc: use Unicode brackets in Big mode when available (bug#45917)
+
+       * lisp/calc/calccomp.el (math--big-bracket-alist)
+       (math--big-bracket, math--comp-bracket, math--comp-round-bracket):
+       New.
+       (math-compose-expr, math-compose-log, math-compose-log10)
+       (math-compose-choose, math-compose-integ, math-compose-sum)
+       (math-compose-prod): Use big brackets when available.
+
+2021-01-19  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * etc/NEWS.19: Add entry for `indent-line-to`
+
+       * lisp/version.el (emacs-major-version, emacs-minor-version):
+       Remove redundant version info already displayed by `C-h o`.
+
+2021-01-19  Michael Albinus  <michael.albinus@gmx.de>
+
+       Some Tramp fixes, resulting from test campaign
+
+       * doc/misc/tramp.texi (Remote shell setup): Clarifications for
+       `tramp-actions-before-shell' example.
+
+       * lisp/net/tramp-sh.el (tramp-sh-handle-insert-directory): Do not expand
+       FILENAME explicitly.
+       (tramp-open-shell): Add "-i" for interactive shells.
+
+       * test/lisp/net/tramp-tests.el (tramp-test07-file-exists-p)
+       (tramp-test14-delete-directory)
+       (tramp-test43-asynchronous-requests): Skip for MS windows.
+
+2021-01-19  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/startup.el: Fix bug#45857, bug#30994, and bug#45913.
+
+       (command-line): Don't re-evaluate the `custom-delayed-init-variables`
+       a second time after reading the `early-init.el` file.
+       (x-apply-session-resources): Set `blink-cursor-mode` rather than
+       `no-blinking-cursor`.
+
+       * lisp/frame.el (blink-cursor-start): Turn `blink-cursor-mode` off
+       if `blink-cursor-mode` was set to nil.
+       (blink-cursor-mode): Default to it being enabled regardless of
+       `window-system`.
+
+       * lisp/custom.el (custom-initialize-delay): Fox docstring now that
+       autoload.el preserves the `:initialize` info.
+
+2021-01-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Only show "2x entries" i vc log buffers if needed
+
+       * lisp/vc/vc.el (vc-print-log-setup-buttons): Only show the "more"
+       buttons if we got more or equal to the number of entries we asked
+       for (bug#18959).
+
+2021-01-19  Mattias Engdegård  <mattiase@acm.org>
+
+       Parse square root sign in embedded Calc mode
+
+       * lisp/calc/calc-lang.el (math-read-big-rec): Recognise √ since it may
+       be used in Big mode.
+
+2021-01-19  Mattias Engdegård  <mattiase@acm.org>
+
+       Missing dynamic variable declarations in Calc
+
+       * lisp/calc/calc-embed.el (calc-embedded-set-modes): Prevent
+       the-language and the-display-just from being lexically bound here,
+       because they may be assigned using 'set'.
+
+2021-01-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix slow abbrev expansion in `message-mode' in some circumstances
+
+       * lisp/gnus/message.el (message--syntax-propertize): Use the
+       correct Message mode syntax table to avoid having
+       `message-cite-prefix-regexp' trigger very heavy backtracing when
+       called from an abbrev context (which defines "_" as a word
+       constituent) (bug#45944).
+
+2021-01-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't stop Gnus startup on password failures
+
+       * lisp/gnus/nntp.el (nntp-send-authinfo): Don't signal an
+       `nntp-authinfo-rejected' error, because that will stop Gnus
+       startup (bug#45855).  Instead signal an error that will be caught
+       higher up.
+
+2021-01-19  Michael Albinus  <michael.albinus@gmx.de>
+
+       Handle also test/lib-src directory
+
+       * test/Makefile.in (SUBDIRS): Add lib-src.
+
+       * test/README: Add predefined selectors.
+
+       * test/file-organization.org: Mention test/lib-src directory.
+
+2021-01-19  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Fix list-colors-print handling of callback arg
+
+       * lisp/facemenu.el (list-colors-print): Keeping
+       backward-compatibility, don't fail when passed a closure object as
+       CALLBACK.  (Bug#45831)
+
+2021-01-19  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Add test for the widget-color-match function (Bug#45829)
+
+       * test/lisp/wid-edit-tests.el (widget-test-color-match): New test.
+
+2021-01-19  Drew Adams  <drew.adams@oracle.com>
+
+       Tweaks to the color widget (Bug#45829)
+
+       * lisp/wid-edit.el (widget-color-match, widget-color-validate): New
+       functions.
+       (color): Use the new functions.  Base size on longest defined color
+       name, defaulting to the longest RGB hex string.
+
+2021-01-19  Protesilaos Stavrou  <info@protesilaos.com>
+
+       Add 'perl-non-scalar-variable' face to perl-mode
+
+       * etc/NEWS: Document the new face (bug#45840).
+       * lisp/progmodes/perl-mode.el (perl-non-scalar-variable): Define new
+       face.
+       (perl-font-lock-keywords-2): Apply 'perl-non-scalar-variable' face.
+
+2021-01-19  James N. V. Cash  <james.nvc@gmail.com>  (tiny change)
+
+       Define keymap-name-history
+
+       * lisp/help-fns.el (keymap-name-history): Define the history
+       variable (bug#45879).  This avoids problems in other completing
+       systems like Helm.
+
+2021-01-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Actually make the calc trail window dedicated
+
+       * lisp/calc/calc.el (calc-trail-display): Actually make the trail
+       window dedicated (bug#45928).
+
+2021-01-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't infloop in comint-redirect-results-list-from-process
+
+       * lisp/comint.el (comint-redirect-results-list-from-process):
+       Ensure forward progress (bug#45950).
+
+2021-01-19  Lucas Werkmeister  <mail@lucaswerkmeister.de>
+
+       Mark the various nxml flags as safa
+
+       * lisp/nxml/nxml-mode.el (nxml-char-ref-display-glyph-flag)
+       (nxml-sexp-element-flag, nxml-slash-auto-complete-flag)
+       (nxml-child-indent, nxml-attribute-indent)
+       (nxml-bind-meta-tab-to-complete-flag)
+       (nxml-prefer-utf-16-to-utf-8-flag)
+       (nxml-prefer-utf-16-little-to-big-endian-flag)
+       (nxml-default-buffer-file-coding-system)
+       (nxml-auto-insert-xml-declaration-flag): Add :safe to allow easier
+       cusomization (bug#45969).
+
+2021-01-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "* .gitignore: add src/fingerprint.c"
+
+       This reverts commit 2644353cbc65927a6a0a76d68e00d017771cdd03.
+
+       The src/fingerprint.c file is no longer generated, and the spelling of 
the obsolete function was correct.
+
+2021-01-19  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Make sure the new window is not too tall
+
+       * lisp/progmodes/xref.el (xref-show-definitions-buffer-at-bottom):
+       Make sure the new window is not too tall (bug#45945).
+
+2021-01-18  Stephen Gildea  <stepheng+emacs@gildea.com>
+
+       time-stamp-tests now pass in more locales
+
+       Update time-stamp-tests to use format-time-string to generate the date
+       words (month, day of week, AM/PM) instead of hard-coding English.  Now
+       the tests pass in locales other than "C" and US English.
+
+       Expand the test coverage of modifier characters.
+
+2021-01-18  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Allow gnus-retrieve-headers to return headers directly
+
+       Previously, all Gnus backends returned header information by writing
+       nov lines into the nntp-server-buffer, which was later parsed.  This
+       commit allows the backends to return their header information as a
+       list of already-parsed headers, though so far none of the backends
+       actually do that.  The agent, cache, cloud etc. now operate on parsed
+       headers rather than nov text, ie. they use gnus-fetch-headers instead
+       of gnus-retrieve-headers.
+
+       * lisp/gnus/gnus-sum.el (gnus-fetch-headers): Handle the case in which
+       gnus-retrieve-headers returns headers directly.
+       * lisp/gnus/nnvirtual.el (nnvirtual-retrieve-headers): Use
+       gnus-fetch-headers rather than gnus-retrieve-headers to get headers,
+       meaning we're operating on already-parsed headers.
+       (nnvirtual-convert-headers): Remove now-unnecessary function.
+       (nnvirtual-update-xref-header): Rewrite to operate on parsed header.
+       * lisp/gnus/gnus-cloud.el (gnus-cloud-available-chunks): Use
+       gnus-fetch-headers instead of gnus-retrieve-headers.
+       * lisp/gnus/gnus-cache.el (gnus-cache-retrieve-headers): Use
+       gnus-fetch-headers.
+       (gnus-cache-braid-nov, gnus-cache-braid-heads): Delete unnecessary
+       functions -- we now do this work on a list of parsed headers.
+       * lisp/gnus/gnus-agent.el (gnus-agent-retrieve-headers): Use
+       gnus-fetch-headers.
+       (gnus-agent-braid-nov): Remove unnecessary function.
+       (gnus-agent-fetch-headers): Use gnus-fetch-headers.
+
+2021-01-18  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Fix ibuffer-mark-by-file-name-regexp abbreviations
+
+       * lisp/ibuffer.el (ibuffer--abbreviate-file-name): New function.
+       (filename): Use it.
+       * lisp/ibuf-ext.el (ibuffer-mark-by-file-name-regexp): Prefer
+       read-regexp over read-string for reading regexps.  Determine file
+       name using ibuffer-buffer-file-name for consistency.  Abbreviate
+       file name using ibuffer-directory-abbrev-alist (bug#18859).
+
+2021-01-18  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Use format-prompt in read-regexp.
+
+       * lisp/replace.el (read-regexp): Use format-prompt (bug#12443).
+
+2021-01-18  Eric Ludlam  <ericludlam@gmail.com>
+
+       * lisp/cedet/ede/proj.el: Enable Project files to load
+
+       (ede-proj-target-makefile): Give more precise type for its `rules` slot.
+
+       * lisp/cedet/ede/base.el (ede-target-list): Don't define.
+       (ede-project): Use `list-of` instead.
+
+2021-01-18  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix recent changes for Cham script
+
+       * lisp/language/cham.el ("Cham"): Fix sample-text.
+       * lisp/leim/quail/cham.el: Really install this new file.
+
+2021-01-18  Aaron Jensen  <aaronjensen@gmail.com>
+
+       * test/src/xdisp-tests.el: Fix tests to work in batch mode
+
+       (xdisp-tests--window-text-pixel-size)
+       (xdisp-tests--window-text-pixel-size-leading-space)
+       (xdisp-tests--window-text-pixel-size-trailing-space): Fix tests.
+       (Bug#45748)
+
+2021-01-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't double up keys in epa--list-keys
+
+       * lisp/epa.el (epa--list-keys): Delete the list keys before
+       redisplaying (bug#44134).
+
+2021-01-18  Stephen Berman  <stephen.berman@gmx.net>
+
+       Fix problem with `epa-list-keys' bugging out
+
+       * lisp/epa.el (epa--list-keys): Partially revert 517285f7cae which
+       removed the wrong property (bug#44134).
+
+2021-01-18  Mattias Engdegård  <mattiase@acm.org>
+
+       Avoid macOS NSFilenamesPboardType warning (bug#33035)
+
+       * src/nsterm.h (NS_USE_NSPasteboardTypeFileURL): New #define.
+       * src/nsterm.m (ns_term_init):
+       ([EmacsView performDragOperation:]):
+       * src/nsselect.m (ns_string_to_symbol):
+       (nxatoms_of_nsselect):
+       NSFilenamesPboardType was deprecated in macOS 10.14; use
+       NSPasteboardTypeFileURL instead when available.
+
+2021-01-18  Philipp Stephani  <phst@google.com>
+
+       Replace Unix commands with Emacs in process tests.
+
+       That way, the tests only depend on Emacs, and not on utilities that
+       might not be available during test time.
+
+       * test/src/process-tests.el (process-tests--eval)
+       (process-tests--emacs-command, process-tests--emacs-binary)
+       (process-tests--dump-file)
+       (process-tests--usable-file-for-reinvoke): New helper functions.
+       (process-tests/sentinel-called)
+       (process-tests/sentinel-with-multiple-processes): Use them.
+
+2021-01-17  Andrea Corallo  <akrl@sdf.org>
+
+       Run dead code removal always before fwprop, optim bootstrap time (~20% 
less)
+
+       * lisp/emacs-lisp/comp.el (comp-passes): Remove `comp-dead-code'.
+       (comp-fwprop): Call `comp-dead-code'.
+       (comp-dead-code): Remove fake arg.
+
+2021-01-17  Andrea Corallo  <akrl@sdf.org>
+
+       Introduce `comp-fwprop-max-insns-scan' as heuristic threshold
+
+       * lisp/emacs-lisp/comp.el (comp-fwprop-max-insns-scan): New
+       constant.
+       (comp-fwprop*): Give-up when `comp-fwprop-max-insns-scan' is
+       exceeded.
+
+2021-01-17  Andrea Corallo  <akrl@sdf.org>
+
+       Make `comp-enable-subr-trampolines' effective for advices (bug#45854)
+
+       * src/comp.c: Copyright update.
+       (syms_of_comp): Update `comp-enable-subr-trampolines' doc.
+       * lisp/emacs-lisp/comp.el (comp-subr-trampoline-install): Check
+       for `comp-enable-subr-trampolines'.
+
+2021-01-17  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve support for the Cham script and languages
+
+       * etc/NEWS: Announce the new 'cham' input method.
+       * etc/HELLO: Fix the order of letters in the Cham greeting.
+       Remove redundant newlines (reported by Ulrich Mueller
+       <ulm@gentoo.org>).
+
+       * lisp/language/cham.el ("Cham"): Add input-method entry.
+       * lisp/leim/quail/cham.el: New file.
+       * lisp/international/fontset.el (setup-default-fontset): Add an
+       entry for Cham.
+
+2021-01-17  Ted Zlatanov  <tzz@lifelogs.com>
+
+       * test/infra/gitlab-ci.yml: Merge test-template into job-template.
+
+2021-01-17  Philipp Stephani  <phst@google.com>
+
+       Ensure that sentinels are called during 'accept-process-output'.
+
+       When we're trying to notify a process about a status change, we need
+       to ignore the SIGCHLD pipe temporarily, otherwise the code would
+       likely not run into the timeout case that's necessary for a status
+       change to happen.
+
+       * src/process.c (wait_reading_process_output): Ignore the SIGCHLD pipe
+       when notifying a process about a status change.
+       * test/src/process-tests.el (process-tests/sentinel-called)
+       (process-tests/sentinel-with-multiple-processes): New unit tests.
+
+2021-01-17  Michael Albinus  <michael.albinus@gmx.de>
+
+       Add new targets to test/Makefile
+
+       * test/Makefile.in (SUBDIRS): New variable.
+       (subdir_template): New template.
+       (top) Create new check-<dirname> targets.
+
+       * test/README: Document them.
+
+       * test/infra/gitlab-ci.yml (test-lisp-net-inotify): Rename.
+
+2021-01-17  Philipp Stephani  <phst@google.com>
+
+       Add a bit more clarification around standard error processes.
+
+       * doc/lispref/processes.texi (Asynchronous Processes): Document
+       how to obtain the standard error process that Emacs creates.
+       (Accepting Output): Add an example how to wait for standard error in
+       case Emacs has created a standard error process.
+
+2021-01-16  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker): Use 
pcase
+
+2021-01-16  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/pcase.el: Add support for `not` to `pred`
+
+       (pcase--split-pred, pcase--funcall): Adjust for `not`.
+       (pcase--get-macroexpander): New function.
+       (pcase--edebug-match-macro, pcase--make-docstring)
+       (pcase--macroexpand): Use it.
+
+       * lisp/emacs-lisp/radix-tree.el (radix-tree-leaf): Use it!
+
+       * doc/lispref/control.texi (The @code{pcase} macro): Document it.
+
+       * lisp/emacs-lisp/ert.el (ert--explain-equal-rec): Remove redundant 
test.
+
+2021-01-16  Philipp Stephani  <phst@google.com>
+
+       Don't crash if no asynchronous process has been created yet.
+
+       * src/process.c (wait_reading_process_output): Allow
+       child_signal_read_fd < 0.
+
+2021-01-16  Philipp Stephani  <phst@google.com>
+
+       Fix deadlock when receiving SIGCHLD during 'pselect'.
+
+       If we receive and handle a SIGCHLD signal for a process while waiting
+       for that process, 'pselect' might never return.  Instead, we have to
+       explicitly 'pselect' that the process status has changed.  We do this
+       by writing to a pipe in the SIGCHLD handler and having
+       'wait_reading_process_output' select on it.
+
+       * src/process.c (child_signal_init): New helper function to create a
+       pipe for SIGCHLD notifications.
+       (child_signal_read, child_signal_notify): New helper functions to
+       read from/write to the child signal pipe.
+       (create_process): Initialize the child signal pipe on first use.
+       (handle_child_signal): Notify waiters that a process status has
+       changed.
+       (wait_reading_process_output): Make sure that we also catch
+       SIGCHLD/process status changes.
+
+       * test/src/process-tests.el
+       (process-tests/fd-setsize-no-crash/make-process): Remove workaround,
+       which is no longer needed.
+
+2021-01-16  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix Rmail summary for more than 99,999 messages
+
+       * lisp/mail/rmailsum.el (rmail-summary-font-lock-keywords): Don't
+       assume there will be less than 100,000 messages in an mbox file.
+       (Bug#45912)
+
+2021-01-16  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix two tests
+
+       * test/lisp/progmodes/elisp-mode-tests.el (xref-elisp-test-run):
+       Make sure file names can be compared as strings, by running them
+       through 'file-truename'.  Reported by Vin Shelton
+       <acs@alumni.princeton.edu>.
+       * test/lisp/emacs-lisp/bytecomp-tests.el ("warn-obsolete-hook.el")
+       ("warn-obsolete-variable.el"): Use [^z-a] to match a newline as
+       well.  Reported by Vin Shelton <acs@alumni.princeton.edu>.
+
+2021-01-16  Ted Zlatanov  <tzz@lifelogs.com>
+
+       test/infra/gitlab-ci.yml: run only for tags and some branches
+
+2021-01-16  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve support for Cham script
+
+       * lisp/language/cham.el ("Cham"): Expand the entry.
+
+       * etc/HELLO: Add entry for Cham.
+
+2021-01-16  Ted Zlatanov  <tzz@lifelogs.com>
+
+       EMBA container build improvements for Emacs build testing.
+
+       * test/infra/gitlab-ci.yml: Moved from .gitlab-ci.yml. Use the
+       EMBA container registry with a different login token storage file
+       for each commit. Split test stages into prep, build, fast tests,
+       normal tests, platform tests, and slow (everything) and use
+       templates where possible.
+
+       * .gitlab-ci.yml: Include test/infra/gitlab-ci.yml and move all
+       content there.
+
+2021-01-16  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix last change
+
+       * src/frame.c (Fset_mouse_position, Fset_mouse_pixel_position):
+       Don't compile the FRAME_MSDOS_P case on platforms other than
+       MSDOS, as that will never happen there.
+
+2021-01-16  Jared Finder  <jared@finder.org>
+
+       Make mouse-related calls be more consistent on all frame types
+
+       * src/frame.c (Fset_mouse_position, Fset_mouse_pixel_position): Call
+       Fselect_frame and appropriate mouse_moveto function on all non-GUI
+       frame types, independent of #ifdef's.
+       * src/term.c (init_tty): Initialize mouse_face_window for all
+       non-GUI frame types.
+       (term_mouse_moveto) [HAVE_GPM]: Make available even if
+       HAVE_WINDOW_SYSTEM is defined.
+       * src/xdisp.c (try_window_id): Call gui_clear_window_mouse_face
+       in all cases.
+
+2021-01-16  Philip Brown  <pdbrown.git@gmail.com>  (tiny change)
+
+       * Set `backtrace-line-length' in async worker processes
+
+       Philip Brown <pdbrown.git@gmail.com>
+
+       * lisp/emacs-lisp/comp.el (comp-run-async-workers): Set
+       backtrace-line-length in async worker processes.
+
+2021-01-16  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into native-comp
+
+2021-01-16  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/frame.el Don't activate `blink-cursor-idle-timer` needlessly.
+
+       (blink-cursor-mode): Use `blink-cursor-check` rather than
+       `blink-cursor--start-idle-timer` so we check for the presence of
+       a frame where the cursor can be blinked before activating the idle 
timer.
+
+2021-01-16  Kévin Le Gouguec  <kevin.legouguec@gmail.com>
+
+       Change default-directory before prompting in project-compile
+
+       This causes command completion to work from the project root, letting
+       users complete top-level folders, make targets, etc (bug#45765).
+
+       * lisp/progmodes/project.el (project-compile): Simplify using
+       call-interactively, as done with project(-async)-shell-command.
+
+2021-01-16  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/dispnew.c (sit_for): Return nil when interrupted by process output
+
+       Before adbb4eacc2a984c0fc0b65ec761368fd9067d6c5,
+       `read_and_dispose_of_process_output` called
+       `record_asynch_buffer_change` which added "artificial" input events
+       (in the form of BUFFER_SWITCH_EVENTs), causing sit_for to return
+       Qnil when interrupted by process output.  Without those 
BUFFER_SWITCH_EVENTs,
+       sit_for now tends to return Qt when interrupted by process output
+       making `read_char` believe that we've waited the whole timeout,
+       As consequence incoming process output tended to cause premature
+       auto-saving of files (sometimes right after almost every key press).
+
+       This patch recovers the previous behavior, which is not ideal
+       (incoming process output can delay auto-save indefinitely), but has
+       been good enough for many years.
+
+2021-01-15  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Remove support for 32 bit build
+
+       * admin/nt/dist-build/README-scripts: Update
+       * admin/nt/dist-build/README-windows-binaries: Update
+       * admin/nt/dist-build/build-zips.sh: Remove 32 bit and fix paths
+       * admin/nt/dist-build/build-dep-zips.py: Remove 32 bit and update
+         paths
+       * admin/nt/dist-build/emacs.nsi: Remove 32 bit and fix paths
+
+2021-01-15  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Update dependency capture
+
+       * admin/nt/dist-build/build-dep-zips.py: Use ntldd to directly
+         determine DLL dependencies
+
+2021-01-15  Stephen Leake  <stephen_leake@stephe-leake.org>
+
+       * .gitignore: add src/fingerprint.c
+
+       * lisp/dired-x.el (dired-file-name-at-point): Fix spelling in obsolete
+       message.
+
+2021-01-15  Aaron Jensen  <aaronjensen@gmail.com>
+
+       Fix 'window-text-pixel-size' when there are leading/trailing spaces
+
+       First, scan to find the first non-whitespace character and then
+       backtrack to find the beginning of the line.  The previous
+       algorithm always started on the non-whitespace character during
+       the backtrack, causing it to stop immediately and not actually
+       find the beginning of the line.  The same applies to the end of
+       line calculation.
+       * src/xdisp.c: (Fwindow_text_pixel_size): Fix off by one error.
+       (Bug#45748)
+
+       * test/src/xdisp-tests.el (xdisp-tests--window-text-pixel-size)
+       (xdisp-tests--window-text-pixel-size-leading-space)
+       (xdisp-tests--window-text-pixel-size-trailing-space): New tests.
+
+2021-01-15  Jared Finder  <jared@finder.org>
+
+       Make libraries works with xterm-mouse-mode.
+
+       Change calls from 'read-event' to 'read-key' in libraries expecting
+       mouse events.  Do this only when 'xterm-mouse-mode' is enabled.  That
+       way those libraries read decoded mouse events instead of the
+       underlying escape sequence.  Add a parameter to 'read-key' that avoids
+       running any of the unbound fallbacks in 'read-key-sequence' so the
+       libraries can read mouse button-down events.
+
+       For backward compatibility purposes, the above logic is contained in a
+       new internal-only function: 'read--potential-mouse-event'.
+
+       * doc/lispref/commands.texi (Reading One Event): Document new
+       parameter to 'read-key'.  Mention that non-character events on
+       terminals need 'read-key'.
+       * lisp/subr.el (read-key-full-map): Add new keymap used by 'read-key'.
+       (read-key): Add new parameter 'fallbacks-disabled' to prevent running
+       any of the unbound fallbacks normally run by 'read-key-sequence'.
+       (read--potential-mouse-event): Add new function that calls 'read-key'
+       or 'read-event' depending on if 'xterm-mouse-mode' is set.
+       * lisp/foldout.el (foldout-mouse-swallow-events):
+       * lisp/isearch.el (isearch-pre-command-hook):
+       * lisp/mouse-drag.el (mouse-drag-throw, mouse-drag-drag):
+       * lisp/mouse.el (mouse-drag-secondary):
+       * lisp/ruler-mode.el (ruler-mode-mouse-grab-any-column)
+       (ruler-mode-mouse-drag-any-column-iteration):
+       * lisp/strokes.el (strokes-read-stroke, strokes-read-complex-stroke):
+       * lisp/textmodes/artist.el (artist-mouse-draw-continously)
+       (artist-mouse-draw-poly, artist-mouse-draw-2points):
+       * lisp/vc/ediff-wind.el (ediff-get-window-by-clicking):
+       * lisp/wid-edit.el (widget-button--check-and-call-button)
+       (widget-button-click): Call 'read--potential-mouse-event' instead of
+       'read-event'.
+       * lisp/wid-edit.el (widget-key-sequence-read-event): Call 'read-key'
+       with 'fallbacks-disabled' set instead of 'read-event'.  Unlike above
+       changes, this is unconditionally applied so it works for function
+       keys too.  Apply 'local-function-key-map' instead of
+       'function-key-map' as that contains the full terminal translations.
+       * lisp/vc/ediff.el (ediff-windows): Use 'display-mouse-p' to check if
+       a mouse is available.
+       * src/lread.c (Fread_event): Recommend 'read-key' in docstring for
+       'read-event' for non-character events.
+
+2021-01-15  Michael Albinus  <michael.albinus@gmx.de>
+
+       Some Tramp adaptions, mainly direct async processes
+
+       * doc/misc/tramp.texi (Firewalls, Remote processes)
+       (Frequently Asked Questions): Add @vindex.
+       (Predefined connection information): Precise precondition or direct
+       async processes.
+       (Remote shell setup): Ban ssh RemoteCommand option.
+       (Frequently Asked Questions): Adapt quoting.
+
+       * doc/misc/trampver.texi:
+       * lisp/net/trampver.el: Change version to "2.5.1-pre".
+
+       * lisp/net/tramp-adb.el (tramp-methods) <adb>: Add `tramp-direct-async'
+       parameter.
+       (tramp-adb-handle-make-process): Adapt docstring.
+
+       * lisp/net/tramp-sh.el (tramp-methods) <scp, scpx, rsync, ssh, sshx>:
+       Add `tramp-direct-async' parameter.
+       (tramp-sh-handle-insert-directory): Simplify merkers.
+       (tramp-sh-handle-make-process): Adapt docstring.
+
+       * lisp/net/tramp.el (tramp-methods): Adapt docstring.
+       (tramp-debug-message): Suppress lockfiles.
+       (tramp-test-message): New defun.
+       (tramp-direct-async-process-p): Check also for `tramp-direct-async'.
+       (tramp-handle-make-process): Do not check for `tramp-direct-async-args'.
+
+       * test/lisp/net/tramp-tests.el (all): Replace `string-match' by
+       `string-match-p'.
+       (dired-copy-dereference): Declare.
+       (tramp-test-temporary-file-directory):
+       Remove `tramp-direct-async-args` for mock method.
+       (tramp-test15-copy-directory, tramp-test40-special-characters)
+       (tramp-test40-special-characters-with-stat)
+       (tramp-test40-special-characters-with-perl)
+       (tramp-test40-special-characters-with-ls, tramp-test41-utf8)
+       (tramp-test41-utf8-with-stat, tramp-test41-utf8-with-perl)
+       (tramp-test41-utf8-with-ls): Skip for tramp-rclone.el.
+       (tramp--test--deftest-direct-async-process): Do not skip for mock
+       method.
+       (tramp-test32-shell-command): Adapt test for direct async processes.
+       (tramp-test36-vc-registered, tramp--test-hpux-p, tramp--test-ksh-p):
+       Use `tramp-test-vec'.
+
+2021-01-15  Glenn Morris  <rgm@gnu.org>
+
+       * lisp/emacs-lisp/seq.el (seq-concatenate): Unautoload (merge fix).
+
+       gitmerge-skip-regexp does not handle line breaks.
+
+2021-01-15  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix 'kill-visual-line'
+
+       * lisp/simple.el (kill-whole-line): Mention in the doc string that
+       this option affects 'kill-visual-line' as well.
+       (kill-visual-line): Improve the doc string.  Delete the character
+       at which the line was wrapped under 'visual-line-mode'.  Don't
+       indiscriminately delete whitespace following the wrap point.
+       (Bug#45837)
+
+2021-01-14  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/startup.el (command-line): Remove redundant set of 
no-blinking-cursor
+
+       This is redundant because this was set based on "X" resources under
+       (memq window-system '(x w32 ns)) but the exact same resources and
+       values are tested in `x-apply-session-resources` which is also used for
+       those 3 window systems.
+
+2021-01-14  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/startup.el (command-line): Remove redundant set of 
no-blinking-cursor
+
+       This was set when (or noninteractive emacs-basic-display), but
+       the code that sets `emacs-basic-display` also sets `no-blinking-cursor`
+       and `blink-cursor-mode`s value already tests `noninteractive`
+       alongside `no-blinking-cursor`.
+
+2021-01-14  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Fix marking "delayed-initialization" vars as dynamically scoped
+
+       We used to mark those vars as dynbound in `custom-reevaluate-setting`
+       which forced us to bind `current-load-list` around it to avoid having
+       the vars be associated with the wrong file.  Move this marking to
+       `custom-initialize-delay` so we don't need this workaround.
+
+       * lisp/custom.el (custom-initialize-delay): Mark the var as dynamic.
+       (custom-reevaluate-setting): Don't use `defvar` here.
+
+       * lisp/startup.el (command-line): Don't let-bind `current-load-list`
+       around calls to `custom-reevaluate-setting`.
+
+2021-01-14  Andrea Corallo  <akrl@sdf.org>
+
+       Normalize `comp-eln-load-path' entries for trampoline comp (bug#43475)
+
+       * lisp/emacs-lisp/comp.el (comp-eln-load-path-eff): New function.
+       (comp-trampoline-search, comp-trampoline-compile)
+       (comp-clean-up-stale-eln): Update to use normalized
+       `comp-eln-load-path-eff'.
+
+2021-01-14  Andrea Corallo  <akrl@sdf.org>
+
+       Introduce native compilation time reports
+
+       * lisp/emacs-lisp/comp.el (comp-log-time-report): New special
+       variable.
+       (comp--native-compile): Rework to log time reports.
+
+2021-01-14  Juri Linkov  <juri@linkov.net>
+
+       * lisp/info.el (Info-search): Don't deactivate mark when landed in same 
node
+
+       (bug#45839)
+
+2021-01-14  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       488204cdc6 (origin/emacs-27) Remove one of recently added warnings ab...
+       55bc1560ac Fix assertion failure in window_box_height (Bug#45737)
+       27743e9e70 Fix cl-concatenate inlining
+       32a3758c84 Fix infloop in 'pixel-scroll-mode'
+       74d18957b8 Fix inhibiting the default.el loading in user init file
+
+2021-01-14  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       149d64bbb2 * doc/misc/tramp.texi (Quick Start Guide): Fix thinko.
+       97747e6fb9 Tell people how to remove fontconfig customizations
+       33d0c603c6 ; * doc/lispref/modes.texi (SMIE Indentation Example): Fix...
+       03080b5545 Remove extraneous closing paren
+
+2021-01-14  Ted Zlatanov  <tzz@lifelogs.com>
+
+       EMBA infrastructure improvements for Emacs build testing.
+
+       * .gitlab-ci.yml: Use job templates and rules. Split tests into
+       fast/normal/slow. Make Docker images for each tested platform
+       (inotify, filenotify-gio, gnustep). Increase timeout.
+       * test/Makefile.in (check-lisp, check-net): Add new testing
+       targets.
+       * test/README: Document them.
+       * test/file-organization.org: Mention test/infra.
+       * test/infra/Dockerfile.emba: Add special Docker recipes for EMBA
+       testing.
+
+2021-01-13  Juri Linkov  <juri@linkov.net>
+
+       Remove one of recently added warnings abound binding keys in Isearch 
maps
+
+       * lisp/isearch.el (minibuffer-local-isearch-map): Remove comments
+       which warn against wantonly rebinding unbound keys from
+       irrelevant keymap.
+       https://lists.gnu.org/archive/html/emacs-devel/2021-01/msg00259.html
+
+2021-01-13  Juri Linkov  <juri@linkov.net>
+
+       * lisp/isearch.el: C-s C-u M-y reads a string from the kill-ring 
minibuffer
+
+       * lisp/isearch.el (isearch-yank-from-kill-ring): New command
+       with code moved from isearch-yank-pop.
+       (isearch-yank-pop): Use isearch-yank-from-kill-ring.
+       (isearch-yank-pop-only): Add optional arg, and call
+       isearch-yank-from-kill-ring when the prefix arg is C-u.
+       https://lists.gnu.org/archive/html/emacs-devel/2021-01/msg00089.html
+
+2021-01-13  Stefan Kangas  <stefan@marxist.se>
+
+       Lift {global,local}-key-binding to Lisp
+
+       * lisp/subr.el (local-key-binding, global-key-binding): New defuns.
+       * src/keymap.c (Flocal_key_binding, Fglobal_key_binding): Remove DEFUNs.
+       (syms_of_keymap): Remove defsubrs for above DEFUNs.
+       * test/lisp/subr-tests.el (subr-test-local-key-binding)
+       (subr-test-global-key-binding): New tests.
+
+2021-01-13  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer skip-unless in more tests
+
+       * test/lisp/emacs-lisp/timer-tests.el (timer-tests-debug-timer-check):
+       * test/src/decompress-tests.el (zlib--decompress):
+       * test/src/xml-tests.el (libxml-tests): Prefer skip-unless.
+
+2021-01-13  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix 'visual-line-mode' when 'word-wrap-by-category' is in effect
+
+       * src/xdisp.c (move_it_in_display_line_to): Don't reset
+       next_may_wrap after saving a potential wrap point.  This fixes the
+       case where several characters in a row can serve as a wrap point.
+       (Bug#45837)
+
+2021-01-13  Stefan Kangas  <stefan@marxist.se>
+
+       Use skip-unless instead of if+message in test
+
+       * test/lisp/cedet/semantic-utest.el (semantic-utest-Javascript):
+       Use skip-unless instead of if+message.
+
+2021-01-13  Stefan Kangas  <stefan@marxist.se>
+
+       Remove some XEmacs compat code from tests
+
+       * test/lisp/cedet/srecode-utest-getset.el
+       (srecode-utest-getset-output):
+       * test/lisp/cedet/srecode-utest-template.el
+       (srecode-utest-template-output): Remove XEmacs compat code.
+
+2021-01-13  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/calc/calc.el: Remove some XEmacs compat code.
+
+2021-01-13  Mattias Engdegård  <mattiase@acm.org>
+
+       Stabilise lunar-phase-list test (bug#45818)
+
+       The test reference data was produced with accidental interference from
+       the system daylight saving in effect at the time.  Prevent that
+       from occurring again and correct the data.
+
+       * test/lisp/calendar/lunar-tests.el (with-lunar-test):
+       Switch to UTC and make sure daylight saving adjustment is disabled.
+       Use normal time presentation for maintainability.
+       * test/lisp/calendar/lunar-tests.el (lunar-test-phase): Adjust to UTC.
+       (lunar-test-phase-list): Adjust to UTC with correct times.
+       Enable the test by removing its :unstable mark.
+
+2021-01-12  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix Indian time zone test when run by Irishmen (bug#45818)
+
+       * test/lisp/calendar/solar-tests.el (solar-sunrise-sunset):
+       Inhibit any attempt by confused calendar code to apply daylight saving
+       correction when Irish time zone settings are in effect.  It's not
+       entirely clear why this is needed but may be related to the fact that
+       'IST' stands for both Irish and Indian Standard Time, and that Ireland
+       uses reversed daylight saving in winter.
+
+2021-01-12  Omar Polo  <op@omarpolo.com>
+
+       * configure.ac: Fix native-comp OpenBSD build.
+
+2021-01-12  Robert Pluim  <rpluim@gmail.com>
+
+       Only run IPv6 tests if we have an IPv6 address
+
+       * test/src/process-tests.el (ipv6-is-available): New function for
+       checking whether we have a globally routable IPv6 prefix assigned.
+       (lookup-family-specification): Use 'ipv6-is-available' to check for
+       IPv6.  Use 'localhost' instead of 'google.com' to test
+       'network-lookup-address-info' API.
+       (lookup-google): Use 'ipv6-is-available' to check for
+       IPv6.
+
+       * test/lisp/net/nsm-tests.el (nsm-ipv6-is-available): Rename to
+       'ipv6-is-available', make identical to the one in
+       test/src/process-tests.el.
+
+2021-01-12  Robert Pluim  <rpluim@gmail.com>
+
+       Fix nsm-should-check for "google.com" failure
+
+       * lisp/net/nsm.el (nsm-should-check): Extract the mask from
+       'network-interface-list' rather than the broadcast
+       address (Bug#45798).
+
+2021-01-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a new function 'buffer-line-statistics'
+
+       * src/fns.c (Fbuffer_line_statistics): New function.
+
+2021-01-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a new variable `inhibit-interaction'
+
+       * doc/lispref/elisp.texi (Top): Add a link.
+       * doc/lispref/errors.texi (Standard Errors): Mention the new error.
+
+       * doc/lispref/minibuf.texi (Minibuffers): Add a link.
+       (Inhibiting Interaction): New node.
+
+       * src/data.c (syms_of_data): Define the `inhibited-interaction' error.
+
+       * src/lisp.h: Export the barfing function.
+
+       * src/lread.c (Fread_char, Fread_event, Fread_char_exclusive):
+       Barf if inhibited.
+
+       * src/minibuf.c (barf_if_interaction_inhibited): New function.
+       (Fread_from_minibuffer, Fread_no_blanks_input): Barf if inhibited.
+       (syms_of_minibuf): Define the `inhibit-interaction' variable.
+
+2021-01-12  Glenn Morris  <rgm@gnu.org>
+
+       Update substitute-command-keys tests, again
+
+       * test/lisp/help-tests.el (help-tests-substitute-command-keys/keymaps)
+       (help-tests-substitute-command-keys/keymap-change):
+       Update following recent minibuffer changes.
+
+2021-01-12  Brian Leung  <leungbk@mailfence.com>
+
+       comint-read-input-ring: Simplify last commit
+
+       * lisp/comint.el (comint-read-input-ring): It is not necessary to use
+         `goto-char' again since we have already moved point to the desired
+         location (bug#45797).
+
+2021-01-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/eieio-base.el: Silence warnings in last change
+
+       (eieio-persistent-make-instance): Quote the `eieio-named` class name.
+       (eieio-named): Move before `eieio-persistent`.
+
+2021-01-11  Eric Ludlam  <zappo@gnu.org>
+
+       cedet/ede/auto.el:
+
+       (ede-calc-fromconfig): New method.  Support functions in addition to
+       string matchers.
+       (ede-dirmatch-installed, ede-do-dirmatch):
+       Use `ede-calc-fromconfig' to do conversion.
+       Author: Eric Ludlam <zappo@gnu.org>
+
+2021-01-11  Eric Ludlam  <zappo@gnu.org>
+
+       eieio-base.el:
+
+       (eieio-persistent-make-instance): Save the backward compatible 'name'
+       of objects saved in the file, and if the newly loaded class inherits
+       from 'eieio-named', restore the name of the object.
+       Author: Eric Ludlam <zappo@gnu.org>
+
+2021-01-11  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Fix possible prepending of "TEXT" to IMAP searches
+
+       * lisp/gnus/gnus-search.el (gnus-search-imap-search-keys): Add missing
+       keys "old", "new", "or" and "not".
+       (gnus-search-run-search): In addition, don't touch the query if it
+       starts with a parenthesis. Consider just getting rid of this
+       convenience altogether.
+
+2021-01-11  Stephen Leake  <stephen_leake@stephe-leake.org>
+
+       * admin/notes/elpa: Update to match recent Gnu ELPA changes
+
+2021-01-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mark previous erc-services change as not needing documentation
+
+2021-01-11  Brian Leung  <leungbk@mailfence.com>
+
+       Make comint-read-input-ring skip uninteresting text in .zsh_history
+
+       * lisp/comint.el (comint-read-input-ring): Simplify (bug#45606).
+       * lisp/shell.el (shell-mode): Add "~/.zsh_history".
+       * lisp/comint.el (comint-read-input-ring): Bind
+       `comint-input-ring-file-prefix' in anticipation of a buffer switch.
+       * lisp/comint.el (comint-read-input-ring): Skip the separator.
+
+       Because re-search-backward moves point to the beginning of the match,
+       and since we don't want the separator appearing in the output, we skip
+       over it.
+
+       This is required to properly detect instances of the value that zsh
+       uses for `comint-input-ring-file-prefix'; if the
+       `comint-input-ring-file-prefix' is ':potato', the subsequent
+       invocation `looking-at' sees '\n:potato' for all entries after the one
+       at the very beginning of the history file.
+
+2021-01-11  Anticrisis  <anticrisisg@gmail.com>  (tiny change)
+
+       Add a failing test for bug#44834
+
+       * test/lisp/progmodes/tcl-tests.el (tcl-mode-namespace-indent-2):
+       New, failing test (bug#44834).
+       (tcl-mode-function-name-2):
+       (tcl-mode-function-name-3): Fix names of the tests so that they're
+       actually run.
+
+2021-01-11  Leon Vack  <dev@lgcl.de>
+
+       Support using auth-source for NickServ passwords in ERC
+
+       * lisp/erc/erc-services.el (erc-nickserv-passwords): Document that
+       the passwords are only used when erc-prompt-for-nickserv-password
+       is nil.
+       (erc-use-auth-source-for-nickserv-password): New customizable
+       variable to enable checking auth-source for NickServ passwords.
+       (etc-nickserv-get-password): New function to handle the lookup
+       of the NickServ password from both auth-source and the
+       erc-nickserv-passwords variable.
+       (erc-nickserv-call-identify-function): Use new
+       erc-nickserv-get-password function to lookup NickServ passwords.
+       (erc-nickserv-identify-autodetect)
+       (erc-nickserv-identify-on-connect)
+       (erc-nickserv-identify-on-nick-change): Call
+       erc-nickserv-call-identify-function when
+       erc-use-auth-source-for-nickserv-password is set.
+       * etc/NEWS: Document change (bug#45340).
+
+2021-01-11  Alexandre Duret-Lutz  <adl@lrde.epita.fr>  (tiny change)
+
+       Fix problem with non-ASCII characters in nnmaildir
+
+       * lisp/gnus/nnmaildir.el (nnmaildir-request-article): Enable
+       multipart 8bit-content-transfer-encoded files to be displayed
+       correctly by reading as `raw-text' instead of having Emacs
+       (incorrectly) decode the files (bug#44307).
+
+2021-01-11  Pedro Andres Aranda Gutierrez  <paaguti@gmail.com>
+
+       Add `flat-button' to custom-face-attributes
+
+       * lisp/cus-face.el (custom-face-attributes): Add `flat-button'
+       (bug#45769).
+
+2021-01-11  Robert Pluim  <rpluim@gmail.com>
+
+       * configure.ac: Alphabetize emacs_config_features
+
+2021-01-11  Robert Pluim  <rpluim@gmail.com>
+
+       Ensure HAVE_GMP is reflected in emacs_config_features
+
+       * configure.ac: Move HAVE_GMP setting before emacs_config_features
+       setting (Bug#45771).
+
+2021-01-10  Dmitry Gutov  <dgutov@yandex.ru>
+
+       New command xref-quit-and-pop-marker-stack
+
+       * lisp/progmodes/xref.el (xref-quit-and-pop-marker-stack):
+       New command.
+       (xref--xref-buffer-mode-map): Binding for it.
+
+2021-01-10  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Allow evaluation of tests from local source repository
+
+       * etc/w32-feature.el (w32-feature-load-tests): Add new command
+
+2021-01-10  Philipp Stephani  <phst@google.com>
+
+       Fix build breakage if Lisp_Object is not a primitive type.
+
+       * src/minibuf.c (choose_minibuf_frame): Don't compare Lisp_Objects
+       with '!='.  Use 'EQ' instead.
+
+2021-01-10  Philipp Stephani  <phst@google.com>
+
+       Add functions to open a file without quitting.
+
+       In some situations, e.g. when the Lisp machinery isn't available, we
+       can't quit.  Don't check the quit flags in such situations, in case
+       they contain garbage.
+
+       * src/sysdep.c (emacs_open_noquit, emacs_openat_noquit): New variants
+       of 'emacs_open' and 'emacs_openat' that don't check the quit flags.
+
+       * src/emacs.c (main, Fdaemon_initialized):
+       * src/pdumper.c (pdumper_load):
+       * src/w32term.c (w32_initialize):
+       * src/buffer.c (mmap_init):
+       * src/callproc.c (emacs_spawn): Use them where we can't quit.
+
+2021-01-10  Alan Mackenzie  <acm@muc.de>
+
+       Fix incompleteness in the implementation of 
minibuffer-follows-selected-frame
+
+       In particular, add a new value to the variable, and fix several bugs 
apparent
+       with the implementation up till now.
+
+       * doc/emacs/mini.texi (Basic Minibuffer): Add a description of the new
+       non-nil, non-t value of minibuffer-follows-selected-frame.
+
+       * doc/emacs/trouble.texi (Quitting): Add a description of how C-g 
handles
+       recursive minibuffers when typed in one which isn't the most nested.
+
+       * doc/lispref/minibuf.texi (Intro to Minibuffers): Add an @dfn for 
"active
+       minibuffer".
+       (Minibuffer Commands): Document that exit-minibuffer throws an error 
when not
+       invoked from the innermost Minibuffer.
+       (Recursive Mini): Amend the description of the visibility of outer level
+       minibuffers.
+       (Minibuffer Misc): In the description of the minibuffer hooks, replace 
"the
+       minibuffer" with "a minibuffer".
+
+       * etc/NEWS (Entry announcing minibuffer-follows-selected-frame): Add a
+       description of the new non-nil, non-t value.
+
+       * lisp/cus-start.el (top level): make the customize entry for
+       minibuffer-follows-selected-frame a choice between three entries.
+
+       * lisp/minibuffer.el (exit-minibuffer): throw an error when we're not 
in the
+       most nested minibuffer.
+       (top level): Bind C-g to abort-minibuffers in minibuffer-local-map.
+
+       * lisp/window.el (window-deletable-p): return the symbol `frame' when 
(amongst
+       other things) minibuffer-follows-selected-frame is t.
+
+       * src/eval.c (internal_catch): Add a mechanism to (throw 'exit t) 
repeatedly
+       when the throw currently being processed doesn't terminate the current
+       minibuffer.
+
+       * src/lisp.h (this_minibuffer_depth): New extern declaration
+       (minibuf_level): extern declaration moved here from window.h.
+
+       * src/minibuf.c (minibuffer_follows_frame, minibuf_stays_put)
+       (minibuf_moves_frame_when_opened): New and amended functions to query 
the
+       value of minibuffer-follows-selected-frame.
+       (choose_minibuf_frame): check (minibuf > 1) in place of (minibufer > 0) 
at a
+       particular place.  At another place, check that an alleged frame is so 
and is
+       live.  Before selecting a non-miniwindow on a different frame, ensure it
+       really is a different frame.
+       (move_minibuffer_onto_frame): Stack up all recursive minibuffers on the 
target
+       frame.  Check the minibuf_window isn't in the old frame before setting 
that
+       frame's miniwindow to an inactive minibuffer.
+       (Finnermost_minibuffer_p, Fabort_minibuffers): New primitives.
+       (this_minibuffer_depth): New function.
+       (read_minibuf): Record the calling frame in a variable, and switch back 
to it
+       after the recursive edit has terminated normally, using
+       select-frame-set-input-focus.  Stack up all the recursive minibuffers 
on the
+       miniwindow where a new minibuffer is being opened.  After the recursive 
edit,
+       switch the selected window away from the expired minibuffer's window.
+       (nth_minibuffer): New function.
+       (minibuffer-follows-selected-frame): Change from a DEFVAR_BOOL to a
+       DEFVAR_LISP.
+
+       * src/window.c (decode_next_window_args): Set *minibuf to w's 
mini-window's
+       content when that content is a minibuffer.
+
+       * src/window.h (minibuf_level) Declaration moved from here to lisp.h.
+
+2021-01-10  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Respect message-forward-ignored-headers more
+
+       * lisp/gnus/message.el (message-forward-ignored-headers): Clarify
+       doc string once again.
+       (message-forward-make-body-mime): Remove headers when not
+       encrypted (bug#45631).
+       (message-forward-make-body): Pass in correct values.
+
+2021-01-10  Glenn Morris  <rgm@gnu.org>
+
+       Default python-shell-interpreter to python3
+
+       * lisp/progmodes/python.el (python-shell-interpreter): Default to
+       python3 (bug#45655).
+
+2021-01-10  David Edmondson  <dme@dme.org>
+
+       Fix example in the Gnus manual
+
+       * doc/misc/gnus.texi (Score Variables): In the example showing how to
+       use a list of functions for gnus-score-find-score-files-find-function,
+       return a list of strings from the lambda rather than trying to call
+       the string as a function (bug#45673).
+
+2021-01-10  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Specify precedence in .authinfo files
+
+       * doc/misc/auth.texi (Help for users): Mention placing more
+       specific entries first (bug#45711).
+
+2021-01-10  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve fill-region-as-paragraph when there's a fill prefix
+
+       * lisp/textmodes/fill.el (fill-region-as-paragraph): Try to
+       improve how line breaks are set on unbreakable text with a fill
+       prefix area that has spaces within (bug#45720).
+
+2021-01-10  k3tu0isui  <k3tu0isui@gmail.com>  (tiny change)
+
+       Make font locking work in mercury-mode
+
+       * lisp/progmodes/prolog.el (prolog-font-lock-keywords): Work in
+       all modes derived from prolog-mode (bug#45747).
+       (mercury-mode): Set up variables based on the Prolog system (bug#45747).
+
+2021-01-10  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Hyperlink symbol names without word syntax in Help
+
+       * lisp/emacs-lisp/lisp-mode.el (lisp-el-font-lock-keywords-2)
+       (lisp-cl-font-lock-keywords-2): Allow single-character symbol names.
+       * lisp/help-mode.el (help-xref-symbol-regexp): Also match symbol
+       names starting with symbol syntax (bug#6601, bug#24309).
+       * test/lisp/help-mode-tests.el (help-mode-tests-xref-button): Test
+       hyperlink creation for function names without symbol syntax.
+
+2021-01-10  Omar Polo  <op@omarpolo.com>
+
+       Add support for 'process-attributes' on OpenBSD
+
+       * src/sysdep.c (make_lisp_timeval):
+       (system_process_attributes): Implement for OpenBSD (bug#45729).
+
+2021-01-10  Pedro Andres Aranda Gutierrez  <paaguti@gmail.com>  (tiny change)
+
+       Add support for flat buttons
+
+       * src/xfaces.c (Finternal_set_lisp_face_attribute):
+       (realize_gui_face): Add support for `flat-button' (bug#45735).
+
+2021-01-10  Daniel Martín  <mardani29@yahoo.es>
+
+       Minor shortdoc link improvements
+
+       * lisp/emacs-lisp/shortdoc.el (shortdoc--display-function): Use
+       describe-function as a fallback link when a function is not documented
+       in any Info manual.  Also make the link respond to mouse-1, like the
+       rest of *Help* links, and add a proper help-echo property.
+       * lisp/help-fns.el (help-fns--mention-shortdoc-groups): Same link
+       improvement as described before, this time for the shortdoc groups
+       (bug#45750).
+
+2021-01-10  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a link to the manual from the defcustom doc string
+
+       * lisp/custom.el (defcustom): Add a link to the manual for the
+       :type element.
+
+2021-01-10  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert recent mm-with-part change
+
+       * lisp/gnus/mm-decode.el (mm-with-part): Revert
+       23a887e426f81033b0de2f4c93a8525cb31c28da -- this is the wrong
+       place to handle this peculiarity.
+
+2021-01-10  Michael Albinus  <michael.albinus@gmx.de>
+
+       Rework parts of Tramp's insert-directory, bug#45691
+
+       * lisp/net/tramp-sh.el (tramp-sh-handle-insert-directory): Fix some
+       unibyte/multibyte inconsistencies.  (Bug#45691)
+
+       * test/lisp/net/tramp-tests.el (tramp-test17-insert-directory-one-file):
+       New test.
+
+2021-01-10  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add more mm-decode tests
+
+2021-01-10  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/subr.el (global-map): Doc fix; add cross-reference.
+
+2021-01-10  F. Jason Park  <jp@neverwas.me>
+
+       Create new test file for socks.el
+
+       * test/lisp/net/socks-tests.el (socks-tests-auth-filter-url-http): Add
+       SOCKS5 authentication test and fake server (bug#45162).
+
+2021-01-10  Martin Rudalics  <rudalics@gmx.at>
+
+       Fix assertion failure in window_box_height (Bug#45737)
+
+       * lisp/window.el (window-sizable): Don't try to grow a mini window
+       when the root window's minimum height is already larger than its
+       actual height (Bug#45737).
+
+2021-01-10  Philipp Stephani  <phst@google.com>
+
+       Increase probability that a process test succeeds.
+
+       * test/src/process-tests.el
+       (process-tests/fd-setsize-no-crash/make-process): Work around
+       potential Emacs bug.
+
+2021-01-10  Philipp Stephani  <phst@google.com>
+
+       Remove a pointless check for WCOREDUMPED.
+
+       WCOREDUMPED can only be used if the process was killed.
+
+       * src/process.c (status_convert): Don't check WCOREDUMPED if
+       WIFEXITED.
+
+2021-01-10  Tassilo Horn  <tsdh@gnu.org>
+
+       Support keyval style beamer frame labels
+
+       * lisp/textmodes/reftex-vars.el (reftex-label-regexps): Support keyval
+       style beamer frame labels.
+
+2021-01-10  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Remove reference to gnus-bug-create-help-buffer
+
+       * lisp/gnus/gnus-win.el (gnus-buffer-configuration): Variable no
+       longer exists.
+
+2021-01-09  Philipp Stephani  <phst@google.com>
+
+       Don't unblock SIGCHLD too early.
+
+       We first need to register the received process ID so that
+       'handle_child_signal' checks it.  Otherwise we might never call
+       'waitpid' for these processes, risking deadlock.
+
+       * src/callproc.c (call_process):
+       * src/process.c (create_process): Don't unblock SIGCHLD before
+       registering the process ID to wait for.
+
+       * src/callproc.c (emacs_spawn): Accept a signal set from the caller.
+
+2021-01-09  João Távora  <joaotavora@gmail.com>
+
+       Count Flymake diagnostics in modeline by severity, not type
+
+       Originally reported in https://github.com/joaotavora/eglot/issues/588
+       by Pankaj Jangid.
+
+       * lisp/progmodes/flymake.el (flymake--mode-line-counter): Count
+       diagnostics by severity level, not by type.
+       (Version): Bump to 1.1.1
+
+2021-01-09  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/cl-macs.el (cl--self-tco): Fix build of gnus-agent.el
+
+       Don't burp on "naked" variable let bindings.
+
+2021-01-09  Andrea Corallo  <akrl@sdf.org>
+
+       Improve `comp-libgccjit-reproducer'
+
+       * src/comp.c (Fcomp__compile_ctxt_to_file): Better libgccjit
+       reproducer file name.
+       * lisp/emacs-lisp/comp.el (comp-libgccjit-reproducer): Doc update.
+       (comp-final, comp-run-async-workers): Pass
+       `comp-libgccjit-reproducer' setting to child workers.
+
+2021-01-09  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix cl-concatenate use in macros
+
+       * lisp/emacs-lisp/cl-macs.el (inline): Remove cl-concatenate.
+       (Bug#45610)
+
+2021-01-09  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix cl-concatenate inlining
+
+       * lisp/emacs-lisp/seq.el (seq-concatenate): Auto-load it.  Do not
+       merge to master.  (Bug#45610)
+
+2021-01-09  Andrea Corallo  <akrl@sdf.org>
+
+       Add new customize `comp-libgccjit-reproducer'
+
+       * lisp/emacs-lisp/comp.el (comp-libgccjit-reproducer): New customize.
+       * src/comp.c (Fcomp__compile_ctxt_to_file): Use
+       `comp-libgccjit-reproducer' for dumping repoducer.
+       (syms_of_comp): Define 'Qcomp_libgccjit_reproducer'.
+
+2021-01-09  Tak Kunihiro  <tkk@misasa.okayama-u.ac.jp>
+
+       Fix infloop in 'pixel-scroll-mode'
+
+       * lisp/pixel-scroll.el (pixel-scroll-up, pixel-scroll-down): Avoid
+       inflooping when 'vertical-motion' doesn't move.  (Bug#45628)
+
+2021-01-09  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/cl-macs.el: Optimize self-calls in tail position
+
+       Implement a limited form of tail-call optimization for the special
+       case of recursive functions defined with `cl-labels`.  Only 
self-recursion
+       is optimized, no attempt is made to handle more complex cases such a 
mutual
+       recursion.
+
+       The main benefit is to reduce the use of the stack, tho in my limited
+       tests, this can also improve performance (about half of the way to
+       a hand-written `while` loop).
+
+       (cl--self-tco): New function.
+       (cl-labels): Use it.
+
+       * lisp/subr.el (letrec): Optimize single-binding corner case.
+
+       * test/lisp/emacs-lisp/cl-macs-tests.el (cl-macs--labels): Add tests
+       to check that TCO is working.
+
+2021-01-09  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Make sure default-directory relates to the originating buffer
+
+       * lisp/progmodes/xref.el (xref--show-xref-buffer):
+       Pick up default-directory value from the caller
+       (https://lists.gnu.org/archive/html/emacs-devel/2021-01/msg00551.html).
+       (xref-show-definitions-buffer-at-bottom): Same.
+
+2021-01-09  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/subr.el (letrec): Optimize some non-recursive bindings
+
+       * lisp/emacs-lisp/macroexp.el (macroexp--fgrep): Look inside bytecode
+       objects as well.
+
+       * test/lisp/emacs-lisp/cl-macs-tests.el (cl-macs--labels):
+       * test/lisp/subr-tests.el (subr--tests-letrec): New tests.
+
+2021-01-09  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/cl-generic.el (cl--generic-lambda): Fix last change
+
+2021-01-08  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/macroexp.el (macroexp--fgrep): Rename from 
`pcase--fgrep`
+
+       * lisp/emacs-lisp/cl-generic.el (cl--generic-fgrep): Delete.
+       (cl--generic-lambda): Use `macroexp--pacse` instead.
+
+       * lisp/emacs-lisp/pcase.el (pcase--fgrep): Rename to `macroexp--fgrep`.
+
+2021-01-08  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2021-01-08  Stefan Kangas  <stefan@marxist.se>
+
+       Merge recently added kbd tests
+
+       * test/lisp/subr-tests.el (subr--kbd): Merge test...
+       (subr-test-kbd): ...with this one.  Fix thinko in my previous commit.
+       Thanks to Mattias Engdegård <mattiase@acm.org>.
+
+2021-01-08  Stefan Kangas  <stefan@marxist.se>
+
+       Lift define-prefix-command to Lisp
+
+       * lisp/subr.el (define-prefix-command): New defun.
+       * src/keymap.c (Fdefine_prefix_command): Remove DEFUN.
+       (syms_of_keymap): Remove defsubr for Fdefine_prefix_command.
+       * test/lisp/subr-tests.el (subr-test-define-prefix-command): New
+       test.
+
+2021-01-08  Stefan Kangas  <stefan@marxist.se>
+
+       * test/lisp/subr-tests.el (subr-test-kbd): New test.
+
+2021-01-08  Stefan Kangas  <stefan@marxist.se>
+
+       Remove unused DEFSYM
+
+       * src/minibuf.c (syms_of_minibuf) <Qhistory_length>: Remove unused
+       DEFSYM.
+
+2021-01-08  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix syntax of space characters
+
+       * lisp/international/characters.el (tbl): Give all the space
+       characters whose Unicode General Category is Zs the 'space'
+       syntax.  (Bug#45660)
+
+2021-01-08  Michael Albinus  <michael.albinus@gmx.de>
+
+       * test/lisp/net/tramp-tests.el (tramp-test31-interrupt-process):
+
+       Tag it :unstable on hydra.
+
+2021-01-08  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix inhibiting the default.el loading in user init file
+
+       * lisp/startup.el (startup--load-user-init-file): Test the value
+       of 'inhibit-default-init', not just the LOAD-DEFAULTS argument,
+       because loading the user's init file could have set the value of
+       the former.
+       (command-line): Call 'startup--load-user-init-file' with last arg
+       t: there's no longer any need to test the value of
+       'inhibit-default-init' here, as it will be tested by the called
+       function.  (Bug#45708)
+
+2021-01-07  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (comp-known-type-specifiers): Fix typo.
+
+2021-01-07  Andrea Corallo  <akrl@sdf.org>
+
+       Add a type specifier test
+
+       * test/lisp/emacs-lisp/comp-cstr-tests.el
+       (comp-cstr-typespec-tests-alist): Add testcase.
+
+2021-01-07  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el: Improve tab-bar-show (bug#45556)
+
+       * lisp/tab-bar.el (tab-bar-show): Change :set lambda to update all 
frames.
+       Improve docstring.
+
+2021-01-07  Juri Linkov  <juri@linkov.net>
+
+       * lisp/mb-depth.el (minibuffer-depth-indicator): Add :group 
'minibuffer'.
+
+2021-01-07  Stefan Kangas  <stefan@marxist.se>
+
+       Remove an outdated comment
+
+       * lisp/subr.el: Remove comment to reflect recent change in the
+       definition of global-map, esc-map and ctl-x-map.
+
+2021-01-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Further display-buffer doc changes
+
+       * lisp/window.el (display-buffer): `display-buffer-alist' is
+       apparently the variable the user should be directed towards.
+
+2021-01-07  Michael Albinus  <michael.albinus@gmx.de>
+
+       * test/lisp/filenotify-tests.el (file-notify-test07-many-events-remote):
+
+       Mark it as unstable also on emba.
+
+2021-01-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a display-buffer window selection function that's more like XEmacs
+
+       * doc/lispref/windows.texi (Buffer Display Action Functions):
+       Document it.
+       * lisp/window.el (display-buffer--action-function-custom-type): Add.
+       (display-buffer): Mention it.
+       (display-buffer-use-least-recent-window): New function (bug#45688).
+
+       * src/window.c (Fwindow_bump_use_time): New function.
+
+2021-01-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix typo in last display-buffer doc string change
+
+       * lisp/window.el (display-buffer): Fix typo in last doc string change.
+
+2021-01-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Edit the display-buffer doc string slightly
+
+       * lisp/window.el (display-buffer): Reword the start of the doc
+       string (bug#45688).
+
+2021-01-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add work-around for nnmaildir encoding problem
+
+       * lisp/gnus/mm-decode.el (mm-with-part): Fix problem with
+       multipart 8bit encoded posts from nnmaildir (bug#44307).
+
+2021-01-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add tests for mm-decode.el
+
+2021-01-07  F. Jason Park  <jp@neverwas.me>
+
+       Clear socks protocol scratch after authentication
+
+       * lisp/net/socks.el (socks-open-connection): Fix incomplete patch
+       titled "Append incremental message segments in socks-filter," which
+       addressed chunk ordering but neglected to zero out the work area
+       following successful username/password authentication (bug#45162).
+
+2021-01-07  Andreas Schwab  <schwab@linux-m68k.org>
+
+       Fix quoting problem in pop3-uidl-save
+
+       * lisp/net/pop3.el (pop3-uidl-save): Quote strings properly
+       (bug#43896).
+
+2021-01-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert mark-paragraph change and add tests
+
+       * lisp/textmodes/paragraphs.el (mark-paragraph): Revert
+       eb090f65ceb0ae8a90829e911694348583135ba5 (bug#45318).  This restores
+       the behaviour from Emacs 27 -- further work is needed on this patch.
+
+2021-01-07  Michael Albinus  <michael.albinus@gmx.de>
+
+       * test/Makefile.in (WRITE_LOG): Mark also problematic tests for emba.
+
+2021-01-07  Glenn Morris  <rgm@gnu.org>
+
+       Update a substitute-command-keys test
+
+       * test/lisp/help-tests.el (help-tests-substitute-command-keys/keymaps):
+       Update for "Pretty-print keys without <> around modifiers" change.
+
+2021-01-06  Daniel Martín  <mardani29@yahoo.es>
+
+       Fix some failing tests in BSD systems
+
+       * test/lisp/progmodes/xref-tests.el
+       (xref--xref-file-name-display-is-abs)
+       (xref--xref-file-name-display-is-relative-to-project-root):
+       Accommodate some older versions of BSD find
+       (https://lists.gnu.org/archive/html/emacs-devel/2021-01/msg00156.html).
+
+2021-01-06  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Proof some searches and file listings against symlinks
+
+       * lisp/progmodes/project.el (project--files-in-directory):
+       Make sure the directory includes the trailing slash in case it's
+       a symlink, discussed in
+       https://lists.gnu.org/archive/html/emacs-devel/2021-01/msg00345.html.
+
+       * lisp/progmodes/xref.el (xref-matches-in-directory): Same.
+
+       * lisp/cedet/semantic/symref/grep.el (semantic-symref-perform-search):
+       Same.
+
+2021-01-06  Gabriel do Nascimento Ribeiro  <gabriel376@hotmail.com>  (tiny 
change)
+
+       * lisp/mb-depth.el (minibuffer-depth-indicator): New face.
+
+       (minibuffer-depth-setup): Use new face and add a single space between
+       the depth indicator and the minibuffer prompt.
+       https://lists.gnu.org/archive/html/emacs-devel/2020-12/msg00230.html
+
+2021-01-06  Andrea Corallo  <akrl@sdf.org>
+
+       Fix bug#45603
+
+       Reported and reduced by Mauricio Collares.
+
+       * lisp/emacs-lisp/comp.el (comp-final): Fix coding system for the
+       tmp file used to pass data the child processes.
+       * test/src/comp-tests.el (45603-1): New testcase
+       * test/src/comp-resources/comp-test-45603.el: New File.
+
+2021-01-06  Michael Heerdegen  <michael_heerdegen@web.de>
+
+       Fix obsolete variable warnings about class names
+
+       * lisp/emacs-lisp/eieio-core.el (eieio-defclass-autoload): Try to make
+       the wording of the warning about the obsoleted variable less confusing.
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-check-variable): Don't
+       warn for lexical variables (Bug#39169).  Fix spurious `or'.
+       * test/lisp/emacs-lisp/bytecomp-tests.el
+       (bytecomp/warn-obsolete-variable-bound\.el): New test.
+       * 
test/lisp/emacs-lisp/bytecomp-resources/warn-obsolete-variable-bound.el:
+       New file.
+
+2021-01-06  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/play/dunnet.el: Run the game when loaded via `--batch -l dunnet`
+
+       (dun--batch): Rename from `dun-batch` and don't autoload.
+       (dunnet): Delegate to `dun--batch` when in batch mode.
+
+2021-01-06  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/package.el (package-activate-all): Another tweak
+
+       `package-quickstart.el` files presume `package-activated-list`
+       is a bound variable, so make sure this is the case even when 
`package.el` is
+       not yet loaded.
+
+2021-01-05  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/autoload.el: Improve last change
+
+       It turns out there were other places that used `custom-initialize-delay`
+       on autoloaded variables and used various hacks to make it work with
+       `autoload.el`.  The new code makes those hacks unneeded.
+       Also, there's no point trying to "optimize" those rare cases anyway,
+       so I simplified the `autoload.el` code for those cases.
+
+       (make-autoload): For non-trivial cases,
+       just include the whole `defcustom` instead of trying to mimic it.
+
+       * lisp/mail/rmail.el (rmail-spool-directory): Remove hacks.
+       * lisp/info.el (Info-default-directory-list): Remove `progn` hack.
+
+       * lisp/custom.el (custom-declare-variable)
+       (custom-handle-all-keywords): Don't use pseudo-group `nil`.
+
+2021-01-05  Alan Third  <alan@idiocy.org>
+
+       Prevent stack overflow in GNUstep menu code
+
+       * src/nsmenu.m (ns_update_menubar): Always do a deep update for
+       GNUstep.
+       ([EmacsMenu menuNeedsUpdate:]): Don't update the menu as it should
+       always have had a deep update.
+
+2021-01-05  Juri Linkov  <juri@linkov.net>
+
+       * lisp/subr.el (remove-hook): Add default value (bug#45393)
+
+2021-01-05  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el (tab-bar-tab-name-format-function): New defcustom.
+
+       (tab-bar-tab-name-format-default): New function as the default value.
+       (tab-bar-make-keymap-1): Funcall tab-bar-tab-name-format-function.
+
+2021-01-05  Juri Linkov  <juri@linkov.net>
+
+       * lisp/tab-bar.el (toggle-frame-tab-bar): New command (bug#45556)
+
+2021-01-05  James N. V. Cash  <james.nvc@gmail.com>  (tiny change)
+
+       Refactor tab-bar-mode to -define-keys and -load-buttons (bug#42052)
+
+       * lisp/tab-bar.el (tab-bar--define-keys, tab-bar--load-buttons):
+       Move some code here from 'tab-bar-mode'.
+       (tab-bar-new-tab-to): Call tab-bar--load-buttons and 
tab-bar--define-keys.
+
+2021-01-05  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix process-tests on MS-Windows
+
+       It was again broken by recent changes.
+       * test/src/process-tests.el
+       (process-tests/fd-setsize-no-crash/make-serial-process): Skip test
+       on MS-Windows.
+
+2021-01-05  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/package.el: Load package-quickstart without package.el
+
+       Speed up startup when `package-quickstart` is in use by making it 
possible
+       to load the quickstart file without having to load `package.el` at all.
+
+       (package-user-dir, package-directory-list, package-quickstart-file):
+       Preload those variables.
+       (package--get-activatable-pkg): New fun, extracted from 
`package-activate`.
+       (package-activate): Use it.
+       (package--activate-all): New function, extracted from
+       `package-activate-all`.
+       (package-activate-all): Use it and make the function preloaded.
+       (package--archives-initialize): New function.
+       (package-install): Use it.
+       (list-packages): Avoid `switch-to-buffer`.
+       (package-get-descriptor): New function.
+
+       * lisp/startup.el (command-line): Simplify the code now that
+       package-user-dir and package-directory-list are preloaded.
+
+       * lisp/emacs-lisp/autoload.el (make-autoload): Add support for
+       `:initialize #'custom-initialize-delay` in `defcustom`.
+
+2021-01-05  Michael Albinus  <michael.albinus@gmx.de>
+
+       * doc/misc/tramp.texi (Quick Start Guide): Fix thinko.
+
+2021-01-05  Robert Pluim  <rpluim@gmail.com>
+
+       Tell people how to remove fontconfig customizations
+
+2021-01-05  Mattias Engdegård  <mattiase@acm.org>
+
+       ruby-mode: eliminate redundant regexp branch
+
+       * lisp/progmodes/ruby-mode.el (ruby-add-log-current-method):
+       Since ruby-operator-re matches dot, don't include both in regexp.
+       This pacifies relint.
+
+2021-01-05  Mattias Engdegård  <mattiase@acm.org>
+
+       Pretty-print keys without <> around modifiers (bug#45536)
+
+       Be consistent when pretty-printing keys: put modifiers outside <>,
+       thus the more logical C-M-<return> instead of <C-M-return>.
+
+       * src/keymap.c (Fsingle_key_description):
+       Skip modifier prefix before adding <>.
+       * doc/lispref/help.texi (Describing Characters): Update example.
+       * doc/lispref/debugging.texi (Backtraces):
+       * doc/lispref/minibuf.texi (Text from Minibuffer):
+       Use @kbd instead of @key.
+       * etc/NEWS: Announce the change.
+       * test/src/keymap-tests.el (keymap--key-description):
+       * test/lisp/subr-tests.el (subr--kbd): New tests.
+
+2021-01-05  Mattias Engdegård  <mattiase@acm.org>
+
+       * lisp/filesets.el (filesets-external-viewers): Tighten regexp.
+
+2021-01-05  Harald Jörg  <haj@posteo.de>
+
+       perl-mode: Display here-docs as strings instead of comments
+
+       * lisp/progmodes/perl-mode.el
+       (perl-syntax-propertize-function): Handle HERE doc starter
+       lines ending in a comment.
+       (perl-heredoc): New face for HERE docs, inheriting from
+       font-lock-string-face.
+       (perl-font-lock-syntactic-face-function): Apply the new face
+       to HERE docs (Bug#23461).
+
+       * test/lisp/progmodes/cperl-mode-tests.el
+       (cperl-test--run-bug-10483): Skip for Perl mode.  The test
+       explicitly calls a function of CPerl mode.
+
+2021-01-05  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/subr.el (esc-map): Initialize inside declaration
+
+       * src/commands.h (meta_map):
+       * src/keymap.c (meta_map): Delete variable.
+       (syms_of_keymap): Don't initialize esc-map here.
+       (initial_define_key):
+       * src/keymap.h (initial_define_key): Delete function.
+
+       * src/keyboard.c (keys_of_keyboard): Don't initialize esc-map here.
+
+       * src/window.h (keys_of_window):
+       * src/window.c (keys_of_window): Delete function.
+       * src/lisp.h (keys_of_casefiddle):
+       * src/casefiddle.c (keys_of_casefiddle): Delete function.
+       * src/emacs.c (main): Don't call them.
+
+2021-01-05  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/subr.el (ctl-x-map): Initialize inside the declaration.
+
+       * src/command.h (control_x_map):
+       * src/keymap.c (control_x_map): Delete variable.
+       (syms_of_keymap):
+       * src/keyboard.c (keys_of_keyboard):
+       * src/casefiddle.c (keys_of_casefiddle):
+       * src/window.c (keys_of_window): Move initialization of ctl-x-map to
+       subr.el.
+
+       * src/lisp.h (syms_of_buffer):
+       * src/buffer.c (keys_of_buffer): Delete function.
+       * src/emacs.c (main): Don't call it.
+
+2021-01-05  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/subr.el (global-map): Initialize inside declaration.
+
+       * src/commands.h (global_map):
+       * src/keymap.c (global_map): Delete variable.
+       (syms_of_keymap): Don't initialize global_map here.
+       (keys_of_keymap): Delete function.
+       * src/lisp.h (keys_of_cmds):
+       * src/cmds.c (keys_of_cmds): Delete function.
+       * src/emacs.c (main): Don't call them.
+
+       * src/window.c (keys_of_window): Don't initialize global_map here.
+       * src/keyboard.c (keys_of_keyboard): Don't initialize global_map here.
+
+2021-01-05  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Use lexical-binding in the remaining preloaded files
+
+       * lisp/widget.el:
+       * lisp/w32-fns.el:
+       * lisp/textmodes/fill.el:
+       * lisp/term/common-win.el:
+       * lisp/scroll-bar.el:
+       * lisp/rfn-eshadow.el:
+       * lisp/menu-bar.el:
+       * lisp/language/tibetan.el:
+       * lisp/language/thai.el:
+       * lisp/language/misc-lang.el:
+       * lisp/language/lao.el:
+       * lisp/language/korean.el:
+       * lisp/language/japanese.el:
+       * lisp/language/indian.el:
+       * lisp/language/hebrew.el:
+       * lisp/language/european.el:
+       * lisp/language/ethiopic.el:
+       * lisp/language/english.el:
+       * lisp/language/cyrillic.el:
+       * lisp/language/chinese.el:
+       * lisp/jka-cmpr-hook.el:
+       * lisp/international/ucs-normalize.el:
+       * lisp/international/mule.el:
+       * lisp/international/mule-conf.el:
+       * lisp/international/iso-transl.el:
+       * lisp/international/fontset.el:
+       * lisp/international/characters.el:
+       * lisp/format.el:
+       * lisp/facemenu.el:
+       * lisp/electric.el:
+       * lisp/dos-w32.el:
+       * lisp/dos-fns.el:
+       * lisp/disp-table.el:
+       * lisp/cus-face.el:
+       * lisp/composite.el:
+       * lisp/bindings.el:
+       * admin/unidata/blocks.awk:
+       * admin/charsets/eucjp-ms.awk:
+       * admin/charsets/cp51932.awk: Use `lexical-binding`.
+
+2021-01-05  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/filesets.el: Use lexical-binding
+
+       Remove redundant `:group` args.  Require cl-lib and seq.
+       Fix various O(n²) bug and flag a few remaining ones.
+
+       (filesets-external-viewers): Simplify regexps.  Use \' instead of $.
+       Remove useless :constraint-flag properties.
+       (filesets-convert-path-list): η-reduce.
+       (filesets-eviewer-constraint-p): Mark :constraint-flag as obsolete.
+       (filesets-spawn-external-viewer): Can't use `run-hooks` on
+       lexical variable.
+       (filesets-filter-list): Fix O(n²) bug.
+       (filesets-ormap): Simplify.
+       (filesets-some, filesets-member, filesets-sublist): Make them
+       obsolete aliases.
+       (filesets-reset-fileset): Simplify.
+       (filesets-directory-files): Use `push`.
+       (filesets-spawn-external-viewer): Use `mapconcat` to fix O(n²) bug.
+       (filesets-cmd-get-args): Use `mapcan` to fix O(n²) bug.
+       (filesets-run-cmd): Use `mapconcat` and `mapcan` to fix O(n²) bugs.
+       (filesets-ingroup-collect-finder): Use dynamic scoping.
+       (filesets-ingroup-collect-files): Use `nreverse` to fix O(n²) bug.
+       (filesets-ingroup-collect-build-menu): Use `mapcan` to fix O(n²) bug.
+
+2021-01-04  Andrea Corallo  <akrl@sdf.org>
+
+       * test/src/comp-tests.el (cond-rw-1, not-cons, 45576): Rename three 
tests.
+
+2021-01-04  Andrea Corallo  <akrl@sdf.org>
+
+       Fix a type specifier test
+
+       * test/lisp/emacs-lisp/comp-cstr-tests.el
+       (comp-cstr-typespec-tests-alist): Fix a testcase.
+
+2021-01-04  Andrea Corallo  <akrl@sdf.org>
+
+       Fix type inference for bug#45635
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr-union-1-no-mem): Fix
+       missing mixed pos neg handling.
+       * test/lisp/emacs-lisp/comp-cstr-tests.el
+       (comp-cstr-typespec-tests-alist): Add a test.
+       * test/src/comp-tests.el (45635): New testcase.
+       * test/src/comp-test-funcs.el (comp-test-45635-f): New function.
+
+2021-01-04  Philipp Stephani  <phst@google.com>
+
+       Make a process tests a bit more robust.
+
+       * test/src/process-tests.el
+       (process-tests/fd-setsize-no-crash/make-process): Allow for processes
+       to fail before 'exec'.
+
+2021-01-04  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/cedet/srecode/semantic.el: Use lexical-binding
+
+       (srecode-semantic-insert-tag): Can't use `run-hook-with-args` on
+       lexical variable.
+
+2021-01-04  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/mail/reporter.el: Use lexical-binding
+
+       (reporter--run-functions): New function.
+       (reporter-dump-state): Use it and simplify the code.
+
+2021-01-04  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/erc/erc.el (erc-process-input-line): Undo confused last change
+
+2021-01-04  Dmitry Gutov  <dgutov@yandex.ru>
+
+       ruby-add-log-current-method: Support methods with symbolic names
+
+       * lisp/progmodes/ruby-mode.el (ruby-add-log-current-method):
+       Support methods with symbolic names.
+
+2021-01-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Do not assume Xrender merely because Cairo
+
+       Problem reported by Andrea Corallo in:
+       https://lists.gnu.org/r/emacs-devel/2021-01/msg00225.html
+       * src/xterm.c (x_term_init) [USE_CAIRO && !HAVE_XRENDER]:
+       Do not call XRenderQueryExtension.
+
+2021-01-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix broken build on AIX 7.2
+
+       Without this fix, the build on AIX 7.2 with xlc fails in the ‘CCLD
+       temacs’ step with the diagnostic ‘ld: 0711-317 ERROR: Undefined
+       symbol: BC’.  This is because -lcurses does not define BC etc.
+       * configure.ac: When building terminfo.o, define
+       TERMINFO_DEFINES_BC if the library defines BC etc.
+       * src/terminfo.c (UP, BC, PC): Define depending on
+       TERMINFO_DEFINES_BC, not on TERMINFO.
+
+       (cherry picked from commit 632917461a7c1893a83979a3873b51d4da3b8a42)
+
+2021-01-04  Simen Heggestøyl  <simenheg@gmail.com>
+
+       Remove extraneous closing paren
+
+       * doc/lispref/modes.texi (SMIE Indentation Example): Remove extraneous
+       closing paren.
+
+2021-01-04  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       99cc0045eb (origin/emacs-27) Update two user option names in the Widg...
+
+2021-01-04  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       2e09efdb68 Revert previous patch which was installed into wrong branch.
+
+2021-01-04  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       a7c2793efe Fix last change
+
+2021-01-04  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       90c782e92e Merge branch 'emacs-27' of git.savannah.gnu.org:/srv/git/e...
+
+2021-01-04  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       7384ec6416 Add warning comments abound binding keys in Isearch maps
+
+2021-01-04  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix error in tramp-sh-handle-insert-directory
+
+       * lisp/net/tramp-sh.el (tramp-sh-handle-insert-directory): Let buffer be
+       unibyte when applying numbers returned with the ls --dired option.
+       Reported by Justus Piater <Justus-dev@Piater.name>.
+
+       * test/lisp/net/tramp-tests.el (tramp--test-check-files): Extend test.
+
+2021-01-04  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Update two user option names in the Widget manual
+
+       * doc/misc/widget.texi (Basic Types): The user options
+       widget-glyph-directory and widget-glyph-enable were renamed long ago
+       to widget-image-directory and widget-image-enable, but the manual
+       kept calling them by their old names.  Update the names.
+
+2021-01-04  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Fix build for --enable-checking=structs
+
+       The last change to lisp.h only added comments in Lisp_String, so the
+       portable dumper need not be changed.
+
+       * src/pdumper.c (dump_string): Update hash for Lisp_String.
+
+2021-01-04  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Don't skip widgets when moving backward
+
+       * lisp/wid-edit.el (widget-move): Remove code that caused
+       widget-backward to skip an immediate previous widget when moving
+       backward from the start of a widget.  (Bug#45623)
+
+       * test/lisp/wid-edit-tests.el (widget-test-widget-backward): New test.
+
+2021-01-04  Amin Bandali  <bandali@gnu.org>
+
+       Fix off-by-one error in mode-line-compact code
+
+       * src/xdisp.c (display_mode_line): Fix off-by-one error that would
+       chop off the final non-space character when compacting (bug#45646).
+
+2021-01-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix computation of Lines in nnmaildir
+
+       * lisp/gnus/nnmaildir.el (nnmaildir--update-nov): Lines is -1 if
+       it's not present; not 0 (probably) (bug#45650).
+
+2021-01-04  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/print.c (print_vectorlike): Use `HASH_TABLE_SIZE`
+
+2021-01-04  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/xdisp.c (syms_of_xdisp): New var 
redisplay-skip-fontification-on-input
+
+       (handle_fontified_prop): Use it.
+
+       * src/keyboard.h (input_was_pending): Declare.
+       * src/keyboard.c (input_was_pending): Make non-static.
+
+2021-01-04  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/erc/erc.el: Use `run-hook-with-args` for `erc-pre-send-functions`
+
+       (erc-process-input-line): A function can be `listp`.
+       (erc-send-input): Use `run-hook-with-args` for `erc-pre-send-functions`.
+       (erc-display-command): Comment out, unused.
+
+2021-01-04  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/calc/calc-yank.el (calc-edit-mode): Make it into a proper major 
mode
+
+       Also make `calc-edit-handler` hold a function instead of an expression.
+
+       (calc-original-buffer, calc-return-buffer, calc-one-window)
+       (calc-edit-handler, calc-restore-trail, calc-allow-ret)
+       (calc-edit-top): Give them a default value.
+       (calc--edit-mode): New function extracted from old `calc-edit-mode`.
+       (calc-edit-return, calc-edit-finish): Don't need to test `boundp` any 
more.
+       (calc-edit-finish): Allow `calc-edit-handler` to be a function.
+
+       (calc-edit, calc-alg-edit):
+
+       * lisp/calc/calc-prog.el (calc-edit-user-syntax, calc-user-define-edit):
+       * lisp/calc/calc-embed.el (calc-embedded-edit):
+       * lisp/calc/calc-sel.el (calc-edit-selection):
+       * lisp/calc/calc-store.el (calc-edit-variable):
+       Use `calc--edit-mode` and make first arg into a function.
+
+       * lisp/calc/calc-ext.el (calc-init-extensions): Autoload 
`calc--edit-mode`
+       instead of `calc-edit-mode`.
+
+2021-01-04  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * Makefile.in (test/%): New target
+
+       * lisp/calendar/appt.el (appt-activate): Set the local 
`write-file-functions`
+
+2021-01-04  Mark Oteiza  <mvoteiza@udel.edu>
+
+       Fix last change in json.el
+
+       * lisp/json.el (json-encode-array): Include optimization for lists.
+
+2021-01-04  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/arc-mode.el (tar-grind-file-mode): Remove left over autoload
+
+       * doc/lispref/syntax.texi (Syntax Class Table): Clarify `@`
+
+2021-01-03  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * admin/last-chance.el (last-chance): Use `grep`s return value
+
+       (compilation-finish-functions): Only set it buffer-locally.
+
+2021-01-03  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/buffer.c (Fset_buffer_multibyte): Remove dead code
+
+2021-01-03  Mark Oteiza  <mvoteiza@udel.edu>
+
+       Remove unnecessary dependency on seq library
+
+       * lisp/json.el: Remove require declaration.
+       (json-encode-array): Just use length and /=.
+
+2021-01-03  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Remove relative paths for consistency
+
+       * admin/nt/dist-build/build-zips.sh: Remove Paths
+
+2021-01-03  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/byte-run.el (make-obsolete): Make `when` mandatory
+
+       (define-obsolete-function-alias, make-obsolete-variable)
+       (define-obsolete-variable-alias): Adjust similarly.
+
+2021-01-03  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Mention -lcurses problem on AIX
+
+       * etc/PROBLEMS: Describe problem with Emacs 27 and -lcurses.
+       Do not merge to master.
+
+2021-01-03  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix broken build on AIX 7.2
+
+       Without this fix, the build on AIX 7.2 with xlc fails in the ‘CCLD
+       temacs’ step with the diagnostic ‘ld: 0711-317 ERROR: Undefined
+       symbol: BC’.  This is because -lcurses does not define BC etc.
+       * configure.ac: When building terminfo.o, define
+       TERMINFO_DEFINES_BC if the library defines BC etc.
+       * src/terminfo.c (UP, BC, PC): Define depending on
+       TERMINFO_DEFINES_BC, not on TERMINFO.
+
+2021-01-03  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Revert previous patch which was installed into wrong branch.
+
+2021-01-03  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix broken build on AIX 7.2
+
+       Without this fix, the build on AIX 7.2 with xlc fails in the ‘CCLD
+       temacs’ step with the diagnostic ‘ld: 0711-317 ERROR: Undefined
+       symbol: BC’.  This is because -lcurses does not define BC etc.
+       * configure.ac: When building terminfo.o, define
+       TERMINFO_DEFINES_BC if the library defines BC etc.
+       * src/terminfo.c (UP, BC, PC): Define depending on
+       TERMINFO_DEFINES_BC, not on TERMINFO.
+
+2021-01-03  Alan Third  <alan@idiocy.org>
+
+       Fix child frame restacking on NS (bug#41422)
+
+       * src/nsfns.m (Fns_frame_restack): Use new restackWindow method.
+       * src/nsterm.m ([EmacsWindow orderFront:]):
+       ([EmacsWindow makeKeyAndOrderFront:]):
+       (nswindow_orderedIndex_sort):
+       ([EmacsWindow orderBack:]):
+       ([EmacsWindow restackWindow:above:]): Override superclass methods to
+       handle child windows the way we want.
+
+2021-01-03  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/xref.el (xref--show-defs-buffer-at-bottom): Fix 
missing arg
+
+2021-01-02  Alan Third  <alan@idiocy.org>
+
+       Fix crash when using menus and tramp on NS
+
+
+       * src/nsterm.m (ns_select): Don't drain outerpool in this function.
+
+2021-01-02  Alan Third  <alan@idiocy.org>
+
+       Fix NS toolbar image release crash (bug#43973)
+
+       The toolbar fails to make a proper copy of EmacsImage objects, so
+       releasing the copy incorrectly released instance variables from the
+       original objects.
+
+       * src/nsimage.m ([EmacsImage copyWithZone:]): New function to enable
+       correct copying of EmacsImage.
+
+2021-01-02  Roland Winkler  <winkler@gnu.org>
+
+       bibtex-mode: Extend widget bibtex-entry-alist
+
+2021-01-02  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Reposition call to set-buffer-modified-p in sieve-upload
+
+       * lisp/net/sieve.el (sieve-upload): It's meant to affect the script
+       buffer, not sieve-buffer, so needs to be outside the call to
+       with-current-buffer.
+
+2021-01-02  Dmitry Gutov  <dgutov@yandex.ru>
+
+       xref--show-pos-in-buf: Don't set other-window-scroll-buffer
+
+       * lisp/progmodes/xref.el (xref--show-pos-in-buf):
+       Don't set other-window-scroll-buffer (bug#45581).
+
+2021-01-02  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix backslash mistakes in doc strings in C code
+
+       These were found by an instrumented version of make-docfile.
+
+       * src/gnutls.c (Fgnutls_available_p):
+       * src/keymap.c (Fkey_description):
+       * src/xdisp.c (syms_of_xdisp):
+
+2021-01-02  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Fix Quit button in dictionary buffer
+
+       * lisp/net/dictionary.el (dictionay-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.
+
+2021-01-02  Philipp Stephani  <phst@google.com>
+
+       Avoid printing stacktraces when it probably wouldn't work anyway.
+
+       * src/eval.c (signal_or_quit): Don't try to call the debugger if it's
+       inhibited or we are about to dump or bootstrap.  In those cases the
+       debugger probably wouldn't work anyway.
+
+2021-01-02  Philipp Stephani  <phst@google.com>
+
+       Make a process test faster.
+
+       The test 'process-tests/fd-setsize-no-crash/make-process' used to call
+       'sleep' to ensure that enough processes are live to trigger a
+       FD_SETSIZE overflow.  However, we can just call 'cat' instead and
+       close standard input when done.  That way, we only wait as long as
+       needed.
+
+       * test/src/process-tests.el
+       (process-tests/fd-setsize-no-crash/make-process): Invoke 'cat' instead
+       of 'sleep'.  Close standard input to exit the 'cat' processes.
+
+2021-01-02  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (comp-known-predicates): Some more tweaking.
+
+2021-01-02  Philipp Stephani  <phst@google.com>
+
+       Simplify TTY allocation.
+
+       The 'process-tty-name' already provides the TTY name, we don't have
+       interrogate the TTY host.
+
+       * test/src/process-tests.el
+       (process-tests/fd-setsize-no-crash/make-serial-process): Use
+       'process-tty-name' instead of having the TTY host print its TTY
+       name.  Check whether TTY names are unique.
+       (process-tests--new-pty, process-tests--with-temp-file): Remove;
+       no longer used.
+
+2021-01-02  Andrea Corallo  <akrl@sdf.org>
+
+       Fix `functionp' constraining (bug#45576)
+
+       * lisp/emacs-lisp/comp.el (comp-known-predicates)
+       (comp-known-predicates-h): New constants.
+       (comp-known-predicate-p, comp-pred-to-cstr): New functions.
+       * lisp/emacs-lisp/cl-macs.el (cl-deftype-satisfies): Don't define.
+       * test/src/comp-tests.el (comp-test-45576): New testcase.
+       * test/src/comp-test-funcs.el (comp-test-45576-f): New function.
+
+2021-01-02  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix last change in characters.el
+
+       * lisp/international/characters.el: Adjust syntax of more
+       characters to follow that of Unicode properties.  (Bug#44974)
+
+2021-01-02  Andrea Corallo  <akrl@sdf.org>
+
+       Rename `dom' slot into  `idom' in `comp-block' struct
+
+       * lisp/emacs-lisp/comp.el (comp-block): Rename dom `slot' into
+       `idom'.
+       (comp-clean-ssa, comp-compute-dominator-tree)
+       (comp-compute-dominator-frontiers, comp-dom-tree-walker)
+       (comp-remove-unreachable-blocks): Update accordingly.
+
+2021-01-02  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix syntax of symbol and punctuation characters
+
+       * lisp/international/characters.el: Adjust syntax of punctuation
+       and symbol charcaters to follow that of Unicode properties.
+       (Bug#44974)
+
+2021-01-02  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2021-01-02  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix last change
+
+       * doc/lispref/strings.texi (Creating Strings): Improve wording of
+       last change.  (Bug#45516)
+
+2021-01-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a reference between the Strings node and Search/Replace
+
+       * doc/lispref/strings.texi (Creating Strings): Mention
+       string-replace/replace-regexp-in-string (bug#45516).
+
+       (cherry picked from commit b9359d4183a1a6923122d3aa12b922ab89693354)
+
+2021-01-02  Dmitry Gutov  <dgutov@yandex.ru>
+
+       ruby-smie-rules: Avoid one case of infinite recursion
+
+       * lisp/progmodes/ruby-mode.el (ruby-smie-rules):
+       Avoid one case of infinite recursion (bug#29107).
+
+2021-01-01  Alan Third  <alan@idiocy.org>
+
+       Fix GNUstep warnings
+
+       * src/nsterm.h: EmacsSurface is only required if NS_DRAW_TO_BUFFER is
+       defined.
+       * src/nsterm.m (ns_judge_scroll_bars): Remove unused variable.
+       * src/nsmenu.m (update_frame_tool_bar):
+       (ns_update_menubar): Remove unused variables.
+
+2021-01-01  Alan Third  <alan@idiocy.org>
+
+       Improve drawing performance on macOS
+
+       * configure.ac: Require IOSurface framework.
+       * src/nsterm.h: New EmacsSurface class and update EmacsView
+       definitions.
+       * src/nsterm.m (ns_update_end):
+       (ns_unfocus): Use new unfocusDrawingBuffer method.
+       (ns_draw_window_cursor): Move ns_focus to before we set colors.
+       ([EmacsView dealloc]):
+       ([EmacsView viewDidResize:]): Handle new EmacsSurface class.
+       ([EmacsView initFrameFromEmacs:]): Remove reference to old method.
+       ([EmacsView createDrawingBuffer]): Remove method.
+       ([EmacsView focusOnDrawingBuffer]):
+       ([EmacsView windowDidChangeBackingProperties:]): Use new EmacsSurface
+       class.
+       ([EmacsView unfocusDrawingBuffer]): New method.
+       ([EmacsView copyRect:to:]): Get information from the context instead
+       of direct from the IOSurface.
+       ([EmacsView updateLayer]): Use new EmacsSurface class.
+       ([EmacsView copyRect:to:]): Use memcpy to copy bits around instead of
+       using NS image functions.
+       ([EmacsSurface initWithSize:ColorSpace:]):
+       ([EmacsSurface dealloc]):
+       ([EmacsSurface getSize]):
+       ([EmacsSurface getContext]):
+       ([EmacsSurface releaseContext]):
+       ([EmacsSurface getSurface]):
+       ([EmacsSurface copyContentsTo:]): New class and methods.
+
+2021-01-01  Roland Winkler  <winkler@gnu.org>
+
+       bibtex-mode: Handle biblatex field aliases (bug#44976)
+
+       * lisp/textmodes/bibtex.el (bibtex-biblatex-entry-alist): Define
+       field aliases.
+       (bibtex-vec-incr): Remove.
+       (bibtex-format-entry, bibtex-validate): Check for field aliases.
+       (bibtex--skip-field-aliases): New function.
+       (bibtex-field-list): Use it.
+
+2021-01-01  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix CCL_MOD typo
+
+       * src/ccl.c (ccl_driver): Fix typo that disabled the
+       checks for undefined behavior with integer remainder.
+       Problem caught by Oracle Studio 12.6.
+
+2021-01-01  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Add overflow check for INPUT_EVENT_POS_MIN
+
+       * src/keyboard.c (INPUT_EVENT_POS_MIN): Don’t assume (-1 -
+       INPUT_EVENT_POS_MAX) fits into ptrdiff_t.  This fixes a
+       purely-theoretical problem that cannot occur on two’s-complement
+       arithmetic.  The Solaris 10 compiler still complains incorrectly,
+       but oh well.
+
+2021-01-01  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Port to Solaris 10
+
+       * configure.ac: Instead of AC_CHECK_HEADER, use AC_COMPILE_IFELSE
+       with X11/Intrinsic.h when checking for X11/extensions/Xrender.h.
+       This suppresses a bogus "report a bug to bug-gnu-emacs" diagnostic
+       from 'configure' in Solaris 10.
+       (SETUP_SLAVE_PTY): Adjust to recent renaming of forkin to
+       std_in in callproc.c.  Needed on Solaris and Unixware.
+       * lib-src/Makefile.in (LIB_GETRANDOM, LIBS_ETAGS): New vars,
+       needed because on Solaris 10 the Gnulib tempname module now needs
+       the -lrt library for clock_gettime.  Throw in the LIB_GETRANDOM
+       stuff too while we’re at it; from getrandom.m4 it seems to be
+       needed for MingW.
+       (LIBS_MOVE, etags_libs): Use them.
+       * src/callproc.c [SETUP_SLAVE_PTY]: Include sys/stream.h
+       and sys/stropts.h, for SETUP_SLAVE_PTY’s definiens.
+       * src/process.c [NEED_BSDTTY]: Don’t include bsdtty.h; hasn’t been
+       needed in years.
+       [USG5_4]: Don’t include sys/stream.h or sys/stropts.h; these
+       directives havbe been moved to callproc.c because the only use of
+       SETUP_SLAVE_PTY is there now.
+
+2021-01-01  Paul Eggert  <eggert@cs.ucla.edu>
+
+       New file scratch_buffer_dupfree.c
+
+       * lib/malloc/scratch_buffer_dupfree.c: New file, from Gnulib
+       (originally from glibc 2.33 code).
+       This is needed on macOS and some other platforms;
+       I forgot to commit it in the most recent Gnulib update.
+
+2021-01-01  Andrea Corallo  <akrl@sdf.org>
+
+       Add `throw' to non returning functions
+
+       * lisp/emacs-lisp/comp.el (comp-known-type-specifiers): Add throw.
+
+2021-01-01  Dmitry Gutov  <dgutov@yandex.ru>
+
+       xref-show-definitions-completing-read: Default to the first location
+
+       * lisp/progmodes/xref.el (xref-show-definitions-completing-read):
+       Default to the first location.
+
+2021-01-01  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (comp-compute-dominator-tree): Fix.
+
+2021-01-01  Andrea Corallo  <akrl@sdf.org>
+
+       Clean unreachable block using dominance tree to handle circularities
+
+       With this commit unreachable basic blocks are pruned automatically by
+       comp-ssa relying on dominance analysis.  This solves the issue of
+       unreachable cluster of basic blocks referencing each other.
+
+       * lisp/emacs-lisp/comp.el (comp-block-lap): New `no-ret' slot.
+       (comp-compute-dominator-tree): Update.
+       (comp-remove-unreachable-blocks): New functions.
+       (comp-ssa): Update to call `comp-remove-unreachable-blocks'.
+       (comp-clean-orphan-blocks): Delete.
+       (comp-rewrite-non-locals): Update and simplify.
+
+2021-01-01  Andrea Corallo  <akrl@sdf.org>
+
+       * src/comp.c (Fcomp__compile_ctxt_to_file): Fix hash table iteration.
+
+2021-01-01  Andrea Corallo  <akrl@sdf.org>
+
+       Introduce 'unreachable' LIMPLE operator
+
+       Introduce 'unreachable' as LIMPLE operator so we can handle correctly
+       in the CFG functions throwing values or signaling errors.
+
+       * src/comp.c (retrive_block): Better error diagnostic.
+       (emit_limple_insn): Add `unreachable'.
+       (compile_function): Fix block iteration.
+       (syms_of_comp): Define 'Qunreachable'.
+       * lisp/emacs-lisp/comp.el (comp-block): New variable.
+       (comp-block-lap): Add `non-ret-insn' slot.
+       (comp-branch-op-p): New predicate.
+       (comp-limple-lock-keywords): Color `unreachable' as red.
+       (comp-compute-edges): Add `unreachable'.
+       (comp-fwprop-call): Store non returning function call.
+       (comp-fwprop*): Update.
+       (comp-clean-orphan-blocks, comp-rewrite-non-locals): New functions.
+       (comp-fwprop): Call `comp-rewrite-non-locals'.
+       * test/src/comp-tests.el (comp-tests-type-spec-tests): Add two
+       tests.
+       * test/src/comp-test-funcs.el (comp-test-non-local-1)
+       (comp-test-non-local-2, comp-test-non-local-3)
+       (comp-test-non-local-4): New functions.
+
+2021-01-01  Eli Zaretskii  <eliz@gnu.org>
+
+       Add warning comments abound binding keys in Isearch maps
+
+       * lisp/isearch.el (isearch-mode-map)
+       (minibuffer-local-isearch-map): Add comments which warn against
+       wantonly rebinding unbound keys.
+
+2021-01-01  Philipp Stephani  <phst@google.com>
+
+       Fix a compilation warning.
+
+       ruby-mode uses 'cl-evenp' at runtime, so cl-lib must be available at
+       runtime as well.
+
+       * lisp/progmodes/ruby-mode.el (cl-lib): Require at runtime as well.
+
+2021-01-01  Andrea Corallo  <akrl@sdf.org>
+
+       Fix two predicates for missing negation handling
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr-empty-p)
+       (comp-cstr-null-p): Fix missing negation handling.
+
+2021-01-01  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (comp-limple-lock-keywords): Color returns as 
red.
+
+2021-01-01  Andrea Corallo  <akrl@sdf.org>
+
+       Add `comp-insert-insn'
+
+       * lisp/emacs-lisp/comp.el (comp-insert-insn): New inline.
+       (comp-emit-call-cstr): Split logic and call `comp-insert-insn'.
+
+2021-01-01  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Remove stray copy of image-tests.el
+
+       * test/manual/image-circular-tests.el: Remove a stray copy of
+       image-tests.el that was appended to this file.  Found by its
+       duplicate copyright notice.
+
+2021-01-01  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from Gnulib by running admin/merge-gnulib.
+
+2021-01-01  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Merge from origin/emacs-27
+
+       33d159c36f Fix copyright years by hand
+
+2021-01-01  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Merge from origin/emacs-27
+
+       74a77ef299 Improve documentation of 'network-lookup-address-info'
+       c6d5555646 Display messages sent using ERC's /say
+       c156723769 Fix Rmail summary display when From: header is malformed
+
+2021-01-01  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update copyright year to 2021
+
+       Run "TZ=UTC0 admin/update-copyright".
+
+2021-01-01  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix some mistaken shell delinting
+
+       * admin/merge-gnulib, admin/update-copyright, make-dist:
+       Revert recent mistaken changes that were put in merely to
+       pacify a shellcheck linter.
+
+2021-01-01  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix copyright years by hand
+
+       These are dates that admin/update-copyright did not update.
+
+2021-01-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert recent add-to-ordered-list changes
+
+       * doc/lispref/lists.texi (List Variables): Revert.
+
+       * lisp/subr.el (add-to-ordered-list): Revert recent changes
+       because the semantics are too muddled.
+
+2020-12-31  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: increment version numbers to 5.35 due to standalone release
+
+       * doc/misc/cc-mode.texi.  Increment the mode to 5.35, twice.
+
+       * lisp/progmodes/cc-defs.el.  Increment the mode to "5.35.1".
+
+2020-12-31  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of 'network-lookup-address-info'
+
+       * src/process.c (Fnetwork_lookup_address_info):
+       * doc/lispref/processes.texi (Misc Network): Document the error
+       message emitted by 'network-lookup-address-info' when it fails.
+
+2020-12-31  Dmitry Gutov  <dgutov@yandex.ru>
+
+       ruby-mode: Optimize expression expansion too
+
+       This speeds up syntax-propertize almost 2x.
+
+       * lisp/progmodes/ruby-mode.el (ruby-syntax-propertize):
+       Optimize expression expansion too.
+       (ruby-syntax-propertize-expansion, ruby-font-lock-keywords)
+       (ruby-expression-expansion-re): Update to match.
+
+2020-12-31  Dmitry Gutov  <dgutov@yandex.ru>
+
+       ruby-syntax-propertize: Optimize two rules a little
+
+       * lisp/progmodes/ruby-mode.el (ruby-syntax-propertize):
+       Optimize two rules a little.
+
+2020-12-31  Dmitry Gutov  <dgutov@yandex.ru>
+
+       ruby-mode: Recognize setter symbols
+
+       * lisp/progmodes/ruby-mode.el (ruby-syntax-propertize):
+       Add a rule for setter symbols (bug#42846).
+       (ruby-font-lock-keywords): Remove dead code, left over from before
+       commit 26f9c507.
+
+       * lisp/progmodes/ruby-mode.el (ruby-smie--bosp):
+       Handle '=' being part of a symbol (bug#42846).
+
+       * test/lisp/progmodes/ruby-mode-resources/ruby.rb:
+       Add corresponding indentation examples.
+
+2020-12-31  João Távora  <joaotavora@gmail.com>
+
+       Fix type declaration of two Flymake customization variables
+
+       * lisp/progmodes/flymake.el (flymake-mode-line-format)
+       (flymake-mode-line-counter-format): Fix type declaration.
+
+2020-12-31  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix process-tests on MS-Windows
+
+       * test/src/process-tests.el (process-tests--fd-setsize-test): On
+       MS-Windows start the pipe processes in the "stopped" condition.
+
+2020-12-31  João Távora  <joaotavora@gmail.com>
+
+       Must explicitly create unpropertized strings in mode-line
+
+       Otherwise, an innocent string like " " will mysteriously
+       pickup properties from some other minor mode.
+
+       Making this a separate commit in hopes of raising attention to this
+       possible bug.
+
+       * lisp/progmodes/flymake.el (flymake--mode-line-counter): Must
+       explicily create a new string unpropertized string
+
+2020-12-31  João Távora  <joaotavora@gmail.com>
+
+       Make Flymake mode-line indicator customizable (bug#33740)
+
+       * lisp/progmodes/flymake.el (flymake-mode): Use
+       flymake-mode-line-format.
+       (flymake--mode-line-format): Remove.
+       (flymake-mode-line-counter-format, flymake-mode-line-format): New
+       defcustom.
+       (flymake-mode-line-title, flymake-mode-line-exception)
+       (flymake-mode-line-counters, flymake-error-counter)
+       (flymake-warning-counter, flymake-note-counter): New variables.
+       (flymake--mode-line-title, flymake--mode-line-exception)
+       (flymake--mode-line-counters, flymake--mode-line-counter): New
+       helpers.
+
+       * doc/misc/flymake.texi (Customizable variables): Mention
+       flymake-mode-line-format and flymake-mode-line-counter-format
+
+       * etc/NEWS: Mention Flymake's customizable mode-line.
+
+2020-12-31  João Távora  <joaotavora@gmail.com>
+
+       Protect elisp-flymake-checkdoc against boundless diagnostics
+
+       These would be the kind of "This file needs a ;;Code section" and
+       such.
+
+       * lisp/progmodes/elisp-mode.el (elisp-flymake-checkdoc): Resist
+       checkdoc diagnostics with no end position.
+
+2020-12-31  Michael Albinus  <michael.albinus@gmx.de>
+
+       * test/src/process-tests.el: Let timeouts fail the tests.  Fix some 
docstrings
+
+2020-12-31  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode.  Fix AWK Mode fontification bug, remove some unused variables
+
+       * lisp/progmodes/cc-awk.el (awk-font-lock-keywords): Replace a hard use 
of
+       c-preprocessor-face-name by an `eval' expression which evaluates it.
+
+       * lisp/progmodes/cc-engine.el (c-in-knr-argdecl, c-laomib-put-cache)
+       (c-laomib-fix-elt): Remove unused bound variables.
+
+2020-12-31  Philipp Stephani  <phst@google.com>
+
+       Unbreak process tests if 'errno' is not installed.
+
+       * test/src/process-tests.el (process-tests--EMFILE-message): Don't
+       signal an error if the 'errno' binary is unavailable.
+
+2020-12-31  Stefan Kangas  <stefan@marxist.se>
+
+       Fix some shellcheck linter warnings
+
+       * admin/diff-tar-files:
+       * admin/merge-gnulib:
+       * admin/merge-pkg-config:
+       * admin/update-copyright:
+       * build-aux/git-hooks/prepare-commit-msg:
+       * make-dist: Fix some shellcheck linter warnings.
+
+2020-12-31  Stefan Kangas  <stefan@marxist.se>
+
+       Minor cleanup in doc.c
+
+       * src/doc.c (get_doc_string, Fdocumentation)
+       (Fdocumentation_property, store_function_docstring):
+       Minor cleanup.
+
+2020-12-31  Stefan Kangas  <stefan@marxist.se>
+
+       Add lexical-binding cookie to autoload files
+
+       * build-aux/update-subdirs:
+       * lisp/emacs-lisp/autoload.el (autoload-rubric): Add lexical-binding
+       cookie to generated files (bug#44854).
+
+2020-12-31  Daniel Martín  <mardani29@yahoo.es>
+
+       Fix duplicated entry in gnus-mime-action-alist
+
+       * lisp/gnus/gnus-art.el (gnus-mime-action-alist): Remove duplicated
+       "toggle display" entry and call the appropriate function for the "view
+       as charset" action (bug#45561).
+
+2020-12-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow add-to-ordered-list to use a test predicate
+
+       * doc/lispref/lists.texi (List Variables): Update manual.
+
+       * lisp/subr.el (add-to-ordered-list): Allow using a test
+       predicate, and make slightly more efficient (bug#45539).
+
+2020-12-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add test for add-to-ordered-list
+
+2020-12-31  Daniel Martín  <mardani29@yahoo.es>
+
+       Add some tests to find-func.el
+
+2020-12-31  Philipp Stephani  <phst@google.com>
+
+       Minor improvements to FD_SETSIZE overflow checks.
+
+       * src/process.c (Fmake_serial_process): Add port to error data.
+       (connect_network_socket): Add an explanatory comment.
+
+2020-12-31  Philipp Stephani  <phst@google.com>
+
+       Manually limit file descriptors that we select on to FD_SETSIZE.
+
+       This works even if another thread or process resets the resource limit
+       for open file descriptors, e.g., using 'prlimit' on GNU/Linux.
+
+       * src/process.c (create_process, create_pty, Fmake_pipe_process)
+       (Fmake_serial_process, connect_network_socket)
+       (server_accept_connection): Limit file descriptors to FD_SETSIZE.
+       * test/src/process-tests.el (process-tests--with-raised-rlimit): New
+       helper macro.
+       (process-tests--fd-setsize-test): Rename from
+       'process-tests--with-many-pipes'.  Increase resource limit during test
+       if possible.
+       (process-tests/fd-setsize-no-crash/make-process)
+       (process-tests/fd-setsize-no-crash/make-pipe-process)
+       (process-tests/fd-setsize-no-crash/make-network-process)
+       (process-tests--new-pty): Rename callers.
+
+2020-12-31  Philipp Stephani  <phst@google.com>
+
+       Fix a potential unit test breakage on GNU/Linux.
+
+       * test/src/process-tests.el
+       (process-tests/fd-setsize-no-crash/make-process): Allow special exit
+       codes that can happen if terminal setup fails in the child process.
+
+2020-12-30  Philipp Stephani  <phst@google.com>
+
+       Fix an incorrect Edebug specification.
+
+       * test/src/process-tests.el (process-tests--with-many-pipes): Fix
+       incorrect Edebug specification.
+
+2020-12-30  Philipp Stephani  <phst@google.com>
+
+       Consistently check for FD_SETSIZE overflow.
+
+       Previously this was only checked in a few places.  Now assert that
+       file descriptors are within the expected range whenever we'd otherwise
+       introduce undefined behavior.
+
+       * src/process.c (add_read_fd, add_process_read_fd, delete_read_fd)
+       (recompute_max_desc, delete_write_fd, compute_input_wait_mask)
+       (compute_non_process_wait_mask, compute_non_keyboard_wait_mask)
+       (compute_write_mask, clear_waiting_thread_info)
+       (update_processes_for_thread_death, Fset_process_thread)
+       (create_process, create_pty, Fmake_pipe_process)
+       (Fprocess_datagram_address, Fset_process_datagram_address)
+       (Fmake_serial_process, finish_after_tls_connection)
+       (connect_network_socket, deactivate_process)
+       (server_accept_connection, wait_reading_process_output)
+       (read_process_output, read_and_dispose_of_process_output)
+       (send_process, Fcontinue_process, Fprocess_send_eof)
+       (Fprocess_filter_multibyte_p, keyboard_bit_set)
+       (add_timer_wait_descriptor, setup_process_coding_systems): Add
+       assertions to document and check that file descriptors are within the
+       expected range when used as file descriptor set elements or array
+       subscripts.
+
+2020-12-30  Philipp Stephani  <phst@google.com>
+
+       Extend and overhaul FD_SETSIZE overflow tests.
+
+       Instead of trying to generate the right number of processes,
+       pre-create lots of unused pipe processes until creation fails.  Extend
+       the tests to the 'pty' connection type and other kinds of process
+       objects.
+
+       * test/src/process-tests.el (process-tests--ignore-EMFILE)
+       (process-tests--with-buffers, process-tests--with-processes)
+       (process-tests--with-many-pipes, process-tests--with-temp-file)
+       (process-tests--with-temp-directory): New helper macros.
+       (process-tests/fd-setsize-no-crash/make-process): Renamed from
+       'process-tests/fd-setsize-no-crash'.  Fail on timeout.  Also test the
+       'pty' connection type.  Pre-create lots of pipe processes so we reach
+       the FD_SETSIZE limit faster.  Ignore EMFILE more precisely, if
+       possible.
+       (process-tests/fd-setsize-no-crash/make-pipe-process)
+       (process-tests/fd-setsize-no-crash/make-network-process)
+       (process-tests/fd-setsize-no-crash/make-serial-process): New tests
+       that test FD_SETSIZE limits for other kinds of processes.
+       (process-tests--EMFILE-message): New helper function and cache
+       variable.
+       (process-tests--new-pty): New helper function.
+
+2020-12-30  Philipp Stephani  <phst@google.com>
+
+       * src/nsterm.m (ns_select): Fix off-by-one error, and add assertion
+
+2020-12-30  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: correct the handling of empty strings
+
+       In particular, have the macro cache invalidated after its last use in
+       c-before-change.
+
+       * lisp/progmodes/cc-langs.el (c-get-state-before-change-functions): 
Remove
+       c-invalidate-macro-cache from the entries it's in, moving it to....
+
+       * lisp/progmodes/cc-mode.el (c-before-change): Call 
c-invalidate-macro-cache
+       directly from the functions, after the call to c-invalidate-state-cache.
+
+2020-12-30  Alan Third  <alan@idiocy.org>
+
+       Fix Help menu on macOS
+
+       * src/nsmenu.m (ns_update_menubar): Make sure to reset the help menu
+       when we move it to another submenu.
+
+2020-12-30  Andrea Corallo  <akrl@sdf.org>
+
+       Order function types in aphabetical order
+
+       * lisp/emacs-lisp/comp.el (comp-known-type-specifiers): Reorder in
+       aphabetical order and comment.
+
+2020-12-30  Andrea Corallo  <akrl@sdf.org>
+
+       Add more function type specifiers
+
+       * lisp/emacs-lisp/comp.el (comp-known-type-specifiers): Add more
+       type specifiers.
+
+2020-12-30  Mattias Engdegård  <mattiase@acm.org>
+
+       Use standard key symbols in NS menu entries
+
+       * src/nsmenu.m (skipspc): Remove.
+       (key_symbols, prettify_key): New.
+       ([EmacsMenu fillWithWidgetValue:]): Call prettify_key.
+
+2020-12-30  Stefan Kangas  <stefan@marxist.se>
+
+       Remove redundant 'function's around lambda in align.el
+
+       * lisp/align.el (align-rules-list, align-exclude-rules-list)
+       (align-vhdl-rules-list, align-highlight-rule): Remove redundant
+       'function's around lambda.
+
+2020-12-30  Dmitry Gutov  <dgutov@yandex.ru>
+           Tobias Rittweiler  <trittweiler@gmail.com>
+
+       Add 'project-relative' as value for 'xref-file-name-display'
+
+       * lisp/progmodes/xref.el (xref-file-name-display): Document new value.
+       (xref-location-group ((l xref-file-location))): Handle the new value.
+       (xref--project-root): Extract from the default method of
+       'xref-backend-references' so it can be used in above's new code.
+       Also fix an old bug in the "backward compat" branch.
+
+       * lisp/progmodes/xref.el (xref--project-root-memo): New variable.
+
+       * test/lisp/progmodes/xref-tests.el: Add test cases for the three
+       possible settings of 'xref-file-name-display'.
+
+2020-12-30  Stefan Kangas  <stefan@marxist.se>
+
+       Fix some over-wide docstrings
+
+       * lisp/cedet/semantic/analyze/refs.el
+       (semantic-analyze-refs-proto)
+       (semantic-analyze-refs-impl):
+       * lisp/cedet/semantic/symref.el
+       (semantic-symref-hit-to-tag-via-buffer):
+       * lisp/emacs-lisp/chart.el (chart-axis-draw):
+       * lisp/emacs-lisp/cl-macs.el (cl-defstruct, cl-loop):
+       * lisp/emacs-lisp/eieio-core.el (eieio--add-new-slot):
+       * lisp/eshell/em-unix.el (eshell/info):
+       * lisp/gnus/deuglify.el (gnus-outlook-rearrange-article):
+       * lisp/gnus/gnus-agent.el (gnus-agent-read-article-number):
+       * lisp/gnus/gnus-util.el (gnus-put-overlay-excluding-newlines)
+       (gnus-put-text-property-excluding-newlines):
+       * lisp/gnus/message.el (message-sort-headers):
+       * lisp/gnus/nntp.el (nntp-with-open-group)
+       (nntp-with-open-group-function):
+       * lisp/gnus/nnvirtual.el (nnvirtual-create-mapping):
+       * lisp/mail/feedmail.el (feedmail-fiddle-list-of-fiddle-plexes)
+       (feedmail-queue-reminder, feedmail-mail-send-hook-splitter):
+       * lisp/net/dictionary.el (dictionary-do-matching):
+       * lisp/obsolete/longlines.el (longlines-auto-wrap):
+       * lisp/org/ob-sql.el (org-babel-sql-dbstring-vertica):
+       * lisp/org/ol-bbdb.el (org-bbdb-date-list):
+       * lisp/progmodes/cc-cmds.el (c-mark-function):
+       * lisp/progmodes/cperl-mode.el (cperl-add-tags-recurse)
+       (cperl-add-tags-recurse-noxs-fullpath)
+       (cperl-add-tags-recurse-noxs):
+       * lisp/progmodes/etags.el (tags-search):
+       * lisp/progmodes/verilog-mode.el (verilog-delete-auto-buffer)
+       (verilog-auto-re-search-do, verilog-expand-vector-internal):
+       * lisp/textmodes/reftex-parse.el (reftex-init-section-numbers):
+       * lisp/textmodes/reftex-toc.el
+       (reftex-toc-load-all-files-for-promotion):
+       * lisp/textmodes/sgml-mode.el (html-mode):
+       * lisp/textmodes/table.el (table--transcoord-cache-to-table)
+       (table--transcoord-table-to-cache, table--remove-eol-spaces)
+       (table--region-in-cell-p, table-goto-bottom-right-corner)
+       (table-split-cell-horizontally):
+       * lisp/url/url-handlers.el (url-insert):
+       * lisp/vc/ediff-util.el (ediff-inferior-compare-regions): Fix doc
+       strings to not exceed 80-column limits.  (Bug#44858)
+
+2020-12-30  Mattias Engdegård  <mattiase@acm.org>
+
+       Plug NS memory leaks (bug#45502)
+
+       * src/nsmenu.m ([EmacsMenu addItemWithWidgetValue:attributes:]):
+       Mark allocated and owned objects for autorelease.
+
+2020-12-30  Juri Linkov  <juri@linkov.net>
+
+       Add variables read-char-choice-use-read-key and y-or-n-p-use-read-key
+
+       * lisp/subr.el (read-char-choice-use-read-key): New variable.
+       (read-char-choice): Use read-char-from-minibuffer when
+       read-char-choice-use-read-key is nil.
+       (y-or-n-p-use-read-key): New variable.
+       (y-or-n-p): Restore old code that calls read-key to use it when
+       y-or-n-p-use-read-key is non-nil.
+
+       * lisp/dired-aux.el (dired--no-subst-ask, dired-query):
+       * lisp/files.el (files--ask-user-about-large-file)
+       (hack-local-variables-confirm):
+       * lisp/userlock.el (ask-user-about-supersession-threat):
+       * lisp/wid-edit.el (widget-choose): Revert to use read-char-choice
+       instead of read-char-from-minibuffer.
+
+       https://lists.gnu.org/archive/html/emacs-devel/2020-12/msg01919.html
+
+2020-12-30  Michael Albinus  <michael.albinus@gmx.de>
+
+       * src/dbusbind.c (XD_BASIC_DBUS_TYPE): Fix error in declaration.
+
+2020-12-30  Juri Linkov  <juri@linkov.net>
+
+       In Isearch bind 'C-s M-y' to isearch-yank-pop-only with old code 
(bug#45483)
+
+       * lisp/isearch.el (isearch-menu-bar-yank-map, isearch-mode-map):
+       (isearch-forward): Use isearch-yank-pop-only instead of 
isearch-yank-pop.
+       (isearch-yank-pop): Mention isearch-yank-pop-only.
+       (isearch-yank-pop-only): New command with old body from Emacs 27.
+
+2020-12-30  Stefan Kangas  <stefan@marxist.se>
+
+       Minor cleanup in keymap.c
+
+       * src/keymap.c (get_keymap, keymap_parent, Fset_keymap_parent)
+       (store_in_keymap, Fdefine_key, Flookup_key, define_as_prefix)
+       (silly_event_symbol_error, current_minor_maps)
+       (Fcurrent_active_maps, Fkey_binding, Flocal_key_binding)
+       (Fminor_mode_key_binding, Fdefine_prefix_command)
+       (Faccessible_keymaps, Fdescribe_buffer_bindings)
+       (describe_vector, Fwhere_is_internal): Minor cleanup.
+
+2020-12-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Also count symbol plists in memory-report
+
+       * lisp/emacs-lisp/memory-report.el (memory-report--symbol-plist):
+       New function.
+       (memory-report): Use it.
+
+2020-12-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Switch add-to-ordered-list to eql"
+
+       This reverts commit b4fd857ead728a06380250c5336c1ab94a7c2f7a.
+
+       I misunderstood the purposed of the function.
+
+2020-12-30  Stefan Kangas  <stefan@marxist.se>
+
+       Add some char-table tests
+
+       * test/src/chartab-tests.el (chartab-test-char-table-p)
+       (chartab-test-char-table-subtype)
+       (chartab-test-char-table-parent)
+       (chartab-test-char-table-extra-slot): New tests.
+
+2020-12-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Switch add-to-ordered-list to eql
+
+       * doc/lispref/lists.texi (List Variables): Update documentation.
+
+       * lisp/subr.el (add-to-ordered-list): Switch to eql (bug#45539).
+
+2020-12-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve the `long' computation of `mode-line-compact'
+
+       * src/xdisp.c (display_mode_line): Compute `long' based on total
+       window width, and use the passed-in window instead of the selected
+       window.
+
+2020-12-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add caveat about the `long' `mode-line-compact' setting
+
+       * doc/lispref/modes.texi (Mode Line Basics): Elaborate on the
+       `long' setting.
+
+2020-12-30  Tobias Rittweiler  <trittweiler@gmail.com>
+
+       Minor refactoring of xref-tests
+
+       * test/lisp/progmodes/xref-tests.el (xref-tests-data-dir):
+       Rename to 'xref-tests--data-dir'.
+       (xref-tests--matches-in-data-dir, xref-tests--locations-in-data-dir):
+       New functions.  Factored out from test cases and updated usage sites
+       to use them.
+
+2020-12-29  Alan Third  <alan@idiocy.org>
+
+       Don't calculate macOS menu data for GNUstep (bug#45502)
+
+       * src/nsmenu.m ([EmacsMenu fillWithWidgetValue:]): #ifdef out code
+       that has no effect on GNUstep and autorelease alloc'd objects.
+
+2020-12-29  Artem Loenko  <artyom.loenko@mac.com>
+
+       * src/Makefile.in (DO_CODESIGN): Fix architecture for Apple Silicon
+
+2020-12-29  Juri Linkov  <juri@linkov.net>
+
+       Use explicit "--color=auto" in grep mode to support both GNU grep and 
ripgrep
+
+       * lisp/progmodes/grep.el (grep-highlight-matches):
+       (grep-compute-defaults, grep-expand-template):
+       Use "--color=auto" instead of "--color" (bug#44983).
+
+2020-12-29  Juri Linkov  <juri@linkov.net>
+
+       * lisp/x-dnd.el (x-dnd-get-drop-x-y): Add safer check for top/left 
(bug#45277)
+
+2020-12-29  Eli Zaretskii  <eliz@gnu.org>
+
+       A better fix for process-tests on MS-Windows
+
+       * src/w32.c (pipe2): When forcibly closing pipe handles due to
+       overflow of FD_SETSIZE, set the handles to -1, to avoid assertion
+       violations in emacs_close.
+
+       * test/src/process-tests.el (process-tests/fd-setsize-no-crash):
+       No need to skip this test anymore.
+
+2020-12-29  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix process-tests on MS-Windows
+
+       * test/src/process-tests.el (process-tests/fd-setsize-no-crash):
+       Skip this test on windows-nt systems, as we cannot use more than
+       FD_SETSIZE file descriptors there: if we try, we crash.
+
+2020-12-29  Dmitry Gutov  <dgutov@yandex.ru>
+
+       xref-show-definitions-completing-read: Tune up completion
+
+       * lisp/minibuffer.el (completion-category-defaults)
+       Use 'substring' completion style for 'xref-location' category by
+       default.
+
+       * lisp/progmodes/xref.el (xref-show-definitions-completing-read):
+       Assign the 'xref-location' category to the completions. Pass
+       REQUIRE-MATCH=t.
+
+2020-12-29  Michael Albinus  <michael.albinus@gmx.de>
+
+       Instrument process-tests.el for timeouts on emba
+
+2020-12-29  Philipp Stephani  <phst@google.com>
+
+       Add a regression test for Bug#24325.
+
+       * test/src/process-tests.el (process-tests/fd-setsize-no-crash): New
+       unit test.
+
+2020-12-29  Andrea Corallo  <akrl@sdf.org>
+
+       Fix missing negation handling in a bunch of predicates
+
+       * lisp/emacs-lisp/comp.el (comp-mvar-fixnum-p)
+       (comp-mvar-symbol-p, comp-mvar-cons-p): Consider neg slot.
+       * test/src/comp-tests.el (comp-test-not-cons): New test.
+       * test/src/comp-test-funcs.el (comp-test-not-cons-f): New
+       function.
+
+2020-12-29  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr): Better `comp-value-to-cstr'.
+
+2020-12-29  Andrea Corallo  <akrl@sdf.org>
+
+       Constrain mvars under compare and branch with built-in predicates
+
+       * lisp/emacs-lisp/comp.el (comp-emit-assume): Update.
+       (comp-known-predicate-p): New function.
+       (comp-add-cond-cstrs): Extend to pattern match predicate calls.
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr-null-p)
+       (comp-pred-to-cstr): New function.
+       * test/src/comp-tests.el (comp-tests-type-spec-tests): Add a
+       number of tests and fix comments.
+
+2020-12-29  Mattias Engdegård  <mattiase@acm.org>
+
+       More readable keys in NS menu entries (bug#45502)
+
+       Each menu entry now has the key binding in a right-aligned column, as
+       an attempt to improve readability.  Previously the keys were given in
+       brackets immediately following the menu string.
+
+       * src/nsmenu.m ([EmacsMenu parseKeyEquiv:]): Remove.
+       (skipspc): New helper function.
+       ([EmacsMenu addItemWithWidgetValue:]): Add attributes argument.
+       Use attributed title string.  Don't special-case Super bindings.
+       ([EmacsMenu fillWithWidgetValue:]): Compute maximum width.  Prepare
+       attributes for title.
+
+2020-12-29  Michael Albinus  <michael.albinus@gmx.de>
+
+       Sync with Tramp 2.5.0
+
+       * doc/misc/trampver.texi:
+       * lisp/net/trampver.el: Change version to "2.5.0".
+
+       * test/lisp/net/tramp-tests.el
+       (tramp--test--deftest-direct-async-process): Check, that
+       `make-process' supports file name handlers.  Suppress
+       `internal-default-process-sentinel'.
+       (tramp--test-async-shell-command): Set `proc' proper.
+       (tramp-test32-shell-command-direct-async): Tag it :unstable.
+
+2020-12-29  João Távora  <joaotavora@gmail.com>
+
+       Revert "Allow the flymake mode line indicator to be customized"
+
+       This reverts commit 37049ee78c4576d340781179317e6cbaaf73b6c3.
+
+       It's not ready to be used, contains some fundamental errors.
+
+       See bug#33740.
+
+2020-12-29  Andrea Corallo  <akrl@sdf.org>
+
+       Define `cl-satisfies-deftype' mapping predicate -> type
+
+       * lisp/emacs-lisp/cl-macs.el (cl-satisfies-deftype): Define symbol
+       property as reverse of `cl-deftype-satisfies'.
+
+2020-12-29  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr): Better `comp-type-to-cstr'.
+
+2020-12-29  Alan Third  <alan@idiocy.org>
+
+       Fix crash in NS menu code
+
+       * src/nsmenu.m (ns_update_menubar): When the menu generation code was
+       copied from xmenu.c the fix for waiting_for_input was lost.  Reinstate
+       it.
+
+2020-12-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add some tests for align.el
+
+2020-12-29  Glenn Morris  <rgm@gnu.org>
+
+       * src/xdisp.c (display_mode_line): I guess FALSE should be false.
+
+2020-12-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert the previous display_string change
+
+       * src/xdisp.c (display_string): Revert adding the additional
+       ignore_text_properties parameter -- it was already covered by the
+       other mix of parameters.
+
+2020-12-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix compact mode line text properties
+
+       * src/xdisp.c (display_mode_line): Display the compact mode
+       correctly (with text properties) (bug#45520).
+
+2020-12-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a parameter to display_string to allow not ignoring text props
+
+       * src/xdisp.c (display_string): Add a parameter to allow not
+       ignoring text properties (bug#45520).  Adjust callers throughout
+       xdisp.c.
+
+2020-12-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Introduce new variable mode-line-compact
+
+       * doc/lispref/modes.texi (Mode Line Basics): Document it (bug#34476).
+
+       * src/xdisp.c (display_mode_line): Use it.
+       (syms_of_xdisp): New variable mode-line-compact.
+
+2020-12-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow the flymake mode line indicator to be customized
+
+       * doc/misc/flymake.texi (Customizable variables): Mention it.
+
+       * lisp/progmodes/flymake.el (flymake-mode-line-indicator-format):
+       New variable (bug#33740).
+       (flymake--mode-line-format): Use it.
+
+2020-12-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a SPLIT parameter to `format-spec'
+
+       * doc/lispref/strings.texi (Custom Format Strings): Document it.
+
+       * lisp/format-spec.el (format-spec): Add an optional parameter to
+       return a list of strings (bug#33740).
+
+2020-12-29  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Reword a long docstring in cc-langs.el
+
+       * lisp/progmodes/cc-langs.el (c-vsemi-status-unknown-p-fn): Reword
+       docstring to fit within 80 columns and silence the corresponding
+       byte-compiler warning (bug#44858).
+
+2020-12-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a reference between the Strings node and Search/Replace
+
+       * doc/lispref/strings.texi (Creating Strings): Mention
+       string-replace/replace-regexp-in-string (bug#45516).
+
+2020-12-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow mixing attributes and comments in the diary file
+
+       * lisp/calendar/diary-lib.el (diary-face-attrs): The attributes
+       don't have to be at the end of the line -- there may be ##warntime
+       or other comments (bug#19965).
+
+2020-12-29  João Távora  <joaotavora@gmail.com>
+
+       Robustify completion match scoring for optimized patterns
+
+       (Bug#42149)
+
+       The function completion-pcm--hilit-commonality, which propertizes and
+       scores a previously confirmed match, expected its PATTERN argument to
+       match the strings of COMPLETIONS entirely (i.e. up to the string's
+       very end).  But sometimes the ending wildcard, represented by the
+       'any' atom in PATTERN, is optimized away by
+       completion-pcm--optimize-pattern.  Although this is mostly benign in
+       terms of highlighting commonality, it leads to incorrect score values.
+
+       In this change, we ensure that completion-pcm--hilit-commonality is
+       aware of this exception and isn't affected by it.  We also document
+       the function a bit better and simplify its workings.
+
+       Originally reported by Dario Gjorgjevski <dario.gjorgjevski@gmail.com>
+
+       * lisp/minibuffer.el (completion-pcm--hilit-commonality):
+       Simplify.  Add docstring.
+
+       * lisp/minibuffer.el (completion-pcm--hilit-commonality): Add
+       docstring
+
+2020-12-28  Amin Bandali  <bandali@gnu.org>
+
+       Display messages sent using ERC's /say
+
+       * lisp/erc/erc.el (erc-cmd-SAY): Call `erc-display-msg' to display the
+       user's message in the buffer, just like other [non-command] messages.
+
+       https://lists.gnu.org/r/help-gnu-emacs/2020-12/msg00066.html
+
+2020-12-28  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: Add newish AWK Mode facilities, as used in gawk-4.
+
+       * lisp/progmodes/cc-awk.el 
(c-awk-font-lock-invalid-namespace-separators):
+       New function.
+       (c-awk-context-expand-fl-region): New function.
+       (awk-font-lock-keywords): Enhance handling of function declarations to 
include
+       :: tokens.  Fontify new system variable names FPAT, FUNCTAB, PREC, 
ROUNDMODE,
+       SYNTAB.  Fontify new keywords BEGINFILE and ENDFILE.  Fontify new system
+       functions asorti, dcngettext, isarray, patsplit, typeof.  Fontify the 
new
+       directives @include, @load, @namespace.  Call
+       c-awk-font-lock-invalid-namespace-separators as a matcher.
+
+       * lisp/progmodes/cc-fonts.el (top level): No longer require 'cc-awk.
+
+       * lisp/progmodes/cc-langs.el 
(c-before-context-fontification-functions): Give
+       AWK the value c-awk-context-expand-fl-region rather than nil.
+
+       * lisp/progmodes/cc-mode.el (top level): Declare awk-mode-syntax-table 
as a
+       variable.
+
+2020-12-28  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/minibuffer.el: Avoid consecutive `any` in completion patterns
+
+       (completion-pcm--optimize-pattern): Turn multiple consecutive
+       occurrences of `any` into just a single one.
+       Suggested by Dario Gjorgjevski <dario.gjorgjevski@gmail.com>.
+
+2020-12-28  Glenn Morris  <rgm@gnu.org>
+
+       Fix package tests for tetris no longer existing as a package
+
+       * test/lisp/emacs-lisp/package-tests.el
+       (package-test-list-filter-by-name, package-test-list-clear-filter):
+       Use ansi-color instead of tetris, which no longer has a version:.
+
+2020-12-28  Alan Third  <alan@idiocy.org>
+
+       Fix crash in NS menu code
+
+       * src/nsmenu.m (ns_update_menubar): Don't assume that the top level
+       menus are correct when populating the submenus.
+       (free_frame_menubar): Clear the menu.
+       ([EmacsMenu removeAllItems]): Actually remove all menu items.
+
+2020-12-28  Andrea Corallo  <akrl@sdf.org>
+
+       Store function type and expose it with `subr-type'
+
+       * src/lisp.h (struct Lisp_Subr): Add 'type' field.
+       (SUBR_TYPE): New inline accessor.
+       * src/pdumper.c (dump_subr): Update for 'type' field.
+       * src/data.c (Fsubr_type): New primitive.
+       (syms_of_data): Update.
+       * src/comp.c (ABI_VERSION): Bump new ABI version.
+       (make_subr): Set type.
+       (Fcomp__register_lambda, Fcomp__register_subr)
+       (Fcomp__late_register_subr): Receive and pass subr type to
+       'make_subr'.
+       * src/alloc.c (mark_object): Mark subr type.
+       * lisp/emacs-lisp/comp.el (comp-func): Change slot type into mvar.
+       (comp-emit-for-top-level, comp-emit-lambda-for-top-level): Pass
+       type mvar to subr register functions.
+       (comp-compute-function-type): Fix-up subr type mvars.
+       * test/src/comp-tests.el (comp-tests-check-ret-type-spec): Use
+       `subr-type'.
+
+2020-12-28  Andrea Corallo  <akrl@sdf.org>
+
+       Reorder subr register function arguments to make some room
+
+       * src/comp.c (Fcomp__register_lambda, Fcomp__register_subr)
+       (Fcomp__late_register_subr): Use a rest arg to pass 'doc_idx' and
+       'intspec' parameters.
+       * lisp/emacs-lisp/comp.el (comp-emit-for-top-level)
+       (comp-emit-lambda-for-top-level): Update.
+
+2020-12-28  Andrea Corallo  <akrl@sdf.org>
+
+       Propagate function calls also when hiddend under funcall
+
+       * lisp/emacs-lisp/comp.el (comp-fwprop-call): Propagate functions
+       also when called under `funcall'.
+       * test/src/comp-tests.el (comp-tests-type-spec-tests): Add a test.
+
+2020-12-28  Andrea Corallo  <akrl@sdf.org>
+
+       Compute function type for native compiled functions
+
+       * lisp/emacs-lisp/comp.el (comp-func): `type' rename from
+       `ret-type-specifier'.
+       (comp-args-to-lambda-list): New function.
+       (comp-compute-function-type): New function from
+       `comp-ret-type-spec'.
+       (comp-final): Update.
+       * test/src/comp-tests.el (comp-tests-check-ret-type-spec): Update.
+
+2020-12-28  Andrea Corallo  <akrl@sdf.org>
+
+       Improve some slot type into comp.el
+
+       * lisp/emacs-lisp/comp.el (comp-args-base, comp-args)
+       (comp-nargs, comp-func): Fix the type of some slots.
+
+2020-12-28  Stefan Kangas  <stefan@marxist.se>
+
+       Minor cleanups in tetris.el
+
+       * lisp/play/tetris.el: Remove redundant :group args.
+       (tetris-get-tick-period): Drop unnecessary check.
+       (tetris): Stylistic doc fixes.
+
+2020-12-28  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/ps-print.el (ps-message-log-max): Remove XEmacs compat code.
+
+2020-12-28  Stefan Kangas  <stefan@marxist.se>
+
+       Remove redundant 'function's around lambda in vhdl-mode.el
+
+       * lisp/progmodes/vhdl-mode.el (fboundp, vhdl-sort-alist, lambda)
+       (vhdl-create-mode-menu, vhdl-set-offset, vhdl-set-style)
+       (vhdl-regress-line, vhdl-align-inline-comment-region-1)
+       (vhdl-resolve-paths, vhdl-generate-makefile-1)
+       (vhdl-submit-bug-report): Remove redundant 'function's around lambda.
+
+2020-12-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix too-long feedmail-sendmail-f-doesnt-sell-me-out doc string
+
+       * lisp/mail/feedmail.el (feedmail-sendmail-f-doesnt-sell-me-out):
+       Fold the example SMTP header using continuation folding.
+
+2020-12-28  Stefan Kangas  <stefan@marxist.se>
+
+       Fill some auto-generated docstrings
+
+       * lisp/emacs-lisp/easy-mmode.el (define-minor-mode)
+       (define-globalized-minor-mode): Fill auto-generated documentation
+       strings.  (Bug#44858)
+       * lisp/subr.el (internal--fill-string-single-line)
+       (internal--format-docstring-line): New functions.
+
+2020-12-28  Stefan Kangas  <stefan@marxist.se>
+
+       Make byte-compiler warn about wide docstrings
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile--wide-docstring-p):
+       (byte-compile-docstring-length-warn): New defuns.
+       (byte-compile-docstring-max-column): New defcustom.
+       (byte-compile--wide-docstring-substitution-len): New variable.
+       (byte-compile-warning-types, byte-compile-warnings): New value
+       'docstrings'.
+       (byte-compile-file-form-autoload, byte-compile-file-form-defvar):
+       (byte-compile-file-form-defvar-function, byte-compile-lambda):
+       (byte-compile-defvar, byte-compile-file-form-defalias): Warn about too
+       wide docstrings.  (Bug#44858)
+
+       * test/lisp/emacs-lisp/bytecomp-tests.el
+       (bytecomp-warn-wide-docstring/defconst)
+       (bytecomp-warn-wide-docstring/defvar): New tests.
+       (bytecomp--define-warning-file-test): New macro.
+       (bytecomp/warn-wide-docstring-autoload\.el)
+       (bytecomp/warn-wide-docstring-custom-declare-variable\.el)
+       (bytecomp/warn-wide-docstring-defalias\.el)
+       (bytecomp/warn-wide-docstring-defconst\.el)
+       (bytecomp/warn-wide-docstring-define-abbrev-table\.el)
+       (bytecomp/warn-wide-docstring-define-obsolete-function-alias\.el)
+       (bytecomp/warn-wide-docstring-define-obsolete-variable-alias\.el)
+       (bytecomp/warn-wide-docstring-defun\.el)
+       (bytecomp/warn-wide-docstring-defvar\.el)
+       (bytecomp/warn-wide-docstring-defvaralias\.el)
+       (bytecomp/warn-wide-docstring-ignore-fill-column\.el)
+       (bytecomp/warn-wide-docstring-ignore-override\.el)
+       (bytecomp/warn-wide-docstring-ignore\.el)
+       (bytecomp/warn-wide-docstring-multiline-first\.el)
+       (bytecomp/warn-wide-docstring-multiline\.el): New tests.
+       * 
test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-autoload.el:
+       * 
test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-custom-declare-variable.el:
+       * 
test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defalias.el:
+       * 
test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defconst.el:
+       * 
test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-define-abbrev-table.el:
+       * 
test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-define-obsolete-function-alias.el:
+       * 
test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-define-obsolete-variable-alias.el:
+       * test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defun.el:
+       * test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defvar.el:
+       * 
test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defvaralias.el:
+       * 
test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-ignore-fill-column.el:
+       * 
test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-ignore-override.el:
+       * test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-ignore.el:
+       * 
test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-multiline-first.el:
+       * 
test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-multiline.el:
+       New files.
+
+2020-12-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make octave-send-region be asynchronous
+
+       * lisp/progmodes/octave.el (octave-send-region): Send things
+       asynchronously to the inferior process (bug#24492).
+
+2020-12-28  Yichao Yu  <yyc1992@gmail.com>
+
+       Make XIM to work with non-CJK locales
+
+       * src/xfns.c (best_xim_style): Don't rely on supported_xim_styles
+       (bug#10867).
+
+       * src/xterm.c (x_draw_window_cursor): Adjust to modern input styles.
+       (xim_instantiate_callback): Ditto.
+
+2020-12-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix background mode on Gnome 3.38 terminals
+
+       * lisp/term/xterm.el (xterm--version-handler): Adjust to Gnome
+       3.38 (bug#43891).
+
+2020-12-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix alignment of Java String[] and the like
+
+       * lisp/align.el (align-rules-list): Allow aligning Java String[] etc
+       (bug#19385).
+
+       Test case:
+
+       class X
+       {
+           String      field1;
+           String[] field2;
+           int         field3;
+           int[] field4;
+           X           field5;
+           X[] field6;
+       }
+
+2020-12-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Document the text property limitations in mode lines
+
+       * doc/lispref/modes.texi (Properties in Mode, Mode Line Basics):
+       Mention the special text property limitations.
+
+2020-12-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow remember-notes to use the *scratch* buffer
+
+       * lisp/textmodes/remember.el (remember-notes): Allow the
+       remember-notes buffer to use the *scratch* buffer (as documented)
+       (bug#20740).
+
+2020-12-28  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Rename and document the built-in xref-show-definitions-function's
+
+       * lisp/progmodes/xref.el (xref-show-definitions-buffer): Rename
+       from 'xref--show-defs-buffer'.
+       (xref-show-definitions-buffer-at-bottom): Rename from
+       'xref--show-defs-buffer-at-bottom'.
+
+2020-12-28  Tim Landscheidt  <tim@tim-landscheidt.de>  (tiny change)
+
+       Do not output two spaces for non-autoloaded ieieo constructor functions
+
+       * lisp/emacs-lisp/eieio-opt.el (eieio-help-constructor): Amend
+       format to avoid two spaces for non-autoloaded object constructor
+       functions (bug#45454).
+
+2020-12-27  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/package.el (package-archives): Add NonGNU ELPA
+
+2020-12-27  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/textmodes/rst.el (rst-mode): Don't touch global hook
+
+       (rst-re): η-reduce.
+
+2020-12-27  Andrea Corallo  <akrl@sdf.org>
+
+       Add 1+ 1- integer range propagation support
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr-one): New special var.
+       * lisp/emacs-lisp/comp.el (comp-fwprop-call): Propagate integer
+       ranges on +1 -1.
+       * test/src/comp-tests.el (comp-tests-type-spec-tests): Add two tests.
+
+2020-12-27  Andrea Corallo  <akrl@sdf.org>
+
+       Add sum/subtraction integer range propagation support
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-range-+, comp-range--): New
+       functions.
+       (comp-cstr-set-range-for-arithm): New macro.
+       (comp-cstr-add-2, comp-cstr-sub-2, comp-cstr-add, comp-cstr-sub):
+       New function.
+       * lisp/emacs-lisp/comp.el (comp-fwprop-call): Wire-up + - integer
+       range propagation.
+
+2020-12-27  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr-set-cmp-range): Improve.
+
+2020-12-27  Andrea Corallo  <akrl@sdf.org>
+
+       Add comp-cstr-greatest-in-range comp-cstr-smallest-in-range
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr-smallest-in-range)
+       (comp-cstr-greatest-in-range): New function.
+       (comp-cstr->, comp-cstr->=, comp-cstr-<, comp-cstr-<=): Make use of.
+
+2020-12-27  Andrea Corallo  <akrl@sdf.org>
+
+       Don't require trailing backslashes in `comp-eln-load-path' (bug#45462)
+
+       * src/comp.c (Fcomp_el_to_eln_filename): Don't require
+       trailing backslashes in comp-eln-load-path.
+
+2020-12-27  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-12-27  Alan Third  <alan@idiocy.org>
+
+       Remove NS menu synthesized events (bug#44333)
+
+       Remove the frame tracking stuff as it's not used for anything, and
+       move the update tracking into the EmacsMenu class.
+
+       * src/nsmenu.m (ns_update_menubar): Copy the parsing code from xmenu.c
+       and rework the NS specific code around to update the existing menus
+       instead of rebuilding them completely.
+       (ns_activate_menubar):
+       ([EmacsMenu trackingNotification:]):
+       ([EmacsMenu menuWillOpen:]):
+       ([EmacsMenu menuDidClose:]): Remove unused functions.
+       ([EmacsMenu menuNeedsUpdate:]): Remove menu tracking code and add code
+       to check whether an update is required.
+       ([EmacsMenu fillWithWidgetValue:]):
+       ([EmacsMenu addSubmenuWithTitle:]):
+       ([EmacsMenu initWithTitle:]): Remove references to frame.
+       ([EmacsMenu setFrame:]): Remove method.
+       ([EmacsMenu clear]): Rename to removeAllItems.
+       ([EmacsMenu removeAllItems]): Use built-in removeAllItems, if
+       available.
+       (syms_of_nsmenu): Remove tracking code.
+       * src/nsterm.m (ns_check_menu_open):
+       (ns_check_pending_open_menu):
+       (ns_create_terminal): Remove unused functions.
+       (ns_term_init): Get rid of menu tracking.
+       * src/nsterm.h (EmacsMenu): Remove frame, add needsUpdate and update
+       method definitions.
+
+2020-12-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix up length_internal with degenerate length inputs
+
+       * src/fns.c (length_internal): Protect against edge conditions.
+
+2020-12-27  Daniel Martín  <mardani29@yahoo.es>
+
+       Improve "find definition" in *Help* buffers
+
+       * lisp/emacs-lisp/find-func.el (find-function-search-for-symbol): If
+       our regexp algorithm could not find a location for the symbol
+       definition, resort to find-function--search-by-expanding-macros.
+       * test/lisp/emacs-lisp/find-func-tests.el: Add a automatic test for a
+       function and variable generated by a macro.
+       * etc/NEWS: Advertise the improved functionality (bug#45443).
+
+2020-12-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add new predicates for sequence lengths
+
+       * doc/lispref/sequences.texi (Sequence Functions): Document them.
+       * lisp/emacs-lisp/byte-opt.el (side-effect-free-fns): Mark them as
+       side-effect-free.
+
+       * lisp/emacs-lisp/shortdoc.el (list): Mention them.
+
+       * src/fns.c (Flength): Mention them in the doc string.
+       (length_internal): New function.
+       (Flength_less, Flength_greater, Flength_equal): New defuns.
+       (syms_of_fns): Sym them.
+
+2020-12-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve the edebug-form-data doc string
+
+       * lisp/emacs-lisp/edebug.el (edebug-form-data): Doc string
+       clarification (bug#42776).
+
+2020-12-26  Andrea Corallo  <akrl@sdf.org>
+
+       Fix `byte-compile-file' for native compilation (bug#45442)
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-file): Fix logic for
+       native compilation.
+
+2020-12-26  Andrea Corallo  <akrl@sdf.org>
+
+       Fix missing float handling into `comp-cstr-set-cmp-range'
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr-set-cmp-range): Add
+       float handling.
+       * test/src/comp-tests.el (comp-tests-type-spec-tests): Update results.
+
+2020-12-26  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/forms.el (forms--run-functions): New function
+
+       (forms--intuit-from-file, forms-save-buffer): Use it.
+       (forms-mode): Use it to fix regression.
+       Remove always-true test.  Fix incorrect uses of `fboundp`.
+       (forms--iif-hook): Use `add-hook`.
+       (forms--iif-post-command-hook): Use `remove-hook` and fix typo.
+       (forms--debug): Use `mapconcat`.
+
+2020-12-26  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix test/src/process-tests on MS-Windows
+
+       * src/process.c (network_lookup_address_info_1) [WINDOWSNT]:
+       Initialize winsock.
+
+2020-12-26  Michael Albinus  <michael.albinus@gmx.de>
+
+       Rename Tramp method "media" to "mtp" (Bug#45402)
+
+       * doc/misc/tramp.texi (Quick Start Guide, GVFS-based methods):
+       Rename "media" to "mtp".  (Bug#45402)
+
+       * etc/NEWS: Rename Tramp method "media" to "mtp".  Fix typos.
+
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-methods, tramp-media-methods)
+       (tramp-gvfs-activation-uri)
+       (tramp-gvfs-handler-volumeadded-volumeremoved)
+       (tramp-get-media-devices, top): Rename "media" to "mtp".  (Bug#45402)
+
+2020-12-26  Andrea Corallo  <akrl@sdf.org>
+
+       * test/src/comp-tests.el (comp-tests-type-spec-tests): Add two more 
test.
+
+2020-12-26  Andrea Corallo  <akrl@sdf.org>
+
+       Remove unnecessary lhs rename in `comp-ssa-rename-insn'
+
+       * lisp/emacs-lisp/comp.el (comp-ssa-rename-insn): No point to
+       rename lhs as it's being replaced.
+
+2020-12-26  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (comp-known-type-specifiers): Add two 
functions.
+
+2020-12-26  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix Rmail summary display when From: header is malformed
+
+       * lisp/mail/rmailsum.el (rmail-header-summary): Remove newlines
+       from the "From:" value, to avoid producing corrupted summary
+       display.
+
+2020-12-26  Andrea Corallo  <akrl@sdf.org>
+
+       Enable integer range narrowing under compare and branch
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr-set-cmp-range)
+       (comp-cstr->, comp-cstr->=, comp-cstr-<, comp-cstr-<=): New
+       functions.
+       * lisp/emacs-lisp/comp.el (comp-equality-fun-p)
+       (comp-range-cmp-fun-p): New functions.
+       (comp-collect-rhs): Use `comp-assign-op-p' in place of
+       `comp-set-op-p'.
+       (comp-negate-range-cmp-fun, comp-reverse-cmp-fun): New functions.
+       (comp-emit-assume): Rework to be able to emit also comparison
+       assumption.
+       (comp-add-cond-cstrs-simple): Update for new `comp-emit-assume'.
+       (comp-add-cond-cstrs-simple): Update to emit range assumption.
+       (comp-fwprop-insn): Execute range assumptions.
+       * test/src/comp-tests.el (comp-tests-type-spec-tests): Add tests.
+
+2020-12-26  emacs-f  <emacs-f@media.mit.edu>  (tiny change)
+
+       Avoid missing email messages due to rmail-spam-filter
+
+       * lisp/mail/rmail-spam-filter.el (rsf--rmail-last-seen-message):
+       New function.
+       (rmail-spam-filter, rmail-get-new-mail-filter-spam): Call
+       'rsf--rmail-last-seen-message' instead of
+       'rmail-first-unseen-message'.  (Bug#45128)
+
+2020-12-26  Zajcev Evgeny  <zevlg@yandex.ru>
+
+       Improvements for `:base-uri' svg image property
+
+       * src/image.c (svg_load): Use ENCODE_FILE for `:base-uri'
+
+       * doc/lispref/display.texi (SVG Images): Add more documentation for
+         `:base-uri'
+
+2020-12-26  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix messages with plural forms in todo-mode.el
+
+       * lisp/calendar/todo-mode.el (todo-move-item, todo-item-undone)
+       (todo-category-completions): Use 'ngettext' instead of hard-coding
+       plural forms by hand.
+
+2020-12-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix issues with lib/malloc out-of-dir builds
+
+       Problem reported by Mattias Engdegård in:
+       https://lists.gnu.org/r/emacs-devel/2020-12/msg01626.html
+       * configure.ac: If the scratch_buffer module is enabled, create
+       lib/malloc and (if doing dependencies) lib/deps/malloc.
+       * lib/Makefile.in (DEPFLAGS) [AUTO_DEPEND]: No longer any need to
+       squash lib dependencies into a single directory.
+       (clean): Also remove */*.o and $(DEPDIR)/*/*.d, to clean out
+       malloc/*.o and deps/malloc/*.d.  Just remove *.d files in
+       dependencies so that rm does not complain about not being able to
+       remove deps/malloc.
+       (extraclean): Also remove malloc, if it is empty.
+
+2020-12-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Kill the scdaemon after doing the mml-sec tests
+
+       * test/lisp/gnus/mml-sec-tests.el (mml-sec-test--kill-gpg-agent):
+       Kill the scdaemon, too (bug#43358).
+
+2020-12-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix infloop in memory-report
+
+       * lisp/emacs-lisp/memory-report.el (memory-report--object-size-1):
+       Fix infloop on circular lists.
+
+2020-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix package reloading problems on systems with symlinks
+
+       * lisp/emacs-lisp/package.el (package--files-load-history): We're
+       comparing the truenames, so ensure that we've using that
+       everywhere.  This fixes problems when there's symlinks in the paths.
+
+2020-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Refactor package--list-loaded-files for easier debuggability
+
+       * lisp/emacs-lisp/package.el (package--files-load-history)
+       (package--list-of-conflicts): Factor out from...
+       (package--list-loaded-files): ... this function for easier
+       debuggability.
+
+2020-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Disable some semantic tests on systems without g++
+
+       * test/lisp/cedet/semantic-utest-ia.el: Disable g++ tests on
+       systems without g++.
+
+2020-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Skip some mml tests that rely on CMS if that's not installed
+
+2020-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix gpg-agent killing in mml-sec-tests
+
+       * test/lisp/gnus/mml-sec-tests.el (mml-sec-test--kill-gpg-agent):
+       Identify the gpg-agent more successfully after the resource dir
+       makeover.
+
+2020-12-25  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       b242bbb073 (origin/emacs-27) ; lisp/org/org.el: Fix Version header.
+       e0fc939c5f Add more details to the "word processor" section
+       fda9b3e83a * src/Makefile.in (DO_CODESIGN): Fix expected architecture...
+
+2020-12-25  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       5d46593568 Support build of Emacs on ARM Macos machines
+       7f8793e5f1 Update to Org 9.4.4
+       7b3367a0b5 * lisp/so-long.el: Decrease use of passive voice.
+       a90836c638 * doc/misc/efaq.texi (New in Emacs 27): Add section.
+       711fe70dd8 * doc/misc/efaq.texi (Latest version of Emacs): Bump version.
+       52b30834fb * lisp/face-remap.el (face-remap-set-base): Doc fix.  (Bug...
+       b3fe0ac62e Correct argument order in comment
+
+2020-12-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       Tag another Tramp test :unstable on emba
+
+       * test/lisp/net/tramp-tests.el (tramp-test31-interrupt-process)
+       (tramp-test43-asynchronous-requests): Tag them :unstable on emba.
+
+2020-12-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       Tag Tramp test :unstable
+
+       * test/lisp/net/tramp-tests.el (tramp-test31-interrupt-process):
+       Tag it :unstable on emba.
+
+2020-12-25  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix last change
+
+       * lisp/international/mule-conf.el (ebcdic-int1, cp256, cp273)
+       (ebcdic-be, cp274, ebcdic-br, cp275, ebcdic-cp-dk, ebcdic-cp-no)
+       (cp277, ebcdic-cp-fi, ebcdic-cp-se, cp278, ebcdic-cp-it, cp280)
+       (ebcdic-jp-e, cp281, ebcdic-cp-es, cp284, ebcdic-cp-gb, cp285)
+       (ebcdic-jp-kana, cp290, ebcdic-cp-fr, cp297): Remove charset
+       aliases, they are not really needed.
+
+       * lisp/language/english.el (ibm275): Move from here...
+       * lisp/language/european.el (ibm275): ...to here.
+
+2020-12-25  Timo Myyrä  <timo.myyra@bittivirhe.fi>
+
+       Add support for more EBCDIC code pages IBM2XX
+
+       There was already charset file present in etc/charsets for IBM2XX
+       character sets but there wasn't definitions for them in Emacs.
+       Add character set and coding system definitions for them.
+       * lisp/language/japanese.el (ibm281, ibm290):
+       * lisp/language/european.el (ibm256, ibm273, ibm274, ibm277)
+       (ibm278, ibm280, ibm284, ibm285, ibm297):
+       * lisp/language/english.el (ibm275): New coding systems.
+       * lisp/international/mule-conf.el (ibm256, ibm273, ibm274)
+       (ibm275, ibm277, ibm278, ibm280, ibm281, ibm284, ibm285, ibm290)
+       (ibm297): New charsets.
+
+2020-12-25  Eli Zaretskii  <eliz@gnu.org>
+
+       Don't compile Gnulib's 'free' on MinGW
+
+       * nt/mingw-cfg.site (gl_cv_func_free_preserves_errno): Set to
+       "yes" to avoid compiling Gnulib's free.c in the MinGW build.
+
+2020-12-25  Eli Zaretskii  <eliz@gnu.org>
+
+       Revert "Import posix_spawn from Gnulib."
+
+       This reverts commit 3ba34141da77a24c251ee6530f3f72a366fe556e.
+       It breaks the MinGW build and should be first tested on a
+       branch.
+
+2020-12-25  Eli Zaretskii  <eliz@gnu.org>
+
+       Revert "Use posix_spawn if possible."
+
+       This reverts commit 2c79a8f9210db01c86b0e5f236adeb0509519d30.
+       It breaks the MinGW build in too many ways, and should be
+       first tested on a branch.
+
+2020-12-25  Philipp Stephani  <phst@google.com>
+
+       Use posix_spawn if possible.
+
+       posix_spawn is less error-prone than vfork + execve, and can make
+       better use of system-specific enhancements like 'clone' on Linux.  Use
+       it if we don't need to configure a pseudoterminal.
+
+       * src/Makefile.in (LIB_POSIX_SPAWN): New variable.
+       (LIBES): Use it.
+
+       * src/callproc.c (emacs_spawn): Use posix_spawn on Unix-like system if
+       we don't need to set up a pseudoterminal.
+
+2020-12-25  Philipp Stephani  <phst@google.com>
+
+       Import posix_spawn from Gnulib.
+
+       posix_spawn is less error-prone than vfork + exec, and can make use of
+       system-specific optimizations like `clone' on Linux.  Import Gnulib
+       replacement so that we can use recent additions like
+       `posix_spawn_file_actions_addchdir'.
+
+       The only manual change are to admin/merge-gnulib and .gitignore.  All
+       other changes are due to rerunning merge-gnulib.
+
+       * admin/merge-gnulib (GNULIB_MODULES): Add posix_spawn-related
+       modules.
+       * .gitignore: Add new generated files.
+
+2020-12-25  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update Gnulib.
+
+       All changes in this commit are autogenerated by running
+       admin/merge-gnulib.
+
+2020-12-25  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Adjust test_module to recent Gnulib changes
+
+       * test/Makefile.in ($(test_module)): Also compile lib/free.c
+       if it is needed to define rpl_free.
+
+2020-12-25  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Adjust to recent Gnulib changes
+
+       The latest Gnulib merge brought in free-posix, which causes 'free'
+       to preserve errno.  This lets us simplify some Emacs code that
+       calls 'free'.
+       * admin/merge-gnulib (GNULIB_MODULES): Add free-posix.
+       This module is pulled in by canonicalize-lgpl anyway,
+       so we might as well rely on it.
+       * lib-src/emacsclient.c (get_current_dir_name):
+       Sync better with src/sysdep.c.
+       * lib-src/etags.c (process_file_name, etags_mktmp):
+       * lib-src/update-game-score.c (unlock_file):
+       * src/fileio.c (file_accessible_directory_p):
+       * src/sysdep.c (get_current_dir_name_or_unreachable):
+       Simplify by assuming that 'free' preserves errno.
+       * src/alloc.c (malloc_unblock_input):
+       Preserve errno, so that xfree preserves errno.
+       * src/sysdep.c (get_current_dir_name_or_unreachable):
+       Simplify by using strdup instead of malloc+memcpy.
+       No need for realloc (and the old code leaked memory anyway on
+       failure); just use free+malloc.
+
+2020-12-25  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Pacify gcc 10.2 -Wanalyzer-null-argument in gtkutil.c
+
+       * src/gtkutil.c (xg_item_label_same_p): Simplify.  Without this
+       simplification, GCC (Ubuntu 10.2.0-13ubuntu1)
+       -Wanalyzer-null-argument complains about use of NULL where
+       non-null expected as argument of strcmp.
+
+2020-12-25  Andrea Corallo  <akrl@sdf.org>
+
+       Don't emit byte op-code annotations in LIMPLE to optimize for 
compile-time
+
+       Saves 10~15% in bootstrap time.
+
+       * lisp/emacs-lisp/comp.el (comp-op-case): Don't emit op-code
+       annotaitons.
+       (comp-limplify-lap-inst, comp-add-cond-cstrs-simple)
+       (comp-add-cond-cstrs, comp-tco-func): Update accordingly.
+
+2020-12-25  Eli Zaretskii  <eliz@gnu.org>
+
+       Add more details to the "word processor" section
+
+       * etc/TODO (Emacs as word processor): Add more details based on
+       recent discussions.
+
+2020-12-25  E. Choroba  <choroba@matfyz.cz>  (tiny change)
+
+       cperl-mode: Correctly syntax highlight index/value array slices
+
+       * lisp/progmodes/cperl-mode.el (cperl-init-faces): %array[0, 1]
+       should use the array face, not the hash one (bug#45373).
+
+2020-12-25  Thibault Polge  <thibault@thb.lt>
+
+       Make `remove-hook' interactive
+
+       * lisp/subr.el (remove-hook): Make `remove-hook' interactive
+       (bug#45393).
+
+2020-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow `string-limit' to work on encoded strings
+
+       * doc/lispref/strings.texi (Creating Strings): Document it.
+
+       * lisp/emacs-lisp/subr-x.el (string-limit): Allow limiting on
+       encoded strings.
+
+2020-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove `string-slice' -- it's not very well defined
+
+       * doc/lispref/strings.texi (Creating Strings): Ditto.
+
+       * lisp/emacs-lisp/subr-x.el (string-slice): Remove.
+
+2020-12-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Unbreak the build on *BSD and Macos after previous gnulib merge
+
+       * lib/Makefile.in (DEPFLAGS): Unbreak build on BSD derivatives by
+       writing all deps files into a single directory (instead of
+       deps/malloc/*.c).
+
+2020-12-24  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix the MinGW build broken by Gnulib update
+
+       * nt/mingw-cfg.site (gl_cv_func_readlink_trailing_slash)
+       (gl_cv_func_readlink_truncate): Define to "yes" to avoid compiling
+       readlink.c.
+
+2020-12-24  Eli Zaretskii  <eliz@gnu.org>
+
+       Unbreak the MinGW build broken by recent changes in callproc.c
+
+       * src/w32.h (set_process_dir):
+       * src/w32proc.c (set_process_dir): Change the argument to 'const
+       char *'.
+       * src/lisp.h (make_environment_block):
+       * src/callproc.c (make_environment_block): Now returns 'char **'.
+       (exec_failed) [DOS_NT]: Remove unused function.
+       * src/callproc.c (child_setup): NEW_ARGV and ENV are now 'char **'.
+       Making them 'const' breaks the MinGW build and is not needed for
+       other platforms.
+       * src/callproc.c (emacs_spawn): ARGV and ENVP arguments are now
+       'char *', for the same reason.
+       * src/process.c (create_process): Adapt to above changes.
+
+2020-12-24  Philipp Stephani  <phst@google.com>
+
+       Update Gnulib.
+
+       All changes in this commit are autogenerated by running
+       admin/merge-gnulib.
+
+2020-12-24  Philipp Stephani  <phst@google.com>
+
+       Ensure that Gnulib objects in subdirectories are built correctly.
+
+       * lib/Makefile.in (.c.o): Add missing -o option.
+
+2020-12-24  Andrea Corallo  <akrl@sdf.org>
+
+       Memoize `comp-subtype-p'
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-subtype-p): Memoize.
+       (comp-cstr-ctxt): Add `subtype-p-mem' slot.
+
+2020-12-24  Andrea Corallo  <akrl@sdf.org>
+
+       Constrain only mvars that are actually used
+
+       * lisp/emacs-lisp/comp.el (comp-mvar-used-p, comp-collect-mvars)
+       (comp-collect-rhs): New functions.
+       (comp-add-cond-cstrs-simple, comp-add-cond-cstrs): Update logic.
+       (comp-add-cstrs): Call `comp-collect-rhs' before doing anything
+       else.
+
+2020-12-24  Andrea Corallo  <akrl@sdf.org>
+
+       Use `comp-assign-op-p' into dead code elimination pass
+
+       * lisp/emacs-lisp/comp.el (comp-dead-assignments-func): Use
+       `comp-assign-op-p' in place of `comp-set-op-p'.
+
+2020-12-24  Andrea Corallo  <akrl@sdf.org>
+
+       Fix logic for constraining block with multiple predecessors
+
+       * lisp/emacs-lisp/comp.el (comp-limple-lock-keywords)
+       (comp-add-cond-cstrs-target-block): Logic update.
+
+2020-12-24  Andrea Corallo  <akrl@sdf.org>
+
+       Symplify (not t) => nil and (not nil) => t
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr-negation): Symplify (not
+       t) => nil and (not nil) => t.
+       * test/lisp/emacs-lisp/comp-cstr-tests.el
+       (comp-cstr-typespec-tests-alist): Add two tests.
+
+2020-12-24  Andrea Corallo  <akrl@sdf.org>
+
+       Extend cstrs pass to match `unless' like code
+
+       * lisp/emacs-lisp/comp.el (comp-emit-assume): Add assertion.
+       (comp-add-new-block-between): Fix two typos.
+       (comp-add-cond-cstrs-target-block): Fix typo.
+       (comp-add-cond-cstrs-simple): Logic update.
+       * test/src/comp-tests.el (comp-tests-type-spec-tests): Add a test.
+
+2020-12-24  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (comp-limplify-lap-inst): Opencode byte-not.
+
+2020-12-24  Andrea Corallo  <akrl@sdf.org>
+
+       Extend cstrs pass to match `when' like code
+
+       * lisp/emacs-lisp/comp.el (comp-emit-assume): Better parameter names.
+       (comp-add-cond-cstrs-simple): New function.
+       (comp-add-cond-cstrs): Rename assume-target -> block-target.
+       (comp-add-cstrs): Call `comp-add-cond-cstrs-simple'.
+       * test/src/comp-tests.el (comp-tests-type-spec-tests): Add test.
+
+2020-12-24  Philipp Stephani  <phst@google.com>
+
+       Centralize subprocess creation in a single function.
+
+       Getting the vfork + execve combination right isn't easy, and the code
+       was partially duplicated between callproc.c and process.c.  Centralize
+       the spawn operation in a single function that deals with the nasty
+       details.  Going forward, we should be able to use posix_spawn from
+       either libc or Gnulib (or CreateProcessW on Windows) in the non-pty
+       case.
+
+       * src/callproc.c (emacs_spawn): New function to start an asynchronous
+       subprocess.  Merge code from 'call_process' and 'create_process' into
+       this function.
+       (call_process): Use new 'emacs_spawn' function.
+       (child_setup): Make static, since there are no users outside this
+       compilation unit left.
+       (CHILD_SETUP_TYPE): Move from header file, since there are no users
+       outside this compilation unit left.
+
+       * src/process.c (create_process): Use new 'emacs_spawn' function.
+
+2020-12-24  Andrea Corallo  <akrl@sdf.org>
+
+       Invert basic block argument order in LIMPLE cond-jump
+
+       * lisp/emacs-lisp/comp.el (comp-emit-cond-jump)
+       (comp-emit-switch, comp-emit-narg-prologue, comp-add-cond-cstrs):
+       Invert basic block argument order in LIMPLE cond-jump.
+       * src/comp.c (emit_limple_insn): Likewise.
+
+2020-12-24  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: introduce a new cache for brace structures.  This fixes bug 
#45248
+
+       Also fix three infinite loops.  The new cache accelerates backward 
searches
+       for struct beginnings in c-looking-at-or-maybe-in-bracelist.
+
+       * lisp/progmodes/cc-engine.el (c-beginning-of-statement-1): In the 
final loop
+       over unary operators, add a check (> (point) lim) to avoid certain 
infinite
+       loops.
+       (c-beginning-of-decl-1): In the first loop add a similar check on point 
and
+       lim.
+       (c-laomib-loop): New function extracted from
+       c-looking-at-or-maybe-in-bracelist.
+       (c-laomib-cache): New buffer local variable.
+       (c-laomib-get-cache, c-laomib-put-cache, c-laomib-fix-elt)
+       (c-laomib-invalidate-cache): New functions which implement the cache.
+       (c-looking-at-or-maybe-in-bracelist): Replace two invocations of
+       c-go-up-list-backwards with calls to c-parse-state.  Extract the new 
function
+       c-laomib-loop.  Insert code which calls c-laomib-loop minimally, with 
the help
+       of the new cache.
+
+       * lisp/progmodes/cc-mode.el (c-basic-common-init): Initialise the new 
cach
+       (at mode start).
+       (c-before-change): Invalidate the new cache.
+       (c-fl-decl-start): Add an extra check (> (point) bod-lim) to prevent 
looping.
+       Determine the enclosing brace to pass as arguments to
+       c-looking-at-or-maybe-in-bracelist.
+
+2020-12-24  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/dispnew.c (sit_for): Fix bug#45292
+
+       When reading, prefer staying in the selected-window over preserving
+       the current-buffer.
+
+2020-12-24  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/lisp-mnt.el (lm-section-end): Stop at the right 
heading
+
+       `lisp-outline-level` assumes the match-data is that set by
+       `outline-regexp`.
+
+2020-12-23  TEC  <tec@tecosaur.com>
+
+       authinfo-mode: add option to not hide any elements (and add font-lock)
+
+       * lisp/auth-source.el (authinfo-hide-elements): New user option.
+       (authinfo--keywords): New variable.
+       (authinfo-mode): Use it.
+       (authinfo--hide-passwords): Use doc-face instead of warning for
+       the passwords.
+       (authinfo--toggle-display): Ditto.
+
+2020-12-23  Adam Porter  <adam@alphapapa.net>
+
+       * lisp/tab-line.el: New options, faces, and functions
+
+       * lisp/tab-line.el:
+       (tab-line-tab-face-functions): New option.
+       (tab-line-tab-inactive-alternate): New face.
+       (tab-line-tab-special): New face.
+       (tab-line-tab-face-inactive-alternating): New function.
+       (tab-line-tab-face-special): New function.
+       (tab-line-format-template): Use them.
+
+       * etc/NEWS: Update.
+
+       With thanks to Juri Linkov and Eli Zaretskii for their guidance.
+
+2020-12-23  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-12-23  Philipp Stephani  <phst@google.com>
+
+       * src/Makefile.in (DO_CODESIGN): Fix expected architecture name.
+
+2020-12-23  Philipp Stephani  <phst@google.com>
+
+       Declare argument vector as char *const *.
+
+       This matches the signature of execve.
+
+       * src/callproc.c (child_setup): Declare NEW_ARGV as char *const *.
+
+2020-12-23  Philipp Stephani  <phst@google.com>
+
+       * .clang-format (ColumnLimit): Fix line length.
+
+2020-12-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Support build of Emacs on ARM Macos machines
+
+       * configure.ac: Add support for aarch64-* on Macos (i.e., 64-bit
+       ARM) (bug#43369).
+
+2020-12-23  Philipp Stephani  <phst@google.com>
+
+       Pass C string pointer to current directory to 'child_setup'.
+
+       This avoids the impression that 'child_setup' could do anything
+       Lisp-related.
+
+       * src/callproc.c (child_setup): Pass C pointer to current directory
+       name.
+       (call_process): Adapt callers.
+
+       * src/process.c (create_process): Adapt callers.
+
+2020-12-23  Andrea Corallo  <akrl@sdf.org>
+
+       Negate only values while constraining variables (bug#45376)
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr-value-negation): New
+       function.
+       * lisp/emacs-lisp/comp.el (comp-fwprop-insn): Use
+       `comp-cstr-value-negation'.
+       * test/src/comp-test-funcs.el (comp-test-45376-1-f): Rename.
+       (comp-test-45376-2-f): New function.
+       * test/src/comp-tests.el (bug-45376-1): Rename test.
+       (bug-45376-2): Add test.
+
+2020-12-23  Andrea Corallo  <akrl@sdf.org>
+
+       Fix non range cstr union operation
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr-union-homogeneous): Add
+       range parameter and handle the non range case.
+       (comp-cstr-union-1-no-mem, comp-cstr-intersection-no-mem): Update
+       `comp-cstr-union-homogeneous' call sites.
+
+2020-12-23  Philipp Stephani  <phst@google.com>
+
+       Allocate environment block before forking.
+
+       While 'child_setup' carefully avoids calls to async-signal-unsafe
+       functions like 'malloc', it seems simpler and less brittle to use
+       normal allocation outside the critical section between 'fork' and
+       'exec'.
+
+       * src/callproc.c (make_environment_block): New function to create the
+       environment block for subprocesses.  Code largely extracted from
+       'child_setup' and adapted to use 'xmalloc' instead of 'alloca'.
+       (child_setup): Remove environment block allocation in favor of
+       passing the environment block as command-line argument.
+       (call_process): Adapt to new calling convention.
+
+       * src/process.c (create_process): Adapt to new calling convention.
+
+2020-12-23  Andrea Corallo  <akrl@sdf.org>
+
+       Follow cstr basic blocks to perform latch recognition
+
+       * lisp/emacs-lisp/comp.el (comp-fwprop-insn): Fix latch
+       recognition.
+
+2020-12-23  Philipp Stephani  <phst@google.com>
+
+       Reject filenames containing NUL bytes.
+
+       Such filenames are dangerous, as Emacs would silently only use the
+       part up to the first NUL byte.  Reject them explicitly instead.
+
+       * src/coding.c (encode_file_name_1): New helper function.
+       (encode_file_name): Check that encoded filename doesn't contain a
+       NUL byte.
+       (syms_of_coding): Define 'filenamep' symbol.
+
+       * test/src/fileio-tests.el (fileio-tests/null-character): New unit
+       test.
+
+       * etc/NEWS: Document change.
+
+2020-12-23  Philipp Stephani  <phst@google.com>
+
+       Remove an unused parameter from 'child_setup' function.
+
+       * src/callproc.c (child_setup): Remove unused SET_PGRP parameter.
+
+       * src/callproc.c (call_process):
+       * src/process.c (create_process): Fix all callers.
+
+2020-12-23  Andrea Corallo  <akrl@sdf.org>
+
+       Make input constraints into memoization hash immutable (bug#45376)
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr-union-1)
+       (comp-cstr-intersection): Copy input before soting it into the
+       memoization hash table.
+
+2020-12-23  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr-copy): Tweak for perf.
+
+2020-12-23  Juri Linkov  <juri@linkov.net>
+
+       Show image as text when trying to search/replace in image buffer 
(bug#25905)
+
+       * lisp/image-mode.el (image-mode-isearch-filter): New function.
+       (image-mode--setup-mode): Use it to add it as :before-while to
+       isearch-filter-predicate.
+
+2020-12-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve the string-limit doc string
+
+       * lisp/emacs-lisp/subr-x.el (string-limit): Mention
+       truncate-string-to-width in the doc string.
+
+2020-12-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow string-slice to take zero-length matches
+
+       * lisp/emacs-lisp/subr-x.el (string-slice): Allow zero-length
+       matches.  Code adapted from s.el by Magnar Sveen.
+
+2020-12-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert recent server.el frame-focus changes
+
+       * lisp/server.el (server-switch-buffer, server-execute): Revert
+       9cef8fc8cdb5e6e18c9cf617eed3808d67ca340e and
+       c5f2eb56c0164e87abc881955552e0b718921186.  This change led to
+       regressions in non-new-frame circumstances.
+
+2020-12-23  Łukasz Stelmach  <stlman@poczta.fm>
+
+       Handle gracefully href="" in base tags in shr
+
+       * net/shr.el (shr-tag-base): shr-parse-base can't handle empty
+       strings gracefully.  Don't call it unless href is a non-empty
+       string (bug#45355).
+
+2020-12-23  Stefan Kangas  <stefan@marxist.se>
+
+       Fix use of obsolete 'emergency' warning level
+
+       * src/alloc.c (display_malloc_warning): Use new style ':emergency'
+       warning level instead of obsolete 'emergency'.
+
+2020-12-23  Zajcev Evgeny  <zevlg@yandex.ru>
+
+       Fix use of obsolete 'error' warning level
+
+       * src/fileio.c (auto_save_error): Use new style ':error' warning level
+       instead of obsolete 'error'.
+
+2020-12-23  Alan Third  <alan@idiocy.org>
+
+       Use new NSString lisp methods
+
+       * src/nsfont.m (ns_otf_to_script):
+       (ns_registry_to_script):
+       (ns_get_req_script): Use NSString conversion methods.
+       * src/nsimage.m ([EmacsImage allocInitFromFile:]): Use NSString
+       conversion methods.
+       * src/nsmenu.m (ns_menu_show): Use NSString conversion methods.
+       * src/nsselect.m (symbol_to_nsstring):
+       (ns_string_to_pasteboard_internal): Use NSString conversion methods.
+       * src/nsterm.m (ns_term_init):
+       ([EmacsView initFrameFromEmacs:]): Use NSString conversion methods.
+       * src/nsxwidget.m (nsxwidget_webkit_uri):
+       (nsxwidget_webkit_title):
+       (js_to_lisp): Use NSString conversion methods.
+       (build_string_with_nsstr): Functionality replaced by NSString
+       extensions.
+
+2020-12-22  Liāu, Kiong-Gē 廖宮毅  <gongyi.liao@gmail.com>  (tiny change)
+
+       Fix --with-nativecomp Windows build (bug#45303)
+
+       Liāu, Kiong-Gē 廖宮毅 <gongyi.liao@gmail.com>
+
+       * src/comp.c (eln_load_path_final_clean_up): Fix argument order.
+       * nt/mingw-cfg.site (ac_cv_func_strsignal): Force
+       `ac_cv_func_strsignal' to no.
+
+2020-12-22  Alan Mackenzie  <acm@muc.de>
+
+       Align the word "Function" in profiler's headers over the actual 
functions
+
+       * lisp/profiler.el (profiler-report-render-calltree-1): Replace two
+       occurrences of "Function" with "  Function".
+
+2020-12-22  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Ensure that Gnus servers are open(able) before searching them
+
+       * lisp/gnus/gnus-search.el (gnus-search-run-search): Imap servers need
+       to be opened (made into the "current server") before we manipulate the
+       nnimap-buffer.
+       (gnus-search-run-search): Sneakily fix regexp.
+       (gnus-search-indexed-parse-output): We need to pass the server name in
+       here, otherwise nnmaildir won't know how to make this the "current
+       server".
+
+2020-12-22  Alan Mackenzie  <acm@muc.de>
+
+       Align profiler's header-line-format to column 0, to work correctly on 
tty's
+
+       * lisp/profiler.el (profiler-report-header-line-format): Propertize the 
first
+       space with 'display '(space :align-to 0).
+
+2020-12-22  Alan Mackenzie  <acm@muc.de>
+
+       Re-order the items in `profiler-report' output.
+
+       Putting the usage figures first on the line will eliminate the 
truncation of
+       function names.
+
+       lisp/profiler.el (profiler-version): Change to "28.1".
+       (profiler-format): Enhance, so that a width of zero means print the 
string
+       without padding or truncation.
+       (profiler-report-cpu-line-format, profiler-report-memory-line-format): 
Amend
+       for the new layout.  The number of places for the cpu samples has been 
reduced
+       from 19 to 12 (enough for ~30 years at 1,000 samples per second).
+       (profiler-report-line-format, profiler-report-describe-entry): Amend 
for the
+       new order of arguments to profiler-format.
+
+       etc/NEWS (Specialized Modes): Add an entry documenting this change.
+
+       doc/lispref/debugging.texi (Profiling): Describe the new ordering of 
the items
+       in place of the old ordering.
+
+2020-12-22  Michael Albinus  <michael.albinus@gmx.de>
+
+       Reorganize Tramp header lines
+
+       * lisp/net/tramp.el: Move header lines Version, Package-Requires,
+       Package-Type and URL ...
+       * lisp/net/trampver.el: ... here.
+
+2020-12-22  Bastien Guerry  <bzg@gnu.org>
+
+       Update to Org 9.4.4
+
+2020-12-22  Daniel Martín  <mardani29@yahoo.es>
+
+       Fix wdired-get-filename when ls -F marks symlinks
+
+       * lisp/wdired.el (wdired-get-filename): In some systems like BSD or
+       macOS, "ls -F" marks symlinks with a trailing "@".  Add logic
+       accounting for this so that wdired-get-filename returns the correct
+       filename.  This change also fixes test "wdired-test-bug34915" on macOS
+       and BSD systems (bug#34915).
+
+2020-12-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make string-pad take an optional START parameter
+
+       * lisp/emacs-lisp/subr-x.el (string-pad): Alter the calling
+       convention.
+
+2020-12-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Change the string-limit parameter semantics
+
+       * lisp/emacs-lisp/subr-x.el (string-limit): Alter the calling
+       convention.
+
+2020-12-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Further string-clean-whitespace tweaks
+
+       * lisp/emacs-lisp/subr-x.el (string-clean-whitespace): Put \r
+       back, which was mistakenly removed.
+
+2020-12-22  Dmitry Gutov  <dgutov@yandex.ru>
+
+       (ruby-mode-set-encoding): Use 'save-restriction'
+
+       * lisp/progmodes/ruby-mode.el (ruby-mode-set-encoding):
+       Use 'save-restriction' (bug#45349).
+
+2020-12-21  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Tiny string-clean-whitespace simplification
+
+       * lisp/emacs-lisp/subr-x.el (string-clean-whitespace): Streamline by
+       treating replacement string as being literal and having fixed case.
+
+2020-12-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make string-chop-newline more efficient
+
+       * lisp/emacs-lisp/subr-x.el (string-chop-newline): Make more
+       efficient.
+
+2020-12-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make string-clean-whitespace work on non-ASCII whitespace, too
+
+       * lisp/emacs-lisp/subr-x.el (string-clean-whitespace): Also clean
+       up non-ASCII whitespace.
+
+2020-12-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add try-completion to the string shortdoc
+
+       * lisp/emacs-lisp/shortdoc.el (string): Mention try-completion here.
+
+2020-12-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add string-chop-newline
+
+       * doc/lispref/strings.texi (Creating Strings): Document it.
+       * lisp/emacs-lisp/subr-x.el (string-chop-newline): Add new function.
+
+2020-12-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix shorter-than-length case for string-limit
+
+       * lisp/emacs-lisp/subr-x.el (string-limit): Fix
+       shorter-than-length case.
+
+2020-12-21  Andrea Corallo  <akrl@sdf.org>
+
+       Fix a test in auth-source-tests.el
+
+       * test/lisp/auth-source-tests.el
+       (auth-source-test-secrets-create-secret): Redefine `read-string'
+       respecting the original number of arguments.
+
+2020-12-21  Andrea Corallo  <akrl@sdf.org>
+
+       Fix a bunch of known type specifiers
+
+       * lisp/emacs-lisp/comp.el (comp-known-type-specifiers): Fixes for:
+       =, string-search, substring.
+
+2020-12-21  Andrea Corallo  <akrl@sdf.org>
+
+       Fix `comp-add-call-cstr' and add a test
+
+       * lisp/emacs-lisp/comp.el (comp-add-call-cstr): Fix it.
+       * test/src/comp-tests.el (assume-in-loop-1): New test.
+       * test/src/comp-test-funcs.el (comp-test-assume-in-loop-1-f): New
+       function.
+
+2020-12-21  Andrea Corallo  <akrl@sdf.org>
+
+       Fix value type inference for doubly negate constraints
+
+       * lisp/emacs-lisp/comp.el (comp-fwprop-insn): Do not propagate in
+       case of double negation.
+       * test/src/comp-test-funcs.el (comp-test-assume-double-neg-f):
+       New function.
+       * test/src/comp-tests.el (assume-double-neg): New test.
+
+2020-12-21  Andrea Corallo  <akrl@sdf.org>
+
+       Fix native compiler tests when they are bytecompiled
+
+       * test/lisp/emacs-lisp/comp-cstr-tests.el (comp-cstr-test-ts)
+       (comp-cstr-typespec-test, comp-cstr-typespec-tests-alist): Eval
+       also at compile time.
+       * test/src/comp-tests.el (comp-tests-type-spec-tests)
+       (comp-tests-define-type-spec-test): Likewise.
+
+2020-12-21  Andrea Corallo  <akrl@sdf.org>
+
+       Simplify correctly (or (integer 1 1) (not (integer 1 1))) as t
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr-union-1-no-mem): Logic
+       update.
+       * test/lisp/emacs-lisp/comp-cstr-tests.el
+       (comp-cstr-typespec-tests-alist): Add a test.
+
+2020-12-21  Andrea Corallo  <akrl@sdf.org>
+
+       Guarantee fwprop convergence and termination
+
+       * lisp/emacs-lisp/comp.el (comp-emit-call-cstr): Have new-mvar as
+       LHS *and* RHS when constraining in and to ensure monotonicity and
+       fwprop convergence.
+       (comp-fwprop): Raise a warning for debug reasons in case fwprop
+       does not converge within 100 iterations.
+
+2020-12-21  Andrea Corallo  <akrl@sdf.org>
+
+       Allow for overlapping src and dst in cstr set operations
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr-union-1-no-mem)
+       (comp-cstr-union-1, comp-cstr-intersection-no-mem)
+       (comp-cstr-intersection): Logic update.
+
+2020-12-21  Andrea Corallo  <akrl@sdf.org>
+
+       Symplify type specifier (not t) as nil
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr-intersection-no-mem):
+       Add logic.
+       * test/lisp/emacs-lisp/comp-cstr-tests.el
+       (comp-cstr-typespec-tests-alist): Add two tests.
+
+2020-12-21  Andrea Corallo  <akrl@sdf.org>
+
+       Enhance type inference constraining function arguments
+
+       * lisp/emacs-lisp/comp.el: Add some commentary.
+       (comp-cond-cstrs-target-mvar): Rename and update docstring.
+       (comp-add-cond-cstrs): Update to use
+       `comp-cond-cstrs-target-mvar'.
+       (comp-emit-call-cstr, comp-lambda-list-gen, comp-add-call-cstr):
+       New functions.
+       (comp-add-cstrs): Call `comp-add-call-cstr'.
+       * test/src/comp-tests.el (comp-tests-type-spec-tests): Update two
+       type specifier tests.
+
+2020-12-21  Andrea Corallo  <akrl@sdf.org>
+
+       Allow for modifying insn-cell inside `comp-loop-insn-in-block'
+
+       * lisp/emacs-lisp/comp.el (comp-loop-insn-in-block): Update.
+
+2020-12-21  Andrea Corallo  <akrl@sdf.org>
+
+       Rename comp-cond-cstr into comp-add-cstrs
+
+       * lisp/emacs-lisp/comp.el (comp-add-cond-cstrs-target-mvar)
+       (comp-add-cond-cstrs, comp-add-cstrs): Rename comp-cond-cstr
+       -> comp-add-cstrs.
+
+2020-12-21  Andrea Corallo  <akrl@sdf.org>
+
+       Two minors in comp.el
+
+       * lisp/emacs-lisp/comp.el (comp-known-func-cstr-h)
+       (comp-ret-type-spec): Style.
+
+2020-12-21  Andrea Corallo  <akrl@sdf.org>
+
+       Add a type specifier test to comp-cstr-tests.el
+
+       * test/lisp/emacs-lisp/comp-cstr-tests.el
+       (comp-cstr-typespec-tests-alist): Add a test.
+
+2020-12-21  Andrea Corallo  <akrl@sdf.org>
+
+       Enumerate and split type specifier tests in comp-tests.el to ease debug
+
+       * test/src/comp-tests.el (comp-tests-type-spec-tests): Enumerate.
+       (comp-tests-define-type-spec-test): New function.
+       (comp-tests-define-type-spec-tests): New macro to expand tests.
+
+2020-12-21  Andrea Corallo  <akrl@sdf.org>
+
+       Improve constraint simplification logic in comp-cstr.el
+
+       * lisp/emacs-lisp/comp-cstr.el (with-comp-cstr-accessors):
+       Simplify.
+       (comp-cstr-empty-p): New Funchion.
+       (comp-split-pos-neg): Minor.
+       (comp-normalize-typeset): Logic update.
+       (comp-union-typesets): Minor.
+       (comp-intersect-two-typesets): New functio.
+       (comp-intersect-typesets): Logic update.
+       (comp-range-union, comp-range-intersection): Minor.
+       (comp-cstr-union-homogeneous, comp-cstr-union-1-no-mem)
+       (comp-cstr-intersection-homogeneous)
+       (comp-cstr-intersection-no-mem, comp-cstr-negation)
+       (comp-type-spec-to-cstr, comp-cstr-to-type-spec): Logic update.
+
+       * lisp/emacs-lisp/comp-cstr.el (with-comp-cstr-accessors): Simplify.
+
+2020-12-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Rename slice-string to string-slice
+
+       * lisp/emacs-lisp/subr-x.el (string-slice): Rename from slice-string.
+       * doc/lispref/strings.texi (Creating Strings): Ditto.
+
+2020-12-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add `string-pad'
+
+       * doc/lispref/strings.texi (Creating Strings): Document it.
+       * lisp/emacs-lisp/shortdoc.el (string): Add example.
+
+       * lisp/emacs-lisp/subr-x.el (string-pad): New function.
+
+2020-12-21  Andrea Corallo  <akrl@sdf.org>
+
+       Fix a number of type specifier simplification tests
+
+       * test/lisp/emacs-lisp/comp-cstr-tests.el
+       (comp-cstr-typespec-tests-alist): Fix a number of tests.
+
+2020-12-21  Andrea Corallo  <akrl@sdf.org>
+
+       Improve comp-fwprop pass
+
+       Wire-up comp-cstr.el routines in fwprop and constraint mvars also on
+       the else side of branches.
+
+       * lisp/emacs-lisp/comp.el (comp-emit-assume)
+       (comp-cond-cstr-target-mvar, comp-cond-cstr-func)
+       (comp-fwprop-insn): Logic update.
+       (comp-mvar-value-vld-p, comp-mvar-propagate, comp-fwprop-call):
+       Handle neg slot.
+
+2020-12-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Beef up the Emacs string utility set a bit
+
+       * doc/lispref/strings.texi (Modifying Strings): Document them.
+       * lisp/emacs-lisp/shortdoc.el (string): Add examples.
+
+       * lisp/emacs-lisp/subr-x.el (string-clean-whitespace)
+       (string-fill, string-limit, string-lines, slice-string): New
+       functions.
+
+2020-12-21  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/so-long.el: Decrease use of passive voice.
+
+       Suggested by Richard Stallman <rms@gnu.org>.
+
+2020-12-21  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix frame creation on X when tool bar is disabled
+
+       * src/xterm.c (handle_one_xevent): Restrict the fix for bug#44002
+       to situations when we are asked by the WM to create a window with
+       bogus 1x1 dimensions.  (Bug#44794)
+
+2020-12-21  Andrea Corallo  <akrl@sdf.org>
+
+       Add mvar pretty print support when dumping LIMPLE
+
+       * lisp/emacs-lisp/comp.el (comp-prettyformat-mvar)
+       (comp-prettyformat-insn): New function.
+       (comp-log-func): Update to use `comp-prettyformat-insn'.
+       (comp-finalize-phis): Change LIMPLE phi format to ease
+       `comp-prettyformat-insn' destructuring.
+
+2020-12-21  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix permission problem in Tramp's copy-file
+
+       * lisp/net/tramp-sh.el (tramp-do-copy-or-rename-file-directly):
+       Take care of PRESERVE-UID-GID.
+
+2020-12-21  Stefan Kangas  <stefan@marxist.se>
+
+       * doc/misc/efaq.texi (New in Emacs 27): Add section.
+
+2020-12-21  Stefan Kangas  <stefan@marxist.se>
+
+       Drop XEmacs support for EDE ELisp projects
+
+       * lisp/cedet/ede/proj-elisp.el (ede-proj-target-elisp): Remove
+       XEmacs support.
+       (ede-xemacs-compiler): Make obsolete.
+
+2020-12-21  Stefan Kangas  <stefan@marxist.se>
+
+       * doc/misc/efaq.texi (Latest version of Emacs): Bump version.
+
+2020-12-21  Andrea Corallo  <akrl@sdf.org>
+
+       Fix Windows build link-time zlib error (bug#45303)
+
+       * src/lisp.h (md5_gz_stream): Declare.
+       * src/comp.c (accumulate_and_process_md5)
+       (final_process_md5, md5_gz_stream): Remove.
+       * src/decompress.c (accumulate_and_process_md5)
+       (final_process_md5, md5_gz_stream): Move from comp.c.
+
+2020-12-21  Andrea Corallo  <akrl@sdf.org>
+
+       * src/comp.c (eln_load_path_final_clean_up): Fix call arg order 
(bug#45303).
+
+       * src/comp.c (Fcomp__compile_ctxt_to_file): Fix sigmask store/restore.
+
+2020-12-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix problem with entering Gnus groups when Gnus isn't running
+
+       * lisp/gnus/gnus-sum.el (gnus-update-summary-mark-positions):
+       Don't bug out when Gnus isn't running (bug#45330).
+
+2020-12-21  Dario Gjorgjevski  <dario.gjorgjevski@gmail.com>
+
+       Make python-mode fontify more assignment statements
+
+       * lisp/progmodes/python.el (python-font-lock-assignment-matcher): New
+       function to match assignment statements.
+       (python-rx): Add `assignment-target' and `grouped-assignment-target'.
+       (python-font-lock-keywords-maximum-decoration): Add new matchers
+       (bug#45341).
+
+2020-12-21  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Generic-ify xref-location-column
+
+       * lisp/progmodes/xref.el (xref-location-column):
+       Create a generic from xref-file-location-column, to use in the
+       common rendering code (bug#36967).
+       (xref--insert-xrefs): Update accordingly.
+
+       * test/lisp/progmodes/xref-tests.el
+       (xref-matches-in-directory-finds-two-matches-on-the-same-line)
+       (xref-matches-in-directory-finds-an-empty-line-regexp-match):
+       Ditto.
+
+2020-12-21  Juri Linkov  <juri@linkov.net>
+
+       De-duplicate lines in Xref buffers
+
+       * lisp/progmodes/xref.el (xref--insert-xrefs):
+       Render matches coming from the same line together (bug#36967).
+       (xref--item-at-point): Account for the above.
+
+2020-12-21  Philipp Stephani  <phst@google.com>
+
+       Unbreak build after commit 1a0a11f7d2d1dbecb9f754b1e129d50e489058e6.
+
+       The commit only changed a comment in 'struct buffer', so the portable
+       dumper doesn't need to be adapted.
+
+       * src/pdumper.c (dump_buffer): Update hash for 'struct buffer'.
+
+2020-12-20  Alan Third  <alan@idiocy.org>
+
+       Fix image cache lookup
+
+       * src/image.c (lookup_image): ignore_colors should be false as we want
+       to search for images with matching colors.
+
+2020-12-20  Alan Third  <alan@idiocy.org>
+
+       Remove unnecessary string conversion
+
+       * src/nsfns.m (ns_set_represented_filename): NSString can load List
+       strings directly now.
+
+2020-12-20  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-12-20  Andrea Corallo  <akrl@sdf.org>
+
+       Have native compiler always preserve multibyte strings (bug#45342)
+
+       * lisp/emacs-lisp/comp.el (comp-final): Escape multibyte string
+       when offloading compilation to child process.
+       * test/src/comp-test-funcs.el (comp-test-45342-f): New function
+       * test/src/comp-tests.el (bug-45342): New test
+
+2020-12-20  Juri Linkov  <juri@linkov.net>
+
+       * lisp/simple.el (goto-line-read-args): Use number-at-point (bug#45199)
+
+       * lisp/subr.el (goto-char--read-natnum-interactive): Add the value of
+       point to the end of default values, and move function slightly higher.
+
+2020-12-20  Andrea Corallo  <akrl@sdf.org>
+
+       Fix missing 'gcc_jit_type_get_const' macro definition (bug#45303).
+
+       * src/comp.c (gcc_jit_type_get_pointer): Define macro.
+
+2020-12-20  Michael Albinus  <michael.albinus@gmx.de>
+
+       Improve make-process in Tramp
+
+       * doc/misc/tramp.texi (Remote processes): Remove INSIDE_EMACS
+       restriction.
+       (Frequently Asked Questions, External packages): Add indices.
+
+       * etc/NEWS: 'start-process-shell-command' and
+       'start-file-process-shell-command' do not support the old calling
+       conventions any longer.
+
+       * lisp/subr.el (start-process-shell-command)
+       (start-file-process-shell-command): Remove old calling conventions.
+
+       * lisp/net/tramp-compat.el (remote-file-error): Remove, it isn't
+       necessary.
+
+       * lisp/net/tramp.el (tramp-handle-make-process): Remove special shell
+       handling.  Support environment variables.
+
+       * test/lisp/net/tramp-tests.el
+       (tramp--test--deftest-direct-async-process): Skip for mock method.
+       (tramp--test-async-shell-command): Suppress `shell-command-sentinel'.
+       (tramp-test32-shell-command, tramp-test33-environment-variables):
+       Adapt tests.
+       (tramp-test32-shell-command-direct-async)
+       (tramp-test33-environment-variables-direct-async): New tests.
+
+2020-12-20  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Inhibit buffer hooks in temporary buffers
+
+       Give get-buffer-create an optional argument to inhibit buffer hooks
+       in internal or temporary buffers for efficiency (bug#34765).
+
+       * etc/NEWS: Announce new parameter of get-buffer-create and
+       generate-new-buffer, and that with-temp-buffer and with-temp-file
+       now inhibit buffer hooks.
+
+       * doc/lispref/buffers.texi (Buffer Names): Fix typo.
+       (Creating Buffers): Document new parameter of get-buffer-create and
+       generate-new-buffer.
+       (Buffer List, Killing Buffers): Document when buffer hooks are
+       inhibited.
+       (Current Buffer):
+       * doc/lispref/files.texi (Writing to Files): Document that
+       with-temp-buffer and with-temp-file inhibit buffer hooks.
+       * doc/lispref/internals.texi (Buffer Internals): Document
+       inhibit_buffer_hooks flag.  Remove stale comment.
+       * doc/misc/gnus-faq.texi (FAQ 5-8):
+       * lisp/simple.el (shell-command-on-region): Fix indentation.
+
+       * lisp/files.el (kill-buffer-hook): Document when hook is inhibited.
+       (create-file-buffer):
+       * lisp/gnus/gnus-uu.el (gnus-uu-unshar-article):
+       * lisp/international/mule.el (load-with-code-conversion):
+       * lisp/mh-e/mh-xface.el (mh-x-image-url-fetch-image):
+       * lisp/net/imap.el (imap-open):
+       * lisp/net/mailcap.el (mailcap-maybe-eval):
+       * lisp/progmodes/flymake-proc.el
+       (flymake-proc--read-file-to-temp-buffer)
+       (flymake-proc--copy-buffer-to-temp-buffer): Simplify.
+
+       * lisp/subr.el (generate-new-buffer): Forward new optional argument
+       to inhibit buffer hooks to get-buffer-create.
+       (with-temp-file, with-temp-buffer, with-output-to-string):
+       * lisp/json.el (json-encode-string): Inhibit buffer hooks in buffer
+       used.
+
+       * src/buffer.c (run_buffer_list_update_hook): New helper function.
+       (Fget_buffer_create): Use it.  Add optional argument to set
+       inhibit_buffer_hooks flag instead of comparing the buffer name to
+       Vcode_conversion_workbuf_name.  All callers changed.
+       (Fmake_indirect_buffer, Frename_buffer, Fbury_buffer_internal)
+       (record_buffer): Use run_buffer_list_update_hook.
+       (Fkill_buffer): Document when buffer hooks are inhibited.  Use
+       run_buffer_list_update_hook.
+       (init_buffer_once): Inhibit buffer hooks in Vprin1_to_string_buffer.
+       (Vkill_buffer_query_functions, Vbuffer_list_update_hook): Document
+       when hooks are inhibited.
+       * src/buffer.h (struct buffer): Update inhibit_buffer_hooks
+       commentary.
+       * src/coding.h (Vcode_conversion_workbuf_name):
+       * src/coding.c (Vcode_conversion_workbuf_name): Make static again
+       since it is no longer needed in src/buffer.c.
+       (code_conversion_restore, code_conversion_save, syms_of_coding):
+       Prefer boolean over integer constants.
+       * src/fileio.c (Finsert_file_contents): Inhibit buffer hooks in
+       " *code-converting-work*" buffer.
+       * src/window.c (Fselect_window): Fix grammar.  Mention
+       window-selection-change-functions alongside buffer-list-update-hook.
+
+       * test/src/buffer-tests.el: Fix requires.
+       (buffer-tests-inhibit-buffer-hooks): New test.
+
+2020-12-20  Mattias Engdegård  <mattiase@acm.org>
+
+       image-cache-size improvements
+
+       Implement for non-Cairo X11 and NS.  Count masks as well, and
+       XImage objects on X11.
+
+       * src/image.c (image_size_in_bytes): New.
+       (image_frame_cache_size): Use image_size_in_bytes.
+       * src/nsterm.h:
+       * src/nsimage.m (ns_image_size_in_bytes, [EmacsImage sizeInBytes]):
+       New function and method.
+       * src/w32gui.h:
+       * src/w32term.c (w32_image_size): Update signature.
+
+2020-12-20  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Fix default value of gnus-registry-register-all: should be t
+
+       * lisp/gnus/gnus-registry.el (gnus-registry-register-all): This was
+       meant to default to t; only an oversight during code review left it as
+       nil.
+
+2020-12-19  Dmitry Gutov  <dgutov@yandex.ru>  (tiny change)
+
+       Jamie Beardslee <beardsleejamie@gmail.com>
+
+       * lisp/progmodes/project.el (project-execute-extended-command):
+       New command.
+       (project-prefix-map): Binding for it.
+
+2020-12-19  Andrea Corallo  <akrl@sdf.org>
+
+       Add 'internal_condition_case_5' (bug#45303).
+
+       * src/lisp.h (internal_condition_case_4)
+       (internal_condition_case_5): Declare.
+       * src/eval.c (internal_condition_case_5): New function.
+       * src/comp.c (eln_load_path_final_clean_up): Use
+       'internal_condition_case_5'.
+
+2020-12-19  Juri Linkov  <juri@linkov.net>
+
+       * lisp/image-mode.el: Use one timer and lock for slow remote calls 
(bug#45256)
+
+       * lisp/image-mode.el (image-auto-resize-timer): New variable.
+       (image--window-state-change): Cancel previous timer and
+       remember new timer in image-auto-resize-timer.
+       (image--window-state-change): New variable.
+       (image-fit-to-window): When image-fit-to-window-lock is nil,
+       call image-toggle-display-image ignoring 'remote-file-error'.
+
+2020-12-19  Juri Linkov  <juri@linkov.net>
+
+       No need to set isearch-input-method-function in 
isearch-transient-input-method
+
+2020-12-19  Andrea Corallo  <akrl@sdf.org>
+
+       Add 'gcc_jit_type_get_const' to Windows dynamic load machinery 
(bug#45303).
+
+       * src/comp.c: Add 'gcc_jit_type_get_const' to windows dynamic
+       load machinery.
+
+2020-12-19  Stefan Kangas  <stefan@marxist.se>
+
+       Convert apropos-internal from C to Lisp (Bug#44529)
+
+       This runs insignificantly faster in C, and is already fast enough on
+       reasonably modern hardware.  We might as well lift it to Lisp.
+       This benchmark can be used to verify:
+
+         (benchmark-run 10 (apropos-command "test"))
+         => (0.12032415399999999 2 0.014772391999999995) ; C
+         => (0.13513192100000002 2 0.017216643000000004) ; Lisp
+
+       * lisp/subr.el (apropos-internal): New defun, converted from C.
+       * src/keymap.c (Fapropos_internal): Remove defun.
+       (apropos_accum): Remove function.
+       (apropos_predicate, apropos_accumulate): Remove variables.
+       (syms_of_keymap): Remove defsubr for Fapropos_internal, and
+       definitions of the above variables.
+       * test/src/keymap-tests.el (keymap-apropos-internal)
+       (keymap-apropos-internal/predicate): Move tests from here...
+       * test/lisp/subr-tests.el (apropos-apropos-internal)
+       (apropos-apropos-internal/predicate): ...to here.
+
+2020-12-19  Eli Zaretskii  <eliz@gnu.org>
+
+       * lisp/face-remap.el (face-remap-set-base): Doc fix.  (Bug#45264)
+
+2020-12-19  Vasilij Schneidermann  <mail@vasilij.de>
+
+       Correct argument order in comment
+
+       * etc/ETAGS.EBNF (position): Correct comment.
+
+2020-12-19  Stefan Kangas  <stefan@marxist.se>
+
+       Shorten some over-wide docstrings in functions and macros
+
+       * lisp/allout-widgets.el (allout-widgets-tally-string):
+       * lisp/array.el (array-mode):
+       * lisp/calc/calc-units.el (calc-spn):
+       * lisp/cedet/ede/generic.el (ede-generic-new-autoloader):
+       * lisp/cedet/semantic/analyze.el 
(semantic-analyze-find-tag-sequence-default)
+       (semantic-analyze-find-tag-sequence):
+       * lisp/cedet/semantic/bovine/c.el 
(semantic-c-evaluate-symbol-for-hideif):
+       * lisp/cedet/semantic/bovine/make.el (semantic-lex-make-command):
+       * lisp/cedet/semantic/db-typecache.el 
(semanticdb-typecache-include-tags):
+       * lisp/cedet/semantic/doc.el (semantic-documentation-for-tag):
+       * lisp/cedet/semantic/tag-ls.el (semantic--tag-attribute-similar-p):
+       * lisp/emacs-lisp/advice.el (ad-map-arglists):
+       * lisp/emacs-lisp/bytecomp.el (byte-constant2)
+       (byte-save-restriction, byte-catch-OBSOLETE, byte-unwind-protect):
+       * lisp/emacs-lisp/cl-generic.el (cl-generic-combine-methods):
+       * lisp/emacs-lisp/seq.el (seq-partition, seq-set-equal-p)
+       (seq-filter):
+       * lisp/faces.el (face-attribute-specified-or, face-equal):
+       * lisp/info.el (Info-prev-reference-or-link)
+       (Info-next-reference-or-link):
+       * lisp/isearch.el (with-isearch-suspended):
+       * lisp/kmacro.el (kmacro-step-edit-macro, kmacro-set-counter):
+       * lisp/org/org-agenda.el (org-agenda-filter-by-category):
+       * lisp/ses.el (ses-cell-symbol):
+       * lisp/w32-fns.el (w32-shell-dos-semantics): Shorten doc strings to
+       not exceed 80-column limits.  (Bug#44858)
+
+2020-12-19  Stefan Kangas  <stefan@marxist.se>
+
+       Shorten over-wide docstrings in variables
+
+       * lisp/cedet/semantic/util-modes.el 
(semantic-highlight-func-popup-menu):
+       * lisp/emacs-lisp/elint.el (elint-top-form-logged):
+       * lisp/erc/erc-dcc.el (erc-dcc-list):
+       * lisp/expand.el (expand-pos):
+       * lisp/font-lock.el (cpp-font-lock-keywords-source-depth):
+       * lisp/gnus/gnus-sum.el (gnus-sort-gathered-threads-function):
+       * lisp/gnus/message.el (message-cite-style-thunderbird):
+       * lisp/gnus/nnmh.el (nnmh-be-safe):
+       * lisp/gnus/nntp.el (nntp-open-telnet-envuser):
+       * lisp/international/mule-cmds.el (current-transient-input-method):
+       * lisp/net/tramp.el (tramp-file-name-structure):
+       * lisp/org/ob-R.el (org-babel-R-write-object-command):
+       * lisp/org/org-attach.el (org-attach-after-change-hook):
+       * lisp/org/org.el (org-stamp-time-of-day-regexp):
+       * lisp/progmodes/elisp-mode.el (elisp-xref-find-def-functions):
+       * lisp/progmodes/ruby-mode.el (ruby-block-mid-re):
+       * lisp/progmodes/verilog-mode.el (verilog-cache-enabled):
+       * lisp/term.el (term-scroll-end):
+       * lisp/textmodes/table.el (table-command-remap-alist)
+       (table-inhibit-auto-fill-paragraph, table-command-remap-alist):
+       * lisp/vc/ediff-diff.el (ediff-ignore-similar-regions):
+       * lisp/vc/ediff-wind.el (ediff-mouse-pixel-threshold):
+       * lisp/vc/smerge-mode.el (smerge-refine-ignore-whitespace):
+       * lisp/vc/vc.el (vc-log-short-style):
+       * lisp/view.el (view-exit-action): Shorten doc strings to not exceed
+       80-column limits.  (Bug#44858)
+
+2020-12-19  Stefan Kangas  <stefan@marxist.se>
+
+       Shorten over-wide docstrings in defcustoms
+
+       * lisp/calc/calc.el (calc-embedded-announce-formula-alist)
+       (calc-embedded-open-formula, calc-embedded-close-formula)
+       (calc-matrix-mode):
+       * lisp/cedet/semantic/imenu.el (semantic-imenu-sort-bucket-function):
+       * lisp/emacs-lisp/find-func.el (find-feature-regexp):
+       * lisp/emulation/cua-base.el (cua-paste-pop-rotate-temporarily):
+       * lisp/emulation/viper-init.el (viper-fast-keyseq-timeout)
+       (viper-related-files-and-buffers-ring):
+       * lisp/emulation/viper-keym.el (viper-want-ctl-h-help):
+       * lisp/gnus/gnus-art.el (gnus-article-banner-alist):
+       * lisp/gnus/gnus-group.el (gnus-keep-same-level):
+       * lisp/gnus/gnus-score.el (gnus-adaptive-word-length-limit):
+       * lisp/gnus/gnus-sum.el (gnus-inhibit-user-auto-expire):
+       * lisp/gnus/gnus-uu.el (gnus-uu-ignore-files-by-type)
+       (gnus-uu-do-not-unpack-archives)
+       (gnus-uu-unmark-articles-not-decoded)
+       (gnus-uu-correct-stripped-uucode, gnus-uu-save-in-digest)
+       (gnus-uu-post-include-before-composing):
+       * lisp/gnus/gnus.el (gnus-use-long-file-name)
+       (gnus-install-group-spam-parameters):
+       * lisp/gnus/message.el (message-cite-style):
+       * lisp/gnus/nnmail.el
+       (nnmail-split-fancy-with-parent-ignore-groups)
+       (nnmail-cache-ignore-groups):
+       * lisp/ido.el (ido-rewrite-file-prompt-functions):
+       * lisp/mail/feedmail.el (feedmail-fiddle-plex-user-list)
+       (feedmail-spray-address-fiddle-plex-list):
+       * lisp/mh-e/mh-e.el (mh-annotate-msg-hook):
+       * lisp/net/imap.el (imap-process-connection-type):
+       * lisp/net/rcirc.el (rcirc-omit-threshold):
+       * lisp/net/tramp-sh.el (tramp-copy-size-limit):
+       * lisp/nxml/nxml-mode.el (nxml-default-buffer-file-coding-system):
+       * lisp/obsolete/landmark.el (landmark-max-stall-time):
+       * lisp/obsolete/tls.el (tls-checktrust):
+       * lisp/org/org-indent.el
+       (org-indent-mode-turns-off-org-adapt-indentation)
+       (org-indent-mode-turns-on-hiding-stars):
+       * lisp/org/org-protocol.el (org-protocol-project-alist):
+       * lisp/progmodes/cc-vars.el (c-doc-comment-style):
+       * lisp/progmodes/cperl-mode.el (cperl-indent-subs-specially):
+       * lisp/progmodes/flymake-proc.el (flymake-proc-allowed-file-name-masks):
+       * lisp/progmodes/hideif.el (hide-ifdef-expand-reinclusion-protection):
+       * lisp/simple.el (minibuffer-history-case-insensitive-variables):
+       * lisp/tab-bar.el (tab-bar-close-last-tab-choice):
+       * lisp/textmodes/reftex-vars.el
+       (reftex-special-environment-functions):
+       * lisp/vc/ediff-init.el (ediff-startup-hook, ediff-cleanup-hook)
+       (ediff-metachars):
+       * lisp/vc/ediff-merg.el (ediff-show-clashes-only):
+       * lisp/vc/ediff-mult.el (ediff-default-filtering-regexp): Shorten doc
+       strings to not exceed 80-column limits.  (Bug#44858)
+
+2020-12-19  Mattias Engdegård  <mattiase@acm.org>
+
+       Correct units and spacing in memory-report
+
+       * lisp/emacs-lisp/memory-report.el (memory-report--format):
+       Use IEC unit prefixes and a space before.
+
+2020-12-19  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Set indent-tabs-mode for c-mode in .dir-locals.el
+
+       * .dir-locals.el (c-mode): Enforce existing indent-tabs-mode
+       policy.  (Bug#34765)
+
+2020-12-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix over-wide doc strings
+
+       * lisp/vc/ediff-init.el (ediff-before-flag-bol)
+       (ediff-after-flag-eol, ediff-before-flag-mol):
+       * lisp/org/org-ctags.el (org-ctags-open-link-functions):
+       * lisp/mail/feedmail.el (feedmail-sendmail-f-doesnt-sell-me-out):
+       * lisp/language/ethio-util.el (ethio-use-three-dot-question)
+       (ethio-quote-vowel-always, ethio-W-sixth-always):
+       * lisp/gnus/nnvirtual.el (nnvirtual-mapping-table)
+       (nnvirtual-mapping-offsets, nnvirtual-mapping-reads)
+       (nnvirtual-mapping-marks, nnvirtual-info-installed):
+       * lisp/gnus/gnus.el (charset):
+       * lisp/gnus/deuglify.el (gnus-outlook-deuglify-unwrap-stop-chars)
+       (gnus-outlook-deuglify-no-wrap-chars)
+       (gnus-outlook-deuglify-attrib-cut-regexp): Fix doc strings to not
+       exceed 80-column limits.  (Bug#44858)
+
+2020-12-19  Andrea Corallo  <akrl@sdf.org>
+
+       Clean-up 'internal_condition_case_4' orphan declaration (bug#45303).
+
+       * src/lisp.h (internal_condition_case_4): Declaration remove.
+
+2020-12-19  Andrea Corallo  <akrl@sdf.org>
+
+       Move diagnostic pragmas out of namespace-scope (bug#45303).
+
+       Pragmas in GCC don't work reliably within function:
+       <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92696>
+
+       * src/comp.c (emit_static_object)
+       (Fcomp_native_driver_options_effective_p)
+       (Fcomp_libgccjit_version): Move pragmas out of name-scope.
+
+2020-12-19  Andrea Corallo  <akrl@sdf.org>
+
+       Fix Windows libgccjit library name (bug#45303).
+
+       * lisp/term/w32-win.el (dynamic-library-alist): Fix Windows
+       libgccjit library name.
+       * src/emacs.c (syms_of_emacs): Likewise.
+
+2020-12-19  Roland Winkler  <winkler@gnu.org>
+
+       bibtex-mode: Permit user-defined schemes for sorting entries.
+
+       * lisp/textmodes/bibtex.el (bibtex-maintain-sorted-entries):
+       New allowed value (INDEX-FUN PREDICATE).
+       (bibtex-entry-index, bibtex-lessp): Use it.
+       (bibtex-init-sort): Rename from bibtex-init-sort-entry-class-alist.
+
+2020-12-19  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/package.el (package-quickstart-refresh): Fix last 
change
+
+       Actually allow byte-compiling the file.
+       Reported by Basil L. Contovounesios <contovob@tcd.ie>.
+
+2020-12-18  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       48b9c47805 Minor fixes in authors.el and in tarball-making instructions
+       d7a4ceaa1e ; Add a new item to TODO
+       64fe805b19 Improve documentation of 'query-replace'
+       7cacf5da47 Update to Org 9.4.3
+
+       # Conflicts:
+       #       admin/authors.el
+
+2020-12-18  João Távora  <joaotavora@gmail.com>
+
+       Document that flymake-diag-region saves match data
+
+       The typical use of this function (which is parsing compiler diagnostic
+       messages), lends itself too easily to one the problems in bug#29193.
+       Make it a friendlier API.
+
+       * doc/misc/flymake.texi (Flymake utility functions): Document that
+       flymake-diag-region saves match data.
+
+       * lisp/progmodes/flymake.el (flymake-diag-region): Document that
+       this saves match data.
+
+2020-12-18  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/package.el: Byte compile the quickstart file
+
+       Earlier tests had found problems when byte-compiling the file,
+       but later investigations indicated the problem was not
+       directly related.  The performance difference is appreciable.
+
+       (package-quickstart-refresh): Byte compile the file.
+       (package-activate-all): Load byte-compiled version if available.
+       (package--quickstart-maybe-refresh): Delete the byte-compiled file as 
well.
+
+2020-12-18  Eli Zaretskii  <eliz@gnu.org>
+
+       Minor fixes in authors.el and in tarball-making instructions
+
+       * admin/authors.el (authors): Make the error message more helpful.
+       (authors-ignored-files, authors-renamed-files-alist): Update.
+
+2020-12-18  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/which-func.el (which-func-update): Bind `non-essential`
+
+2020-12-18  Mattias Engdegård  <mattiase@acm.org>
+
+       Follow good regexp practice
+
+       These were found by relint 1.19.
+
+       * lisp/help-fns.el (help-fns--first-release): Use string-end instead
+       of line-end when matching a file name.
+       * lisp/org/ob-core.el (org-babel--string-to-number): Put hyphen last
+       in alternative.
+       * lisp/org/org-agenda.el (org-agenda-filter): Escape '+' correctly.
+
+2020-12-18  Michael Albinus  <michael.albinus@gmx.de>
+
+       * lisp/net/tramp.el (tramp-handle-make-process): Handle shell commands.
+
+2020-12-18  João Távora  <joaotavora@gmail.com>
+
+       Save match data in flymake-diag-region (bug#29193)
+
+       * lisp/progmodes/flymake.el (flymake-diag-region): Move
+       save-match-data up.
+
+2020-12-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix previous frame-focus server.el change
+
+       * lisp/server.el (server-execute): Always give Emacs focus,
+       whether we open a new frame or not.
+
+2020-12-18  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Fix regexp in IMAP search-string preparation
+
+       * lisp/gnus/gnus-search.el (gnus-search-run-search): This was failing
+       to catch all of X-GM-RAW.
+
+2020-12-18  Dmitry Gutov  <dgutov@yandex.ru>
+
+       flymake-diag-region: Fix the recent test breakage
+
+       * lisp/progmodes/flymake.el (flymake-diag-region):
+       Make sure to save the match data (bug#29193).
+
+2020-12-18  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/org/org-refile.el (org-copy): Fix missing obsoletion version
+
+2020-12-17  Andrea Corallo  <akrl@sdf.org>
+
+       Makefile.in (w32locallisppath): Add PATH_REL_LOADSEARCH (bug#45303).
+
+       * nt/epaths.nt (PATH_REL_LOADSEARCH): Define macro (bug#45303).
+
+2020-12-17  Michael Albinus  <michael.albinus@gmx.de>
+
+       Some minor Tramp changes
+
+       * doc/lispref/os.texi (Timers): Speak about `remote-file-error'.
+
+       * doc/misc/tramp.texi (Frequently Asked Questions): Speak about
+       `remote-file-error'.
+       (External packages): New subsection "Timers".
+
+       * lisp/net/tramp-adb.el (tramp-adb-handle-make-process):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-make-process): Adapt error
+       function.  Handle coding.
+
+       * lisp/net/tramp.el (tramp-handle-make-process): Adapt error function.
+
+2020-12-17  Stefan Kangas  <stefan@marxist.se>
+
+       Remove incorrect comment from erc-goodies.el
+
+       * lisp/erc/erc-goodies.el (erc-move-to-prompt-setup): Remove incorrect
+       comment; the XEmacs compat code has been removed.
+
+2020-12-17  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Fix my two most common causes of all windows/frames redisplay
+
+       * src/buffer.c (Fkill_all_local_variables): Only redisplay the buffer.
+       * src/window.c (set_window_scroll_bars): Only redisplay the window.
+
+2020-12-17  Zajcev Evgeny  <zevlg@yandex.ru>
+
+       Make "Invalid modifier in string" ordinary invalid-read-syntax error
+
+       * src/lread.c (read1): Raise "Invalid modifier in string" error as
+         `invalid-read-syntax'.  This fixes raise of unhandled error in
+         `elisp--local-variables'
+
+2020-12-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix fallback use of write-file in ido-mode
+
+       * lisp/ido.el (ido-file-internal): Make `write-file' respect the
+       directory we've navigated to (bug#28513).
+
+2020-12-17  Philipp Stephani  <phst@google.com>
+
+       Ensure that byte compilation works for relative files (Bug#45287).
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-file): Don’t fail if
+       target filename doesn’t contain a directory name.
+
+       * test/lisp/emacs-lisp/bytecomp-tests.el
+       (bytecomp-tests--target-file-no-directory): New unit test.
+
+2020-12-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Default the init file to init.el, not init
+
+       * lisp/startup.el (startup--load-user-init-file): Make the default
+       init file be "init.el", not "init" (bug#45197).
+
+2020-12-16  Pankaj Jangid  <pankaj@codeisgreat.org>
+
+       Fix resetting of gnus-pick-line-number
+
+       * lisp/gnus/gnus-sum.el (gnus-summary-read-group-1): Move setting
+       gnus-pick-line-number from here (bug#45269)...
+       (gnus-summary-prepare): To here.  This ensures that the number is
+       reset when regenerating the buffer, for instance when limiting it.
+
+2020-12-16  Juri Linkov  <juri@linkov.net>
+
+       Don't show minibuffer keybindings for suggestions in 
read-extended-command
+
+       * lisp/simple.el (read-extended-command): Use 'affixation-function'
+       instead of 'annotation-function'.  (Bug#45035)
+       (read-extended-command--affixation): New function created from
+       'read-extended-command--annotation'.
+
+2020-12-16  Juri Linkov  <juri@linkov.net>
+
+       Give affixation-function higher priority over annotation-function 
(bug#45234)
+
+       * doc/lispref/minibuf.texi (Completion Variables)
+       (Programmed Completion): Describe precedence rules
+       of affixation-function and annotation-function.
+
+       * lisp/minibuffer.el (completion-metadata)
+       (completion-extra-properties): Describe precedence rules
+       of affixation-function and annotation-function.
+       (minibuffer-completion-help): First try to apply
+       affixation-function, if there is no such function,
+       try annotation-function.
+
+2020-12-16  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of 'query-replace'
+
+       * doc/emacs/search.texi (Query Replace): Add 'E' to the list of
+       characters one can type at 'query-replace' prompt.  (Bug#45273)
+
+2020-12-16  Bastien Guerry  <bzg@gnu.org>
+
+       Update to Org 9.4.3
+
+       Fix #45259
+
+2020-12-16  Harald Jörg  <haj@posteo.de>
+
+       CPerl-mode: don't treat <<>> as starting a here-doc
+
+       * lisp/progmodes/cperl-mode.el (cperl-find-pods-heres): Detect
+       the "<<>>" operator (Bug#42455).
+
+       * test/lisp/progmodes/cperl-mode-tests.el
+       (cperl-test-bug-45255): Verify that <<>> does not start a
+       HERE-doc.
+
+2020-12-16  E. Choroba  <choroba@matfyz.cz>
+
+       Update short docs in cperl-mode
+
+       * lisp/progmodes/cperl-mode.el (cperl-short-docs):
+       Update with some missing entries.  (Bug#45254)
+
+2020-12-16  Dmitry Gutov  <dgutov@yandex.ru>
+
+       (flymake-diag-region): Fall back to (end-of-thing 'symbol)
+
+       * lisp/progmodes/flymake.el (flymake-diag-region):
+       Fall back to (end-of-thing 'symbol) (bug#29193).
+
+2020-12-15  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix C-n/C-p when a line starts with an image
+
+       * src/xdisp.c (move_it_to): Handle the case where the second call
+       to move_it_in_display_line_to under MOVE_TO_Y takes us farther
+       from TO_CHARPOS than the first call.  This fixes values returned
+       by pos-visible-in-window-p and posn-at-point when the screen line
+       starts with invisible text followed by an image.  (Bug#9092)
+
+2020-12-15  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       668f0a7f84 Fix point location when completing in gdb-mi.el
+       2dbc95063b Update to Org 9.4.2
+       f22856a5c5 Update to Org 9.4.1
+
+       # Conflicts:
+       #       doc/misc/org.texi
+       #       lisp/org/ob-core.el
+       #       lisp/org/ob-ruby.el
+       #       lisp/org/ob-screen.el
+       #       lisp/org/ol-gnus.el
+       #       lisp/org/ol.el
+       #       lisp/org/org.el
+
+2020-12-15  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       62a6934af9 Fix crash when using XRender and restoring image from X (b...
+       de032d41c6 Bind k to image-kill-buffer in doc-view-mode-map.
+
+2020-12-15  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix setting breakpoints in "M-x gdb" when a source file is missing
+
+       * lisp/progmodes/gdb-mi.el (gdb-get-location): Fix control flow
+       logic when "fullname" is not found.  Unquote and unescape the full
+       file name by calling gdb-mi--c-string-from-string.  FLAG is a
+       string, not a character.  (Bug#15051)
+
+2020-12-15  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: Optimize for scrolling large buffers containing few braces
+
+       This fixes bug #25706.  It particularly pertains to .h files which 
contain
+       only macro definitions.  Many of these files are to be found, for 
example, in
+       the driver sections of the Linux kernel.
+
+       * lisp/progmodes/cc-engine.el (c-beginning-of-statement-1, 
c-on-identifier)
+       (c-syntactic-skip-backward, c-find-decl-prefix-search, 
c-find-decl-spots)
+       (c-forward-name, c-back-over-list-of-member-inits)
+       (c-back-over-member-initializers, c-looking-at-inexpr-block)
+       (c-guess-basic-syntax): Give search limits to, or amend existing ones to
+       c-backward-syntactic-ws, c-forward-syntactic-ws, c-backward-token-2,
+       c-beginning-of-statement-1.
+       (c-determine-limit-no-macro): New function.
+       (c-determine-limit-get-base): Remove unlimited invocation of
+       c-backward-syntactic-ws.
+       (c-determine-limit): Exclude movement between two different macros.  
Use new
+       function c-determine-limit-no-macro.
+       (c-back-over-list-of-member-inits): New parameter `limit'.
+
+       * lisp/progmodes/cc-fonts.el (c-font-lock-complex-decl-prepare)
+       (c-font-lock-declarations, c-font-lock-c++-using): Give search limits 
to, or
+       amend existing ones to c-backward-syntactic-ws, c-beginning-of-decl-1.
+
+       * lisp/progmodes/cc-mode.el (c-unfind-coalesced-tokens, 
c-before-changer)
+       (c-fl-decl-end): Give search limits to, or amend existing ones to
+       c-backward-syntactic-ws, c-forward-syntactic-ws, skip-chars-backward,
+       skip-chars-forward.
+
+2020-12-15  Michael Albinus  <michael.albinus@gmx.de>
+
+       Revert last change in tramp-maybe-open-connection)
+
+       * lisp/net/tramp-sh.el (tramp-maybe-open-connection): Revert last 
change,
+       it causes trouble.
+
+2020-12-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix electric pairs in rst-mode
+
+       * lisp/textmodes/rst.el (rst-mode-syntax-table): Mark pairs in the
+       syntax table (bug#23413).
+       (rst-mode): Instead of setting electric-pair-pairs.
+
+2020-12-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Bind current-minibuffer-command to this-command
+
+       * src/callint.c (Fcall_interactively): Bind
+       current-minibuffer-command to this-command, as documented (bug#45177).
+
+2020-12-14  Glenn Morris  <rgm@gnu.org>
+
+       * doc/lispref/errors.texi (Standard Errors): Fix xref.
+
+       Though I am not sure "report a bug" is helpful.
+
+2020-12-14  Glenn Morris  <rgm@gnu.org>
+
+       * doc/emacs/indent.texi (Indent Convenience): Fix use of @xref.
+
+2020-12-14  Glenn Morris  <rgm@gnu.org>
+
+       Tiny fix for lispref/variables.texi
+
+       * doc/lispref/variables.texi (Converting to Lexical Binding):
+       @strong{Note...} produces a spurious cross-reference in Info;
+       reword to avoid that.
+
+2020-12-14  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/gv.el (error): Allow it as a place
+
+2020-12-14  Alan Mackenzie  <acm@muc.de>
+
+       Optimise c-font-lock-<>-arglists, particularly for buffers with few 
<..> pairs
+
+       * lisp/progmodes/cc-fonts.el (c-font-lock-<>-arglists): In place of a 
regexp
+       search for a complicated and slow regexp, search simply for "<" outside 
of
+       literals together with add hoc testing of other requirements for a <...>
+       match.
+
+       * lisp/progmodes/cc-langs.el (c-nonsymbol-key): New c-lang-defvar from 
the
+       c-lang-const.
+
+2020-12-14  Alan Third  <alan@idiocy.org>
+
+       Fix error with fn key in NS port (bug#44533)
+
+       * src/nsterm.m ([EmacsView keyDown:]): Move the correction for fn key
+       handling to before the modifiers are calculated.
+
+       (cherry picked from commit 7970610d48701a949ce443c94c71eac47d044197)
+
+2020-12-14  Alan Mackenzie  <acm@muc.de>
+
+       Optimise c-parse-state for large buffers with few (if any) braces.
+
+       * lisp/progmodes/cc-engine.el (c-get-fallback-scan-pos): Search a 
maximum of
+       50,000 characters back for the two BODs.  Return nil if we dont' find 
them.
+       (c-parse-state-get-strategy): For strategy `forward', always use the 
position
+       `good-pos' for `start-point', even when there's a change of current 
macro.
+       Deal with a possible return value of nil from c-get-fallback-scan-pos 
(as
+       above).
+       (c-invalidate-state-cache-1): For `c-state-cache-good-pos', instead of
+       sometimes using the minimum scan pos (leading to extensive scanning of 
the
+       entire buffer) use a point close to `here'.
+
+2020-12-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add some admin/emake comments
+
+2020-12-14  Gregory Heytings  <ghe@sdf.org>
+
+       Make the emake error messages red
+
+       * admin/emake: Colorize error messages.
+
+2020-12-14  Michael Albinus  <michael.albinus@gmx.de>
+
+       Add 'remote-file-error' for Tramp
+
+       * doc/lispref/errors.texi (Standard Errors): Add 'remote-file-error'.
+
+       * etc/NEWS: Mention 'remote-file-error'.
+
+       * lisp/net/ange-ftp.el (ftp-error): Add error condition
+       `remote-file-error'.
+
+       * lisp/net/tramp-cmds.el (tramp-cleanup-all-connections): Do not set
+       `tramp-locked'.
+
+       * lisp/net/tramp-compat.el (remote-file-error): Define if it
+       doesn't exist.
+
+       * lisp/net/tramp-sh.el (tramp-timeout-session): Check for "locked"
+       property.
+       (tramp-maybe-open-connection): Simplify.
+
+       * lisp/net/tramp.el (tramp-locked, tramp-locker): Remove them.
+       (tramp-file-name-handler): Do not set them.
+       (with-tramp-locked-connection): New defmacro.
+       (tramp-accept-process-output, tramp-send-string): Use it.
+
+       * src/fileio.c (Qremote_file_error): New error symbol.
+
+       * test/lisp/net/tramp-tests.el (tramp-test43-asynchronous-requests):
+       Adapt test.  Remove :unstable tag.
+
+2020-12-14  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve accuracy of scrolling commands
+
+       * src/xdisp.c (move_it_vertically_backward): Don't rely on
+       line_bottom_y for accurate calculation of the next screen line's Y
+       coordinate: it doesn't work when the current screen line was not
+       yet traversed.  Instead, record the previous Y coordinate and
+       reseat there if overshoot is detected.
+       * src/window.c (window_scroll_pixel_based): Calculate the new
+       window-start point more accurately when screen lines have uneven
+       height.  (Bug#8355)
+
+2020-12-14  Stefan Kangas  <stefan@marxist.se>
+
+       Make XEmacs entry in the FAQ more contemporary
+
+       * doc/misc/efaq.texi (Difference between Emacs and XEmacs): Make
+       XEmacs entry in the FAQ more contemporary.  Remove part about re-using
+       XEmacs code; this is not likely to be relevant these days and in any
+       case is not a frequently asked question.  (Bug#45235)
+
+2020-12-14  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix point location when completing in gdb-mi.el
+
+       * lisp/progmodes/gdb-mi.el (def-gdb-auto-update-handler): Don't
+       force window-start position, so that redisplay doesn't move point
+       when popping completion window below the GUD one.  (Bug#45052)
+
+2020-12-14  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Fix logic of gnus-search-imap-handle-date
+
+       * lisp/gnus/gnus-search.el (gnus-search-imap-handle-date): Just
+       rewrite this whole ridiculous function.
+
+2020-12-14  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/play/5x5.el: Fix typo.  Remove redundant :group args.
+
+2020-12-14  Tim Ruffing  <crypto@timruffing.de>  (tiny change)
+
+       * etc/emacs.service:
+
+       * etc/emacs.service (ExecStart): Make Emacs exit from systemd work
+       better (bug#45181).
+
+       The problem here is the exit code 15, which emacs will return *only* if
+       it has received SIGTERM. I believe what's happening here is that
+       emacsclient will call kill-emacs but not wait until the emacs server
+       has properly shut down. However, it's supposed to wait for the shutdown
+       as an "ExecStop" command according to "man systemd.service". So since
+       the process is still alive when emacsclient comes back, systemd will
+       still issue SIGTERM, making emacs return 15 (maybe after calling kill-
+       emacs again?!).
+
+2020-12-14  Robert Thorpe  <rt@robertthorpeconsulting.com>  (tiny change)
+
+       Mention how to handle user names with @ in rmail
+
+       * doc/emacs/rmail.texi (Remote Mailboxes): Mention how to work
+       around the problem with user names like foo@example.com (bug#16946).
+
+2020-12-14  Daniel Martín  <mardani29@yahoo.es>
+
+       Make goto-char offer the number at point as default
+
+       * lisp/subr.el (read-natnum-interactive): New function to read natural
+       numbers for interactive functions.
+       * src/editfns.c (Fgoto_char): Call read-natnum-interactive from the
+       interactive definition of goto-char to offer the number at point as
+       default.  Also expand the docstring to document this new interactive
+       behavior.
+       * doc/emacs/basic.texi (Moving Point): Expand the Emacs manual to
+       document this new behavior.
+       * etc/NEWS: And announce it (bug#45199).
+
+2020-12-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tool bar documentation clarification: Mention forcing updates
+
+       * doc/lispref/keymaps.texi (Tool Bar): Document that flipping the
+       status of a tool bar item doesn't necessarily update the visuals
+       (bug#42957).
+
+2020-12-14  Tomas Nordin  <tomasn@posteo.net>  (tiny change)
+
+       Fix narrow-to-defun in python-mode
+
+       * lisp/progmodes/python.el (python-nav--beginning-of-defun): Make
+       narrow-to-defun work better in classes (bug#40563).
+
+2020-12-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a new recursively bound `current-minibuffer-command' variable
+
+       * doc/lispref/commands.texi (Command Loop Info): Document it
+       (bug#45177).
+
+       * src/callint.c (Fcall_interactively): Bind it.
+
+       * src/keyboard.c (syms_of_keyboard): Define
+       current-minibuffer-command.
+
+2020-12-14  Ulrich Ölmann  <u.oelmann@pengutronix.de>  (tiny change)
+
+       Add a DirectoryMode to the Emacs Server example
+
+       * doc/emacs/misc.texi (Emacs Server): Update example
+
+       * doc/emacs/misc.texi (Emacs Server): The socket containing directory
+       is per default created with permissions 0755 by the socket-unit.
+       However this is considered unsafe since commit [1], so enhance unit
+       example with systemd configuration directive `DirectoryMode=' to
+       create it with safe permissions, see
+       
https://www.freedesktop.org/software/systemd/man/systemd.socket.html#DirectoryMode=
+
+       [1] 2003-04-12 "(server-socket-name): Use new safe location for socket."
+
+2020-12-14  Stefan Kangas  <stefan@marxist.se>
+
+       Update value of frame-title-format in FAQ
+
+       * doc/misc/efaq.texi (Displaying the current file name in the
+       titlebar): Fix default value of frame-title-format.
+
+2020-12-14  Stefan Kangas  <stefan@marxist.se>
+
+       Don't recommend setnu and wb-line-number
+
+       * doc/misc/efaq.texi (Displaying the current line or column): Remove
+       reference to third-party alternatives to display-line-numbers-mode.
+
+2020-12-14  Stefan Kangas  <stefan@marxist.se>
+
+       Remove more references to old versions from FAQ
+
+       * doc/misc/efaq.texi (Learning how to do something)
+       (Installing Emacs, Emacs for GNUstep, Emacs for macOS): Remove more
+       references to Emacs 22 and older from FAQ.
+
+2020-12-14  Stefan Kangas  <stefan@marxist.se>
+
+       Make XEmacs compat variable warning-level-aliases obsolete
+
+       * lisp/emacs-lisp/warnings.el (warning-level-aliases): Make obsolete.
+       (display-warning): Warn when using one of the warning levels defined
+       in above obsolete variable.  (Bug#44849)
+       * lisp/url/url-proxy.el (url-find-proxy-for-url): Replace obsolete
+       warning type 'critical with :error.
+
+2020-12-14  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq to set+quote
+
+       * lisp/cedet/semantic/senator.el (senator-lazy-highlight-update):
+       * lisp/emulation/edt.el (edt-find, edt-restore-key)
+       (edt-remember):
+       * lisp/eshell/em-ls.el (eshell-ls--insert-directory):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-write-region):
+       * lisp/progmodes/hideif.el (hide-ifdef-mode):
+       * test/lisp/url/url-future-tests.el (url-future-tests): Prefer setq to
+       set+quote.
+
+2020-12-14  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/bookmark.el: Doc fix.
+
+2020-12-14  Torsten Hilbrich  <torsten.hilbrich@gmx.net>
+
+       Merge branch 'feature/integration-of-dictionary-el'
+
+       b6227446d9 Importing dictionary module
+       658ec3ccee Renamed connection.el
+       e2ebffdd62 Renamed link.el
+       723906c444 Removed some compatibility parts in dictionary
+       5dc17d73b0 Add :version tag to defcustom statement
+       49c250b388 Don't check coding-system-list for existence
+       99a7e918c8 Don't check for existence of defface
+       1773b9b687 Dictionary now uses button
+       329b6a0210 Adding details page for dictionary
+       837505075c Fix dictionary tooltip mode
+       2f1e4fbc42 Support nil value for dictionary-server
+       91ff1c8f7c Move placement of dictionary-tooltip-mouse-event
+       28fe134971 Remove text property from empty line
+       7ca331a4f9 Add history of search words to read-string
+       d5a4da25b0 * lisp/net/dictionary.el: Remove remnants of package
+       cc5f280378 * lisp/net/dictionary.el: Add lexical-binding:t
+       09952ce434 Removed useless check for popup-menu
+       81ebe86d8d Show error message when asking to match for nothing
+       0044a2e888 * lisp/net/dictionary-connection.el: Add lexical-binding:t
+       f58443780c * lisp/net/dictionary-connection.el: Remove obsolete Version
+       54a3964e29 Update GPL version
+       a557a103cc * lisp/net/dictionary-connection.el: Prefer defsubst
+       ffa7d6671d * lisp/net/dictionary.el: Prefer defsubst over defmacro
+       4deb8618e4 * lisp/net/dictionary.el (dictionary-mode): Use setq-local
+       d30618cbc1 * lisp/net/dictionary.el (dictionary-tooltip-mode): Use ...
+       a25a12ddaf Use when where else case returns nil
+       89e9c1686e * lisp/net/dictionary.el (dictionary-display-more-info): ...
+       d466231c3e A number of docstring fixes
+       b18217eb87 A number of docstring fixes
+       ca0de4d1e0 * etc/NEWS: Add entry for dictionary.el
+       62d14e10f9 * lisp/net/dictionary.el (dictionary-pre-buffer): Unify 
casing
+
+2020-12-14  Torsten Hilbrich  <torsten.hilbrich@gmx.net>
+
+       * lisp/net/dictionary.el (dictionary-pre-buffer): Unify casing
+
+       Let all the buttons begins with an upper-case character and the rest of
+       the text is lower-case.
+
+2020-12-14  Torsten Hilbrich  <torsten.hilbrich@gmx.net>
+
+       * etc/NEWS: Add entry for dictionary.el
+
+2020-12-14  Torsten Hilbrich  <torsten.hilbrich@gmx.net>
+
+       A number of docstring fixes
+
+       * lisp/net/dictionary-connection.el (dictionary-connection-p,
+         dictionary-connection-read-point, dictionary-connection-process,
+         dictionary-connection-buffer, dictionary-connection-set-read-point,
+         dictionary-connection-set-process, dictionary-connection-set-buffer,
+         dictionary-connection-create-data, dictionary-connection-open,
+         dictionary-connection-status, dictionary-connection-close,
+         dictionary-connection-send, dictionary-connection-send-crlf,
+         dictionary-connection-read, dictionary-connection-read-crlf,
+         dictionary-connection-read-to-point): Fix docstring
+
+2020-12-14  Torsten Hilbrich  <torsten.hilbrich@gmx.net>
+
+       A number of docstring fixes
+
+       * lisp/net/dictionary.el (dictionary-set-server-var, dictionary-mode,
+         dictionary, dictionary-new-buffer, dictionary-reply-code,
+         dictionary-reply, dictionary-reply-list, dictionary-open-server,
+         dictionary-check-connection, dictionary-mode-p, dictionary-close,
+         dictionary-read-reply, dictionary-split-string,
+         dictionary-read-reply-and-split, dictionary-read-answer,
+         dictionary-check-reply, dictionary-coding-system,
+         dictionary-decode-charset, dictionary-encode-charset,
+         dictionary-check-initial-reply, dictionary-store-state,
+         dictionary-restore-state, dictionary-new-search,
+         dictionary-new-search-internal, dictionary-do-search,
+         dictionary-pre-buffer, dictionary-post-buffer,
+         dictionary-display-search-result, dictionary-display-word-entry,
+         dictionary-display-word-definition, dictionary-mark-reference,
+         dictionary-select-dictionary, dictionary-display-dictionarys,
+         dictionary-display-dictionary-line, dictionary-set-dictionary,
+         dictionary-special-dictionary, dictionary-display-more-info,
+         dictionary-select-strategy, dictionary-do-select-strategy,
+         dictionary-display-strategies, dictionary-display-strategy-line,
+         dictionary-set-strategy, dictionary-new-matching,
+         dictionary-do-matching, dictionary-display-only-match-result,
+         dictionary-display-match-result, dictionary-display-match-result,
+         dictionary-display-match-lines, dictionary-search,
+         dictionary-previous, dictionary-help, dictionary-match-words,
+         dictionary-mouse-popup-matching-words,
+         dictionary-popup-matching-words, dictionary-tooltip-mode,
+         dictionary-tooltip-mouse-event): Fix docstring
+
+       The following kind of changes were made:
+
+       - finish first line with a full stop (.)
+       - mention parameter in upper-case whenever possible (considering the
+         length constraints)
+
+2020-12-14  Torsten Hilbrich  <torsten.hilbrich@gmx.net>
+
+       * lisp/net/dictionary.el (dictionary-display-more-info): Spelling fix
+
+       Fix the spelling in the error message for non-existing dictionary.
+
+2020-12-14  Torsten Hilbrich  <torsten.hilbrich@gmx.net>
+
+       Use when where else case returns nil
+
+       * lisp/net/dictionary-connection.el (dictionary-connection-status,
+       dictionary-connection-close): Instead of returning nil in the else case
+       of the if just use when.
+
+       Was suggested by Stefan Kangas.
+
+2020-12-14  Torsten Hilbrich  <torsten.hilbrich@gmx.net>
+
+       * lisp/net/dictionary.el (dictionary-tooltip-mode): Use setq-local
+
+       * lisp/net/dictionary.el (dictionary-mode): Use setq-local
+
+       * lisp/net/dictionary.el: Prefer defsubst over defmacro
+
+2020-12-14  Torsten Hilbrich  <torsten.hilbrich@gmx.net>
+
+       * lisp/net/dictionary-connection.el: Prefer defsubst
+
+       Use defsubst instead of defmacro here. It was suggested by Stefan
+       Kangas to replace the defmacro here and, looking at the lispref,
+       defsubst seems to be a suitable replacement providing the same
+       benefit of inlining functionality as the defmacro.
+
+2020-12-14  Torsten Hilbrich  <torsten.hilbrich@gmx.net>
+
+       Update GPL version
+
+       * lisp/net/dictionary.el: Use GPL version 3 or later
+       * lisp/net/dictionary-connection.el: Use GPL version 3 or later
+
+2020-12-14  Torsten Hilbrich  <torsten.hilbrich@gmx.net>
+
+       * lisp/net/dictionary-connection.el: Remove obsolete Version
+
+       * lisp/net/dictionary-connection.el: Add lexical-binding:t
+
+2020-12-14  Torsten Hilbrich  <torsten.hilbrich@gmx.net>
+
+       Show error message when asking to match for nothing
+
+       * lisp/net/dictionary.el (dictionary-popup-matching-words): Show error
+       if neither the parameter nor the word at point are defined
+
+       This avoids an error later on when the nil value is used as string
+       within dictionary-encode-charset.
+
+2020-12-14  Torsten Hilbrich  <torsten.hilbrich@gmx.net>
+
+       Removed useless check for popup-menu
+
+       * lisp/net/dictionary.el (dictionary-popup-matching-words): No need to
+       check for popup-menu, the code is part of Emacs now and the function
+       should always be there
+
+2020-12-14  Torsten Hilbrich  <torsten.hilbrich@gmx.net>
+
+       * lisp/net/dictionary.el: Add lexical-binding:t
+
+       Fixing all the issues found by this. A number of unused variables were
+       reported here.
+
+2020-12-14  Gabriel do Nascimento Ribeiro  <gabriel.nascimento@nubank.com.br>
+
+       New option tab-bar-history-buttons-show
+
+           * lisp/tab-bar.el (tab-bar-history-buttons-show): If true,
+           show back and forward buttons when tab-bar-history-mode
+           is enabled.  (Bug#45227)
+
+           Copyright-paperwork-exempt: yes
+
+2020-12-14  Juri Linkov  <juri@linkov.net>
+
+       Allow creating a new tab for tab-switcher from the minibuffer 
(bug#45072)
+
+       * lisp/tab-bar.el (tab-switcher): Simplify by let-binding
+       tab-bar-new-tab-choice to t before calling tab-bar-new-tab
+       that handles the case when it's called in the active minibuffer.
+
+2020-12-14  Juri Linkov  <juri@linkov.net>
+
+       Don't show matches with no input for nil 
icomplete-show-matches-on-no-input
+
+       * lisp/icomplete.el (icomplete-show-matches-on-no-input): Fix docstring.
+       (icomplete--initial-input): New internal variable.
+       (icomplete-minibuffer-setup): Set buffer-local
+       icomplete--initial-input to icomplete--field-string.
+       (icomplete-ret, icomplete-force-complete-and-exit)
+       (icomplete--sorted-completions, icomplete-exhibit):
+       Compare icomplete--initial-input with icomplete--field-string
+       to detect no input.  (Bug#19031)
+
+       etc/NEWS: Remove duplicate entry.
+
+2020-12-14  João Távora  <joaotavora@gmail.com>
+
+       Inhibit quit in ElDoc timer functions (bug#45117)
+
+       The point of un-inhibiting it was to make ElDoc backends interruptible
+       with any input (as in while-no-input), since that should in principle
+       invalidate the need of the current ElDoc processing.  But that
+       strategy is dangerous for backends that perform complex
+       synchronization with external processes.  Better let each backend
+       decide for itself it needs this eager interruptive behavior, like is
+       presumably the case with the Octave backend.
+
+       This reverts a part of
+
+           commit 12e922156c86a26fa4bb2cb9e7d2b3fd639e4707
+           Author: Stefan Monnier <monnier@iro.umontreal.ca>
+           Date:   Tue Dec 4 18:15:44 2018 -0500
+
+       * lisp/emacs-lisp/eldoc.el (eldoc-print-current-symbol-info):
+
+       * lisp/progmodes/octave.el (octave-eldoc-function-signatures): Use
+       while-no-input.
+
+2020-12-13  Bastien Guerry  <bzg@gnu.org>
+
+       Update to Org 9.4.2
+
+       Mostly fixing compiler warnings.
+
+2020-12-13  Dmitry Gutov  <dgutov@yandex.ru>
+           Philip K.  <philipk@posteo.net>
+
+       Remove the duplication from project-switch-commands's config
+
+       Based on an older patch by Philip K (https://debbugs.gnu.org/41890#127).
+
+       * lisp/progmodes/project.el: (project-switch-commands): Change to
+       'defcustom', alter the value format, add :type.
+       (project-switch-use-entire-map): New option.
+       (project--keymap-prompt, project-switch-project):
+       Update accordingly, while keeping compatibility with user-defined
+       values in the previous format (for some transition period).
+
+2020-12-13  Philipp Stephani  <phst@google.com>
+
+       Byte compilation: handle case where the output file is a mountpoint.
+
+       See Bug#44631.  While testing for a readonly output directory has
+       slightly different semantics, in practice they should cover cases
+       where Emacs is sandboxed and can only write to the destination file,
+       not its directory.
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-file): Handle the case
+       where the output directory is not writable.
+
+       * test/lisp/emacs-lisp/bytecomp-tests.el
+       (bytecomp-tests--not-writable-directory)
+       (bytecomp-tests--dest-mountpoint): New unit tests.
+
+2020-12-13  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Stop dropping the tag when creating the custom-variable widget
+
+       * lisp/cus-edit.el (custom-variable-value-create): Obey the specified
+       tag format when creating the variable tag, but stop dropping the tag
+       format for the variable's type widget, since the tag can be used to
+       give useful information to the user about the variable.  (Bug#35133)
+
+2020-12-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make dired-toggle-read-only query on read-only directories
+
+       * lisp/dired.el (dired-toggle-read-only): Query instead of
+       erroring out immediately (bug#29412).
+
+2020-12-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify Extended Menu Items a bit more
+
+       * doc/lispref/keymaps.texi (Extended Menu Items): Expand a bit
+       more on how submenus are formed (bug#26428).
+
+2020-12-13  Bastien Guerry  <bzg@gnu.org>
+
+       Update to Org 9.4.1
+
+2020-12-13  Andrea Corallo  <akrl@sdf.org>
+
+       Fix `memory-report' for '--without-x' builds
+
+       * lisp/emacs-lisp/memory-report.el
+       (memory-report--image-cache): Don't call `image-cache-size' if
+       unbound.
+
+2020-12-13  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Bump project.el version
+
+       * lisp/progmodes/project.el: Bump the version.
+
+2020-12-13  Andrii Kolomoiets  <andreyk.mad@gmail.com>
+
+       vc-create-tag: use vc-revision-history variable
+
+       * lisp/vc/vc.el (vc-create-tag): Use 'vc-revision-history' variable.
+
+2020-12-13  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Fix test failure
+
+       * test/lisp/vc/vc-tests.el (vc-test--working-revision):
+       Accept working revision -1, expected for older Hg (bug#36534).
+
+2020-12-13  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/bytecomp.el: Allow a nil destination file
+
+       (byte-compile--default-dest-file): New function, extracted from
+       byte-compile-dest-file.
+       (byte-compile-dest-file): Use it.
+       (byte-compile-dest-file-function): Give it a non-nil default value.
+       (byte-recompile-file, byte-compile-file): Handle a nil return value
+       from `byte-compile-dest-file`.
+
+       * lisp/progmodes/elisp-mode.el 
(elisp-flymake--batch-compile-for-flymake):
+       Tell the compiler not to write the result, instead of writing it to
+       a dummy temp file.
+
+2020-12-13  Andrea Corallo  <akrl@sdf.org>
+
+       Allow for adding constraints targeting blocks with multiple predecessors
+
+       This commit remove the limitaiton 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.
+
+       * lisp/emacs-lisp/comp.el (comp-block, comp-edge): Better slot
+       type specifiers.
+       (comp-block-cstr): New struct specializing `comp-block'.
+       (make-comp-edge): New function.
+       (comp-func): Better test function + doc for `blocks' slot.
+       (comp-limple-lock-keywords): Update possible basic block names.
+       (comp-emit-assume): Receive directly the block instead of its name.
+       (comp-add-new-block-beetween): New function.
+       (comp-cond-cstr-target-block): Logic update and use
+       `comp-add-new-block-beetween'.
+       (comp-cond-cstr-func): Make use of the latter.
+       (comp-compute-edges): Make use of `make-comp-edge'.
+
+2020-12-13  Andrea Corallo  <akrl@sdf.org>
+
+       Rename comp-cond-rw -> comp-cond-cstr
+
+       * lisp/emacs-lisp/comp.el (comp-passes)
+       (comp-cond-cstr-target-slot, comp-cond-cstr-func)
+       (comp-cond-cstr): Rename pass from cond-rw to cond-cstr.
+
+2020-12-13  Andrea Corallo  <akrl@sdf.org>
+
+       Memoize `comp-cstr-intersection'
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr-ctxt): Add new slot
+       `intersection-mem'.
+       (comp-cstr-intersection-homogeneous): Fix non local exit target.
+       (comp-cstr-intersection-no-mem): Rename from
+       `comp-cstr-intersection'.
+       (comp-cstr-intersection): New function.
+
+2020-12-13  Andrea Corallo  <akrl@sdf.org>
+
+       Add initial negated non-negegated intersection support
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-range-intersection): Cosmetic.
+       (comp-cstr-intersection-homogeneous): Rename from
+       `comp-cstr-intersection'.
+       (comp-cstr-intersection): New function.
+
+2020-12-13  Alan Third  <alan@idiocy.org>
+
+       Fix assertion on SVG load failure
+
+       * src/image.c (svg_load_image): Move setting DPI to after rsvg_handle
+       error checking.
+
+2020-12-12  Stefan Kangas  <stefan@marxist.se>
+
+       Remove references to Emacs before version 22 from FAQ
+
+       * doc/misc/efaq.texi (Escape sequences in shell output): Remove
+       reference to versions before Emacs 21.
+       (Basic editing, Latest version of Emacs)
+       (Turning on abbrevs by default, Going to a line by number)
+       (Security risks with Emacs): Remove references to versions before
+       Emacs 22.
+
+2020-12-12  Philipp Stephani  <phst@google.com>
+
+       Document and enforce some properties for strings created by modules.
+
+       When creating multibyte or unibyte strings, we should guarantee the
+       following invariants:
+
+       - When creating empty strings, a NULL data pointer should be allowed.
+         This often arises in practice if the string length isn't known in
+         advance, and we don't want to unnecessarily trigger undefined
+         behavior.  Since functions like memcpy might not accept NULL
+         pointers, use the canonical empty string objects in this case.
+
+       - Nonzero strings should be guaranteed to be unique and mutable.
+         These are the same guarantees expected from Lisp functions such as
+         'make-string' or 'unibyte-string'.  On the other hand, empty strings
+         might not be unique.
+
+       * src/emacs-module.c (module_make_string)
+       (module_make_unibyte_string): Correctly handle empty strings.
+
+       * test/src/emacs-module-resources/mod-test.c (Fmod_test_make_string):
+       New test function.
+       (emacs_module_init): Expose it.
+
+       * test/src/emacs-module-tests.el (mod-test-make-string/empty)
+       (mod-test-make-string/nonempty): New unit tests.
+
+       * doc/lispref/internals.texi (Module Values): Document properties and
+       corner cases for strings.
+
+2020-12-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix BSD .include etc syntax in Makefiles
+
+       * lisp/progmodes/make-mode.el (makefile-bsdmake-statements): Fix
+       the BSD conditional syntax (bug#24000).
+       (makefile-make-font-lock-keywords): Allow calling without keywords.
+       (makefile-bsdmake-font-lock-keywords): Add the conditional syntax.
+
+            Makefile inclusion, conditional structures and for loops 
reminiscent of
+            the C programming language are provided in make.  All such 
structures are
+            identified by a line beginning with a single dot (`.') character.
+            Whitespace characters may follow this dot, e.g.,
+
+                  .include <file>
+            and
+                  .   include <file>
+
+            are identical constructs
+
+2020-12-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Bind `C-c C-d' to rmail-epa-decrypt in rmail
+
+       * doc/emacs/rmail.texi (Rmail Display): Mention the key
+       binding (bug#25411).
+
+       * lisp/mail/rmail.el (rmail-mode-map): Bind C-c C-d to
+       rmail-epa-decrypt.
+       (rmail-mode): Mention it.
+       (rmail-epa-decrypt): Don't mark a mail as decrypted unless we're
+       replacing it.
+
+       * lisp/mail/rmailsum.el (rmail-summary-mode-map): Bind C-c C-d.
+       (rmail-summary-epa-decrypt): New command.
+
+2020-12-12  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       New option gnus-registry-register-all
+
+       * lisp/gnus/gnus-registry.el (gnus-registry-register-all): If nil,
+       the registry won't automatically create new entries for all seen
+       messages. Defaults to t to preserve previous behavior.
+       (gnus-registry-handle-action): Don't automatically create entries; if
+       one doesn't exist, don't handle anything.
+       (gnus-registry-register-message-ids): Only register if this option is
+       t.
+       (gnus-registry-get-or-make-entry): Add optional no-create argument.
+       (gnus-registry-get-id-key): This "get" operation should only create an
+       entry if this option is t.
+       * doc/misc/gnus.texi: Documentation and news.
+
+2020-12-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/package.el (package-buffer-info): Improve error 
message
+
+       (package-strip-rcs-id): Return canonicalized version string.
+
+2020-12-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/fns.c (hash_string): Tweak the code further
+
+       Merge the two main branches; remove the `max` test and thus reduce
+       the "most steps" to 8 as written
+
+2020-12-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/vc/log-edit.el: Keep separator line thin even with line-numbers
+
+       (log-edit-font-lock-keywords): Disable line-number display on
+       the thin separator line.
+       (log-edit-mode): Adjust `font-lock-extra-managed-props` accordingly.
+       (log-edit-changelog-entries): Don't use a nil buffer-local
+       `change-log-default-name`.
+
+2020-12-12  Eli Zaretskii  <eliz@gnu.org>
+
+       Followup to recent changes in keyboard.c
+
+       * src/keyboard.c (prev_kbd_event): Now defined only if HAVE_X11.
+
+       * lisp/subr.el (while-no-input-ignore-events): Remove
+       'buffer-switch': no longer used or defined.  (Bug#5803)
+
+2020-12-12  Andrea Corallo  <akrl@sdf.org>
+
+       Normalize cstrs for cache hint effectiveness and test stability
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-normalize-valset)
+       (comp-union-valsets, comp-intersection-valsets)
+       (comp-normalize-typeset): New functions.
+       (comp-union-typesets, comp-intersect-typesets)
+       (comp-cstr-union-homogeneous-no-range, comp-cstr-union-1-no-mem):
+       Update to return normalized results.
+       * test/lisp/emacs-lisp/comp-cstr-tests.el
+       (comp-cstr-typespec-tests-alist): Normalize expected type specifiers.
+
+2020-12-12  Andrea Corallo  <akrl@sdf.org>
+
+       Add `comp-split-pos-neg' function
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-split-pos-neg): New function.
+       (comp-cstr-union-1-no-mem): Update to call `comp-split-pos-neg'.
+
+2020-12-12  Andrea Corallo  <akrl@sdf.org>
+
+       Enumerate type specifier tests to ease debugging
+
+       * test/lisp/emacs-lisp/comp-cstr-tests.el
+       (comp-cstr-typespec-tests-alist): Enumerate tests.
+
+       Acked-by: Andrea Corallo <akrl@sdf.org>
+
+2020-12-12  Andrea Corallo  <akrl@sdf.org>
+
+       Code rework add `comp-cstrs-homogeneous'
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstrs-homogeneous): New
+       function.
+       (comp-cstr-union-1-no-mem): Make use of.
+
+2020-12-12  Andrea Corallo  <akrl@sdf.org>
+
+       * test/src/comp-tests.el (comp-tests-bootstrap): Temp fix bootstrap 
test.
+
+2020-12-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some unused process.c variables
+
+       * src/process.c (wait_reading_process_output): Remove some
+       variables that are unused after the previous patch.
+
+2020-12-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       New variable `redisplay_adhoc_scroll_in_resize_mini_windows`
+
+       * src/xdisp.c (syms_of_xdisp): Define it.
+       (resize_mini_window): Obey it.
+
+2020-12-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/keyboard.c: Fix bug#5803.
+
+       A long time ago, `read_key_sequence` used to read the keymaps at the
+       start, so if something happened between this start and the moment
+       the user actually hits a key, `read_key_sequence` could end up using
+       the wrong keymaps.  To work around this problem, the code used
+       `record_asynch_buffer_change` to try and trigger `read_key_sequence`
+       to re-read the keymaps in some known cases.
+
+       Several years ago, `read_key_sequence` was changed so as to read the 
keymaps
+       only once the user hits a key, making this machinery now redundant
+       (and also harmful apparently in bug#5803 because it introduces
+       "spurious" events).
+
+       So we here remove `record_asynch_buffer_change` and the
+       `BUFFER_SWITCH_EVENT` and `Qbuffer_switch` pseudo-events it generated.
+
+       * src/termhooks.h (enum event_kind): Delete `BUFFER_SWITCH_EVENT`.
+       * src/keyboard.c: (record_asynch_buffer_change): Delete function.
+       (syms_of_keyboard): Delete `Qbuffer_switch`.
+       (force_auto_save_soon, readable_events)
+       (kbd_buffer_store_buffered_event, kbd_buffer_get_event)
+       (make_lispy_event):
+       * src/xterm.c (handle_one_xevent):
+       * src/w32term.c (w32_read_socket):
+       * src/process.c (wait_reading_process_output)
+       (read_and_dispose_of_process_output, exec_sentinel): Simplify 
accordingly.
+
+2020-12-12  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: Handle several K&R parameters per declaration
+
+       This fixes bug #45160.
+
+       * lisp/progmodes/cc-engine.el (c-in-knr-argdecl): Reformulate the 
latter part
+       of this function using c-do-declarators.
+
+2020-12-12  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-12-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Alter the "Redundant pcase patter" warning message
+
+       * lisp/emacs-lisp/pcase.el (pcase--expand): Make the "Redundant
+       pcase pattern" warning less vague (bug#31350).
+
+2020-12-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make elint load `require'd packages
+
+       * lisp/emacs-lisp/elint.el (elint-require-form): New function to
+       load files that are `require'd (bug#27006).
+       (elint-special-forms): Add function.
+
+2020-12-12  Zajcev Evgeny  <zevlg@yandex.ru>
+
+       Explicitly specify svg base_uri using `:base-uri' image property
+
+       * src/image.c (svg_load): Check `:base-uri' image property to
+       explicitly set base_uri for images embedded into SVG
+       (enum svg_keyword_index):
+       (svg_format): Add :base-uri.
+       * lisp/svg.el (svg-embed-base-uri-image): New function to embed images
+       located relative to images `:base-uri'
+
+2020-12-12  Alan Third  <alan@idiocy.org>
+
+       Revert "Explicitly specify svg base_uri using `:base-uri' image 
property"
+
+       This reverts commit a8e2143a5c03785742464406306fda7fce6caf04.
+
+       I applied the incorrect version of the patch.
+
+2020-12-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Offer to save tutorial position on Emacs exit
+
+       * lisp/tutorial.el (tutorial--buffer): New variable (bug#27998).
+       (tutorial--save-on-kill): Use it.
+       (help-with-tutorial): Set it and add new function to
+       kill-emacs-query-functions.
+
+2020-12-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Update Info-toc-build parsing
+
+       * lisp/info.el (Info-toc-build): Update to understand EMDASH
+       instead of a hyphen in the detailed node listing (bug#28074).
+
+2020-12-12  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in python.el
+
+       * lisp/progmodes/python.el: Require Emacs 24.2 instead of 24.1.
+       (python-indent-guess-indent-offset)
+       (python-shell-font-lock-with-font-lock-buffer)
+       (python-shell-font-lock-turn-on)
+       (python-shell-font-lock-turn-off, python-shell-font-lock-toggle)
+       (python-shell-comint-watch-for-first-prompt-output-filter)
+       (inferior-python-mode, python-shell-completion-native-turn-off)
+       (python-shell-completion-native-turn-on)
+       (python-pdbtrack-comint-output-filter-function, python-mode):
+       Prefer setq-local.
+
+2020-12-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Preserve point in dired buffers in dired-*-find-file* commands
+
+       * lisp/dired.el (dired--find-file): New function (bug#28949).
+       (dired-find-file): Use it.
+       (dired-mouse-find-file): Ditto.
+       (dired-find-file-other-window): Ditto.
+
+2020-12-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make dired-toggle-read-only check whether the directory is writable
+
+       * lisp/dired.el (dired-toggle-read-only): Check that the directory
+       is writable (bug#29412).
+
+2020-12-12  Eli Zaretskii  <eliz@gnu.org>
+
+       Unbreak the MS-Windows build broken by recent changes
+
+       * src/image.c (rsvg_handle_set_dpi_x_y) [WINDOWSNT]: DEF_DLL_FN it.
+       (init_svg_functions): LOAD_DLL_FN rsvg_handle_set_dpi_x_y.
+       <rsvg_handle_set_dpi_x_y>: Define as a macro
+
+2020-12-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve the documentation of marker handling when reverting
+
+       * doc/lispref/backups.texi (Reverting): Mention markers from
+       non-file sources (bug#30028).
+
+       * lisp/files.el (revert-buffer): Mention what happens with markers
+       (bug#30028).
+
+       * src/fileio.c (Finsert_file_contents): Say a bit more about what
+       markers are restored (bug#30028).
+
+2020-12-12  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve support for 'memory-report' on MS-Windows
+
+       * src/w32term.c (w32_image_size): New function.
+       * src/image.c (image_frame_cache_size) [HAVE_NTGUI]: Support
+       reporting the size of frame image cache.
+       (image_frame_cache_size, Fimage_cache_size): The total size is
+       now of the type 'size_t', not 'int'.
+
+2020-12-12  Pankaj Jangid  <pankaj@codeisgreat.org>
+
+       Allow customizing the Gnus summary thread indicators
+
+       * doc/misc/gnus.texi (Summary Buffer Lines): Document them.
+
+       * lisp/gnus/gnus-sum.el (gnus-summary-prepare-threads): Use them.
+
+       * lisp/gnus/gnus-sum.el (gnus-sum-opening-bracket)
+       (gnus-sum-closing-bracket, gnus-sum-opening-bracket-adopted)
+       (gnus-sum-closing-bracket-adopted): New variables.
+
+2020-12-12  Alan Third  <alan@idiocy.org>
+
+       Improve some NS drawing code
+
+       * src/nsterm.m (ns_update_end): There's no need to schedule a redraw
+       if nothing has been changed.
+       (ns_set_vertical_scroll_bar):
+       (ns_set_horizontal_scroll_bar): Fix the logic for clearing under the
+       scrollbars.
+       (ns_clear_under_internal_border): No need to clip, the default
+       clipping rectangle will be fine.
+
+2020-12-12  Alan Third  <alan@idiocy.org>
+
+       Use real DPI when rendering SVGs (bug#45124)
+
+       * src/image.c (svg_css_length_to_pixels): Pass in a DPI value instead
+       of using a hard coded value.
+       (svg_load_image): Set the DPI on the rsvg_handle, and pass it to
+       svg_css_length_to_pixels.
+
+2020-12-12  Zajcev Evgeny  <zevlg@yandex.ru>
+
+       Explicitly specify svg base_uri using `:base-uri' image property
+
+       * src/image.c (svg_load): Check `:base-uri' image property to
+         explicitly set base_uri for images embedded into SVG
+
+2020-12-12  Alan Third  <alan@idiocy.org>
+
+       Fix crash when using XRender and restoring image from X (bug#44930)
+
+       * src/dispextern.h (struct image): Add original dimension elements.
+       * src/image.c (image_set_transform): Store the original dimensions.
+       (image_get_x_image): If we're using transforms use the original
+       dimensions with XGetImage.
+
+2020-12-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/thunk.el (thunk-let*): Don't modify `bindings`
+
+2020-12-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/play/dunnet.el: Make it so loading the file is harmless
+
+       Move comments into docstrings while at it.
+
+       (dun-batch): New function.
+
+2020-12-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix copyright line
+
+2020-12-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       button-buttonize doc string clarification
+
+       * lisp/button.el (button-buttonize): Clarify what happens when
+       DATA isn't present.
+
+2020-12-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix image-cache-size crash
+
+       * src/image.c (image_frame_cache_size): Ensure that img->pixmap is
+       in use before trying to access it.
+
+2020-12-11  Stefan Kangas  <stefan@marxist.se>
+
+       * src/fns.c (Fbuffer_hash): Doc fix.  (Bug#45178)
+
+2020-12-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Also sort the totals section by size
+
+       * lisp/emacs-lisp/memory-report.el (memory-report): Sort the
+       totals by size, too.
+
+2020-12-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak memory-report--format
+
+       * lisp/emacs-lisp/memory-report.el (memory-report--format): Make
+       everything line up, even when there's "1023.4kB".
+
+2020-12-11  F. Jason Park  <jp@neverwas.me>  (tiny change)
+
+       Append incremental message segments in socks-filter
+
+       * lisp/net/socks.el (socks-filter): Preserve the order data arrive
+       instead of semi-reversing it (bug#45162).
+
+2020-12-11  Pankaj Jangid  <pankaj@codeisgreat.org>
+
+       docstring: If FRAME is nil, it defaults to selected frame.
+
+       * src/frame.c (Fset_frame_size): Clarify what a nil FRAME
+       parameter means (bug#45170).
+
+2020-12-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify fortran-beginning-of-subprogram doc string after change
+
+       * lisp/progmodes/fortran.el (fortran-beginning-of-subprogram):
+       Clarify doc string (bug#33208).
+
+2020-12-11  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/progmodes/python.el: Bump version.
+
+2020-12-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix compilation of image.c on non-Cairo systems
+
+       * src/image.c (image_frame_cache_size): pixmap->width etc is only
+       defined on Cairo.  Return 0 for now on other systems.
+
+2020-12-11  Roland Winkler  <winkler@gnu.org>
+
+       bibtex-autokey-get-year: Follow iso8601
+
+       * lisp/textmodes/bibtex.el (bibtex-autokey-get-year): Follow
+       iso8601 (bug#36252).
+
+2020-12-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix object-interval tests
+
+       * test/src/fns-tests.el (object-intervals): Fix tests.
+
+2020-12-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix parsing error in exif
+
+       * lisp/image/exif.el (exif--parse-exif-chunk): The offset is a
+       four-byte number.  Reported by Alan Light <lightalan@gmail.com>.
+
+2020-12-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a new command `memory-report'
+
+       * doc/lispref/internals.texi (Garbage Collection): Document it.
+       * lisp/emacs-lisp/memory-report.el: New package.
+
+2020-12-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add new function `object-intervals'
+
+       * doc/lispref/text.texi (Examining Properties): Document it.
+       * src/fns.c (Fobject_intervals): New defun.
+       (collect_interval): New function.
+
+2020-12-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add new function 'image-cache-size'
+
+       * src/image.c (Fimage_cache_size): New defun.
+       (image_frame_cache_size): New function.
+
+2020-12-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a new function `button-buttonize'
+
+       * doc/lispref/display.texi (Manipulating Buttons): Document it.
+
+       * lisp/button.el (button-buttonize): Implement it.
+
+2020-12-11  Michael Albinus  <michael.albinus@gmx.de>
+
+       * lisp/battery.el (battery--upower-devices): Protect the D-Bus call.
+
+       (Bug#45163)
+
+2020-12-11  Tassilo Horn  <tsdh@gnu.org>
+
+       Bind k to image-kill-buffer in doc-view-mode-map.
+
+       * lisp/doc-view.el (doc-view-mode-map): Bind k to image-kill-buffer.
+       The binding k -> doc-view-kill-proc-and-buffer has been removed in
+       2015 and the function been made an obsolete function alias to
+       image-kill-buffer (bug#45157).
+
+2020-12-11  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Fix quoting in gnus-buffer-configuration
+
+       * lisp/gnus/gnus-win.el (gnus-buffer-configuration): Include
+       shell-command-buffer-name value rather than symbol in pipe
+       configuration.  (Bug#39138, bug#45154)
+
+2020-12-11  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Be more graceful about handling Gnus search errors
+
+       One search may be applied to several servers: don't let one server's
+       error derail the whole process.
+
+       * lisp/gnus/gnus-search.el (gnus-search-config-error): Define new
+       error.
+       (gnus-search-run-search, gnus-search-server-to-engine): Raise this
+       specific error as appropriate.
+       (gnus-search-run-query): Catch this error and effectively demote it.
+
+2020-12-10  Stefan Kangas  <stefan@marxist.se>
+
+       Remove some ancient Emacs compat code from cperl-mode
+
+       This variable has this value by default since Emacs 19.34.
+
+       * lisp/progmodes/cperl-mode.el (cperl-mode): Remove some compat code.
+
+2020-12-10  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in cperl-mode.el
+
+       * lisp/progmodes/cperl-mode.el (cperl-mode, cperl-info-buffer)
+       (cperl-setup-tmp-buf, cperl-emulate-lazy-lock): Prefer setq-local.
+
+2020-12-10  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in bibtex-style.el
+
+       * lisp/textmodes/bibtex-style.el (bibtex-style-mode): Prefer
+       setq-local.
+
+2020-12-10  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid segfaults in pos_visible_p
+
+       * src/xdisp.c (pos_visible_p): Don't try accessing the glyphs
+       produced by iterator whose glyph_row was set to NULL; instead,
+       record the X coordinate before the display string when moving past
+       it, and use the recorded coordinate if needed.  (Bug#45156)
+
+2020-12-10  Mattias Engdegård  <mattiase@acm.org>
+
+       Fupcase no longer maps ?ß to itself (bug#11309)
+
+       * test/src/casefiddle-tests.el (casefiddle-tests-char-casing):
+       (upcase ?ß) now returns ?ẞ (U+7838), partly for technical reasons but
+       the previous behaviour was arbitrary and arguably less useful.
+       Correct upcasing of ß is normally SS, which is what Fupcase returns if
+       given a string, or (for special purposes) ẞ.
+
+2020-12-10  Juri Linkov  <juri@linkov.net>
+
+       Allow creating a new tab from the minibuffer (bug#45072)
+
+       * lisp/tab-bar.el (tab-bar-new-tab-to): Select the original window
+       when selected window is the minibuffer.
+
+2020-12-10  Dmitry Gutov  <dgutov@yandex.ru>  (tiny change)
+
+       Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
+
+       * lisp/vc/vc-hg.el (vc-hg-working-revision):
+       Use 'hg log -T' instead of 'hg parent' (bug#36534).
+
+2020-12-09  Stefan Kangas  <stefan@marxist.se>
+
+       Fix thinko in my previous commit
+
+       * lisp/pcomplete.el (pcomplete-comint-setup): Fix thinko in my
+       previous commit.  This was not a quoted symbol but a variable, and
+       therefore cannot use setq-local.
+
+2020-12-09  Dmitry Gutov  <dgutov@yandex.ru>
+
+       * lisp/progmodes/xref.el: Bump the version.
+
+2020-12-09  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Allow specifying the project to switch to programmatically
+
+       * lisp/progmodes/project.el (project-switch-project):
+       Allow specifying the project to switch to programmatically
+       (bug#45134).
+
+2020-12-09  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Add missing defcustom keywords to new variables
+
+       * lisp/progmodes/xref.el (xref-search-program-alist)
+       (xref-search-program): Add :version and :package-version.
+
+2020-12-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify `scroll-preserve-screen-position' doc string
+
+       * src/window.c (syms_of_window): Clarify the doc string (bug#7910).
+
+2020-12-09  Juri Linkov  <juri@linkov.net>
+
+       Remove isearch-input-method-local-p and always set buffer-local 
input-method
+
+       * lisp/isearch.el (isearch-input-method-local-p): Remove defvar.
+       (isearch-mode): Don't set isearch-input-method-local-p.
+       Set buffer-local input-method-function to nil.
+       (isearch-done): When isearch-input-method-function is still non-nil,
+       set the buffer-local value of input-method-function.  (Bug#45005)
+
+       * lisp/international/isearch-x.el 
(isearch-toggle-specified-input-method)
+       (isearch-toggle-input-method, isearch-transient-input-method):
+       Don't set isearch-input-method-local-p to t.  Set buffer-local
+       input-method-function to nil.
+
+       * lisp/language/korea-util.el (isearch-toggle-korean-input-method)
+       (isearch-hangul-switch-symbol-ksc, isearch-hangul-switch-hanja):
+       Don't set isearch-input-method-local-p to t.  Set buffer-local
+       input-method-function to nil.
+
+2020-12-09  Juri Linkov  <juri@linkov.net>
+
+       Support highlighting of ripgrep output (bug#44983)
+
+       * etc/grep.txt: Add ripgrep samples.
+
+       * lisp/progmodes/grep.el (grep-match-regexp): Highlight ripgrep matches 
too.
+       (grep-regexp-alist): Remove $ to highlight ripgrep binary file matches.
+
+2020-12-09  Mattias Engdegård  <mattiase@acm.org>
+
+       Stricter gradle-kotlin message pattern
+
+       * lisp/progmodes/compile.el (compilation-error-regexp-alist-alist):
+       Rule 'gradle-kotlin': don't be more forgiving than necessary; we know
+       exactly what the output looks like (see
+       https://github.com/JetBrains/kotlin/commit/\
+       ffe8ae3840d7b9bdc82170c8181031f05ced68bd) and there is no reason to
+       risk mismatches or expensive backtracking (bug#18109).  Recognise
+       'info' level messages.  Convert to rx.
+
+2020-12-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Include the keymap in the gud-mode doc string
+
+       * lisp/progmodes/gud.el (gud-mode): Add the gud keymap to the end
+       of the doc string for easier access (bug#31406).
+
+2020-12-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       `pdb' doc string clarification
+
+       * lisp/progmodes/gud.el (pdb): Mention that this command is for
+       debugging Python scripts.
+
+2020-12-09  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       c0b3e38d7c Update publicsuffix.txt from upstream
+       3fe6cea6e0 * lisp/vc/vc.el: Update args of backend API calls in the h...
+
+2020-12-09  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       32090a3de4 Improve documentation of streams in batch mode
+       34feded008 Support ks_c_5601-1987 encoding
+       da00a6f317 Fix Xaw widget text disappearing when built with cairo (bu...
+       6916e7954a Improve documentation of 'ps-print-color-p'
+       6663b2f211 ; * lisp/simple.el (move-beginning-of-line): Doc fix.
+       a4dd03ebe9 ; * src/charset.c (Fmap_charset_chars): Doc fix.
+       d86cc3ffcb ; * src/chartab.c, src/lisp.h: Fix typos in comments.
+
+2020-12-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix mark-defun in fortran-mode
+
+       * lisp/progmodes/fortran.el (fortran-beginning-of-subprogram):
+       Make mark-defun work (bug#33208).
+
+2020-12-09  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve predictability of 'scroll-preserve-screen-position'
+
+       * src/window.c (window_scroll_pixel_based): Compute the new
+       window-start more precisely when 'scroll-preserve-screen-position'
+       is non-nil.  (Bug#8355)
+
+2020-12-09  Eli Zaretskii  <eliz@gnu.org>
+
+       Update docs of 'defvar' and 'defface'
+
+       * doc/lispref/display.texi (Defining Faces):
+       * doc/lispref/variables.texi (Defining Variables): Update the
+       descriptions of 'defvar' and 'defface' per recent changes in
+       'eval-last-sexp'.  (Bug#45125)
+
+2020-12-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix info mode fontification of built-in (*note Built-ins::)
+
+       * lisp/info.el (Info-fontify-node): Don't interpret things like
+       "built-in" as being the word "in" (bug#34661).
+
+2020-12-09  Serge Tupchii  <serge.tupchii@protonmail.com>  (tiny change)
+
+       Fix crash (segfault) in etags on generating tags for Erlang files
+
+       * lib-src/etags.c: Set allocated and lastlen to zero, after
+       freeing last ptr in Erlang_functions to prevent dereferencing NULL
+       pointer (bug#45122).
+
+
+       (cherry picked from commit 2d8f0364fcd1d5dad2b82dd3a9af870b03854547)
+
+2020-12-09  Mattias Engdegård  <mattiase@acm.org>
+
+       Recognise ß properly as a lower-case letter (bug#11309)
+
+       ß was incorrectly treated as a caseless character and thus not matched
+       by the regexp [[:lower:]] (or, in case-folding mode, [[:upper:]]).
+       The reason is that the upcase table maps it to itself, which can be
+       remedied by mapping it to ẞ (U+7838) instead.  Doing so does not
+       affect upcasing since the special-uppercase property maps it to SS.
+
+       * lisp/international/characters.el (tbl): Map ß to ẞ in the upcase
+       table.
+       * test/src/regex-emacs-tests.el (regexp-eszett): Uncomment previously
+       failing tests.  Add checks to make sure that case transformations
+       remain valid.
+
+2020-12-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       cl-pushnew manual clarification
+
+       * doc/misc/cl.texi (Modify Macros): Don't claim that cl-pushnew
+       uses eql.
+       (Lists as Sets): Mention that eql is the default comparison function.
+
+2020-12-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       cl-defmethod doc string clarification
+
+       * lisp/emacs-lisp/cl-generic.el (cl-defmethod): Clarify the doc
+       string, and give an example (bug#42322).
+
+2020-12-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify the default-boundp doc string
+
+       * src/data.c (Fdefault_boundp): Doc string clarification (bug#44141).
+
+2020-12-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make ediff offer to create files it's inferring
+
+       * lisp/vc/ediff-ptch.el (ediff-fixup-patch-map): Offer to create
+       the inferred file name (if it doesn't exist) (bug#8009).  This allows
+       applying a patch that creates a file.
+
+2020-12-09  Michael Albinus  <michael.albinus@gmx.de>
+
+       Improve tests for gio file notifications
+
+       * .gitlab-ci.yml (test-filenotify-gio): Call "make -k".
+
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-handle-file-notify-add-watch):
+       Set connection property "gio-file-monitor".
+
+       * lisp/net/tramp-sh.el (tramp-get-remote-gio-file-monitor): New defun.
+       (tramp-sh-handle-file-notify-add-watch): Use it.
+
+       * test/lisp/filenotify-tests.el (file-notify--test-read-event): 
Simplify.
+       (file-notify--test-monitor): Handle also remote "gio monitor".
+       (file-notify-test03-events, file-notify-test04-autorevert)
+       (file-notify-test05-file-validity, file-notify-test08-backup)
+       (file-notify-test09-watched-file-in-watched-dir):
+       Handle GKqueueFileMonitor.
+
+2020-12-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Filter revoked keys when saving files
+
+       * lisp/epa-file.el (epa-file-write-region): Use it to select a
+       non-revoked key (bug#22359).
+
+       * lisp/epg.el (epg--filter-revoked-keys): New function.
+
+2020-12-09  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in most files
+
+       * lisp/apropos.el (apropos-print):
+       * lisp/buff-menu.el (Buffer-menu-mode):
+       * lisp/calc/calc.el (calc-trail-buffer):
+       * lisp/chistory.el (command-history-mode):
+       * lisp/dabbrev.el:
+       * lisp/dframe.el (dframe-frame-mode):
+       * lisp/doc-view.el (doc-view-presentation-mode):
+       * lisp/ebuff-menu.el (electric-buffer-menu-mode)
+       (electric-buffer-update-highlight):
+       * lisp/edmacro.el (edit-kbd-macro):
+       * lisp/face-remap.el (buffer-face-set, buffer-face-toggle):
+       * lisp/files.el:
+       (find-file-noselect-1, hack-local-variables-confirm)
+       (set-visited-file-name, revert-buffer--default):
+       * lisp/filesets.el (filesets-spawn-external-viewer):
+       * lisp/find-dired.el (find-dired):
+       * lisp/find-lisp.el (find-lisp-find-dired-internal):
+       * lisp/finder.el (finder-mode):
+       * lisp/font-core.el (font-lock-default-function):
+       * lisp/format.el (format-annotate-function):
+       * lisp/help-fns.el (describe-variable):
+       * lisp/help-mode.el (help-mode):
+       * lisp/icomplete.el (icomplete-minibuffer-setup)
+       (icomplete--in-region-setup):
+       * lisp/ido.el (ido-completion-help, ido-tidy):
+       * lisp/international/robin.el (robin-activate):
+       * lisp/leim/quail/hangul.el (hangul-input-method-activate):
+       * lisp/leim/quail/uni-input.el (ucs-input-activate):
+       * lisp/man.el (Man-mode):
+       * lisp/master.el (master-set-slave):
+       * lisp/minibuffer.el (minibuffer-completion-help)
+       (read-file-name-default):
+       * lisp/outline.el (outline-minor-mode):
+       * lisp/pcomplete.el (pcomplete-comint-setup):
+       * lisp/proced.el (proced-mode):
+       * lisp/recentf.el (recentf-edit-list, recentf-open-files-items):
+       * lisp/replace.el (occur-1):
+       * lisp/reveal.el (reveal-mode):
+       * lisp/ruler-mode.el (ruler--save-header-line-format):
+       * lisp/scroll-lock.el (scroll-lock-mode):
+       * lisp/startup.el (normal-top-level, normal-splash-screen):
+       * lisp/strokes.el (strokes-list-strokes):
+       * lisp/thumbs.el (thumbs-insert-image, thumbs-show-thumbs-list):
+       * lisp/tree-widget.el (tree-widget-set-theme):
+       * lisp/window.el (read-buffer-to-switch):
+       * lisp/xwidget.el (xwidget-webkit-begin-edit-textarea): Prefer
+       setq-local.
+
+2020-12-09  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in dired extensions
+
+       * lisp/dired-aux.el (dired-diff, dired-compare-directories)
+       (dired-do-create-files, dired-isearch-filenames):
+       * lisp/dired-x.el (dired-virtual, dired-vm):
+       * lisp/wdired.el (wdired-change-to-wdired-mode)
+       (wdired-change-to-dired-mode, wdired-preprocess-perms):
+
+2020-12-09  Stefan Kangas  <stefan@marxist.se>
+
+       Update publicsuffix.txt from upstream
+
+       * etc/publicsuffix.txt: Update from
+       https://publicsuffix.org/list/public_suffix_list.dat
+       dated 2020-11-30 21:57:25 UTC.
+
+2020-12-09  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix [:upper:] and [:lower:] for Unicode characters (bug#11309)
+
+       * src/regex-emacs.c (execute_charset): Add canon_table argument to
+       allow expression of a correct predicate for [:upper:] and [:lower:].
+       (mutually_exclusive_p, re_match_2_internal): Pass extra argument.
+       * test/src/regex-emacs-tests.el (regexp-case-fold, regexp-eszett):
+       New tests.  Parts of regexp-eszett still fail and are commented out.
+
+2020-12-09  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in some remaining progmodes
+
+       * lisp/progmodes/dcl-mode.el (dcl-mode):
+       * lisp/progmodes/hideif.el (hide-ifdef-mode)
+       (hide-ifdef-toggle-shadowing):
+       * lisp/progmodes/ps-mode.el (ps-mode, ps-run-mode):
+       * lisp/progmodes/xscheme.el (xscheme-start)
+       (local-set-scheme-interaction-buffer, scheme-interaction-mode):
+       Prefer setq-local.
+
+2020-12-09  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in gdb-mi.el
+
+       * lisp/progmodes/gdb-mi.el (gdb--check-interpreter, gdb)
+       (gdb-init-buffer, gdb-get-buffer-create, gdb-threads-mode)
+       (gdb-memory-mode, gdb-disassembly-mode, gdb-frames-mode): Prefer 
setq-local.
+
+2020-12-09  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in etags.el
+
+       * lisp/progmodes/etags.el (initialize-new-tags-table)
+       (etags-recognize-tags-table, tags-recognize-empty-tags-table):
+       Prefer setq-local.
+
+2020-12-09  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in cfengine.el
+
+       * lisp/progmodes/cfengine.el (cfengine-common-settings)
+       (cfengine3-mode, cfengine2-mode): Prefer setq-local.
+
+2020-12-09  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in sql.el
+
+       * lisp/progmodes/sql.el (sql--oracle-show-reserved-words)
+       (sql-product-font-lock, sql-list-all, sql-mode)
+       (sql-interactive-mode, sql-product-interactive): Prefer
+       setq-local.
+
+2020-12-09  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in font-lock.el
+
+       * lisp/font-lock.el:
+       (font-lock-add-keywords, font-lock-turn-on-thing-lock)
+       (font-lock-fontify-syntactic-keywords-region)
+       (font-lock-set-defaults): Prefer setq-local.
+
+2020-12-09  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/progmodes/sql.el: Remove redundant URL.
+
+2020-12-09  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Make abbrev-tests.el more deterministic
+
+       * test/lisp/abbrev-tests.el (abbrev--table-symbols-test): Don't rely
+       on order of symbols in obarray.
+
+2020-12-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make uncache_image slightly more efficient
+
+       * src/image.c (uncache_image): Extremely minor speed-up: Only
+       compute the hash once.
+
+2020-12-09  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/fns.c: Remove left over include
+
+2020-12-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Restore Emacs 27 image cache semantics
+
+       * src/image.c (equal_lists): Remove.
+       (search_image_cache): Use Fequal instead of equal_lists.
+       Benchmarking shows no measurable time difference, and this
+       restores the cache semantics from Emacs 27 (where file names
+       didn't have to be EQ for the cache to be used).
+
+2020-12-09  João Távora  <joaotavora@gmail.com>
+
+       Remove interactive spec from internal eldoc--format-doc-buffer
+
+       Per bug#43609.
+
+       * lisp/emacs-lisp/eldoc.el (eldoc--format-doc-buffer): Remove
+       useless interactive spec.
+
+2020-12-09  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/fns.c (hash_string): Speed up on large strings
+
+2020-12-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       term.el comment update
+
+       * lisp/term.el: Fix wrong command name in the comments (bug#7041).
+
+2020-12-08  Serge Tupchii  <serge.tupchii@protonmail.com>  (tiny change)
+
+       Fix crash (segfault) in etags on generating tags for Erlang files
+
+       * lib-src/etags.c: Set allocated and lastlen to zero, after
+       freeing last ptr in Erlang_functions to prevent dereferencing NULL
+       pointer (bug#45122).
+
+2020-12-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make rcirc nick renaming heed nickname max lengths
+
+       * lisp/net/rcirc.el (rcirc-server-parameters): New variable (bug#6795).
+       (rcirc-connect): Set it.
+       (rcirc-handler-433): Use the length from the server.
+       (rcirc-handler-005): Collect server data.
+       (rcirc-server-parameter-value): New utility function.
+       (rcirc--make-new-nick): New function.
+
+2020-12-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make hexl scrolling commands work more like the normal ones
+
+       * lisp/hexl.el (hexl-scroll-down):
+       (hexl-scroll-up): Heed `next-screen-context-lines' (bug#7031).
+
+2020-12-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix scrolling in hexl-mode when ruler-mode is on
+
+       * lisp/hexl.el (hexl-scroll-down):
+       (hexl-scroll-up): Take ruler-mode into account when computing the
+       number of lines (bug#7031).  These commands would previously jump
+       one line too many by default, skipping one line.
+
+2020-12-08  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of 'backtrace-on-error-noninteractive'
+
+       * src/eval.c (syms_of_eval) <backtrace-on-error-noninteractive>:
+       Format the doc string according to conventions.
+
+       * etc/NEWS: Improve formatting and wording of the entry describing
+       'backtrace-on-error-noninteractive.
+
+2020-12-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make the history traversal functions in coming more regular
+
+       * lisp/comint.el (comint-previous-matching-input): Allow restoring
+       the input on wraps (bug#7885).
+       (comint-previous-matching-input-from-input): Restore input on wraps.
+
+2020-12-08  Boruch Baum  <boruch_baum@gmx.com>
+
+       Make table-fixed-width-mode work again
+
+       * lisp/textmodes/table.el (table--update-cell): Make
+       table-fixed-width-mode work (bug#18183).
+
+2020-12-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Use the proper face for the Gnus mode line id
+
+       * lisp/gnus/gnus-sum.el (gnus-set-mode-line):
+       * lisp/gnus/gnus-group.el (gnus-group-set-mode-line): Use the
+       mode-line-buffer-id face on the buffer id.
+
+2020-12-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Simplify gnus-mode-line-buffer-identification
+
+       * lisp/gnus/gnus.el (gnus-mode-line-image-cache): Remove.
+       (gnus-mode-line-buffer-identification): Use the find-image cache.
+
+2020-12-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Cache toolbar icon data paths
+
+       * lisp/image.el (find-image): Add an optional CACHE parameter.
+       (find-image--cache): New variable.
+
+       * lisp/tool-bar.el (tool-bar--image-expression): Use cached data
+       to avoid looking up the image files on each refresh.
+
+2020-12-08  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in grep.el
+
+       * lisp/progmodes/grep.el (grep-process-setup, grep-mode): Prefer
+       setq-local.
+
+2020-12-08  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in meta-mode.el
+
+       * lisp/progmodes/meta-mode.el (meta-common-mode, metafont-mode)
+       (metapost-mode): Prefer setq-local.
+
+2020-12-08  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in compile.el
+
+       * lisp/progmodes/compile.el (compile-command, compilation-start)
+       (compilation-mode, compilation-setup, compilation-filter)
+       (compilation-forget-errors): Prefer setq-local.
+
+2020-12-08  Stefan Kangas  <stefan@marxist.se>
+
+       * admin/nt/dist-build/build-dep-zips.py: Remove unused import.
+
+2020-12-08  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in tests
+
+       * test/lisp/allout-tests.el (allout-test-resumption-prior-value-resumed)
+       (allout-test-resumption-multiple-holds)
+       (allout-test-resumption-unbinding):
+       * test/lisp/emacs-lisp/faceup-resources/faceup-test-mode.el
+       (faceup-test-mode):
+       * test/lisp/epg-tests.el (with-epg-tests):
+       * test/src/data-tests.el (binding-test-buffer-A): Prefer setq-local.
+
+2020-12-08  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in term.el
+
+       * lisp/term.el (term-mode, term-exec, term-emulate-terminal)
+       (term-process-pager): Prefer setq-local.
+
+2020-12-08  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in shell.el
+
+       * lisp/shell.el (shell-completion-vars, shell-mode): Prefer
+       setq-local.
+
+2020-12-08  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in speedbar.el
+
+       * lisp/speedbar.el (speedbar-frame-mode, speedbar-mode)
+       (speedbar-add-localized-speedbar-support): Prefer setq-local.
+
+2020-12-08  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in newcomment.el
+
+       * lisp/newcomment.el (comment-inline-offset)
+       (comment-normalize-vars): Prefer setq-local.
+
+2020-12-08  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/locate.el (locate, locate-mode): Prefer setq-local.
+
+       * lisp/array.el (array-mode): Prefer setq-local.
+
+2020-12-08  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in simple.el
+
+       * lisp/simple.el (read-extended-command, goto-history-element)
+       (minibuffer-history-isearch-setup, read-shell-command)
+       (visual-line-mode, completion-setup-function, read-only-mode)
+       (visible-mode): Prefer setq-local.
+
+2020-12-07  Philipp Stephani  <phst@google.com>
+
+       Fix bug in how ERT invokes its debugger.
+
+       The debugger needs to receive a list of the error symbol and data;
+       cf. the documentation of the `debugger' variable.  This bug manifested
+       itself in ERT forms such as (should (integerp (ert-fail "Boo"))),
+       which resulted in an incorrect condition object.  Note that forms such
+       as (should (ert-fail "Boo")) weren't affected because they wouldn't
+       use the `ert--should-signal-hook'.
+
+       * lisp/emacs-lisp/ert.el (ert--should-signal-hook): Call debugger
+       with the right arguments.
+
+       * test/lisp/emacs-lisp/ert-tests.el (ert-test-fail-inside-should):
+       Add unit test.
+
+2020-12-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Avoid problems when calling desktop-read twice
+
+       * lisp/desktop.el (desktop-read): Don't reload the desktop file if
+       it's already been loaded, because the later query may lead to
+       desktop-dirname being set to nil (bug#9765).
+
+2020-12-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make previous Fkill_emacs change safer
+
+       * src/emacs.c (Fkill_emacs): Don't run `kill-emacs-hook' if it's nil.
+
+2020-12-07  Daniel Martín  <mardani29@yahoo.es>
+
+       Add commands xref-next-group and xref-prev-group
+
+       * lisp/progmodes/xref.el (xref-next-group): New command that navigates
+       to the first item of the next xref group (typically a file).
+       (xref-prev-group): New command that navigates
+       to the first item of the next xref group (typically a file).
+       (xref--xref-buffer-mode-map): Bound the new commands to 'N' and 'P',
+       respectively.
+       * doc/emacs/maintaining.texi (Xref Commands): Document the new
+       commands in the Emacs manual.
+       * etc/NEWS: Announce them (bug#45089).
+
+2020-12-07  Alyssa Ross  <hi@alyssa.is>  (tiny change)
+
+       Only use the comint environment in comint-derived modes
+
+       * lisp/progmodes/compile.el (compilation-start): Only use the
+       comint environment in comint-derived modes (bug#45095).
+
+2020-12-07  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in calendar/*.el
+
+       * lisp/calendar/calendar.el (calendar-mode):
+       * lisp/calendar/diary-lib.el (diary-list-entries, diary-mode):
+       (diary-fancy-display-mode): Prefer setq-local.
+
+2020-12-07  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in gnus/*.el
+
+       * lisp/gnus/gnus-agent.el (gnus-agent-mode)
+       (gnus-agent-get-undownloaded-list, gnus-agent-open-history):
+       * lisp/gnus/gnus-art.el (gnus-article-setup-highlight-words)
+       (gnus-article-mode, gnus-article-setup-buffer, defsubst)
+       (gnus-article-describe-bindings, gnus-article-edit-mode):
+       * lisp/gnus/gnus-cus.el (gnus-custom-mode, gnus-group-customize)
+       (gnus-score-customize, gnus-agent-customize-category):
+       * lisp/gnus/gnus-group.el (gnus-group-make-tool-bar):
+       * lisp/gnus/gnus-msg.el (gnus-setup-message)
+       (gnus-summary-news-other-window, gnus-configure-posting-styles):
+       * lisp/gnus/gnus-salt.el (gnus-pick-mode, gnus-binary-mode):
+       * lisp/gnus/gnus-score.el (gnus-score-edit-current-scores)
+       (gnus-score-edit-file):
+       * lisp/gnus/gnus-srvr.el (gnus-server-mode):
+       * lisp/gnus/gnus-start.el (gnus-no-server-1)
+       (gnus-dribble-read-file, gnus-save-newsrc-file)
+       (gnus-gnus-to-newsrc-format):
+       * lisp/gnus/gnus-sum.el (gnus-summary-make-tool-bar)
+       (gnus-summary-mode, gnus-summary-setup-buffer)
+       (gnus-select-newsgroup, gnus-summary-edit-article)
+       (gnus-summary-setup-default-charset):
+       * lisp/gnus/gnus-topic.el (gnus-topic-mode):
+       * lisp/gnus/gnus-undo.el (gnus-undo-mode):
+       * lisp/gnus/gnus.el (gnus-simplify-mode-line):
+       * lisp/gnus/message.el (message-cite-reply-position)
+       (message-cite-style, message-mode, message-setup-fill-variables):
+       * lisp/gnus/mm-view.el (mm-display-inline-fontify):
+       * lisp/gnus/mml.el (mml-mode):
+       * lisp/gnus/nndiary.el (nndiary-open-nov):
+       * lisp/gnus/nnfolder.el (nnfolder-save-buffer)
+       (nnfolder-open-nov):
+       * lisp/gnus/nnheader.el (nnheader-init-server-buffer):
+       * lisp/gnus/nnimap.el (nnimap-make-process-buffer):
+       * lisp/gnus/nnml.el (nnml-get-nov-buffer): Prefer setq-local.
+
+2020-12-07  Andrea Corallo  <akrl@sdf.org>
+
+       Spawn a sub-process for running GCC also in batch mode (bug#45056)
+
+       * lisp/emacs-lisp/comp.el (comp-async-compilation): New variable.
+       (comp-final): Always run the C side of the compilation as a
+       sub-process unless during bootstrap or async compilation.
+       (comp-run-async-workers): Set `comp-async-compilation'.
+
+2020-12-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Insert skeletons at the correct point
+
+       * lisp/skeleton.el (skeleton-read): Don't insert the skeleton at
+       an arbitrary point if the user moves around (bug#17752).
+
+2020-12-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow shutting down Emacs even if there are errors in kill-emacs-hook
+
+       * lisp/subr.el (run-hook-query-error-with-timeout): New function
+       (bug#28542).
+
+       * src/emacs.c (Fkill_emacs): Use it to allow exiting Emacs even if
+       there are errors in kill-emacs-hook.
+       (syms_of_emacs): Define the symbol.
+
+2020-12-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Ensure that new emacsclient frames has focus
+
+       * lisp/server.el (server-execute): Focus the frame here...
+       (server-switch-buffer): Instead of here (bug#15469).  This ensures
+       that the frame has focus if Emacs is querying the user about
+       something when opening a file (for instance "Revert from file?").
+
+2020-12-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow inhibiting the instructions on how to close emacsclient frames
+
+       * doc/emacs/misc.texi (Invoking emacsclient): Document it.
+       * lisp/server.el (server-client-instructions): New variable.
+       (server-execute): Use it.
+
+2020-12-07  Illia Ostapyshyn  <ilya.ostapyshyn@gmail.com>  (tiny change)
+
+       Allow using newer versions of Gnuplot from calc again
+
+       * lisp/calc/calc-graph.el (calc-graph-plot): Don't use the "time"
+       abbreviation for "timestamp" (bug#39232) -- it's no longer valid
+       after
+       
https://github.com/gnuplot/gnuplot/commit/b979b5371bc1c18bf8f5bd756e7c1fb54dafd8cc
+
+2020-12-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix file name quoting problems in tex-mode
+
+       * lisp/textmodes/tex-mode.el (tex--quote-spec): New function
+       (bug#14286).
+       (tex-format-cmd): Use it.
+       (tex-compile): Don't quote the file names, because we're using
+       `file-exists-p' and friends on the results later, and that fails
+       on systems where everything is quoted, and on file names that need
+       quoting.
+
+2020-12-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify icomplete-show-matches-on-no-input doc string
+
+       * lisp/icomplete.el (icomplete-show-matches-on-no-input): Clarify
+       doc string (bug#19031), suggested by Andrii Kolomoiets.
+
+2020-12-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Clarify icomplete-show-matches-on-no-input doc string"
+
+       This reverts commit f352c57972d24464a42ea3e65dc8ac07d8e0517c.
+
+       The new explanation of what icomplete does is wrong.
+
+2020-12-07  Mattias Engdegård  <mattiase@acm.org>
+
+       Calc: simplify integer log2 and power of 2
+
+       We have bignums and fast primitives now; no caches are needed.
+
+       * lisp/calc/calc-bin.el (math-power-of-2-cache)
+       (math-big-power-of-2-cache): Remove.
+       (math-power-of-2, math-integer-log2): Simplify.
+       (calcFunc-ash): Don't call math-power-of-2 with negative argument.
+
+2020-12-07  Mattias Engdegård  <mattiase@acm.org>
+
+       * doc/misc/calc.texi (Predefined Units): Prune outdated kg text.
+
+2020-12-07  Philipp Stephani  <phst@google.com>
+
+       Unbreak a few unit tests that rely on lack of backtraces
+
+       * test/lisp/emacs-lisp/gv-tests.el (gv-dont-define-expander-in-file)
+       (gv-dont-define-expander-other-file):
+       * test/lisp/emacs-lisp/edebug-tests.el 
(edebug-tests-with-default-config):
+       Suppress backtraces in batch mode to unbreak unit tests.
+
+2020-12-07  Philipp Stephani  <phst@google.com>
+
+       Add new variable to selectively suppress backtraces in batch mode.
+
+       * src/eval.c (syms_of_eval): Define new variable
+       'backtrace-on-error-noninteractive' to selectively enable backtrace
+       printing in batch mode.
+       (signal_or_quit): Use it.
+
+       * etc/NEWS: Document new variable.
+
+       * test/src/eval-tests.el (eval-tests/backtrace-in-batch-mode/inhibit):
+       New unit test.
+
+2020-12-07  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/ielm.el (inferior-emacs-lisp-mode): Prefer setq-local.
+
+       * lisp/ibuffer.el (ibuffer, ibuffer-mode): Prefer setq-local.
+
+2020-12-07  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in whitespace.el
+
+       * lisp/whitespace.el (whitespace-turn-on, whitespace-color-on): Prefer
+       setq-local.
+
+2020-12-07  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in tar-mode.el
+
+       * lisp/tar-mode.el (tar-summarize-buffer, tar-mode, tar-extract):
+       Prefer setq-local.
+
+2020-12-07  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in tcl.el
+
+       * lisp/progmodes/tcl.el (tcl-mode, inferior-tcl-mode, inferior-tcl):
+       (tcl-auto-fill-mode, tcl-guess-application): Prefer setq-local.
+
+2020-12-07  Michael Albinus  <michael.albinus@gmx.de>
+
+       * lisp/net/tramp.el (tramp-read-passwd): Use connection-local 
`auth-sources'.
+
+       * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection):
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection):
+       * lisp/net/tramp-sh.el (tramp-maybe-open-connection):
+       * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection):
+       Move setting of connection-local variables up.
+
+2020-12-07  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/lisp-mode.el: Give paren syntax to [...] in 
lisp-data-mode
+
+       (lisp-data-mode-syntax-table): Rename from lisp--mode-syntax-table.
+       Adjust all users.  Set [...] to have paren syntax.
+       (lisp-data-mode): Don't set `lisp-syntax` arg any more
+
+       * lisp/progmodes/elisp-mode.el (emacs-lisp-mode-syntax-table):
+       Don't bother setting [...] to have paren syntax any more.
+
+       * lisp/progmodes/inf-lisp.el (inferior-lisp-mode): Don't use
+       `lisp-syntax` arg of lisp-mode-variables any more.
+
+2020-12-06  Mattias Engdegård  <mattiase@acm.org>
+
+       Remove Calc bignum remnants
+
+       * lisp/calc/calc-macs.el (Math-natnum-lessp):
+       * lisp/calc/calc-ext.el (math-norm-bignum, math-compare-bignum):
+       * lisp/calc/calc-math.el (math-zerop-bignum)
+       (math-scale-bignum-digit-size): Remove.
+
+       * lisp/calc/calc-bin.el (math-integer-log2, calcFunc-rot, math-clip):
+       * lisp/calc/calc-comb.el (math-prime-test, calcFunc-prfac)
+       (calcFunc-totient, calcFunc-moebius):
+       * lisp/calc/calc-ext.el (math-gcd):
+       * lisp/calc/calc-funcs.el (calcFunc-betaB):
+       * lisp/calc/calc-math.el (math-nth-root-int-iter, calcFunc-ilog):
+       Replace Math-natnum-lessp with <.
+
+2020-12-06  Juri Linkov  <juri@linkov.net>
+
+       * lisp/vc/vc-git.el: Update args of backend API calls in the header 
comments
+
+       https://lists.gnu.org/archive/html/emacs-devel/2020-12/msg00283.html
+
+2020-12-06  Juri Linkov  <juri@linkov.net>
+
+       * lisp/vc/vc.el: Update args of backend API calls in the header comments
+
+       https://lists.gnu.org/archive/html/emacs-devel/2020-12/msg00283.html
+
+2020-12-06  Juri Linkov  <juri@linkov.net>
+
+       Handle calling read-char-from-minibuffer and y-or-n-p from 
pre-command-hook
+
+       * lisp/subr.el (read-char-from-minibuffer-insert-char)
+       (read-char-from-minibuffer-insert-other, y-or-n-p-insert-y)
+       (y-or-n-p-insert-n, y-or-n-p-insert-other):
+       Check for 'minibufferp' before executing the body.
+       (read-char-from-minibuffer, y-or-n-p): Let-bind this-command
+       before calling read-from-minibuffer.  (Bug#45029)
+
+2020-12-06  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-12-06  Andrea Corallo  <akrl@sdf.org>
+
+       Unify common fallback exit point in `comp-cstr-union-1-no-mem'.
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr-union-1-no-mem): Define
+       a local function `give-up' as a common fall-back exit point.
+
+2020-12-06  Andrea Corallo  <akrl@sdf.org>
+
+       Couple of `comp-cstr-union-1-no-mem' improvements for mixed neg pos 
union
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr-union-1-no-mem):
+       Generalize disjoint pos types vs neg values conditions.
+       (comp-cstr-union-1-no-mem): Do not propagate ranges when we are
+       already returning integer as generic type.
+       * test/lisp/emacs-lisp/comp-cstr-tests.el
+       (comp-cstr-typespec-tests-alist): Add corresponding tests.
+
+2020-12-06  Philipp Stephani  <phst@google.com>
+
+       Print a backtrace on unhandled errors in batch mode (Bug#44942).
+
+       * src/eval.c (signal_or_quit): Print a backtrace in batch mode if no
+       error handler was found.
+
+       * test/src/eval-tests.el (eval-tests/backtrace-in-batch-mode)
+       (eval-tests/backtrace-in-batch-mode/demoted-errors): New unit tests.
+
+       * etc/NEWS: Document change.
+
+2020-12-06  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve error message text of "C-x C-SPC"
+
+       * lisp/simple.el (pop-global-mark): Mention the buffer name in the
+       error message.  Suggested by T.V Raman <raman@google.com>.
+
+2020-12-06  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of streams in batch mode
+
+       * doc/lispref/os.texi (Batch Mode):
+       * doc/lispref/streams.texi (Input Streams, Output Streams): Better
+       documentation of I/O streams in batch mode, with more
+       cross-references.
+
+2020-12-06  Michael Albinus  <michael.albinus@gmx.de>
+
+       Make Tramp scripts more unique and robust
+
+       * lisp/net/tramp-sh.el (tramp-uudecode, tramp-perl-file-truename)
+       (tramp-perl-file-name-all-completions)
+       (tramp-perl-file-attributes)
+       (tramp-perl-directory-files-and-attributes)
+       (tramp-perl-encode-with-module, tramp-perl-decode-with-module)
+       (tramp-perl-encode, tramp-perl-decode, tramp-perl-pack)
+       (tramp-perl-unpack, tramp-hexdump-encode, tramp-awk-encode)
+       (tramp-hexdump-awk-encode, tramp-od-encode, tramp-od-awk-encode)
+       (tramp-awk-decode): Use format specifiers supported by
+       `tramp-expand-script'.  Adapt docstring.
+       (tramp-vc-registered-read-file-names): Adapt docstring.
+       (tramp-sh-handle-file-local-copy): Let-bind local `default-directory'.
+       (tramp-expand-script): New defun.
+       (tramp-maybe-send-script, tramp-find-inline-encoding): Use it.
+       (tramp-local-coding-commands): Simplify.
+
+2020-12-06  Mattias Engdegård  <mattiase@acm.org>
+
+       Unicode integrals in Calc
+
+       * lisp/calc/calccomp.el (math-compose-integ): Use Unicode integral
+       signs when available instead of a crude ASCII approximation, with a
+       shorter stem to save space.
+
+2020-12-06  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Avoid modifying nnimap user option in spam.el
+
+       * lisp/gnus/nnimap.el (nnimap--split-download-body): New variable.
+       (nnimap-fetch-inbox): Use it in conjunction with
+       nnimap-split-download-body.
+       * lisp/gnus/spam.el: Don't load nnimap.el at compile time for a
+       dynamic variable.
+       (spam-setup-widening): Rather than unconditionally set user option
+       nnimap-split-download-body, set nnimap--split-download-body to a
+       unique non-nil value only if the variable was nil (bug#44981).
+       (spam-teardown-widening): New function that undoes this if
+       nnimap--split-download-body still holds the unique value.
+       (spam-unload-hook): Call spam-teardown-widening to revert any change
+       to the value of nnimap--split-download-body.
+
+2020-12-06  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in several progmodes
+
+       * lisp/progmodes/executable.el (executable-interpret):
+       * lisp/progmodes/f90.el (f90-mode):
+       * lisp/progmodes/flymake-cc.el (flymake-cc--make-diagnostics):
+       * lisp/progmodes/fortran.el (fortran-mode):
+       * lisp/progmodes/gud.el (gud-gdb, sdb, dbx, xdb, perldb, pdb)
+       (jdb, gud-mode, gud-common-init, gdb-script-mode)
+       (gud-tooltip-activate-mouse-motions):
+       * lisp/progmodes/hideshow.el (hs-minor-mode):
+       * lisp/progmodes/icon.el (icon-mode):
+       * lisp/progmodes/ld-script.el (ld-script-mode):
+       * lisp/progmodes/mixal-mode.el (mixal-mode):
+       * lisp/progmodes/modula2.el (m2-mode):
+       * lisp/progmodes/simula.el (simula-mode):
+       * lisp/progmodes/subword.el (subword-setup-buffer):
+       * lisp/progmodes/which-func.el (which-function):  Prefer setq-local.
+
+2020-12-06  Eli Zaretskii  <eliz@gnu.org>
+
+       Support ks_c_5601-1987 encoding
+
+       * lisp/language/korean.el (ks_c_5601-1987): Define as an alias for
+       'korean-iso-8bit.  (It is sometimes used in email messages.)
+
+2020-12-06  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in emulation/*.el
+
+       * lisp/emulation/edt.el (edt-select-mode):
+       * lisp/emulation/viper-cmd.el (viper-refresh-mode-line):
+       (viper-minibuffer-setup-sentinel):
+       * lisp/emulation/viper.el (viper-comint-mode-hook): Prefer setq-local.
+
+2020-12-06  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in url/*.el
+
+       * lisp/url/url-cookie.el (url-cookie-write-file):
+       * lisp/url/url-http.el (url-http-parse-headers):
+       * lisp/url/url-util.el (url-extract-mime-headers): Prefer setq-local.
+
+2020-12-06  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+
+       Fix Xaw widget text disappearing when built with cairo (bug#43418)
+
+       * lwlib/lwlib-utils.c (crxft_font_open_name): Use FcFontMatch to
+       get a pattern to pass to cairo_ft_font_face_create_for_pattern.
+
+2020-12-05  Andrea Corallo  <akrl@sdf.org>
+
+       Memoize `comp-cstr-union-1'
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr): Do not synthesize the
+       copier.
+       (comp-cstr-ctxt): Add `union-1-mem-no-range' `union-1-mem-range'
+       slots.
+       (comp-cstr-copy): New function.
+       (comp-cstr-union-1-no-mem): Rename from `comp-cstr-union-1'.
+       (comp-cstr-union-1): New function.
+
+2020-12-05  Andrea Corallo  <akrl@sdf.org>
+
+       More improvements to `comp-cstr-union-1' for mixed positive/negative 
cases
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr-union-1): Better handle
+       mixed positive/negated cases.
+       * test/lisp/emacs-lisp/comp-cstr-tests.el
+       (comp-cstr-typespec-tests-alist): Add a number of tests.
+
+2020-12-05  Andrea Corallo  <akrl@sdf.org>
+
+       Fix `comp-cstr-to-type-spec'
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-star-or-num-p): New predicate.
+       (comp-type-spec-to-cstr): Make use of.
+       (comp-cstr-to-type-spec): Output correctly type specifiers
+       as (not (or integer ...
+
+2020-12-05  Andrea Corallo  <akrl@sdf.org>
+
+       Fix union of homogeneously negated input constraints
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr-union-1): Fix logic.
+       * test/lisp/emacs-lisp/comp-cstr-tests.el
+       (comp-cstr-typespec-tests-alist): Add a couple of tests.
+
+2020-12-05  Andrea Corallo  <akrl@sdf.org>
+
+       Add `with-comp-cstr-accessors' macro.
+
+       * lisp/emacs-lisp/comp-cstr.el (with-comp-cstr-accessors): New macro.
+       (comp-cstr-union-1): Make use of `with-comp-cstr-accessors'.
+
+2020-12-05  Andrea Corallo  <akrl@sdf.org>
+
+       Initial support for union of negated constraints
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-range-negation): New
+       function.
+       (comp-cstr-union-homogeneous-no-range): Rename from
+       `comp-cstr-union-no-range'.
+       (comp-cstr-union-homogeneous): Rename from `comp-cstr-union'.
+       (comp-cstr-union-1): New function.
+       (comp-cstr-union-no-range, comp-cstr-union): Rewrite in function
+       of `comp-cstr-union-1'.
+       * test/lisp/emacs-lisp/comp-cstr-tests.el
+       (comp-cstr-typespec-tests-alist): Add a bunch of tests.
+
+2020-12-05  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr-union-no-range): Cosmetic.
+
+2020-12-05  Andrea Corallo  <akrl@sdf.org>
+
+       Initial constraint negation support
+
+       * lisp/emacs-lisp/comp-cstr.el (comp-cstr): Add `neg' slot.
+       (comp-range-negation, comp-cstr-negation)
+       (comp-cstr-negation-make): New functions.
+       (comp-type-spec-to-cstr): Enable `not` in type specifiers.
+       (comp-cstr-to-type-spec): Update logic to handle negation.
+       * test/lisp/emacs-lisp/comp-cstr-tests.el
+       (comp-cstr-typespec-tests-alist): Add a test.
+
+2020-12-05  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/perl-mode.el: Fix handling of s'foo'bar'
+
+       (perl-syntax-propertize-function): Don't put a syntax-property
+       on regexp-op delimiters if they're already handled correctly
+       by the normal syntax tables.
+       (perl-syntax-propertize-special-constructs): Mark the middle
+       quote of s'foo'bar' as punctuation.
+
+       * test/manual/indent/perl.perl: Add new test cases.
+
+2020-12-05  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in play/*.el
+
+       * lisp/play/decipher.el (decipher-mode):
+       * lisp/play/doctor.el (make-doctor-variables):
+       * lisp/play/dunnet.el (dun-mode):
+       * lisp/play/gomoku.el (gomoku-mode): Prefer setq-local.
+
+2020-12-05  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Fix last change to shell-command
+
+       * lisp/simple.el: Specify comint-term-environment arglist in
+       function declaration.
+       (shell-command): Load shell.el before calling
+       comint-term-environment; otherwise it is undefined.  Allow
+       async-shell-command-width to take precedence over the COLUMNS value
+       returned by comint-term-environment.  (Bug#45034)
+
+2020-12-05  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of 'ps-print-color-p'
+
+       * doc/emacs/misc.texi (PostScript Variables): Improve and clarify
+       the description of 'ps-print-color-p'.  (Bug#44962)
+
+2020-12-05  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in mail/*.el
+
+       * lisp/mail/emacsbug.el (report-emacs-bug):
+       * lisp/mail/rfc822.el (rfc822-addresses):
+       * lisp/mail/rmail.el (rmail-perm-variables, rmail-show-message-1):
+       * lisp/mail/rmailedit.el (rmail-edit-mode):
+       (rmail-edit-current-message, rmail-cease-edit):
+       * lisp/mail/rmailsum.el (rmail-new-summary-1, rmail-summary-mode):
+       (rmail-summary-update-highlight):
+       * lisp/mail/sendmail.el (mail-mode): Prefer setq-local.
+
+2020-12-05  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in vc/*.el
+
+       * lisp/vc/add-log.el (find-change-log, change-log-mode):
+       * lisp/vc/cvs-status.el (cvs-status-mode):
+       * lisp/vc/diff-mode.el (diff-restrict-view, diff-find-file-name):
+       (diff-mode, diff-setup-whitespace, diff-apply-hunk):
+       * lisp/vc/diff.el (diff-no-select):
+       * lisp/vc/ediff-util.el (ediff-setup):
+       * lisp/vc/log-edit.el (log-edit, log-edit-mode):
+       * lisp/vc/log-view.el (log-view-mode):
+       * lisp/vc/pcvs.el (cvs-temp-buffer, cvs-make-cvs-buffer):
+       (cvs-update-filter, cvs-mode, cvs-mode-commit)
+       (cvs-mode-edit-log, cvs-vc-command-advice):
+       * lisp/vc/smerge-mode.el (smerge-match-conflict):
+       (smerge-ediff, smerge-mode):
+       * lisp/vc/vc-annotate.el (vc-annotate-mode):
+       (vc-annotate, vc-annotate-display):
+       * lisp/vc/vc-bzr.el (vc-bzr-log-view-mode):
+       * lisp/vc/vc-dir.el (vc-dir-mode):
+       * lisp/vc/vc-dispatcher.el (vc-setup-buffer):
+       (vc-compilation-mode, vc-start-logentry):
+       * lisp/vc/vc-git.el (vc-git-log-view-mode):
+       * lisp/vc/vc-hg.el (vc-hg-log-view-mode):
+       * lisp/vc/vc-hooks.el (vc-refresh-state):
+       * lisp/vc/vc-mtn.el (vc-mtn-log-view-mode):
+       * lisp/vc/vc-svn.el (vc-svn-log-view-mode):
+       * lisp/vc/vc.el (vc-register, vc-diff-internal):
+       (vc-find-revision-save, vc-find-revision-no-save):
+       (vc-log-internal-common, vc-region-history): Prefer setq-local.
+
+2020-12-05  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Always show the summary
+
+       * lisp/progmodes/xref.el (xref--show-defs-minibuffer):
+       Always show the summary (at least for now).
+
+2020-12-05  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Fontify the group and the line number
+
+       * lisp/progmodes/xref.el (xref--show-defs-minibuffer):
+       Fontify the group and the line number.
+
+2020-12-05  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Hide the common parent directory, if any
+
+       * lisp/progmodes/xref.el (xref--show-defs-minibuffer):
+       Hide the common parent directory, if any.
+
+2020-12-05  William Xu  <william.xwl@gmail.com>
+
+       xref--show-defs-minibuffer: new "show definitions" UI
+
+       * lisp/progmodes/xref.el (xref--show-defs-minibuffer):
+       New function to use as xref-show-definitions-function
+       (https://lists.gnu.org/archive/html/emacs-devel/2020-11/msg00824.html).
+
+2020-12-04  Andrea Corallo  <akrl@sdf.org>
+
+       Do not compile `comp-cstr.el` in vanilla builds
+
+       * lisp/Makefile.in (compile-targets): Filter out 'comp-cstr.elc'
+       in vanilla builds.
+
+2020-12-04  Andrea Corallo  <akrl@sdf.org>
+
+       Vanilla build warning clean-up
+
+       * lisp/emacs-lisp/disass.el (native-comp-unit-file)
+       (subr-native-comp-unit): Declare function.
+       * lisp/progmodes/elisp-mode.el (native-compile): Likewise.
+       * lisp/emacs-lisp/package.el (comp-el-to-eln-filename): Likewise.
+       * lisp/startup.el (normal-top-level): Silence warning.
+       * src/data.c (syms_of_data): 'Ssubr_native_lambda_list' is always
+       defined.
+       * src/pdumper.c (dump_cold_native_subr): Move under ifdefs.
+       (dump_drain_cold_data): Add ifdefs.
+
+2020-12-04  Andrea Corallo  <akrl@sdf.org>
+
+       Fix `load-history' causing a number of spurious compiler warnings
+
+       * src/comp.c (Fcomp__register_subr): Fix missing entry into
+       `load-history' indicating that the loaded function was already an
+       autoload.
+
+2020-12-04  Spencer Baugh  <sbaugh@catern.com>
+
+       * src/alloc.c (Fgarbage_collect_maybe): New function
+
+2020-12-04  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Improve docstrings
+
+       * lisp/progmodes/xref.el (xref-search-program-alist)
+       (xref-search-program): Improve docstrings.
+
+2020-12-04  Roland Winkler  <winkler@gnu.org>
+
+       * lisp/textmodes/bibtex.el: Use user-error.
+
+2020-12-04  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in emacs-lisp/*.el
+
+       * lisp/emacs-lisp/chart.el (chart-mode):
+       * lisp/emacs-lisp/copyright.el (copyright-update):
+       * lisp/emacs-lisp/eieio-custom.el (eieio-customize-object):
+       * lisp/emacs-lisp/elint.el (elint-update-env, elint-init-form):
+       * lisp/emacs-lisp/ert.el (ert--results-update-ewoc-hf):
+       (ert--setup-results-buffer):
+       * lisp/emacs-lisp/lisp-mode.el (lisp-mode-variables):
+       * lisp/emacs-lisp/pp.el (pp-display-expression):
+       * lisp/emacs-lisp/re-builder.el (reb-mode, reb-restart-font-lock):
+       * lisp/emacs-lisp/shadow.el (load-path-shadows-mode):
+       * lisp/emacs-lisp/smie.el (smie-setup):
+       * lisp/emacs-lisp/syntax.el (syntax-propertize):
+       * lisp/emacs-lisp/trace.el (trace-make-advice): Prefer setq-local.
+
+2020-12-04  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in net/*.el
+
+       * lisp/net/ange-ftp.el (ange-ftp-process-handle-line):
+       (internal-ange-ftp-mode):
+       * lisp/net/imap.el (imap-fetch-safe):
+       * lisp/net/net-utils.el (net-utils-mode):
+       (nslookup-mode, network-connection-mode-setup):
+       * lisp/net/newst-plainview.el (newsticker-mode):
+       (newsticker-buffer-update):
+       * lisp/net/newst-treeview.el (newsticker--treeview-item-show):
+       (newsticker-treeview-mode):
+       * lisp/net/rlogin.el (rlogin):
+       * lisp/net/secrets.el (secrets-mode):
+       * lisp/net/sieve-mode.el (sieve-mode):
+       * lisp/net/sieve.el (sieve-setup-buffer, sieve-open-server):
+       * lisp/net/snmp-mode.el (snmp-common-mode, snmp-mode, snmpv2-mode):
+       * lisp/net/telnet.el (telnet-mode):
+       * lisp/net/tramp.el (tramp-get-debug-buffer): Prefer setq-local.
+
+2020-12-04  Mattias Engdegård  <mattiase@acm.org>
+
+       Speed up match-substitute-replacement
+
+       * lisp/subr.el (match-substitute-replacement): Use 
match-data--translate.
+       * src/search.c (Fmatch_data__translate): Remove string restriction.
+       * test/lisp/subr-tests.el (subr-match-substitute-replacement): New test.
+
+2020-12-04  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in cedet
+
+       * lisp/cedet/data-debug.el (data-debug-mode):
+       * lisp/cedet/ede/custom.el (ede-customize-project):
+       * lisp/cedet/ede/project-am.el (project-am-load-makefile):
+       * lisp/cedet/mode-local.el (mode-local--activate-bindings):
+       * lisp/cedet/semantic.el (semantic--set-buffer-cache):
+       * lisp/cedet/semantic/analyze/debug.el
+       (semantic-analyzer-debug-add-buttons):
+       * lisp/cedet/semantic/grammar.el (semantic-grammar-mode):
+       * lisp/cedet/semantic/senator.el (senator-search-set-tag-class-filter):
+       (senator-isearch-mode-hook):
+       * lisp/cedet/semantic/symref/list.el
+       (semantic-symref-produce-list-on-results)
+       (semantic-symref-results-mode):
+       * lisp/cedet/semantic/util-modes.el (semantic-stickyfunc-mode):
+       * lisp/cedet/semantic/wisent/python.el (wisent-python-default-setup):
+       * lisp/cedet/srecode/srt-mode.el (srecode-template-mode):
+       Prefer setq-local.
+
+2020-12-04  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in most of textmodes/*.el
+
+       * lisp/textmodes/artist.el (artist-mode-init):
+       * lisp/textmodes/bibtex.el (bibtex-mode):
+       * lisp/textmodes/dns-mode.el (dns-mode):
+       * lisp/textmodes/enriched.el (enriched-mode):
+       * lisp/textmodes/ispell.el (ispell-buffer-local-parsing):
+       * lisp/textmodes/nroff-mode.el (nroff-mode):
+       * lisp/textmodes/picture.el (picture-mode):
+       * lisp/textmodes/refill.el (refill-mode):
+       * lisp/textmodes/two-column.el (2C-split): Prefer setq-local.
+
+2020-12-04  Eli Zaretskii  <eliz@gnu.org>
+
+       Don't abort when terminated by SIGINT in -batch
+
+       * src/xdisp.c (clear_message_stack): New function.
+       * src/emacs.c (terminate_due_to_signal): Call clear_message_stack
+       when we are being shut down by SIGINT under -batch.
+       * src/lisp.h (clear_message_stack): Add prototype.
+
+2020-12-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make custom-data saving atomic
+
+       * lisp/cus-edit.el (custom-save-all): Do the custom saves as an
+       atomic change group, to avoid writing invalid data if something
+       goes wrong (or the user hits `C-g') in the middle (bug#18633).
+
+2020-12-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow viper-save-setting to save numerical settings
+
+       * lisp/emulation/viper-util.el (viper-save-setting): Allow saving
+       numerical settings (bug#18928).
+
+2020-12-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify icomplete-show-matches-on-no-input doc string
+
+       * lisp/icomplete.el (icomplete-show-matches-on-no-input): Clarify
+       the meaning of the variable (bug#19031).
+
+2020-12-04  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in erc
+
+       * lisp/erc/erc-goodies.el (erc-imenu-setup):
+       * lisp/erc/erc-list.el (erc-list-install-322-handler, erc-cmd-LIST):
+       * lisp/erc/erc-pcomplete.el (pcomplete-erc-setup):
+       * lisp/erc/erc.el (erc-mode, erc-update-mode-line-buffer):
+       Prefer setq-local.
+
+2020-12-04  Alyssa Ross  <hi@alyssa.is>  (tiny change)
+
+       Make shell-command use comint settings
+
+       * lisp/simple.el (shell-command): Use the term environment from
+       comint, so that comint settings are used for commands like
+       `async-shell-command', too (bug#45034).
+
+2020-12-04  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/eshell/esh-mode.el (eshell-mode): Remove XEmacs compat code.
+
+2020-12-04  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer setq-local in eshell
+
+       * lisp/eshell/em-cmpl.el (eshell-cmpl-initialize):
+       * lisp/eshell/em-dirs.el (eshell-dirs-initialize):
+       * lisp/eshell/em-glob.el (eshell-glob-initialize, eshell-glob-regexp):
+       * lisp/eshell/em-hist.el (eshell-hist-initialize):
+       * lisp/eshell/em-prompt.el (eshell-prompt-initialize):
+       * lisp/eshell/em-rebind.el (eshell-rebind-initialize)
+       (eshell-setup-input-keymap):
+       * lisp/eshell/em-script.el (eshell-script-initialize):
+       * lisp/eshell/em-smart.el (eshell-smart-initialize):
+       * lisp/eshell/em-term.el (eshell-term-initialize, eshell-exec-visual):
+       * lisp/eshell/em-tramp.el (eshell-tramp-initialize):
+       * lisp/eshell/em-unix.el (eshell-unix-initialize, eshell/diff):
+       * lisp/eshell/esh-arg.el (eshell-arg-initialize):
+       * lisp/eshell/esh-cmd.el (eshell-cmd-initialize):
+       * lisp/eshell/esh-io.el (eshell-get-target):
+       * lisp/eshell/esh-mode.el (eshell-mode):
+       * lisp/eshell/esh-var.el (eshell-var-initialize): Prefer setq-local.
+
+2020-12-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Preload iso-trans.el
+
+       * lisp/loadup.el ("international/iso-transl"): Load by default so
+       that we get `Alt-' bindings (bug#21310).
+
+       * lisp/international/iso-transl.el: Remove autoloads and some
+       comments.
+
+2020-12-04  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Support using ripgrep in project-find-regexp and friends
+
+       Performance results vary here.  Some projects and search terms
+       don't see much of a change, but for some (including Emacs sources
+       checkout and case-insensitive search) the switch to ripgrep shows
+       ~2-3x speed improvement.  Another piece of anecdata here:
+       https://lists.gnu.org/archive/html/emacs-devel/2020-06/msg00802.html
+
+       * lisp/progmodes/xref.el (xref-search-program-alist)
+       (xref-search-program): New user options.
+       (xref-matches-in-files): Use them.
+
+2020-12-04  Andrea Corallo  <akrl@sdf.org>
+
+       Reduce (half) the number of loads emitted for calling into C code
+
+       As after each function call GCC clobbers the pointer to the function
+       relocation table.  This commit modify the code generation to create a
+       local copy of it for each function.  This reduces the average number
+       of loads for each function call into C from two to one.
+
+       * src/comp.c (comp_t): Add 'func_relocs_ptr_type' and
+       'func_relocs_local' fields.
+       (emit_call): Use the local func_relocs pointer when possible.
+       (emit_ctxt_code): Fill 'comp.func_relocs_ptr_type'.
+       (compile_function): Declare 'func_relocs_ptr_local'.
+       (compile_function): Assign 'func_relocs_ptr_local' from the global
+       value in each function prologue.
+
+2020-12-03  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Restore nnimap-split-download-body as a customization option
+
+       * lisp/gnus/nnimap.el (nnimap-split-download-body): And add an
+       obsolete alias for `nnimap-split-download-body-default'.
+       (nnimap-fetch-inbox): Check the value of the option, not the variable.
+       * doc/misc/gnus.texi (Client-Side IMAP Splitting): Move the primary
+       documentation of this option to this section.
+
+2020-12-03  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Define explicit-shell-file-name only in shell.el
+
+       For discussion, see the following thread:
+       https://lists.gnu.org/r/emacs-devel/2020-04/msg00880.html
+
+       * doc/emacs/cmdargs.texi (General Variables): Mention
+       shell-file-name in relation to SHELL.
+       * doc/emacs/misc.texi (Interactive Shell): Move index entry for
+       SHELL environment variable from here, where it is not mentioned...
+       (Single Shell): ...to here, where it is discussed along with
+       shell-file-name.
+       * lisp/dired.el (dired-insert-directory): Use shell-file-name
+       instead of explicit-shell-file-name when a shell is implicitly
+       requested.
+       * lisp/obsolete/terminal.el (explicit-shell-file-name):
+       * lisp/term.el (explicit-shell-file-name): Remove duplicate
+       defcustoms and load lisp/shell.el instead.  (Bug#40679)
+       * lisp/shell.el (explicit-shell-file-name): Clarify docstring.
+       (shell): Simplify.
+
+2020-12-03  Stefan Kangas  <stefan@marxist.se>
+
+       Add tests for several byte-compiler warnings
+
+       * test/lisp/emacs-lisp/bytecomp-tests.el
+       (bytecomp/warn-autoload-not-on-top-level\.el)
+       (bytecomp/warn-callargs\.el)
+       (bytecomp/warn-defcustom-nogroup\.el)
+       (bytecomp/warn-defcustom-notype\.el)
+       (bytecomp/warn-defvar-lacks-prefix\.el)
+       (bytecomp/warn-format\.el)
+       (bytecomp/warn-lambda-malformed-interactive-spec\.el)
+       (bytecomp/warn-make-variable-buffer-local\.el)
+       (bytecomp/warn-redefine-defun-as-macro\.el)
+       (bytecomp/warn-redefine-defun\.el)
+       (bytecomp/warn-redefine-macro-as-defun\.el)
+       (bytecomp/warn-save-excursion\.el)
+       (bytecomp/warn-variable-let-bind-constant\.el)
+       (bytecomp/warn-variable-let-bind-nonvariable\.el)
+       (bytecomp/warn-variable-set-constant\.el)
+       (bytecomp/warn-variable-set-nonvariable\.el): New tests.
+       * 
test/lisp/emacs-lisp/bytecomp-resources/warn-autoload-not-on-top-level.el:
+       * test/lisp/emacs-lisp/bytecomp-resources/warn-callargs.el:
+       * test/lisp/emacs-lisp/bytecomp-resources/warn-defcustom-nogroup.el:
+       * test/lisp/emacs-lisp/bytecomp-resources/warn-defcustom-notype.el:
+       * test/lisp/emacs-lisp/bytecomp-resources/warn-defvar-lacks-prefix.el:
+       * test/lisp/emacs-lisp/bytecomp-resources/warn-format.el:
+       * 
test/lisp/emacs-lisp/bytecomp-resources/warn-lambda-malformed-interactive-spec.el:
+       * 
test/lisp/emacs-lisp/bytecomp-resources/warn-make-variable-buffer-local.el:
+       * 
test/lisp/emacs-lisp/bytecomp-resources/warn-redefine-defun-as-macro.el:
+       * test/lisp/emacs-lisp/bytecomp-resources/warn-redefine-defun.el:
+       * 
test/lisp/emacs-lisp/bytecomp-resources/warn-redefine-macro-as-defun.el:
+       * test/lisp/emacs-lisp/bytecomp-resources/warn-save-excursion.el:
+       * 
test/lisp/emacs-lisp/bytecomp-resources/warn-variable-let-bind-constant.el:
+       * 
test/lisp/emacs-lisp/bytecomp-resources/warn-variable-let-bind-nonvariable.el:
+       * test/lisp/emacs-lisp/bytecomp-resources/warn-variable-set-constant.el:
+       * 
test/lisp/emacs-lisp/bytecomp-resources/warn-variable-set-nonvariable.el:
+       * test/lisp/emacs-lisp/bytecomp-tests.el: New files.
+
+2020-12-03  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Avoid spamming view-mode-enter help message
+
+       By default, entering view-mode echoes a usage message.  This is
+       particularly helpful with non-nil view-read-only, to notify the user
+       that view-mode has been enabled.  It is less useful and more spammy,
+       however, if view-mode is (possibly inadvertently) entered from some
+       non-interactive code running in the background, such as when a major
+       mode is enabled in a temporary buffer for text formatting
+       purposes (bug#44629).
+
+       * lisp/jsonrpc.el (jsonrpc-events-buffer, initialize-instance): Use
+       buffer-read-only in place of read-only-mode for non-interactive use.
+       * lisp/view.el (view-mode-enter): Inhibit help message if either
+       view-inhibit-help-message is non-nil, or view-mode-enter was called
+       from an interactive command.  Suggested by João Távora
+       <joaotavora@gmail.com>.
+
+2020-12-03  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix auto-revert-test07-auto-revert-several-buffers
+
+       * test/lisp/autorevert-tests.el
+       (auto-revert-test07-auto-revert-several-buffers): Adapt times values.
+
+2020-12-03  Spencer Baugh  <sbaugh@catern.com>
+
+       Improve performance of auto-revert-notify-add-watch
+
+       * lisp/autorevert.el (auto-revert-notify-add-watch):
+       Do not search for buffers registered with the same file name, this
+       is not necessary.  (Bug#44638)
+
+2020-12-03  Stefan Kangas  <stefan@marxist.se>
+
+       Remove redundant requires of 'help'
+
+       * lisp/emacs-lisp/advice.el (ad-read-advised-function):
+       * lisp/emacs-lisp/ert.el:
+       * lisp/facemenu.el: Don't require 'help'; it is preloaded since
+       version 18.59.
+
+2020-12-03  Stefan Kangas  <stefan@marxist.se>
+
+       Remove redundant requires of 'button'
+
+       * lisp/apropos.el:
+       * lisp/emacs-lisp/cl-print.el:
+       * lisp/emacs-lisp/debug.el:
+       * lisp/emacs-lisp/ert.el:
+       * lisp/emacs-lisp/shadow.el:
+       * lisp/facemenu.el:
+       * lisp/help-mode.el:
+       * lisp/man.el:
+       * lisp/progmodes/etags.el:
+       * lisp/textmodes/bibtex.el:
+       * lisp/woman.el: Don't require 'button'; it is preloaded since version
+       23.1.
+
+2020-12-03  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix "grep foo bar" in eshell
+
+       * lisp/eshell/em-unix.el (eshell-grep): Use the -H switch so that
+       we always get the file name, so that `M-x next-error' and friends
+       work (bug#22330).
+
+2020-12-03  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't make grep arguments invisible in eshell
+
+       * lisp/eshell/em-unix.el (eshell-grep): There doesn't seem to be
+       any reason why parts of the command should be invisible, so don't
+       do that.
+
+2020-12-03  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Recompute error positions in python-shell-send-region
+
+       * lisp/progmodes/python.el (python-shell-send-region): Recompute
+       line positions when evaluating (bug#22934).
+
+2020-12-03  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove redundant requires of 'custom'
+
+       * lisp/emacs-lisp/eieio-custom.el:
+       * lisp/htmlfontify.el:
+       * lisp/mwheel.el:
+       * lisp/net/eudc-vars.el:
+       * lisp/net/ldap.el:
+       * lisp/net/tramp-ftp.el:
+       * lisp/net/tramp-gvfs.el:
+       * lisp/progmodes/cwarn.el:
+       * lisp/progmodes/sql.el:
+       * lisp/savehist.el:
+       * lisp/textmodes/reftex.el:
+       * lisp/wid-browse.el: Don't require 'custom'; it is preloaded since
+       version 20.1.
+
+2020-12-03  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove redundant requires of 'font-core'
+
+       * lisp/ibuffer.el:
+       * test/lisp/erc/erc-track-tests.el: Don't require 'font-core'; it is
+       preloaded since version 22.1.
+
+2020-12-03  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove redundant requires of 'font-lock'
+
+       * lisp/cedet/data-debug.el:
+       * lisp/hi-lock.el:
+       * lisp/htmlfontify.el:
+       * lisp/org/org.el:
+       * lisp/progmodes/cperl-mode.el:
+       * lisp/progmodes/cwarn.el: Don't require 'font-lock'; it is preloaded
+       since version 22.1.
+
+2020-12-02  Roland Winkler  <winkler@gnu.org>
+
+       bibtex-autokey-get-year: Allow both a year or date field.
+
+       * lisp/textmodes/bibtex.el (bibtex-text-in-field): Allow arg field
+       to be a list of fields.
+       (bibtex-autokey-get-year): Look for year and date field.  Allow
+       the extended date format used by biblatex.
+
+2020-12-02  Roland Winkler  <winkler@gnu.org>
+
+       bibtex-mode: do not fail when local variables are disabled
+
+       * lisp/textmodes/bibtex.el (bibtex-mode): Check if
+       enable-local-variables is non-nil (bug#37957).
+
+2020-12-02  Roland Winkler  <winkler@gnu.org>
+
+       Allow bibtex-contline-indentation as file-local variable.
+
+       * lisp/textmodes/bibtex.el (bibtex-contline-indentation)
+       (bibtex-comment-start, bibtex-entry-offset, bibtex-text-indentation):
+       Add :safe attribute.
+       (bibtex-mode): Allow these variables as file-local variables
+       (bug#44618 and bug#44647).
+
+2020-12-02  Stefan Kangas  <stefan@marxist.se>
+
+       Remove redundant requires of faces
+
+       * lisp/htmlfontify.el:
+       * lisp/term/ns-win.el:
+       * lisp/term/w32-win.el:
+       * lisp/term/x-win.el:
+       * test/lisp/faces-tests.el: Don't require 'faces'; it is preloaded
+       since version 19.34.
+
+2020-12-02  Stefan Kangas  <stefan@marxist.se>
+
+       Remove redundant requires of env
+
+       * lisp/eshell/esh-var.el:
+       * lisp/man.el: Don't require 'env'; it is preloaded since version
+       20.1.
+
+2020-12-02  Roland Winkler  <winkler@gnu.org>
+
+       Allow bibtex-unify-case-function as file-local variable
+
+       * lisp/textmodes/bibtex.el (bibtex-unify-case-function):
+       Renamed from bibtex-unify-case-convert.  Add :safe attribute.
+       * etc/NEWS: Update accordingly.
+
+2020-12-02  Michael Albinus  <michael.albinus@gmx.de>
+
+       Add test to autorevert-tests.el
+
+       * test/lisp/autorevert-tests.el (auto-revert--wait-for-revert):
+       Handle `auto-revert--messages' being nil.
+       (auto-revert-test07-auto-revert-several-buffers): New test.
+
+2020-12-02  Stefan Kangas  <stefan@marxist.se>
+
+       Improve sectioning in bytecomp-tests.el
+
+       * test/lisp/emacs-lisp/bytecomp-tests.el: Add section comments.
+       (test-eager-load-macro-expansion)
+       (test-eager-load-macro-expansion-eval-and-compile): Move definitions.
+
+2020-12-02  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/play/dunnet.el: Remove Emacs 18 compat code.
+
+2020-12-02  Stefan Kangas  <stefan@marxist.se>
+
+       Make variable cperl-version obsolete
+
+       * lisp/progmodes/cperl-mode.el (cperl-menu): Remove CPerl version
+       menu entry.
+       (cperl-version): Make obsolete.
+
+2020-12-02  Stefan Kangas  <stefan@marxist.se>
+
+       Remove some Emacs 19 compat code from cperl-mode
+
+       * lisp/progmodes/cperl-mode.el
+       (cperl-put-do-not-fontify): Remove Emacs 19 compat code.
+       (cperl-do-not-fontify): Make obsolete.
+
+2020-12-02  Stefan Kangas  <stefan@marxist.se>
+
+       Remove some references to fast-lock and lazy-lock
+
+       * lisp/htmlfontify.el (hfy-copy-and-fontify-file):
+       * lisp/progmodes/antlr-mode.el: Remove some references to obsolete
+       libraries fast-lock and lazy-lock.
+
+2020-12-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix alignment of declaractions of arrays
+
+       * lisp/align.el (align-rules-list): Align variable declarations
+       like char *foo[], too (bug#23370).
+
+2020-12-02  Michael Albinus  <michael.albinus@gmx.de>
+
+       * INSTALL: Add the installation command of development packages for 
FreeBSD.
+
+       Recipe contributed by Joseph Mingrone <jrm@ftfl.ca>.
+
+2020-12-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add tests for xsd-regexp
+
+2020-12-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix xsdre-range-list-to-char-alternative problem with {P}
+
+       * lisp/nxml/xsd-regexp.el (xsdre-range-list-to-char-alternative):
+       Make (string-match (xsdre-translate "\\p{P}") "a-b") work
+       (bug#24093) -- the "forbidden" characters don't have to be the
+       first elements in a range.
+
+2020-12-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix the message-fetch-field doc string
+
+       * lisp/gnus/message.el (message-fetch-field): Improve the doc
+       string (bug#44991).
+
+2020-12-02  Stefan Kangas  <stefan@marxist.se>
+
+       Remove specific byte-compiler warnings for cl.el
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-warning-types)
+       (byte-compile-warnings, byte-compile-cl-file-p)
+       (byte-compile-eval, byte-compile-eval-before-compile)
+       (byte-compile-arglist-warn, byte-compile-find-cl-functions)
+       (byte-compile-cl-warn, displaying-byte-compile-warnings)
+       (byte-compile-file-form-require, byte-compile-form): Remove all
+       specific cl.el warnings, as that library is now obsolete.  The
+       regular obsoletion warnings are sufficiently discouraging.
+       * lisp/emacs-lisp/advice.el (ad-compile-function): Don't try to
+       silence the now removed warning.
+       * doc/lispref/tips.texi (Coding Conventions):
+       * doc/misc/cl.texi (Organization): Make recommendation to not use
+       cl.el and cl-compat.el stronger.
+       * lisp/obsolete/cl.el: Make alias help say that they are obsolete.
+       * lisp/obsolete/cl-compat.el (build-klist, safe-idiv)
+       (pair-with-newsyms): Silence byte-compiler.
+
+2020-12-02  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Improve .gitignore and project-vc-ignores handling
+
+       * lisp/progmodes/project.el (project-ignores):
+       Convert .gitignore entries more faithfully.
+       (project--vc-list-files): Convert "our" ignore entries to
+       "proper" globs, which is what Git pathspec requires.
+
+2020-12-02  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Use project--value-in-dir
+
+       * lisp/progmodes/project.el (project-files):
+       Use 'project--value-in-dir'.  To have any changes in
+       'project-vc-ignores' take effect immediately.
+
+2020-12-01  Juri Linkov  <juri@linkov.net>
+
+       Fix documentation of window-in-direction arg MINIBUF (bug#44932)
+
+       * doc/lispref/windows.texi (Windows and Frames): Rename MINI arg
+       of window-in-direction to MINIBUF.  Explain the non-nil non-t value.
+
+2020-12-01  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       749e4b7e0b Reset xref-show-xrefs-function temporarily
+       3e6525d69f Don't show in 'view-lossage' responses to xterm feature qu...
+       9fbff9c35c ; * src/buffer.c: Fix comment describing 'buffer_defaults'.
+
+2020-12-01  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       9939c435c1 Return the correct suffix in eww-make-unique-file-name
+       17fa17be3d Save bookmarks by using `write-file' (bug#12507)
+       2cdf1fd261 Fix filing messages when 'rmail-output-reset-deleted-flag'...
+       a72db8ab8b Make file copying in tramp-gvfs more robust
+       f31cacd1ff Revert "Fix incorrect handling of module runtime and envir...
+       cdc632fbe6 Fix incorrect handling of module runtime and environment p...
+       c9160bda78 CC Mode: Fix error in cache handling.  This fixes bug #43481
+
+2020-12-01  Michael Albinus  <michael.albinus@gmx.de>
+
+       * lisp/arc-mode.el (archive-get-descr): Use default mode if needed.
+
+2020-12-01  Michael Albinus  <michael.albinus@gmx.de>
+
+       Allow Tramp to mirror traces to a file
+
+       * doc/misc/tramp.texi (Traces and Profiles): Add `tramp-debug-to-file'.
+
+       * lisp/net/tramp-adb.el (tramp-adb-parse-device-names)
+       (tramp-adb-get-device):
+       * lisp/net/tramp-cmds.el (tramp-rename-files):
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-monitor-process-filter)
+       (tramp-gvfs-handler-volumeadded-volumeremoved)
+       (tramp-get-media-devices):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-file-notify-add-watch)
+       (tramp-sh-gio-monitor-process-filter)
+       (tramp-sh-gvfs-monitor-dir-process-filter)
+       (tramp-sh-inotifywait-process-filter, tramp-maybe-send-script)
+       (tramp-find-inline-encoding):
+       * lisp/net/tramp-smb.el (tramp-smb-handle-copy-directory)
+       (tramp-smb-handle-file-acl, tramp-smb-handle-set-file-acl):
+       Use `tramp-compat-string-replace'.
+
+       * lisp/net/tramp-compat.el (tramp-compat-string-replace): New defalias.
+
+       * lisp/net/tramp.el (tramp-debug-to-file): New defcustom.
+       (tramp-get-debug-buffer): Simplify.
+       (tramp-get-debug-file-name): New defun.
+       (tramp-debug-message): Write debug file if indicated.
+
+2020-12-01  Michael Albinus  <michael.albinus@gmx.de>
+
+       * etc/NEWS: Add user option 'tramp-debug-to-file'.
+
+2020-12-01  Stefan Kangas  <stefan@marxist.se>
+
+       Fix byte-compiler warning for failed uses of lexical vars
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-form): Fix byte-compiler
+       warning for failed uses of lexical vars.  (Bug#44980)
+       * test/lisp/emacs-lisp/bytecomp-tests.el
+       (bytecomp--define-warning-file-test): Don't prefix tests with
+       'warn'.
+       (bytecomp/error-lexical-var-with-add-hook\.el)
+       (bytecomp/error-lexical-var-with-remove-hook\.el)
+       (bytecomp/error-lexical-var-with-run-hook-with-args-until-failure\.el)
+       (bytecomp/error-lexical-var-with-run-hook-with-args-until-success\.el)
+       (bytecomp/error-lexical-var-with-run-hook-with-args\.el)
+       (bytecomp/error-lexical-var-with-symbol-value\.el): New tests.
+       * 
test/lisp/emacs-lisp/bytecomp-resources/error-lexical-var-with-symbol-value.el:
+       * 
test/lisp/emacs-lisp/bytecomp-resources/error-lexical-var-with-run-hook-with-args.el:
+       * 
test/lisp/emacs-lisp/bytecomp-resources/error-lexical-var-with-run-hook-with-args-until-success.el:
+       * 
test/lisp/emacs-lisp/bytecomp-resources/error-lexical-var-with-run-hook-with-args-until-failure.el:
+       * 
test/lisp/emacs-lisp/bytecomp-resources/error-lexical-var-with-remove-hook.el:
+       * 
test/lisp/emacs-lisp/bytecomp-resources/error-lexical-var-with-add-hook.el:
+       New files.
+
+2020-12-01  Zajcev Evgeny  <zevlg@yandex.ru>
+
+       Fix use of 'switch-to-buffer-preserve-window-point'
+
+       * lisp/window.el (switch-to-buffer): Respect buffer local value
+       of 'switch-to-buffer-preserve-window-point' variable.
+
+2020-12-01  Stefan Kangas  <stefan@marxist.se>
+
+       Add tests for some byte-compiler warnings
+
+       * test/lisp/emacs-lisp/bytecomp-tests.el
+       (bytecomp-warn/warn-interactive-only\.el)
+       (bytecomp-warn/warn-obsolete-defun\.el)
+       (bytecomp-warn/warn-obsolete-hook\.el)
+       (bytecomp-warn/warn-obsolete-variable-same-file\.el)
+       (bytecomp-warn/warn-obsolete-variable\.el): New tests.
+       * test/lisp/emacs-lisp/bytecomp-resources/warn-interactive-only.el:
+       * test/lisp/emacs-lisp/bytecomp-resources/warn-obsolete-defun.el:
+       * test/lisp/emacs-lisp/bytecomp-resources/warn-obsolete-hook.el:
+       * 
test/lisp/emacs-lisp/bytecomp-resources/warn-obsolete-variable-same-file.el:
+       * test/lisp/emacs-lisp/bytecomp-resources/warn-obsolete-variable.el:
+       New files.
+
+2020-12-01  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Reset xref-show-xrefs-function temporarily
+
+       * lisp/dired-aux.el (dired-do-find-regexp-and-replace):
+       Make sure xref-show-xrefs-function has the necessary value (bug#44905).
+
+2020-12-01  Andrea Corallo  <akrl@sdf.org>
+
+       Fix `comp-mvar-symbol-p' and `comp-mvar-cons-p' (bug#44968)
+
+       * lisp/emacs-lisp/comp.el (comp-mvar-symbol-p): As all slots into
+       a `comp-cstr' are in or fix this logic.
+       (comp-mvar-cons-p): Likewise.
+       * test/src/comp-tests.el (bug-44968): New testcase.
+       * test/src/comp-test-funcs.el (comp-test-44968-f): New test
+       function.
+
+2020-11-30  Stefan Kangas  <stefan@marxist.se>
+
+       Decrease code duplication in byte-compiler free-vars warning
+
+       * lisp/emacs-lisp/bytecomp.el
+       (byte-compile-free-vars-warn): New defun extracted from...
+       (byte-compile-variable-ref, byte-compile-variable-set): ...here.
+
+2020-11-30  Stefan Kangas  <stefan@marxist.se>
+
+       Test byte-compiler free variable warning
+
+       * test/lisp/emacs-lisp/bytecomp-tests.el (ert-x): Require.
+       (bytecomp--define-warning-file-test): New macro.
+       (bytecomp-warn/warn-free-setq\.el)
+       (bytecomp-warn/warn-free-variable-reference\.el): New tests.
+       * test/lisp/emacs-lisp/bytecomp-resources/warn-free-setq.el:
+       * 
test/lisp/emacs-lisp/bytecomp-resources/warn-free-variable-reference.el:
+       New files.
+
+2020-11-30  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/so-long.el: Doc fix to reduce use of passive voice.
+
+2020-11-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Don't show in 'view-lossage' responses to xterm feature queries
+
+       * lisp/term/xterm.el (xterm--read-event-for-query): Prevent
+       recording the characters read as the xterm response to a query,
+       so as not to show them in 'view-lossage'.  (Bug#44908)
+
+2020-11-30  Michael Albinus  <michael.albinus@gmx.de>
+
+       Some adaptions to tramp-tests.el
+
+       * test/lisp/net/tramp-tests.el (tramp-test-vec): Check for remote
+       `tramp-test-temporary-file-directory'.
+       (tramp-test11-copy-file, tramp-test12-rename-file):
+       Do not skip for tramp-gvfs.el.
+       (tramp--test-sh-p): Use `tramp-test-vec'.
+
+2020-11-30  Michael Albinus  <michael.albinus@gmx.de>
+
+       Adapt Tramp versions
+
+       * doc/misc/tramp.texi (Obtaining @value{tramp}):
+       (Remote shell setup, Remote processes, Archive file names):
+       * lisp/net/trampver.el (customize-package-emacs-version-alist):
+       Adapt Tramp versions.
+
+2020-11-30  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Improve docstrings
+
+       * lisp/progmodes/project.el (project-find-file)
+       (project-or-external-find-file): More accurate docstrings (bug#44588).
+
+2020-11-29  Philipp Stephani  <phst@google.com>
+
+       Fix double-free bug when finalizing module runtimes.
+
+       * src/emacs-module.c (finalize_runtime_unwind): Don't finalize initial
+       environment twice.
+
+       * test/src/emacs-module-resources/mod-test.c (emacs_module_init):
+       Allocate lots of values during module initialization to trigger the
+       bug.
+
+2020-11-29  Juri Linkov  <juri@linkov.net>
+
+       * lisp/simple.el (read-from-kill-ring): Call current-kill to prefill 
kill-ring
+
+2020-11-29  Juri Linkov  <juri@linkov.net>
+
+       Fix MINIBUF 'nomini' arg for windmove/window-in-direction (bug#44932)
+
+       * lisp/windmove.el (windmove-display-in-direction)
+       (windmove-delete-in-direction, windmove-swap-states-in-direction):
+       Add 'nomini' as MINIBUF arg of window-in-direction.
+
+       * lisp/window.el (window-in-direction): Rename arg MINI to MINIBUF.
+       Update docstring from walk-window-tree.
+       Send MINIBUF arg to walk-window-tree unchanged.
+
+2020-11-29  Alan Third  <alan@idiocy.org>
+
+       Allow doprint to handle multibyte chars in format (bug#44349)
+
+       * src/doprnt.c (doprnt): Handle the case where fmtchar is the start of
+       a multibyte character.
+
+2020-11-29  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-11-29  Protesilaos Stavrou  <info@protesilaos.com>
+
+       Make log-view-commit-body less intrusive
+
+       * lisp/vc/log-view.el (log-view-commit-body): Inherit from
+       font-lock-comment-face.  This makes expanded commit messages in
+       log-view look the same as they did prior to commit 1f0b929430 (consult
+       bug#44424) (bug#44937).
+
+2020-11-29  Akira Kyle  <akira@akirakyle.com>
+
+       Return the correct suffix in eww-make-unique-file-name
+
+       * lisp/net/eww.el (eww-make-unique-file-name): Return the correct
+       suffix (bug#44936).
+
+2020-11-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       frame-position doc string clarificaton
+
+       * src/frame.c (Fframe_position): Mention that the values are
+       system-dependent (bug#32977).
+
+2020-11-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       garbage-collect doc string clarification
+
+       * src/alloc.c (Fgarbage_collect): Mention that calling this
+       function is not guaranteed to collect all the garbage (bug#34404).
+
+2020-11-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak eww-use-browse-url doc string
+
+       * lisp/net/eww.el (eww-use-browse-url): Tweak doc string wording.
+
+2020-11-29  Karl Fogel  <kfogel@red-bean.com>
+
+       Save bookmarks by using `write-file' (bug#12507)
+
+       Go back to using `write-file' to save bookmarks, instead of using
+       `write-region'.  This means numbered backups of the bookmark file may
+       get made again, depending on the value of `bookmark-version-control'.
+
+       Thanks especially to Drew Adams and Eli Zaretskii for their
+       persistence in tracking down information relevant to this change.
+
+2020-11-28  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix filing messages when 'rmail-output-reset-deleted-flag' is non-nil
+
+       * lisp/mail/rmailout.el (rmail-output): Fix off-by-one error in
+       deciding when to advance to the next message under non-nil
+       'rmail-output-reset-deleted-flag'.  (Bug#44839)
+
+2020-11-28  Lele Gaifax  <lele@metapensiero.it>
+
+       Update TUTORIAL.it
+
+       * etc/tutorials/TUTORIAL.it: Follow changes made to TUTORIAL in the
+       last year
+
+2020-11-28  Michael Albinus  <michael.albinus@gmx.de>
+
+       Make file copying in tramp-gvfs more robust
+
+       * test/lisp/net/tramp-tests.el (tramp-test11-copy-file)
+       (tramp-test12-rename-file): Do not skip for tramp-gvfs.el.
+
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-do-copy-or-rename-file):
+       Add sanity checks.
+
+2020-11-28  Mattias Engdegård  <mattiase@acm.org>
+
+       * etc/tutorials/TUTORIAL.sv: General copy-editing.
+
+2020-11-28  Eli Zaretskii  <eliz@gnu.org>
+
+       Revert "Fix incorrect handling of module runtime and environment 
pointers."
+
+       This reverts commit cdc632fbe6e149318147a98cccf1b7af191f2ce8.
+       Those changes are too significant and non-trivial to be
+       suitable for a release branch at this time.
+
+2020-11-27  Andrea Corallo  <akrl@sdf.org>
+
+       Add intersection support into comp-cstr.el
+
+2020-11-27  Andrea Corallo  <akrl@sdf.org>
+
+       Synthesize as const primitive function pointers and its container 
struct.
+
+       * src/comp.c (declare_imported_func): Make const function pointer
+       to primitive functions.
+       (emit_ctxt_code): Make struct 'comp.func_relocs' const.
+
+2020-11-27  Philipp Stephani  <phst@google.com>
+
+       Fix incorrect handling of module runtime and environment pointers.
+
+       We used to store module runtime and environment pointers in the static
+       lists Vmodule_runtimes and Vmodule_environments.  However, this is
+       incorrect because these objects have to be kept per-thread.  With this
+       naive approach, interleaving module function calls in separate threads
+       leads to environments being removed in the wrong order, which in turn
+       can cause local module values to be incorrectly garbage-collected.
+
+       Instead, turn Vmodule_runtimes and Vmodule_environments into
+       hashtables keyed by the thread objects.  The fix is relatively
+       localized and should therefore be safe enough for the release branch.
+
+       Module assertions now have to walk the pointer list for the current
+       thread, which is more correct since they now only find environments
+       for the current thread.
+
+       Also add a unit test that exemplifies the problem.  It interleaves two
+       module calls in two threads so that the first call ends while the
+       second one is still active.  Without this change, this test triggers
+       an assertion failure.
+
+       * src/emacs-module.c (Fmodule_load, initialize_environment)
+       (finalize_environment, finalize_runtime_unwind): Store runtime and
+       environment pointers in per-thread lists.
+       (syms_of_module): Initialize runtimes and environments hashtables.
+       (module_assert_runtime, module_assert_env, value_to_lisp): Consider
+       only objects for the current thread.
+       (module_gc_hash_table_size, module_hash_push, module_hash_pop): New
+       generic hashtable helper functions.
+       (module_objects, module_push_pointer, module_pop_pointer): New helper
+       functions to main thread-specific lists of runtime and environment
+       pointers.
+       (mark_modules): Mark all environments in all threads.
+
+       * test/data/emacs-module/mod-test.c (Fmod_test_funcall): New test
+       function.
+       (emacs_module_init): Bind it.
+
+       * test/src/emacs-module-tests.el (emacs-module-tests--variable): New
+       helper type to guard access to state in a thread-safe way.
+       (emacs-module-tests--wait-for-variable)
+       (emacs-module-tests--change-variable): New helper functions.
+       (emacs-module-tests/interleaved-threads): New unit test.
+
+2020-11-27  Mattias Engdegård  <mattiase@acm.org>
+
+       Use correct glyph in title when resizing NS frames
+
+       * src/nsterm.m ([EmacsView windowWillResize:toSize:]): Use ×, not x.
+
+2020-11-27  Philipp Stephani  <phst@google.com>
+
+       Fix incorrect handling of module runtime and environment pointers.
+
+       We used to store module runtime and environment pointers in the static
+       lists Vmodule_runtimes and Vmodule_environments.  However, this is
+       incorrect because these objects have to be kept per-thread.  With this
+       naive approach, interleaving module function calls in separate threads
+       leads to environments being removed in the wrong order, which in turn
+       can cause local module values to be incorrectly garbage-collected.
+       The fix isn't completely trivial: specbinding the lists wouldn't work
+       either, because then the garbage collector wouldn't find the
+       environments in other threads than the current ones, again leading to
+       objects being garbage-collected incorrectly.  While introducing custom
+       pseudovector types would fix this, it's simpler to put the runtime and
+       environment pointers into the specbinding list as new specbinding
+       kinds.  This works since we need to unwind them anyway, and we only
+       ever treat the lists as a stack.  The thread switching machinery
+       ensures that the specbinding lists are thread-local, and that all
+       elements of the specbinding lists in all threads are marked during
+       garbage collection.
+
+       Module assertions now have to walk the specbinding list for the
+       current thread, which is more correct since they now only find
+       environments for the current thread.  As a result, we can now remove
+       the faulty Vmodule_runtimes and Vmodule_environments variables
+       entirely.
+
+       Also add a unit test that exemplifies the problem.  It interleaves two
+       module calls in two threads so that the first call ends while the
+       second one is still active.  Without this change, this test triggers
+       an assertion failure.
+
+       * src/lisp.h (enum specbind_tag): Add new tags for module runtimes and
+       environments.
+
+       * src/eval.c (record_unwind_protect_module): New function to record a
+       module object in the specpdl list.
+       (do_one_unbind): Unwind module objects.
+       (backtrace_eval_unrewind, default_toplevel_binding, lexbound_p)
+       (Fbacktrace__locals): Deal with new specbinding types.
+       (mark_specpdl): Mark module environments as needed.
+
+       * src/alloc.c (garbage_collect): Remove call to 'mark-modules'.
+       Garbage collection of module values is now handled as part of marking
+       the specpdl of each thread.
+
+       * src/emacs-module.c (Fmodule_load, funcall_module): Use specpdl to
+       record module runtimes and environments.
+       (module_assert_runtime, module_assert_env, value_to_lisp): Walk
+       through specpdl list instead of list variables.
+       (mark_module_environment): Rename from 'mark_modules'.  Don't attempt
+       to walk though current thread's environments only, since that would
+       miss other threads.
+       (initialize_environment, finalize_environment): Don't change
+       Vmodule_environments variable; environments are now in the specpdl
+       list.
+       (finalize_environment_unwind, finalize_runtime_unwind): Make 'extern'
+       since do_one_unbind now calls them.
+       (finalize_runtime_unwind): Don't change Vmodule_runtimes variable;
+       runtimes are now in the specpdl list.
+       (syms_of_module): Remove Vmodule_runtimes and Vmodule_environments.
+
+       * test/data/emacs-module/mod-test.c (Fmod_test_funcall): New test
+       function.
+       (emacs_module_init): Bind it.
+
+       * test/src/emacs-module-tests.el (emacs-module-tests--variable): New
+       helper type to guard access to state in a thread-safe way.
+       (emacs-module-tests--wait-for-variable)
+       (emacs-module-tests--change-variable): New helper functions.
+       (emacs-module-tests/interleaved-threads): New unit test.
+
+2020-11-27  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/subr.el (activate-change-group): Refine fix for bug#33341
+
+2020-11-27  Mattias Engdegård  <mattiase@acm.org>
+
+       Make the 'cucumber' compilation pattern work without 'omake'
+
+       When 'omake' is included in compilation-error-regexp-alist, which it
+       still is by default, then all other rules are modified to match with
+       an extra leading 6 spaces as well. The 'cucumber' pattern relied on
+       this in order to work as intended.
+
+       * lisp/progmodes/compile.el (compilation-error-regexp-alist-alist):
+       Extend the 'cucumber' pattern so that it works even when 'omake'
+       is not included.  Move it below the 'gnu' rule so that it doesn't
+       match anything else.
+
+2020-11-27  Mattias Engdegård  <mattiase@acm.org>
+
+       Update TUTORIAL.de and TUTORIAL.fr
+
+       * etc/tutorials/TUTORIAL.de:
+       * etc/tutorials/TUTORIAL.fr: Follow recent changes in TUTORIAL.
+
+2020-11-27  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/subr.el (activate-change-group): Fix bug#33341
+
+2020-11-27  Stefan Kangas  <stefankangas@gmail.com>
+
+       Update TUTORIAL.es
+
+       * etc/tutorials/TUTORIAL.es: A followup to recent changes in
+       TUTORIAL.
+
+2020-11-27  Stefan Kangas  <stefankangas@gmail.com>
+
+       Update TUTORIAL.sv
+
+       * etc/tutorials/TUTORIAL.sv: A followup to recent changes in
+       TUTORIAL.  Minor tweaks for grammar and style.
+
+2020-11-27  Juri Linkov  <juri@linkov.net>
+
+       Add completion-tab-width to align prefix chars with names in 
read-char-by-name
+
+       * lisp/international/mule-cmds.el (mule--ucs-names-affixation):
+       Replace mule--ucs-names-annotation to display chars in prefixes
+       that implements two FIXME items.
+       (read-char-by-name): Let-bind completion-tab-width to 4.
+       Use affixation-function instead of annotation-function.
+
+       * lisp/minibuffer.el (completion-tab-width): New variable.
+       (completion--insert-strings): Align colwidth to tab positions
+       when completion-tab-width is non-nil.
+
+       * lisp/simple.el (completion-setup-function): Set tab-width to
+       completion-tab-width when completion-tab-width is non-nil.
+
+       https://lists.gnu.org/archive/html/emacs-devel/2020-11/msg01263.html
+
+2020-11-27  Juri Linkov  <juri@linkov.net>
+
+       * lisp/simple.el (read-from-kill-ring): Use frame-text-cols, not 
frame-width.
+
+2020-11-27  Eli Zaretskii  <eliz@gnu.org>
+
+       Update TUTORIAL.he
+
+       * etc/tutorials/TUTORIAL.he: A followup to recent changes in
+       TUTORIAL.
+
+2020-11-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix up previous server exit directory deletion
+
+       * lisp/server.el (server-start): Only delete the server directory
+       if it's in /tmp (bug#44644).
+
+2020-11-26  Andrea Corallo  <akrl@sdf.org>
+
+       Move some tests from comp-tests.el to comp-cstr-tests.el
+
+       * test/lisp/emacs-lisp/comp-cstr-tests.el
+       (comp-cstr-typespec-tests-alist): Add tests covering what was in:
+       `range-simple-union', `union-types', `destructure-type-spec'.
+       * test/src/comp-tests.el (range-simple-intersection, union-types)
+       (destructure-type-spec): Remove tests.
+
+2020-11-26  Andrea Corallo  <akrl@sdf.org>
+
+       Add comp-cstr.el and comp-cstr-tests.el
+
+       As the constraint logic of the compiler is not trivial and largely
+       independent from the rest of the code move it into comp-cstr.el to
+       ease separation and maintainability.
+
+       This commit improve the conversion type
+       specifier -> constraint for generality.
+
+       Lastly this should help with bootstrap time as comp.el compilation
+       unit is slimmed down.
+
+       * lisp/emacs-lisp/comp-cstr.el: New file.
+       (comp--typeof-types, comp--all-builtin-types): Move from comp.el.
+       (comp-cstr, comp-cstr-f): Same + rename.
+       (comp-cstr-ctxt): New struct.
+       (comp-supertypes, comp-common-supertype-2)
+       (comp-common-supertype, comp-subtype-p, comp-union-typesets)
+       (comp-range-1+, comp-range-1-, comp-range-<, comp-range-union)
+       (comp-range-intersection): Move from comp.el.
+       (comp-cstr-union-no-range, comp-cstr-union): Move from comp.el and
+       rename.
+       (comp-cstr-union-make): New function.
+       (comp-type-spec-to-cstr, comp-cstr-to-type-spec): Move from
+       comp.el, rename it and rework it.
+
+       * lisp/emacs-lisp/comp.el (comp-known-func-cstr-h): Rework.
+       (comp-ctxt): Remove two fields and include `comp-cstr-ctxt'.
+       (comp-mvar, comp-fwprop-call): Update for `comp-cstr' being
+       renamed.
+       (comp-fwprop-insn): Use `comp-cstr-union-no-range' or
+       `comp-cstr-union'.
+       (comp-ret-type-spec): Use `comp-cstr-union' and rework.
+
+       * test/lisp/emacs-lisp/comp-cstr-tests.el: New file.
+       (comp-cstr-test-ts, comp-cstr-typespec-test): New functions.
+       (comp-cstr-typespec-tests-alist): New defconst to generate tests
+       on.
+       (comp-cstr-generate-tests): New macro.
+
+       * test/src/comp-tests.el (comp-tests-type-spec-tests): Update.
+       (ret-type-spec): Initialize constraint context.
+
+2020-11-26  Dario Gjorgjevski  <dario.gjorgjevski@gmail.com>
+
+       Fix modification check when custom-form is `lisp'
+
+       * lisp/cus-edit.el (custom-variable-modified-p): Quote the value when
+       custom form is 'lisp (or 'mismatch) prior to comparing in order to
+       accommodate `custom-variable-value-create' (bug#44852).
+
+2020-11-26  Mattias Engdegård  <mattiase@acm.org>
+
+       Remove keyboard anachronisms from tutorial
+
+       * etc/tutorials/TUTORIAL: Don't keep referring to EDIT as if it were a
+       common name for the Meta key; since a few decades back it's labelled
+       Alt (or Option or ⌥ but those keys usually also have 'alt' engraved on
+       them).  Similarly, CTL is practically extinct and not worth
+       mentioning.
+
+2020-11-26  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix replace-regexp-in-string substring match data translation
+
+       For certain patterns, re-matching the same regexp on the matched
+       substring does not produce correctly translated match data
+       (bug#15107 and bug#44861).
+
+       Using a new builtin function also improves performance since the
+       number of calls to string-match is halved.
+
+       Reported by Kevin Ryde and Shigeru Fukaya.
+
+       * lisp/subr.el (replace-regexp-in-string): Translate the match data
+       using match-data--translate instead of trusting a call to string-match
+       on the matched string to do the job.
+       * test/lisp/subr-tests.el (subr-replace-regexp-in-string):
+       Add test cases.
+       * src/search.c (Fmatch_data__translate): New internal function.
+       (syms_of_search): Register it as a subroutine.
+
+2020-11-26  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: Fix error in cache handling.  This fixes bug #43481
+
+       * lisp/progmodes/cc-engine.el (c-full-pp-to-literal): Handle correctly 
END
+       being before HERE by using parse-partial-sexp to get the end of the 
literal
+       containing HERE.
+
+2020-11-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Keep point in the *eldoc* buffer in eldoc-display-in-echo-area
+
+       * lisp/emacs-lisp/eldoc.el (eldoc-display-in-echo-area): Use
+       'save-excursion' to keep point position in *eldoc* buffer.
+       Suggested by Andrii Kolomoiets <andreyk.mad@gmail.com>.
+
+2020-11-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow following symlinks when recompiling directories
+
+       * doc/lispref/compile.texi (Compilation Functions): Document it.
+       * lisp/emacs-lisp/bytecomp.el (byte-recompile-directory): Allow
+       following symlinks (bug#10292).
+
+2020-11-26  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/files.el (auto-mode-alist): Add entry for "archive-contents".
+
+2020-11-26  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Add "replied" -> "answered" for gnus-search imap searches
+
+       * lisp/gnus/gnus-search.el (gnus-search-imap-handle-flag): This allows
+       "mark:A" to be translated into "ANSWERED" and "-mark:A" to be
+       translated into "UNANSWERED".
+
+2020-11-26  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Assume default imap TEXT search even when not using parsed queries
+
+       This behavior both better matches the previous nnir behavior, reducing
+       confusion for new users, and matches behavior when using parsed
+       queries.
+
+       * lisp/gnus/gnus-search.el (gnus-search-imap-search-keys): Make sure
+       this variable contains all known IMAP search keys.
+       (gnus-search-run-search): If the search query doesn't start with a
+       known search key, prepend "TEXT " to the query.
+
+2020-11-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       Use null-device where appropriate
+
+       * lisp/filesets.el (filesets-select-command):
+       * lisp/shell.el (shell-mode):
+       * lisp/term.el (term-exec-1):
+       * lisp/wdired.el (wdired-do-symlink-changes):
+       * lisp/cedet/ede/pmake.el (ede-proj-makefile-create):
+       * lisp/eshell/esh-io.el (eshell-set-output-handle):
+       * lisp/gnus/gnus-fun.el (gnus-grab-cam-x-face):
+       * lisp/gnus/mml2015.el (mml2015-epg-key-image):
+       * lisp/gnus/smime.el (smime-noverify-region):
+       * lisp/org/ob-picolisp.el (org-babel-execute:picolisp):
+       * lisp/org/ob-screen.el (org-babel-prep-session:screen)
+       (org-babel-prep-session:screen):
+       * lisp/play/fortune.el (fortune-quiet-strfile-options):
+       * lisp/progmodes/cperl-mode.el (cperl-pod2man-build-command):
+       * lisp/progmodes/sh-script.el (sh-tmp-file):
+       * lisp/vc/diff-mode.el (diff-add-log-current-defuns)
+       (diff--font-lock-prettify):
+       * lisp/vc/ediff-mult.el (ediff-patch-file-form-meta):
+       * lisp/vc/ediff-ptch.el (ediff-map-patch-buffer)
+       (ediff-fixup-patch-map, ediff-dispatch-file-patching-job):
+       * lisp/vc/vc.el (vc-diff-internal): Use null-device or  (null-device),
+       respectively.  (Bug#3736)
+
+2020-11-25  Juri Linkov  <juri@linkov.net>
+
+       * lisp/minibuffer.el (completions-format): Add new value 'one-column'.
+
+       * lisp/minibuffer.el (completion--insert-strings): Support 'one-column'.
+
+       * lisp/simple.el (read-from-kill-ring): Truncate strings at frame-width.
+
+2020-11-25  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       (defvar): Detect defining a variable currently lexically bound
+
+       * src/eval.c (lexbound_p): New function.
+       (Finternal__define_uninitialized_variable): Use it.
+
+2020-11-25  Mattias Engdegård  <mattiase@acm.org>
+
+       Add tests for replace-regexp-in-string
+
+       * test/lisp/subr-tests.el (subr-replace-regexp-in-string): New.
+
+2020-11-25  Mattias Engdegård  <mattiase@acm.org>
+
+       * doc/lispref/searching.texi (Rx Constructs): Group numbering fix
+
+2020-11-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       * test/lisp/net/tramp-tests.el (tramp-test29-start-file-process):
+
+       Use `tramp--test-windows-nt-p'.
+
+2020-11-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       Merge from origin/emacs-27
+
+       6442cdc0e4 Revert extra focus redirection in do_switch_frame (Bug#24803)
+       fc4379f1ae Minor cleanup of tramp-tests.el on MS Windows
+       dea3d6aa18 Fix handling of defcustom :local tag
+
+2020-11-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       Merge from origin/emacs-27
+
+       f425a774c2 Fix display artifacts when 'display' properties cover newl...
+
+2020-11-25  Martin Rudalics  <rudalics@gmx.at>
+
+       Revert extra focus redirection in do_switch_frame (Bug#24803)
+
+       * src/frame.c (do_switch_frame): Do not also redirect frame
+       focus when FRAME has its minibuffer window on the selected
+       frame which was intended to fix Bug#24500.  It may cause
+       Bug#24803 and lead to a nasty state where no active cursor is
+       shown on any frame, see
+       https://lists.gnu.org/archive/html/emacs-devel/2020-11/msg01137.html.
+
+2020-11-25  Juri Linkov  <juri@linkov.net>
+
+       Add 'completions-detailed' to add prefix/suffix with 
'affixation-function'
+
+       * doc/lispref/minibuf.texi (Completion Variables)
+       (Programmed Completion): Add affixation-function.
+
+       * lisp/help-fns.el (help--symbol-completion-table-affixation): New 
function.
+       (help--symbol-completion-table): Set affixation-function when
+       completions-detailed is non-nil.
+
+       * lisp/minibuffer.el (completion-metadata): Add affixation-function
+       to docstring.
+       (completions-annotations): Inherit from shadow with italic.
+       (completions-detailed): New defcustom.
+       (completion--insert-strings): Count string-width on all strings in
+       completion list.  Insert prefix and suffix.
+       (completion-extra-properties): Add affixation-function to docstring.
+       (minibuffer-completion-help): Call affixation-function.
+       (minibuffer-default-prompt-format): Move down closer to its use.
+
+       https://lists.gnu.org/archive/html/emacs-devel/2020-11/msg00613.html
+
+2020-11-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       Minor cleanup of tramp-tests.el on MS Windows
+
+       * test/lisp/net/tramp-tests.el (tramp-test29-start-file-process):
+       Do not test remote pty on MS Windows.
+
+2020-11-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Move code in face-remap.el to avoid a compilation warning
+
+       * lisp/face-remap.el (text-scale--refresh): Move code to avoid
+       compilation warning.
+
+       In text-scale--refresh:
+       face-remap.el:241:14: Warning: reference to free variable 
‘text-scale-mode’
+
+2020-11-25  Stefan Kangas  <stefan@marxist.se>
+
+       Make text-scale-mode optionally adjust the header line
+
+       * lisp/face-remap.el
+       (text-scale-remap-header-line-face): New buffer local variable.
+       (text-scale-mode): Adjust header line if above variable is non-nil.
+       (face-remap--clear-remappings, face-remap--remap-face): New defuns.
+       * lisp/face-remap.el: Arrange to watch text-scale-mode-remapping.
+       (text-scale--refresh): New function.
+
+       * lisp/emacs-lisp/tabulated-list.el (tabulated-list-mode): Use
+       text-scale-remap-header-line.  (Bug#41852)
+
+2020-11-24  Juri Linkov  <juri@linkov.net>
+
+       Yank items selected from kill-ring using completion and minibuffer 
history
+
+       * doc/emacs/killing.texi (Earlier Kills): Document standalone M-y.
+
+       * doc/emacs/search.texi (Isearch Yank): Explain standalone M-y.
+
+       * doc/lispref/text.texi (Yank Commands): Soften the wording of
+       yank after another yank.
+
+       * lisp/delsel.el: Put 'yank' property on yank-pop and 
yank-from-kill-ring.
+
+       * lisp/isearch.el (isearch-yank-pop): Use with-isearch-suspended
+       and read-from-kill-ring to read a string from the kill-ring and
+       append it to the search string.
+
+       * lisp/simple.el (yank-pop): Call yank-from-kill-ring and
+       read-from-kill-ring when last-command is not 'yank' instead of
+       signaling an error.  Remove "*" from interactive spec.  Update 
docstring.
+       (read-from-kill-ring): New function.
+       (yank-from-kill-ring): New command.
+
+       https://lists.gnu.org/archive/html/emacs-devel/2020-11/msg00801.html
+
+2020-11-24  Stefan Kangas  <stefan@marxist.se>
+
+       * build-aux/update-subdirs: Use lexical-binding in subdirs.el.
+
+2020-11-24  Philipp Stephani  <phst@google.com>
+
+       Add a (broken) unit test to exemplify Bug#11218.
+
+       * test/lisp/emacs-lisp/ert-tests.el
+       (ert-test-with-demoted-errors): New (broken) unit test.
+
+2020-11-24  Stefan Kangas  <stefan@marxist.se>
+
+       Remove XEmacs compat code from idlw-help.el
+
+       * lisp/progmodes/idlw-help.el (idlwave-do-context-help)
+       (idlwave-help-show-help-frame): Remove XEmacs compat code.
+
+2020-11-24  Stefan Kangas  <stefan@marxist.se>
+
+       Make XEmacs compat aliases easy-menu-{add,remove} obsolete
+
+       * lisp/emacs-lisp/easymenu.el (easy-menu-remove, easy-menu-add):
+       Make XEmacs compat aliases obsolete.
+       * lisp/allout.el (allout-setup-menubar):
+       * lisp/cus-edit.el (Custom-mode):
+       * lisp/gnus/gnus-art.el (gnus-article-edit-mode):
+       * lisp/gnus/message.el (message-mode):
+       * lisp/net/sieve.el (sieve-manage-mode):
+       * lisp/org/org-agenda.el (org-agenda-mode):
+       * lisp/org/org-table.el (org-table-edit-formulas, orgtbl-mode):
+       * lisp/org/org.el:
+       * lisp/progmodes/cperl-mode.el (cperl-mode):
+       * lisp/progmodes/hideshow.el (hs-minor-mode):
+       * lisp/progmodes/idlw-help.el (idlwave-help-mode):
+       * lisp/progmodes/idlw-shell.el (idlwave-shell-mode):
+       * lisp/progmodes/idlwave.el (idlwave-mode):
+       * lisp/progmodes/meta-mode.el (meta-common-mode):
+       * lisp/progmodes/octave.el (octave-mode):
+       * lisp/progmodes/prolog.el (prolog-menu):
+       * lisp/progmodes/tcl.el (tcl-mode):
+       * lisp/speedbar.el (speedbar-reconfigure-keymaps):
+       * lisp/term.el (term-mode, term-char-mode, term-process-pager):
+       * lisp/textmodes/dns-mode.el (dns-mode):
+       * lisp/wid-browse.el (widget-browse-mode): Don't call above
+       obsolete aliases.
+       * lisp/cedet/semantic/grammar.el (semantic-grammar-setup-menu-xemacs):
+       * lisp/mh-e/mh-folder.el (mh-folder-mode):
+       * lisp/mh-e/mh-identity.el (mh-identity-add-menu):
+       * lisp/mh-e/mh-letter.el (mh-letter-mode):
+       * lisp/mh-e/mh-search.el (mh-search-mode):
+       * lisp/mh-e/mh-show.el (mh-show-mode):
+       * lisp/obsolete/otodo-mode.el (todo-mode):
+       * lisp/progmodes/antlr-mode.el (antlr-mode):
+       * lisp/progmodes/cc-mode.el (c-mode, c++-mode, objc-mode)
+       (java-mode, idl-mode, pike-mode):
+       * lisp/progmodes/sql.el (sql-mode, sql-interactive-mode):
+       * lisp/progmodes/vhdl-mode.el (vhdl-update-mode-menu)
+       (vhdl-add-source-files-menu, vhdl-mode):
+       * lisp/textmodes/reftex-index.el (reftex-index-mode)
+       (reftex-index-phrases-mode):
+       * lisp/textmodes/reftex-toc.el (reftex-toc-mode):
+       * lisp/textmodes/reftex.el (reftex-mode): Only call above obsolete
+       aliases in XEmacs.
+
+       * lisp/progmodes/prolog.el (prolog-inferior-menu):
+       * lisp/erc/erc-menu.el (erc-menu-add, erc-menu-remove): Don't call
+       above obsolete aliases.  Make obsolete.
+       * lisp/erc/erc-menu.el (menu, erc-menu-add, erc-menu-remove):
+       * lisp/progmodes/prolog.el (prolog-inferior-mode): Adjust callers.
+       * lisp/speedbar.el (speedbar-previous-menu): Make obsolete.
+       (Bug#44731)
+
+2020-11-24  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Fix handling of defcustom :local tag
+
+       For discussion, see the following emacs-devel thread:
+       https://lists.gnu.org/r/emacs-devel/2020-11/msg00734.html
+
+       * lisp/custom.el (custom-declare-variable): Delay call to
+       make-variable-buffer-local until after user option has been
+       initialized with a value.  Otherwise the user option may be
+       initialized to nil.
+       * test/lisp/custom-tests.el (custom--test-local-option)
+       (custom--test-permanent-option): New :local user options.
+       (custom-test-local-option): New test for defcustom :local keyword.
+
+2020-11-24  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix display artifacts when 'display' properties cover newlines
+
+       * src/xdisp.c (pos_visible_p): Set glyph_row of scratch iterators
+       to NULL, to avoid producing glyphs while we figure out the layout.
+       (Bug#44826)
+
+2020-11-24  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Fix menu binding for files in fileset
+
+       * lisp/filesets.el (filesets-remake-shortcut): We want the callback of
+       the menu item, not a list that contains the callback.  (Bug#44764)
+
+2020-11-24  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Fix matching of inline choices for the choice widget
+
+       A choice widget should be able to match either no inline values or
+       inline values, upon request.  (Bug#44579)
+
+       * lisp/wid-edit.el (choice): New property, :inline-bubbles-p.  A
+       predicate that returns non-nil if the choice widget can act as an
+       inline widget.  Document it.
+       (widget-choice-inline-bubbles-p): New function, for the
+       :inline-bubbles-p property of the choice widget.
+       (widget-inline-p): New function.  Use the :inline-bubbles-p property
+       of the widget, if any.
+       (widget-match-inline): Use the above to see if the widget can act like
+       an inline widget.  Document it.
+       (widget-choice-value-create): Account for the case of a choice widget
+       that has inline members.
+       (widget-checklist-add-item, widget-editable-list-value-create)
+       (widget-group-value-create): Use widget-inline-p rather than just
+       checking for a non-nil :inline property, allowing these functions to
+       pass the complete information to widgets like the choice widget to
+       create their values.
+
+       * test/lisp/wid-edit-tests.el (widget-test-choice-match-no-inline)
+       (widget-test-choice-match-all-inline)
+       widget-test-choice-match-some-inline): New tests, to check that choice
+       widgets can match its choices, inline or not.
+       (widget-test-inline-p): New test, for the new function
+       widget-inline-p.
+       (widget-test-repeat-can-handle-choice)
+       (widget-test-repeat-can-handle-inlinable-choice)
+       (widget-test-list-can-handle-choice)
+       (widget-test-list-can-handle-inlinable-choice)
+       (widget-test-option-can-handle-choice)
+       (widget-test-option-can-handle-inlinable-choice): New tests.  This
+       grouping widgets need to be able to create a choice widget regardless
+       if it has inline choices or not.
+
+2020-11-24  Drew Adams  <drew.adams@oracle.com>
+
+       Fix finding filelist for :tree fileset (Bug#976)
+
+       * lisp/filesets.el (filesets-files-under): New function, used to get
+       all files for a :tree fileset.
+       (filesets-get-filelist): Use it.  Look for the directory and the
+       pattern in the right place inside entry.
+
+2020-11-24  Mattias Engdegård  <mattiase@acm.org>
+
+       Autoload the 'rx' pcase macroexpander (bug#44807)
+
+       * lisp/emacs-lisp/rx.el (rx--pcase-macroexpander]): Autoload.
+
+2020-11-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow controlling whether SPC in Gnus goes to the next article
+
+       * doc/misc/gnus.texi (Summary Maneuvering): Document it.
+       * lisp/gnus/gnus-sum.el (gnus-paging-select-next): New variable.
+       (gnus-summary-prev-page, gnus-summary-next-page): Use it.
+
+2020-11-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make the `C' command work on marked files
+
+       * lisp/arc-mode.el (archive-copy-file): Make the `C' command work
+       on marked files (bug#44753).
+
+2020-11-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a user option to control how links are followed in eww
+
+       * doc/misc/eww.texi (Advanced): Document it (bug#44783).
+
+       * lisp/net/eww.el (eww-use-browse-url): New variable.
+       (eww-follow-link): Use it.
+
+2020-11-24  Itai Seggev  <is+apple@cs.hmc.edu>  (tiny change)
+
+       Codesign the executable on recene MacOS systems
+
+       * src/Makefile.in (temacs$(EXEEXT)): Codesign the executable on
+       recent (ARM) MacOS systems (bug#43878).  Without this, building
+       Emacs fails.
+
+2020-11-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Delete the emacs-server directory upon Emacs exit
+
+       * lisp/server.el (server-start): Delete the server directory upon
+       Emacs exit (bug#44644).  This fixes the problem of /tmp/emacs0
+       directories being left behind when running an Emacs server as root.
+
+2020-11-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak the face of unknown backend indicators in flymake
+
+       * lisp/progmodes/flymake.el (flymake--mode-line-format): Don't put
+       a face on the the "?" unknown backend indicator, because that
+       looks odd in inactive windows (bug#44689).
+
+2020-11-24  Paul W. Rankin  <pwr@skeletons.cc>
+
+       Handle outline overlays better when cycling in outline.el
+
+       * lisp/outline.el (outline--cycle-state): Only consider outline
+       overlays that are on outline headings; when subtree end is
+       point-max, return overlay-end +1 because final subtree overlay
+       only reaches point-max -1 (bug#41198).
+       (outline-cycle-buffer): Check that buffer has top-level headings
+       before calling outline-hide-sublevels 1 thus preventing
+       disconcerting buffer state of content reduced to single "..."
+
+2020-11-23  Andrea Corallo  <akrl@sdf.org>
+
+       Add SELECTOR parameter to `native-compile-async' (bug#44813)
+
+       * lisp/emacs-lisp/comp.el (native-compile-async-skip-p): New function
+       ripping out logic from `native--compile-async' and accounting for
+       SELECTOR.
+       (native--compile-async): Add SELECTOR parameter, make use of
+       `native-compile-async-skip-p' and move it with other private
+       functions.
+       (native-compile-async): Add SELECTOR parameter.
+
+2020-11-23  Andrea Corallo  <akrl@sdf.org>
+
+       Rename two native compiler customize
+
+       * lisp/emacs-lisp/comp.el (comp-deferred-compilation-deny-list):
+       Rename from `comp-deferred-compilation-black-list'.
+       * lisp/emacs-lisp/comp.el (native--compile-async): Update to use
+       `comp-deferred-compilation-deny-list'.
+       (comp-bootstrap-deny-list): Rename.
+       (batch-native-compile): Update to use `comp-bootstrap-deny-list'.
+
+2020-11-23  Michael Albinus  <michael.albinus@gmx.de>
+
+       Adapt files-x-tests.el according to recent Tramp changes
+
+       * test/lisp/files-x-tests.el (tramp-connection-local-default-profile):
+       Don't declare.
+       (tramp-connection-local-default-shell-variables)
+       (tramp-connection-local-default-system-variables): Declare.
+       (files-x-test-with-connection-local-variables): Use them.
+
+2020-11-23  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       3ceee39819 Fix Bug#44481
+
+2020-11-23  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       86cbc9d216 Make ignoring modifiers on IME input optional
+       32b97bb9e0 Ignore modifiers when processing WM_IME_CHAR messages
+       f641ef1a07 Improve documentation of 'font-spec'
+
+       # Conflicts:
+       #       etc/NEWS
+
+2020-11-23  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       e66502fec1 ; * doc/misc/eshell.texi (Input/Output): Fix typo.
+
+2020-11-23  Alan Mackenzie  <acm@muc.de>
+
+       minibuffer code: restore original frame after using minibuffer-only 
frame, etc
+
+       * src/minibuf.c (read_minibuf): In the record_unwind_protect for the 
second
+       restore_window_configuration (separate minibuffer frame case) arrange 
for the
+       future switching back to the original frame by 
Fset_window_configuration.
+
+2020-11-23  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix 'See @xref{...}' (bug#44811)
+
+       Reported by 황병희.
+
+       * doc/lispref/edebug.texi (Printing in Edebug):
+       * doc/misc/ebrowse.texi (Marking Classes):
+       * doc/misc/gnus.texi (Ma Gnus):
+       * doc/misc/tramp.texi (Remote shell setup):
+       Don't stutter (@xref expands to 'See ...').
+
+2020-11-23  Stefan Kangas  <stefan@marxist.se>
+
+       Remove Emacs 19 and 20 compat code from table.el
+
+       * lisp/textmodes/table.el:
+       (table-recognize-cell, table--make-cell-map)
+       (*table--present-cell-popup-menu, table--update-cell)
+       (table--update-cell-widened, table--update-cell-heightened)
+       (table--cell-insert-char, table--warn-incompatibility): Remove
+       Emacs 19 and 20 compat code.
+       * lisp/textmodes/table.el (table-disable-menu)
+       (table--set-timer, table--get-last-command): Declare obsolete.
+
+2020-11-23  Stefan Kangas  <stefankangas@gmail.com>
+
+       Sync latest SKK-JISYO.L
+
+       * leim/SKK-DIC/SKK-JISYO.L: Sync to current upstream version.
+
+       (cherry picked from commit 6a5f9700846551a7f3795e257356dbab865116f4)
+
+2020-11-23  Stefan Kangas  <stefan@marxist.se>
+
+       Update publicsuffix.txt from upstream
+
+       * etc/publicsuffix.txt: Update from
+       https://publicsuffix.org/list/public_suffix_list.dat
+       dated 2020-10-09 08:23:34 UTC.
+
+       (cherry picked from commit 5b13afab0a903ead8363482529019d4fb80ec4b4)
+
+2020-11-23  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in most runtime leim lisp files
+
+       * lisp/leim/quail/arabic.el:
+       * lisp/leim/quail/croatian.el:
+       * lisp/leim/quail/cyril-jis.el:
+       * lisp/leim/quail/cyrillic.el:
+       * lisp/leim/quail/czech.el:
+       * lisp/leim/quail/ethiopic.el:
+       * lisp/leim/quail/georgian.el:
+       * lisp/leim/quail/greek.el:
+       * lisp/leim/quail/hanja-jis.el:
+       * lisp/leim/quail/hanja.el:
+       * lisp/leim/quail/hanja3.el:
+       * lisp/leim/quail/hebrew.el:
+       * lisp/leim/quail/ipa-praat.el:
+       * lisp/leim/quail/latin-alt.el:
+       * lisp/leim/quail/latin-post.el:
+       * lisp/leim/quail/latin-pre.el:
+       * lisp/leim/quail/persian.el:
+       * lisp/leim/quail/programmer-dvorak.el:
+       * lisp/leim/quail/py-punct.el:
+       * lisp/leim/quail/pypunct-b5.el:
+       * lisp/leim/quail/rfc1345.el:
+       * lisp/leim/quail/sami.el:
+       * lisp/leim/quail/sgml-input.el:
+       * lisp/leim/quail/slovak.el:
+       * lisp/leim/quail/symbol-ksc.el:
+       * lisp/leim/quail/tamil-dvorak.el:
+       * lisp/leim/quail/vntelex.el:
+       * lisp/leim/quail/vnvni.el:
+       * lisp/leim/quail/welsh.el: Use lexical-binding.
+
+2020-11-23  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Small fixes to gnus-search output parsing of indexed engines
+
+       * lisp/gnus/gnus-search.el (gnus-search-indexed-parse-output): When
+       filtering for desired groups, accept any of [.\/] as potential segment
+       delimiters. Later on, filesystem path separators will be interpreted
+       as dots (".") when constructing group names. Also, make sure we use
+       `expand-file-name' on the prefix, and just use `string-remove-prefix'
+       to get rid of it.
+
+2020-11-22  Philipp Stephani  <phst@google.com>
+
+       Unbreak compilation with CHECK_STRUCTS.
+
+       Commit 3963aea4f4a22da0c1fb8ca8ca80b59c58373811 modified the ‘buffer’
+       structure, but didn’t adapt the hash.
+
+       * src/pdumper.c (dump_buffer): Update buffer hash.
+
+2020-11-22  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-11-22  Michael Albinus  <michael.albinus@gmx.de>
+
+       Replace /dev/null by remote null-device in Tramp.
+
+       * lisp/net/tramp-adb.el (tramp-adb-get-ls-command)
+       (tramp-adb-handle-set-file-times, tramp-adb-handle-process-file):
+       Use `tramp-get-remote-null-device'.
+
+       * lisp/net/tramp-compat.el (tramp-tramp-file-p): Declare.
+       (tramp-compat-null-device): New defalias.
+
+       * lisp/net/tramp-sh.el (tramp-methods) <telnet, nc>:
+       (tramp-perl-encode-with-module, tramp-perl-decode-with-module)
+       (tramp-perl-encode, tramp-perl-decode, tramp-awk-decode):
+       Use "%n" marker.
+       (tramp-do-directory-files-and-attributes-with-stat)
+       (tramp-sh-handle-file-name-all-completions)
+       (tramp-do-copy-or-rename-file-out-of-band)
+       (tramp-sh-handle-insert-directory, tramp-sh-handle-process-file)
+       (tramp-set-remote-path, tramp-open-connection-setup-interactive-shell)
+       (tramp-find-inline-encoding, tramp-send-command-and-check)
+       (tramp-get-remote-path, tramp-get-ls-command, tramp-get-ls-command-with)
+       (tramp-get-remote-awk, tramp-get-remote-hexdump, tramp-get-remote-od)
+       (tramp-get-env-with-u-option): Use `tramp-get-remote-null-device'.
+       (tramp-remote-coding-commands, tramp-call-local-coding-command):
+       Adapt docstring.
+
+       * lisp/net/tramp-smb.el (tramp-smb-conf): Use `null-device'.
+       (tramp-smb-handle-file-acl): Use `tramp-get-remote-null-device'.
+
+       * lisp/net/tramp.el (tramp-methods): Adapt docstring.
+       (tramp-get-remote-null-device): New defun.
+       (tramp-interrupt-process): Use it.
+
+2020-11-22  Stefan Kangas  <stefan@marxist.se>
+
+       Test for byte-compiler warning "variable lacks prefix"
+
+       * test/lisp/emacs-lisp/bytecomp-tests.el
+       (bytecomp--with-warning-test): New macro.
+       (bytecomp-warn-wrong-args, bytecomp-warn-wrong-args-subr):
+       Use above new macro.
+       (bytecomp-warn-variable-lacks-prefix): New test.
+
+2020-11-22  Stefan Kangas  <stefan@marxist.se>
+
+       Test interactive-only spec of with-suppressed-warnings
+
+       * test/lisp/emacs-lisp/bytecomp-tests.el
+       (bytecomp-test--with-suppressed-warnings): Test suppressing warning
+       with interactive-only.
+
+2020-11-22  Stefan Kangas  <stefan@marxist.se>
+
+       Say which command shadows a key binding
+
+       * src/keymap.c (describe_vector): Say which command shadows this
+       binding.  (Bug#9293)
+       * test/src/keymap-tests.el
+       (help--describe-vector/bug-9293-one-shadowed-in-range): Adapt
+       test.
+
+2020-11-22  Stefan Kangas  <stefan@marxist.se>
+
+       Don't shadow bindings by the same command
+
+       * src/keymap.c (describe_vector): Do not say binding is shadowed if
+       the other key binding points to the same command.  (Bug#9293)
+       * test/src/keymap-tests.el
+       (help--describe-vector/bug-9293-same-command-does-not-shadow): New
+       test.
+
+2020-11-22  Stefan Kangas  <stefan@marxist.se>
+
+       Don't show key ranges if shadowed by different commands
+
+       * src/keymap.c (describe_vector): Make sure found consecutive keys
+       are either not shadowed or, if they are, that they are shadowed by
+       the same command.  (Bug#9293)
+       * test/src/keymap-tests.el
+       (help--describe-vector/bug-9293-one-shadowed-in-range): New test.
+
+2020-11-21  Juri Linkov  <juri@linkov.net>
+
+       Handle help-form in y-or-n-p and use this in find-file-noselect 
(bug#5423)
+
+       * doc/lispref/help.texi (Help Functions): Mention help-form for
+       read-char-from-minibuffer and y-or-n-p.
+
+       * doc/lispref/minibuf.texi (Yes-or-No Queries): Mention help-form
+       for y-or-n-p.
+       (Multiple Queries): Mention help-form for read-char-from-minibuffer.
+
+       * lisp/files.el (find-file-noselect): Let-bind multi-line help text
+       to help-form for y-or-n-p.
+
+       * lisp/subr.el (read-char-choice): Mention help-form in docstring.
+       (read-char-from-minibuffer): Mention help-form in docstring.
+       (y-or-n-p-map): Remove handling of 'help'.
+       (y-or-n-p): Mention help-form in docstring.
+       When help-form is non-nil: add help-char to 'prompt', and bind
+       help-char to help-form-show in composed-keymap.
+
+2020-11-21  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix Bug#44481
+
+       * lisp/net/tramp.el (tramp-system-name): New defconst.
+       (tramp-default-host, tramp-restricted-shell-hosts-alist)
+       (tramp-local-host-regexp):
+       * lisp/net/tramp-sh.el (tramp-maybe-open-connection): Use it.  
(Bug#44481)
+
+2020-11-21  Michael Albinus  <michael.albinus@gmx.de>
+
+       Handle connection-local null-device and path-separator variables
+
+       * doc/lispref/os.texi (System Environment): Add `path-separator'
+       function and `null-device' variable and function.
+
+       * etc/NEWS: Mention 'null-device' and 'path-separator'.  Fix typos.
+
+       * lisp/files-x.el (path-separator, null-device): New defuns.  (Bug#3736)
+
+       * lisp/net/tramp-adb.el
+       (tramp-adb-connection-local-default-shell-variables): Rename from
+       `tramp-adb-connection-local-default-profile'.
+
+       * lisp/net/tramp-integration.el
+       (tramp-connection-local-default-system-variables): New defvar.
+       Add it to connection-local profiles.
+       (tramp-connection-local-default-shell-variables): Rename from
+       `tramp-connection-local-default-profile'.
+
+       * lisp/progmodes/grep.el (grep-hello-file): New defun.
+       (grep-compute-defaults): Use `null-device' function for remote
+       case. Handle remote `hello-file'.  Use `process-file-shell-command'.
+       (grep,grep-expand-keywords, lgrep): Use `null-device' function for
+       remote case.
+
+2020-11-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Minor Edebug manual keystroke clarifications
+
+       * doc/lispref/edebug.texi (Edebug Misc): Also mention the `a'
+       binding to abort (bug#44697).  Also fix `d' function reference, and
+       add `P' reference.
+
+       (cherry picked from commit b613f25f97abf756101eaa2af90689a19c0b3350)
+
+2020-11-21  Jared Finder  <jared@finder.org>
+
+       Migrate usage of GPM_CLICK_EVENT to MOUSE_CLICK_EVENT.
+
+       * src/termhooks.h (enum event_kind):
+       * src/term.c (term_mouse_click, handle_one_term_event):
+       * src/keyboard.c (discard_mouse_events, make_lispy_event): Migrate
+       usage of GPM_CLICK_EVENT to MOUSE_CLICK_EVENT.
+
+2020-11-21  Eli Zaretskii  <eliz@gnu.org>
+
+       Make ignoring modifiers on IME input optional
+
+       By default, ignore modifier keys on IME input, but add
+       a variable to get back old behavior.
+       * src/w32fns.c (syms_of_w32fns): New variable
+       w32-ignore-modifiers-on-IME-input.
+       (w32_wnd_proc): Use it to ignore modifier keys when IME input is
+       used.  (Bug#44641)
+
+       * etc/NEWS: Announce the change and the new variable.
+
+2020-11-21  Masahiro Nakamura  <tsuucat@icloud.com>
+
+       Ignore modifiers when processing WM_IME_CHAR messages
+
+       * src/w32fns.c (w32_wnd_proc): Ignore modifiers when processing
+       WM_IME_CHAR messages.
+
+2020-11-21  Stefan Kangas  <stefan@marxist.se>
+
+       Make load argument of native-compile-async internal
+
+       * lisp/emacs-lisp/comp.el (native--compile-async): New defun extracted
+       from native-compile-async.
+       (native-compile-async): Remove load argument and use above new defun.
+       * src/comp.c (maybe_defer_native_compilation): Use above new
+       defun.  (Bug#44676)
+
+2020-11-21  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/package.el (package-strip-rcs-id): Don't ignore errors
+
+       Ignoring errors here just postpones the error and replaces a clear
+       "invalid version syntax" with a confusing "package lacks a version".
+
+2020-11-20  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Use cl-letf instead of unwind-protect in a test
+
+       * test/lisp/cus-edit-tests.el 
(cus-edit-tests-customize-saved/show-obsolete):
+       Good use case for cl-letf, so use it.
+       Suggested by Stefan Monnier <monnier@iro.umontreal.ca> in:
+       https://lists.gnu.org/archive/html/emacs-devel/2020-11/msg00914.html
+
+2020-11-20  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * test/manual/indent/tcl.tcl: Add string interpolation case
+
+2020-11-20  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Don't optimize away `eval` when its lexical context is different
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-file-form-eval):
+       Obey lexical-binding.
+
+2020-11-20  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Take care of a FIXME in cus-edit-tests.el
+
+       * test/lisp/cus-edit-tests.el 
(cus-edit-tests-customize-saved/show-obsolete):
+       Add a fake saved-value property, to be able check that the obsolete
+       option is present in the Customize buffer.  Expect the test to pass
+       now.
+
+2020-11-20  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/emacs-lisp/comp.el (native-compile-async): Doc fix.
+
+2020-11-20  Stefan Kangas  <stefan@marxist.se>
+
+       Support native compilation of packages on install
+
+       * lisp/emacs-lisp/package.el (package-unpack)
+       (package--native-compile): Native compile packages on install, if the
+       feature is available.  (Bug#44676)
+       (package-native-compile): New defcustom.
+
+2020-11-20  Stefan Kangas  <stefan@marxist.se>
+
+       compile-async: Don't error out on deferred compilation after load
+
+       * lisp/emacs-lisp/comp.el (native-compile-async): Update
+       comp-files-queue when deferred compilation is requested.  (Bug#44676)
+
+2020-11-20  Stefan Kangas  <stefan@marxist.se>
+
+       Don't quote lambda in idlwave.el
+
+       * lisp/progmodes/idlwave.el (idlwave-keyword-abbrev): Don't quote
+       lambda.
+
+2020-11-20  Stefan Kangas  <stefan@marxist.se>
+
+       Remove remaining XEmacs compat code from erc-log.el
+
+       * lisp/erc/erc-log.el (erc-save-buffer-in-logs): Remove XEmacs
+       compat code.
+
+2020-11-20  Stefan Kangas  <stefan@marxist.se>
+
+       Don't set XEmacs only properties start-open and end-open
+
+       * lisp/epa.el (epa-sign-region, epa-encrypt-region):
+       * lisp/erc/erc.el (erc-display-prompt):
+       * lisp/gnus/message.el (message-forward-make-body-mime):
+       * lisp/net/eudc-bob.el (eudc-bob-display-jpeg)
+       (eudc-bob-display-audio, eudc-bob-display-generic-binary):
+       * lisp/url/url-http.el
+       (url-http-chunked-encoding-after-change-function): Don't set XEmacs
+       only properties start-open and end-open.
+
+2020-11-20  Stefan Kangas  <stefan@marxist.se>
+
+       Remove XEmacs compat code from idlw-shell.el
+
+       * lisp/progmodes/idlw-shell.el:
+       (idlwave-shell-use-toolbar): Doc fix.
+       (idlwave-default-mouse-track-event-is-with-button): Declare obsolete.
+       (idlwave-shell-update-bp-overlays): Remove XEmacs compat code.
+
+2020-11-20  Stefan Kangas  <stefan@marxist.se>
+
+       Remove some XEmacs compat code from ediff-wind.el
+
+       * lisp/vc/ediff-wind.el (ediff-window)
+       (ediff-compute-toolbar-width): Remove some XEmacs compat code.
+
+2020-11-20  Stefan Kangas  <stefan@marxist.se>
+
+       Remove Emacs 20 compat code from org.el
+
+       * lisp/org/org.el (org-org-menu, org-create-customize-menu):
+       Remove Emacs 20 compat code.
+
+2020-11-20  Stefan Kangas  <stefan@marxist.se>
+
+       Remove Emacs 20 compat code from idlwave.el
+
+       * lisp/progmodes/idlwave.el (idlwave-indent-line)
+       (idlwave-toggle-comment-region, idlwave-reset-sintern)
+       (idlwave-unit-name, idlwave-mode-menu-def)
+       (idlwave-create-customize-menu): Remove Emacs 20 compat code.
+
+2020-11-20  Stefan Kangas  <stefan@marxist.se>
+
+       Properly mark obsolete semantic functions as such
+
+       * lisp/cedet/semantic/ia.el (semantic-ia-get-completions)
+       (semantic-ia-get-completions-deprecated): Make obsolete.
+
+2020-11-20  Stefan Kangas  <stefan@marxist.se>
+
+       Mark compat alias in cus-face.el obsolete
+
+       * lisp/cus-face.el (custom-facep): Mark compat alias obsolete.
+       * lisp/cus-dep.el (custom-make-dependencies):
+       * lisp/cus-edit.el (customize-changed-options)
+       (custom-unsaved-options, customize-saved, customize-apropos)
+       (custom-save-faces): Adjust callers.
+
+2020-11-20  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix compilation on MS-Windows with librsvg > 2.46.0
+
+       * src/image.c (rsvg_handle_get_dimensions, init_svg_functions):
+       Make 'rsvg_handle_get_dimensions' available and defined for all
+       versions of librsvg.  (Bug#44655)
+
+2020-11-20  Stefan Kangas  <stefan@marxist.se>
+
+       Hide obsolete options in most customize commands
+
+       * lisp/cus-edit.el (custom--filter-obsolete-variables): New defun.
+       * lisp/cus-edit.el (customize-changed-options)
+       (customize-apropos, custom-group-value-create): Hide obsolete user
+       options.  (Bug#44598)
+       * test/lisp/cus-edit-tests.el: New file.
+
+2020-11-20  João Tãvora  <joaotavora@gmail.com>
+
+       Revert unintended part of last change to jsonrpc-request
+
+       While playing around with the timing in this function, I left
+       this change that could freeze the function on some platforms.
+
+       * lisp/jsonrpc.el (jsonrpc-request): Use accept-process-output.
+       (Version): Bump to 1.0.14
+
+2020-11-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Move semantic/tag obsolete variables to avoid a warning
+
+       * lisp/cedet/semantic/tag.el (semantic-token-version): Move to
+       avoid a compilation warning.
+
+2020-11-20  João Távora  <joaotavora@gmail.com>
+
+       Fix default timeout handling in jsonrpc-request
+
+       * lisp/jsonrpc.el (jsonrpc-request): Use default timeout if not passed.
+       (Version): Bump to 1.0.13
+
+2020-11-20  Andrea Corallo  <akrl@sdf.org>
+
+       Add 'EMACSNATIVELOADPATH' env variable support (bug#44726)
+
+       * lisp/startup.el (normal-top-level): Read 'EMACSNATIVELOADPATH'
+       and add entries too `comp-eln-load-path'.
+       * lisp/mail/emacsbug.el (report-emacs-bug): Dump
+       also 'EMACSNATIVELOADPATH'.
+
+2020-11-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Avoid a compilation warning about an ambiguous else
+
+       * src/data.c (set_internal): Avoid compilation warning.
+
+       data.c:1443:9: error: suggest explicit braces to avoid ambiguous ‘else’
+        1443 |      if (idx > 0 && bindflag == SET_INTERNAL_SET
+             |         ^
+
+2020-11-19  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/data.c (set_internal): Fix bug#44733
+
+       Set the default value when `set` encounters a PER_BUFFER variable
+       which has been let-bound globally, to match the behavior seen with
+       `make-variable-buffer-local`.
+
+       * test/src/data-tests.el (binding-test--let-buffer-local):
+       Add corresponding test.
+       (data-tests--set-default-per-buffer): Add tentative test for the
+       performance problem encountered in bug#41029.
+
+2020-11-19  Torsten Hilbrich  <torsten.hilbrich@gmx.net>
+
+       * lisp/net/dictionary.el: Remove remnants of package
+
+       Version and package dependencies are not useful when included into
+       Emacs.
+
+2020-11-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of 'font-spec'
+
+       * doc/lispref/display.texi (Low-Level Font):
+       * src/font.c (Ffont_spec): Document 'font-spec' keys that are
+       supported, but were undocumented.
+
+2020-11-19  Stefan Kangas  <stefan@marxist.se>
+
+       Remove some XEmacs compat code from filesets.el
+
+       * lisp/filesets.el (filesets-init): Remove some XEmacs compat code.
+       (filesets-error): Declare obsolete.
+       (filesets-directory-files, filesets-get-selection)
+       (filesets-spawn-external-viewer, filesets-get-filelist)
+       (filesets-open, filesets-close, filesets-get-menu-epilog)
+       (filesets-ingroup-collect-files, filesets-build-ingroup-submenu)
+       (filesets-update-pre010505): Adjust callers.
+
+2020-11-19  Stefan Kangas  <stefan@marxist.se>
+
+       Remove some compat code from ffap.el
+
+       * lisp/ffap.el (ffap-mouse-event, ffap-event-buffer): Make obsolete.
+       (ffap-menu-ask, ffap-at-mouse): Adjust callers.
+
+2020-11-19  Stefan Kangas  <stefan@marxist.se>
+
+       Declare some compat aliases obsolete
+
+       * lisp/cedet/semantic/tag.el (semantic-token-version)
+       (semantic-token-incompatible-version):
+       * lisp/emulation/edt.el (edt-bind-standard-key): Make compat
+       aliases obsolete.
+
+2020-11-19  Stefan Kangas  <stefan@marxist.se>
+
+       Remove some compat code from url.el
+
+       * lisp/url/url.el (url-warn): Make into obsolete alias for
+       display-warning.
+       * lisp/url/url-auth.el (url-register-auth-scheme):
+       * lisp/url/url-news.el (url-news-open-host):
+       * lisp/url/url-proxy.el (url-find-proxy-for-url): Adjust callers.
+
+2020-11-19  Stefan Kangas  <stefan@marxist.se>
+
+       Remove some compat code for old versions and XEmacs
+
+       * lisp/ibuf-ext.el (ibuffer-old-saved-filters-warning)
+       (ibuffer-maybe-save-stuff): Assume customize-save-variable is
+       bound; it is autoloaded.
+       * lisp/cedet/semantic/symref/grep.el (semantic-symref-perform-search):
+       * lisp/password-cache.el (password-cache-remove):
+       * lisp/cedet/semantic/bovine/el.el (semantic-dependency-tag-file):
+       Remove Emacs 21 compat code.
+       * lisp/cedet/semantic/sort.el (semantic-string-lessp-ci):
+       Remove Emacs 20 compat code.
+       * test/lisp/cedet/semantic-utest.el (semantic-utest-temp-directory):
+       * lisp/mail/supercite.el (sc-ask): Remove XEmacs compat code.
+       * lisp/progmodes/idlw-shell.el (idlwave-shell-mode):
+       * lisp/progmodes/idlwave.el (idlwave-mode): Remove commented out
+       compat code.
+
+2020-11-19  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/buffer.h (struct buffer): Remove unused field `minor_modes`
+
+       * src/buffer.c (bset_minor_modes): Remove function.
+       (reset_buffer_local_variables, init_buffer_once): Don't set 
`minor_modes`.
+
+2020-11-19  Michael Albinus  <michael.albinus@gmx.de>
+
+       Use decoding implementation from `insert-directory' in Tramp
+
+       * lisp/net/tramp-sh.el (tramp-sh-handle-insert-directory):
+       Use decoding implementation from `insert-directory', it is more robust.
+
+2020-11-19  Mattias Engdegård  <mattiase@acm.org>
+
+       More string-search optimisations
+
+       All-ASCII strings cannot have substrings with non-ASCII characters in
+       them; use this fact to avoid searching entirely.
+
+       * src/fns.c (Fstring_search): For multibyte non-ASCII needle and
+       unibyte haystack, don't check if the haystack is all-ASCII; it's a
+       waste of time. For multibyte non-ASCII needle and multibyte
+       all-ASCII haystack, fail immediately.
+       * test/src/fns-tests.el (string-search): Add more test cases.
+
+2020-11-19  Alan Mackenzie  <acm@muc.de>
+
+       * etc/NEWS: Restore entries accidentally removed by previous commit.
+
+2020-11-19  Alan Mackenzie  <acm@muc.de>
+
+       In attempted recursive minibuffer use, display error message in correct 
frame
+
+       This was problematic when minibuffer-follows-selected-frame was non-nil.
+       Introduce a new parameter DONT-SET-FRAME to set-window-configuration.
+
+       * doc/lispref/windows.texi (Window Configurations): Describe the new 
&optional
+       parameter to set-window-configuration.
+
+       * etc/NEWS (Lisp Changes): Note the new parameter to 
set-window-configuration.
+
+       * src/keyboard.c (read_char_help_form_unwind): Add a new Qnil argument 
to the
+       call of Fset_window_configuration.
+
+       * src/minibuf.c (read_minibuf): Cons up a Qt with the window 
configuration in
+       the argument to record_unwind_protect for the window configuration 
(twice).
+
+       * src/window.c (Fset_window_configuration): Add the new &optional 
parameter
+       and document it in the doc string.  At the final do_switch_frame 
operation,
+       restore the original frame when DONT-SET-FRAME is non-nil.
+       (restore_window_configuration): Handle the new parameter when the 
supplied
+       argument is a cons.
+
+2020-11-19  Matthias Meulien  <orontee@gmail.com>
+
+       Add history of search words to read-string
+
+       Remove text property from empty line
+
+2020-11-19  Torsten Hilbrich  <torsten.hilbrich@gmx.net>
+
+       Move placement of dictionary-tooltip-mouse-event
+
+       * lisp/net/dictionary.el (dictionary-tooltip-mouse-event): Place
+       variable before dictionary-display-tooltip to avoid warning about use of
+       free variable when compiling dictionary-display-tooltip
+
+2020-11-19  Torsten Hilbrich  <torsten.hilbrich@gmx.net>
+
+       Support nil value for dictionary-server
+
+       * lisp/net/dictionary.el (dictionary-server): Support choice to select
+       the dictionary server to use.
+       * lisp/net/dictionary.el (dictionary-check-connection): Support nil
+       value for dictionary-server.
+
+       This nil value is the new default value of that variable. When
+       opening a new connection and dictionary-server is nil the code
+       behaves the following way:
+
+       - it will first try to connect to a dictd server running on localhost
+       - if that fails, it queries the user if the alternative
+         server (dict.org) should be consulted
+       - if the user agrees, the connection is made to dict.org
+
+       This allows the default value of dictionary-server not to connect
+       a remote server by default. The user is always able to select a
+       different server by customizing the variable dictionary-search.
+
+2020-11-19  Stefan Kangas  <stefan@marxist.se>
+
+       Remove outdated comment about Emacs 20 from viper.el
+
+       * lisp/emulation/viper-util.el (viper-chars-in-region): Remove
+       outdated comment.
+
+2020-11-19  Stefan Kangas  <stefan@marxist.se>
+
+       Add new variable cperl-tags-file-name
+
+       * lisp/progmodes/cperl-mode.el (cperl-tags-file-name): New variable.
+       (cperl-write-tags): Use above new variable instead of hardcoding
+       filename "TAGS".  (Bug#8802)
+
+2020-11-19  Stefan Kangas  <stefan@marxist.se>
+
+       Declare XEmacs compat function in inversion.el obsolete
+
+       * lisp/cedet/inversion.el (inversion-require-emacs): Declare obsolete.
+
+2020-11-19  Stefan Kangas  <stefan@marxist.se>
+
+       Assume font-lock is provided; it's preloaded since 22.1
+
+       * lisp/cedet/semantic/format.el (semantic--format-colorize-text):
+       * lisp/eshell/em-ls.el (eshell-ls--insert-directory):
+       * lisp/net/dig.el (dig-mode):
+       * lisp/progmodes/cperl-mode.el (cperl-pod-here-fontify):
+       * lisp/progmodes/idlw-help.el (idlwave-help-fontify):
+       * lisp/progmodes/idlwave.el (idlwave-completion-fontify-classes):
+       Don't check for feature 'font-lock; it has been preloaded since 22.1.
+       * lisp/cedet/semantic/format.el (font-lock):
+       * lisp/epa.el (font-lock):
+       * lisp/erc/erc.el (font-lock):
+       * lisp/generic-x.el (font-lock):
+       * lisp/net/sieve-mode.el (font-lock):
+       * lisp/progmodes/prolog.el (font-lock):
+       * lisp/textmodes/rst.el (font-lock): Remove unnecessary require.
+
+2020-11-19  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/progmodes/cperl-mode.el: Doc fix.
+
+2020-11-19  Stefan Kangas  <stefan@marxist.se>
+
+       Remove unnecessary load from idlwave
+
+       * lisp/progmodes/idlw-shell.el:
+       * lisp/progmodes/idlwave.el: Remove unnecessary load; easy-menu-define
+       is autoloaded.
+
+2020-11-19  Stefan Kangas  <stefan@marxist.se>
+
+       Make compat alias add-submenu obsolete
+
+       * lisp/emacs-lisp/easymenu.el (add-submenu): Make compat alias
+       obsolete.
+       * lisp/filesets.el (filesets-build-menu-now): Don't use above
+       obsolete alias.
+       (filesets-menu-path, filesets-menu-before)
+       (filesets-menu-in-menu): Doc fix.
+
+2020-11-19  Alan Third  <alan@idiocy.org>
+
+       Fix SVG display again (bug#44655)
+
+       * src/image.c (svg_load_image): Fall back to
+       rsvg_handle_get_dimensions if we can't calculate the size of the
+       image.
+
+2020-11-18  Protesilaos Stavrou  <info@protesilaos.com>
+
+       Clarify that 'diff-error' is part of Emacs 28.1
+
+       * lisp/vc/diff-mode.el (diff-error): Add :version tag (bug#44727).
+
+2020-11-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Further doc fixes for dotimes about RESULT
+
+       * lisp/subr.el (dotimes): Be even more explicit about RESULT
+       (bug#16206).
+
+       (cherry picked from commit 5b0d8d0f288fd505ca90bd30df709a5e7ab540d6)
+
+2020-11-18  Andrea Corallo  <akrl@sdf.org>
+
+       Fix eln file hasing for symlink paths (bug#44701)
+
+       * src/comp.c (Fcomp_el_to_eln_filename): Call `file-truename'
+       in place of `expand-file-name' when available.
+
+2020-11-18  Jonas Bernoulli  <jonas@bernoul.li>
+
+       Revert "[WIP] Add and improve section headings"
+
+       This reverts commit 007a5a677573ab628426a0605eb38f8e68fe1953.
+
+2020-11-18  Jonas Bernoulli  <jonas@bernoul.li>
+
+       Revert "[TODO] Remove noisy anti-noise feature"
+
+       This reverts commit c36b4eed2d76f0e804d27d35dd6281f858639f94.
+
+2020-11-18  Jonas Bernoulli  <jonas@bernoul.li>
+
+       [TODO] Remove noisy anti-noise feature
+
+       [WIP] Add and improve section headings
+
+2020-11-18  Mattias Engdegård  <mattiase@acm.org>
+
+       Turn gdb-wait-for-pending into a plain function
+
+       This avoids unnecessary body duplication in expansion and macro
+       recursion (causing macro-expansions at runtime), making it clearer
+       what is going on.
+
+       * lisp/progmodes/gdb-mi.el (gdb-wait-for-pending): Make it a function,
+       remove lambda quoting,  η-reduce and simplify.
+       (gdb-thread-exited, gdb-thread-selected): Adapt callers.
+
+2020-11-18  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Don't make bibtex-unify-case-convert buffer-local
+
+       The :local tag does not currently work as intended (it results in a
+       default value of bibtex-unify-case-convert of nil rather than
+       identity), and no other bibtex.el user option is automatically
+       buffer-local, so revert this recent change.
+
+       For discussion, see the following emacs-devel thread:
+       https://lists.gnu.org/r/emacs-devel/2020-11/msg00734.html
+
+       * lisp/textmodes/bibtex.el (bibtex-unify-case-convert): Don't make
+       automatically buffer-local for consistency with other user options,
+       and because the :local tag doesn't have the intended results.
+
+2020-11-18  Michael Albinus  <michael.albinus@gmx.de>
+
+       Preserve `dired-filename' text properties in Tramp
+
+       * lisp/net/tramp-sh.el (tramp-sh-handle-insert-directory):
+       Restore `dired-filename' text property, which has been destroyed
+       by `decode-coding-region'.  (Bug#44682)
+
+2020-11-17  Stefan Kangas  <stefan@marxist.se>
+
+       Remove redundant 'function's around lambdas
+
+       * lisp/allout.el (allout-latex-verb-quote):
+       * lisp/edmacro.el (edmacro-format-keys):
+       * lisp/ffap.el (ffap-all-subdirs-loop)
+       (ffap-kpathsea-expand-path, ffap-menu-rescan):
+       * lisp/files.el (save-buffers-kill-emacs):
+       * lisp/find-lisp.el (find-lisp-find-dired-internal)
+       (find-lisp-insert-directory):
+       * lisp/gnus/gnus-agent.el (gnus-agent-expire-unagentized-dirs):
+       * lisp/gnus/nnmairix.el (nnmairix-create-message-line-for-search)
+       (nnmairix-widget-get-values)
+       (nnmairix-widget-make-query-from-widgets)
+       (nnmairix-widget-build-editable-fields):
+       * lisp/international/mule-cmds.el (sort-coding-systems):
+       * lisp/international/mule-diag.el (list-character-sets-1):
+       * lisp/international/quail.el (quail-insert-decode-map):
+       * lisp/mail/reporter.el (reporter-dump-state):
+       * lisp/mail/supercite.el (sc-attribs-filter-namelist):
+       * lisp/pcmpl-gnu.el (pcmpl-gnu-zipped-files)
+       (pcmpl-gnu-bzipped-files):
+       * lisp/progmodes/cperl-mode.el (cperl-find-tags)
+       (cperl-write-tags, cperl-tags-hier-init, cperl-tags-treeify)
+       (cperl-menu-to-keymap, cperl-pod-spell):
+       * lisp/progmodes/gdb-mi.el (gdb-parent-mode):
+       * lisp/progmodes/make-mode.el (makefile-browser-fill):
+       * lisp/simple.el (transpose-lines):
+       * lisp/term.el:
+       * lisp/term/w32-win.el (w32-find-non-USB-fonts):
+       * lisp/textmodes/table.el (table--generate-source-scan-lines): Remove
+       redundant 'function's around lambdas.
+
+2020-11-17  Stefan Kangas  <stefan@marxist.se>
+
+       Remove redundant 'function's around lambdas in mh/*.el
+
+       * lisp/mh-e/mh-alias.el (mh-alias-tstamp, mh-alias-filenames)
+       (mh-alias-address-to-alias):
+       * lisp/mh-e/mh-comp.el (mh-edit-again, mh-redistribute):
+       * lisp/mh-e/mh-identity.el (mh-identity-make-menu):
+       * lisp/mh-e/mh-utils.el (mh-help): Remove redundant 'function's around
+       lambdas.
+
+2020-11-17  Alan Mackenzie  <acm@muc.de>
+
+       Enhance syntax-tests.el to test nestable comments (Lisp style)
+
+       Also add some tests for braces and parse-partial-sexp amongst Lisp style
+       comments.
+
+       * test/src/syntax-tests.el (\;-in, \;-out): Add syntax for { and }.
+       (top-level): Add new tests for Lisp style comments.
+       (\#|-in, \#|-out): New functions.
+       (top-level): Add new tests for nested Lisp style comments, and mixtures 
of
+       nested comments with "ordinary" comments.
+
+       * test/src/syntax-resources/syntax-comments.txt (top-level): Add new 
test
+       fragments for #|...|#, etc.
+
+2020-11-17  Stefan Kangas  <stefan@marxist.se>
+
+       Don't quote lambdas with 'function' in calc/*.el
+
+       * lisp/calc/calc-aent.el (calc-do-quick-calc)
+       (calc-do-calc-eval, math-build-parse-table):
+       * lisp/calc/calc-alg.el (math-polynomial-base):
+       * lisp/calc/calc-alg.el (math-is-poly-rec):
+       * lisp/calc/calc-arith.el (calcFunc-scf):
+       * lisp/calc/calc-arith.el (math-ceiling, math-round):
+       * lisp/calc/calc-arith.el (math-trunc-fancy, math-floor-fancy):
+       * lisp/calc/calc-ext.el (calc-init-extensions, calc-reset)
+       (calc-refresh-top, calc-z-prefix-help, calc-binary-op-fancy)
+       (calc-unary-op-fancy):
+       * lisp/calc/calc-forms.el (math-make-mod):
+       * lisp/calc/calc-frac.el (calcFunc-frac):
+       * lisp/calc/calc-funcs.el (calcFunc-euler):
+       * lisp/calc/calc-help.el (calc-full-help):
+       * lisp/calc/calc-lang.el (c, pascal, fortran, tex, latex, eqn)
+       (yacas, maxima, giac, math, maple):
+       * lisp/calc/calc-macs.el (calc-wrapper, calc-slow-wrapper):
+       * lisp/calc/calc-map.el (calc-get-operator, calcFunc-mapeqr)
+       (calcFunc-reducea, calcFunc-rreducea, calcFunc-reduced)
+       (calcFunc-rreduced, calcFunc-outer):
+       * lisp/calc/calc-misc.el (another-calc, calc-do-handle-whys):
+       * lisp/calc/calc-mode.el (calc-save-modes):
+       * lisp/calc/calc-mtx.el (math-col-matrix, math-mul-mat-vec):
+       * lisp/calc/calc-poly.el (math-sort-terms, math-poly-div-list)
+       (math-mul-list, math-sort-poly-base-list)
+       (math-partial-fractions):
+       * lisp/calc/calc-prog.el (calc-user-define-formula):
+       * lisp/calc/calc-rewr.el (math-rewrite, math-compile-patterns)
+       (math-compile-rewrites, math-parse-schedule)
+       (math-rwcomp-pattern):
+       * lisp/calc/calc-store.el (calc-var-name-map, calc-let)
+       (calc-permanent-variable, calc-insert-variables):
+       * lisp/calc/calc-stuff.el (calc-flush-caches, calcFunc-pclean)
+       (calcFunc-pfrac):
+       * lisp/calc/calc-units.el (math-build-units-table)
+       (math-decompose-units):
+       * lisp/calc/calc-vec.el (calcFunc-mrow, math-mat-col)
+       (calcFunc-mcol, math-mat-less-col, math-mimic-ident):
+       * lisp/calc/calc-yank.el (calc-edit):
+       * lisp/calc/calc.el
+       (calc-mode-var-list-restore-default-values)
+       (calc-mode-var-list-restore-saved-values, calc-mode, calc-quit):
+       * lisp/calc/calccomp.el (math-compose-expr)
+       (math-compose-matrix, math-vector-to-string): Don't quote lambdas with
+       'function'.
+
+2020-11-17  Stefan Kangas  <stefan@marxist.se>
+
+       Add command to filter package menu by name or description
+
+       * lisp/emacs-lisp/package.el (package-menu-filter-by-description):
+       (package-menu-filter-by-name-or-description): New commands to filter
+       the package menu.  (Bug#44699)
+       (package-menu-mode-map): Bind the above new commands.
+       (package-menu-mode-menu): Add new commands to the menu.
+       * doc/emacs/package.texi (Package Menu): Document new commands.
+
+2020-11-17  Stefan Kangas  <stefan@marxist.se>
+
+       Don't quote lambdas with function macro in generic-x.el
+
+       * lisp/generic-x.el (apache-conf-generic-mode, ini-generic-mode)
+       (reg-generic-mode, mailagent-rules-generic-mode)
+       (vrml-generic-mode, java-properties-generic-mode)
+       (alias-generic-mode, ansible-inventory-generic-mode)
+       (inetd-conf-generic-mode, etc-services-generic-mode)
+       (etc-passwd-generic-mode, etc-fstab-generic-mode)
+       (spice-generic-mode, astap-generic-mode): Don't quote lambdas with
+       function macro.
+
+2020-11-17  Stefan Kangas  <stefan@marxist.se>
+
+       Test that substitute-command-keys preserves text properties
+
+       * test/lisp/help-tests.el
+       (help-substitute-command-keys/preserves-text-properties): New test.
+       (Bug#17052)
+
+2020-11-17  Harald Jörg  <haj@posteo.de>
+
+       perl-mode and cperl-mode: Recognize regex after "return"
+
+       * lisp/progmodes/cperl-mode.el (cperl-find-pods-heres): Add
+       "return" to the keywords which start a regex.
+
+       * lisp/progmodes/perl-mode.el (defconst): Add "return" to
+       'perl--syntax-exp-intro-keywords' (Bug#26850).
+
+       * test/lisp/progmodes/cperl-mode-tests.el (cperl-test-bug-28650):
+       New test (bug#26850).
+
+2020-11-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Minor Edebug manual keystroke clarifications
+
+       * doc/lispref/edebug.texi (Edebug Misc): Also mention the `a'
+       binding to abort (bug#44697).  Also fix `d' function reference, and
+       add `P' reference.
+
+2020-11-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make the handwrite.el PS valid again
+
+       * lisp/play/handwrite.el (handwrite): Make the PS valid
+       (bug#44648).  Suggested by Omar Antolín <omar.antolin@gmail.com>.
+
+2020-11-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix gnus-mime-display-alternative button natigation
+
+       * lisp/gnus/gnus-art.el (gnus-mime-display-alternative): Mark the
+       buttons correctly so that TAB can find them (bug#44690).
+
+2020-11-16  Ruthra Kumar  <ruthrab@gmail.com>
+
+       Use 'eshell-find-alias-function' instead of fboundp
+
+       * lisp/eshell/esh-cmd.el (eshell-invoke-directly): Fix problem
+       with (require 'em-tramp) making password prompting from "sudo
+       bash" no longer work (bug#43772).
+
+2020-11-16  Francesco Potortì  <pot@gnu.org>
+
+       Add new user option bibtex-unify-case-convert
+
+       * lisp/textmodes/bibtex.el (bibtex-unify-case-convert): New
+       variable (bug#44614).
+       (bibtex-format-entry): Use it (bug#44614).
+
+2020-11-16  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in time-stamp.el
+
+       * lisp/time-stamp.el: Use lexical-binding.  Remove redundant :group
+       args.
+
+2020-11-16  Stefan Kangas  <stefan@marxist.se>
+
+       Don't quote lambdas in net/*.el
+
+       * lisp/net/eudc-export.el (eudc-create-bbdb-record):
+       * lisp/net/eudc.el (eudc-print-attribute-value)
+       (eudc-display-records, eudc-process-form)
+       (eudc-filter-duplicate-attributes, eudc-filter-partial-records)
+       (eudc-add-field-to-records, eudc-query-with-words)
+       (eudc-query-form, eudc-menu):
+       * lisp/net/eudcb-bbdb.el (eudc-bbdb-extract-phones)
+       (eudc-bbdb-query-internal):
+       * lisp/net/mairix.el (mairix-widget-make-query-from-widgets)
+       (mairix-widget-build-editable-fields, mairix-widget-get-values):
+       Don't quote lambdas.
+
+2020-11-16  Stefan Kangas  <stefan@marxist.se>
+
+       Don't quote lambdas in emacs-lisp/*.el
+
+       * lisp/emacs-lisp/cl-seq.el (cl--parsing-keywords, cl-sort):
+       * lisp/emacs-lisp/cl-macs.el (cl-typecase):
+       * lisp/emacs-lisp/cl-extra.el (cl-some, cl-every)
+       (cl--map-keymap-recursively):
+       * lisp/emacs-lisp/advice.el (ad-insert-argument-access-forms):
+       * lisp/emacs-lisp/edebug.el (edebug-sort-alist)
+       (edebug-set-windows):
+       * lisp/emacs-lisp/pp.el (pp-display-expression):
+       * lisp/emacs-lisp/regi.el (regi-interpret): Don't quote lambdas.
+
+2020-11-16  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       75723ec212 (origin/emacs-27) ; * lisp/emacs-lisp/benchmark.el (benchm...
+       53e2a612ad ; * lib-src/make-fingerprint.c: Update commentary.
+       286c632772 Reformat argument commentary in etags.c
+       4ec740866a Make the invocation of combine-change-calls in comment-reg...
+       66bcec8838 * lisp/progmodes/cc-langs.el (c-<>-notable-chars-re): Fix ...
+       03eeab469e ; Update the expected result files in test/manual/etags.
+       d875a22bc6 Update the various INSTALL files
+
+       # Conflicts:
+       #       INSTALL
+
+2020-11-16  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       19da602991 Fix input method translation near read-only text
+       5aabf2cc7f Fix display of truncated R2L lines on TTY frames
+       daff3bda10 Avoid crashes when a reversed glyph row starts with a comp...
+       b697bb91a1 ; * .gitignore: src/fingerprint.c not generated since 2019...
+
+2020-11-16  Stefan Kangas  <stefan@marxist.se>
+
+       Don't quote lambdas in calc/calcalg{2,3}.el
+
+       * lisp/calc/calcalg2.el (calcFunc-inv\', calcFunc-sqrt\')
+       (calcFunc-deg\', calcFunc-rad\', calcFunc-ln\')
+       (calcFunc-log10\', calcFunc-lnp1\', calcFunc-log\')
+       (calcFunc-log\'2, calcFunc-exp\', calcFunc-expm1\')
+       (calcFunc-sin\', calcFunc-cos\', calcFunc-tan\', calcFunc-sec\')
+       (calcFunc-csc\', calcFunc-cot\', calcFunc-arcsin\')
+       (calcFunc-arccos\', calcFunc-arctan\', calcFunc-sinh\')
+       (calcFunc-cosh\', calcFunc-tanh\', calcFunc-sech\')
+       (calcFunc-csch\', calcFunc-coth\', calcFunc-arcsinh\')
+       (calcFunc-arccosh\', calcFunc-arctanh\', calcFunc-bern\'2)
+       (calcFunc-euler\'2, calcFunc-gammag\'2, calcFunc-gammaG\'2)
+       (calcFunc-gammaP\'2, calcFunc-gammaQ\'2, calcFunc-betaB\')
+       (calcFunc-betaI\', calcFunc-erf\', calcFunc-erfc\')
+       (calcFunc-besJ\'2, calcFunc-besY\'2, calcFunc-sum)
+       (calcFunc-prod, calcFunc-integ, calcFunc-if, calcFunc-subscr)
+       (math-do-integral, calcFunc-integ, math-decompose-poly)
+       (math-solve-system-rec, math-solve-system-subst, math-solve-for)
+       (calcFunc-inv, calcFunc-sqrt, calcFunc-conj, calcFunc-abs)
+       (calcFunc-deg, calcFunc-rad, calcFunc-ln, calcFunc-log10)
+       (calcFunc-lnp1, calcFunc-exp, calcFunc-expm1, calcFunc-sin)
+       (calcFunc-cos, calcFunc-tan, calcFunc-arcsin, calcFunc-arccos)
+       (calcFunc-arctan, calcFunc-sinh, calcFunc-cosh, calcFunc-tanh)
+       (calcFunc-arcsinh, calcFunc-arccosh, calcFunc-arctanh):
+       * lisp/calc/calcalg3.el (calc-get-fit-variables)
+       (calcFunc-polint, calcFunc-ratint, math-all-vars-but): Don't quote
+       lambdas.
+
+2020-11-16  Stefan Kangas  <stefan@marxist.se>
+
+       Various doc fixes for comp.el and comp.c
+
+       * lisp/emacs-lisp/comp.el: Remove redundant :group args.
+       (comp-async-cu-done-hook, comp-async-all-done-hook)
+       (comp-async-env-modifier-form, comp-dry-run)
+       (comp-ensure-native-compiler, comp-func-ret-typeset)
+       (comp-func-ret-range, comp-limple-lock-keywords)
+       (comp-make-curr-block):
+       * src/comp.c (Fcomp_el_to_eln_filename, Fcomp__init_ctxt)
+       (Fcomp_native_driver_options_effective_p)
+       (Fcomp__compile_ctxt_to_file, Fcomp_libgccjit_version)
+       (Fcomp__register_lambda, Fcomp__register_subr)
+       (Fcomp__late_register_subr, Fnative_elisp_load, syms_of_comp): Doc 
fixes.
+
+2020-11-16  Andrea Corallo  <akrl@sdf.org>
+
+       Fix nativecomp cond-rw pass
+
+       * lisp/emacs-lisp/comp.el (comp-mvar-symbol-p): Improve it.
+       (comp-cond-rw-func): Fix logic for multiple predecessor on target
+       block.
+       * test/src/comp-tests.el (comp-test-cond-rw-1): New test.
+       * test/src/comp-test-funcs.el (comp-test-cond-rw-1-1-f)
+       (comp-test-cond-rw-1-2-f): New functions.
+
+2020-11-16  Stefan Kangas  <stefan@marxist.se>
+
+       Don't quote lambdas in eshell/*.el
+
+       * lisp/eshell/em-basic.el (eshell-echo):
+       * lisp/eshell/em-cmpl.el (eshell-command-completion-function)
+       (eshell-default-completion-function, eshell-cmpl-initialize)
+       (eshell-complete-parse-arguments, eshell-complete-commands-list):
+       * lisp/eshell/em-dirs.el (eshell-complete-user-reference):
+       * lisp/eshell/em-hist.el (eshell-hist-unload-hook)
+       (eshell-hist-initialize):
+       * lisp/eshell/em-ls.el (eshell-ls-sort-entries):
+       * lisp/eshell/em-pred.el (eshell-modifier-alist)
+       (eshell-display-predicate-help, eshell-display-modifier-help)
+       (eshell-pred-substitute, eshell-split-members):
+       * lisp/eshell/em-prompt.el (eshell-prompt-function):
+       * lisp/eshell/em-smart.el (eshell-smart-unload-hook)
+       (eshell-smart-initialize, eshell-refresh-windows):
+       * lisp/eshell/em-unix.el (eshell-shuffle-files):
+       * lisp/eshell/esh-arg.el (eshell-parse-argument-hook):
+       * lisp/eshell/esh-cmd.el (eshell-cmd-initialize)
+       (eshell-parse-command):
+       * lisp/eshell/esh-mode.el (eshell-preinput-scroll-to-bottom)
+       (eshell-postoutput-scroll-to-bottom):
+       * lisp/eshell/esh-module.el (eshell-modules-list):
+       * lisp/eshell/esh-proc.el (eshell-read-process-name)
+       (eshell-round-robin-kill):
+       * lisp/eshell/esh-var.el (eshell-envvar-names)
+       (eshell-variables-list): Don't quote lambdas.
+
+2020-11-15  Juri Linkov  <juri@linkov.net>
+
+       New user options 'copy-region-blink-delay' and 'delete-pair-blink-delay'
+
+       * lisp/emacs-lisp/lisp.el (delete-pair-blink-delay): New defcustom.
+       (delete-pair): Use it.  (Bug#4136)
+
+       * lisp/simple.el (copy-region-blink-delay): New defcustom.
+       (indicate-copied-region): Use it.  (Bug#42865)
+       Thanks to Sean Whitton <spwhitton@spwhitton.name>.
+       (indicate-copied-region): Use 'query-replace-descr' not to show
+       newlines literally.  Use "Copied text" instead of misleading
+       "Saved text" (bug#42865).
+
+2020-11-15  Andrea Corallo  <akrl@sdf.org>
+
+       Improve `comp-fwprop-call'
+
+       * lisp/emacs-lisp/comp.el (comp-function-call-maybe-fold):
+       Document return value.
+       (comp-fwprop-call): Simplify and improve.
+
+2020-11-15  Andrea Corallo  <akrl@sdf.org>
+
+       Add more type specifiers
+
+       * lisp/emacs-lisp/comp.el (comp-known-type-specifiers): Add more
+       pure functions.
+
+2020-11-15  Eli Zaretskii  <eliz@gnu.org>
+
+       Reformat argument commentary in etags.c
+
+       * lib-src/etags.c (pfnote, consider_token, C_entries): Resurrect
+       original format of comments to function arguments.
+
+2020-11-15  Mattias Engdegård  <mattiase@acm.org>
+
+       Reformat comment for 'gnu' compilation rule
+
+       * lisp/progmodes/compile.el (compilation-error-regexp-alist-alist):
+       The comments above the regexp for the 'gnu' rule contained
+       references to the previous string regexp, which has been difficult
+       to follow ever since the translation to rx.  Move the comments
+       to their proper places, and add some guiding notes.
+
+2020-11-15  Alan Mackenzie  <acm@muc.de>
+
+       Make the invocation of combine-change-calls in comment-region valid
+
+       This fixes bug #44581.  The problem was that whitespace outside of the 
(BEG
+       END) region was being deleted, and this made the invocation of
+       combine-change-calls with (BEG END) invalid.
+
+       * lisp/newcomment.el (comment-region-default): Amend the second 
argument to
+       combine-change-calls.
+
+2020-11-15  Alan Mackenzie  <acm@muc.de>
+
+       * lisp/progmodes/cc-langs.el (c-<>-notable-chars-re): Fix wrong '-' in 
regexp
+
+2020-11-15  Stefan Kangas  <stefan@marxist.se>
+
+       Make initial frame match frame-title-format
+
+       * src/xterm.c (x_term_init):
+       * src/w32term.c (w32_initialize_display_info): Sync initial frame
+       title with new value of Vframe_title_format.
+       Problem reported by Angelo Graziosi <angelo.g0@libero.it>.
+
+2020-11-15  Stefan Kangas  <stefan@marxist.se>
+
+       Run menu-item :filter function before showing binding
+
+       * lisp/help.el (describe-map): Fix running `menu-item' :filter
+       functions.  This fixes a mistake in the previous conversion of this
+       defun from the old C function describe_map.  See the discussion in
+       Bug#39149.
+       * test/src/keymap-tests.el
+       (keymap---get-keyelt/runs-menu-item-filter)
+       (describe-buffer-bindings/menu-item-filter-show-binding)
+       (describe-buffer-bindings/menu-item-filter-hide-binding):
+       New tests.
+       (keymap-tests--test-menu-item-filter): New defun.
+
+2020-11-14  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Handle negation of search keys in gnus-search minibuffer completion
+
+       * lisp/gnus/gnus-search.el (gnus-search-get-active): Keys might start
+       with a leading "-": check for that and ignore it.
+
+2020-11-14  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into dev
+
+2020-11-14  Andrea Corallo  <akrl@sdf.org>
+
+       Add `comp-constraint-to-type-spec' and better handle boolean type spec
+
+       * lisp/emacs-lisp/comp.el (comp-constraint-to-type-spec): New
+       function splitting out code from comp-ret-type-spec + better
+       handle boolean type specifier.
+       (comp-ret-type-spec): Rework to leverage
+       `comp-constraint-to-type-spec'.
+       * test/src/comp-tests.el (comp-tests-type-spec-tests): Add a
+       testcase.
+
+2020-11-14  Andrea Corallo  <akrl@sdf.org>
+
+       Handle correctly quoting in *Native-compile-Log* buffer
+
+       * lisp/emacs-lisp/comp.el (comp-log): Add `quoted' parameter and
+       pass it to `comp-log-to-buffer'.
+       (comp-log-to-buffer): Add `quoted' parameter and leverage `prin1'
+       or `princ' accordingly.
+
+2020-11-14  Andrea Corallo  <akrl@sdf.org>
+
+       Split logic into comp-fwprop-call and improve it
+
+       * lisp/emacs-lisp/comp.el (comp-func-ret-valset)
+       (comp-fwprop-call): New functions.
+       (comp-fwprop-insn): Remove code duplicaiton and call
+       `comp-fwprop-call'.
+
+2020-11-14  Andrea Corallo  <akrl@sdf.org>
+
+       Fix debug symbol emission
+
+       * src/comp.c (Fcomp__compile_ctxt_to_file): Now that we do not
+       rely anymore on globlal variables move logic in from
+       'Fcomp__init_ctxt' so comp.debug is already set correctly.
+
+2020-11-14  Andrea Corallo  <akrl@sdf.org>
+
+       Add a number of type specifiers for pure function
+
+       * lisp/emacs-lisp/comp.el (comp-known-type-specifiers): Add 60
+       pure function type specifiers.
+
+2020-11-14  Andrea Corallo  <akrl@sdf.org>
+
+       Characterize functions in terms of type specifiers
+
+       * lisp/emacs-lisp/comp.el (comp-known-type-specifiers): New const
+       in place of `comp-known-ret-types' and `comp-known-ret-ranges'.
+       (comp-constraint): New struct to separate the constraint side of
+       an mvar.
+       (comp-constraint-f): Analogous for functions.
+       (comp-mvar): Rework and include `comp-constraint'.
+       (comp-type-spec-to-constraint): New function.
+       (comp-known-constraints-h): New const.
+       (comp-func-ret-typeset, comp-func-ret-range): Rework.
+       (comp-fwprop-insn): Fix.
+       * test/src/comp-tests.el (destructure-type-spec): New testcase.
+
+2020-11-14  Juri Linkov  <juri@linkov.net>
+
+       * lisp/progmodes/xref.el (xref-goto-xref): Prefix arg quits the *xref* 
buffer.
+
+       (bug#44611)
+
+2020-11-14  Juri Linkov  <juri@linkov.net>
+
+       * lisp/org/ob-ruby.el (org-babel-ruby-initiate-session): Use :ruby 
header arg.
+
+       Allow specification of ruby command using the :ruby header arg.
+       https://lists.gnu.org/archive/html/emacs-orgmode/2020-11/msg00166.html
+
+2020-11-14  Daniel Lenski  <dlenski@gmail.com>  (tiny change)
+
+       Fix `speedbar-directory-buttons' when using Tramp
+
+       * lisp/speedbar.el (speedbar-directory-buttons): Make speedbar
+       work with directories accessed via Tramp (bug#44622).
+
+2020-11-14  Stefan Kangas  <stefan@marxist.se>
+
+       Don't quote lambdas in several places
+
+       * lisp/align.el (align-highlight-rule):
+       * lisp/bookmark.el (bookmark-maybe-sort-alist):
+       * lisp/emacs-lisp/advice.el (ad-read-advice-name)
+       (ad-retrieve-args-form, ad-make-hook-form, defadvice)
+       (ad-with-originals):
+       * lisp/foldout.el (foldout-inhibit-key-bindings):
+       * lisp/gnus/gnus-bookmark.el (gnus-bookmark-maybe-sort-alist):
+       * lisp/mail/rfc822.el (rfc822-addresses-1):
+       * lisp/net/eudcb-ldap.el (eudc-ldap-cleanup-record-simple):
+       * lisp/net/net-utils.el (network-connection-to-service):
+       * lisp/net/socks.el (socks-build-auth-list):
+       * lisp/org/ox-odt.el (org-odt--image-size):
+       * lisp/pcomplete.el (pcomplete-command-completion-function)
+       (pcomplete-default-completion-function, pcomplete-opt):
+       * lisp/progmodes/cperl-mode.el (cperl-highlight-charclass)
+       (cperl-tags-hier-init, cperl-tags-treeify)
+       (cperl-next-interpolated-REx, cperl-time-fontification):
+       * lisp/shadowfile.el (shadow-copy-files, shadow-shadows-of-1)
+       (shadow-save-buffers-kill-emacs):
+       * lisp/strokes.el (strokes-renormalize-to-grid):
+       * lisp/tempo.el (tempo-insert, tempo-forward-mark)
+       (tempo-backward-mark):
+       * lisp/textmodes/artist.el (artist-submit-bug-report):
+       * lisp/textmodes/ispell.el (ispell-complete-word):
+       * lisp/url/url-auth.el (url-get-authentication):
+       * lisp/url/url-cache.el (url-cache-create-filename-human-readable):
+       * lisp/vcursor.el (vcursor-find-window):
+       * test/lisp/textmodes/reftex-tests.el
+       (reftex-parse-bibtex-entry-test): Don't quote lambdas.
+
+2020-11-14  Akira Kyle  <akira@akirakyle.com>  (tiny change)
+
+       Work around glib messing with signal handlers more than it should
+
+       * src/process.c (init_process_emacs): force glib's g_unix_signal
+       handler into lib_child_handler where it should belong.
+
+2020-11-14  Pablo Barbáchano  <pablob@amazon.com>
+
+       Add an option to preserve ANSI sequences
+
+       * lisp/ansi-color.el: Add an option to preserve the ANSI sequences.
+       * test/lisp/ansi-color-tests.el: Add tests (bug#44589).
+
+2020-11-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       project-or-external-find-file doc string fix
+
+       * lisp/progmodes/project.el (project-or-external-find-file): Doc
+       string fix -- it's not "recognizing" file names (bug#44588).
+
+2020-11-14  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in fortune.el and add tests
+
+       * lisp/play/fortune.el: Use lexical-binding.  Remove redundant
+       :group args.
+       (fortune-in-buffer): Quote function symbol as such.
+       * test/lisp/play/fortune-resources/fortunes:
+       * test/lisp/play/fortune-tests.el: New files.
+       * .gitignore: Ignore generated file fortunes.dat.
+
+2020-11-14  Eli Zaretskii  <eliz@gnu.org>
+
+       Update the various INSTALL files
+
+       * nt/INSTALL.W64:
+       * nt/INSTALL:
+       * INSTALL: Update the installation information, in particular the
+       fact that HarfBuzz is now preferred as the shaping library.
+
+2020-11-14  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix input method translation near read-only text
+
+       * lisp/international/quail.el (quail-input-method): Don't disable
+       input method when the character after point has the read-only
+       property.  Suggested by Evgeny Zajcev <lg.zevlg@gmail.com>
+       (Bug#44466)
+
+       * doc/emacs/mule.texi (Input Methods): Document that input methods
+       are inhibited in read-only text.
+
+2020-11-14  Eli Zaretskii  <eliz@gnu.org>
+
+       Make Calc windows dedicated by default
+
+       * lisp/calc/calc.el (calc-make-windows-dedicated): New defcustom.
+       (calc, calc-trail-display): Set Calc windows dedicated if
+       calc-make-windows-dedicated is non-nil.  Patch by Boruch Baum
+       <boruch_baum@gmx.com>.  (Bug#44108)
+
+       * etc/NEWS (Calc): Announce the new behavior.
+
+2020-11-14  Eli Zaretskii  <eliz@gnu.org>
+
+       Make 'prefer-utf-8' heed inhibit-*-detection variables
+
+       * lisp/international/mule-conf.el (prefer-utf-8): Inhibit
+       detection of null bytes and ISO escape sequences if the respective
+       inhibit-*-detection variables say so.  (Bug#44486)
+
+2020-11-14  Jared Finder  <jared@finder.org>
+
+       * lisp/faces.el (mode-line-highlight): Use :box only when supported.
+
+2020-11-14  Philipp Stephani  <phst@google.com>
+
+       Capitalize portable dump messages.
+
+       We capitalize all other messages during the dump, so capitalize the
+       "dump mode" and "dumping fingerprint" ones as well for consistency.
+
+       * src/pdumper.c (Fdump_emacs_portable): Capitalize fingerprint message
+       prefix.
+
+       * lisp/loadup.el: Capitalize "dump mode" message.
+
+2020-11-14  Jared Finder  <jared@finder.org>
+
+       Face-changing text properties and help-echo now work with xterm-mouse.
+
+       * src/dispnew.c (update_mouse_position): New function for mouse
+       movement logic in 'handle_one_term_event' that can be shared across
+       different mouse backends.
+       (display--update-for-mouse-movement): New lisp function, call it.
+       * lisp/xt-mouse.el (xterm-mouse--handle-mouse-movement): New function
+       that calls 'display--update-for-mouse-movement'.
+       (xterm-mouse-translate-1): Call it.
+       * src/term.c (handle_one_term_event): Inline logic from
+       'term_mouse_movement' and call 'update_mouse_position'.
+       (term_mouse_movement): Delete.
+
+2020-11-14  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix display of truncated R2L lines on TTY frames
+
+       * src/xdisp.c (extend_face_to_end_of_line): Use a while-loop, not
+       a do-while loop, to avoid appending an extra glyph at the end of a
+       line that is one character shorter than the window-width.  This is
+       needed to fix display of reversed glyph rows that are almost as
+       wide as the window, because append_space_for_newline already added
+       one space glyph.
+
+2020-11-14  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid crashes when a reversed glyph row starts with a composition
+
+       * src/dispnew.c (build_frame_matrix_from_leaf_window): Add an
+       assertion to prevent us from overwriting non-char glyphs with the
+       vertical border glyph.
+       * src/xdisp.c (extend_face_to_end_of_line): Account for one glyph
+       possibly inserted by append_space_for_newline.  (Bug#44506)
+       Remove a kludgey correction for an off-by-one error in column
+       counting, which is no longer needed.
+
+2020-11-14  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Save instantiated gnus-search engines in an alist
+
+       So we aren't re-instantiating (and potentially configuring) them with
+       every search.
+
+       * lisp/gnus/gnus-search.el (gnus-search-engine-instance-alist): New
+       variable holding server->engine mapping.
+       (gnus-search-server-to-engine): See if we've already instantiated this
+       server. If so, return it. If not, instantiate it and save in the above
+       variable.
+       (gnus-search-shutdown): Shutdown function clearing the above alist.
+
+2020-11-14  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Make sure Gnus search groups search topics recursively
+
+       * lisp/gnus/gnus-group.el (gnus-group-make-search-group,
+       gnus-group-read-ephemeral-search-group): If a search is initiated from
+       a topic line, make sure we get all the groups under that topic (and
+       under sub-topics).
+
+2020-11-13  Mattias Engdegård  <mattiase@acm.org>
+
+       Simplify quick-check composition regexps
+
+       * lisp/international/ucs-normalize.el
+       (quick-check-composition-list-to-regexp): Don't add an explicit
+       pattern for U+1161..U+1175 and U+11a8..U+11c2 since these are already
+       part of `combining-chars'.
+
+2020-11-13  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       a3d316bbb7 (origin/emacs-27) Update information about refcards
+       f43e9ad524 Avoid crashes in the daemon due to user interaction
+
+2020-11-13  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       ac1a2b2160 Add more doc-view requirements
+       109eb1e7e2 Fix undefined behavior when fetching glyphs from the displ...
+
+       # Conflicts:
+       #       lisp/doc-view.el
+
+2020-11-13  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       75384bd155 Update the doc-view header line
+       13ab70c80e Avoid breaking Arabic shaping in 'window-text-pixel-size'
+       e693d97e50 doc-view.el comment clarification
+       968e85a2ce Update erc documentation about C-c C-b
+
+2020-11-13  Alan Third  <alan@idiocy.org>
+
+       Fix error with fn key in NS port (bug#44533)
+
+       * src/nsterm.m ([EmacsView keyDown:]): Move the correction for fn key
+       handling to before the modifiers are calculated.
+
+2020-11-13  Michael Albinus  <michael.albinus@gmx.de>
+
+       Some minor Tramp fixes, resulting from test campaign
+
+       * lisp/net/tramp.el (tramp-handle-write-region):
+       * lisp/net/tramp-adb.el (tramp-adb-handle-write-region):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-write-region):
+       * lisp/net/tramp-smb.el (tramp-smb-handle-write-region): Use 
`current-time'
+       if needed.
+
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-gio-mapping):
+       (tramp-gvfs-do-copy-or-rename-file): Remove "gvfs-rename", it is
+       not trustworthy.
+
+       * test/lisp/net/tramp-tests.el (tramp-test07-file-exists-p): Check also 
for
+       symlinked files in trash.
+       (tramp-test20-file-modes): Revert last change, it was a thinko.
+
+2020-11-13  Eli Zaretskii  <eliz@gnu.org>
+
+       Update information about refcards
+
+       * admin/release-process (refcards):
+       * admin/make-tarball.txt (refcards): Update information about
+       generating refcards and required TeX/LaTeX packages.
+
+2020-11-12  Andrea Corallo  <akrl@sdf.org>
+
+       Add copy insn testcase
+
+       * test/src/comp-tests.el (copy-insn): New testcase.
+       * test/src/comp-test-funcs.el (comp-test-copy-insn-f): New
+       function.
+
+2020-11-12  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (comp-mvar-value-vld-p): Fix logic.
+
+2020-11-12  Andrea Corallo  <akrl@sdf.org>
+
+       Memoize `comp-common-supertype'
+
+       * lisp/emacs-lisp/comp.el (comp-ctxt): Add `common-supertype-mem'
+       slot.
+       (comp-common-supertype): Memoize.
+
+2020-11-12  Andrea Corallo  <akrl@sdf.org>
+
+       Add few more type specifier tests
+
+       * test/src/comp-tests.el (comp-tests-type-spec-tests): Add three
+       tests and uncomment one.
+
+2020-11-12  Andrea Corallo  <akrl@sdf.org>
+
+       Rework `comp-ret-type-spec' in terms of `comp-phi'
+
+       * lisp/emacs-lisp/comp.el (comp-ret-type-spec): Use `comp-func'
+       not to duplicate logic plus add null type specifier support and
+       some comments.
+
+2020-11-12  Andrea Corallo  <akrl@sdf.org>
+
+       Move phi function code into dedicated function and improve it
+
+       * lisp/emacs-lisp/comp.el (comp-phi): New function moving logic
+       from `comp-fwprop-insn'.
+
+2020-11-12  Stefan Kangas  <stefan@marxist.se>
+
+       Don't quote lambdas in several places
+
+       * lisp/allout-widgets.el (allout-widgets-adjusting-message)
+       (allout-widgets-exposure-change-processor)
+       (allout-widgets-count-buttons-in-region):
+       * lisp/ansi-color.el (ansi-color-make-color-map):
+       * lisp/case-table.el (describe-buffer-case-table):
+       * lisp/emacs-lisp/byte-opt.el (byte-decompile-bytecode-1):
+       * lisp/gnus/gnus-agent.el (gnus-agent-regenerate-group):
+       * lisp/gnus/nnir.el (nnir-run-swish++, nnir-run-swish-e)
+       (nnir-run-hyrex, nnir-run-namazu):
+       * lisp/hippie-exp.el (make-hippie-expand-function)
+       (try-complete-lisp-symbol, try-complete-lisp-symbol-partially)
+       (try-expand-all-abbrevs):
+       * lisp/international/mule-cmds.el (sort-coding-systems)
+       (select-safe-coding-system, select-message-coding-system)
+       (read-language-name, encoded-string-description):
+       * lisp/international/quail.el (quail-keyseq-translate)
+       (quail-get-translations, quail-build-decode-map)
+       (quail-insert-decode-map):
+       * lisp/jka-compr.el (jka-compr-uninstall):
+       * lisp/locate.el (locate-in-alternate-database):
+       * lisp/mail/mailabbrev.el (mail-resolve-all-aliases-1)
+       (mail-abbrev-make-syntax-table):
+       * lisp/mh-e/mh-seq.el (mh-read-folder-sequences):
+       * lisp/net/eudcb-ldap.el (eudc-ldap-simple-query-internal):
+       * lisp/progmodes/make-mode.el (makefile-query-targets)
+       (makefile-prompt-for-gmake-funargs):
+       * lisp/shadowfile.el (shadow-cancel, shadow-shadows-of):
+       * lisp/sort.el (sort-pages, sort-fields, sort-regexp-fields):
+       * lisp/subr.el (listify-key-sequence):
+       * lisp/term/wyse50.el (terminal-init-wyse50):
+       * lisp/textmodes/ispell.el (ispell-help)
+       (ispell-begin-tex-skip-regexp):
+       * lisp/textmodes/page-ext.el (pages-sort-region):
+       * lisp/textmodes/refer.el (refer-find-entry-in-file):
+       * lisp/url/url-expand.el (url-expand-file-name): Don't quote lambdas.
+
+2020-11-12  Juri Linkov  <juri@linkov.net>
+
+       Add help-char to the cache key in read-char-from-minibuffer as well
+
+       It's highly unlikely that help-char will be changed from its default 
value 8,
+       but formally there is a dependence on help-char.
+
+2020-11-12  Robert Pluim  <rpluim@gmail.com>
+
+       Emit required version when Harfbuzz is not found but Cairo is
+
+       * configure.ac: Define harfbuzz_required_ver with required
+       harfbuzz version, and put it in the warning message emitted when
+       Cairo is found but not HarfBuzz.
+
+2020-11-12  Mattias Engdegård  <mattiase@acm.org>
+
+       vhdl-mode: remove minor obstacle to static checking
+
+       * lisp/progmodes/vhdl-mode.el (vhdl-directive-keywords-regexp):
+       Remove unnecessary global variable.
+       (vhdl-words-init): Remove assignment.
+       (vhdl-font-lock-init): Inline expression.  Use regexp-opt.
+
+2020-11-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove mention of `edebug-on-signal' from a doc string
+
+       * lisp/emacs-lisp/edebug.el (edebug-mode): Don't mention
+       non-existent user option (bug#44577).
+
+2020-11-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify project-find-file doc string
+
+       * lisp/progmodes/project.el (project-find-file): Don't say
+       anything about recognizing file names, as that may lead the user
+       to think that it'll check whether the string at point is an
+       existing file (bug#44588).
+
+2020-11-12  Juri Linkov  <juri@linkov.net>
+
+       Add help-form to the cache key in read-char-from-minibuffer
+
+2020-11-12  Stefan Kangas  <stefan@marxist.se>
+
+       * test/lisp/help-fns-tests.el: Silence byte-compiler.
+
+       * test/lisp/hfy-cmap-resources/rgb.txt: Add comment line.
+
+2020-11-12  Stefan Kangas  <stefan@marxist.se>
+
+       Remove redundant installation instructions
+
+       * lisp/net/newsticker.el:
+       * lisp/net/sieve-mode.el:
+       * lisp/play/bubbles.el:
+       * lisp/play/handwrite.el:
+       * lisp/progmodes/python.el:
+       * lisp/progmodes/ruby-mode.el:
+       * lisp/whitespace.el: Remove redundant installation instructions.
+       These packages are distributed with Emacs and/or GNU ELPA.
+       * lisp/calendar/timeclock.el:
+       * lisp/ehelp.el:
+       * lisp/emacs-lisp/checkdoc.el:
+       * lisp/filesets.el:
+       * lisp/mail/reporter.el:
+       * lisp/net/rfc2104.el:
+       * lisp/net/webjump.el:
+       * lisp/pixel-scroll.el: Remove redundant recommendation to call
+       require before using autoloaded functions.
+       * lisp/tar-mode.el: Remove reference to package uncompress, removed in
+       Emacs 23.
+
+2020-11-12  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/progmodes/ruby-mode.el (auto-mode-alist): Add Brewfile.
+
+2020-11-12  Stefan Kangas  <stefan@marxist.se>
+
+       Fix mistake in describe-buffer-bindings
+
+       * src/keymap.c (Fdescribe_buffer_bindings): Fix a call in
+       describe-buffer-bindings.  This fixes a mistake in my previous commit
+       to prefer the Lisp version of describe-map-tree (8a1441310aa1), where
+       0 was accidentally converted to Qt in two places.
+
+2020-11-12  Juri Linkov  <juri@linkov.net>
+
+       Use cache with help-char in read-char-from-minibuffer unless help-form 
is nil
+
+2020-11-12  Andrea Corallo  <akrl@sdf.org>
+
+       Nativecomp testsuite rework for derived return type specifiers
+
+       As we have derived return type specifiers as some test for them.  Also
+       rewrite some propagation related test using return type specifiers too
+       as it's way more convenient.
+
+       * test/src/comp-tests.el (fw-prop-1): Nit rename.
+       (comp-tests-check-ret-type-spec): New function.
+       (comp-tests-type-spec-tests): New variable.
+       (comp-tests-cond-rw-0-var) Remove variable.
+       (cond-rw-0, cond-rw-1, cond-rw-2, cond-rw-3, cond-rw-4, cond-rw-5)
+       Remove tests as now covered by `comp-tests-check-ret-type-spec'.
+
+2020-11-12  Andrea Corallo  <akrl@sdf.org>
+
+       Add nativecomp derived return type specifier computation support
+
+       * lisp/emacs-lisp/comp.el (comp-post-pass-hooks): Nit.
+       (comp-func): Add `ret-type-specifier' slot.
+       (comp-ret-type-spec): New function.
+       (comp-final): Call `comp-ret-type-spec'.
+
+2020-11-12  Andrea Corallo  <akrl@sdf.org>
+
+       Unline some functions to optimize bootstrap time
+
+       * lisp/emacs-lisp/comp.el (comp-mvar-value-vld-p)
+       (comp-mvar-value, comp-mvar-fixnum-p, comp-set-op-p)
+       (comp-assign-op-p, comp-call-op-p, comp-type-hint-p)
+       (comp-func-ret-typeset, comp-function-pure-p)
+       (comp-alloc-class-to-container, comp-lex-byte-func-p)
+       (comp-lap-eob-p, comp-lap-fall-through-p, comp-emit)
+       (comp-emit-set-call, comp-mvar-propagate)
+       (comp-function-foldable-p, comp-function-call-maybe-fold)
+       (comp-trampoline-filename): Uninline functions.
+
+2020-11-12  Andrea Corallo  <akrl@sdf.org>
+
+       Add to elisp-mode `emacs-lisp-native-compile-and-load'
+
+       * lisp/progmodes/elisp-mode.el
+       (emacs-lisp--before-compile-buffer): New function.
+       (emacs-lisp-byte-compile-and-load): Use the previous.
+       (emacs-lisp-native-compile-and-load): New function.
+
+2020-11-12  Andrea Corallo  <akrl@sdf.org>
+
+       Fix limple-mode for new type and range limple semantic
+
+       * lisp/emacs-lisp/comp.el (comp-limple-branches, comp-limple-ops):
+       New variables.
+       (comp-limple-lock-keywords): Update value.
+
+2020-11-12  Andrea Corallo  <akrl@sdf.org>
+
+       Add a nativecomp testcase
+
+       Having this while re-debugging the bootstrap would have saved few hours
+       of debug so let's add it.
+
+       * test/src/comp-tests.el (and-3): Add test.
+       * test/src/comp-test-funcs.el (comp-test-and-3-var): New var.
+       (comp-test-and-3-f): New function.
+
+2020-11-12  Andrea Corallo  <akrl@sdf.org>
+
+       Add initial nativecomp typeset and range propagation support
+
+       This commit add an initial support for a better type propagation and
+       integer range propagation.
+
+       Each mvar can be now characterized by a set of types, a set of values
+       and an integral range.
+
+       * lisp/emacs-lisp/comp.el (comp-known-ret-types): Store into
+       typeset and remove fixnum.
+       (comp-known-ret-ranges, comp-type-predicates): New variables.
+       (comp-ctxt): Remove supertype-memoize slot and add
+       union-typesets-mem.
+       (comp-mvar): Remove const-vld, constant, type slots. Add typeset,
+       valset, range slots.
+       (comp-mvar-value-vld-p, comp-mvar-value, comp-mvar-fixnum-p)
+       (comp-mvar-symbol-p, comp-mvar-cons-p)
+       (comp-mvar-type-hint-match-p, comp-func-ret-typeset)
+       (comp-func-ret-range): New functions.
+       (make-comp-mvar, make-comp-ssa-mvar): Update logic.
+       (comp--typeof-types): New variable.
+       (comp-supertypes, comp-common-supertype): Logic update.
+       (comp-subtype-p, comp-union-typesets, comp-range-1+)
+       (comp-range-1-, comp-range-<, comp-range-union)
+       (comp-range-intersection): New functions.
+       (comp-fwprop-prologue, comp-mvar-propagate)
+       (comp-function-foldable-p, comp-function-call-maybe-fold)
+       (comp-fwprop-insn, comp-call-optim-func, comp-finalize-relocs):
+       Logic update.
+
+       * src/comp.c (emit_mvar_rval, emit_call_with_type_hint)
+       (emit_call2_with_type_hint): Logic update.
+
+       * lisp/emacs-lisp/cl-preloaded.el (cl--typeof-types): Undo the add
+       of fixnum and bignum as unnecessary.
+
+       * test/src/comp-tests.el
+       (comp-tests-mentioned-p-1, comp-tests-cond-rw-checker-val)
+       (comp-tests-cond-rw-checker-type, cond-rw-1, cond-rw-2)
+       (cond-rw-3, cond-rw-4, cond-rw-5): Update for new type interface.
+       (range-simple-union, range-simple-intersection): New integer range
+       tests.
+       (union-types): New union type test.
+
+2020-11-12  Andrea Corallo  <akrl@sdf.org>
+
+       Rename two nativecomp functions
+
+       * lisp/emacs-lisp/comp.el (comp-function-foldable-p): Rename from
+       comp-function-optimizable-p.
+       (comp-function-call-maybe-fold): Same from
+       comp-function-call-maybe-fold.
+
+2020-11-11  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid crashes in the daemon due to user interaction
+
+       * src/minibuf.c (read_minibuf): Avoid crashes in the daemon if the
+       init file invokes some kind of minibuffer interaction, by not
+       updating the selected frame if it's the initial frame.
+       (Bug#44583)
+
+2020-11-11  Juri Linkov  <juri@linkov.net>
+
+       In dired-query use read-char-from-minibuffer with bound help-char 
(bug#42708)
+
+       * lisp/dired-aux.el (dired-query): Replace read-char-choice call
+       with read-char-from-minibuffer.
+
+       * lisp/subr.el (read-char-choice): Restore the previous version
+       that uses read-key.
+       (read-char-from-minibuffer): Bind help-char to help-form-show
+       when help-form is non-nil.
+
+2020-11-11  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Remove unused "internal" gnus-search variables
+
+       * lisp/gnus/gnus-search.el (gnus-search-memo-query,
+       gnus-search-memo-server): No longer needed.
+
+2020-11-11  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Fix defgeneric name of gnus-search-index(ed)-extract
+
+       * lisp/gnus/gnus-search.el (gnus-search-indexed-extract): Had the
+       wrong name on the generic.
+
+2020-11-11  Michael Albinus  <michael.albinus@gmx.de>
+
+       Some minor changes to Tramp, do not merge with master
+
+       * lisp/net/tramp.el (tramp-handle-directory-files)
+       (tramp-handle-directory-files-and-attributes):
+       * lisp/net/tramp-adb.el
+       (tramp-adb-handle-directory-files-and-attributes):
+       * lisp/net/tramp-rclone.el (tramp-rclone-handle-directory-files):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-directory-files-and-attributes):
+       * lisp/net/tramp-smb.el (tramp-smb-handle-directory-files): Add _COUNT.
+       Make the functions forward compatible.
+
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-enabled):
+       Increase `max-specpdl-size' temporarily.
+
+       * test/lisp/net/tramp-tests.el (tramp--test-share-p): New defun.
+       (tramp-test05-expand-file-name-relative): Use it.
+
+2020-11-11  Dario Gjorgjevski  <dario.gjorgjevski@gmail.com>
+
+       Fix python-font-lock-keywords-maximum-decoration performance regression
+
+       * lisp/progmodes/python.el
+       (python-font-lock-keywords-maximum-decoration): `symbol-name'
+       should not be quantified by a `+' as it is redundant and performs
+       very badly (bug#44572).
+
+2020-11-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove mention of global-cedet-m3-minor-mode
+
+       * lisp/cedet/semantic.el (semantic-submode-list):
+       (semantic-default-submodes): Remove mention of
+       global-cedet-m3-minor-mode, which no longer exists, apparently
+       (bug#44565).
+
+2020-11-11  Dario Gjorgjevski  <dario.gjorgjevski@gmail.com>
+
+       Fix font lock of assignments with type hints in Python
+
+       * lisp/progmodes/python.el
+       (python-font-lock-keywords-maximum-decoration): Fix regular
+       expressions for font lock of assignments with type hints (bug#44568).
+
+       The font lock of assignments with type hints in Python is rather bad.
+       Consider the following example:
+
+           from typing import Mapping, Tuple, Sequence
+           var1: int = 5
+           var2: Mapping[int, int] = {10: 1024}
+           var3: Mapping[Tuple[int, int], int] = {(2, 5): 32}
+           var4: Sequence[Sequence[int]] = [[1], [1, 2], [1, 2, 3]]
+           var5: Sequence[Mapping[str, Sequence[str]]] = [
+               {
+                   'red': ['scarlet', 'vermilion', 'ruby'],
+                   'green': ['emerald green', 'aqua']
+               },
+               {
+                   'sword': ['cutlass', 'rapier']
+               }
+           ]
+
+       As things stand right now, only ‘var1’ would be highlighted.  To make
+       things worse, the ‘Mapping’ type hint of ‘var2’ would also be
+       highlighted, which is entirely incorrect.
+
+       This commit makes all of ‘var1’ through ‘var5’ be highlighted
+       correctly.
+
+2020-11-11  Harald Jörg  <haj@posteo.de>
+
+       Cleanup of the test file for cperl-mode
+
+       * test/lisp/progmodes/cperl-mode-tests.el
+       (cperl--run-test-cases): New macro, factored out from various
+       indentation / rewriting tests.  Contains documentation of the
+       format used by the cperl-mode-resources files.
+       (cperl-test-bug-19709): Replace 'next-line' by 'forward-line'.
+       (cperl-test-indent-exp),
+       (cperl-test-indent-styles),
+       (cperl-test-bug-30393): Use the new macro.
+       (cperl-test-bug-19709): Make fit for Emacs 26.
+       (cperl-test-indent-styles): Skip for Perl mode (bug#44561).
+
+2020-11-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/server.el: Refactor frame creation functions
+
+       (server--create-frame): New function, extracted from
+       `server-create-dumb-terminal-frame`.
+       (server-create-window-system-frame, server-create-tty-frame):
+       (server-create-dumb-terminal-frame): Use it.
+
+2020-11-11  Eliza Velasquez  <exv@google.com>
+
+       * lisp/server.el: Fix frame creation on dumb terminals (bug#25547)
+
+       (server-create-dumb-terminal-frame): New function.
+       (server-process-filter): Use it.
+       (server-delete-client): Don't delete tty terminal when it's not
+       exclusive to this client.
+
+2020-11-10  Juri Linkov  <juri@linkov.net>
+
+       Don't set file name variable in org-element-parse-secondary-string 
(bug#44524)
+
+       * lisp/org/org-element.el (org-element-parse-secondary-string):
+       Don't set buffer-local variables buffer-file-name and 
buffer-file-truename
+       in temporary buffer.
+
+2020-11-10  Juri Linkov  <juri@linkov.net>
+
+       * lisp/leim/quail/compose.el ("iso-transl"): New input method.
+
+       * doc/emacs/basic.texi (Inserting Text):
+       Mention transient input method "iso-transl".
+
+       * lisp/leim/quail/latin-ltx.el: Use same Keywords as in other quail 
files.
+
+2020-11-10  Eli Zaretskii  <eliz@gnu.org>
+
+       New debugging command 'malloc-info'
+
+       * src/alloc.c (Fmalloc_info) [GNU_LINUX]: New command.
+       (syms_of_alloc): Defsubr it.  (Bug#43389)
+
+2020-11-10  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Clear the vc-state cache when returning nil
+
+       * lisp/vc/vc-hg.el (vc-hg-registered):
+       Clear the vc-state cache when returning nil.
+
+2020-11-10  Tom Fitzhenry  <tomfitzhenry@google.com>
+
+       Remove extra process call from vc-hg-registered
+
+       Prefer vc-state to benefit from its caching (bug#44534)
+
+       This same technique is used in vc-git.el,
+       per commit 2018-06-28 "Remove extra process call from 
vc-git-find-file-hook"
+       93c41ce6aa64b14fc9bd7bdd0d909915a79191cd.
+
+       * lisp/vc/vc-hg.el (vc-hg-registered): Use vc-state rather than 
vc-hg-state.
+
+2020-11-10  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix a recent change in image.c for MS-Windows
+
+       * src/image.c: Fix DEF_DLL_FN of
+       rsvg_handle_get_intrinsic_dimensions.  Reported by Andy Moreton
+       <andrewjmoreton@gmail.com>.
+
+2020-11-10  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add more doc-view requirements
+
+       * lisp/doc-view.el: Add more requirements.
+
+2020-11-10  Steven Allen  <steven@stebalien.com>
+
+       Only use nbutlast when we actually want to modify the original list
+
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-dbus-byte-array-to-string):
+       Don't modify the byte array.
+       * lisp/net/tramp-integration.el (tramp-eshell-directory-change):
+       Don't modify the underlying exec-path.
+
+2020-11-10  Andrew G Cohen  <cohen@andy.bu.edu>
+
+       Remove ephemeral group on error or null result
+
+       * lisp/gnus/nnselect.el (nnselect-request-group): If an ephemeral
+       group is empty, there is nothing to see, so remove the group.
+       (nnselect-run): Catch and return an empty artlist on error.
+
+2020-11-09  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: fix many compiler warnings which would appear with lexical 
binding
+
+       * lisp/progmodes/cc-align.el (three places) prefix langelem with a _.
+
+       * lisp/progmodes/cc-cmds.el:
+       * lisp/progmodes/cc-engine.el: Remove superfluous local variables.
+
+       * lisp/progmodes/cc-defs.el (c-will-be-unescaped): Remove unused 
parameter
+       end.
+       * lisp/progmodes/cc-engine.el (c-looking-at-decl-block): Remove unused
+       parameter containing-sexp.
+       (c-looking-at-special-brace-list); Remove unused parameter lim.
+       (c-add-class-syntax): Remove unused parameter paren-state.
+
+2020-11-09  Philipp Stephani  <phst@google.com>
+
+       Fix undefined behavior when fetching glyphs from the display vector.
+
+       You can trigger this rather obscure bug by enabling selective display
+       if the second glyph in its display vector has an invalid face.  For
+       example, evaluate
+
+       (set-display-table-slot standard-display-table
+                               'selective-display [?A (?B . invalid)])
+
+       and then enable selective display.
+
+       * src/xdisp.c (next_element_from_display_vector): Check whether next
+       glyph code is valid before accessing it.
+
+2020-11-09  Stefan Kangas  <stefan@marxist.se>
+
+       Add test for substitute-command-keys with command remap
+
+       * test/lisp/help-tests.el (help-tests-remap-map): New variable.
+       (help-tests-substitute-command-keys/remap): New test.
+       (help-tests-substitute-command-keys/keymaps)
+       (help-tests-substitute-command-keys/undefined-map): Fix indentation.
+
+2020-11-09  Brian Leung  <leungbk@mailfence.com>  (tiny change)
+
+       shortdoc: prefer seq-contains-p over seq-contains
+
+       * lisp/emacs-lisp/shortdoc.el (sequence): use seq-contains-p instead
+       of seq-contains, which is obsolete as of 27.1.  (Bug#44536)
+
+2020-11-09  Stefan Kangas  <stefan@marxist.se>
+
+       Simplify getting value of text-quoting-style (Bug#44471)
+
+       * src/doc.c (text_quoting_style): Remove function by merging it...
+       (Ftext_quoting_style): ...here.  Rename from Fget_quoting_style.
+       (syms_of_doc): Update defsubr for Ftext_quoting_style.
+       * src/lisp.h (enum text_quoting_style): Remove enum.
+       * src/doprnt.c (doprnt):
+       * src/editfns.c (styled_format):
+       * lisp/help.el (substitute-command-keys): Update callers to use
+       text-quoting-style.
+
+2020-11-09  Philipp Stephani  <phst@google.com>
+
+       * lisp/disp-table.el (make-glyph-code): Remove obsolete comment.
+
+2020-11-09  Mattias Engdegård  <mattiase@acm.org>
+
+       Better warning suppression in rx-tests
+
+       * test/lisp/emacs-lisp/rx-tests.el (rx-compat): Use with-no-warnings
+       instead of with-suppressed-warnings which complains when running
+       the test interactively.
+
+2020-11-09  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix pcase rx form snag with '?' and '??' (bug#44532)
+
+       This is a regression from Emacs 26.
+       Reported by Phillip Stephani.
+
+       * lisp/emacs-lisp/rx.el (rx--pcase-transform): Process ? and ?? 
correctly.
+       * test/lisp/emacs-lisp/rx-tests.el (rx-pcase): Add test case.
+
+2020-11-09  Alan Third  <alan@idiocy.org>
+
+       Fix css length calculations
+
+       * src/image.c (svg_css_length_to_pixels): Put in missing breaks where
+       necessary.
+
+2020-11-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make the SHOW parameter work again in `run-python'
+
+       * lisp/progmodes/python.el (run-python): Make the SHOW parameter
+       work again after the fix for 31398 (bug#44421).
+
+2020-11-09  Protesilaos Stavrou  <info@protesilaos.com>
+
+       Use a separate face for expanded log-view bodies
+
+       * lisp/vc/log-view.el (log-view-commit-body): Define new face.
+       (log-view-toggle-entry-display): Implement 'log-view-commit-body'
+       face (bug#44424).
+
+2020-11-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify Lisp warning about elements following other expressions
+
+       * lisp/emacs-lisp/lisp-mode.el (lisp-fdefs): Clarify warning in
+       help text (bug#44482).
+
+2020-11-09  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix compilation of image.c on MS-Windows
+
+       This is a followup to last change in image.c.
+       * src/image.c (rsvg_handle_get_intrinsic_dimensions): Define to
+       call fn_rsvg_handle_get_intrinsic_dimensions.
+       (svg_css_length_to_pixels): Compile only for librsvg >= 2.46.0, as
+       RsvgLength type was not defined before.
+
+2020-11-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Update the doc-view header line
+
+2020-11-09  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid breaking Arabic shaping in 'window-text-pixel-size'
+
+       * src/xdisp.c (CHAR_COMPOSED_P): If the bidi_p flag is not set,
+       pass -1 to composition_reseat_it, so that the shaping engine will
+       figure out the directionality of the text.  This is important,
+       e.g., when using move_it_* functions in some context that is not
+       redisplay, such as 'window-text-pixel-size'.  (Bug#44521)
+
+2020-11-09  Alan Third  <alan@idiocy.org>
+
+       Fix crash in ns_mouse_position (bug#44313)
+
+       * src/nsterm.m (ns_destroy_window): Close the window before freeing
+       the frame resources so we don't end up accessing the frame struct
+       after it's been freed.
+
+2020-11-09  Andrii Kolomoiets  <andreyk.mad@gmail.com>
+
+       NS: Make s-<left/right> to move to beginning/end of line
+
+       * lisp/term/ns-win.el: Bind 's-<left>' to 'move-beginning-of-line';
+       bind 's-<right>' to 'move-end-of-line'.
+       * etc/NEWS: Mention new bindings.
+
+2020-11-09  Alan Third  <alan@idiocy.org>
+
+       Calculate SVG image sizes more accurately (bug#44206)
+
+       * src/image.c (svg_css_length_to_pixels): New function.
+       (svg_load_image): Try more methods to work out the image size.
+
+2020-11-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       doc-view.el comment clarification
+
+       * lisp/doc-view.el: Make the commentary mention that it's not
+       limited to a narrow range of file formats (bug#44504).
+
+2020-11-09  Daniel Martín  <mardani29@yahoo.es>
+
+       Update erc documentation about C-c C-b
+
+       * doc/misc/erc.texi (Keystroke Summary): C-c C-b runs
+       erc-switch-to-buffer, which is implemented in terms of
+       read-buffer (bug#44498).
+
+2020-11-09  Harald Jörg  <haj@posteo.de>
+
+       cperl-mode: Indentation of ')' follows customisation
+
+       * lisp/progmodes/cperl-mode.el (cperl-style-alist): Add
+       cperl-close-paren-offset to the settings for PBP style.
+
+       * test/lisp/progmodes/cperl-mode-tests.el (cperl-bug19709):
+       New test to verify correct indentation of closing parentheses 
(Bug#19709).
+
+       * test/lisp/progmodes/cperl-mode-resources/cperl-bug-19709.pl:
+       New test case with code from the bug report.
+
+       * test/lisp/progmodes/cperl-mode-resources/cperl-indent-styles.pl:
+       Add a new test clause for cperl-close-paren-offset.
+
+2020-11-09  Akira Kyle  <akira@akirakyle.com>  (tiny change)
+
+       Fix xwidget's webkitgtk widget overriding of Emacs SIGCHLD handler
+
+       * src/xwidget.c (make-xwidget): Save and restore Emacs SIGCHLD signal
+       handler since glib doesn't (but should) do this.
+
+2020-11-09  Stefan Kangas  <stefan@marxist.se>
+
+       Remove test for return value of set-keymap-parent
+
+       * test/src/keymap-tests.el
+       (keymap-keymap-set-parent/returns-parent): Remove test for the return
+       value of set-keymap-parent.  It is not clear that returning the value
+       is a very good idea.
+       Problem pointed out by Stefan Monnier <monnier@iro.umontreal.ca>.
+
+2020-11-09  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Add more protections to gnus-search query parsing
+
+       * lisp/gnus/gnus-group.el (gnus-group-make-search-group,
+       gnus-group-read-ephemeral-search-group): If the query is coming in via
+       the old 'nnir-query-spec key, we know not to parse it.
+       * lisp/gnus/gnus-search.el (gnus-search-make-query-string): Check if
+       the query was sent in as '(query "query"), and not '(query . "query).
+       (gnus-search-imap-search-keys): Add x-gm-raw to imap search keys.
+       (gnus-search-prepare-query): If we know this query should be raw,
+       don't even try parsing it, as it probably won't work.
+
+2020-11-08  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (comp-fwprop-insn): Fix phi function.
+
+2020-11-08  Juri Linkov  <juri@linkov.net>
+
+       * lisp/progmodes/project.el: Don't truncate the saved project list.
+
+       * lisp/progmodes/project.el (project--write-project-list):
+       Let-bind print-length and print-level to nil to not truncate the
+       saved project list with unreadable ellipsis.
+
+2020-11-08  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Another backwards-compatibility fix for gnus-search
+
+       * lisp/gnus/gnus-search.el (gnus-search-server-to-engine): Because of
+       the way we've set up the obsolete variable alias for
+       `nnir-method-default-engines', we may end up with its value in
+       `gnus-search-default-engines'. Make the check for "old style" values
+       general, so we catch them no matter where they came from.
+
+2020-11-08  Alan Mackenzie  <acm@muc.de>
+
+       Don't set the selected window to the miniwindow on a frame change.
+
+       Intended to fix bug #44502.
+
+       * src/minibuf.c (move_minibuffer_onto_frame): Remove the lines of code 
which
+       set the selected window to the minibuffer.
+
+2020-11-08  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Doc fix
+
+       * lisp/vc/vc.el (vc-deduce-fileset): Doc fix (bug#44420).
+
+2020-11-08  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Mention which exact file is already registered
+
+       * lisp/vc/vc.el (vc-register):
+       Mention which exact file is already registered (bug#44420).
+
+2020-11-07  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (comp-common-supertype-2): Fix null 
intersection
+
+2020-11-07  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       f5d7fb3a2d (origin/emacs-27) Fix 'uudecode-decode-region-internal' in...
+       d4242177da Fix 'send-string-to-terminal' writing very long strings
+       9da0f4026c * lisp/subr.el (read-char-from-minibuffer): Doc fix.  (Bug...
+       9899f74e4e Merge branch 'emacs-27' of git.savannah.gnu.org:/srv/git/e...
+       a6fcba783e Fix documentation of 'windmove-swap-states-default-keybind...
+       f4acd7a924 Split windows evenly when 'min-margins' parameter was set ...
+
+2020-11-07  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       53933cdf5c ; * lisp/international/mule.el (define-coding-system): Doc...
+       e90ffcf759 * src/w32fns.c (Fw32_register_hot_key): Doc fix.  (Bug#44456)
+       89740e9cb5 Prevent redisplay from moving point behind user's back
+       5932df7435 Document that the :match function for a widget takes an ex...
+       1b7ab9d0ac Don't render XML declaration of an HTML document (bug#44348)
+
+       # Conflicts:
+       #       lisp/international/mule.el
+
+2020-11-07  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Various fixes and backward compatibility for gnus-search
+
+       * lisp/gnus/gnus-group.el (gnus-group-make-search-group,
+       gnus-group-read-ephemeral-search-group): Check for and accept the old
+       nnir-* spec keys.
+       * lisp/gnus/gnus-search.el (shared-initialize): Use
+       generate-new-buffer instead of doing it ourselves.
+       (gnus-search-server-to-engine): Raise an informative error explicitly
+       if we can't find a search engine, rather than letting it fall through
+       to something less helpful.
+       (gnus-search-make-spec): Add `gnus-search--complete-key-data' to
+       `completion-at-point-functions' locally, not globally.
+
+2020-11-07  Andrea Corallo  <akrl@sdf.org>
+
+       Allow for manually bumbing new native compiler ABI versions
+
+       * src/comp.c (ABI_VERSION): Define macro.
+       (hash_native_abi): Include ABI_VERSION in the hashing.
+       (syms_of_comp): Tweak docstring.
+
+2020-11-07  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-11-07  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/lisp-mode.el: Avoid false-positive "hidden arg" in 
strings
+
+       (lisp--match-hidden-arg): Don't misfire in strings and comments.
+
+       Reported by: Andrii Kolomoiets <andreyk.mad@gmail.com>
+
+2020-11-07  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Add test for recent change in enable-theme
+
+       * test/lisp/custom-tests.el (custom-test-enable-theme-keeps-settings):
+       Enabling a theme should not change the theme settings, so test for
+       that.  See
+       https://lists.gnu.org/archive/html/emacs-devel/2020-11/msg00232.html
+
+2020-11-07  Andrea Corallo  <akrl@sdf.org>
+
+       Fix non native compiled build
+
+       * lisp/emacs-lisp/advice.el (ad-add-advice): Do not try to
+       install trampolines in vanilla builds.
+
+2020-11-07  Andrea Corallo  <akrl@sdf.org>
+
+       Allow for native compilation qualities to be specified per input file
+
+       * lisp/emacs-lisp/bytecomp.el (byte-native-qualities): Define
+       variable.
+       (byte-compile-from-buffer): Spill compilation qualities.
+       * lisp/emacs-lisp/comp.el (comp-speed, comp-debug): Make
+       them file local variables.
+       (comp-ctxt): Add `speed' and `debug' slots.
+       (comp-spill-speed, comp-spill-lap-function): Make use of these.
+       (comp-spill-lap-function): Spill qualities from
+       `byte-native-qualities'.
+       (comp-limplify-top-level): Do not use `comp-speed' but ctxt value
+       unstead.
+       (comp-final): Do not propagate qualities as they are already
+       in the `comp-ctxt'.
+       (comp--native-compile): Close on `byte-native-qualities'.
+       * src/comp.c (comp_t): Add 'speed' and 'debug' fields.
+       (emit_comment, emit_mvar_rval, emit_static_object)
+       (emit_ctxt_code, Fcomp__init_ctxt): Use these instead of the
+       global variables.
+       (Fcomp__compile_ctxt_to_file): Set comp.speed and comp.debug and
+       use them.
+
+2020-11-07  Eli Zaretskii  <eliz@gnu.org>
+
+       Don't leave lock files after 'replace-buffer-contents'
+
+       * src/editfns.c (Freplace_buffer_contents): Unlock the buffer's
+       file if no changes have been made.  (Bug#44303)
+
+2020-11-07  Andrea Corallo  <akrl@sdf.org>
+
+       Handle type hierarchy in native compiler forward propagation
+
+       * lisp/emacs-lisp/cl-preloaded.el (cl--typeof-types): Add fixnum
+       and bignum.
+       * lisp/emacs-lisp/comp.el (comp-ctxt): Add `supertype-memoize'
+       slot.
+       (comp-supertypes, comp-common-supertype-2)
+       (comp-common-supertype): New functions.
+       (comp-fwprop-insn): Make use of `comp-common-supertype' to
+       identify the common supertype to be propagated.
+
+2020-11-07  Kazuhiro Ito  <kzhr@d1.dion.ne.jp>  (tiny change)
+
+       Fix 'uudecode-decode-region-internal' in multibyte buffers
+
+       * lisp/mail/uudecode.el (uudecode-decode-region-internal): Fix
+       inserting the decoded string into a multibyte buffer.  Optimize by
+       working with characters, not strings.  (Bug#44411)
+
+2020-11-07  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix 'send-string-to-terminal' writing very long strings
+
+       * src/dispnew.c (Fsend_string_to_terminal): Prevent partial writes
+       by blocking SIGIO while 'fwrite' runs.  (Bug#44320)
+
+2020-11-07  Eli Zaretskii  <eliz@gnu.org>
+
+       * lisp/subr.el (read-char-from-minibuffer): Doc fix.  (Bug#44451)
+
+2020-11-07  Earl Hyatt  <ej32u@protonmail.com>
+
+       Fix documentation of 'windmove-swap-states-default-keybindings'
+
+       * doc/emacs/windows.texi (Window Convenience): Fix description of
+       'windmove-swap-states-default-keybindings' and related index
+       entry.  (Bug#44441)
+
+2020-11-07  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix scrolling problems with misc-fixed fonts under Cairo
+
+       * src/ftcrfont.c (ftcrfont_glyph_extents): Avoid rounding up the
+       glyph ascent to a higher value than needed due to floating-point
+       roundoff errors.  (Bug#44284)
+
+2020-11-07  Martin Rudalics  <rudalics@gmx.at>
+
+       Split windows evenly when 'min-margins' parameter was set (Bug#44483)
+
+       * lisp/window.el (split-window): Make new window inherit any
+       'min-margins' parameter from WINDOW so that horizontal splits
+       reliably produce windows of same width (Bug#44483).
+
+2020-11-07  Stefan Kangas  <stefan@marxist.se>
+
+       Delete outdated comment about C rewrite in apropos.el
+
+       Maybe it made sense to rewrite apropos.el in C for speed in 1991, but
+       today the speed increase would not outweigh the maintenance burden.
+
+       * lisp/apropos.el: Delete outdated comment.
+
+2020-11-07  Stefan Kangas  <stefan@marxist.se>
+
+       Add some more tests for keymap.c
+
+       * test/src/keymap-tests.el (keymap-make-keymap)
+       (keymap-make-sparse-keymap, keymap-keymapp)
+       (keymap-keymap-parent, keymap-keymap-set-parent/returns-parent)
+       (keymap-copy-keymap/is-equal, keymap-copy-keymap/is-not-eq)
+       (keymap-lookup-key, keymap-apropos-internal)
+       (keymap-apropos-internal/predicate): New tests.
+       (keymap-tests--make-keymap-test): New defun.
+
+2020-11-06  Mattias Engdegård  <mattiase@acm.org>
+
+       Rectify skip-set argument
+
+       * lisp/gnus/gnus-search.el (gnus-search-query-end-of-input):
+       Remove brackets that don't belong.  Found by relint.
+
+2020-11-06  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix javac message parsing column number off-by-one
+
+       * lisp/progmodes/compile.el (compilation-error-regexp-alist-alist):
+       'javac': Column numbers are 1-based by default; remove subtraction and
+       η-reduce.  Translate regexp to rx (mechanised).
+       * test/lisp/progmodes/compile-tests.el 
(compile-tests--test-regexps-data):
+       Adapt 'javac' test cases to the change.
+
+2020-11-06  Glenn Morris  <rgm@gnu.org>
+
+       Fix --enable-check-lisp-object-type build
+
+       * src/print.c (syms_of_print) <print-integers-as-characters>:
+       Fix type.
+
+2020-11-06  Mattias Engdegård  <mattiase@acm.org>
+
+       Update gdb-mi-tests
+
+       * test/lisp/progmodes/gdb-mi-tests.el (gdb-mi-parse-value):
+       Make test pass after the change in gdb-mi-decode-strings default value.
+
+2020-11-06  Mattias Engdegård  <mattiase@acm.org>
+
+       * lisp/gnus/gnus-search.el (gnus-search-contact-tables): Fix type.
+
+       A more precise type is desirable but at it is now correct ('list' is 
not).
+
+2020-11-06  Mattias Engdegård  <mattiase@acm.org>
+
+       Change the default value of gdb-mi-decode-strings to t (bug#44173)
+
+       This is likely to be a more commonly wanted default value today.
+
+       * lisp/progmodes/gdb-mi.el (gdb-mi-decode-strings): Change default.
+       * doc/emacs/building.texi (Source Buffers): Update manual.
+       * etc/NEWS: Announce.
+
+2020-11-06  Mattias Engdegård  <mattiase@acm.org>
+
+       Reduce integer-output-format to print-integers-as-characters
+
+       The variable now only controls whether characters are printed, not
+       the radix.  Control chars are printed in human-readable syntax
+       only when special escapes such as ?\n are available.  Spaces,
+       formatting and combining chars are excluded (bug#44155).
+       Done in collaboration with Juri Linkov.
+
+       * src/character.c (graphic_base_p):
+       * src/print.c (named_escape): New functions.
+       (print_object): Change semantics as described above.
+       (syms_of_print): Rename integer-output-format.  Update doc string.
+       * doc/lispref/streams.texi (Output Variables):
+       * etc/NEWS:
+       * test/src/print-tests.el (print-integers-as-characters):
+       Rename and update according to new semantics.  The test now passes.
+
+2020-11-06  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Go back to not using custom-push-theme when enabling a theme
+
+       * lisp/custom.el (enable-theme): Relying on custom-push-theme to
+       handle theme settings and prior user settings was a mistake.  The
+       theme settings haven't changed between loading the theme and enabling
+       it, so we don't need all of what custom-push-theme does.  However, we
+       still need to save a user setting outside of Customize, in order to be
+       able to get back to it, so do that in enable-theme itself.
+
+2020-11-06  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of a recent change
+
+       * doc/emacs/mule.texi (Select Input Method): Add an @anchor.
+       * doc/emacs/search.texi (Special Isearch): Add cross-reference and
+       improve wording.
+
+2020-11-06  Juri Linkov  <juri@linkov.net>
+
+       Support transient input methods in Isearch mode (bug#44266)
+
+       * doc/emacs/mule.texi (Select Input Method): Rename
+       transient-input-method to activate-transient-input-method.
+
+       * doc/emacs/search.texi (Special Isearch):
+       Document isearch-transient-input-method.
+
+       * lisp/international/isearch-x.el (isearch-transient-input-method):
+       New function.
+       (isearch-process-search-multibyte-characters):
+       Call 'deactivate-transient-input-method' after 'read-string'.
+
+       * lisp/international/mule-cmds.el (mule-menu-keymap): Remove
+       duplicate menu item 'describe-input-method'.  Add new menu item
+       'activate-transient-input-method'.
+       (default-transient-input-method): Rename from transient-input-method.
+       (current-transient-input-method)
+       (previous-transient-input-method): New buffer-local variables.
+       (deactivate-input-method): Don't add
+       current-transient-input-method to input-method-history.
+       (toggle-input-method): Call deactivate-transient-input-method
+       when current-transient-input-method is non-nil.
+       (activate-transient-input-method): Rename from transient-input-method.
+       (deactivate-transient-input-method): New function with body from
+       renamed function transient-input-method.
+
+       * lisp/isearch.el (isearch-menu-bar-map): Add new menu item
+       'isearch-transient-input-method'.
+       (isearch-mode-map): Bind 'C-x \' to isearch-transient-input-method.
+       (isearch-forward): Add isearch-transient-input-method to docstring.
+       (isearch-message-prefix): Use shorter string for narrowed buffer.
+
+2020-11-06  Stefan Kangas  <stefan@marxist.se>
+
+       Add more tests for where-is-internal
+
+       * test/src/keymap-tests.el (keymap-where-is-internal)
+       (keymap-where-is-internal/firstonly-t)
+       (keymap-where-is-internal/menu-item)
+       (keymap-where-is-internal/advertised-binding)
+       (keymap-where-is-internal/advertised-binding-respect-remap)
+       (keymap-where-is-internal/remap)
+       (keymap-where-is-internal/shadowed): New tests.
+       (keymap-where-is-internal/preferred-modifier-is-a-string):
+       Rename from keymap-where-is-internal-test.
+
+2020-11-06  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Fixes and improvements to gnus-search
+
+       * lisp/gnus/gnus-search.el (gnus-search-default-engines): Change type
+       from a list of two-element lists, to alist. This matches nnir's old
+       option type, and should make transition easier.
+       (nnir-imap-default-search-key): Note that variable is obsolete.
+       (gnus-search-transform-expression): Interpret the "attachment" key as
+       "body" in imap searches. Allow specifying larger/smaller message size
+       values in KB or MB units.
+       (gnus-search-server-to-engine): Fix error in this function, and
+       clarify somewhat.
+
+2020-11-05  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * doc/misc/gnus.texi (Selection Groups): Delete excessive paren
+
+2020-11-05  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Enable/disable buttons, tool bar and menu items in Custom buffer 
(Bug#14398)
+
+       * lisp/cus-edit.el (custom-reset-extended-menu): Keymap menu for the
+       Revert... menu button.
+       (custom-reset-menu): Keep for backward compatibility, but default to
+       nil, so we prefer the keymap menu instead.
+       (custom-reset): Pass the new keymap menu to widget-choose.
+
+       (custom-commands): Add an element to each list item, to manage its
+       enable/disable state.  Add docstring.
+       (custom-command-buttons): New variable, to hold the buttons that act
+       on all options in a Custom buffer.
+       (custom-buffer-create-internal): When creating the command buttons,
+       add the optional :notify function to enable/disable them.  Add the
+       buttons to the new variable custom-command-buttons.
+       (customize-menu-create): Notify the command buttons after creating the
+       Custom buffer, so they are correctly enabled/disabled.
+       (custom-redraw-magic, custom-notify): Notify the command buttons and
+       update the tool bar when changing a widget to the modified state.
+
+2020-11-05  Andrea Corallo  <akrl@sdf.org>
+
+       A native compiler forward propagation fix
+
+       * lisp/emacs-lisp/comp.el (comp-fwprop-insn): Fix `comp-mvar'
+       `const-vld' slot left unset while propagating in phis.
+
+2020-11-05  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Fix coding system in eww-display-pdf
+
+       * lisp/net/eww.el (eww-display-pdf): Make *eww pdf* buffer unibyte
+       before populating it to avoid conversions.  The binding for
+       coding-system-for-write is then no longer necessary, and can be
+       delegated to the viewer invoked by mailcap-view-mime.  Suggested by
+       Stefan Monnier <monnier@iro.umontreal.ca>.  (Bug#44338)
+
+2020-11-05  Philipp Stephani  <phst@google.com>
+
+       * src/minibuf.c (move_minibuffer_onto_frame): Fix comparison
+
+2020-11-05  Alan Mackenzie  <acm@muc.de>
+
+       Allow minibuffer to stay in its original frame.  Tidy up this area.
+
+       * doc/emacs/mini.texi (Basic Minibuffer): Add an entry for
+       minibuffer-follows-selected-frame.
+
+       * doc/lispref/minibuf.texi (Minibuffer Misc): Describe the new 
parameter to
+       minibufferp, LIVE.
+
+       * etc/NEWS: Add an entry describing the new minibuffer strategy.
+
+       * lisp/cus-start.el (minibuffer-prompt-properties--setter): Add an 
entry for
+       minibuffer-follows-selected-frame.
+
+       * lisp/minibuffer.el (minibuffer-message): Check for the current buffer 
being
+       an _active_ minibuffer rather than merely a minibuffer.
+
+       * src/frame.c (do_switch_frame): Call move_minibuffer_onto_frame.
+
+       * src/lisp.h (Top level): Add prototypes for move_minibuffer_onto_frame 
and
+       is_minibuffer.
+
+       * src/minibuf.c (minibuf_follows_frame): New function which ignores 
local and
+       let-bound values of minibuffer-follows-selected-frame.
+       (choose_minibuf_frame): Reformulate this function to reuse a minibuffer 
window
+       where possible, and to ensure no other frame has its minibuffer 
current, but
+       only when `minibuffer-follows-selected-frame'.
+       (move_minibuffer_onto_frame): New function.
+       (live_minibuffer_p): New function.
+       (Fminibufferp): Add a new &optional parameter LIVE.  Reformulate, 
possibly
+       calling live_minibuffer_p.
+       (read_minibuf): move the incrementation of minibuf_level to before the 
call of
+       choose_minibuf_frame.  Empty the miniwindows of frames without an active
+       minibuffer, rather than of all but the current frame.
+       (is_minibuffer): New function.
+       (read_minibuf_unwind): Note the miniwindow being restored and resize 
all other
+       miniwindows to zero size.
+       (minibuffer-follows-selected-frame): New configuration variable.
+
+       * src/window.c (candidate_window_p): In some scenarios, check the 
miniwindow
+       holds an active minibuffer.
+
+       * src/xdisp.c (get_window_cursor_type): Suppress the cursor for 
non-active
+       miniwindows, regardless of minibuf_level.
+
+2020-11-05  Eli Zaretskii  <eliz@gnu.org>
+
+       * src/w32fns.c (Fw32_register_hot_key): Doc fix.  (Bug#44456)
+
+2020-11-05  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Improve eww support for externally viewed PDFs
+
+       The *eww pdf* buffer is only needed when viewing PDFs within Emacs,
+       e.g., with doc-view-mode.  External PDF viewers are called with a
+       temporary file, so the buffer is not needed in that case.  What's
+       more, mailcap-view-mime erased the buffer and left it in
+       fundamental-mode until now, so the user was left staring at a
+       useless, empty buffer.  To make things even worse, external viewers
+       were invoked synchronously until now, so the user could not browse
+       the PDF file and use Emacs simultaneously.
+
+       * lisp/net/mailcap.el (mailcap--async-shell): New function.
+       (mailcap-view-mime): Use it to invoke external viewers
+       asynchronously.  Mention erasure of current buffer in that case in
+       docstring.  Add a period between the temporary file name and its
+       extension.
+
+       * lisp/net/eww.el (eww-display-pdf): Simplify using
+       insert-buffer-substring.  Fix coding-system-for-write for a stream
+       of raw bytes.  Pop to *eww pdf* buffer only if it is used for
+       displaying a document; otherwise kill it.  (bug#44338)
+
+2020-11-05  Michael Albinus  <michael.albinus@gmx.de>
+
+       Still fixes for Tramp directory-files-*
+
+       * lisp/net/tramp.el (tramp-handle-directory-files):
+       * lisp/net/tramp-adb.el
+       (tramp-adb-handle-directory-files-and-attributes): Fix COUNT.
+
+       * lisp/net/tramp-crypt.el (tramp-crypt-handle-directory-files):
+       Implement COUNT.
+
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-dbus-byte-array-to-string):
+       * lisp/net/tramp-integration.el (tramp-eshell-directory-change):
+       Use `nbutlast'.
+
+       * lisp/net/tramp-rclone.el (tramp-rclone-handle-delete-directory)
+       (tramp-rclone-handle-delete-file): Reorder cache flushing.
+       (tramp-rclone-handle-directory-files):
+       Use `tramp-compat-directory-files'.
+
+       * lisp/net/tramp-sh.el (tramp-sh-handle-directory-files-and-attributes):
+       Fix NOSORT and COUNT.
+
+       * lisp/net/tramp-smb.el (tramp-smb-handle-directory-files): Fix NOSORT.
+
+       * test/lisp/net/tramp-tests.el (tramp--test-share-p): New defun.
+       (tramp-test05-expand-file-name-relative): Use it.
+       (tramp-test16-directory-files)
+       (tramp-test19-directory-files-and-attributes): Strengthen test.
+       (tramp-test20-file-modes): Simplify check.
+
+2020-11-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Let pdf-view-mode take precedence over doc-view-mode
+
+       * lisp/net/mailcap.el (mailcap-mime-data): Note the order, and let
+       pdf-view-mode take precedence, since it's an optional package
+       (bug#44338).
+
+2020-11-05  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Sync biblatex entries and fields with v3.15
+
+       * lisp/textmodes/bibtex.el (bibtex-BibTeX-entry-alist): Fix
+       abbreviation of PhD.
+       (bibtex-biblatex-entry-alist, bibtex-biblatex-field-alist): Sync
+       standard entry and field types with those described in the biblatex
+       v3.15 manual of 2020-08-19 (bug#44322).
+
+2020-11-04  Stephen Berman  <stephen.berman@gmx.net>
+
+       Improve display of tabulated list header line labels (bug#44068)
+
+       * lisp/emacs-lisp/tabulated-list.el (tabulated-list-init-header):
+       Ensure sort indicator appears after the label of any selected
+       sortable column that is wide enough and enable label truncation
+       when narrowing a column.
+
+       * lisp/emacs-lisp/timer-list.el (timer-list-mode): Improve column
+       alignment.
+       (timer-list--function-predicate): Correct typo in doc string.
+
+2020-11-04  Eli Zaretskii  <eliz@gnu.org>
+
+       Prevent redisplay from moving point behind user's back
+
+       * src/bidi.c (bidi_at_paragraph_end, bidi_find_paragraph_start):
+       Bind inhibit-quit to a non-nil value around calls to
+       fast_looking_at, to prevent breaking out of redisplay_window,
+       which temporarily moves point in buffers shown in non-selected
+       windows.  (Bug#44448)
+
+2020-11-04  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/term.c (handle_one_term_event): Simplify.
+
+       Remove the `hold_quit` argument which was never used.
+       Streamline the control flow.
+       Thanks to Jared Finder <jared@finder.org> for pointing it out.
+
+       * src/keyboard.c (tty_read_avail_input): Simplify accordingly.
+
+2020-11-04  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Avoid use of eieio-oset-default
+
+       * lisp/gnus/gnus-search.el: Replace with an :initform tag on the slot
+       definition. `symbol-value' is necessary, otherwise the defclass macro
+       will treat the option as a quoted symbol.
+
+2020-11-04  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/lisp-mode.el: Fix missing highlight of "hidden" 
string arg
+
+       * lisp/emacs-lisp/lisp-mode.el (lisp-el-font-lock-keywords-2)
+       (lisp-cl-font-lock-keywords-2): Highlight "hidden arg" even if it
+       already has another face.
+
+2020-11-04  Manuel Uberti  <manuel.uberti@inventati.org>  (tiny change)
+
+       * lisp/progmodes/project.el (project--files-in-directory): Fix 
formatting
+
+2020-11-04  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in mule-charsets.el
+
+       * admin/charsets/mule-charsets.el: Use lexical-binding.
+       (mule-charsets-header): Rename from 'header' to silence byte-compiler.
+
+2020-11-04  Reuben Thomas  <rrt@sc3d.org>
+
+       Remove unused variable in ispell.el (thanks, Stefan Kangas)
+
+       * lisp/textmodes/ispell.el (ispell-check-version): Remove unused
+       variable `speller'.
+
+2020-11-04  Stefan Kangas  <stefan@marxist.se>
+
+       Fix warnings in url-irc.el
+
+       * lisp/url/url-irc.el (zenirc-server-alist, zenirc-buffer-name):
+       Declare to fix warnings.
+       (url-irc-rcirc): Silence warning by adding missing password argument
+       to rcirc-connect.
+
+2020-11-04  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/obsolete/nnir.el: Add "Obsolete-since" header.
+
+       * lisp/cedet/srecode.el: Use lexical-binding.
+
+2020-11-04  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Fix misuses of `make-local-variable` on hooks
+
+       * lisp/vc/smerge-mode.el (smerge-ediff):
+       * lisp/progmodes/python.el (python-pdbtrack-setup-tracking):
+       * lisp/net/tramp-smb.el (tramp-smb-call-winexe):
+       * lisp/net/secrets.el (secrets-mode):
+       * lisp/mail/rmail.el (rmail-variables):
+       * lisp/ielm.el (inferior-emacs-lisp-mode):
+       * lisp/erc/erc-log.el (erc-log-setup-logging): Use `add-hook`.
+
+       * lisp/eshell/em-unix.el (eshell/diff):
+       * lisp/eshell/em-hist.el (eshell-hist-initialize): Don't
+       `make-local-variable` on hooks.
+
+2020-11-04  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Remove gmane search engine
+
+       Remove the gnus-search-gmane class and all associated methods.  If
+       search functionality is ever resurrected, then revert this commit.
+
+       * lisp/gnus/gnus-search.el: Delete code, and remove from default value
+       of `gnus-search-default-engines'.
+
+2020-11-04  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Move nnir.el to lisp/obsolete
+
+       * lisp/obsolete/nnir.el: This is no longer used, but users might still
+       be requiring it.
+
+2020-11-04  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       New gnus-search library
+
+       This library provides a fundamental reworking of the search
+       functionality previously found in nnir.el.  It uses class-based search
+       engines to interface with external searching facilities, and a parsed
+       search query syntax that can search multiple engines.
+
+       * lisp/gnus/gnus-search.el: New library containing search
+       functionality for Gnus.
+       * doc/misc/gnus.texi: Document.
+       * lisp/gnus/gnus-group.el (gnus-group-make-search-group,
+       gnus-group-read-ephemeral-search-group): Remove references to nnir,
+       change meaning of prefix argument, change values of nnselect-function
+       and nnselect-args.
+       * lisp/gnus/nnselect.el: Replace references to nnir
+       (nnselect-request-article): Use gnus-search functions, and search
+       criteria.
+       (nnselect-request-thread, nnselect-search-thread): Use gnus-search
+       thread search.
+       (gnus-summary-make-search-group): Switch to use gnus-search function
+       and arguments.
+       * test/lisp/gnus/gnus-search-tests.el: Tests for new
+       functionality.
+
+2020-11-04  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/tcl.el: Use lexical-binding
+
+       Remove redundant `:group` args.
+
+2020-11-03  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix last change
+
+       * lisp/mwheel.el (mwheel-scroll): Don't use passive tense in doc
+       string.
+
+2020-11-03  Juri Linkov  <juri@linkov.net>
+
+       Horizontal mouse wheel scrolling amount (bug#43568)
+
+       * lisp/mwheel.el (mouse-wheel-scroll-amount-horizontal): New defcustom.
+       (mwheel-scroll): Use it.
+
+       * doc/emacs/frames.texi (Mouse Commands): Update doc about horizontal
+       scrolling step.
+
+2020-11-03  Michael Albinus  <michael.albinus@gmx.de>
+
+       Some Tramp fixes for directory-files-* and delete-*
+
+       * lisp/files.el (delete-directory): Simplify check for trash.
+
+       * lisp/net/ange-ftp.el (ange-ftp-delete-file): Implement TRASH.
+
+       * lisp/net/tramp-compat.el (tramp-compat-directory-files)
+       (tramp-compat-directory-files-and-attributes)
+       (tramp-compat-directory-empty-p): New defaliases.
+
+       * lisp/net/tramp.el (tramp-handle-directory-files-and-attributes)
+       (tramp-skeleton-delete-directory):
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-handle-delete-directory): Use them.
+
+       * lisp/net/tramp-sh.el (tramp-sh-handle-directory-files-and-attributes):
+       Implement COUNT.
+
+       * test/lisp/net/tramp-tests.el (tramp-test14-delete-directory):
+       Do not run trash test for ange-ftp.
+       (tramp-test16-directory-files)
+       (tramp-test19-directory-files-and-attributes): Check COUNT argument.
+
+2020-11-03  Reuben Thomas  <rrt@sc3d.org>
+
+       Factor out some common code in ispell.el
+
+       * lisp/textmodes/ispell.el (ispell-with-safe-default-directory): Add
+         macro.
+         (ispell-call-process, ispell-call-process-region): Use it.
+
+2020-11-03  Reuben Thomas  <rrt@sc3d.org>
+
+       Simplify ispell-check-version’s use of -vv flag
+
+       * lisp/textmodes/ispell.el (ispell-check-version): All supported spell
+       checker programs accept -vv, including aspell for many years, so use
+       it.
+
+2020-11-03  Harald Jörg  <haj@posteo.de>
+
+       cperl-mode: Fix indentation for Emacs 26
+
+       * lisp/progmodes/cperl-mode.el (cperl-mode): Add a fix
+       which is only required for Emacs versions older than 27.
+
+       * test/lisp/progmodes/cperl-mode-tests.el (cperl-bug30393):
+       Add a test to verify correct indentation (bug#30393).
+
+2020-11-03  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Fix customizing user options of type face
+
+       * lisp/cus-edit.el (face): Move the %f escape after the tag, because
+       otherwise customizing a face user option doesn't work:
+       custom-variable-value-create thinks that everything up until the first
+       ":" is part of the tag, and the item widget doesn't know how to handle
+       the %f escape.
+
+2020-11-03  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in some url-*.el files
+
+       * lisp/url/url-dired.el:
+       * lisp/url/url-ftp.el:
+       * lisp/url/url-irc.el: Use lexical-binding.
+
+2020-11-03  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in solitaire.el
+
+       * lisp/play/solitaire.el: Use lexical-binding.  Remove redundant
+       :group args.
+
+2020-11-03  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in some of emulation/edt*.el
+
+       * lisp/emulation/edt-vt100.el:
+       * lisp/emulation/edt-pc.el:
+       * lisp/emulation/edt-lk201.el: Use lexical-binding.
+
+2020-11-03  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in pcmpl-rpm.el
+
+       * lisp/pcmpl-rpm.el: Use lexical-binding.  Remove redundant :group
+       args.
+       (pcmpl-rpm-packages): Quote function symbol as such.
+
+2020-11-03  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in pcmpl-cvs.el
+
+       * lisp/pcmpl-cvs.el: Use lexical-binding.
+       (executable): Remove unnecessary require.
+       (pcmpl-cvs-binary): Remove redundant :group arg.
+       (pcmpl-cvs-tags): Quote function symbol as such.
+
+2020-11-03  Stefan Kangas  <stefan@marxist.se>
+
+       Fix exiting the finder-commentary buffer
+
+       * lisp/finder.el (finder-exit): Fix exiting the finder-commentary
+       buffer.  (Bug#44384)
+       (finder-buffer): New defconst.
+       (finder-list-keywords): Use above new defconst.
+
+2020-11-03  Harald Jörg  <haj@posteo.de>
+
+       cperl-mode: Skip a test for older Emacsen (preparing for ELPA)
+
+       * test/lisp/progmodes/cperl-mode-tests.el (cperl-bug37127):
+       Skip this test for older Emacsen.  The bug has been fixed
+       in Emacs, but outside of CPerl mode, and therefore will not
+       be available for older versions via ELPA.
+
+2020-11-03  Stefan Kangas  <stefan@marxist.se>
+
+       Improve ert-resource-directory docstring
+
+       * lisp/emacs-lisp/ert-x.el (ert-resource-directory): Improve
+       docstring.
+
+2020-11-02  Reuben Thomas  <rrt@sc3d.org>
+
+       Fix previous patch to ispell.el
+
+       * lisp/textmodes/ispell.el (ispell--call-enchant-lsmod):
+       with-current-buffer and with-output-to-string need to be the other
+       way around.
+
+2020-11-02  Reuben Thomas  <rrt@sc3d.org>
+
+       Fix previous code change to `ispell--call-enchant-lsmod'
+
+       * lisp/textmodes/ispell.el (ispell--call-enchant-lsmod): Restore the
+       use of with-current-buffer, to avoid enchant-lsmod’s output being
+       dumped into the current buffer.
+
+2020-11-02  Eli Zaretskii  <eliz@gnu.org>
+
+       Explain last change
+
+       * lisp/textmodes/ispell.el (ispell--call-enchant-lsmod): Explain
+       the workaround with discarding stderr.  (Bug#44318)
+
+2020-11-02  Reuben Thomas  <rrt@sc3d.org>
+
+       Make ispell.el ignore warnings from enchant-lsmod (closes #44318)
+
+       * lisp/textmodes/ispell.el (ispell--call-enchant-lsmod): Don’t capture
+         stderr. Also remove unnecessary with-current-buffer wrapper.
+
+2020-11-02  Mattias Engdegård  <mattiase@acm.org>
+
+       Add missing argument to directory_files_internal calls
+
+       * src/kqueue.c (kqueue_compare_dir_list, Fkqueue_add_watch):
+       Pass the new seventh argument.
+
+2020-11-02  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix a recent change in dired.c
+
+       * src/dired.c (directory_files_internal): Fix type of integer
+       variables to avoid overflow in 32-bit builds --with-wide-int.
+
+2020-11-02  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of a recent commit
+
+       * lisp/international/mule-cmds.el (transient-input-method): Doc
+       fix.  Add :version tag.
+       (transient-input-method): Doc fix.
+
+       * etc/NEWS:
+       * doc/emacs/mule.texi (Select Input Method): Fix wording of the
+       last change.
+
+2020-11-02  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       4e6104ea0b ; * src/xdisp.c (display_string): Fix a typo in a comment.
+       7162228815 Improve indexing of check-declare
+       d218b28ab5 ; * lisp/autoinsert.el (auto-insert-alist): Fix texinfo URL.
+
+2020-11-02  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       1fc9de4b81 Improve reproducibility of generated -pkg.el files
+       da6234e2df Make sure pixel sizes are zero when setting window size fo...
+       2d15296db1 Fix failure of 'emacs --daemon' on Cygwin
+       8abce5b0c6 CC Mode: Only recognize foo (*bar) as a function pointer w...
+       85d1d8d768 Fix NEWS entry for fix of Bug#44080
+       2443b15a91 * src/buffer.c (syms_of_buffer) <fill-column>: Improve doc...
+
+       # Conflicts:
+       #       etc/NEWS
+
+2020-11-02  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix some glitches in recent directory-files-* changes
+
+       * doc/lispref/files.texi (Contents of Directories):
+       Fix description of directory-files, directory-empty-p and
+       directory-files-and-attributes.
+
+       * etc/NEWS: Fix entry for directory-files-and-attributes.  Fix typos.
+
+       * lisp/dired.el (directory-empty-p): Move function from here ...
+
+       * lisp/files.el (directory-empty-p): ... to here.
+
+       * lisp/net/ange-ftp.el (ange-ftp-directory-files): Call `nreverse' 
later.
+
+       * lisp/net/tramp.el (tramp-handle-directory-files):
+       * lisp/net/tramp-adb.el
+       (tramp-adb-handle-directory-files-and-attributes): Do not call
+       `nreverse'.
+
+       * src/dired.c (Fdirectory_files)
+       (Fdirectory_files_and_attributes): Fix docstrings.
+
+       * test/src/dired-tests.el: Removed.  Tests moved to
+       test/lisp/dired-tests.el.
+
+       * test/lisp/dired-tests.el (dired-test-bug27899): Tag it :unstable.
+       (dired-test-directory-files)
+       (dired-test-directory-files-and-attributes): New tests.
+
+2020-11-02  João Távora  <joaotavora@gmail.com>
+
+       Fix Elisp's elisp--documentation-one-liner (bug#43609)
+
+       To be backward compatible, this function must return nil when there is
+       a symbol at point but no documentation for it.  Before this fixed it
+       returned the string "<symbol-name>: nil".
+
+       * lisp/progmodes/elisp-mode.el (elisp--documentation-one-liner):
+       Check callback actually produced non-nil doc.
+
+2020-11-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix mouse-1 on [Show] buttons in the *Help* buffer
+
+       * lisp/descr-text.el (describe-text-sexp): Add a `follow-link' so
+       that the [Show] buttons work correctly with mouse-1 (bug#44340).
+
+2020-11-02  Yasuhiro KIMURA  <yasu@utahime.org>  (tiny change)
+
+       Recover the contents of the schemas.xml file
+
+       * etc/schema/schemas.xml: Recover the file, which was apparently
+       (mostly) removed by mistake by commit 165f738382 (bug#42851).
+
+2020-11-02  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Document that the :match function for a widget takes an external value
+
+       * doc/misc/widget.texi (Basic Types): Document what an external value
+       is.  Document that a :match function expects the value to be in the
+       external format.  (Bug#8717)
+
+2020-11-02  Stephen Berman  <Stephen.Berman@gmx.net>
+
+       Don't render XML declaration of an HTML document (bug#44348)
+
+       * lisp/net/eww.el (eww--preprocess-html): Prevent converting the
+       left angle bracket in the sequence "<?" to an HTML entity.
+
+2020-11-02  Arthur Miller  <arthur.miller@live.com>
+
+       Add directory-empty-p and new argument COUNT for directory-files-*
+
+       * doc/lispref/files.texi (Contents of Directories): Mention COUNT
+       argument of directory-files.  Add directory-empty-p.
+
+       * etc/NEWS: Mention directory-empty-p and directory-files changes.
+
+       * lisp/dired.el (directory-empty-p): New defun.
+
+       * lisp/net/ange-ftp.el (ange-ftp-directory-files)
+       (ange-ftp-directory-files-and-attributes):
+       * lisp/net/tramp.el (tramp-handle-directory-files)
+       (tramp-handle-directory-files-and-attributes):
+       * lisp/net/tramp-adb.el
+       (tramp-adb-handle-directory-files-and-attributes):
+       * lisp/net/tramp-rclone.el (tramp-rclone-handle-directory-files):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-directory-files-and-attributes):
+       * lisp/net/tramp-smb.el (tramp-smb-handle-directory-files): Add new 
COUNT
+       argument.
+
+       * src/dired.c (directory_files_internal): Implement new
+       RETURN_COUNT argument.
+       (Fdirectory_files, Fdirectory_files_and_attributes): Add new COUNT
+       argument.
+
+       * src/lisp.h (directory_files_internal): Add RETURN_COUNT to 
declaration.
+
+       * src/sysdep.c (list_system_processes): Add Qnil to
+       directory_files_internal call.
+
+       * test/src/dired-tests.el (directory-files-and-attributes-tests):
+       New file.
+
+2020-11-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Partially revert previous define-minor-mode change
+
+       * lisp/emacs-lisp/easy-mmode.el (easy-mmode--arg-docstring):
+       Only document the values we want to support, not the ones we
+       actually support.
+       (define-minor-mode): Partially revert to previous behaviour.
+
+2020-11-01  Stefan Kangas  <stefan@marxist.se>
+
+       Fix mistake in Lisp conversion of describe-map-tree
+
+       * lisp/help.el (describe-map-tree): Fix mistake in conversion to Lisp
+       from the C function describe_map_tree; make the condition match the
+       now removed C code.  (Bug#44360)
+
+2020-11-01  Juri Linkov  <juri@linkov.net>
+
+       Transient input methods bound to 'C-x \' (bug#44266)
+
+       * lisp/international/mule-cmds.el (ctl-x-map): Bind 'C-x \' to
+       'transient-input-method'.
+       (input-method-function): New defcustom.
+       (transient-input-method): New command.
+
+       * doc/emacs/mule.texi (Select Input Method): Document 
transient-input-method.
+
+2020-11-01  Juri Linkov  <juri@linkov.net>
+
+       * lisp/leim/quail/compose.el: New input method (bug#44267).
+
+2020-11-01  Juri Linkov  <juri@linkov.net>
+
+       Show nobreak-space face for more blank characters in describe-char.
+
+       * lisp/descr-text.el (describe-char): Handle more non-ASCII whitespace
+       characters added in f018cffca0098ad1b82c51730a6d6cf146e3c488 (bug#44236)
+
+2020-11-01  Stefan Kangas  <stefan@marxist.se>
+
+       Improve indexing of check-declare
+
+       * doc/lispref/functions.texi (Declaring Functions): Improve indexing.
+
+2020-11-01  Stefan Kangas  <stefan@marxist.se>
+
+       Don't auto-insert "@c file ends here" in .texi files
+
+       * lisp/autoinsert.el (auto-insert-alist): Don't insert "@c file ends
+       here" at the end of new .texi files.
+
+2020-11-01  Stefan Kangas  <stefan@marxist.se>
+
+       Don't bind standard-output in substitute-command-keys
+
+       This fixes a regression with regards to the old C version of
+       substitute-command-keys.
+
+       * lisp/help.el (substitute-command-keys): Don't bind standard-output.
+       See Bug#39149.
+       * test/lisp/help-tests.el
+       (help-tests--was-in-buffer): New variable.
+       (help-substitute-command-keys/menu-filter-in-correct-buffer): New
+       test.
+
+2020-11-01  Glenn Morris  <rgm@gnu.org>
+
+       * lisp/emacs-lisp/easy-mmode.el (easy-mmode--arg-docstring): Doc typo.
+
+2020-11-01  Mattias Engdegård  <mattiase@acm.org>
+
+       Add missing side-effect-free and error-free properties
+
+       Any function that is pure is also side-effect-free and some are also
+       error-free.  Right now these have to be declared separately.
+
+       * lisp/emacs-lisp/byte-opt.el (side-effect-free-fns): Add
+       bool-vector-count-consecutive, bool-vector-count-population,
+       bool-vector-subsetp, copysign, isnan, lax-plist-get, ldexp, memql,
+       regexp-opt and string-to-syntax.
+       (side-effect-and-error-free-fns): Add type-of.
+       * lisp/subr.el (kbd, string-replace): Declare side-effect-free.
+
+2020-11-01  Mattias Engdegård  <mattiase@acm.org>
+
+       * lisp/emacs-lisp/byte-opt.el (pure-fns): Fix typos.
+
+2020-11-01  Stefan Kangas  <stefan@marxist.se>
+
+       Insert describe-map-tree header into original buffer
+
+       * lisp/help.el (describe-map-tree): Insert header into the original
+       buffer, not in standard-output.
+       * test/src/keymap-tests.el
+       (describe-buffer-bindings/header-in-current-buffer)
+       (describe-buffer-bindings/returns-nil): New tests.
+       Ref: https://debbugs.gnu.org/39149#31
+
+2020-11-01  Andrea Corallo  <akrl@sdf.org>
+
+       Fix 'comp-call-optim pass' for anonymous lambdas
+
+       * lisp/emacs-lisp/comp.el (comp-call-optim-func): Remove anonymous
+       lambdas gate.
+       (comp-call-optim-form-call): Add the correct missing condition.
+
+2020-11-01  Andrea Corallo  <akrl@sdf.org>
+
+       * test/src/comp-tests.el (compile-forms): Fix missing lexical binding.
+
+2020-11-01  Andrea Corallo  <akrl@sdf.org>
+
+       Add some 'cond-rw' pass related tests
+
+       * test/src/comp-tests.el (comp-tests-cond-rw-checked-function):
+       Declare var.
+       (comp-tests-cond-rw-checker-val): New function.
+       (comp-tests-cond-rw-checker-type): Declare var.
+       (comp-tests-cond-rw-checker-type): New function.
+       (comp-tests-cond-rw-0-var): Declare var.
+       (comp-tests-cond-rw-0, comp-tests-cond-rw-1, comp-tests-cond-rw-2)
+       (comp-tests-cond-rw-3, comp-tests-cond-rw-4)
+       (comp-tests-cond-rw-5): New testcases.
+
+2020-11-01  Andrea Corallo  <akrl@sdf.org>
+
+       Add new cond-rw pass to have forward propagation track cond branches
+
+       Add a new pass to rewrite conditional branches.  This is introducing
+       and placing a new LIMPLE operator 'assume' in use by fwprop to
+       propagate conditional branch test information on target basic blocks.
+
+       * lisp/emacs-lisp/comp.el (comp-passes): Add `comp-cond-rw'.
+       (comp-limple-assignments): Add `assume' operator.
+       (comp-emit-assume, comp-cond-rw-target-slot, comp-cond-rw-func)
+       (comp-cond-rw): Add new functions.
+       (comp-fwprop-insn): Update to pattern match `assume' insns.
+       * src/comp.c (emit_limple_insn): Add for `assume'.
+       (syms_of_comp): Define 'Qassume' symbol.
+
+2020-11-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make minor mode ARG work as documented
+
+       * lisp/emacs-lisp/easy-mmode.el (easy-mmode--arg-docstring):
+       Clarify when minor modes are switched on/off when called from lisp
+       (bug#44341).
+       (define-minor-mode): Make calls from Lisp switch the mode on/off
+       as documented.
+
+2020-11-01  Andrea Corallo  <akrl@sdf.org>
+
+       Rework some native compiler test infrastructure
+
+       * test/src/comp-tests.el (comp-tests-map-checker): New function
+       returning a list holding checker results.
+       (comp-tests-tco-checker, comp-tests-fw-prop-checker-1)
+       (comp-tests-pure-checker-1, comp-tests-pure-checker-2): Make use
+       of `comp-tests-map-checker'.
+
+2020-11-01  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Fix saving a face setting with Customize
+
+       * lisp/cus-edit.el (custom-face-save): Make sure we back up into the
+       :shown-value property what the user has edited so far, if we are going
+       to recreate the custom-face widget.  (Bug#44331)
+
+2020-11-01  Yasuhiro KIMURA  <yasu@utahime.org>  (tiny change)
+
+       Recover the contents of the schemas.xml file
+
+       * etc/schema/schemas.xml: Recover the file, which was apparently
+       (mostly) removed by mistake by commit 165f738382 (bug#42851).
+
+2020-11-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Doc string clarification for cl-some
+
+       * lisp/emacs-lisp/cl-extra.el (cl-some): Clarify the return value
+       (bug#44330).
+
+2020-11-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       custom-theme-set-variables more resilient against removed libraries
+
+       * lisp/custom.el (custom-theme-set-variables): Don't bug out on
+         settings that require a library that has been removed (bug#38843).
+
+2020-11-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention non-ASCII C-c LETTER bindings in the lispref manual
+
+       * doc/lispref/tips.texi (Key Binding Conventions): Mention
+       non-ASCII C-c LETTER (bug#15917).
+
+2020-11-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention the C-c LETTER keybinding convention
+
+       * doc/emacs/custom.texi (Keymaps): Reintroduce the text about C-c
+       LETTER (bug#15917), and clarify.
+
+2020-11-01  Michael Albinus  <michael.albinus@gmx.de>
+
+       Trash remote files to local trash  (Bug#44216)
+
+       * doc/misc/tramp.texi (Frequently Asked Questions): Add trashing.
+
+       * lisp/net/tramp-adb.el (tramp-adb-handle-delete-directory)
+       (tramp-adb-handle-delete-file):
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-handle-delete-directory)
+       (tramp-gvfs-handle-delete-file):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-delete-directory)
+       (tramp-sh-handle-delete-file):
+       * lisp/net/tramp-smb.el (tramp-smb-handle-delete-directory)
+       (tramp-smb-handle-delete-file):
+       * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-delete-directory)
+       (tramp-sudoedit-handle-delete-file): Implement local trash.  (Bug#44216)
+
+       * lisp/net/tramp-crypt.el (tramp-crypt-handle-delete-directory)
+       (tramp-crypt-handle-delete-file): Do not trash.
+
+       * lisp/net/tramp.el (tramp-skeleton-delete-directory): New defmacro.
+
+       * test/lisp/net/tramp-tests.el (tramp-test07-file-exists-p)
+       (tramp-test14-delete-directory): Add trashing.
+
+2020-11-01  Michael Albinus  <michael.albinus@gmx.de>
+
+       * etc/NEWS: Add trashing of remote files.  Fix typos.
+
+2020-11-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix error message in feedmail
+
+       * lisp/mail/feedmail.el (feedmail-buffer-to-smtpmail): Remove
+       superfluous %s in insert string
+
+2020-11-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix a segfault in the new svg code
+
+       * src/image.c (svg_load_image): Don't pass in a NULL for the
+       logical rect, because that will sometimes segfault.
+
+2020-10-31  Juri Linkov  <juri@linkov.net>
+
+       New variable integer-output-format to print integers as characters 
(bug#44155)
+
+       * doc/lispref/streams.texi (Output Variables): Add 
integer-output-format.
+
+       * src/print.c (print_object): In case of Lisp_Int, print integers
+       as characters when Vinteger_output_format is Qt, and in hex format
+       when Vinteger_output_format is 16.
+       (Vinteger_output_format): New variable.
+
+       * test/src/print-tests.el (print-integer-output-format): New test.
+
+2020-10-31  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Give the scroll-bar face a non-trivial spec
+
+       * lisp/faces.el (scroll-bar): Give it a non-trivial spec, so when
+       resetting it to its face-defface-spec, we effectively reset it.
+       (Bug#13476)
+
+2020-10-31  Juri Linkov  <juri@linkov.net>
+
+       Improve goto-line in regard to narrowed buffers (bug#44294)
+
+       * lisp/simple.el (goto-line): Rewrite to first find the position
+       of the line where to go, then later don't widen the buffer
+       when the found position is still inside narrowed part of buffer.
+
+       * lisp/isearch.el (isearch-message-prefix): Warn about narrowed buffer
+       in case of no more matches found.
+
+2020-10-31  Juri Linkov  <juri@linkov.net>
+
+       Reimplement commit 46b3db5579e57b9daf16667914205adc99d3f104 (bug#44294)
+
+       * lisp/progmodes/etags.el (etags-goto-tag-location): Revert change from
+       commit 46b3db5579e57b9daf16667914205adc99d3f104.
+       (xref-location-marker): Use the same change as was made in 
elisp-mode.el in
+       commit 46b3db5579e57b9daf16667914205adc99d3f104 to widen before going
+       to the found position.
+
+2020-10-31  Stefan Kangas  <stefan@marxist.se>
+
+       * test/README: Document TEST_BACKTRACE_LINE_LENGTH.
+
+2020-10-31  Amin Bandali  <bandali@gnu.org>
+
+       Replace irc.freenode.net with chat.freenode.net
+
+       chat.freenode.net has been the preferred address for connecting to the
+       freenode IRC network for years now.  Replace the occurrences of
+       irc.freenode.net with chat.freenode.net.
+
+2020-10-31  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix eshell glob modifiers
+
+       Modified globbing such as *.txt(W) for all world-writable files ending
+       in .txt apparently never worked correctly.
+
+       * lisp/eshell/em-pred.el (eshell-predicate-alist): Use correct
+       elisp syntax for octal constants.
+       (eshell-pred-file-mode): Return a boolean, not a number.
+
+2020-10-31  Andreas Schwab  <schwab@linux-m68k.org>
+
+       wdired: fix error handling of set-file-modes
+
+       * lisp/wdired.el (wdired-perms-to-number): Return decimal number.
+       (wdired-do-perm-changes): Handle error from set-file-modes.
+       (wdired-finish-edit): Remove `rename' from error message.
+       (Bug#44343)
+
+2020-10-31  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-10-31  Eli Zaretskii  <eliz@gnu.org>
+
+       * etc/HELLO: Enlarge tab-width to account for "tofu".
+
+2020-10-31  Mattias Engdegård  <mattiase@acm.org>
+
+       'assoc' is not side-effect-free; constprop its pure subset
+
+       Since a supplied test function can do anything, assoc is not
+       side-effect-free (bug#44018).  However, with only two arguments it is
+       pure and should be optimised accordingly.
+
+       * lisp/emacs-lisp/byte-opt.el (side-effect-free-fns): Remove 'assoc'.
+       (byte-optimize-assoc): Constant-propagate through 2-arg assoc calls.
+       * test/lisp/emacs-lisp/bytecomp-tests.el
+       (byte-opt-testsuite-arith-data): Add test cases.
+
+2020-10-31  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve support for displaying Javanese script
+
+       * lisp/international/fontset.el (setup-default-fontset)
+       (script-representative-chars): Add Javanese entries.
+
+       * etc/HELLO: Fix the Javanese text.  See
+       https://omniglot.com/language/phrases/javanese.php for the
+       source.
+
+2020-10-31  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/xdisp.c (syms_of_xdisp) <"scroll-minibuffer-conservatively">: New 
var
+
+       Fix bug#44070, which causes the minibuffer display to jump upon minor 
edit
+
+       (redisplay_window): Obey it.
+       * lisp/simple.el (end-of-buffer): Obey it.
+
+       * test/src/xdisp-tests.el (xdisp-tests--in-minibuffer): New macro,
+       extracted from `xdisp-tests--minibuffer-resizing`.
+       (xdisp-tests--minibuffer-resizing): Use it.
+       (xdisp-tests--minibuffer-scroll): New test.
+
+2020-10-31  Mattias Engdegård  <mattiase@acm.org>
+
+       Trim and explain set of safe forms for 'unsafep' (bug#44018)
+
+       * lisp/emacs-lisp/unsafep.el:
+       Add comment explaining the policy for which forms can be considered
+       'safe' in the sense of unsafep.  Remove ones that didn't make the cut:
+
+        play-sound-file (large attack surface)
+        catch, throw (alter program flow, inject data)
+        replace-regexp-in-string (execute arbitrary code)
+        error, signal (deceptive messages)
+
+       * test/lisp/emacs-lisp/unsafep-tests.el (unsafep-tests--unsafe):
+       Add test cases.
+       * etc/NEWS: Announce the change.
+
+2020-10-31  Mattias Engdegård  <mattiase@acm.org>
+
+       Parse GDB/MI results directly instead of going via JSON (bug#44173)
+
+       Translating GDB/MI into JSON is an unnecessary and fragile detour
+       that made it hard to deal with octal escapes in strings correctly.
+       Parse GDB/MI directly instead.
+
+       * lisp/progmodes/gdb-mi.el (gdb-mi-decode-strings): Adjust doc string.
+       (gdb-mi-decode, gud-gdbmi-marker-filter): Remove gdb-mi-decode.
+       (gdb-jsonify-buffer): Remove.
+       (gdb-mi--parse-tuple-or-list, gdb-mi--parse-c-string)
+       (gdb-mi--parse-value, gdb-mi--parse-result-or-value)
+       (gdb-mi--parse-results, gdb-mi--fix-key, gdb-mi--extend-fullname)
+       (gdb-mi--c-string-from-string): New functions.
+       (gdb-json-read-buffer, gdb-json-string, gdb-json-partial-output):
+       Rename to gdb-mi--read-buffer, gdb-mi--from-string and
+       gdb-mi--partial-output respectively.  Remove useless FIX-LIST
+       argument.  FIX-KEY is now a symbol, not a string. All callers updated.
+       (gdb-tooltip-print, gdbmi-bnf-log-stream-output, gdb-internals)
+       (gdb-console, gdb-done-or-error, gdb-get-source-file-list)
+       (gdb-get-prompt, gdb-get-source-file):
+       Use gdb-mi--c-string-from-string instead of 'read'.
+       * test/lisp/progmodes/gdb-mi-tests.el: New file.
+
+2020-10-31  Eli Zaretskii  <eliz@gnu.org>
+
+       * etc/HELLO: Add Egyptian Hieroglyphs.
+
+2020-10-31  Eli Zaretskii  <eliz@gnu.org>
+
+       Support prettified display of fractional numbers
+
+       * lisp/composite.el (composition-function-table): Define an entry
+       for U+2044 FRACTION SLASH, for prettier display of fractional
+       numbers.
+
+2020-10-31  Michael Albinus  <michael.albinus@gmx.de>
+
+       Check also for "DragonFly" remote systems in Tramp
+
+       * lisp/net/tramp-sh.el (tramp-open-connection-setup-interactive-shell):
+       Check also for "DragonFly".
+
+2020-10-31  Eli Zaretskii  <eliz@gnu.org>
+
+       Speed up ls-lisp
+
+       This speeds up Dired by 25% in large directories.
+       * lisp/ls-lisp.el (ls-lisp--time-locale): New defvar.
+       (ls-lisp-format-time): calculate the locale for formatting times
+       only once and cache the value in 'ls-lisp--time-locale'.
+       (Bug#44273)
+
+2020-10-31  Eli Zaretskii  <eliz@gnu.org>
+
+       * doc/lispref/commands.texi (Key Sequence Input): Fix indexing.
+
+2020-10-31  Jared Finder  <jared@finder.org>
+
+       Updating docs with all special window prefix keys.
+
+       * doc/lispref/commands.texi (Key Sequence Input): Add documentation for
+       missing special window areas.  Explicitly call out window or frame.
+
+2020-10-31  Jared Finder  <jared@finder.org>
+
+       Fix unit tests broken by changes to xt-mouse.el
+
+       * test/lisp/xt-mouse-tests.el (xt-mouse-tracking-basic)
+       (xt-mouse-tracking-utf-8): Update expected escape sequence.
+
+2020-10-31  Eli Zaretskii  <eliz@gnu.org>
+
+       Revert "Temporarily mark two failing tests"
+
+       This reverts commit a8426f46726d94cdf21c0e6b3c85c0afe0064784.
+       A proper fix for the test is about to be installed shortly.
+
+2020-10-31  Thien-Thi Nguyen  <ttn@gnu.org>
+
+       Make hideshow.el work with Mhtml mode
+
+       Suggested by Ian Williams <norbekian9@gmail.com>.
+
+       * lisp/textmodes/mhtml-mode.el: Require ‘pcase’ when compiling.
+       (mhtml-forward): New func.
+       * lisp/progmodes/hideshow.el (hs-special-modes-alist):
+       Add entry for ‘mhtml-mode’.
+
+2020-10-31  Glenn Morris  <rgm@gnu.org>
+
+       Improve reproducibility of generated -pkg.el files
+
+       * lisp/emacs-lisp/package.el (package-generate-description-file):
+       Don't include the full name of the source file in the header,
+       since that varies non-reproducibly according to the build directory.
+       https://bugs.debian.org/972861
+       Note that elpa.gnu.org's admin/archive-contents.el does this by hand
+       and already only includes the nondirectory part.
+
+2020-10-30  João Távora  <joaotavora@gmail.com>
+
+       Shoosh byte-compilation warning in lisp/emacs-lisp/eldoc.el
+
+       Per bug#43609, elisp-eldoc-documentation-function is again in master,
+       but since it's now officially obsoleted, this backward compatibility
+       shim in eldoc--eval-expression-setup shouldn't unnecessarily trigger
+       warnings in master's code.
+
+       * lisp/emacs-lisp/eldoc.el (eldoc--eval-expression-setup): Shoosh
+       by-compilation warning.
+
+2020-10-30  João Távora  <joaotavora@gmail.com>
+
+       Don't make ElDoc doc buffer visible in buffer list by default
+
+       (Bug#44334)
+
+       * lisp/emacs-lisp/eldoc.el (eldoc-doc-buffer): No longer take
+       INTERACTIVE arg.  Show buffer if invisible.
+       (eldoc--format-doc-buffer): Don't change buffer visibility.
+       (eldoc-display-in-buffer): Show buffer if invisible if by calling
+       eldoc-doc-buffer.
+
+2020-10-30  João Távora  <joaotavora@gmail.com>
+
+       Bring back elisp-eldoc-documentation-function, marked obsolete
+
+       (Bug#43609)
+
+       It's not useful for ElDoc's eldoc-mode mechanism in Elisp, and nothing
+       in Emacs uses it, but it wasn't strictly marked internal, so it's best
+       to bring it back.
+
+       * lisp/progmodes/elisp-mode.el (elisp--documentation-one-liner):
+       New helper.
+       (elisp-eldoc-documentation-function): New function, with
+       obsoletion warning.
+
+2020-10-30  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/simple.el (blink-matching-open): Fix bug#37127
+
+       Don't call `syntax-propertize` from within narrowing
+
+       * lisp/progmodes/cperl-mode.el (cperl-forward-re): Revert last patch,
+       since it is now redundant.
+
+       * test/lisp/progmodes/cperl-mode-tests.el (cperl-bug37127):
+       Remove unused var; fix test so it really catches the previous bug;
+       tweak the code to use mode-agnostic commands so it also works in 
`perl-mode`.
+
+2020-10-30  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix Bug#44289
+
+       * lisp/files.el (directory-listing-before-filename-regexp):
+       Support DD-MMM-YYYY format.  (Bug#44289)
+
+2020-10-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak previous python-mode region fix
+
+       * lisp/progmodes/python.el (python-shell-buffer-substring): Tweak
+       the previous fix for bug#39398 to behave somewhat more like it
+       used to.
+
+2020-10-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Adjust python tests after fix for bug#39398"
+
+       This reverts commit c6fb23873a594b6a4fc57fa107869a2e82159d07.
+
+       The code is tweaked to be more backwards-compatible.
+
+2020-10-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix copying symbolic links in eshell
+
+       * lisp/eshell/em-unix.el (eshell-shuffle-files): Don't bug out
+       when copying symbolic links (bug#38577).
+
+2020-10-30  Dima Kogan  <dima@secretsauce.net>
+
+       Add a new command to regenerate a hunk in diff-mode
+
+       * lisp/vc/diff-mode.el (diff-refresh-hunk): New function (bug#44312).
+       (diff-mode-map): Bind C-c C-l.
+
+2020-10-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix fontifying of ::= in Makefiles
+
+       * lisp/progmodes/make-mode.el (makefile-match-dependency): Don't
+       fontify the POSIX immediate assignment operator ::= as a
+       dependency (bug#44319).
+
+2020-10-30  Harald Jörg  <haj@posteo.de>
+
+       Suppress a misleading message when closing a paren in a regex
+
+       * lisp/progmodes/cperl-mode.el (cperl-forward-re): Suppress an
+       error message about "End of string/RE not found" when we are
+       at the end of a narrowed buffer where the end of a RE is
+       temporarily unavailable (Bug#37127).
+
+       * test/lisp/progmodes/cperl-mode-tests.el (cperl-bug37127):
+       Add a test to verify that the message is suppressed when
+       inappropriate, but appears when the RE *is* incomplete.
+
+2020-10-30  Stefan Kangas  <stefan@marxist.se>
+
+       Clarify point position after text-property-search
+
+       * lisp/emacs-lisp/text-property-search.el
+       (text-property-search-forward, text-property-search-backward): Doc fix
+       to clarify placement of point after search.
+       * test/lisp/emacs-lisp/text-property-search-tests.el
+       (text-property-search--pos-test): New defun.
+       (text-property-search-forward-point-at-beginning)
+       (text-property-search-backward-point-at-end): New test.
+
+2020-10-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak the gdb-mi error message
+
+       * lisp/progmodes/gdb-mi.el (gdb--check-interpreter): Make the
+       error message less misleading (bug#40279).
+
+2020-10-30  Neil Roberts  <bpeeluk@yahoo.co.uk>
+
+       Use nobreak-space on all non-ASCII whitespace characters
+
+       * doc/emacs/display.texi (Text Display): Document it.
+
+       * src/xdisp.c (get_next_display_element): Use blankp to test whether
+       to use the nobreak_space face (bug#44236).
+
+2020-10-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make list-timers do sub-second times
+
+       * lisp/emacs-lisp/timer-list.el (list-timers): Do sub-second times
+       (bug#39956).
+
+2020-10-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       `format-time' can now do sub-second times
+
+       * doc/lispref/os.texi (Time Parsing): Document it.
+
+       * lisp/calendar/time-date.el (format-seconds): Allow formatting
+       sub-second times.
+
+2020-10-30  Stefan Kangas  <stefan@marxist.se>
+
+       Add shortdoc navigation commands
+
+       * lisp/emacs-lisp/shortdoc.el (text-property-search): Require.
+       (shortdoc-mode): New major mode.
+       (shortdoc-mode-map): New variable.
+       (shortdoc--goto-section): New macro.
+       (shortdoc-next, shortdoc-previous, shortdoc-next-section)
+       (shortdoc-previous-section): New commands.
+       (shortdoc-display-group): Use new shortdoc-models.  Propertize
+       section header.
+       (shortdoc--display-function): Propertize function header.
+
+2020-10-30  Hugh Daschbach  <hdasch@fastmail.com>
+
+       * test/lisp/net/dbus-tests.el (dbus-test09-get-managed-objects): Expand 
test.
+
+2020-10-30  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/mail/binhex.el (binhex-char-int): Add missing release
+
+2020-10-30  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Remove Debbugs 'thanks' from submit-emacs-patch
+
+       * lisp/mail/emacsbug.el (submit-emacs-patch): Remove unneeded
+       'thanks' following Debbugs pseudo-header, which leaves other
+       pseudo-headers entered by the user unprocessed (bug#44322).
+
+2020-10-30  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Modify only local send hook in submit-emacs-patch
+
+       * lisp/mail/emacsbug.el (submit-emacs-patch): Don't modify global
+       message-send-hook.
+
+2020-10-29  Noah Friedman  <friedman@splode.com>
+
+       Make sure pixel sizes are zero when setting window size for ptys.
+
+       * sysdep.c (set_window_size): Initialize data to zero to avoid
+       passing any garbage from the stack to ioctl.
+
+2020-10-29  Harald Jörg  <haj@posteo.de>
+
+       cperl-mode: Make timeout test more robust
+
+       * test/lisp/progmodes/cperl-mode-tests.el
+       (cperl-mode-test-bug-10483): Increase the timeout to 2 seconds
+       and mark the test as expensive.  Also, suppress it for Emacs
+       versions below 28, where the test times out though the function
+       works in manual tests.  (Bug#44317)
+
+2020-10-29  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Simplify some bibtex.el variable definitions
+
+       * lisp/textmodes/bibtex.el (bibtex-include-OPTkey)
+       (bibtex-user-optional-fields, bibtex-BibTeX-entry-alist)
+       (bibtex-biblatex-entry-alist, bibtex-generate-url-list): Use :risky
+       tag instead of risky-local-variable property.
+
+       (bibtex-entry-format, bibtex-maintain-sorted-entries)
+       (bibtex-sort-entry-class, bibtex-dialect)
+       (bibtex-autokey-name-case-convert-function): Use :safe tag instead
+       of safe-local-variable property.
+
+       (bibtex-autokey-name-case-convert-function): Let custom function
+       default to 'identity', not 'ignore'.
+
+       (bibtex-strings, bibtex-reference-keys): Define with defvar-local
+       instead of defvar+make-variable-buffer-local.
+
+2020-10-29  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/reposition.el: Use lexical-binding.
+
+2020-10-29  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/tcl.el: Better match Tcl string formation rules 
(bug#39277)
+
+       (tcl--word-delimiters): New const.
+       (tcl--syntax-of-quote): New function.
+       (tcl-syntax-propertize-function): Use them.
+       (tcl-mode): Enable `syntax-propertize-multiline`.
+
+       * test/manual/indent/tcl.tcl: New file.
+
+2020-10-29  Michael Albinus  <michael.albinus@gmx.de>
+
+       Handle several children of PATH in dbus-managed-objects-handler
+
+       * lisp/net/dbus.el (dbus-managed-objects-handler): Handle several
+       children of PATH.  (Bug#44298)
+
+       * src/dbusbind.c (xd_signature, xd_append_arg): Check object path.
+
+       * test/lisp/net/dbus-tests.el (dbus-test09-get-managed-objects):
+       Tag it :expensive-test.  Remove superfluous check.
+
+2020-10-29  Stefan Kangas  <stefan@marxist.se>
+
+       Fix CUA Mode menu entry to be less confusing
+
+       Note that the old text was incorrect; shift-selection is controlled by
+       the variable shift-select-mode.
+
+       * lisp/menu-bar.el (menu-bar-options-menu): Make CUA Mode menu entry
+       less confusing when cua-enable-cua-keys is nil.  (Bug#43322)
+
+2020-10-29  Ken Brown  <kbrown@cornell.edu>
+
+       Fix failure of 'emacs --daemon' on Cygwin
+
+       * src/emacs.c (DAEMON_MUST_EXEC): Define unconditionally on
+       Cygwin, not just if HAVE_NTGUI is defined.  This fixes the failure
+       of 'emacs --daemon' to start on the non-w32 Cygwin builds.
+       (Bug#44285)
+
+2020-10-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak previous article-treat-ansi-sequences fix
+
+       * lisp/gnus/gnus-art.el (article-treat-ansi-sequences): Redo the
+       previous fix to avoid a compilation warning (bug#44299).
+
+2020-10-29  Hugh Daschbach  <hdasch@fastmail.com>
+
+       * test/lisp/net/dbus-tests.el (dbus-test09-get-managed-objects): New 
test.
+
+2020-10-29  Andreas Schwab  <schwab@linux-m68k.org>
+
+       Don't spill ansi-color across parts in articles
+
+       * lisp/gnus/gnus-art.el (article-treat-ansi-sequences): Reset
+       ansi-color-context-region.  (Bug#44299)
+
+2020-10-29  Juri Linkov  <juri@linkov.net>
+
+       * lisp/bindings.el (narrow-map): Bind C-x n g to goto-line-relative 
(bug#9917)
+
+2020-10-29  Juri Linkov  <juri@linkov.net>
+
+       Widen buffer before going to point found by xref-find-definitions 
(bug#44294)
+
+       * lisp/progmodes/elisp-mode.el (xref-location-marker): Widen before 
going
+       to the found position.
+
+       * lisp/progmodes/etags.el (etags-goto-tag-location): Rerun after 
removing
+       narrowing.
+
+       * lisp/simple.el (goto-line-read-args): Use buffer-narrowed-p.
+
+2020-10-28  Stefan Kangas  <stefan@marxist.se>
+
+       Run substitute-command-keys on shortdoc section headings
+
+       * lisp/emacs-lisp/shortdoc.el (shortdoc-display-group): Run
+       substitute-command-keys on section headings before displaying.
+
+2020-10-28  Stefan Kangas  <stefan@marxist.se>
+
+       Extend the regexp shortdoc group
+
+       * lisp/emacs-lisp/shortdoc.el (regexp): New section "Match Data"; add
+       save-match-data.  New section "The `rx' Structured Regexp Notation".
+
+2020-10-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Document all parameters on `indent-relative'
+
+       * doc/lispref/text.texi (Relative Indent): Mention the FIRST-ONLY
+       parameter (bug#39330).
+
+2020-10-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Disable mml-sec-tests on MacOS
+
+       * test/lisp/gnus/mml-sec-tests.el (test-conf): Disable tests on
+       MacOS (bug#44259).
+
+2020-10-28  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: Only recognize foo (*bar) as a function pointer when followed 
by (
+
+       * lisp/progmodes/cc-engine.el (c-forward-over-decl-or-cast-1): (after 
CASE 2)
+       test variables got-suffix-after-parens and at-decl-end before invoking
+       c-fdoc-shift-type-backward.
+
+2020-10-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Display times in a more human-readable way in list-timers
+
+       * lisp/emacs-lisp/timer-list.el (list-timers): Format the
+       intervals in a more human-readable way (bug#39956).
+
+2020-10-28  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/net/hmac-def.el: Use lexical-binding.
+
+2020-10-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Adjust python tests after fix for bug#39398
+
+2020-10-28  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/net/eudc-vars.el: Use lexical-binding.
+
+2020-10-28  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in netrc.el and add tests
+
+       * lisp/net/netrc.el: Use lexical-binding.
+       (netrc-file): Remove redundant :group arg.
+       * test/lisp/net/netrc-resources/authinfo:
+       * test/lisp/net/netrc-resources/services:
+       * test/lisp/net/netrc-tests.el: New files.
+
+2020-10-28  Stefan Kangas  <stefan@marxist.se>
+
+       Warn against using the MD4 hash function
+
+       * lisp/md4.el (md4): Warn against using it, since its security is
+       non-existent and it has been declared obsolete.  It should probably
+       only be used by our NTLM support.  Point users to secure-hash instead.
+
+2020-10-28  Dmitry Gutov  <dgutov@yandex.ru>
+
+       css--complete-property-value: Limit the backward search
+
+       * lisp/textmodes/css-mode.el (css--complete-property-value):
+       Don't search back when ppss-innermost-start is nil (bug#44214).
+
+2020-10-28  Stefan Kangas  <stefan@marxist.se>
+
+       Remove Emacs 20 compat code from ede/files.el
+
+       * lisp/cedet/ede/files.el (ede--put-inode-dir-hash)
+       (ede--get-inode-dir-hash, ede-project-directory-remove-hash)
+       (ede--directory-project-from-hash)
+       (ede--directory-project-add-description-to-hash): Remove Emacs 20
+       compat code.
+
+2020-10-28  Stefan Kangas  <stefan@marxist.se>
+
+       Remove some compat code from feedmail.el
+
+       * lisp/mail/feedmail.el (feedmail-message-action-help-blat)
+       (feedmail-run-the-queue, feedmail-queue-send-edit-prompt-inner)
+       (feedmail-send-it-immediately): Remove compat code for XEmacs,
+       Emacs 19 and 20.
+
+2020-10-27  Stefan Kangas  <stefan@marxist.se>
+
+       Remove some Emacs 20 compat code from speedbar.el
+
+       * lisp/speedbar.el (speedbar-easymenu-definition-trailer): Remove
+       Emacs 20 compat code.
+
+2020-10-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak how `C-c C-r' computes the region in python-mode
+
+       * lisp/progmodes/python.el (python-shell-buffer-substring): Don't
+       extend the region to the start of the line (bug#39398), but allow
+       sending the actual region as marked.
+
+2020-10-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make gnus-output-to-rmail appending work better
+
+       * lisp/gnus/gnus-util.el (gnus-output-to-rmail): Ensure we have a
+       blank line before the next line when using mbox format (bug#39580).
+
+2020-10-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix intermittent rmail-summary-delete-forward problem
+
+       * lisp/mail/rmailsum.el (rmail-summary-delete-forward):
+       `rmail-delete-message' may apparently clear
+       `rmail-current-message' sometimes, so save the message number
+       before deleting (bug#39612).
+
+2020-10-27  Mattias Engdegård  <mattiase@acm.org>
+
+       gdb-mi: use lexical lambdas
+
+       * lisp/progmodes/gdb-mi.el (gdb-tooltip-print-1, gud-watch)
+       (gdb-var-list-children, gdb-edit-value)
+       (gdb-bind-function-to-buffer, gdb-place-breakpoints)
+       (gdb-preempt-existing-or-display-buffer):
+       Expose lambdas to the compiler as lexical closures instead of building
+       them the old-fashioned way.  Remove #' before lambda.
+
+2020-10-27  Mattias Engdegård  <mattiase@acm.org>
+
+       Remove unused function in gdb-mi.el
+
+       * lisp/progmodes/gdb-mi.el (gdb-var-evaluate-expression-handler):
+       Remove.  (It was left behind in an old code reorganisation.)
+
+2020-10-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Fontify strings in {} better in tcl-mode"
+
+       This reverts commit 7f32224dc324b0ee0f1b512c8d8b19aeb80141c1.
+
+       The changes led to things like
+
+           proc foo5 () {
+               return 6
+           }
+
+       being fontified as a string, which is wrong.
+
+2020-10-27  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Small fix to the new link for inherited faces in Customize
+
+       * lisp/cus-edit.el (cus--face-link): Link to the current value of the
+       widget, rather than to the widget's value upon creation (bug#44154).
+
+2020-10-27  Clemens Radermacher  <clemens.radermacher@posteo.de>
+
+       Fix NEWS entry for fix of Bug#44080
+
+2020-10-27  Eli Zaretskii  <eliz@gnu.org>
+
+       * src/buffer.c (syms_of_buffer) <fill-column>: Improve doc string.
+
+2020-10-27  Mattias Engdegård  <mattiase@acm.org>
+
+       gdb-mi: Don't use bindat for field access
+
+       Replace uses of bindat-get-field with a simpler accessor,
+       since nothing here uses the bindat machinery in any way.
+
+       * lisp/progmodes/gdb-mi.el (gdb-mi--field): New.
+       (gdb-get-many-fields): Remove.
+       (gdb-var-create-handler, gdb-var-list-children-handler)
+       (gdb-var-update-handler, gdb-current-buffer-frame)
+       (gdb-update-gud-running, gdb-thread-exited, gdb-thread-selected)
+       (gdb-running, gdb-stopped, gdb-breakpoints-list-handler-custom)
+       (gdb-place-breakpoints, gdb-thread-list-handler-custom)
+       (def-gdb-thread-buffer-simple-command, gdb-select-thread)
+       (def-gdb-thread-buffer-gud-command, gdb-read-memory-custom)
+       (gdb-invalidate-disassembly, gdb-disassembly-handler-custom)
+       (gdb-disassembly-place-breakpoints, gdb-toggle-breakpoint)
+       (gdb-delete-breakpoint, gdb-goto-breakpoint, gdb-frame-location)
+       (gdb-stack-list-frames-custom, gdb-select-frame)
+       (gdb-edit-locals-value, gdb-locals-handler-custom)
+       (gdb-registers-handler-custom, gdb-changed-registers-handler)
+       (gdb-register-names-handler, gdb-frame-handler):
+       Use gdb-mi--field.
+
+2020-10-27  Glenn Morris  <rgm@gnu.org>
+
+       Temporarily mark two failing tests
+
+       * test/lisp/xt-mouse-tests.el (xt-mouse-tracking-basic)
+       (xt-mouse-tracking-utf-8): Currently failing.
+
+2020-10-27  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       e0de9f3295 (origin/emacs-27) Don't skip empty lines when fitting mini...
+       a4ec03fa9b ; * etc/tutorials/TUTORIAL.de: Fix grammar (Bug#44246)
+       20c02e628c Improve documentation of display-fill-column-indicator
+       e2005f1f2a * INSTALL: Mention efaq.texi for installation of intlfonts.
+       71661b2872 Use WebKit sandboxing
+
+       # Conflicts:
+       #       etc/NEWS
+
+2020-10-27  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       c847d5998f Merge branch 'emacs-27' of git.sv.gnu.org:/srv/git/emacs i...
+
+2020-10-27  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       8b87ea6844 Recommend lexical-binding in Coding Conventions
+       e29cace60a Avoid rare crashes while producing line numbers
+
+2020-10-27  Simen Heggestøyl  <simenheg@gmail.com>
+
+       Complete property values in multi-line CSS declarations
+
+       * lisp/textmodes/css-mode.el (css--complete-property-value): Complete
+       property values even when preceded by a newline (bug#44214).
+
+2020-10-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix history problem in `M-x shell' when started twice
+
+       * lisp/comint.el (comint-input-ring-file-name): Avoid having this
+       variable being killed on mode restart while the other ring
+       variables aren't (bug#39667).  This would mean that `M-x
+       shell'/`C-d'/`M-x shell' didn't save commands entered after the
+       second `M-x shell'.
+
+2020-10-27  Mattias Engdegård  <mattiase@acm.org>
+
+       ERT: escape control characters in pretty-printed error output
+
+       * lisp/emacs-lisp/ert.el (ert--pp-with-indentation-and-newline):
+       Escape control characters which would otherwise be blasted directly to
+       the terminal (when running noninteractively) with unpleasant results.
+
+2020-10-27  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix sunrise and sunset calculation (bug#44237)
+
+       * lisp/calendar/solar.el (solar-moment): Use initial values for binary
+       search that won't end the loop prematurely and yield incorrect
+       answers.
+       * test/lisp/calendar/solar-tests.el: New file.
+
+2020-10-27  Mattias Engdegård  <mattiase@acm.org>
+
+       Don't rely on bignums in ntlm.el
+
+       Since ntlm.el is distributed as a separate package in GNU ELPA and
+       should be able to run on older Emacs versions without bignums,
+       we cannot make use of them here.  See discussion at
+       https://lists.gnu.org/archive/html/emacs-devel/2020-10/msg01665.html.
+       Instead, we add a small poor man's bignum implementation.
+
+       * lisp/net/ntlm.el (ntlm--bignat-of-int, ntlm--bignat-add)
+       (ntlm--bignat-shift-left, ntlm--bignat-mul-byte, ntlm--bignat-mul)
+       (ntlm--bignat-of-string, ntlm--bignat-of-digits)
+       (ntlm--bignat-to-int64): New.
+       (ntlm--time-to-timestamp): Use the ntlm--bignat- functions instead
+       of Lisp integers.
+       * test/lisp/net/ntlm-tests.el: New file.
+
+2020-10-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make edit-abbrevs parsing less brittle
+
+       * lisp/abbrev.el (define-abbrevs): Make the parsing less brittle
+       -- allow more blank lines (bug#42611).
+
+2020-10-27  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/net/sieve-mode.el: Use lexical-binding.
+
+2020-10-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a link to inherited faces in Customize
+
+       * lisp/cus-edit.el (cus--face-link): New function (bug#44154).
+       (face): Use the function to format the link.
+
+2020-10-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't do compilation-transform-file-match-alist if there's no file name
+
+       * lisp/progmodes/compile.el (compilation-error-properties): There
+       may not be a file name (bug#40111).  In that case, don't do the
+       `compilation-transform-file-match-alist' thing.
+
+2020-10-27  Clemens Radermacher  <clemens.radermacher@posteo.de>
+
+       Don't skip empty lines when fitting mini frame to buffer (Bug#44080)
+
+       * lisp/window.el (fit-mini-frame-to-buffer,
+       window--resize-mini-frame, fit-frame-to-buffer,
+       fit-frame-to-buffer-1): By default, fit a mini frame without skipping 
its
+       buffer's leading or trailing empty lines.
+       * src/frame.c (resize-mini-frames): Update doc-string.
+       * lisp/cus-start.el (resize-mini-frames): Update for customize.
+       * doc/lispref/minibuf.texi (resize-mini-frames): Update description.
+
+2020-10-27  Paul Pogonyshev  <pogonyshev@gmail.com>
+
+       Don't leak result of nested byte-compilation to outer level
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-file): Bind
+       `byte-compiler-error-flag' instead of setting it (bug#41065).
+       This fixes a problem of "leaking" the flag when compiling
+       something that then compiles something that errors out (i.e., an
+       "inner" compile).
+
+2020-10-27  mvar  <mvar.40k@gmail.com>  (tiny change)
+
+       Fontify strings in {} better in tcl-mode
+
+       * lisp/progmodes/tcl.el (tcl-syntax-propertize-function):
+       Propertize {} forms after commands as strings (bug#39277).
+       (tcl-set-font-lock-keywords): Fontify as strings.  This allows
+       things like puts {"foo} to be fontified correctly.
+
+2020-10-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       `g' in *Help* doesn't require confirmation
+
+       * lisp/help-mode.el (help-mode-revert-buffer): Don't require
+       confirmation before reverting (bug#44202).  This mimics how most
+       other non-file reverting functions work.
+
+2020-10-27  Nicolas Graner  <nicolas@graner.name>
+
+       Define backtab in text fields in eww
+
+       * lisp/net/eww.el (eww-text-map):
+       (eww-textarea-map): Define backtab, as in the main mode map
+       (bug#44247).
+
+2020-10-27  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/mail/mail-prsvr.el: Use lexical-binding.
+
+       * lisp/mail/mail-parse.el: Use lexical-binding.
+
+2020-10-27  Stefan Kangas  <stefan@marxist.se>
+
+       Allow pcomplete/gzip to complete on files in subdirectories
+
+       * lisp/pcmpl-gnu.el (pcmpl-gnu-zipped-files): Allow "gzip" to complete
+       on files in subdirectories.  (Bug#30271)
+
+2020-10-27  Boruch Baum  <boruch_baum@gmx.com>
+
+       Add some missing docstrings in cua-rect.el
+
+       * lisp/emulation/cua-rect.el (cua--rectangle)
+       (cua--last-rectangle, cua--restored-rectangle)
+       (cua--rectangle-overlays, cua--rectangle-operation)
+       (cua--tabify-start, cua--tabify-start, cua--insert-rectangle):
+       Add docstrings, in several cases by converting existing
+       comments.  (Bug#30085)
+       (cua--last-killed-rectangle): Update comment.
+
+2020-10-27  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in tool-bar.el
+
+       * lisp/tool-bar.el: Use lexical-binding.
+       (tool-bar-add-item, tool-bar-add-item-from-menu): Quote function
+       symbols as such.
+
+2020-10-27  Stefan Kangas  <stefan@marxist.se>
+
+       Don't use obsolete variable write-contents-hooks
+
+       * lisp/mh-e/mh-show.el (mh-display-msg):
+       * lisp/textmodes/rst.el: Don't use obsolete variable
+       write-contents-hooks.
+       Problem reported by Stefan Monnier <monnier@iro.umontreal.ca>.
+
+2020-10-27  Stefan Kangas  <stefan@marxist.se>
+
+       Remove XEmacs compat code from hashcash.el
+
+       * lisp/mail/hashcash.el (hashcash-point-at-bol)
+       (hashcash-point-at-eol): Make obsolete.
+       (hashcash-token-substring): Don't use the above now obsolete aliases.
+
+2020-10-26  Stephen Berman  <stephen.berman@gmx.net>
+
+       Fix an unbound variable in html skeletons
+
+       * lisp/skeleton.el (skeleton-internal-list): Fix an unbound
+       variable in html skeletons (bug#44157).
+
+2020-10-26  Dmitry Gutov  <dgutov@yandex.ru>
+
+       vc-git-root: Remove unnecessary caching
+
+       * lisp/vc/vc-git.el (vc-git-root): Simplify (bug#42966).
+
+2020-10-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make vc-responsible-backend choose the most specific backend
+
+       * lisp/vc/vc.el (vc-responsible-backend): Search through all the
+       VC backends instead of the first one, and choose the one that's
+       most specific (bug#42966).
+
+2020-10-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix time-test error on machines with mail
+
+       * test/lisp/time-tests.el (time-tests-display-time-update): There
+       may be mail on the machine (bug#44241).
+
+2020-10-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make the -modes variable autoloaded
+
+       * lisp/emacs-lisp/easy-mmode.el (define-globalized-minor-mode):
+       Make the -modes variable be autoloaded.
+
+2020-10-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak where global-display-fill-column-indicator-modes is on
+
+       * lisp/display-fill-column-indicator.el
+       (global-display-fill-column-indicator-mode): Don't switch on in
+       special-mode buffers (bug#44232).
+
+2020-10-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Implement a :predicate parameter for globalized minor modes
+
+       * doc/lispref/modes.texi (Defining Minor Modes): Describe the new
+       :predicate keyword (bug#44232).
+
+       * lisp/emacs-lisp/easy-mmode.el (define-globalized-minor-mode):
+       Allow a new :predicate keyword.
+       (easy-mmode--globalized-predicate-p): New function.
+
+2020-10-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make delete-selection-helper more resilient
+
+       * lisp/delsel.el (delete-selection-helper): Don't bug out on `C-g'
+       (bug#40357).
+
+2020-10-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak how shortdocs are displayed
+
+       * lisp/emacs-lisp/shortdoc.el (shortdoc-example): Removed.
+       (shortdoc-section): Remove colors.
+       (shortdoc-separator): New face.
+       (shortdoc-display-group, shortdoc--display-function): Don't use
+       background colours, because that makes things harder to read.
+       Separate with a horizontal line instead.
+
+2020-10-26  Andrea Corallo  <akrl@sdf.org>
+
+       Make native compiler tollerant to redefined primitives (bug#44221).
+
+       * lisp/emacs-lisp/comp.el (comp-emit-set-call-subr): Rework based
+       on the fact that the subr can now be redefined.
+       * test/src/comp-tests.el (primitive-redefine-compile-44221):
+       New testcase.
+
+2020-10-26  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid segfaults due to using fonts that were closed
+
+       * src/composite.c (composition_gstring_cache_clear_font): New
+       function.
+       * src/composite.h (composition_gstring_cache_clear_font): Add
+       prototype.
+       * src/font.c (font_clear_cache): When we are about to close a
+       font, remove from the gstring cache any lgstring that uses this
+       font.  (Bug#42943)
+
+2020-10-26  Mattias Engdegård  <mattiase@acm.org>
+
+       Revert "Don't consider play-sound-file to be a 'safe' function 
(bug#44018)"
+
+       This reverts commit cdb3c9d662c772ce25ea4d803eccd2c9e6a6ae99.
+
+2020-10-26  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of display-fill-column-indicator
+
+       * lisp/display-fill-column-indicator.el
+       (display-fill-column-indicator-mode): Mention the globalized
+       version in the doc string.
+
+       * doc/emacs/display.texi (Displaying Boundaries): Improve and
+       clarify the documentation of display-fill-column-indicator.
+       Suggest using the minor mode as the primary means for turning the
+       feature on.
+
+       * src/xdisp.c (syms_of_xdisp) <display-fill-column-indicator>
+       <display-fill-column-indicator-character>: Doc fix.  (Bug#44226)
+
+2020-10-26  Mattias Engdegård  <mattiase@acm.org>
+
+       Don't consider play-sound-file to be a 'safe' function (bug#44018)
+
+       While there are currently no known security holes in play-sound-file,
+       the attack surface is considerable and historically audio file
+       processing has had more than its share of security problems; the
+       benefit to risk ratio is low.
+
+       * lisp/emacs-lisp/unsafep.el: Don't mark play-sound-file as safe.
+
+2020-10-25  Andrea Corallo  <akrl@sdf.org>
+
+       Fix defsubst effectiveness (bug#44209)
+
+       * lisp/emacs-lisp/byte-run.el (defsubst): Fix macro definition.
+       * test/src/comp-tests.el (comp-test-defsubst): New testcase.
+       * test/src/comp-test-funcs.el (comp-test-defsubst-f): New
+       function.
+
+2020-10-25  Andrea Corallo  <akrl@sdf.org>
+
+       Fix a function for native compilation in cc-bytecomp.el
+
+       * lisp/progmodes/cc-bytecomp.el
+       (cc-bytecomp-compiling-or-loading): Update for native compilation.
+
+2020-10-25  Stefan Kangas  <stefan@marxist.se>
+
+       Add section "Replacing Match" to the regexp shortdoc group
+
+       * lisp/emacs-lisp/shortdoc.el (regexp): New section "Replacing Match".
+
+2020-10-25  Stefan Kangas  <stefan@marxist.se>
+
+       Remove some Emacs 19 compat code and references
+
+       * lisp/progmodes/sql.el:
+       * lisp/mh-e/mh-show.el (mh-display-msg): Remove Emacs 19 compat code.
+       * lisp/emacs-lisp/edebug.el (edebug-mark-marker): Make into
+       obsolete alias for mark-marker.
+       (edebug--display-1, edebug-bounce-point)
+       (edebug-outside-excursion): Adjust callers.
+       * lisp/net/snmp-mode.el:
+       * lisp/forms.el: Remove references to Emacs 19.
+       (forms-use-text-properties): Doc fix.
+
+2020-10-25  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve support for shaping Egyptian Hieroglyphs
+
+       * src/composite.c (composition_gstring_lookup_cache): Renamed from
+       gstring_lookup_cache and made external.  All callers changed.
+       * src/composite.h (composition_gstring_lookup_cache): Add
+       prototype.
+       * src/font.c (Ffont_shape_gstring): Call
+       composition_gstring_lookup_cache and return the cached composition
+       if it is already in the cache.
+
+       * lisp/language/misc-lang.el (egyptian-shape-grouping): New
+       function.
+       (composition-function-table): Use egyptian-shape-grouping in
+       setting up compositions for Egyptian Hieroglyphs.  Fix the
+       composition setup for horizontal and vertical joiners.
+
+2020-10-25  Andrea Corallo  <akrl@sdf.org>
+
+       Fix ELC+ELN vs ELC prefix while building non AoT native compiled files
+
+       * lisp/Makefile.in (am__v_ELC_0): Set it correctly when
+       NATIVE_DISABLED is 1.
+
+2020-10-25  Mattias Engdegård  <mattiase@acm.org>
+
+       Better file name in dynvars-check example
+
+       * doc/lispref/variables.texi (Converting to Lexical Binding):
+       Don't suggest an aggregate file name that matches the glob used when
+       generating it.
+
+2020-10-25  Andrea Corallo  <akrl@sdf.org>
+
+       Report warnings and errors from native asynchronous compilation 
(bug#44168)
+
+       * lisp/emacs-lisp/comp.el (comp-last-scanned-async-output): New
+       buffer local variable.
+       (comp-accept-and-process-async-output): New function.
+       (comp-run-async-workers): Use
+       `comp-accept-and-process-async-output'.
+
+2020-10-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix syntax error in message-add-openpgp-header
+
+       * lisp/gnus/message.el (message-add-openpgp-header): Remove
+       redundant (and syntactically wrong) check.
+
+2020-10-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix problem when replacing the final char in checkdoc
+
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-autofix-ask-replace):
+       Ensure that the end-of-doc-string marker is really at the end,
+       even if we replace the final " char in the string (bug#44201).
+
+2020-10-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       * INSTALL: Mention efaq.texi for installation of intlfonts.
+
+2020-10-25  Andrea Corallo  <akrl@sdf.org>
+
+       Fix `comp-dry-run' effectiveness
+
+       * lisp/emacs-lisp/comp.el (comp-compile-ctxt-to-file): Remove
+       `comp-dry-run' guard.
+       (comp-final): And move it here so is effective for interactive
+       sessions and non.
+
+2020-10-25  Philipp Stephani  <phst@google.com>
+
+       Revert commit 1f44a776729adf9c6468a76f8310616fde62eeaa for XRef.
+
+       XRef supports Emacs versions back to Emacs 26.3, so it can’t use newer
+       functions such as ‘ert-resource-directory’.
+
+       * test/lisp/progmodes/xref-tests.el (xref-tests-data-dir): Don’t use
+       ‘ert-resource-directory’
+
+2020-10-25  Philipp Stephani  <phst@google.com>
+
+       Revert commit 1f44a776729adf9c6468a76f8310616fde62eeaa for Flymake.
+
+       Flymake supports all Emacs versions back to 26.1, so it can’t use
+       ‘ert-resource-file’.
+
+       * test/lisp/progmodes/flymake-tests.el (flymake-tests-data-directory):
+       Recreate.
+       (flymake-tests--call-with-fixture): Stop using ‘ert-resource-file’.
+
+2020-10-25  Paul Eggert  <eggert@cs.ucla.edu>  (tiny change)
+           Qiantan Hong  <qhong@mit.edu>
+
+       Use WebKit sandboxing
+
+       * src/xwidget.c (Fmake_xwidget): Enable sandboxing if WebKit 2.26
+       or later.  Do this early, as required for sandboxing (Bug#43071).
+
+2020-10-25  Stefan Kangas  <stefan@marxist.se>
+
+       Add shortdoc group for alist
+
+       * lisp/emacs-lisp/shortdoc.el (alist): New shortdoc group.
+
+2020-10-25  Stefan Kangas  <stefan@marxist.se>
+
+       Add shortdoc group for hash-table
+
+       * lisp/emacs-lisp/shortdoc.el (hash-table): New shortdoc group.
+
+2020-10-24  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Minor doprnt cleanup: remove memchr call
+
+       * src/doprnt.c (doprnt): Remove unnecessary call to memchr.
+
+2020-10-24  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Rename doprnt_nul to doprnt_non_null_end
+
+       * src/doprnt.c (doprnt_non_null_end): Rename from doprnt_nul,
+       as the old name was misleading (left over from a previous proposal).
+       Caller changed.
+
+2020-10-24  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Improve doprnt performance
+
+       This patch implements some of my suggestions in Bug#8545,
+       with further changes suggested by Eli Zaretskii (Bug#43439).
+       * src/doprnt.c: Improve comments.
+       (SIZE_BOUND_EXTRA): Now at top level, for parse_format_integer.
+       (parse_format_integer): New static function, containing some of
+       the old doprnt.  Fix a bug that caused doprnt to infloop on
+       formats like "%10s" that Emacs does not use.  We could simplify
+       doprnt further if we dropped support for these never-used formats.
+       (doprnt_nul): New function.
+       (doprnt): Use it.  Change doprnt API to exit when either it finds NUL
+       or reaches the character specified by FORMAT_END.  In the typical case
+       where FORMAT_END is null, take just one pass over FORMAT, not two.
+       Assume C99 to make code clearer.  Do not use malloc or alloca to
+       allocate a copy of the format FMTCPY; instead, use a small fixed-size
+       array FMTSTAR, and use '*' in that array to represent width and
+       precision, passing them as separate int arguments.  Use eassume to
+       pacify GCC in switch statements.
+
+2020-10-24  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Warn about a bad default value in restricted-sexp widget
+
+       * lisp/wid-edit.el (restricted-sexp widget): New :value-to-external
+       function.  If value is not in the internal format, then we might be
+       dealing with a bad default value for the widget, so display a warning
+       about that (bug#25152).
+
+2020-10-24  João Távora  <joaotavora@gmail.com>
+
+       Rework semantics of eldoc-echo-are-use-multiline-p
+
+       Per bug#43543.  Now uses logical lines, not visual lines.
+
+       * lisp/emacs-lisp/eldoc.el (eldoc-echo-area-use-multiline-p): Rework
+       semantics.
+       (eldoc--echo-area-substring): New helper.
+       (eldoc--echo-area-prefer-doc-buffer-p): New helper.
+       (eldoc-display-in-echo-area): Rework using new helpers.
+
+2020-10-24  João Távora  <joaotavora@gmail.com>
+
+       Rename ElDoc user option controlling display of truncation notice
+
+       The new name makes it consistent with other variables controlling the
+       display of ElDoc documentation in the echo area.
+
+       Per bug#43543.
+
+       * etc/NEWS (Eldoc): Rename eldoc-display-truncation-message to
+       eldoc-echo-area-display-truncation-message.
+
+       * lisp/emacs-lisp/eldoc.el
+       (eldoc-echo-area-display-truncation-message): Rename from
+       eldoc-display-truncation-message.
+       (eldoc-display-in-echo-area): Use new variable name.
+
+2020-10-24  João Távora  <joaotavora@gmail.com>
+
+       Rework eldoc-echo-area-prefer-doc-buffer (bug#42532)
+
+       * lisp/emacs-lisp/eldoc.el:
+       (eldoc-echo-area-prefer-doc-buffer): Rename from
+       eldoc-echo-area-prefer-doc-buffer
+       (eldoc-display-in-echo-area): Rework to honour
+       eldoc-echo-area-prefer-doc-buffer.
+
+2020-10-24  João Távora  <joaotavora@gmail.com>
+
+       Introduce eldoc-display-functions
+
+       See bug#43609.
+
+       * lisp/emacs-lisp/eldoc.el (eldoc--request-state): Add comment.
+       (eldoc--last-request-state): No longer buffer-local.
+       (eldoc--request-docs-p): Delete.
+       (eldoc-display-functions): New user variable.
+       (eldoc--doc-buffer-docs): New variable.
+       (eldoc-display-message-p): Rework.
+       (eldoc--format-doc-buffer): Rework from eldoc--handle-docs.
+       (eldoc-display-in-echo-area, eldoc-display-in-buffer): New
+       user-visible function.
+       (eldoc--invoke-strategy): Take INTERACTIVE arg.
+       Invoke eldoc-display-in-buffer
+       (eldoc-print-current-symbol-info): Simplify.
+       (Version): Bump to 1.11.0
+
+       * etc/NEWS: Mention eldoc-display-functions.
+
+2020-10-24  Stefan Kangas  <stefan@marxist.se>
+
+       Re-introduce variable for world clock timer
+
+       * lisp/time.el (world-clock--timer): New variable.
+       (world-clock): Save timer to above variable when it is started.
+       (world-clock-cancel-timer): Delete timer saved in variable instead of
+       searching for the function name.
+
+2020-10-24  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in several language support libraries
+
+       * lisp/language/burmese.el:
+       * lisp/language/cham.el:
+       * lisp/language/czech.el:
+       * lisp/language/georgian.el:
+       * lisp/language/greek.el:
+       * lisp/language/khmer.el:
+       * lisp/language/romanian.el:
+       * lisp/language/sinhala.el:
+       * lisp/language/slovak.el:
+       * lisp/language/tai-viet.el:
+       * lisp/language/vietnamese.el: Use lexical-binding.
+
+2020-10-24  Michael Albinus  <michael.albinus@gmx.de>
+
+       Accept nil COMMAND in tramp-sh-handle-make-process (Bug#44151)
+
+       * lisp/net/tramp-sh.el (tramp-sh-handle-make-process): Accept nil
+       COMMAND.  (Bug#44151)
+
+       * test/lisp/net/tramp-tests.el (tramp-test29-start-file-process):
+       Extend test.
+
+2020-10-24  Stefan Kangas  <stefan@marxist.se>
+
+       Revert "Use lexical-binding in bindat.el"
+
+       This reverts commit a497b8e4a41e3223089654da4b36d0fdd51ce555.
+
+       This conversion to lexical-binding broke the eval specification,
+       documented in the ELisp manual.  We will probably want to add tests
+       for that before we can confidently convert this to lexical-binding.
+       Problem reported by Mattias Engdegård <mattiase@acm.org>.
+
+2020-10-24  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in most term libraries
+
+       * lisp/term/AT386.el:
+       * lisp/term/internal.el:
+       * lisp/term/iris-ansi.el:
+       * lisp/term/lk201.el:
+       * lisp/term/news.el:
+       * lisp/term/rxvt.el:
+       * lisp/term/sun.el:
+       * lisp/term/tvi970.el:
+       * lisp/term/wyse50.el: Use lexical-binding.
+
+2020-10-24  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in copyright.el and add tests
+
+       * lisp/emacs-lisp/copyright.el: Use lexical-binding.  Remove
+       redundant :group args.
+       * test/lisp/emacs-lisp/copyright-tests.el: New file.
+
+2020-10-24  Stefan Kangas  <stefan@marxist.se>
+
+       * test/manual/image-transforms-tests.el: Use lexical-binding.
+
+2020-10-24  Stefan Kangas  <stefan@marxist.se>
+
+       Move faces.el test data to follow our conventions
+
+       * test/lisp/faces-tests.el (ert-x): Require.
+       (faces--test-data-dir): Remove variable.
+       (faces--test-extend-with-themes): Use ert-resource-directory.
+       * test/lisp/faces-resources/*: Moved from test/data/themes/*.
+
+2020-10-24  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix tramp-sh-handle-make-process; don't merge with master
+
+       * lisp/net/tramp-sh.el (tramp-sh-handle-make-process): Accept nil
+       COMMAND.  (Bug#44151)
+
+       * test/lisp/net/tramp-tests.el (tramp-test29-start-file-process):
+       Extend test.
+
+2020-10-24  Jared Finder  <jared@finder.org>
+
+       Fix a bug where the wrong menu would be triggered by mouse
+
+       For layouts such as the following, clicking the "l" in Tools with the
+       right window focused would trigger the File menu, not the Tools menu.
+       This is because the event would have window coordinate (1 . 0).
+       Similarly, clicking the "p" in Help would trigger the Edit menu.
+
+       Example Emacs frame:
+       +--------------------------------------------------------+
+       |File Edit Options Buffers Tools Help                    |
+       |;; This buffer is for text$|;; This buffer is for text $|
+       |;; To create a file, visit$|;; To create a file, visit $|
+       |                           |                            |
+       |                           |                            |
+       |-UUU:----F1  *scratch*     |-UUU:----F1  *scratch*      |
+       |                                                        |
+       +--------------------------------------------------------+
+       * lisp/menu-bar.el (menu-bar-open-mouse): Reject clicks not on
+       the menu bar.
+       *lisp/xt-mouse.el (xterm-mouse-event): Pass the current frame to
+       'posn-at-x-y', to make the effect consistent with other mouse-handling
+       features.
+
+2020-10-24  Jared Finder  <jared@finder.org>
+
+       Enable TTY menus with xterm-mouse-mode
+
+       * lisp/tmm.el: No need to bind 'tmm-menubar-mouse' to mouse clicks
+       on the menu bar.
+       * lisp/menu-bar.el (global-map): Bind 'menu-bar-open-mouse' to
+       mouse click on menu bar.  This is needed in xt-mouse.
+
+       * etc/NEWS: Announce TTY menu support in xterm-mouse-mode.
+
+2020-10-24  Jared Finder  <jared@finder.org>
+
+       Make TTY menus work with xterm-mouse-mode
+
+       * src/term.c (mouse_get_xy): Call 'mouse_position' passing it the
+       value of 'tty-menu-calls-mouse-position-function' as the
+       argument.
+       (syms_of_term) <tty-menu-calls-mouse-position-function>: New
+       DEFVAR_BOOL.
+       * src/frame.c (mouse_position): New function, with most of the
+       code from Fmouse_position, but call 'mouse-position-function' only
+       if called with non-zero argument.
+       (Fmouse_position): Call 'mouse_position' to do the job.
+
+       * lisp/xt-mouse.el (xterm-mouse-translate-1): Respect
+       'track-mouse'.
+       (xterm-mouse-mode): Set 'tty-menu-calls-mouse-position-function'
+       when setting 'mouse-position-function'.
+       (xterm-mouse-tracking-enable-sequence): Use SET_ANY_EVENT_MOUSE
+       (0x1003) so that mouse movement can be reported even if no buttons
+       are pressed.  Doc fix.
+       * lisp/menu-bar.el (menu-bar-define-mouse-key): New function.
+       (tty-menu-navigation-map): Call it.
+
+       * doc/lispref/frames.texi (Mouse Position): Document
+       'tty-menu-calls-mouse-position-function'.
+
+       * etc/NEWS: Announce 'tty-menu-calls-mouse-position-function'.
+
+2020-10-24  Jared Finder  <jared@finder.org>
+
+       Adding mouse controls to menu-bar.el.
+
+       * lisp/isearch.el (tmm-menubar-keymap): Remove declare-function.
+       * lisp/menu-bar.el (menu-bar-open-mouse, menu-bar-keymap)
+       (menu-bar-current-active-maps, menu-bar-item-at-x): New functions.
+       *lisp.tmm.el (tmm-menubar-keymap, tmm-get-keybind): Functions
+       deleted.
+       (tmm-menubar): Call 'menu-bar-item-at-x'.
+
+2020-10-24  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix last change in image.c for MS-Windows
+
+       * src/image.c [LIBRSVG_CHECK_VERSION (2, 46, 0)]: Define
+       prototype for rsvg_handle_get_geometry_for_layer.
+       (init_svg_functions) [LIBRSVG_CHECK_VERSION (2, 46, 0)]: Load
+       rsvg_handle_get_geometry_for_layer from the DLL, instead of
+       rsvg_handle_get_dimensions.
+       (rsvg_handle_get_geometry_for_layer) [LIBRSVG_CHECK_VERSION (2, 46, 0)]:
+       Define macro.  (Bug#44065)
+
+2020-10-24  Stefan Kangas  <stefan@marxist.se>
+
+       Fix a broken unsafep test
+
+       * test/lisp/emacs-lisp/unsafep-tests.el
+       (test-unsafep/message): Fix test case.
+
+       (unsafep-tests--safe): Rename from testcover-unsafep-safe.
+       (unsafep-tests--unsafe): Rename from testcover-unsafep-unsafe.
+       (test-unsafep/safe, test-unsafep/unsafe): Doc fix.  Adjust usage
+       of above renamed variables.
+
+2020-10-24  Stefan Kangas  <stefan@marxist.se>
+
+       Move epg.el test data to follow our conventions
+
+       * test/lisp/epg-tests.el (ert-x): Require.
+       (epg-tests-data-directory): Remove variable.
+       (with-epg-tests): Use ert-resource-file.
+       * test/lisp/epg-resources/*: Moved from test/data/epg/.
+
+2020-10-24  Stefan Kangas  <stefan@marxist.se>
+
+       Move shr.el test data to follow our conventions
+
+       * test/lisp/net/shr-tests.el (ert, ert-x): Require.
+       (shr-tests--datadir): Remove variable.
+       (shr-test, rendering): Use ert-resource-directory.
+       * test/lisp/net/shr-resources/*: Move from test/data/shr/.
+
+2020-10-24  Stefan Kangas  <stefan@marxist.se>
+
+       Move mml-sec.el test data to follow our conventions
+
+       * test/lisp/gnus/mml-sec-tests.el (ert-x): Require.
+       (mml-secure-test-fixture, mml-sec-test--kill-gpg-agent):
+       Use ert-resource-directory.
+       * test/lisp/gnus/mml-sec-resources/*: Moved from test/data/mml-sec/.
+       * .gitignore: Update location of moved file "random_seed".
+
+2020-10-23  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-10-23  Stefan Kangas  <stefan@marxist.se>
+
+       Move more test data to follow our conventions
+
+       * test/data/minibuffer-test-cttq$tion: Move from here...
+       * test/lisp/minibuffer-resources/data/minibuffer-test-cttq$tion:
+       ...to here.
+       * test/lisp/minibuffer-resources/lisp/cedet/semantic-utest-c.test:
+       * test/lisp/minibuffer-resources/lisp/cedet/semantic-utest.test:
+       New files.
+       * test/lisp/minibuffer-tests.el (ert, ert-x): Require.
+       (completion-table-test-quoting): Use ert-resource-directory.
+
+       * test/data/net/cert.pem:
+       * test/data/net/key.pem: Move from here...
+       * test/lisp/net/network-stream-resources/cert.pem:
+       * test/lisp/net/network-stream-resources/key.pem: ...to here.
+       * test/lisp/net/network-stream-tests.el (ert, ert-x): Require.
+       (network-stream-tests--datadir): Remove variable.
+       (make-tls-server): Use ert-resource-file.
+
+       * test/data/vc/diff-mode/hello_emacs.c:
+       * test/data/vc/diff-mode/hello_emacs_1.c:
+       * test/data/vc/diff-mode/hello_world.c:
+       * test/data/vc/diff-mode/hello_world_1.c: Move from here...
+       * test/lisp/vc/diff-mode-resources/hello_emacs.c:
+       * test/lisp/vc/diff-mode-resources/hello_emacs_1.c:
+       * test/lisp/vc/diff-mode-resources/hello_world.c:
+       * test/lisp/vc/diff-mode-resources/hello_world_1.c: ...to here.
+       * test/lisp/vc/diff-mode-tests.el (ert, ert-x): Require.
+       (diff-mode-tests--datadir): Remove variable.
+       (diff-mode-test-font-lock-syntax-one-line)
+       (diff-mode-test-font-lock): Use ert-resource-directory.
+
+       * test/data/xdg/l10n.desktop:
+       * test/data/xdg/malformed.desktop:
+       * test/data/xdg/mimeapps.list:
+       * test/data/xdg/mimeinfo.cache:
+       * test/data/xdg/test.desktop: Move from here...
+       * test/lisp/xdg-resources/l10n.desktop:
+       * test/lisp/xdg-resources/malformed.desktop:
+       * test/lisp/xdg-resources/mimeapps.list:
+       * test/lisp/xdg-resources/mimeinfo.cache:
+       * test/lisp/xdg-resources/test.desktop: ...to here.
+       * test/lisp/xdg-tests.el (ert-x): Require.
+       (xdg-tests-data-dir): Remove variable.
+       (xdg-desktop-parsing, xdg-mime-associations): Use ert-resource-file.
+
+2020-10-23  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix error in tramp-sh-handle-make-process
+
+       * lisp/net/tramp-sh.el (tramp-sh-handle-make-process): Don't use heredoc
+       script whent the argument contains a string.
+
+2020-10-23  Stefan Kangas  <stefan@marxist.se>
+
+       Move some test data to follow our conventions
+
+       * test/data/emacs-module/mod-test.c: Move from here...
+       * test/src/emacs-module-resources/mod-test.c: ...to here.
+       * test/src/emacs-module-tests.el (ert-x): Require.
+       (mod-test-file, module/describe-function-1):
+       * test/Makefile.in (test_module_dir): Adjust for move.
+
+       * test/data/files-bug18141.el.gz: Move from here...
+       * test/lisp/files-resources/files-bug18141.el.gz: ... to here.
+       * test/lisp/files-tests.el (ert-x): Require.
+       (files-test-bug-18141-file): Use ert-resource-file.
+
+       * test/data/mailcap/mime.types: Move from here...
+       * test/lisp/net/mailcap-resources/mime.types: ...to here.
+       * test/lisp/net/mailcap-tests.el (ert-x): Require.
+       (mailcap-tests-path): Use ert-resource-file.
+
+       * test/data/somelib.el:
+       * test/data/somelib2.el: Move from here...
+       * test/src/lread-resources/somelib.el:
+       * test/src/lread-resources/somelib2.el: ...to here.
+       * test/src/lread-tests.el (ert, ert-x): Require.
+       (lread-test-bug26837): Use ert-resource-directory.
+
+       * test/data/syntax-comments.txt: Move from here....
+       * test/src/syntax-resources/syntax-comments.txt: ...to here.
+       * test/src/syntax-tests.el (ert-x): Require.
+       (syntax-comments, syntax-br-comments, syntax-pps-comments):
+       Use ert-resource-file.
+
+       * test/data/xref/file1.txt:
+       * test/data/xref/file2.txt: Move from here...
+       * test/lisp/progmodes/xref-resources/file1.txt:
+       * test/lisp/progmodes/xref-resources/file2.txt: ...to here.
+       * test/lisp/progmodes/xref-tests.el (ert, ert-x): Require.
+       (xref-tests-data-dir): Use ert-resource-directory.
+
+2020-10-23  Eli Zaretskii  <eliz@gnu.org>
+
+       Set up composition-function-table for Egyptian
+
+       * lisp/language/misc-lang.el (composition-function-table): Set up
+       for Egyptian Hieroglyphs.
+
+2020-10-23  Eli Zaretskii  <eliz@gnu.org>
+
+       Remove most of charset markup from etc/HELLO
+
+       For the reasons, see the discussion that started in
+       https://lists.gnu.org/archive/html/emacs-devel/2018-12/msg00407.html
+       and its conclusion in
+       https://lists.gnu.org/archive/html/emacs-devel/2019-01/msg00144.html.
+       The only markup left is in the preamble, just to show the example
+       of this facility.
+
+2020-10-23  Olivier Certner  <ocert.dev@free.fr>  (tiny change)
+
+       ERC: Fix ERC's IBuffer format "crash" on killed server buffer
+
+       * lisp/erc/erc-ibuffer.el (erc-server-name): Fix a crash when
+       displaying (or updating) an IBuffer buffer using ERC's first IBuffer
+       format.  This happens when one ERC buffer has its associated server
+       buffer killed, e.g., voluntarily or automatically after server
+       disconnection when `erc-kill-server-buffer-on-quit' is set to t.  The
+       culprit is the "Server" column, which returns nil in this case.
+       Display "(closed)" instead (bug#44156).
+
+2020-10-23  Ruthra Kumar  <ruthrab@gmail.com>
+
+       Add support for squashfs files in archive mode
+
+       * lisp/arc-mode.el (archive-squashfs-extract): New variable
+       (bug#43827).
+       (archive-find-type): Identify squashfs.
+       (archive-squashfs-summarize, archive-squashfs-extract-by-stdout):
+       New functions to parse/extract squashfs.
+
+       * lisp/files.el (auto-mode-alist): Add squashfs.
+
+2020-10-23  Ulf Jasper  <ulf.jasper@web.de>
+
+       Move icalendar test data to test/lisp/calendar/icalendar-resources
+
+       * test/lisp/calendar/icalendar-tests.el (ert-x): Required for
+       'ert-resource-file'.
+       (icalendar-tests--data-dir): Removed.
+       (icalendar-tests--get-file-contents): Use 'ert-resource-file' for
+       finding test data files.
+       * test/data/icalendar/*: Moved to 
test/lisp/calendar/icalendar-resources/.
+       * test/lisp/calendar/icalendar-resources/*: Moved from 
test/data/icalendar.
+
+2020-10-23  Stefan Kangas  <stefan@marxist.se>
+
+       Clean up temporary files after package tests
+
+       * test/lisp/emacs-lisp/package-tests.el (with-package-test): Remove
+       temporary files after test.  (Bug#43359)
+
+2020-10-23  Mattias Engdegård  <mattiase@acm.org>
+
+       Use lexical binding in ffap.el
+
+       * lisp/ffap.el (ffap-search-backward-file-end): Remove binding for
+       variable shadowing an optional (and never used) argument.
+       (ffap--gopher-var-on-line): Remove unused variable.
+
+2020-10-23  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/emacs-lisp/pcase.el: Add "extensions" to keyword header.
+
+       Merge branch 'scratch/substitute-command-keys'
+
+2020-10-22  Juri Linkov  <juri@linkov.net>
+
+       * etc/HELLO: Use JavaScript for Javanese script (bug#43887)
+
+2020-10-22  Alan Third  <alan@idiocy.org>
+
+       Fix SVG image dimension calculations (bug#44065)
+
+       * src/image.c (svg_load_image): Calculate the image size by using the
+       viewBox size and applying it to the image.
+       * etc/PROBLEMS: Describe the problem with librsvg 2.45 and below.
+
+2020-10-22  Alan Third  <alan@idiocy.org>
+
+       Fix crash when no face is defined (bug#44058, bug#43973)
+
+       * src/nsterm.m (ns_clear_under_internal_border): If face is null,
+       don't try drawing anything.
+
+2020-10-22  Stefan Kangas  <stefan@marxist.se>
+
+       Remove incorrect use of decode-coding-string
+
+       * test/lisp/emacs-lisp/bindat-tests.el
+       (bindat-test-pack/multibyte-string-fails)
+       (bindat-test-unpack/multibyte-string-fails): Don't use
+       decode-coding-string.
+       Problem pointed out by Stefan Monnier <monnier@iro.umontreal.ca>.
+
+2020-10-22  Stefan Kangas  <stefan@marxist.se>
+
+       Recommend lexical-binding in Coding Conventions
+
+       * doc/lispref/tips.texi (Coding Conventions, Library Headers):
+       Recommend using lexical-binding.
+
+2020-10-22  Andreas Schwab  <schwab@linux-m68k.org>
+
+       eww: don't add keymap to <a> without href
+
+       * lisp/net/eww.el (eww-tag-a): Only add keymap if the href
+       attribute is present.  (Bug#44147)
+
+2020-10-22  Stefan Kangas  <stefan@marxist.se>
+
+       Add missed file needed by time-tests.el
+
+       * test/lisp/time-resources/non-empty: New file.  This file is needed
+       by time-tests.el but was missed when it was committed.
+
+2020-10-22  Mattias Engdegård  <mattiase@acm.org>
+
+       Remove useless uses of bindat-get-field
+
+       * lisp/progmodes/gdb-mi.el (gdb-var-list-children-handler)
+       (gdb-edit-register-value): bindat-get-field with a single argument is
+       identity; remove.
+
+2020-10-22  Stefan Kangas  <stefan@marxist.se>
+
+       Add tests for perl-mode.el
+
+       * test/lisp/progmodes/perl-mode-tests.el: New file.
+
+2020-10-22  Ulf Jasper  <ulf.jasper@web.de>
+
+       Move test data for icalendar tests to separate files.
+
+       * test/lisp/calendar/icalendar-tests.el
+       (icalendar-tests--data-dir, icalendar-tests--get-file-contents):
+       New.
+       (icalendar-tests--test-import, icalendar-tests--do-test-import):
+       Read input and expected results from files.
+       (icalendar-import-non-recurring, icalendar-import-rrule)
+       (icalendar-import-duration, icalendar-import-bug-6766)
+       (icalendar-import-bug-24199, icalendar-import-bug-33277)
+       (icalendar-import-multiple-vcalendars, icalendar-import-with-uid)
+       (icalendar-import-with-timezone, icalendar-real-world): Move test
+       data (input and expected result) to separate files.
+
+       * test/calendar/icalendar/*
+       New files containing test data for icalendar tests.
+
+2020-10-22  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in time-date.el and expand tests
+
+       * lisp/calendar/time-date.el: Use lexical-binding.
+       * test/lisp/calendar/time-date-tests.el
+       (test-obsolete-with-decoded-time-value)
+       (test-obsolete-encode-time-value, test-format-seconds)
+       (test-days-to-time, test-seconds-to-string): New tests.
+       (test-days-in-month, test-time-since, test-time-decoded-period):
+       Expand test with a few more values.
+
+2020-10-22  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Make State button interaction less confusing
+
+       * lisp/cus-edit.el (custom-variable-current-value): New function.
+       (custom-variable-backup-value): Use it.
+       (custom-variable-set, custom-variable-mark-to-reset-standard): Check
+       that old value is different than the new one.  If it is, make a
+       backup.  This way, we avoid offering the Set to Backup Value
+       unnecessarily.
+       (custom-variable-reset-saved): Reset the variable-comment property for
+       the variable, to help custom-variable-state be more correct.  Also
+       check if we should backup old value.
+       (custom-variable-state): If a variable was set to the standard value,
+       say its state is standard rather than set, which is more correct.
+       Getting the right variable state is important for menu options to be
+       enabled/disabled, and for displaying the right message to the user
+       (bug#12864).
+
+2020-10-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Use HTTP instead of Tramp for the ffap rfc path (and also fix it)
+
+       * lisp/ffap.el (ffap-rfc-path): Use an URL instead of an FTP tramp
+       file, since that's more widely supported (bug#41663).
+
+2020-10-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Comment JSX lines using JSX syntax
+
+       * lisp/progmodes/js.el (js-jsx--comment-region): New function
+       (bug#41696).
+       (js-jsx-mode): Use it.
+
+2020-10-22  Stefan Kangas  <stefan@marxist.se>
+
+       Test for error with multibyte strings in bindat.el
+
+       * test/lisp/emacs-lisp/bindat-tests.el
+       (bindat-test-pack/multibyte-string-fails)
+       (bindat-test-unpack/multibyte-string-fails): New tests.
+
+2020-10-22  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Pretty print restricted sexp values too
+
+       * lisp/wid-edit.el (restricted-sexp widget): Use
+       widget-sexp-value-to-internal to pretty print the widget's value, when
+       it is a valid one (bug#7524).
+
+2020-10-22  Stefan Kangas  <stefan@marxist.se>
+
+       Remove reference HP-UX 8.0 and 9.x bug from FAQ
+
+       * doc/misc/efaq.texi (Meta key does not work in xterm): Remove section
+       about a bug on HP-UX 8.0 and 9.x.  Support for these platforms were
+       removed in 23.1.
+
+2020-10-22  Stefan Kangas  <stefan@marxist.se>
+
+       Remove two references to Emacs 21 from the FAQ
+
+       * doc/misc/efaq.texi (Turning on syntax highlighting): Remove some
+       references to Emacs 21 and older.
+
+2020-10-22  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Allow moving members of editable-list widget, via delete+insert
+
+       * etc/NEWS (Widget): Announce the feature (bug#6419).
+       * lisp/wid-edit.el (widget-editable-list-delete-at): Save into a new
+       widget property, :last-deleted, the WIDGET to be deleted.  Add
+       docstring.
+       (widget-editable-list-insert-before): If there is a recently deleted
+       child for the editable list, insert that one, instead of a new default
+       widget.  Add docstring.
+       (insert-button widget): Make :help-echo a function to avoid the
+       help-echo string become too long.
+       (delete-button widget): Tweak the :help-echo string, to document this
+       behavior.
+
+       * test/lisp/wid-edit-tests.el (widget-test-moving-editable-list-item):
+       Test the feature.
+
+2020-10-22  Pip Cet  <pipcet@gmail.com>
+
+       Handle Cairo errors in ftcrfont_open
+
+       * src/ftcrfont.c (ftcrfont_open): Handle Cairo errors (bug#41627).
+
+2020-10-22  Mattias Engdegård  <mattiase@acm.org>
+
+       Use lexical binding in fortran.el
+
+       * lisp/progmodes/fortran.el: Use lexical binding.
+       (fortran-make-syntax-propertize-function): Hoist use of lexical
+       variable to outside the 'eval' call.
+
+2020-10-22  Mattias Engdegård  <mattiase@acm.org>
+
+       * lisp/progmodes/cpp.el: Use lexical binding.
+
+2020-10-22  Werner Lemberg  <wl@gnu.org>
+
+       Update TUTORIAL.de
+
+       This also includes the minor fix for bug #44123.
+
+2020-10-21  Štěpán Němec  <stepnem@gmail.com>
+
+       unload-feature: Correct doc string to match info manual and reality
+
+       'unload-feature' doesn't try to "undo any additions the library has
+       made" to hooks, it tries to remove functions defined by the library
+       from hooks, no matter how they got there.
+
+       * lisp/loadhist.el (unload-feature): Correct the doc string.
+       * doc/lispref/loading.texi (Unloading): Clarify, fix typo.
+
+2020-10-21  Štěpán Němec  <stepnem@gmail.com>
+
+       unload-feature: Handle local hooks (bug#5293)
+
+       Buffer-local hooks were introduced in
+
+       1994-09-30T20:47:13+00:00!rms@gnu.org
+       0e4d378b32 (add-hook): Initialize default value and local value.
+
+       but 'unload-feature' has not been updated to handle them.
+
+       * lisp/loadhist.el (unload-feature): Handle local hooks (bug#5293).
+
+2020-10-21  Štěpán Němec  <stepnem@gmail.com>
+
+       unload-feature: Improve logic (don't repeat computation)
+
+       * lisp/loadhist.el (unload-feature): Don't do the same computation 
twice.
+
+2020-10-21  Mattias Engdegård  <mattiase@acm.org>
+
+       Convert artist.el to lexical binding
+
+       * lisp/textmodes/artist.el (artist-system, (artist-flood-fill):
+       Remove binding of the obsolete variables binary-process-input,
+       binary-process-output and input-queue.
+       (artist-down-mouse-1): Fix mistyped 'echo-keystrokes'; bind it to 0.
+       (artist-fill-rect, artist-fill-square, artist-pen-set-arrow-points)
+       (artist-spray-clear-circle, artist-spray-set-radius)
+       (artist-draw-ellipse-with-0-height, artist-fill-ellipse)
+       (artist-ff-is-topmost-line, artist-ff-is-bottommost-line)
+       (artist-set-arrow-points-for-2points, artist-key-undraw-continously)
+       (artist-key-undraw-poly, artist-key-undraw-1point)
+       (artist-key-undraw-2points, artist-key-do-continously-1point)
+       (artist-key-set-point-1point, artist-shift-has-changed)
+       (artist-mouse-draw-continously, artist-mouse-draw-1point)
+       (artist-submit-bug-report): Suppress warnings about unused parameters
+       which are there for function signature commonality.  Remove unused
+       variables.
+
+2020-10-21  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid rare crashes while producing line numbers
+
+       * src/xdisp.c (maybe_produce_line_number): Prevent freeing of
+       realized faces for as long as we are using lnum_face_id and
+       current_lnum_face_id for producing glyphs.  (Bug#44111)
+
+2020-10-21  Stefan Kangas  <stefan@marxist.se>
+
+       Tweak two time.el tests
+
+       * test/lisp/time-tests.el (time-tests-display-time-update--load)
+       (time-tests-display-time-update): Tweak tests.
+
+2020-10-21  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/time.el: Use lexical-binding.
+
+2020-10-21  Stefan Kangas  <stefan@marxist.se>
+
+       Add tests for time.el
+
+       * lisp/time.el (display-time-update--load)
+       (display-time-update--mail): Extract from...
+       (display-time-update): ...here.
+       * test/lisp/time-tests.el: New file.
+
+2020-10-21  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in bindat.el
+
+       * lisp/emacs-lisp/bindat.el: Use lexical-binding.
+       (bindat-raw, bindat-idx, bindat-unpack, bindat-pack): Adjust for
+       lexical-binding.
+       (bindat--unpack-group, bindat--length-group): Fix byte-compiler
+       warning about unused variables last and vlen.
+       (bindat--unpack-group, bindat--length-group, bindat--pack-group)
+       (bindat-format-vector): Quote function symbols as such.
+
+2020-10-21  Stefan Kangas  <stefan@marxist.se>
+
+       Remove some compat code from uudecode.el and binhex.el
+
+       * lisp/mail/uudecode.el (uudecode-char-int): Make obsolete.
+       (uudecode-decode-region-internal): Adjust callers.
+       * lisp/mail/binhex.el (binhex-char-int): Make obsolete.
+       (binhex-string-big-endian, binhex-string-little-endian)
+       (binhex-header): Adjust callers.
+
+2020-10-21  Stefan Kangas  <stefan@marxist.se>
+
+       Declare old compat aliases in tcl.el obsolete
+
+       * lisp/progmodes/tcl.el (tcl-uncomment-region)
+       (tcl-indent-for-comment, add-log-tcl-defun, indent-tcl-exp)
+       (calculate-tcl-indent, tcl-beginning-of-defun, tcl-end-of-defun)
+       (tcl-mark-defun, tcl-mark): Make obsolete.
+
+2020-10-21  Stefan Kangas  <stefan@marxist.se>
+
+       Add some top level domains
+
+       * lisp/mail/mail-extr.el (mail-extr-all-top-level-domains): Add
+       some geographic domains.
+
+2020-10-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Add emoji to etc/HELLO"
+
+       This reverts commit a1fcdeec25be87e8f97ac5c14e6fbf6a4d1eb2d4.
+
+       There was already an emoji in there.
+
+2020-10-21  Stefan Kangas  <stefan@marxist.se>
+
+       * test/lisp/vc/vc-bzr-tests.el: Use lexical-binding.
+
+2020-10-21  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in files-x-tests.el
+
+       * test/lisp/files-x-tests.el: Use lexical-binding.
+       (remote-null-device): Declare.
+
+2020-10-21  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in iso-ascii.el
+
+       * lisp/international/iso-ascii.el: Use lexical-binding.  Remove
+       redundant :group args.
+
+2020-10-21  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in hfy-cmap.el and add tests
+
+       * lisp/hfy-cmap.el: Use lexical-binding.
+       (hfy-cmap--parse-buffer): Extract from...
+       (htmlfontify-load-rgb-file): ...here.
+
+       * test/lisp/hfy-cmap-resources/rgb.txt:
+       * test/lisp/hfy-cmap-tests.el: New files.
+
+2020-10-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add emoji to etc/HELLO
+
+2020-10-21  Michael Albinus  <michael.albinus@gmx.de>
+
+       * etc/HELLO: Keep Javanese System.out.println("");
+
+2020-10-21  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/outline.el: Use lexical-binding
+
+       Remove redundant `group` arguments.
+       (outline-level): Move before first use.
+       (outline-mode): Use `setq-local`.
+       (outline-isearch-open-invisible-function): Give it a non-nil default.
+
+2020-10-20  Andrea Corallo  <akrl@sdf.org>
+
+       Sanitize eln filename when native compiling single functions
+
+       * lisp/emacs-lisp/comp.el (comp-spill-lap-function): Fix
+       temporary eln name generation.
+
+       * test/src/comp-tests.el (free-fun-silly-name): New testcase.
+
+2020-10-20  Andrea Corallo  <akrl@sdf.org>
+
+       Have `native-compile' do not expose `with-late-load' parameter
+
+       This is really for internal use only by deferred compilation.
+
+       * lisp/emacs-lisp/comp.el (comp-trampoline-compile)
+       (comp-run-async-workers): Make use of `comp--native-compile'.
+       (comp--native-compile): New function.
+       (native-compile, batch-native-compile): Make use of
+       `comp--native-compile'.
+
+2020-10-20  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in m4-mode.el
+
+       * lisp/progmodes/m4-mode.el: Use lexical-binding.  Remove redundant
+       :group args.
+       * lisp/progmodes/m4-mode.el (m4-m4-buffer, m4-m4-region): Quote
+       function symbols as such.
+
+2020-10-20  Stefan Kangas  <stefan@marxist.se>
+
+       Make more load-hooks obsolete (Bug#21563)
+
+       * lisp/progmodes/dcl-mode.el (dcl-mode):
+       * lisp/progmodes/idlw-complete-structtag.el: Recommend
+       with-eval-after-load instead of load-hooks.
+       * lisp/calc/calc-ext.el (calc-ext-load-hook):
+       * lisp/emacs-lisp/bytecomp.el (bytecomp-load-hook):
+       * lisp/emacs-lisp/cl-extra.el (cl-extra-load-hook):
+       * lisp/emacs-lisp/cl-macs.el (cl-macs-load-hook):
+       * lisp/emacs-lisp/cl-seq.el (cl-seq-load-hook):
+       * lisp/gnus/message.el (message-load-hook):
+       * lisp/gnus/nnheader.el (nnheader-load-hook):
+       * lisp/gnus/nnmail.el (nnmail-load-hook):
+       * lisp/progmodes/dcl-mode.el (dcl-mode-load-hook):
+       * lisp/textmodes/tex-mode.el (tex-mode-load-hook):
+       * lisp/whitespace.el (whitespace-load-hook): Obsolete for
+       with-eval-after-load.  Note that these variables are never declared,
+       but the byte-compiler will still warn about them if used.
+
+2020-10-20  Stefan Kangas  <stefan@marxist.se>
+
+       byte-compile-file: Make optional LOAD argument obsolete
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-file): Declare optional
+       LOAD argument obsolete.  Adjust callers.  (Bug#38072)
+       (byte-recompile-file): Declare optional LOAD argument obsolete.
+       * doc/lispref/compile.texi (Compilation Functions): Update
+       documentation to reflect above obsoletion.
+       * etc/NEWS: Announce above obsoletion.
+
+2020-10-20  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Simplify regexp in last change to woman.el
+
+       * lisp/woman.el (woman-decode-region): Use simpler character
+       alternative instead of alternation.
+
+2020-10-20  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Simplify syntax of shortdoc face specs
+
+       * lisp/emacs-lisp/shortdoc.el: Remove unused dependency.
+       (shortdoc-section, shortdoc-example): Use newer (DISPLAY . PLIST)
+       face spec syntax.
+
+2020-10-20  Stefan Kangas  <stefan@marxist.se>
+
+       Tweak test data for signed package installation
+
+       * test/lisp/emacs-lisp/package-resources/signed/signed-bad-1.0.el:
+       * test/lisp/emacs-lisp/package-resources/signed/signed-good-1.0.el:
+       Use lexical-binding.
+       * test/lisp/emacs-lisp/package-resources/signed/update-signatures.sh:
+       New file.
+       * test/lisp/emacs-lisp/package-resources/key.pub:
+       * test/lisp/emacs-lisp/package-resources/key.sec: Add new key.
+       * test/lisp/emacs-lisp/package-resources/signed/signed-good-1.0.el.sig:
+       * test/lisp/emacs-lisp/package-resources/signed/archive-contents.sig:
+       Update signatures using new key.
+
+2020-10-20  Mattias Engdegård  <mattiase@acm.org>
+
+       * lisp/textmodes/picture.el: Use lexical binding.
+
+2020-10-20  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid assertion violations in malformed Unicode escapes
+
+       * src/lread.c (read_escape): Produce better diagnostic for
+       malformed \u Unicode escapes, while avoiding assertion violation
+       when READCHAR returns -1 because the input is exhausted.
+       (Bug#44084)
+
+2020-10-20  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/language/utf-8-lang.el: Use lexical-binding.
+
+2020-10-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak the documentation for define-obsolete-variable-alias
+
+       * doc/lispref/variables.texi (Variable Aliases): Actually describe
+       the macro parameters (bug#44088).
+
+       * lisp/emacs-lisp/byte-run.el (define-obsolete-variable-alias):
+       Ditto (bug#44088).
+
+2020-10-20  Masahiro Nakamura  <tsuucat@icloud.com>
+
+       Fix some mpc.el updating quirks
+
+       * lisp/mpc.el (mpc-songs-jump-to): Update the status buffer.
+
+       * lisp/mpc.el (mpc-stop): M-x mpc-stop clears playlist queue. So
+       updating *MPC-Songs* buffer is useful.
+
+       * lisp/mpc.el (mpc-cmd-delete): I noticed M-x mpc-playlist-delete
+       always messages “Deleted 1 songs” even if playlist queue has more
+       than one songs.  This is because mpc-cmd-delete’s sort modifies
+       songs-poss by side effect.  Using copy-sequence fixes this (bug#44093).
+       * lisp/mpc.el (mpc-cmd-move): Ditto.
+
+2020-10-20  Jim Blandy  <jimb@red-bean.com>
+
+       Man highlighting: Don't occasionally bold entire sections.
+
+       * lisp/ansi-color.el (ansi-color-apply-on-region): Always save a
+       restart position in ansi-color-context-region if the region ends with
+       highlighting active.
+
+2020-10-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Preserve all `eval' elements from both .dir-locals files
+
+       * lisp/files.el (dir-locals-read-from-dir): Preserve all `eval'
+       elements from both .dir-locals files (bug#44066).
+
+2020-10-20  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/image-file.el: Use lexical-binding.
+
+2020-10-20  Stefan Kangas  <stefan@marxist.se>
+
+       Make a bookmark test more robust
+
+       * test/lisp/bookmark-tests.el (bookmark-tests-insert-annotation):
+       Make test more robust by not being timing dependent.
+
+2020-10-19  Stefan Kangas  <stefan@marxist.se>
+
+       Add command package-menu-filter-upgradable
+
+       * lisp/emacs-lisp/package.el (package-menu-filter-upgradable):
+       New command.  (Bug#41436)
+       (package-menu-mode-map): Bind the new command.
+       * doc/emacs/package.texi (Package Menu): Document the new command.
+
+2020-10-19  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/python.el: Bump version to release the f-string support
+
+2020-10-19  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/mail/rfc2231.el (rfc2231-decode-encoded-string): Fix match data 
error
+
+       Get (match-string 3 string) earlier, in case 
`mm-charset-to-coding-system`
+       clobbers the match data.
+       Also, check that `string-match` succeeded before using its match data.
+
+2020-10-19  Protesilaos Stavrou  <info@protesilaos.com>
+
+       Fix documentation of the Modus Themes (Bug#43944)
+
+       * doc/misc/modus-themes.texi (Installation): Remove reference to MELPA.
+       (Top)
+       (Install from the archives, GNU Guix)
+       (Load at a given time or at sunset/sunrise)
+       (Configure options prior to loading, Command prompts)
+       (Headings' font, Will NOT be supported): Fix spelling, wording,
+       markup.
+       (Acknowledgements): Spell contributor's surname correctly.
+
+2020-10-19  Stefan Kangas  <stefan@marxist.se>
+
+       Make auto-revert-mode tests run faster
+
+       * test/lisp/autorevert-tests.el (auto-revert--timeout): Make into
+       defun and shorten timeout by a factor 10.
+       (auto-revert--wait-for-revert): Cut timeouts in half.
+       (with-auto-revert-test): New macro to set timeout to 0.1.
+       (auto-revert-tests--write-file): New defun.
+       (auto-revert-test00-auto-revert-mode)
+       (auto-revert-test01-auto-revert-several-files)
+       (auto-revert-test02-auto-revert-deleted-file)
+       (auto-revert-test03-auto-revert-tail-mode)
+       (auto-revert-test04-auto-revert-mode-dired)
+       (auto-revert-test05-global-notify)
+       (auto-revert-test06-write-file): Adapt test to run faster.  Remove
+       :expensive-test marks.
+
+       This was discussed in:
+       https://lists.gnu.org/r/emacs-devel/2020-10/msg01233.html
+
+2020-10-19  Michael Albinus  <michael.albinus@gmx.de>
+
+       Further clarification of directory-files* doc
+
+       * doc/lispref/files.texi (Contents of Directories):
+       Precise description of MATCH-REGEXP of directory-files.  Add
+       directory-files-no-dot-files-regexp.
+
+       * lisp/files.el (directory-files-no-dot-files-regexp): Revert last fix.
+
+       * src/dired.c (Fdirectory_files)
+       (Fdirectory_files_and_attributes): Fix wording in docstring.
+
+2020-10-19  Mattias Engdegård  <mattiase@acm.org>
+
+       Keep track of matching rules in compilation-mode
+
+       When matching messages in compilation-mode, keep track of the rule
+       employed for each match.  This facilitates debugging and allows us to
+       verify that each test case really exercises the rule that we expect it
+       to.
+
+       Naturally this uncovered several test cases that didn't check what the
+       author thought they did; the rules affixed to
+       compile-tests--test-regexps-data are those actually used, so that the
+       tests still pass.
+
+       * lisp/progmodes/compile.el (compilation--message): Add 'rule' slot.
+       (compilation-directory-properties, compilation-error-properties)
+       (compilation-internal-error-properties, compilation-parse-errors)
+       (compilation--compat-parse-errors): Set the rule slot.
+       * test/lisp/progmodes/compile-tests.el 
(compile-tests--test-regexps-data)
+       (compile-tests--grep-regexp-testcases)
+       (compile-tests--grep-regexp-tricky-testcases): Add rules to test cases.
+       (compile--test-error-line): Check that the rule matches what we expect.
+       (compile-test-grep-regexps): Adapt to test case format.
+       Remove now superfluous ert-info.
+
+2020-10-19  Mattias Engdegård  <mattiase@acm.org>
+
+       Hoist some loop-invariant variable bindings in compile.el
+
+       * lisp/progmodes/compile.el (compilation-parse-errors):
+       Hoist the binding of case-fold-search and a memq call out of
+       the loop, eliminating a minor but unnecessary quadratic term.
+
+2020-10-19  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/info.el: Remove redundant :group args.
+
+2020-10-19  Stefan Kangas  <stefan@marxist.se>
+
+       Improve Info-streamline-headings defaults
+
+       * lisp/info.el (Info-streamline-headings): Improve defaults.  These
+       produce somewhat more consistent results on my system, and seems
+       slightly more in line with current GNU practices.  For example, gcc
+       uses the "Software development" heading instead of "Programming".
+
+2020-10-19  dickmao  <none>
+
+       `ffap-gopher-at-point' interminable without newlines
+
+       * lisp/ffap.el (ffap-gopher-at-point): Stop when we get to the end
+       of the buffer.
+       * test/lisp/ffap-tests.el (ffap-test-no-newlines): Ensure
+       termination for corner case (bug#44048).
+
+2020-10-19  Robert Pluim  <rpluim@gmail.com>
+
+       Explain difference between Unicode and Emacs scripts
+
+       * doc/lispref/nonascii.texi (Character Properties): Document that
+       Emacs' scripts and Unicode's scripts do not necessarily
+       correspond.
+
+2020-10-19  Harald Jörg  <haj@posteo.de>
+
+       cperl-mode: Delete a misleading comment, add tests for verification
+
+       * lisp/progmodes/cperl-mode.el: Delete a comment which explains a
+       bug which has been fixed a long time ago (bug#44073).
+       * test/lisp/progmodes/cperl-mode-tests.el
+       (cperl-mode-fontify-punct-vars): Add regression tests to verify
+       that fontification of punctuation variables doesn't start strings.
+
+2020-10-19  Yuan Fu  <casouri@gmail.com>
+
+       Handle "Before first headings" error in outline-cycle
+
+       * lisp/outline.el (outline-before-first-heading): New error.
+       (outline-back-to-heading): Signal the new error.
+       (outline-cycle): Ignore the error.
+       (outline-cycle-buffer): Simply pass 1 to 'outline-hide-sublevels'
+       (bug#41130).
+
+2020-10-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Ffunction doc string clarification
+
+       * src/eval.c (Ffunction): Mention that `function' isn't quite like
+       `quote' in non-bytecompile circumstances, too (bug#41864).
+
+2020-10-19  Michael Albinus  <michael.albinus@gmx.de>
+
+       * src/dired.c (Fdirectory_files, Fdirectory_files_and_attributes):
+
+       Adapt docstring.
+
+2020-10-19  Michael Albinus  <michael.albinus@gmx.de>
+
+       * lisp/files.el (directory-files-no-dot-files-regexp): Adapt docstring.
+
+2020-10-18  Juri Linkov  <juri@linkov.net>
+
+       Add new choice 'keep' to next-error-message-highlight (bug#32676)
+
+       * lisp/simple.el (next-error-message-highlight): Add new choice 'keep'.
+       (next-error-message-highlight): Don't delete overlay when option is 
'keep'.
+
+2020-10-18  Juri Linkov  <juri@linkov.net>
+
+       * etc/HELLO: Add Belarusian and use Javanese script for Javanese 
(bug#43887)
+
+2020-10-18  Stefan Kangas  <stefan@marxist.se>
+
+       Add "Old-" prefix to "Version" header in more cases
+
+       These version numbers are historical accidents and not relevant today.
+       Ref: https://lists.gnu.org/r/emacs-devel/2020-03/msg00080.html
+
+2020-10-18  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer Lisp version of describer in help--describe-vector
+
+       * src/keymap.c (Fhelp__describe_vector):
+       * lisp/help.el (describe-map): Use Lisp versions of describe_command
+       and describe_translation.
+       * src/keymap.c (describe_command, describe_translation): Remove.
+       (describe_vector_basic): New function.
+
+2020-10-18  Stefan Kangas  <stefan@marxist.se>
+
+       Remove C version of substitute-command-keys
+
+       * src/doc.c (Fsubstitute_command_keys_old): Remove.
+       (syms_of_doc): Remove defsubr for Fsubstitute_command_keys_old.
+       * src/keymap.c (describe_map, describe_map_tree)
+       (describe_map_compare, describe_map_elt): Remove.
+       * src/keymap.h: Remove 'describe_map_tree'.
+       * test/lisp/help-tests.el (with-substitute-command-keys-test)
+       (help-tests-substitute-command-keys/compare)
+       (help-tests-substitute-command-keys/compare-all):
+       Don't test the C version of 'substitute-command-keys' removed
+       above.
+
+2020-10-18  Stefan Kangas  <stefan@marxist.se>
+
+       Prefer Lisp version of describe-map-tree
+
+       This is a prerequisite to remove the old C functions, and gives a
+       measured 3 ms slowdown on my machine, from 0.27s to 0.30s per call to
+       describe-buffer-bindings (average over 50 calls).
+
+       * src/keymap.c (Fdescribe_buffer_bindings): Call Lisp function
+       describe-map-tree instead of C function describe_map_tree.
+
+2020-10-18  Stefan Kangas  <stefan@marxist.se>
+
+       Improve substitute-command-keys performance
+
+       The previous conversion of describe_vector from C to Lisp for the
+       keymap and char table case lead to an unacceptable performance hit.
+       Moving back to the C version, as we do here, makes this function
+       around 50 times faster.
+
+       The Lisp version of `substitute-command-keys' was benchmarked using
+       the form `(documentation 'dired-mode)', which now takes less than 8 ms
+       on my machine.  This is around 16 times slower than the previous C
+       version.
+
+       Thanks to Stefan Monnier for helpful pointers on benchmarking.
+
+       * src/keymap.c (Fhelp__describe_vector): New defun to expose
+       describe_vector to Lisp for keymaps and char tables.
+       (syms_of_keymap): New defsubr for Fhelp__describe_vector.
+       * lisp/help.el (describe-map): Use above defun instead of Lisp
+       version.
+       (help--describe-vector): Remove defun; keep it commented out for now.
+
+2020-10-18  Stefan Kangas  <stefankangas@gmail.com>
+
+       Translate describe_vector to Lisp
+
+       * lisp/help.el (help--describe-vector): New Lisp implementation of
+       describe_vector.
+       * src/keymap.c (Fdescribe_vector_internal): Remove defun.
+       (syms_of_keymap): Remove defsubr for Fdescribe_vector_internal.
+
+2020-10-18  Stefan Kangas  <stefankangas@gmail.com>
+
+       Translate describe_map to Lisp
+
+       Third step in converting substitute-command-keys to Lisp.
+
+       * lisp/help.el (describe-map): New Lisp version of describe_map.
+       (help--describe-map-compare, help--describe-translation)
+       (help--describe-command, help--shadow-lookup): New helper
+       functions for describe-map.
+       (help--keymaps-seen, help--previous-description-column): New
+       variables.
+       * src/keymap.c
+       (Fkeymap__get_keyelt): New defun to expose get_keyelt to Lisp.
+       (Fdescribe_map_tree_old, Fdescribe_map): Remove defuns.
+       (Fdescribe_vector_internal): New defun to expose describe_vector to
+       Lisp in a way usable by describe-map.
+       (syms_of_keymap): New defsubrs for Fkeymap__get_keyelt and
+       Fdescribe_vector_internal.  Remove defsubrs for Fdescribe_map_tree_old
+       and Fdescribe_map.  Remove 'help--keymaps-seen'.
+
+       * test/lisp/help-tests.el
+       (help-tests-substitute-command-keys/shadow): Extend test.
+       (help-tests-substitute-command-keys/test-mode)
+       (help-tests-substitute-command-keys/compare-all)
+       (help-tests-describe-map-tree/no-menu-t)
+       (help-tests-describe-map-tree/no-menu-nil)
+       (help-tests-describe-map-tree/mention-shadow-t)
+       (help-tests-describe-map-tree/mention-shadow-nil)
+       (help-tests-describe-map-tree/partial-t)
+       (help-tests-describe-map-tree/partial-nil): New tests.
+
+2020-10-18  Stefan Kangas  <stefan@marxist.se>
+
+       Translate describe_map_tree to Lisp
+
+       This is the second step in converting substitute-command-keys to Lisp.
+
+       * lisp/help.el (describe-map-tree): New Lisp version of
+       describe_map_tree.
+       (substitute-command-keys): Update to use above function.
+       * src/keymap.c (Fdescribe_map): New defun to expose describe_map to
+       Lisp.
+       * src/keymap.c (syms_of_keymap): New variable 'help--keymaps-seen'; a
+       temporary kludge planned for removal.  New defsubr for Fdescribe_map.
+
+2020-10-18  Stefan Kangas  <stefankangas@gmail.com>
+
+       Add new Lisp implementation of substitute-command-keys
+
+       This is only the first step towards a full Lisp implementation, and
+       does not remove the old C code.  On the contrary, it is partly based
+       on using the old C code, which is to be replaced in steps.  This also
+       makes it easy to test that it produces the same output as the old.
+
+       * src/doc.c (Fsubstitute_command_keys_old): Rename from
+       Fsubstitute_command_keys.
+       (Fget_quoting_style): New defun to expose text_quoting_style to Lisp.
+       (syms_of_doc): Expose above symbols.
+       * lisp/help.el (substitute-command-keys): New Lisp version of
+       substitute-command-keys.  (Bug#8951)
+
+       * src/keymap.c
+       (Fdescribe_map_tree): New defun to expose describe_map_tree to Lisp.
+       (syms_of_keymap): New defsubr for Fdescribe_map_tree.
+
+       * src/keyboard.c (help_echo_substitute_command_keys):
+       * src/doc.c (Fdocumentation, Fdocumentation_property):
+       * src/print.c (print_error_message):
+       * src/syntax.c (Finternal_describe_syntax_value): Fix calls to use new
+       Lisp implementation of substitute-command-keys.
+
+       * test/src/doc-tests.el: Remove file.
+       * test/lisp/help-tests.el: Add tests for substitute-command-keys
+       copied from above file.
+
+2020-10-18  Mattias Engdegård  <mattiase@acm.org>
+
+       Strengthen js-mode indentation tests
+
+       Test not only that the indentation engine is idempotent but that it
+       will indent a file to the expected shape from scratch.
+
+       * test/lisp/progmodes/js-tests.el (js-tests--remove-indentation): New.
+       (js-deftest-indent): Extend test.
+
+2020-10-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix a misleading comment in Freplace_match
+
+       * src/search.c (Freplace_match): Fix a misleading comment
+       (bug#42424).
+
+2020-10-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Document the new smiley value
+
+       * doc/misc/gnus.texi (Smileys): Document the emoji smiley value.
+
+2020-10-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix up smiley emoji application to make it reversible
+
+       * lisp/gnus/smiley.el (smiley-region): Use text properties for the
+       emojis instead of rewriting the message.
+
+2020-10-18  Adam Sjøgren  <asjo@koldfront.dk>
+
+       Add support for emojis i smiley.el
+
+       * lisp/gnus/smiley.el (smiley-style): Add emoji
+       tag.
+       (smiley-emoji-regexp-alist): New defcustom.
+       (smiley-update-cache, smiley-region): Support emoji (non-image)
+       replacement (bug#43889).
+
+2020-10-18  Stefan Kangas  <stefan@marxist.se>
+
+       Make nxml-newline-and-indent argument optional
+
+       * lisp/nxml/nxml-mode.el (nxml-newline-and-indent): Make argument
+       optional to conform to 'comment-line-break-function'.  (Bug#40193)
+
+2020-10-18  Stefan Kangas  <stefan@marxist.se>
+
+       Minor improvements to emacsclient man page
+
+       * doc/man/emacsclient.1: Make flag descriptions into full sentences to
+       be more consistent.
+
+2020-10-18  Stefan Kangas  <stefan@marxist.se>
+
+       Convert manual js indent tests to unit tests
+
+       * test/lisp/progmodes/js-tests.el (ert-x): Require.
+       (js-deftest-indent): New macro.  Use it to define tests for indenting
+       the below files.
+
+       * test/manual/indent/js-chain.js:
+       * test/manual/indent/js-indent-align-list-continuation-nil.js:
+       * test/manual/indent/js-indent-init-dynamic.js:
+       * test/manual/indent/js-indent-init-t.js:
+       * test/manual/indent/js.js:
+       * test/manual/indent/jsx-align-gt-with-lt.jsx:
+       * test/manual/indent/jsx-comment-string.jsx:
+       * test/manual/indent/jsx-indent-level.jsx:
+       * test/manual/indent/jsx-quote.jsx:
+       * test/manual/indent/jsx-self-closing.jsx:
+       * test/manual/indent/jsx-unclosed-1.jsx:
+       * test/manual/indent/jsx-unclosed-2.jsx:
+       * test/manual/indent/jsx.jsx: Move from here...
+       * test/lisp/progmodes/js-resources/js-chain.js:
+       * 
test/lisp/progmodes/js-resources/js-indent-align-list-continuation-nil.js:
+       * test/lisp/progmodes/js-resources/js-indent-init-dynamic.js:
+       * test/lisp/progmodes/js-resources/js-indent-init-t.js:
+       * test/lisp/progmodes/js-resources/js.js:
+       * test/lisp/progmodes/js-resources/jsx-align-gt-with-lt.jsx:
+       * test/lisp/progmodes/js-resources/jsx-comment-string.jsx:
+       * test/lisp/progmodes/js-resources/jsx-indent-level.jsx:
+       * test/lisp/progmodes/js-resources/jsx-quote.jsx:
+       * test/lisp/progmodes/js-resources/jsx-self-closing.jsx:
+       * test/lisp/progmodes/js-resources/jsx-unclosed-1.jsx:
+       * test/lisp/progmodes/js-resources/jsx-unclosed-2.jsx:
+       * test/lisp/progmodes/js-resources/jsx.jsx: ...to here.
+
+2020-10-18  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/progmodes/ld-script.el: Use lexical-binding.
+
+       * lisp/progmodes/mixal-mode.el: Fix typos.
+
+2020-10-18  Jose A Ortega Ruiz  <jao@gnu.org>
+
+       Set jao@gnu.org as maintainer of mixal-mode.el
+
+       * lisp/progmodes/mixal-mode.el: Set jao@gnu.org as maintainer of
+       mixal-mode.el.  (Bug#44037)
+
+2020-10-18  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in mixal-mode.el
+
+       * lisp/progmodes/mixal-mode.el: Use lexical-binding.  (Bug#44037)
+
+2020-10-17  Juri Linkov  <juri@linkov.net>
+
+       Extend next-error-message face to the edge of the window (bug#32676)
+
+       * lisp/simple.el (next-error-message): Add ':extend t' to this face.
+       (next-error-message-highlight): Put overlay over the newline as well.
+
+2020-10-17  J. Scott Berg  <jsberg-bnl@outlook.com>  (tiny change)
+
+       Fix bad dimensions of initial frame on VcXsrv
+
+       * src/xterm.c (handle_one_xevent) [USE_GTK]: Don't obey
+       ConfigureNotify events if the frame is not visible.  (Bug#44002)
+
+2020-10-17  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       18c0e20bea (origin/emacs-27) Improve documentation of 'Info-hide-note...
+
+2020-10-17  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       65078e0a76 * lisp/info.el (Info-hide-note-references): Doc fix.  (Bug...
+       30305b543d Make lisp/progmodes/js.el dependent on CC Mode in the Make...
+       c37b2a9b42 Yet another fix for 'set-minibuffer-message'
+       72dd911981 Fix posn-at-x-y in builds --without-x
+       ace25f2066 Clarify the seq-reduce documentation
+       7d598e281d Make tramp-completion-reread-directory-timeout obsolete (B...
+       2c31ce18ea Fix 'message' when there's active minibuffer on another frame
+
+       # Conflicts:
+       #       doc/misc/tramp.texi
+       #       etc/NEWS
+
+2020-10-17  Mattias Engdegård  <mattiase@acm.org>
+
+       * etc/NEWS: Mention new lexical binding conversion aid.
+
+2020-10-17  Protesilaos Stavrou  <info@protesilaos.com>
+
+       Update Modus themes' NEWS entry
+
+       * etc/NEWS: Reword entry about new 'modus-operandi' and
+       'modus-vivendi' themes.  Include reference to their manual.
+
+2020-10-17  Jose A. Ortega Ruiz  <jao@gnu.org>
+
+       mixal-mode: add missed instructions
+
+       Synchronises with latest released GNU MDK 1.2.11
+
+       * lisp/progmodes/mixal-mode.el (mixal-operation-codes-alist):
+       Add missed instructions: SLB,SRB,JAE,JAO,JXE,JXO.
+
+2020-10-17  Stefan Kangas  <stefan@marxist.se>
+
+       Base bookmark-bmenu-mode on tabulated-list-mode (Bug#39293)
+
+       Rewriting bookmark-bmenu-mode to be based on 'tabulated-list-mode'
+       allows us to greatly simplify the code in several cases.  In addition,
+       we get some features for free, such as sorting by column.
+
+       The only functional step backwards is that we no longer support the
+       optional "inline" header line, a bookmark.el-specific feature to have
+       a header without using 'header-line-format'.  This feature is believed
+       to be not very useful or widely used.
+
+       * lisp/bookmark.el (tabulated-list): Require.
+       (bookmark-bmenu-mode): Inherit from 'tabulated-list-mode' instead of
+       'special-mode' and make the necessary changes to support that.
+       (bookmark-bmenu-mode-map): Inherit from 'tabulated-list-mode-map'
+       instead of 'special-mode-map'.  Remove now duplicate key bindings.
+       (bookmark-bmenu--revert): New function to show the bookmark list using
+       'tabulated-list-mode'.
+       (bookmark-bmenu-list): Simplify by using above new function.
+       (bookmark-bmenu-bookmark): Adapt to 'tabulated-list-mode'.
+       (bookmark-bmenu--name-predicate)
+       (bookmark-bmenu--file-predicate): New functions used by
+       'tabulated-list-mode' to sort.
+
+       (bookmark-bmenu-set-header): Redefine as obsolete function alias for
+       'tabulated-list-init-header'.
+       (bookmark-bmenu-toggle-filenames, bookmark-bmenu-show-filenames)
+       (bookmark-bmenu-hide-filenames, bookmark-bmenu-mark)
+       (bookmark-bmenu-mark-all, bookmark-bmenu-unmark-all)
+       (bookmark-bmenu-delete-all, bookmark-bmenu-unmark)
+       (bookmark-bmenu-delete, bookmark-bmenu-delete-backwards): Simplify now
+       that we can depend on 'tabulated-list-mode' to do more work.
+
+       (bookmark-bmenu-use-header-line)
+       (bookmark-bmenu-inline-header-height): Declare variables relating to
+       the now unsupported "inline" header obsolete.
+       (bookmark-bmenu-ensure-position)
+       (bookmark-bmenu-execute-deletions): Remove code to handle "inline" 
header.
+
+       * test/lisp/bookmark-tests.el
+       (bookmark-test-bmenu-edit-annotation/show-annotation)
+       (bookmark-test-bmenu-unmark, bookmark-test-bmenu-mark): Update tests
+       for minor changes when using 'tabulated-list-mode'.
+
+2020-10-17  Mattias Engdegård  <mattiase@acm.org>
+
+       Add aid for finding missing dynamic variable declarations
+
+       Find lexical use of variables that are dynamically declared in other
+       files by recording 'defvar' declarations in files that can be read
+       in by the compiler in a second compilation.  This is particularly
+       useful when converting code to use lexical-binding.
+
+       The facility is controlled by setting environment variables:
+
+        EMACS_GENERATE_DYNVARS -- set to non-empty to generate a .dynvars file
+                                  corresponding to each .elc.
+        EMACS_DYNVARS_FILE     -- set to the name of a .dynvars file to use
+                                  as defvar information during compilation,
+                                  enabling the new warnings.
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile--known-dynamic-vars)
+       (byte-compile--seen-defvars): New variables.
+       (byte-compile-warning-types): Add lexical-dynamic warning.
+       (byte-compile--load-dynvars, byte-compile--warn-lexical-dynamic):
+       New functions.
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-file, 
byte-compile--declare-var)
+       (byte-compile-lambda, byte-compile-bind): Add dynamic variable loads,
+       dumps and checks.
+       * doc/lispref/variables.texi (Converting to Lexical Binding): Document.
+
+2020-10-17  Stefan Kangas  <stefan@marxist.se>
+
+       * test/lisp/mail/rfc822-tests.el: New file.
+
+       * lisp/url/url-vars.el: Use lexical-binding.
+
+2020-10-17  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of 'Info-hide-note-references' in info.texi
+
+       * doc/misc/info.texi (Help-Xref): Improve the wording.
+       (Emacs Info Variables): Update the documentation of
+       'Info-hide-note-references'.  (Bug#44043)
+
+2020-10-17  Pierre Neidhardt  <mail@ambrevar.xyz>
+
+       New shell-mode command to narrow to the command under point
+
+       * lisp/shell.el (shell--prompt-end-position)
+       (shell--prompt-begin-position): Helper functions.
+
+       * lisp/shell.el (shell-narrow-to-prompt): New command and
+       keystroke (bug#41784).
+
+2020-10-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make woman ignore the new groff kerning operators
+
+       * lisp/woman.el (woman-decode-region): Ignore the new groff
+       kerning operators (bug#42219).
+
+2020-10-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix `browse-url-of-dired'
+
+       * lisp/net/browse-url.el (browse-url-emacs): Make the
+       `browse-url-of-dired' command work again after the browse-emacs
+       changes (bug#42429).
+
+2020-10-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Avoid infloop in which-function-mode when a vc file has changed
+
+       * lisp/vc/diff-mode.el (diff-find-source-location): Avoid warnings
+       when called from which-function-mode and the file has changed
+       (bug#42818).
+
+2020-10-17  Stefan Kangas  <stefan@marxist.se>
+
+       * admin/release-process: Add note to update files from upstream.
+
+       (cherry picked from commit 86dd9d12aa5a273da2efd4ce8c6e35ae343f1494)
+
+2020-10-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix narrow-to-defun in f90-mode
+
+       * lisp/progmodes/f90.el (f90-beginning-of-subprogram): Make
+       narrow-to-defun work better (bug#44042).
+
+2020-10-17  Eli Zaretskii  <eliz@gnu.org>
+
+       * lisp/info.el (Info-hide-note-references): Doc fix.  (Bug#44043)
+
+2020-10-17  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-10-17  Stefan Kangas  <stefan@marxist.se>
+
+       * admin/release-process: Add note to update files from upstream.
+
+2020-10-16  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * doc/lispref/variables.texi (Converting to Lexical Binding): New 
section
+
+       Extract it from `Using Lexical Binding` and extend it a bit.
+
+2020-10-16  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/python.el: Teach f-strings to `font-lock`
+
+       (python--f-string-p, python--font-lock-f-strings): New functions.
+       (python-font-lock-keywords-maximum-decoration): Use them.
+
+2020-10-16  Alan Mackenzie  <acm@muc.de>
+
+       Make lisp/progmodes/js.el dependent on CC Mode in the Makefile.
+
+       This will prevent version mismatches between compile time and runtime
+       versions.  This fixes bug #43037.
+
+       * lisp/Makefile.in: Make js.el dependent on cc-{defs,engine,mode}.elc.
+
+2020-10-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       indent-rigidly doc string clarification
+
+       * lisp/indent.el (indent-rigidly): Note that the command
+       deactivates the mark (bug#42842).
+
+2020-10-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make erc expand the final abbrev
+
+       * lisp/erc/erc.el (erc-send-current-line): Expand abbrevs at the
+       end of lines (bug#42854).
+
+2020-10-16  Michael Albinus  <michael.albinus@gmx.de>
+
+       Make last change in tramp-archive-tests.el backward compatible
+
+       * test/lisp/net/tramp-archive-tests.el (ert-resource-directory-format)
+       (ert-resource-directory-trim-left-regexp)
+       (ert-resource-directory-trim-right-regexp, ert-resource-directory)
+       (ert-resource-file): Define if they don't exist.
+
+2020-10-16  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix documentation of Modus Themes
+
+       * doc/misc/modus-themes.texi (Install from the archives)
+       (No mixed fonts): Remove references to MELPA.
+       (How do the themes look like)
+       (Enable and load, Load automatically)
+       (Configure options prior to loading, Customisation Options)
+       (No mixed fonts, Command prompts, Mode line, Completion UIs)
+       (Fringes, Line highlighting, Matching parentheses, Diffs)
+       (Org mode blocks, Heading styles, Tweak colors (DIY))
+       (Org user faces (DIY), Supported packages)
+       (Will NOT be supported, Note for ERC escaped color sequences)
+       (Note on shr colors, Note for Helm grep)
+       (Note on vc-annotate-background-mode, Sources of the themes): Fix
+       spelling, wording, and markup.
+
+2020-10-16  Eli Zaretskii  <eliz@gnu.org>
+
+       Revert "* doc/emacs/ack.texi (Acknowledgments): Remove now deleted 
files."
+
+       This reverts commit 731a26bb50aabeb2c0512f0e45b3cda76029a590.
+
+       We don't support rewriting history!
+       People who contributed to Emacs development should have their
+       contributions remain acknowledged forever, even if the files
+       to which they contributed are deleted at some point.
+
+2020-10-16  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix file-name problems in several tests
+
+       * test/lisp/saveplace-tests.el
+       (saveplace-test-forget-unreadable-files):  Use file-truename, to
+       avoid false negatives when file names are not 'equal' as strings,
+       but point to the same file.
+       * test/lisp/emacs-lisp/edebug-tests.el (edebug-tests-with-normal-env)
+       (edebug-tests-run-macro):
+       * test/lisp/emacs-lisp/testcover-tests.el
+       (testcover-tests-markup-region, testcover-tests-run-test-case):
+       Bind find-file-suppress-same-file-warnings to  a non-nil value, to
+       avoid warnings about "same-file-names", at least on MS-Windows,
+       due to 8+3 aliases.
+
+2020-10-16  Stefan Kangas  <stefan@marxist.se>
+
+       Remove some Emacs 19 compat code
+
+       * lisp/type-break.el (type-break-time-stamp): Remove Emacs 19
+       compat code.
+
+2020-10-16  Stefan Kangas  <stefan@marxist.se>
+
+       Remove some references to Emacs 18 and 19
+
+       * doc/misc/forms.texi (Modifying Forms Contents, Error Messages):
+       * lisp/arc-mode.el:
+       * lisp/emacs-lisp/edebug.el (edebug-temp-display-freq-count):
+       * lisp/type-break.el: Remove some references to Emacs 18 and 19.
+
+2020-10-16  Stefan Kangas  <stefan@marxist.se>
+
+       * doc/emacs/ack.texi (Acknowledgments): Remove now deleted files.
+
+       This is in line with an ack.texi comment that says to "Remove things
+       that are no longer distributed."  Most files in this list were removed
+       many years ago.
+
+2020-10-16  Stefan Kangas  <stefan@marxist.se>
+
+       Fix building modus-themes Info manual
+
+       * doc/misc/Makefile.in (INFO_COMMON): Add modus-themes.
+       * doc/misc/modus-themes.texi: Adapt to fit Emacs conventions.
+
+2020-10-16  Protesilaos Stavrou  <info@protesilaos.com>
+
+       Update modus-operandi, modus-vivendi to 0.13.0
+
+       * etc/themes/modus-operandi-theme.el: Update to version 0.13.0.
+
+       * etc/themes/modus-vivendi-theme.el: Update to version 0.13.0.
+
+       * doc/misc/modus-themes.texi: Include new texinfo documentation for
+       modus-operandi and modus-vivendi themes.  (Bug#43944)
+
+2020-10-16  Mattias Engdegård  <mattiase@acm.org>
+
+       * lisp/emacs-lisp/backquote.el: Use lexical binding.
+
+2020-10-16  Stefan Kangas  <stefan@marxist.se>
+
+       Use new resource directory macros in tests (Bug#43792)
+
+       * test/lisp/bookmark-tests.el (bookmark-tests-data-dir):
+       * test/lisp/calendar/todo-mode-tests.el (todo-test-data-dir):
+       * test/lisp/net/dbus-tests.el (dbus--tests-dir):
+       * test/lisp/emacs-lisp/edebug-tests.el
+       (edebug-tests-sample-code-file):
+       * test/lisp/emacs-lisp/package-tests.el
+       (package-test-fake-contents-file):
+       * test/lisp/emacs-lisp/shadow-tests.el (shadow-tests-data-directory):
+       * test/lisp/emacs-lisp/testcover-tests.el
+       (testcover-tests-file-dir, testcover-tests-test-cases):
+       * test/lisp/mail/uudecode-tests.el (uudecode-tests-data-dir):
+       * test/lisp/net/tramp-archive-tests.el
+       (tramp-archive-test-resource-directory):
+       * test/lisp/pcmpl-linux-tests.el (pcmpl-linux-tests-data-dir):
+       * test/lisp/progmodes/cperl-mode-tests.el
+       (cperl-mode-tests-data-directory):
+       * test/lisp/progmodes/flymake-tests.el
+       (flymake-tests-data-directory):
+       * test/lisp/progmodes/ruby-mode-tests.el (ruby-mode-tests-data-dir):
+       * test/lisp/saveplace-tests.el (saveplace-tests-dir):
+       * test/lisp/textmodes/css-mode-tests.el (css-mode-tests-data-dir):
+       Remove.
+
+       * test/lisp/bookmark-tests.el (bookmark-tests-bookmark-file)
+       (bookmark-tests-example-file, bookmark-tests-bookmark-file-list):
+       * test/lisp/calendar/todo-mode-tests.el (todo-test-file-1)
+       (todo-test-archive-1, with-todo-test, todo-test--add-file):
+       * test/lisp/custom-tests.el (custom--test-theme-variables):
+       * test/lisp/net/dbus-tests.el (dbus--test-introspect):
+       * test/lisp/emacs-lisp/edebug-tests.el (edebug-tests-setup-code-file):
+       * test/lisp/emacs-lisp/package-tests.el (package-test-data-dir)
+       (package-test-desc-from-buffer, package-test-install-single)
+       (package-test-macro-compilation)
+       (package-test-install-prioritized)
+       (package-test-install-multifile, package-test-update-archives)
+       (package-test-update-archives-async)
+       (package-test-update-archives/ignore-nil-entry)
+       (package-test-signed, package-x-test-upload-buffer)
+       (package-x-test-upload-new-version):
+       * test/lisp/emacs-lisp/shadow-tests.el (shadow-case-insensitive):
+       * test/lisp/emacs-lisp/testcover-tests.el
+       (testcover-tests-build-test-cases):
+       * test/lisp/mail/uudecode-tests.el (uudecode-tests-encoded-str)
+       (uudecode-tests-decoded-str):
+       * test/lisp/net/tramp-archive-tests.el
+       (tramp-archive-test-file-archive)
+       (tramp-archive-test-directory):
+       * test/lisp/pcmpl-linux-tests.el (pcmpl-linux-test-fs-types)
+       (pcmpl-linux-test-mounted-directories):
+       * test/lisp/progmodes/cperl-mode-tests.el (cperl-mode-test-bug-10483)
+       (cperl-mode-test-indent-styles):
+       * test/lisp/progmodes/flymake-tests.el
+       (flymake-tests--call-with-fixture):
+       * test/lisp/progmodes/ruby-mode-tests.el
+       (ruby--indent/converted-from-manual-test):
+       * test/lisp/saveplace-tests.el
+       (saveplace-test-save-place-to-alist/dir)
+       (saveplace-test-load-alist-from-file):
+       * test/lisp/textmodes/css-mode-tests.el (css-mode-test-indent): Adjust
+       to use new resource directory macros.
+
+2020-10-16  Stefan Kangas  <stefan@marxist.se>
+
+       Add ert macros to get resource file names (Bug#43792)
+
+       * lisp/emacs-lisp/ert-x.el (subr-x): Require.
+       (ert-resource-dir, ert-resource-file): New macros to get the file name
+       of the resource directory belonging to a test.
+       (ert-resource-dir-format, ert-resource-dir-trim-left-regexp)
+       (ert-resource-dir-trim-right-regexp): New variables.
+
+2020-10-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix previous gnus-icalendar sanitization
+
+       * lisp/gnus/gnus-icalendar.el (gnus-icalendar-event-from-ical):
+       Fix previous change -- respect nil values passed in.
+
+2020-10-16  Stephen Berman  <stephen.berman@gmx.net>
+
+       Adjust some tests so that they work in symlinked environs
+
+       * test/lisp/help-fns-tests.el (help-fns-test-lisp-macro)
+       (help-fns-test-lisp-defsubst):
+       * test/lisp/emacs-lisp/cl-generic-tests.el
+       (cl-generic-tests--method-files--finds-methods): Adjust test so
+       that they work in a symlinked environment (bug#43004).
+       (cl-generic-tests--method-files--finds-methods): Use file-truename
+       so that this works in a symlinked environment (bug#43004).
+
+2020-10-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Sanitize ical data in gnus-icalendar-event-from-ical
+
+       * lisp/gnus/gnus-icalendar.el (gnus-icalendar-event-from-ical):
+       Sanitise the data before passing it on to the constructor.  This
+       avoids backtraces on icals with extra, unknown slots (bug#43057).
+
+2020-10-16  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Substitute command keys in button help-echo values
+
+       * lisp/button.el (button--help-echo): Pass resulting string through
+       substitute-command-keys for consistency with show-help-function.
+       * test/lisp/button-tests.el (button-tests--map): New test keymap.
+       (button--help-echo-string, button--help-echo-form)
+       (button--help-echo-function): Use it to test command key
+       substitution in help-echo strings (bug#43070).
+
+2020-10-16  Eli Zaretskii  <eliz@gnu.org>
+
+       Yet another fix for 'set-minibuffer-message'
+
+       * lisp/minibuffer.el (set-minibuffer-message): Handle the case of
+       separate minibuffer-only frame.  Suggested by Gregory Heytings
+       <ghe@sdf.org>.
+
+2020-10-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make package-install-from-buffer maybe refresh the quickstart file
+
+       * lisp/emacs-lisp/package.el (package-install-from-buffer):
+       Refresh the quickstart file (bug#43237).  This makes this command
+       more consistent with package-install.
+
+2020-10-16  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix posn-at-x-y in builds --without-x
+
+       * src/keyboard.c (make_lispy_position): Don't exclude the
+       window_or_frame = frame case from TTY-only builds.  Reported by
+       Jared Finder <jared@finder.org>.
+
+       * doc/lispref/commands.texi (Click Events): Document the format of
+       POSITION in click events on the frame's internal border.
+
+2020-10-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       diff-update-on-the-fly doc string clarification
+
+       * lisp/vc/diff-mode.el (diff-update-on-the-fly): Mention what the
+       nil value does (bug#43297).
+
+2020-10-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Restore vc-revision-other-window buffer-changing behaviour
+
+       * lisp/vc/vc.el (vc-revision-other-window): This function used to
+       change the current buffer, but this was changed in the previous
+       patch for indirect buffer support.  Ensure that it still does
+       this, because this is what the callers expect (bug#44026).
+
+2020-10-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Doc string clarification for keep-lines
+
+       * lisp/replace.el (keep-lines): Note that REND isn't optional if
+       RSTART is given (bug#44021).
+
+2020-10-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a new variable to control Gnus Agent caching
+
+       * doc/misc/gnus.texi (Agent Variables): Document it.
+
+       * lisp/gnus/gnus-art.el (gnus-request-article-this-buffer): Ditto.
+
+       * lisp/gnus/gnus-async.el (gnus-async-article-callback): Use it.
+
+       * lisp/gnus/gnus.el (gnus-agent-eagerly-store-articles): New variable.
+
+       Includes work from Madhu <enometh@meer.net>.
+
+2020-10-16  Richard M Stallman  <rms@gnu.org>
+
+       Add way to prevent asking "increase specpdl size?"
+
+       * net/shr.el (shr-offer-extend-specpdl): New option, default t.
+       (shr-descend): If shr-offer-extend-specpdl is nil, don't even ask
+       whether to extend the specpdl, just signal error.
+
+2020-10-15  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/warnings.el (display-warning): Don't be so negative
+
+2020-10-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't display the warning buttons in bytecomp buffers
+
+       * lisp/emacs-lisp/warnings.el (display-warning): Don't do the
+       buttons in bytecomp buffers.
+
+2020-10-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make hi-lock-face-buffer more resilient
+
+       * lisp/hi-lock.el (hi-lock-face-buffer): If given a face name a
+       string, convert it to a symbol first, as later usage of this
+       expects a symbol and not a string (bug#43339).
+
+2020-10-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add some references to the microdocs in the comments in cperl-mode
+
+       * lisp/progmodes/cperl-mode.el: Tell the people reading the
+       comments how to read the docs explicitly (bug#1621).
+
+2020-10-15  David Engster  <deng@randomsample.de>
+
+       Search harder for file name matches in *compilation* buffers
+
+       * lisp/progmodes/compile.el (compilation-find-file): Use it (bug#14411).
+       (compilation-search-all-directories): New variable.
+
+2020-10-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make `C-x C-e' work more like `C-M-x' on defvar etc
+
+       * doc/emacs/building.texi (Lisp Eval): Document it.
+
+       * lisp/emacs-lisp/pp.el (pp-eval-last-sexp): Ditto.
+
+       * lisp/progmodes/elisp-mode.el (elisp--eval-last-sexp): Work more
+       like `eval-defun': Re-evaluate defvar/defcustom/defface forms.
+
+2020-10-15  Stefan Kangas  <stefankangas@gmail.com>
+
+       * doc/misc/efaq.texi: Remove reference to FTP.
+
+2020-10-15  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove some references to "in Emacs 21 or later"
+
+       * doc/misc/efaq.texi (Colors on a TTY, Disabling backups)
+       (Errors with init files, Backspace invokes help)
+       (Backspace invokes help): Remove some references to "in Emacs 21 or
+       later".  Now everyone can be assumed to use at least that version.
+
+2020-10-15  Stefan Kangas  <stefankangas@gmail.com>
+
+       Move emacsclient.1 file history further down
+
+       * doc/man/emacsclient.1: Move file history further down; it doesn't
+       need to be prominently displayed in the introductory paragraph.
+
+2020-10-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix undefined function in project-compile
+
+       * lisp/progmodes/project.el (project-compile): Require compile.el
+       before using functions from the file (bug#44009).
+
+2020-10-15  Andrea Corallo  <akrl@sdf.org>
+
+       Do not check eln timestamp as superseded by source hashing (bug#43532)
+
+       * src/lread.c (maybe_swap_for_eln): Remove eln file timestamp
+       check given is now unnecessary.
+       (openp): Update for new 'maybe_swap_for_eln' signature.
+
+2020-10-15  Mattias Engdegård  <mattiase@acm.org>
+
+       Remove dynamic declaration of 'save-match-data-internal'
+
+       * lisp/subr.el: Remove defvar which has no relevance today; it can
+       very well be a lexical variable.
+
+2020-10-15  Jeff Walsh  <fejfighter@gmail.com>
+
+       Fix segfault in xwidget when there is no title
+
+       * src/xwidget.c (Fxwidget_webkit_title): Pass empty string when no
+       title is returned (bug#43989).
+
+2020-10-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify the seq-reduce documentation
+
+       * doc/lispref/sequences.texi (Sequence Functions): Ditto.
+
+       * lisp/emacs-lisp/seq.el (seq-reduce): Clarify the order of the
+       arguments (bug#43995).
+
+2020-10-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix problem with next-error-message-highlight in *Occur*
+
+       * lisp/simple.el (next-error-message-highlight): This function is
+       called directly, so clean up the code a bit (bug#32676).
+       (next-error-found): Pass in the error buffer.
+
+2020-10-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix NEWS item for C-h R
+
+2020-10-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make Gnus more liberal when interpreting Face headers again
+
+       * lisp/gnus/gnus-fun.el (gnus-convert-face-to-png): Do it.
+
+       * lisp/gnus/gnus-util.el (gnus-base64-repad): Allow not checking
+       anything, but just repadding.
+
+2020-10-15  Richard M Stallman  <rms@gnu.org>
+
+       Clarify wording
+
+       Clarify doc string of line-to-top-of-window.
+
+2020-10-15  Richard M Stallman  <rms@gnu.org>
+
+       Handle retrying of MIME failure messages
+
+       * lisp/mail/rmail.el (rmail-retry-failure): Handle retrying of
+       MIME failure messages.
+
+2020-10-15  Richard M Stallman  <rms@gnu.org>
+
+       Handle encrypting mime parts
+
+       * lisp/epa-mail.el (epa-mail-encrypt): Insert any encoded mime
+       parts that are queued up to insert before sending the message.
+
+2020-10-15  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/calc: Fix a few issues introduced by lexical scoping
+
+       Fix a few places I missed, where we incorrectly used lexical scoping on 
a var
+       that needed dynamic scoping.
+       These were detected thanks to a bit of footwork by Mattias Engdegård!
+
+       * lisp/calc/calc-ext.el (math-read-big-lines): Declare as dynbound.
+       (math-read-big-bigp): Bind it inside a `let`.
+       * lisp/calc/calc-graph.el (math-arglist): Declare as dynbound.
+       * lisp/calc/calc-map.el (math-arglist): Declare as dynbound.
+       * lisp/calc/calc-misc.el (math-trunc-prec): Declare as dynbound.
+       (math-trunc): Bind it inside a `let`.
+       (math-floor-prec): Declare as dynbound.
+       (math-floor): Bind it inside a `let`.
+       * lisp/calc/calc-nlfit.el (calc-curve-varnames, calc-curve-coefnames):
+       Declare as dynbound.
+       * lisp/calc/calc-sel.el (math-comp-sel-tag): Declare as dynbound.
+       * lisp/calc/calcsel2.el (calc-sel-reselect): Declare as dynbound.
+
+2020-10-14  Andreas Schwab  <schwab@linux-m68k.org>
+
+       Fix layout of custom-face-edit widget
+
+       * lisp/cus-edit.el (custom-face-edit): Add :format to group
+       widget.  (Bug#43977)
+
+2020-10-14  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-10-14  Andrea Corallo  <akrl@sdf.org>
+
+       Use form native compilation in `comp-trampoline-compile'
+
+       * lisp/emacs-lisp/comp.el (comp-trampoline-sym): Remove function.
+       (comp-trampoline-filename): As we are introducing an ABI change in
+       the eln trampoline format change the trampoline filename to
+       disambiguate.
+       (comp-trampoline-search): Rename from `comp-search-trampoline'
+       and return directly the trampoline.
+       (comp-trampoline-compile): Rework to use native form compilation
+       in place of un-evaluating a function and return directly the
+       trampoline.
+       (comp-subr-trampoline-install): Update for
+       `comp-trampoline-search' and `comp-trampoline-compile' new
+       interfaces.
+       * src/comp.c (Fcomp__install_trampoline): Store the trampoline
+       itself as value in `comp-installed-trampolines-h'.
+       (syms_of_comp): Doc update `comp-installed-trampolines-h'.
+
+2020-10-14  Andrea Corallo  <akrl@sdf.org>
+
+       Add a test to verify form native compilation.
+
+       * test/src/comp-tests.el (comp-deftest): Fix typo.
+       (compile-forms): New test.
+
+2020-10-14  Andrea Corallo  <akrl@sdf.org>
+
+       Rework `native-compile' interface so it can return compiled functions
+
+       * lisp/emacs-lisp/comp.el (native-compile): Return the compiled
+       function when the input is a symbol or a form.
+       * test/src/comp-tests.el (free-fun, tco, fw-prop): Update tests
+       for new `native-compile' interface.
+
+2020-10-14  Andrea Corallo  <akrl@sdf.org>
+
+       Have `native-elisp-load' return the last registerd function
+
+       * lisp/emacs-lisp/comp.el (comp-emit-for-top-level): Synthesize
+       'top_level_run' so it returns the last value returned by
+       `comp--register-subr'.
+       * src/comp.c (load_comp_unit): Return what 'top_level_run'
+       returns.
+       (Fnative_elisp_load): Return what 'load_comp_unit' returns.
+       * src/comp.h (load_comp_unit): Update signature.
+
+2020-10-14  Andrea Corallo  <akrl@sdf.org>
+
+       Allow for lambda forms as native compilation input
+
+       * lisp/emacs-lisp/comp.el (comp-spill-lap-function): Add new
+       specialized method for compiling a lambda form.
+
+2020-10-14  Andrea Corallo  <akrl@sdf.org>
+
+       Move context output computation in `comp-spill-lap-function'
+
+       * lisp/emacs-lisp/comp.el (comp-spill-lap-function): Move
+       output filename computation here.
+       (native-compile): From here.
+
+2020-10-14  Juri Linkov  <juri@linkov.net>
+
+       Highlight regexp sub-expressions in query-replace
+
+       * lisp/replace.el (query-replace-highlight-submatches): New defcustom.
+       (replace-submatches-overlays): New variable.
+       (replace-highlight): Use query-replace-highlight-submatches.
+       (replace-dehighlight): Use query-replace-highlight-submatches.
+
+       * doc/emacs/search.texi (Query Replace):
+       Add documentation for query-replace-highlight-submatches.
+
+       Suggested by Drew Adams <drew.adams@oracle.com> in bug#43702.
+
+2020-10-14  Juri Linkov  <juri@linkov.net>
+
+       * lisp/progmodes/grep.el: More fixes for 'lgrep' (bug#23590)
+
+       * lisp/progmodes/grep.el (grep-expand-template): Add new arg 
'more-opts'.
+       (grep-use-directories-skip): New variable.
+       (lgrep): Set 'grep-use-directories-skip' to the result of 'grep-probe'.
+       Use "--directories=skip" when 'grep-use-directories-skip' is t.
+
+2020-10-14  Ernesto Alfonso  <erjoalgo@gmail.com>
+
+       Add option to highlight the 'next-error' error message
+
+       * lisp/simple.el (next-error-message-highlight):
+       (next-error-message): New faces (bug#32676).
+       (next-error--message-highlight-overlay): New internal variable.
+       (next-error-message-highlight): New function.
+       (next-error-found): Call the function.
+
+2020-10-14  Alex Branham  <alex.branham@gmail.com>
+
+       Add a new variable tab-first-completion
+
+       * doc/emacs/indent.texi (Indent Convenience): Mention it.
+
+       * doc/lispref/text.texi (Mode-Specific Indent): Document it.
+
+       * lisp/indent.el (tab-first-completion): New variable (bug#34787).
+       (indent-for-tab-command): Use it.
+
+2020-10-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Rename dired-filename-at-point to avoid confusion
+
+       * lisp/dired-x.el (dired-x-guess-filename-at-point): Rename (bug#43961).
+       (dired-filename-at-point): Made into an obsolete alias, since the name
+       can be confused with the unrelated dired-file-name-at-point function.
+
+2020-10-14  Philipp Klaus Krause  <pkk@spth.de>  (tiny change)
+
+       Mark the return value from strerror as a constant
+
+       * src/emacs.c (main): Mark the return from strerror as a constant,
+       since it shouldn't be changed (bug#43982).
+
+       * lib-src/movemail.c (pfatal_and_delete): Ditto.
+
+2020-10-14  Masahiro Nakamura  <tsuucat@icloud.com>
+
+       Improve package install/delete button action
+
+       * lisp/emacs-lisp/package.el (package-install-button-action)
+       (package-delete-button-action): Run describe-package instead of
+       revert-buffer in order to use newer package-desc (bug#43983).
+
+2020-10-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix name of the module .h files in the comments
+
+       * src/emacs-module.c: Fix the name of the .h file in the comments.
+
+2020-10-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Move the new module unibyte function to the correct module-env.h file
+
+       * src/module-env-28.h: Moved here from the -25.h file.
+
+2020-10-13  Mattias Engdegård  <mattiase@acm.org>
+
+       * etc/NEWS (Calc): Note new precedence of '/' in TeX input mode.
+
+2020-10-13  Paul Eggert  <eggert@cs.ucla.edu>
+
+       nnimap MODSEQ cleanup
+
+       * lisp/gnus/nnimap.el (nnimap-parse-flags):
+       Remove old hack that deletes MODSEQ entries in the buffer, as
+       Emacs now has bignums and so won't misparse MODSEQs (Bug#38938).
+
+2020-10-13  Paul Eggert  <eggert@cs.ucla.edu>
+
+       eql doc improvements
+
+       * doc/lispref/numbers.texi (Comparison of Numbers):
+       Copy some useful text from eql help string.
+       * src/fns.c (Feql): In doc string, say that eql also compares
+       integers by value.
+
+2020-10-13  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix documentation of Outline cycling commands
+
+       * lisp/outline.el (outline-mode-map): Fix wording of a comment.
+
+       * doc/emacs/text.texi (Outline Visibility): Fix wording and markup
+       of a recently added paragraph.  Improve indexing.
+
+       * etc/NEWS: Fix whitespace of a recently added entry.
+
+2020-10-13  Eli Zaretskii  <eliz@gnu.org>
+
+       * etc/NEWS: Mention 'make_unibyte_string'; reformat modules entries.
+
+2020-10-13  Mattias Engdegård  <mattiase@acm.org>
+
+       Calc: allow infinite binary word size (bug#43764)
+
+       Setting the word size ("b w") to 0 removes the word size clipping for
+       all bit operations (effectively as if a word size of -∞ had been set).
+       Rotation is disallowed; logical and arithmetic shifts behave
+       identically.
+
+       After a suggestion by Vincent Belaïche.
+
+       * lisp/calc/calc-bin.el (calc-word-size, math-binary-arg)
+       (math-binary-modulo-args, calcFunc-lsh, calcFunc-ash, calcFunc-rot)
+       (math-clip, math-format-twos-complement): Allow a word size of 0,
+       meaning -∞.
+       * test/lisp/calc/calc-tests.el
+       (calc-tests--not, calc-tests--and, calc-tests--or, calc-tests--xor)
+       (calc-tests--diff): New functions.
+       (calc-tests--clip, calc-tests--rot, calc-shift-binary): Extend to
+       cover word size 0.
+       (calc-bit-ops): New test.
+       * doc/misc/calc.texi (Binary Functions): Update manual.
+       * etc/NEWS: Announce the change.
+
+2020-10-13  Mattias Engdegård  <mattiase@acm.org>
+
+       Calc: revert to old precedence of '/' in (La)TeX input mode
+
+       Make the '/' precedence higher than that of '+' and '-' again,
+       partially reverting fda9b316f84 (bug#43902).
+
+       * lisp/calc/calc-lang.el (tex): Change precedence of '/'.
+       * test/lisp/calc/calc-tests.el (calc-latex-input): New test.
+
+2020-10-13  Mattias Engdegård  <mattiase@acm.org>
+
+       Calc: make tests less chatty
+
+       * test/lisp/calc/calc-tests.el (calc-extract-units, calc-convert-units)
+       (calc-matrix-determinant, calc-choose): Remove "Working..." messages.
+       (calc-tests--check-choose, calc-tests--explain-choose): Eliminate.
+
+2020-10-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow creating unibyte strings from Emacs modules
+
+       * doc/lispref/internals.texi (Module Values): Document
+       make_unibyte_string (bug#34873).
+
+       * src/emacs-module.c (module_make_unibyte_string): New function.
+       (initialize_environment): Export it.
+
+       * src/module-env-25.h: Define it.
+
+       * test/data/emacs-module/mod-test.c (Fmod_test_return_unibyte):
+       Test it.
+
+       * test/src/emacs-module-tests.el (module/unibyte): Test it.
+
+2020-10-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Partially revert previous patch to emacs.service
+
+       * etc/emacs.service (ExecStop): Partially revert previous patch
+       for bug#37847, since: "This appears to break packages that rely on
+       `invocation-name' to be executable."
+
+2020-10-13  Yuan Fu  <casouri@gmail.com>
+
+       Add cycling commands to outline
+
+       * lisp/outline.el (outline--cycle-state, outline-has-subheading-p)
+       (outline-cycle, outline-cycle-buffer): New functions.
+       (outline-mode-map): Add key bindings for the two new commands.
+       (outline--cycle-buffer-state): New variable.
+       * doc/emacs/text.texi (Outline Visibility): Add 'outline-cycle' and
+       'outline-cycle-buffer'.
+       * etc/NEWS (Outline): Record the change (bug#41130).
+
+2020-10-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make read-char-choice less modal
+
+       * lisp/subr.el (read-char-choice): Use `read-char-from-minibuffer'
+       here (bug#42708) so that we're not as modal (and users can copy
+       the help buffer, if they should so want).
+
+2020-10-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make diary fontify headers correctly (if the date has been customized)
+
+       * lisp/calendar/diary-lib.el (diary-fancy-display): Insert the
+       heading with the correct face, so that it doesn't have to be
+       re-matched later (which is generally impossible) (bug#13072).
+       (diary-fancy-date-pattern, diary-fancy-date-matcher): Make obsolete.
+       (diary-fancy-font-lock-keywords): Don't use.
+       (diary-fancy-font-lock-fontify-region-function): Don't use.
+
+2020-10-13  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Don't bind sort-fold-case when saving the custom-file
+
+       * lisp/cus-edit.el (custom-save-variables, custom-save-faces): These
+       functions sort a list, not buffer text, so they don't need
+       to use sort-fold-case at all.  Remove the let-binding for
+       sort-fold-case (bug#43919).
+
+2020-10-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Have header-line-highlight inherit from mode-line-highlight
+
+       * lisp/faces.el (header-line-highlight): Inherit from
+       mode-line-highlight instead of highlight (bug#43926).  This is
+       consistent with header-line inheriting from mode-line.
+
+2020-10-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       message-insert-signature doc fix
+
+       * lisp/gnus/message.el (message-insert-signature): Clarify what
+       FORCE means.
+
+2020-10-13  Boruch Baum  <boruch_baum@gmx.com>
+
+       Add a keybinding to the help menu to display manuals
+
+       * lisp/help.el (help-for-help-internal): Add a keybinding to
+       prompt for and display a manual (bug#43956).
+
+2020-10-12  Juri Linkov  <juri@linkov.net>
+
+       * lisp/isearch.el (isearch-search): Set isearch-match-data in the right 
place.
+
+2020-10-12  Brian Leung  <leungbk@mailfence.com>
+
+       Fix some compilation warnings in non nativecomp build (bug#43892)
+
+       * lisp/emacs-lisp/advice.el (comp-subr-trampoline-install):
+       Declare function.
+       * lisp/emacs-lisp/find-func.el (comp-eln-to-el-h): Declare
+       variable.
+       * lisp/emacs-lisp/nadvice.el (comp-subr-trampoline-install):
+       Declare function.
+       * lisp/files.el (comp-eln-to-el-h): Declare variable.
+       * lisp/help.el (subr-native-lambda-list): Declare function.
+
+2020-10-12  Andrea Corallo  <akrl@sdf.org>
+
+       Revert "Fix some compilation warnings in non nativecomp build 
(bug#43892)"
+
+       This reverts commit 6606ec8e313bf48a1ac7b63c52bfeb64c4257107.
+
+2020-10-12  Andrea Corallo  <akrl@sdf.org>
+
+       Fix some compilation warnings in non nativecomp build (bug#43892)
+
+       * lisp/emacs-lisp/advice.el (comp-subr-trampoline-install):
+       Declare function.
+       * lisp/emacs-lisp/find-func.el (comp-eln-to-el-h): Declare
+       variable.
+       * lisp/emacs-lisp/nadvice.el (comp-subr-trampoline-install):
+       Declare function.
+       * lisp/files.el (comp-eln-to-el-h): Declare variable.
+       * lisp/help.el (subr-native-lambda-list): Declare function.
+
+2020-10-12  Stefan Kangas  <stefan@marxist.se>
+
+       Fix man page title lines and timestamps
+
+       * doc/man/ebrowse.1:
+       * doc/man/emacs.1.in:
+       * doc/man/emacsclient.1:
+       * doc/man/etags.1: Update date to match last significant change.  Set
+       file local variable time-stamp-pattern.  Fix title line to match the
+       recommendations in "man man-pages".
+       Ref: https://lists.gnu.org/r/emacs-devel/2020-09/msg01002.html
+
+2020-10-12  Michael Albinus  <michael.albinus@gmx.de>
+
+       Make tramp-completion-reread-directory-timeout obsolete (Bug#43932)
+
+       * doc/misc/tramp.texi (File name completion, Frequently Asked 
Questions):
+       Remove `tramp-completion-reread-directory-timeout'.  (Bug#43932)
+
+       * etc/NEWS: Mention tramp-completion-reread-directory-timeout as 
obsolete.
+
+       * lisp/net/tramp.el (tramp-completion-reread-directory-timeout):
+       Make it obsolete.
+
+2020-10-12  Hugh Daschbach  <hdasch@fastmail.com>
+
+       Add interface arg to D-Bus PropertiesChanged signal.
+
+       * lisp/net/dbus.el (dbus-register-property, dbus-property-handler):
+       Fix signal generation.  (Bug#43936)
+
+       * test/lisp/net/dbus-tests.el 
(dbus-test06-register-property-emits-signal):
+       Fix test.
+
+2020-10-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/proced.el: Fix behavior with variable-pitch `header-line` face
+
+       Also, use lexical-scoping.  Remove redundant `:group` args.
+       (proced-process-alist, proced-header-line): Use `defvar-local`
+       (proced-header-line): Put :align-to on spaces to improve result with
+       variable-pitch header-line face.
+       (proced-filter, proced-format): Use a closure instead of `(lambda ...).
+
+2020-10-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a reference to the shortdoc command in the Emacs manual
+
+       * doc/emacs/help.texi (Name Help): Mention shortdoc.
+
+2020-10-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a shortdoc menu entry
+
+       * lisp/menu-bar.el (menu-bar-describe-menu): Add a shortdoc menu
+       entry.
+
+2020-10-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix error in file shortdoc group
+
+       * lisp/emacs-lisp/shortdoc.el (number): Add some more numeric
+       stuff (and clean up some arglists).
+
+2020-10-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/hexl.el: Fix behavior with variable-pitch `header-line` face
+
+       (hexl-ascii-region): Don't inherit from the `header-line`.
+       (hexl-font-lock-keywords): Fix text alignment.
+       (hexl-mode): Set `font-lock-extra-managed-props` accordingly.
+
+2020-10-11  Alan Third  <alan@idiocy.org>
+
+       Fix GNUstep build
+
+       Fix mistakes made when removing Cocoa code from nsfont.m.
+
+       * src/nsfont.m (nsfont_draw): Remove spurious #ifdef.
+       (ns_uni_to_glyphs): The #if/#endif was removed from this code, but the
+       code itself not removed.  Remove it now.
+
+2020-10-11  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/tooltip.el: Remove redundant :group args.
+
+       * lisp/tooltip.el: Use lexical-binding.
+
+2020-10-11  Gregory Heytings  <ghe@sdf.org>  (tiny change)
+
+       Fix 'message' when there's active minibuffer on another frame
+
+       * lisp/minibuffer.el (set-minibuffer-message): Don't reuse the
+       active minibuffer for displaying messages unless the active
+       minibuffer is on the same frame as the selected window.
+
+2020-10-11  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of shortdoc features
+
+       * lisp/help-fns.el (help-fns-describe-function-functions): Doc
+       fix.
+       * lisp/emacs-lisp/shortdoc.el (define-short-documentation-group)
+       (shortdoc-display-group, shortdoc-add-function): Doc fixes.
+
+       * doc/lispref/help.texi (Documentation Groups): Improve the
+       recently-added documentation and the indexing.
+
+2020-10-11  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/url/url-domsuf.el: Use lexical-binding.
+
+2020-10-11  Stefan Kangas  <stefan@marxist.se>
+
+       Convert url-domsuf.el tests to ert
+
+       * lisp/url/url-domsuf.el: Move commented out tests from here...
+       * test/lisp/url/url-domsuf-tests.el: ...to this new file.
+
+2020-10-11  Stefan Kangas  <stefan@marxist.se>
+
+       Update publicsuffix.txt from upstream
+
+       * etc/publicsuffix.txt: Update from
+       https://publicsuffix.org/list/public_suffix_list.dat
+       dated 2020-10-09 08:23:34 UTC.
+
+2020-10-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add more numeric shortdocs
+
+       * lisp/emacs-lisp/shortdoc.el (shortdoc-section)
+       (shortdoc-example): Lighten up colours on light backgrounds.
+
+2020-10-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak shortdoc colours on light backgrounds
+
+       * lisp/emacs-lisp/shortdoc.el (shortdoc-section)
+       (shortdoc-example): Lighten up colours on light backgrounds.
+
+2020-10-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Autoload shortdoc command and adjust NEWS
+
+       * lisp/emacs-lisp/shortdoc.el (shortdoc-display-group): Autoload.
+
+2020-10-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Use Unicode arrows in shortdoc results
+
+       * lisp/emacs-lisp/shortdoc.el (shortdoc--display-function): Use
+       Unicode arrows if possible.
+
+2020-10-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't boldify the flyspell language indicator in the mode line
+
+       * lisp/textmodes/flyspell.el (flyspell-mode): Don't boldify the
+       language part -- it draws too much attention in the minor mode list.
+
+2020-10-11  Stephen Berman  <stephen.berman@gmx.net>
+
+       Allow killing files with C-k in wdired if -F is used
+
+       * lisp/wdired.el (wdired-change-to-wdired-mode): Add hook to
+       restore properties.
+       (wdired-change-to-wdired-mode): Adjust check for symlinks.
+       (wdired-preprocess-files): Fix parsing when using the -F flag.
+       (wdired-get-filename): Fix parsing of symlinks when using the -F flag.
+       (wdired--restore-properties): Renamed, and restore more properties
+       (bug#18475).
+
+2020-10-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add support for displaying short documentation for function groups
+
+       * doc/lispref/help.texi (Documentation Groups): Document it.
+
+       * lisp/help-fns.el (help-fns--mention-shortdoc-groups): Output
+       references to the shortdocs.
+
+       * lisp/emacs-lisp/shortdoc.el: New file.
+
+2020-10-11  Juri Linkov  <juri@linkov.net>
+
+       Make C-w worth in isearch when at the last match in the buffer
+
+       * lisp/isearch.el (isearch-yank-internal): Make C-w work when at
+       the last match in the buffer (bug#22118).
+
+2020-10-11  Noam Postavsky  <npostavs@users.sourceforge.net>
+
+       Clarify how to set single-function hooks
+
+       * doc/lispref/modes.texi (Hooks): Clarify the difference between
+       normal hooks and single-function "hooks" (bug#25581).
+
+2020-10-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix link in previous display.texi change
+
+       * doc/lispref/display.texi (Fontsets): Link to the correct node in
+       the Elisp manual, not in the Emacs manual.
+
+2020-10-11  Robert Weiner  <rsw@gnu.org>
+
+       Make posn-set-point work on frame events
+
+       * lisp/subr.el (event-start): Mention the frame part of the events.
+       (posn-window): Ditto.
+       (posn-set-point): Make this work if the event is a frame event
+       (bug#28621).
+
+2020-10-11  Robert Pluim  <rpluim@gmail.com>
+
+       Fix the documentation of char-displayable-p
+
+       * doc/lispref/display.texi (Fontsets): Make the documentation of
+       char-displayable-p less incorrect (bug#35230).
+
+2020-10-10  Rasmus  <rasmus@gmx.us>
+
+       gnus-icalendar.el: Fix bug in gnus-icalendar-identities
+
+       * lisp/gnus/gnus-icalendar.el (gnus-icalendar-event--find-attendee):
+       (gnus-icalendar-identities) `gnus-ignored-from-addresses' and
+       `message-alternative-emails' may be functions. This is not
+       supported by `gnus-icalendar-event--find-attendee' (bug#43908).
+
+2020-10-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/calc/: Use lexical scoping in all the files
+
+       Includes the following pervasive changes:
+       - Move some defvars earlier in the file so they cover earlier 
let-bindings
+       - Change dynamically scoped `calc-FOO` or `math-FOO` function arguments
+         to just FOO and then let-bind the `calc-FOO` or `math-FOO` variable
+         explicitly in the body of the function.  In some cases, the
+         beginning of the function was changed to refer to FOO so as to delay
+         the binding to a nearby `let` when I could ensure that it did
+         not make a difference.
+       - Add an underscore in front of unused vars or comment them out 
altogether.
+       - Replace unused `err` arg to `condition-case` with nil.
+
+       Plus the additional itemized changes below.
+
+       * lisp/calc/calc-map.el (calcFunc-reducer):
+       * lisp/calc/calc-arith.el (math-setup-declarations):
+       * lisp/calc/calc-help.el (calc-full-help, calc-help-index-entries)
+       (calc-full-help): Use `ignore-errors`.
+
+       * lisp/calc/calc-embed.el (calc-embedded-modes-change):
+       Declare `the-language` and `the-display-just` as dynamically scoped.
+
+       * lisp/calc/calc-forms.el (math-setup-year-holidays): Use `dolist`.
+
+       * lisp/calc/calc-graph.el (calc-graph-set-styles): Use `symbol-value`
+       rather than `eval.`
+       (calc-graph-delete-temps, calc-graph-set-styles): Use ignore-errors.
+
+       * lisp/calc/calc-macs.el (calc-with-trail-buffer): Add artificial use
+       of `save-buf` to silence compiler warnings in all the cases where
+       `body` doesn't make use of it.
+
+       * lisp/calc/calc-math.el (math-largest-emacs-expt)
+       (math-smallest-emacs-expt, math-use-emacs-fn): Use ignore-errors.
+
+       * lisp/calc/calc-mode.el (calc-total-algebraic-mode): Remove "P" from
+       interactive spec since it's not used anyway.
+
+       * lisp/calc/calc-rewr.el (calc-match): Simplify.
+
+       * lisp/calc/calc.el (calc-buffer): Give it a global nil value,
+       so it's automatically declared dynbound in any file that requires 
`calc`.
+       (calcDigit-nondigit): Adjust accordingly.
+
+       * lisp/calc/calcalg2.el (calcFunc-table): Declare `var-dummy` as 
dynbound.
+       (math-scan-for-limits): Comment out dead code.
+
+       * lisp/calc/calcalg3.el (math-general-fit): Declare `var-YVAL` and
+       `var-YVALX` as dynbound.
+
+2020-10-10  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/help.el (help-function-arglist): Fix non nativecomp builds 
(bug#43914)
+
+2020-10-10  Andrea Corallo  <akrl@sdf.org>
+
+       As edges are indexed store them in an hash table
+
+       * lisp/emacs-lisp/comp.el (comp-edge): Update doc for 'number'
+       slot.
+       (comp-func): Rename 'edges' slot into 'edges-h'.
+       (comp-log-edges): Update logic for edges in an hash table.
+       (comp-clean-ssa, comp-compute-edges): Likewise.
+
+2020-10-10  Andrea Corallo  <akrl@sdf.org>
+
+       Add into phi l-value args basic block names
+
+       * lisp/emacs-lisp/comp.el (comp-ssa-rename-insn): Clean-up a
+       leftover space.
+       (comp-finalize-phis): Cons the blasic block name providing the
+       mvar together with the mvar itself while forming the phi.
+       (comp-fwprop-insn): Destructure correctly the phi.
+
+2020-10-10  Andrea Corallo  <akrl@sdf.org>
+
+       Provide feature nativecomp and make use of it
+
+       * lisp/emacs-lisp/comp.el (comp-ensure-native-compiler): Use
+       `featurep' to identify if the native compiler is available.
+       * lisp/emacs-lisp/nadvice.el (advice--add-function): Likewise.
+       * lisp/emacs-lisp/package.el (package--delete-directory): Likewise.
+       * lisp/loadup.el: Likewise.
+       * src/comp.c (syms_of_comp): Provide feature nativecomp.
+
+2020-10-10  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (comp-func): Fix doc for blocks slot.
+
+2020-10-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/easy-mmode.el (define-minor-mode): Doc tweak
+
+       Try and clarify the meaning of `init-value`.
+
+2020-10-10  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       c00606171f (origin/emacs-27) A better fix for bug#43886
+       3196fd44c3 Avoid crashes when a theme is loaded with one frame suspended
+       0407b15500 Removed an incorrectly placed extra word in the semantic docs
+       040dcbe53e Fix current-line hscrolling when overlays change
+       c56eeba2ce Extend tests for shell-command-dont-erase-buffer
+
+2020-10-10  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       b6704d58e8 ; * src/xdisp.c (Fwindow_text_pixel_size): Doc fix.
+
+2020-10-10  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       acc9b46153 Fix merging of region face for non-ASCII characters
+       c2a13969e4 Make drag and drop on NS open all URLs (bug#43470)
+
+2020-10-10  Andrea Corallo  <akrl@sdf.org>
+
+       Fix LIMPLE latch block name coloring in "*Native-compile-Log*"
+
+       * lisp/emacs-lisp/comp.el (comp-limple-lock-keywords): Fix
+       latch block name coloring.
+
+2020-10-10  Brian Leung  <leungbk@mailfence.com>
+
+       Various typo fixes in native compiler related files
+
+       * lisp/emacs-lisp/comp.el (native-compiler-error-dyn-func)
+       (comp-func, comp-func-l)
+       (comp-func-d, comp-ensure-native-compiler, comp-type-hint-p)
+       (comp-func-unique-in-cu-p, comp-alloc-class-to-container)
+       (comp-limple-mode, comp-loop-insn-in-block)
+       (comp-lex-byte-func-p, comp-c-func-name, comp-decrypt-arg-list)
+       (comp-spill-lap-function, comp-intern-func-in-ctxt)
+       (comp-spill-lap-function, comp-spill-lap, comp-emit-handler)
+       (comp-prepare-args-for-top-level): Various typo fixes.
+       * src/comp.c (Fcomp_el_to_eln_filename): Fix typo in error
+       message.
+
+2020-10-10  Mattias Engdegård  <mattiase@acm.org>
+
+       Improve coverage of Calc bit shift test
+
+       * test/lisp/calc/calc-tests.el (calc-tests--rsh, calc-tests--rash)
+       (calc-shift-binary): Test with negative word sizes.
+
+2020-10-10  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-10-10  Andrea Corallo  <akrl@sdf.org>
+
+       Fix failure when compiling a trampoline with no eln-cache dir 
(bug#43875)
+
+       * lisp/emacs-lisp/comp.el (comp-trampoline-compile): Try to create
+       the eln-cache dir if this is not existing, if fails to do that
+       move on to the next one.
+
+2020-10-10  Andrew Whatson  <whatson@gmail.com>
+
+       * Fix typo name plus make error homogeneous in `comp-trampoline-compile'
+
+       * lisp/emacs-lisp/comp.el (comp-trampoline-compile): Fix typo
+       renaming `comp-tampoline-compile' -> `comp-trampoline-compile'.
+       Change error to be consistent.
+       (comp-subr-trampoline-install): Use `comp-trampoline-compile'.
+
+2020-10-10  Eli Zaretskii  <eliz@gnu.org>
+
+       A better fix for bug#43886
+
+       * src/xfaces.c (load_color2, Fcolor_distance): Revert last change.
+       * src/term.c (clear_tty_hooks): Don't clear defined_color_hook.
+
+2020-10-10  Torsten Hilbrich  <torsten.hilbrich@gmx.net>
+
+       Fix dictionary tooltip mode
+
+       * lisp/net/dictionary.el (dictionary-tooltip-mode): Add mouse movement
+       binding and use tooltip-functions instead of tooltip-hook
+
+       There were some changes in Emacs since testing it the last time. I had
+       to add keybinding for mouse movement and enable track-mouse to get the
+       mode working again.
+
+2020-10-09  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid crashes when a theme is loaded with one frame suspended
+
+       * src/xfaces.c (load_color2, Fcolor_distance): Don't try to call
+       the frame's defined_color_hook if the frame is suspended.
+       (Bug#43886)
+
+2020-10-09  Torsten Hilbrich  <torsten.hilbrich@gmx.net>
+
+       Adding details page for dictionary
+
+       * lisp/net/dictionary.el (dictionary-display-dictionary-line):
+       Allow getting more details on a dictionary by clicking the
+       "(Details)" link.
+
+       I had the functionality to query the dictionary information but no
+       mechanism to invoke it.  So just add a button after the short
+       description of the dictionary to get more information.
+
+2020-10-09  Torsten Hilbrich  <torsten.hilbrich@gmx.net>
+
+       Dictionary now uses button
+
+       * lisp/net/dictionary-link.el: Removed now obsolete file
+       * lisp/net/dictionary.el: Use insert-button and make-button
+       * lisp/net/dictionary.el (dictionary-mode-map): Now defined using defvar
+
+       I had to add a conversion function as parameter for the button 'action
+       as I need to be able to pass nil data to my function. This is not
+       possible with the regular button 'action function and the 'button-data
+       value.
+
+       The functionality of searching a link in all dictionaries has been
+       removed for now. It might appear again once I have an idea how to
+       implement it.
+
+2020-10-09  Eli Zaretskii  <eliz@gnu.org>
+
+       Add Euro Sign to Latin language input methods
+
+       * lisp/leim/quail/latin-post.el ("danish-postfix")
+       ("finnish-postfix", "french-postfix", "german-postfix")
+       ("icelandic-postfix", "italian-postfix", "norwegian-postfix")
+       ("scandinavian-postfix", "spanish-postfix", "swedish-postfix"):
+       Add "E=" for the Euro Sign.  (Bug#43866)
+
+2020-10-09  Mattias Engdegård  <mattiase@acm.org>
+
+       Calc: fix arithmetic right shift sign bit detection
+
+       Arithmetic right shift didn't compute the bit to shift in correctly.
+       For example, #x600000000 right-shifted 8 steps (with 32 bit word size)
+       resulted in #xff000000 rather than 0. (Bug#43764)
+
+       * lisp/calc/calc-bin.el (calcFunc-ash): Fix condition.
+       * test/lisp/calc/calc-tests.el (calc-tests--clip, calc-tests--lsh)
+       (calc-tests--rsh, calc-tests--ash, calc-tests--rash, calc-tests--rot):
+       New.
+       (calc-shift-binary): New test.
+
+2020-10-09  Nick Gasson  <nick@nickg.me.uk>  (tiny change)
+
+       Match OpenBSD doas password prompt in comint
+
+       * lisp/comint.el (comint-password-prompt-regexp): match OpenBSD doas
+       password prompt. OpenBSD 5.8 replaced sudo with doas in the base
+       install.
+
+       * test/lisp/comint-tests.el (comint-testsuite-password-strings): test
+       that the doas password prompt is matched (bug#43846).
+
+2020-10-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       message-signature doc fix
+
+       * lisp/gnus/message.el (message-signature): Mention
+       message-signature-insert-empty-line (bug#43853).
+
+2020-10-09  Pankaj Jangid  <pankaj.jangid@gmail.com>  (tiny change)
+
+       Removed an incorrectly placed extra word in the semantic docs
+
+       * doc/misc/semantic.texi (Parser code): Copy edit (bug#43861).
+
+2020-10-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify define-minor-mode hooks
+
+       * doc/lispref/modes.texi (Defining Minor Modes): Note that the
+       code (and the hook) is run both when the mode is enabled and
+       disabled (bug#43868).
+
+2020-10-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Don't eagerly store articles in the Agent by default"
+
+       This reverts commit def34a20766ea5179afd5e5ed090a2b86fcccb5e.
+
+       This made storing articles in the Agent very slow.
+
+2020-10-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Only skip directories in lgrep, not the other grep commands
+
+       * lisp/progmodes/grep.el (lgrep): Do the directory ignores here
+       (bug#23590).
+       (grep-compute-defaults): ... instead of here, because this would
+       affect all grep commands, not just lgrep.
+
+2020-10-08  Torsten Hilbrich  <torsten.hilbrich@gmx.net>
+
+       Don't check for existence of defface
+
+       * lisp/net/dictionary.el: defface has been available in Emacs for quite
+       some time now. No need to check it before using it.
+
+2020-10-08  Torsten Hilbrich  <torsten.hilbrich@gmx.net>
+
+       Don't check coding-system-list for existence
+
+       * lisp/net/dictionary.el (dictionary-coding-systems-for-dictionaries):
+       Don't check for coding-system-list before using it. It check no longer
+       be necessary.
+
+2020-10-08  Torsten Hilbrich  <torsten.hilbrich@gmx.net>
+
+       Add :version tag to defcustom statement
+
+       * lisp/net/dictionary.el: Add :version tag to all defcustom statements
+
+       Suggested-By: Robert Pluim <rpluim@gmail.com>
+
+2020-10-08  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: Move the handling of keyword auto into type handling for C++.
+
+       This should allow auto, const, static, ... to be in any order.
+
+       * lisp/progmodes/cc-engine.el (c-forward-type): New return value 'no-id 
for
+       when auto precludes the parsing of a type identifier.  Adapt processing 
for
+       this.
+       (c-forward-decl-or-cast-1): Use the new facility from c-forward-type.
+
+       * lisp/progmodes/cc-langs.el (c-type-modifier-prefix-kwds): Insert the 
value
+       of c-no-type-kwds into the value.
+       (c-no-type-kwds, c-no-type-key): New lang consts/vars, basically "auto".
+       (c-typeless-decl-kwds, c-modifier-kwds): Remove "auto" from the C++ 
value.
+
+2020-10-08  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/ftcrfont.c (ftcrfont_open): Initialize the `max_width` field
+
+       On a 32bit build, Emacs can otherwise crash with a !FIXNUM_OVERFLOW_P
+       assertion in `Ffont_info` by simply doing `emacs -Q` and then `C-s`.
+
+       * src/font.c: Try and detect uninitialized `max_width` fields.
+       (font_make_object): Set max_width to a silly value.
+       (Ffont_info): Check the value is not silly any more.
+
+2020-10-08  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/doc-view.el: Fix "can't resize root window" error
+
+       (doc-view-fit-window-to-page): Change approach to detect when the
+       frame needs to be resized.
+
+2020-10-08  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix current-line hscrolling when overlays change
+
+       * src/xdisp.c (redisplay_internal): Disable "optimization 1" when
+       auto-hscrolling current line and we're redisplaying the selected
+       window.  (Bug#43835)
+
+2020-10-08  Michael Albinus  <michael.albinus@gmx.de>
+
+       Extend tests for shell-command-dont-erase-buffer
+
+       * test/lisp/simple-tests.el
+       (simple-tests-shell-command-dont-erase-buffer): Extend test.
+
+       * test/lisp/net/tramp-tests.el
+       (tramp-test32-shell-command-dont-erase-buffer): Adapt test.  Tag
+       it :unstable.
+
+2020-10-08  Torsten Hilbrich  <torsten.hilbrich@gmx.net>
+
+       Removed some compatibility parts in dictionary
+
+       * lisp/net/dictionary.el: Use cl-lib, remove defface and defgroup
+       checks, remove xemacs-related code.
+       * lisp/net/dictionary-link.el: Remove xemacs-related code.
+
+2020-10-08  Torsten Hilbrich  <torsten.hilbrich@gmx.net>
+
+       Renamed link.el
+
+       * lisp/net/link.el: Renamed to connection-link.el, also prefixing
+       all functions with "dictionary-" prefix
+       * lisp/net/dictionary.el: Adapt to renamed functions
+
+2020-10-08  Torsten Hilbrich  <torsten.hilbrich@gmx.net>
+
+       Renamed connection.el
+
+       * lisp/net/connection.el: Renamed to dictionary-connection.el, also
+       prefixing all functions with "dictionary-" prefix
+       * lisp/net/dictionary.el: Adapt to renamed functions
+
+2020-10-08  Torsten Hilbrich  <torsten.hilbrich@gmx.net>
+
+       Importing dictionary module
+
+       * lisp/net: Adding files connection.el, link.el, dictionary.el,
+       imported from https://github.com/myrkr/dictionary-el.git
+
+2020-10-08  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Mention two more functions in the commentary
+
+       * lisp/progmodes/project.el:
+       Mention two more functions in the commentary (bug#43595).
+
+2020-10-07  Andrea Corallo  <akrl@sdf.org>
+
+       Fix failure when eln-cache is removed (introduced by 4a1bb46260)
+
+       * src/comp.c (make_directory_wrapper, make_directory_wrapper_1):
+       New functions.
+       (Fcomp_el_to_eln_filename): If base_dir is not
+       specified and we are searching across `comp-load-path' try to
+       create a directory if does not exists.
+
+2020-10-07  Andrea Corallo  <akrl@sdf.org>
+
+       Fix some nits in comp.el
+
+       * lisp/emacs-lisp/comp.el (comp-spill-lap-function): Use
+       `cl-defmethod' where correct in place of `cl-defgeneric'.
+       (comp-tampoline-compile): Add missing #.
+
+2020-10-07  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of 'isearch-group-N' faces
+
+       * etc/NEWS:
+       * doc/emacs/search.texi (Search Customizations): Improve and
+       clarify the wording of the 'isearch-group-N' faces description.
+
+       * lisp/isearch.el (search-highlight-submatches): Doc fix.
+
+2020-10-07  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix last change in frame.el.
+
+       * lisp/frame.el (frame-set-background-mode): Fix last change: yet
+       another place where FRAME was not taken into account, using the
+       selected frame instead.  (Bug#43837)
+
+2020-10-07  Hong Xu  <hong@hong.me>
+
+       Clarify what ``chrooted environment means'' for TRAMP
+
+       * doc/misc/tramp.texi (Frequently Asked Questions): Clarify what
+       ``chrooted environment means'' for TRAMP (bug#43839).
+
+2020-10-07  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix face recalculation when frame's background mode changes
+
+       * lisp/frame.el (frame-set-background-mode): Use the FRAME
+       argument instead of the selected frame, when calling
+       'face-spec-match-p'.  (Bug#43837)
+
+2020-10-07  Andrea Corallo  <akrl@sdf.org>
+
+       Do use echo area for async compilation started/finished messages
+
+       * lisp/emacs-lisp/comp.el (comp-run-async-workers)
+       (native-compile-async): Do not write into the echo area.
+
+2020-10-07  Andrea Corallo  <akrl@sdf.org>
+
+       Better libgccjit related error messaging during configure
+
+       * configure.ac: Distinguish the case when libgccjit is missing,
+       its headers are missing, or libgccjit is broken.  Message the user
+       based on that.
+
+2020-10-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove mention of the obsolete cust-print.el from the manual
+
+       * doc/lispref/edebug.texi (Printing in Edebug): Remove mention of
+       the obsolete cust-print.el (bug#37956) and adjust the text a bit.
+
+2020-10-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Update documentation on this-command-keys to reflect new behavior
+
+       * doc/lispref/commands.texi (Command Loop Info):
+       `this-command-keys' does not include the C-u any more, so remove
+       that from the description and the example
+       (bug#22107).
+
+       * src/keyboard.c (Fthis_single_command_keys): Don't say that
+       `this-command-keys' returns the C-u prefix (bug#22111).
+
+2020-10-07  Alex Gramiak  <agrambot@gmail.com>
+
+       Default the grep commands to skip directories
+
+       * lisp/progmodes/grep.el (grep-compute-defaults): Skip directories
+       (bug#23590).
+
+2020-10-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make artist-mode work when display-line-numbers-mode is on
+
+       * lisp/textmodes/artist.el (artist--adjust-x): New function.
+       (artist-mouse-draw-continously, artist-mouse-draw-poly)
+       (artist-mouse-draw-1point, artist-mouse-draw-2points): Use it to
+       take `display-line-numbers-mode' widths into account.
+
+2020-10-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove reference to outdated Gnus variable from the manual
+
+       * doc/misc/gnus.texi (Startup Variables): Remove reference to
+       gnus-use-backend-marks, which was removed in 2011 (bug#43833).
+
+2020-10-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       alist-get doc string further clarification
+
+       * lisp/subr.el (alist-get): Mention generalized variables again
+       for easier cross-referencing (bug#43836).
+
+2020-10-07  Hong Xu  <hong@hong.me>
+
+       Clarify what ``chrooted environment means'' for TRAMP
+
+       * doc/misc/tramp.texi (Frequently Asked Questions): Clarify what
+       ``chrooted environment means'' for TRAMP (bug#43839).
+
+2020-10-07  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Make the State button in Custom use extended menus
+
+       * lisp/cus-edit.el (custom-actioned-widget): New variable.
+       Dynamically hold the widget for which to show the menu.
+       (custom-variable-extended-menu, custom-face-extended-menu)
+       (custom-group-extended-menu): Keymap menus for the State menu.  Use
+       custom-actioned-widget for the :enable and :selected forms.  Make
+       related items radio buttons.  (Bug#4787)
+       (custom-variable-menu, custom-face-menu, custom-group-menu): Keep for
+       backward compatibility, but default to nil, so we prefer the keymap
+       menus instead.
+       (custom-variable-action, custom-face-action, custom-group-action):
+       Pass the keymap menu to widget-choose when the simplified menus
+       are nil.
+
+2020-10-07  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * test/lisp/progmodes/ruby-mode-tests.el: Fix obsolete warnings
+
+2020-10-06  Juri Linkov  <juri@linkov.net>
+
+       Add match-data to isearch state and repeat faces to highlight group 
matches
+
+       * lisp/isearch.el (isearch-match-data): New variable.
+       (isearch-mode): Set isearch-match-data to nil.
+       (isearch-update): Call isearch-highlight with isearch-match-data.
+       (isearch--state): Add isearch-match-data.
+       (isearch--set-state): Restore isearch-match-data.
+       (with-isearch-suspended): Preserve isearch-match-data.
+       (isearch-search): Set isearch-match-data to integers.
+       (isearch-group-1): Rename from isearch-group-odd and adjust colors.
+       (isearch-group-2): Rename from isearch-group-even and adjust colors.
+       (isearch-highlight): Add optional arg 'match-data'.
+       Rewrite search-highlight-submatches part to recycle faces.
+
+       * doc/emacs/search.texi (Search Customizations): Amend the
+       documentation for isearch-group faces.
+
+       (bug#6227, bug#43702)
+
+2020-10-06  Alan Third  <alan@idiocy.org>
+
+       Fix crash when creating new NS frame (bug#43812)
+
+       * src/nsterm.m (ns_clear_under_internal_border): Check the frame is
+       live.
+
+2020-10-06  Juri Linkov  <juri@linkov.net>
+
+       Add check for bound and true 'ido-everywhere' in multi-occur--prompt
+
+       * lisp/replace.el (multi-occur--prompt): Check if 'ido-everywhere' is
+       bound and true (bug#41633).
+
+2020-10-06  Juri Linkov  <juri@linkov.net>
+
+       Fix args of truncate-string-to-width in 
ibuffer-compile-make-substring-form
+
+       * lisp/ibuffer.el (ibuffer-compile-make-substring-form): Fix args of
+       truncate-string-to-width call (bug#41250)
+
+2020-10-06  Andrea Corallo  <akrl@sdf.org>
+
+       Native compiling do not target a directory with no write permission
+
+       * src/comp.c (Fcomp_el_to_eln_filename): Check for write
+       permission while choosing the output directory in
+       `comp-eln-load-path'.
+
+2020-10-06  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/international/mule.el (define-coding-system): Revert accidental 
change
+
+       This was accidentally included in 
a9f147af716aa026ec7778202901c4cb4bd5487d
+       "Use the full name of the null byte/character, not its abbreviation".
+
+2020-10-06  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/international/mule-util.el: Revert bug#41250 workaround
+
+       (truncate-string-ellipsis): Use the '…' character itself since it
+       should work now and is more readable.
+
+2020-10-06  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/international/ja-dic-cnv.el: Attempt to fix bug#41250
+
+       (skkdic-convert): Only bind `coding-system-for-read` where needed.
+
+2020-10-06  Mattias Engdegård  <mattiase@acm.org>
+
+       Suppress obsoletion warning in test of obsolete rx function
+
+       * test/lisp/emacs-lisp/rx-tests.el (rx-compat): Add byte-compilation
+       warning suppression.
+
+2020-10-06  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix last change
+
+       * lisp/international/mule-util.el (truncate-string-ellipsis):
+       Use Unicode hex escapes instead of named escapes here, because \N{...}
+       is not available during bootstrapping.  (Bug#41250)
+
+2020-10-06  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix last change
+
+       * lisp/international/mule-util.el (truncate-string-ellipsis): Add
+       a FIXME comment that explains the last change.  (Bug#41250)
+
+2020-10-06  Juri Linkov  <juri@linkov.net>
+
+       Don't use the character '…' literally in mule-util.el (bug#41250)
+
+       * lisp/international/mule-util.el (truncate-string-ellipsis):
+       Replace the character '…' with its Unicode name.
+
+2020-10-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix animate test that somehow changed recently
+
+2020-10-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix mule-util-tests after recent truncation changes
+
+       * test/lisp/international/mule-util-tests.el: Fix truncation checks.
+
+2020-10-06  Daniel Martín  <mardani29@yahoo.es>
+
+       Add missing full stop in MS-DOS processes documentation
+
+       * doc/emacs/msdos-xtra.texi (MS-DOS Processes): Minor copy edig
+       (bug#43820).
+
+2020-10-06  Harald Jörg  <haj@posteo.de>
+
+       cperl-mode: Fix a test to ensure cperl-mode is active
+
+       * test/lisp/progmodes/cperl-mode-tests.el
+       (cperl-mode-test-indent-exp): Make sure that cperl-mode is active
+       for testing 'cperl-indent-exp', also skip this test under
+       perl-mode.
+
+       * test/lisp/progmodes/cperl-mode-resources/cperl-indent-exp.pl:
+       Eliminate dependency on unrelated customizable variables (bug#10483).
+
+2020-10-05  Andrea Corallo  <akrl@sdf.org>
+
+       Fix a test in test/lisp/subr-tests.el
+
+       * test/lisp/subr-tests.el (subr-tests-bug22027): Redefine
+       `read-string' with a lambda with the same number of arguments.
+
+2020-10-05  Andrea Corallo  <akrl@sdf.org>
+
+       Add a test for primitive redefinition
+
+       * test/src/comp-tests.el (primitive-redefine): New test.
+       * test/src/comp-test-funcs.el (comp-test-primitive-redefine-f):
+       New function.
+
+2020-10-05  Andrea Corallo  <akrl@sdf.org>
+
+       Make primitive redefinition effective through trampoline synthesis
+
+       * lisp/loadup.el (dump-mode): Set `comp-enable-subr-trampolines'
+       when finished bootstrap.
+       * src/data.c (Ffset): Call `comp-enable-subr-trampolines' when
+       redefining a subr.
+       * src/comp.c (syms_of_comp): Define `comp-subr-trampoline-install'
+       symbol.
+       (syms_of_comp): Define `comp-enable-subr-trampolines' variable.
+
+2020-10-05  Andrea Corallo  <akrl@sdf.org>
+
+       Rename comp-subr-safe-advice -> comp-subr-trampoline-install
+
+2020-10-05  Andrea Corallo  <akrl@sdf.org>
+
+       Revert "Use `advice-flet' in place of `cl-letf' to avoid primitive...
+
+       This reverts commit 825e85b393a3d78ba43176ecc5bc1a9595d0fbea.
+
+2020-10-05  Andrea Corallo  <akrl@sdf.org>
+
+       Revert "Add `advice-flet' macro"
+
+       This reverts commit d07d7ab1a0e321ced62ebe5dd9db27eb7e93430e.
+
+2020-10-05  Andreas Schwab  <schwab@linux-m68k.org>
+
+       Use the full name of the null byte/character, not its abbreviation
+
+       * lisp/subr.el (inhibit-nul-byte-detection): Make it an obsolete alias.
+       * src/coding.c (setup_coding_system): Use original name.
+       (detect_coding): Rename nul_byte_found => null_byte_found.
+       (detect_coding_system): Use original name.
+       Rename nul_byte_found => null_byte_found.
+       (Fdefine_coding_system_internal): Use original name.
+       (syms_of_coding): Rename inhibit-nul-byte-detection to
+       inhibit-null-byte-detection.
+       * src/w16select.c (get_clipboard_data): Rename nul_char to null_char.
+       * src/json.c (check_string_without_embedded_nulls): Rename from
+       check_string_without_embedded_nuls.
+       (Fjson_parse_string): Adjust accordingly.
+       * src/coding.h (enum define_coding_undecided_arg_index)
+       (enum coding_attr_index): Rename ...nul_byte... to ...null_byte....
+       * lisp/info.el (info-insert-file-contents, Info-insert-dir):
+       * lisp/international/mule.el (define-coding-system):
+       * lisp/vc/vc-git.el (vc-git--call):
+       * doc/lispref/nonascii.texi (Lisp and Coding Systems): Use original 
name.
+
+2020-10-05  Michael Albinus  <michael.albinus@gmx.de>
+
+       * src/dbusbind.c (xd_signature): Better type check for array elements.
+
+       * test/lisp/net/dbus-tests.el (dbus-test01-compound-types): Extend test.
+
+2020-10-05  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix merging of region face for non-ASCII characters
+
+       * src/xdisp.c (extend_face_to_end_of_line): Restore the correct
+       original face used by the iterator on this line, not the ASCII
+       face.  (Bug#43363)
+
+2020-10-05  Jared Finder  <jared@finder.org>
+
+       Sort items in tmm properly, and allow clicking the final item
+
+       * lisp/tmm.el (tmm-menubar-keymap): Sort the final items properly.
+       (tmm-menubar): Allow clicking the final menu item (bug#43756).
+
+2020-10-05  Juri Linkov  <juri@linkov.net>
+
+       Use … in Gnus mode lines (when shortening them)
+
+       * lisp/gnus/gnus-sum.el (gnus-set-mode-line): Defer ellipsis
+       creation to `truncate-string-to-width' (bug#41250).  This uses …
+       by default.
+
+2020-10-05  Andrea Corallo  <akrl@sdf.org>
+
+       * configure.ac (lispdirrel): Fix value for MacOS build.
+
+2020-10-05  Nathan Moreau  <nathan.moreau@m4x.org>
+
+       Improve support for using vc commands in indirect buffers
+
+       * lisp/vc/vc.el (vc-deduce-fileset-1): New defun.
+       (vc-deduce-fileset): Adapt.
+       (vc-maybe-buffer-sync): New defun.
+       (vc-diff): Adapt.
+       (vc-ediff): Adapt.
+       (vc-root-diff): Adapt.
+       (vc-revision-other-window): Adapt (bug#40967).
+
+2020-10-05  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix the documentation parts of a recent commit
+
+       * lisp/international/mule-util.el (truncate-string-ellipsis): Doc
+       fix.
+
+       * doc/lispref/display.texi (Size of Displayed Text): Improve
+       wording and accuracy of the documentation of
+       'truncate-string-to-width'.  Document the function
+       'truncate-string-ellipsis'.
+
+       * etc/NEWS: Improve the wording of the entry for
+       'truncate-string-to-width'.
+
+2020-10-05  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/xdisp.c (syms_of_xdisp): New var `redisplay_skip_initial_frame`.
+
+       This makes it possible to run most of the redisplay code (tho not the
+       actual drawing since there's nowhere to draw) even when there's no
+       real frame at hand, as is the case in batch mode.
+       This makes `xdisp-tests--minibuffer-resizing` work even in batch.
+
+       (redisplay_internal): Obey it.
+       (init_xdisp): Set `echo_area_window` even in noninteractive mode.
+       * src/dispnew.c (update_frame): Skip the initial frame.
+       * src/frame.c (make_frame): Use 80x25 as the default initial size.
+
+       * test/src/xdisp-tests.el (xdisp-tests--minibuffer-resizing):
+       Use the new var and fix use of `executing-kbd-macro`.
+
+2020-10-04  Andrea Corallo  <akrl@sdf.org>
+
+       * configure.ac : Fix typo for MacOS nativecomp introduced by afb765ab3c
+
+2020-10-04  Juri Linkov  <juri@linkov.net>
+
+       Use '…' for ellipsis in truncate-string-to-width by default (bug#41250)
+
+       * lisp/international/mule-util.el (truncate-string-ellipsis):
+       Change the default value to nil.
+       (truncate-string-ellipsis): New function.
+       (truncate-string-to-width): Use the value returned from the
+       function 'truncate-string-ellipsis'.
+
+       * lisp/tab-bar.el (tab-bar-tab-name-truncated):
+       * lisp/tab-line.el (tab-line-tab-name-ellipsis):
+       Take advantage of the improvement of the ellipsis default value
+       in truncate-string-to-width and truncate-string-ellipsis.
+
+       * doc/lispref/display.texi (Size of Displayed Text):
+       Improve description of truncate-string-ellipsis.
+
+2020-10-04  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-10-04  Andrea Corallo  <akrl@sdf.org>
+
+       Make filename hashing compatible with self contained builds (bug#43532)
+
+       * Makefile.in (lispdirrel): Add replace template.
+       (epaths-force): Form correctly 'PATH_REL_LOADSEARCH' into epath.h
+       * configure.ac (lispdirrel): Define variable (relative path of the
+       lisp files from the installation directory).
+       * src/comp.c (Fcomp_el_to_eln_filename): Update algorithm not to
+       rely on 'PATH_DUMPLOADSEARCH' but on 'PATH_REL_LOADSEARCH'.
+       * src/epaths.in (PATH_REL_LOADSEARCH): Add macro template.
+
+2020-10-04  Andrea Corallo  <akrl@sdf.org>
+
+       * configure.ac: Better HAVE_NATIVE_COMP description
+
+2020-10-04  Andrea Corallo  <akrl@sdf.org>
+
+       Fix function description message for native compiled lisp functions
+
+       * lisp/help-fns.el (help-fns-function-description-header): Fix
+       message.
+
+2020-10-04  Andrea Corallo  <akrl@sdf.org>
+
+       Fix two tests in help-fns-tests.el for native code
+
+       * test/lisp/help-fns-tests.el (help-fns-test-lisp-defun)
+       (help-fns-test-lisp-defsubst): Fix description string
+       for native compiled functions.
+
+2020-10-04  Michael Albinus  <michael.albinus@gmx.de>
+
+       Make dbus-unregister-object work for monitors
+
+       * doc/misc/dbus.texi (Monitoring Messages): Rename from
+       "Monitoring Events".
+       (Register Objects, Monitoring Messages):
+       Mention returned object.
+
+       * lisp/net/dbus.el (dbus-unregister-object): Adapt docstring.
+       (dbus-unregister-object): Delete monitor if needed.
+       (dbus-register-monitor): Return proper object.
+
+       * src/dbusbind.c (dbus-registered-objects-table): Adapt docstring.
+
+       * test/lisp/net/dbus-tests.el (dbus--test-signal-handler):
+       Adapt docstring.
+       (dbus-test08-register-monitor): New test.
+
+2020-10-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make update-file-autoloads respect generated-autoload-file
+
+       * lisp/emacs-lisp/autoload.el (update-file-autoloads): Make
+       update-file-autoloads respect `generated-autoload-file', as
+       documented.
+
+2020-10-03  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid segfaults in lookup_image when faces were freed
+
+       * src/image.c (lookup_image): Make sure the frame's face cache
+       exists and has at least the basic faces.  If FACE_ID is not a
+       basic face, and is no longer cached, fall back on the 'default'
+       face.  (Bug#43700)
+
+2020-10-03  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Support extended menus in widget-choose
+
+       * doc/misc/widget.texi (Utilities): Document widget-choose.
+
+       * etc/NEWS: Document the feature (bug#4787).
+       * lisp/wid-edit.el (widget--simplify-menu): New function, to convert
+       extended menus into simplified menus when using the menu to prompt
+       through the minibuffer.
+       (widget-choose): Accept a keymap menu.  When not using x-popup-menu,
+       simplify the menu with widget--simplify-menu.  Document the changes in
+       the docstring.
+
+2020-10-03  Alan Third  <alan@idiocy.org>
+           Daniel Martín  <mardani29@yahoo.es>
+
+       Make drag and drop on NS open all URLs (bug#43470)
+
+       * lisp/term/ns-win.el (ns-drag-n-drop): Merge generic and copy
+       actions.
+
+2020-10-02  Alan Mackenzie  <acm@muc.de>
+
+       Enhance syntax-tests.el to test comments in parse-partial-sexp
+
+       This now tests the interface between parse-partial-sexp and the low 
level
+       comment function in syntax.c
+
+       * test/src/syntax-tests.el (syntax-comments-midpoint): New function.
+       (syntax-pps-comments): New macro.
+       (top level): Two new syntax-br-comments tests and five new 
syntax-pps-comments
+       tests.
+
+       * test/data/syntax-comments.txt (top level): Amend some test fragments 
and add
+       some more.
+
+2020-10-02  Mattias Engdegård  <mattiase@acm.org>
+
+       Calc: fix formatting and parsing Unix time (bug#43759)
+
+       The number of days from epoch to Jan 1, 1970 that was used in parsing
+       and formatting Unix time was incorrect.  The previous fix
+       (in e368697ce36) was incomplete.
+
+       Reported by Vincent Belaïche.
+
+       * lisp/calc/calc-forms.el (math-unix-epoch): New constant.
+       (math-format-date-part, math-parse-standard-date, calcFunc-unixtime):
+       Use math-unix-epoch instead of a constant that is sometimes wrong.
+       * test/lisp/calc/calc-tests.el (calc-unix-date): New test.
+
+2020-10-02  Andrea Corallo  <akrl@sdf.org>
+
+       Use `advice-flet' in place of `cl-letf' to avoid primitive redefinition
+
+       * test/lisp/time-stamp-tests.el (with-time-stamp-system-name): Use
+       `advice-flet' to advice primitive avoiding redefinition.
+
+       * test/lisp/tempo-tests.el (tempo-p-element-test)
+       (tempo-P-element-test, tempo-r-element-test)
+       (tempo-s-element-test, tempo-r>-element-test): Likewise.
+
+       * test/lisp/subr-tests.el (subr-tests-bug22027): Likewise.
+
+       * test/lisp/shadowfile-tests.el (shadow-test00-clusters)
+       (shadow-test01-sites, shadow-test06-literal-groups)
+       (shadow-test07-regexp-groups): Likewise.
+
+       * test/lisp/replace-tests.el (replace-tests-with-undo): Likewise.
+
+       * test/lisp/play/dissociate-tests.el
+       (dissociate-tests-dissociated-press): Likewise.
+
+       * test/lisp/net/tramp-tests.el (tramp-test10-write-region)
+       (tramp-test21-file-links): Likewise.
+
+       * test/lisp/kmacro-tests.el (kmacro-tests-call-macro-hint-and-repeat)
+       (kmacro-tests-repeat-on-last-key)
+       (kmacro-tests-repeat-view-and-run)
+       (kmacro-tests-bind-to-key-with-key-sequence-in-use): Likewise.
+
+       * test/lisp/files-tests.el (files-tests-read-file-in-~): Likewise.
+
+       * test/lisp/emacs-lisp/rmc-tests.el (test-read-multiple-choice):
+       Likewise.
+
+       * test/lisp/bookmark-tests.el (bookmark-test-bmenu-locate):
+       Likewise.
+
+       * test/lisp/abbrev-tests.el
+       (inverse-add-abbrev-skips-trailing-nonword)
+       (inverse-add-abbrev-skips-trailing-nonword/positive-arg)
+       (inverse-add-abbrev-skips-trailing-nonword/negative-arg): Likewise.
+
+2020-10-02  Andrea Corallo  <akrl@sdf.org>
+
+       Add `advice-flet' macro
+
+       The testsuite does large use of primitive redefinition, to avoid that
+       we define `advice-flet' to use instead as an easy `cl-letf'
+       replacement.
+
+       * lisp/emacs-lisp/nadvice.el (advice-flet): New macro.
+
+2020-10-02  Alan Mackenzie  <acm@muc.de>
+
+       Enhance syntax-tests.el to test comments in scan-lists
+
+       This now tests the interface between scan_lists and the comment 
functions.
+
+       * test/src/syntax-tests.el (syntax-br-comments): New macro.
+       ({-in, ;-in, /*-in): Set parse-sexp-ignore-comments to t.
+       (top level): Add 15 tests for comments inside brace lists.
+
+       * test/data/syntax-comments.txt (top level): Amend some test fragments.
+
+2020-10-02  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       78eacf31e8 ; Fix many typos in symbols in docs and comments
+       d5d12707d6 * doc/misc/flymake.texi (Using Flymake): Fix a typo.  (Bug...
+
+       # Conflicts:
+       #       lisp/allout.el
+       #       lisp/progmodes/ebrowse.el
+
+2020-10-02  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       41dcbeccf3 Make aliases introduced in previous patch obsolete
+       4997032c05 Restore some public debugging functions removed in Emacs 27
+
+2020-10-02  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       2af6b3147d Clarification in Tramp manual
+       8fbaca7d41 Check Emacs version used for Tramp compilation
+       90e5549f02 Don't signal an error when saving files on WdebDAV volumes
+       6f73cc3579 ; * lisp/net/eww.el (eww-search-words): Doc fix.
+       ce0842a165 * lisp/hi-lock.el (hi-lock-find-patterns): Autoload it.  (...
+
+2020-10-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix electric-buffer-list buffer selection
+
+       * lisp/ebuff-menu.el (electric-buffer-list): Ensure that point is
+       restored, which isn't always the case if
+       global-display-line-numbers-mode (bug#43755).  This enables
+       selecting buffers again.
+
+2020-10-02  Andrea Corallo  <akrl@sdf.org>
+
+       When advising search in `comp-eln-load-path' the first writable dir
+
+       * lisp/emacs-lisp/comp.el (comp-tampoline-compile): Do not crash
+       if we can't write in the first entry in `comp-eln-load-path' but
+       search for another one.
+
+2020-10-02  Andrea Corallo  <akrl@sdf.org>
+
+       Fix 'incoherent dumped eln file' error when DUMP-METHOD=pbootstrap
+
+       * src/Makefile.in ($(bootstrap_pdmp)): Add missing --bin-dest
+       --eln-dest flags.
+
+2020-10-02  Andrea Corallo  <akrl@sdf.org>
+
+       * src/pdumper.c (dump_do_dump_relocation): Better error for incoherent 
eln.
+
+2020-10-02  Eli Zaretskii  <eliz@gnu.org>
+
+       * doc/misc/flymake.texi (Using Flymake): Fix a typo.  (Bug#43758)
+
+2020-10-02  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       CC Mode: Convert the handling of c-special-indent-hook to standard usage
+
+       * lisp/progmodes/cc-styles.el (c-set-style): Use kill-local-variable 
rather
+       than copying the hook's global value to the local binding.
+       (c-make-styles-buffer-local): Remove redundant 
make-variable-buffer-local.
+
+2020-10-02  Robert Pluim  <rpluim@gmail.com>
+
+       Don't error if no GPG signing key configured
+
+       * lisp/gnus/mml-sec.el (mml-secure-epg-sign): Partially revert
+       "Make mml-secure-epg-sign bug out if we can't find an identity".
+       It causes signing to fail for people who have not set up
+       mml-secure-{smime,openpgp}-sign-with-sender, which is a regression
+       from Emacs-26 (Bug#40118).  In such a situation gpg will use its
+       default key.
+
+       Do not merge to master. On master Emacs will query the user.
+
+2020-10-02  Mattias Engdegård  <mattiase@acm.org>
+
+       Calc: fix business days calculation (bug43677)
+
+       The calculation of business days was broken in 2012 (probably
+       310e60d9454fe2 or thereabouts) when the date representation changed
+       epoch so that Jan 1, 1 AD became day number 1 instead of 0.  Repair
+       this, along with an unrelated bug that prevented arbitrary holiday
+       weekdays from working.
+
+       Reported by Aaron Zeng.
+
+       * lisp/calc/calc-forms.el (math-to-business-day)
+       (math-from-business-day): Correct calculation of weekdays using Calc's
+       current (Rata Die) chronology.  Modify loop condition to cope with odd
+       sets of holiday weekdays.
+       * test/lisp/calc/calc-tests.el (calc-business-days): New test.
+
+2020-10-02  Andrea Corallo  <akrl@sdf.org>
+
+       Clean-up testsuite for vanilla builds
+
+       Tag all native compiler tests and skip them in vanilla builds
+
+       * test/Makefile.in (SELECTOR_DEFAULT, SELECTOR_EXPENSIVE)
+       (SELECTOR_ALL): Define selectors for vanilla or nativecomp builds.
+       * test/src/comp-tests.el: Do not native compile test files on
+       vanilla.
+       (comp-deftest): New macro to define tests tagging as :nativecomp.
+
+2020-10-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix electric-buffer-list buffer selection
+
+       * lisp/ebuff-menu.el (electric-buffer-list): Ensure that point is
+       restored, which isn't always the case if
+       global-display-line-numbers-mode (bug#43755).  This enables
+       selecting buffers again.
+
+2020-10-02  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Make xref work better on variables in shell-script-mode
+
+       * lisp/progmodes/sh-script.el (sh-mode-syntax-table): Classify "/"
+       as punctuation so that `M-.' on $foo/bar works on the $foo part
+       (bug#25585).
+
+2020-10-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make `C-c C-e' in Python buffers work
+
+       * lisp/progmodes/python.el (python-shell-send-statement): Don't
+       send a cookie, because that leads to the naked expression not
+       being evaled (bug#43450).
+       (python-shell-send-region): Allow not sending a cookie.
+       (python-shell-buffer-substring): Ditto.
+
+2020-10-02  Per Starbäck  <per@starback.se>
+
+       python-shell-send-defun doesn't find the (whole) definition
+
+       * lisp/progmodes/python.el (python-shell-send-defun): Fix C-M-x
+       for definitions like @property\ndef bar(): (bug#37828).
+
+2020-10-02  Robert Pluim  <rpluim@gmail.com>
+
+       Make setting verify-hostname-error not make connections fail
+
+       * lisp/net/gnutls.el (gnutls-boot-parameters): If
+       verify-hostname-error was set, this would make verify-error a
+       non-proper list (bug#38602).
+
+2020-10-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Stop using a dynamically bound 'generated-autoload-file' variable
+
+       * doc/lispref/loading.texi (Autoload): Document change of name
+       (bug#39823).
+
+       * lisp/emacs-lisp/autoload.el (autoload-find-generated-file): Pass
+       the file name in.
+       (autoload-generated-file): Ditto.
+       (autoload-file-load-name): Ditto.
+       (generate-file-autoloads): Ditto.
+       (autoload--setup-output): Ditto.
+       (autoload-generate-file-autoloads): Ditto, and alter doc string to
+       reflect when `generated-autoload-file' is heeded.
+       (update-file-autoloads): Pass outfile in to functions.
+       (autoload-find-destination): Ditto.
+       (update-directory-autoloads): Make into an obsolete shim around
+       `make-directory-autoloads'.
+       (make-directory-autoloads): Renamed from
+       `update-directory-autoloads' with new semantics.
+       (batch-update-autoloads): Adjust caller.
+
+       * lisp/emacs-lisp/package.el (package-generate-autoloads): Adjust
+       caller.
+
+2020-10-02  Shohei YOSHIDA  <syohex@gmail.com>
+
+       Fix --with-json message
+
+       * configure.ac (WIDE_EMACS_INT): Fix --with-json help message
+       (bug#43754).
+
+2020-10-02  Trevor Murphy  <trevormurphy@google.com>
+
+       Fix check for derived modes in display-buffer-reuse-mode-window
+
+       * lisp/window.el (display-buffer-reuse-mode-window): Make the
+       check for derived modes actually work (bug#38677).
+
+2020-10-01  Tino Calancha  <tino.calancha@gmail.com>
+
+       Fix wdired-do-perm-changes when over Tramp
+
+       * lisp/wdired.el (wdired-do-perm-changes) Use set-file-modes
+       instead of external program (bug#39284).  This fixes the problem
+       of passing the wrong argument to the external chmod.
+
+2020-10-01  Tino Calancha  <tino.calancha@gmail.com>
+
+       Fix bug in wdired-get-filename
+
+       * lisp/wdired.el (wdired-get-filename): Acknowledge the first
+       argument (bug#39280).
+       * test/lisp/wdired-tests.el (wdired-test-bug39280): Add test.
+
+2020-10-01  Alan Mackenzie  <acm@muc.de>
+
+       Enhance syntax-tests.el to test some comment character handling.
+
+       * test/src/syntax-tests.el: Add a new section testing some aspects
+       of comment handling in syntax.c.  This needs further enhancement.
+       It uses ....
+
+       * test/data/syntax-comments.txt: A new test file.
+
+2020-10-01  Juri Linkov  <juri@linkov.net>
+
+       Use new faces isearch-group-odd and isearch-group-even (bug#43702)
+
+       * lisp/isearch.el (isearch-group-odd, isearch-group-even): New faces
+       instead of isearch-group-1 .. isearch-group-9.
+       (isearch-highlight): Use new faces.
+
+2020-10-01  Allen Li  <darkfeline@felesatra.moe>
+
+       Make recentf daily cleanup repeat
+
+       * lisp/recentf.el (recentf-auto-cleanup): Fix wording.
+       * lisp/recentf.el (recentf-auto-cleanup): Make timer repeat,
+       update docstring.
+       * etc/NEWS: Update news (bug#39638).
+
+2020-10-01  Michael R. Mauger  <michael@mauger.com>
+
+       * lisp/progmodes/sql.el (sql-add-product): Re-correct argument
+       spec.  Previous change was due to my mistake; I have
+       resolved back to the prior behavior (Bug#39960).
+       * test/lisp/progmodes/sql-tests.el (sql-test-add-product): Added
+       test to insure I don't make the same mistake again.
+
+2020-10-01  Boruch Baum  <boruch_baum@gmx.com>
+
+       command-execute doc string clarification
+
+       * lisp/simple.el (command-execute): Doc string clarification
+       (bug#43749).
+
+2020-10-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make aliases introduced in previous patch obsolete
+
+       * lisp/emacs-lisp/debug.el (debugger-toggle-locals):
+       (debug-help-follow): Make reinstated aliases obsolete.
+
+2020-10-01  Gemini Lasswell  <gazally@runbox.com>
+
+       Restore some public debugging functions removed in Emacs 27
+
+       * lisp/emacs-lisp/backtrace.el (backtrace--to-string): New function.
+       (backtrace-to-string): Use it.  Fix whitespace (bug#40728).
+       * lisp/emacs-lisp/debug.el (debugger-insert-backtrace): New function.
+       Mark it as obsolete.
+       (debugger-toggle-locals, debug-help-follow): New aliases.
+
+2020-10-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix loading WSDL data again
+
+       * lisp/net/soap-client.el (soap-make-wsdl): Change the WSDL
+       namespace back again.
+
+2020-10-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix restoring data in visual-line-mode
+
+       * lisp/simple.el (visual-line-mode): Only save values once, even
+       if the mode is switched on twice (bug#43730).  This makes both
+       previously set local values for variables like truncate-lines, as
+       well as default values for truncate-lines restorable.
+
+       * lisp/emulation/cua-base.el (cua-mode): Ditto.
+
+2020-10-01  Andrea Corallo  <akrl@sdf.org>
+
+       * test/src/comp-tests.el (comp-tests-bootstrap): Tag it as expensive.
+
+2020-10-01  Stefan Kangas  <stefan@marxist.se>
+
+       Silence byte-compiler in two tests
+
+       * test/lisp/obsolete/cl-tests.el (require):
+       * test/lisp/simple-tests.el (simple-test-count-words-bug-41761):
+       Silence byte-compiler.
+
+2020-10-01  Stefan Kangas  <stefan@marxist.se>
+
+       Remove some obsolete URLs
+
+       * lisp/net/newst-backend.el (newsticker--raw-url-list-defaults):
+       Remove some obsolete URLs.
+
+2020-10-01  Stefan Kangas  <stefan@marxist.se>
+
+       Don't quote lambdas in several places
+
+       * admin/find-gc.el (find-gc-unsafe):
+       * lisp/align.el (align-rules-list):
+       * lisp/comint.el (comint-arguments):
+       * lisp/double.el (isearch-mode-map):
+       * lisp/ehelp.el (electric-help-command-loop):
+       * lisp/emacs-lisp/cl-macs.el (cl-defstruct):
+       * lisp/emulation/cua-rect.el (cua--copy-rectangle-as-kill)
+       (cua-copy-rectangle-as-text):
+       * lisp/eshell/esh-var.el (eshell-parse-variable-ref):
+       * lisp/hexl.el (hexl-insert-multibyte-char):
+       * lisp/international/titdic-cnv.el (tsang-quick-converter)
+       (ziranma-converter):
+       * lisp/language/tibet-util.el (tibetan-decompose-precomposition-alist):
+       * lisp/mail/mailalias.el (mail-get-names):
+       * lisp/mh-e/mh-e.el (mh-auto-fields-list, mh-identity-default):
+       * lisp/mouse.el (mouse-buffer-menu-map, mouse-buffer-menu-alist):
+       * lisp/play/gametree.el (gametree-make-heading-function):
+       * lisp/shell.el (shell--command-completion-data):
+       * lisp/talk.el (talk-update-buffers):
+       * lisp/tempo.el (tempo-insert-template, tempo-is-user-element)
+       (tempo-build-collection):
+       * lisp/term.el (term-input-filter, term-pager-help):
+       * lisp/textmodes/table.el (table-delete-column):
+       * lisp/url/url-cache.el (url-cache-create-filename-human-readable):
+       * lisp/textmodes/tex-mode.el (latex-imenu-create-index): Don't quote
+       lambdas.
+
+2020-10-01  Stefan Kangas  <stefan@marxist.se>
+
+       Don't recommend quoting lambdas
+
+       * doc/misc/calc.texi (Symbolic Lisp Functions):
+       * doc/misc/cl.texi (Obsolete Lexical Binding):
+       * lisp/master.el:
+       * lisp/progmodes/sql.el (sql-interactive-mode):
+       * lisp/textmodes/flyspell.el (flyspell-mode):
+       * lisp/textmodes/ispell.el (ispell-message):
+       * lisp/textmodes/table.el: Doc fixes; don't recommend quoting
+       lambdas.
+
+2020-10-01  Michael Albinus  <michael.albinus@gmx.de>
+
+       Clarification in Tramp manual
+
+       * doc/misc/tramp.texi: Harmonize "Git" spelling.
+       (Frequently Asked Questions): Describe Emacs version mismatch.
+
+2020-10-01  Michael Albinus  <michael.albinus@gmx.de>
+
+       Check Emacs version used for Tramp compilation
+
+       * lisp/net/tramp-compat.el (tramp-compat-emacs-compiled-version):
+       New defconst.  Raise a warning, when it is not equal to the Emacs
+       version.
+
+2020-10-01  Michael Albinus  <michael.albinus@gmx.de>
+
+       Use Fkeywordp in dbusbind.c, again
+
+       * src/dbusbind.c (XD_KEYWORDP): New macro.
+       (XD_DBUS_TYPE_P, Fdbus__init_bus, xd_read_queued_messages): Use it.
+
+2020-10-01  Michael Albinus  <michael.albinus@gmx.de>
+
+       Revert last change in dbusbind.c
+
+       * src/dbusbind.c (XD_DBUS_TYPE_P, Fdbus__init_bus)
+       (xd_read_queued_messages): Revert last change.  (Bug#43724)
+
+2020-10-01  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (comp-c-func-name): Add autoload cookie.
+
+2020-10-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove mml-sec-test that assumes the first signature
+
+       This is no longer supported; the user is asked for what signature to
+       use.
+
+2020-10-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make mml-sec-tests not hang waiting for input
+
+       * lisp/gnus/mml-sec.el (mml-secure-epg-sign): Only query if we're
+       running interactively.  This makes a test not hang.
+
+2020-10-01  Pip Cet  <pipcet@gmail.com>
+
+       Don't optimize away star patterns in minibuffer file name completion
+
+       * lisp/minibuffer.el (completion-pcm--optimize-pattern): Keep
+       'star in the pattern (bug#41705).
+
+2020-10-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix the end-of-query prompt in multi-occur and multi-isearch when fido
+
+       * lisp/misearch.el (multi-isearch-read-buffers): Ditto.
+
+       * lisp/replace.el (multi-occur--prompt): New function (bug#41633).
+       (multi-occur): Use it.
+
+2020-10-01  Alex Bochannek  <alex@bochannek.com>
+
+       Make gnus-base64-repad a bit stricter again
+
+       * lisp/gnus/gnus-util.el (gnus-base64-repad): Make the code a bit
+       stricter again.
+
+2020-10-01  Robert Pluim  <rpluim@gmail.com>
+
+       Query for the signer when sending signed mail (with unknown signer)
+
+       * lisp/gnus/mml-sec.el (mml-secure-sender-sign-query): New
+       function (bug#40118).
+       (mml-secure-epg-sign): Use it to determine the signer (bug#40118).
+
+       * lisp/gnus/mml-sec.el
+       (mml-secure-allow-signing-with-unknown-recipient): Remove.
+
+2020-10-01  martin rudalics  <rudalics@gmx.at>
+
+       Fix segfault in some cases when restoring a selected window
+
+       * src/xdisp.c (restore_selected_window): Fix the more grave
+       problems caused by a function deleting the previously selected
+       frame or window (bug#39977).
+
+2020-10-01  Boruch Baum  <boruch_baum@gmx.com>
+
+       Split auto-revert-buffers into several functions
+
+       * lisp/autorevert.el (auto-revert--buffer-candidates)
+       (auto-revert-buffer): Refactor out...
+       (auto-revert-buffers): ... from here.
+
+2020-10-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix up previous window excursion patch in epa--select-keys
+
+       * lisp/epa.el (epa--select-keys): Use save-window-excursion
+       instead of open-coding the macro.
+
+2020-10-01  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/term.el: Make C-/ undo in a nested Emacs subprocess
+
+       (term-send-C-_): New function.
+       (term-raw-map): Use it for `C-/`, as is done in xterm and friends.
+
+2020-10-01  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * doc/emacs/basic.texi (Basic Undo): Explain the C-/ situation in xterm
+
+       AFAICT, in ttys you can send a `C-_` to Emacs either by pressing
+       `C-/` (e.g. xterm, uxterm, rxvt, xfce4-terminal, gnome-terminal)
+       or by pressing `C--` (e.g. rxvt, Linux console).
+
+2020-10-01  Richard M Stallman  <rms@gnu.org>
+
+       When recipient has no public key, make offer to skip it optional.
+
+       * lisp/epa-mail.el (epa-mail-offer-skip): New option.
+       (epa-mail-encrypt): If epa-mail-offer-skip is nil,
+       don't offer to skip a keyless recipient, just cause error.
+
+2020-10-01  Richard M Stallman  <rms@gnu.org>
+
+       Clarify previous undo keys change
+
+       Clarify which terminals allow C-/ and which make C-_ easy to type.
+
+2020-09-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Further doc fixes for dotimes about RESULT
+
+       * lisp/subr.el (dotimes): Be even more explicit about RESULT
+       (bug#16206).
+
+2020-09-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Minor documentation copyedits
+
+       * etc/NEWS:
+       * doc/emacs/dired.texi (Dired Enter): Fix wording, punctuation,
+       and typos in doc of 'dired-switches-in-mode-line'.
+
+2020-09-30  Vladimir Nikishkin  <lockywolf@gmail.com>  (tiny change)
+
+       Fix problem with parsing . as a symbol in bovine
+
+       * lisp/cedet/semantic/bovine/scm.el (semantic-lex-scheme-symbol):
+       Symbols do not have to start with a word-constituent character
+       (bug#40034).  In particular, symbols like : and . are valid.
+
+2020-09-30  Drew Adams  <drew.adams@oracle.com>
+
+       Allow controlling the Dired switches shown in the mode line
+
+       * doc/emacs/dired.texi (Dired Enter): Document it (bug#41250).
+
+       * lisp/dired.el (dired-switches-in-mode-line): New variable (bug#41250).
+       (dired-sort-set-mode-line): Use it.
+
+2020-09-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix problem of having the wrong window selected after saving foo.gpg
+
+       * lisp/epa.el (epa--select-keys): Restore the window configuration
+       after selecting the key to use (bug#43703).  This also ensures
+       that the buffer we were editing ends up as the current buffer
+       after saving it, instead of selecting a different window.
+
+2020-09-30  Andrea Corallo  <akrl@sdf.org>
+
+       Improve some docstring in src/comp.c
+
+       * src/comp.c (Fcomp_el_to_eln_filename)
+       (Fcomp__compile_ctxt_to_file): Improve docstring.
+       (Fcomp__compile_ctxt_to_file): Rename 'file_name' -> 'filename'.
+       (Fnative_comp_available_p): Improve docstring.
+
+2020-09-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix 'move-to-column' when invisible text follows a TAB
+
+       * src/indent.c (scan_for_column): Accept 2 more arguments, and
+       report through them the position corresponding to PREVCOL.  All
+       callers changed.
+       (Fmove_to_column): Use the prev_col's position to test for a TAB
+       instead of assuming that the TAB is just before point (which is
+       false when there's invisible text around).  (Bug#43587)
+
+       * test/src/indent-tests.el: New file.
+
+2020-09-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify the "Forgot to expand macro" message
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-form): Make the
+       define-after-use warning for macros clearer (bug#43678).
+
+2020-09-30  Andrea Corallo  <akrl@sdf.org>
+
+       * .gitlab-ci.yml: Uncomment some testing to align with master.
+
+2020-09-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Minor fixes of recent changes
+
+       * lisp/emacs-lisp/generic.el (define-generic-mode): Fix typos.
+
+       * etc/NEWS: Adjust an entry due to recent changes.
+
+2020-09-30  Michael Albinus  <michael.albinus@gmx.de>
+
+       Stricter checks for D-Bus compound types.
+
+       * src/dbusbind.c (XD_DBUS_TYPE_P, Fdbus__init_bus)
+       (xd_read_queued_messages): Use Fkeywordp instead of SYMBOLP.
+       (xd_signature): Stricter checks for compound types.
+
+       * test/lisp/net/dbus-tests.el (dbus-test01-compound-types): Extend test.
+
+2020-09-30  Michael Albinus  <michael.albinus@gmx.de>
+
+       Minor code cleanup in dbus-tests.el
+
+       * test/lisp/net/dbus-tests.el (dbus--tests-dir): Make it a defconst.
+       (dbus--test-method-reentry-handler): Mark args as unused.
+       (dbus-test04-method-reentry): Tag it :expensive-test.  Fix typo.
+       (dbus-test06-property-types): Remove duplicate test.
+       (dbus--test-introspect): Use `insert-file-contents-literally'.
+       (dbus--test-validate-property): Mark expected-annotations as unused.
+       (dbus--test-validate-m-or-s): Remove superfluous le-clause.
+
+2020-09-30  Hugh Daschbach  <hdasch@fastmail.com>
+
+       Add D-Bus method-call reentrant test
+
+       * test/lisp/net/dbus-tests.el (dbus--tests-method-reentry-handler):
+       New defun.
+       (dbus-test04-method-reentry): New test.  (Bug#43251)
+
+2020-09-30  Hugh Daschbach  <hdasch@fastmail.com>
+
+       * test/lisp/net/dbus-tests.el: Add timeout tests.
+
+       (dbus-test04-call-method-timeout, dbus-test07-introspection-timeout):
+       New tests.
+
+2020-09-30  Hugh Daschbach  <hdasch@fastmail.com>
+
+       Add D-Bus introspection tests
+
+       * lisp/net/dbus.el (dbus-annotation-deprecated): New defconst.
+
+       * test/lisp/net/dbus-tests.el  (dbus--tests-dir): New defvar.
+       (dbus--test-introspect, dbus--test-validate-interface)
+       (dbus--test-validate-annotations, dbus--test-validate-property)
+       (dbus--test-validate-m-or-s, dbus--test-validate-signal)
+       (dbus--test-validate-method): New defuns.
+       (dbus-test07-introspection): New test.
+
+       * test/lisp/net/dbus-resources/org.gnu.Emacs.TestDBus.xml:
+       New test data.
+
+2020-09-30  Hugh Daschbach  <hdasch@fastmail.com>
+
+       * test/lisp/net/dbus-tests.el: Add property tests.  (Bug#43252)
+
+       (dbus--test-run-property-test, dbus--test-property): New defuns.
+       (dbus-test06-property-types): New test for property registration,
+       set, get.
+
+2020-09-30  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into clean-up
+
+2020-09-30  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Don't have C-x = bug out in a "C" locale with non-ASCII chars
+
+       * lisp/simple.el (what-cursor-position): Ensure that we always
+       have a coding system here, even if the locale is "C" (bug#40702).
+
+2020-09-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix whitespace regexp in gnus-base64-repad
+
+       * lisp/gnus/gnus-util.el (gnus-base64-repad): Fix the whitespace
+       regexp.
+
+2020-09-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix gnus-base64-repad test failures
+
+2020-09-30  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/cl-macs.el (hash-table): Define the type's typep test
+
+2020-09-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix isearch-group-* colours on low-colour displays
+
+       * lisp/isearch.el (isearch-group-1): On low-colour displays, just
+       use the normal isearch colour (bug#43702).
+       (isearch-group-2 etc): Ditto.
+
+2020-09-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       define-generic-mode doc string fix
+
+       * lisp/emacs-lisp/generic.el (define-generic-mode): Say what a
+       generic mode is (bug#43713).
+
+2020-09-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Give better error feedback on wrong password in .gpg files
+
+       * lisp/epa-file.el (epa-file--find-file-not-found-function): Do a
+       user-error when there's a wrong password (bug#43704).
+       (epa--wrong-password-p): New function.
+       (epa-file-insert-file-contents): Use it, and stash the error away
+       for later signalling.
+
+       * lisp/emacs-lisp/subr-x.el (if-let): Autoload.
+
+2020-09-30  Thomas Fitzsimmons  <fitzsim@fitzsim.org>
+
+       soap-client: Bump version to 3.2.0
+
+       * lisp/net/soap-client.el: Bump version to 3.2.0.
+
+2020-09-30  Thomas Fitzsimmons  <fitzsim@fitzsim.org>
+
+       soap-client: Remove FIXME comment
+
+       * lisp/net/soap-client.el (soap-encode-attributes): Remove
+       cl-defmethod FIXME comment; continue supporting Emacs 24.1.
+
+2020-09-30  Thomas Fitzsimmons  <fitzsim@fitzsim.org>
+           Paul Eggert  <eggert@cs.ucla.edu>
+
+       soap-client: Update soap-decode-date-time
+
+       * lisp/net/soap-client.el (soap-decode-date-time): Add support for
+       Emacs versions that support fractional seconds.  Make DATATYPE
+       optional.  Remove FIXME comment.
+
+2020-09-29  Michael Albinus  <michael.albinus@gmx.de>
+
+       More strict D-Bus type checking
+
+       * lisp/net/dbus.el (dbus-register-monitor): Register proper key.
+       (dbus-monitor-handler): Adapt docstring.  Use grave text-quoting-style.
+
+       * src/dbusbind.c (xd_signature, xd_append_arg): More strict tests.
+       (syms_of_dbusbind): Adapt docstring.
+
+       * test/lisp/net/dbus-tests.el (dbus-test01-basic-types): Extend test.
+
+2020-09-29  Eli Zaretskii  <eliz@gnu.org>
+
+       Don't signal an error when saving files on WdebDAV volumes
+
+       * src/w32.c (acl_get_file): If get_file_security raises the
+       ERROR_ACCESS_DENIED error, treat that like unsupported ACLs.
+
+2020-09-29  Andrea Corallo  <akrl@sdf.org>
+
+       Some clean-up in comp.el
+
+       * lisp/emacs-lisp/comp.el (comp-emit-cond-jump, comp-emit-switch)
+       (comp-limplify-block, comp-compute-edges)
+       (comp-ssa-rename, comp-fwprop*, comp-effective-async-max-jobs)
+       (comp-run-async-workers): Respect max 80 columns.
+       (batch-byte-native-compile-for-bootstrap): Improve doc + remove
+       some now unnecessary error handling.
+
+2020-09-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix emacsclient -c foo.txt behaviour with many frames
+
+       * lisp/server.el (server-execute): Pass in whether we opened a new
+       frame or not (bug#43645).
+       (server-switch-buffer): Use this to switch to the requested buffer
+       in the new frame if we have "emacsclient -c foo.txt", and retain
+       the old behaviour if it's "emacsclient foo.txt".
+
+2020-09-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make M-x compile skip the header when looking for errors etc
+
+       * lisp/progmodes/compile.el (compilation--ensure-parse): Skip the
+       header when parsing (bug#43651).
+       (compilation-start): Mark the end.
+
+2020-09-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix space parsing in gnus-base64-repad
+
+       * lisp/gnus/gnus-util.el (gnus-base64-repad): Get the separator
+       regexp right -- there will often be spaces around the newlines.
+
+2020-09-29  Mattias Engdegård  <mattiase@acm.org>
+
+       * lisp/gnus/smime.el (smime-openssl-program): Allow nil value.
+
+2020-09-29  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix custom-tests with non-GNU grep
+
+       * admin/cus-test.el (cus-test-get-lisp-files): Add path argument 
required
+       by standard grep (BSD, for instance).
+
+2020-09-29  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/eval.c (Fapply): Simplify last change
+
+2020-09-28  Andrea Corallo  <akrl@sdf.org>
+
+       Rename in docstrings "non nil" into "non-nil"
+
+       * lisp/emacs-lisp/comp.el: Rename non nil -> non-nil in doc.
+
+       * src/comp.c: Likewise.
+
+2020-09-28  Andrea Corallo  <akrl@sdf.org>
+
+       * src/lisp.h: Remove a newline diff left over master.
+
+2020-09-29  Andrea Corallo  <akrl@sdf.org>
+
+       Clean-up some now unnecessary diff against master
+
+       * lisp/emacs-lisp/autoload.el (update-directory-autoloads):
+       .eln files have been moved so remove the '.eln' match.
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-refresh-preloaded):
+       Likewise.
+
+       * lisp/emacs-lisp/find-func.el (find-library-suffixes): Clean-up
+       as '.eln' is no more in `load-suffixes'.
+
+       * lisp/help-fns.el (find-lisp-object-file-name): Clean-up as
+       `symbol-file' will return the '.elc' file.
+
+       * src/lread.c (Fget_load_suffixes): Remove logic as '.eln' is not
+       anymore in load-suffixes.
+       (openp): Two spaces.
+
+2020-09-28  Michael Albinus  <michael.albinus@gmx.de>
+
+       Improve D-Bus monitor
+
+       * lisp/net/dbus.el (dbus-monitor-method-call)
+       (dbus-monitor-method-return, dbus-monitor-error)
+       (dbus-monitor-signal): New defconsts.
+       (dbus-monitor-goto-serial): New defun.
+       (dbus-monitor-handler): Use them.  Add timestamp.  Make also links
+       between D-Bus messages with the same serial.
+
+2020-09-28  Earl  <ej32u@protonmail.com>
+
+       Suggest region contents in highlight-regexp when region active
+
+       * lisp/hi-lock.el (hi-lock-face-buffer): Use the region in the
+       prompt if the region is active in transient-mark-mode (bug#43641).
+
+2020-09-28  Harald Jörg  <haj@posteo.de>
+
+       cperl-mode: Add compatibility for Emacs 26.1
+
+       * lisp/progmodes/cperl-mode.el (cperl--time-convert): New
+       compatibility helper for time-convert (available in Emacs
+       27.1)
+       (cperl--format-prompt): New compatibility helper for
+       format-prompt (available in Emacs 28)
+       (cperl-info-on-command): use cperl--format-prompt
+       (cperl-perldoc): use cperl--format-prompt
+       (cperl-time-fontification): use cperl--time-convert (bug#43652)
+
+2020-09-28  Alex Bochannek  <alex@bochannek.com>
+
+       Repad the Face header in Gnus
+
+       * lisp/gnus/gnus-fun.el (gnus-convert-face-to-png): Use it.
+
+       * lisp/gnus/gnus-util.el (gnus-base64-repad): New function (bug#43441).
+
+2020-09-28  Jan Tatarik  <jan.tatarik@gmail.com>
+
+       Fix Gnus parsing of weekly recurring icalendar events
+
+       * lisp/gnus/gnus-icalendar.el
+       (gnus-icalendar-event:recurring-interval): Fix parsing of weekly
+       recurring events (bug#43669).
+
+       Example: in the absence of explicit INTERVAL value in the calendar
+       event, a weekly event with occurrences scheduled for Mondays and
+       Wednesdays should receive the default recurring interval of "1" and the
+       org mode timestamp repeater should be "+1w".
+
+       Due to a bug in the current code we receive "WEEKLY" and "+WEEKLYw"
+       instead. The patch fixes the issue.
+
+2020-09-28  Eli Zaretskii  <eliz@gnu.org>
+
+       * lisp/hi-lock.el (hi-lock-find-patterns): Autoload it.  (Bug#43670)
+
+2020-09-28  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Fix pcomplete completion of things like `xargs` and `sudo` (bug#16197)
+
+       * lisp/pcmpl-unix.el (pcomplete/xargs): Don't `pcomplete-this` around
+       `pcomplete-command-completion-function`.
+       (pcomplete/sudo): Make it an alias for `pcomplete/xargs`.
+
+       * lisp/shell.el (shell-command-completion-function): Return the
+       names from `exec-path` when the command name has no `/`.
+
+2020-09-27  Michael Albinus  <michael.albinus@gmx.de>
+
+       Document D-Bus monitoring
+
+       * doc/misc/dbus.texi: Replace "symbol" by "keyword" where appropriate.
+       (Alternative Buses): Adapt dbus-init-bus description.
+       (Errors and Events): Adapt dbus-event structure.  New defuns
+       dbus-event-destination-name, dbus-event-handler and 
dbus-event-arguments.
+       (Monitoring Events): New node.
+
+       * lisp/net/dbus.el: Replace "symbol" by "keyword" where appropriate.
+       (cl-lib): Require.
+       (dbus-register-monitor): Adapt the argument list.
+       (dbus-monitor-handler): Extend.
+       (dbus-init-bus): Adapt docstring.
+
+       * test/lisp/net/dbus-tests.el (dbus-test01-compound-types):
+       Skip if needed.  Extend test.
+
+2020-09-27  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       0b78785a9b (origin/emacs-27) Minor copyedits in the Emacs user manual
+       0dfc6fdc1f Followup to a recent change in menu-bar.el
+       767713682c Enable "Continue Tags Search" menu item only when it can b...
+       4bb7532163 Fix soap-client URL
+
+2020-09-27  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       f31c6792ab Fix support for Zip64 zip files
+       ba635a19fb * lisp/hi-lock.el (hi-lock-auto-select-face): Doc fix.  (B...
+       cc8fef2bdd Avoid infinite recursion with 'relative' line numbers display
+       395f10cb98 ; Fix more trivial typos
+       bf4accb65e ; Fix some trivial typos
+
+       # Conflicts:
+       #       etc/NEWS
+       #       lisp/arc-mode.el
+
+2020-09-27  Pip Cet  <pipcet@gmail.com>
+
+       Fix more single-byte accesses caused by bytepos/charpos confusion
+
+       * src/cmds.c (internal_self_insert): Use FETCH_BYTE, not
+       FETCH_CHAR, for a decremented byte position (bug#41520).
+
+       * src/xdisp.c (Fwindow_text_pixel_size, trailing_whitespace_p): Ditto.
+
+2020-09-27  Pip Cet  <pipcet@gmail.com>
+
+       Handle single-argument `apply' consistently (bug#40968)
+
+       * src/eval.c (Fapply): Handle (apply nil) without crashing.
+       Document single-argument form.
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize-apply): Don't attempt
+       to optimize single-argument apply.
+       * doc/lispref/functions.texi (Calling Functions): Document
+       single-argument apply.  Provide example (bug#40968).
+
+2020-09-27  Pip Cet  <pipcet@gmail.com>
+
+       Avoid 1s sleep-for before sending the startfile to a comint process
+
+       * lisp/comint.el (comint-exec): Simplify startup file code.
+       (Bug#41640).
+
+2020-09-27  Simon Lang  <Simon.lang@outlook.com>
+
+       Add a new grep-match-regexp variable
+
+       * doc/emacs/building.texi (Grep Searching): Document it.
+
+       * lisp/progmodes/grep.el (grep-match-regexp): New variable (bug#41766).
+       (grep-filter): Use it.
+
+2020-09-27  Mattias Engdegård  <mattiase@acm.org>
+
+       Minor string-search optimisations (bug#43598)
+
+       * src/fns.c (Fstring_search): Perform cheap all-ASCII checks before more
+       expensive ones.  Use a faster loop when searching for non-ASCII
+       non-raw bytes.
+       * test/src/fns-tests.el (string-search): Add more test cases.
+
+2020-09-27  Mattias Engdegård  <mattiase@acm.org>
+
+       Improve accuracy in string-replace description (bug#43598)
+
+       * doc/lispref/searching.texi (Search and Replace): More careful
+       description; string-replace does not necessarily return a copy.
+
+2020-09-27  Eli Zaretskii  <eliz@gnu.org>
+
+       Minor copyedits in the Emacs user manual
+
+       * doc/emacs/emacs.texi (Top): Remove "real-time" from the Emacs
+       description; add "advanced", to be consistent with what we say in
+       the Introduction section.  (Bug#43633)
+
+2020-09-27  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of the 'abbrev-suggest' feature
+
+       * lisp/abbrev.el (abbrev-suggest, abbrev-suggest-hint-threshold)
+       (abbrev-suggest-show-report): Improve wording of the doc strings.
+
+       * doc/emacs/abbrevs.texi (Abbrevs Suggestions): Fix the typo in
+       the node name.  Improve wording.
+       * doc/emacs/emacs.texi (Top): Add the new node in the @detailmenu
+       section.
+
+       * etc/NEWS: Improve wording of the NEWS entry for
+       'abbrev-suggest'.
+
+2020-09-27  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve display of raw bytes in the echo-area
+
+       * src/print.c (print_object): When printing a unibyte string,
+       convert non-ASCII bytes to their character code, before sending
+       them to 'printchar'.  (Bug#43632)
+
+2020-09-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix searching for multibyte needles in unibyte haystacks
+
+       * src/fns.c (Fstring_search): Make this work better when searching
+       unibyte haystacks for multibyte needles (bug#43598).
+
+2020-09-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make dired-replace-in-string obsolete
+
+       * lisp/dired.el (dired-insert-directory):
+       * lisp/dired-aux.el (dired-rename-subdir, dired-rename-subdir-2)
+       (dired-insert-subdir): Adjust callers.
+
+       * lisp/dired.el (dired-replace-in-string): Make obsolete.
+
+2020-09-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add tiny optimization for string-search
+
+       * src/fns.c (Fstring_search): Add tiny optimization for needles
+       that are longer than the haystack (bug#43598).
+
+2020-09-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Rename replace-in-string to string-replace
+
+       * doc/lispref/searching.texi (Search and Replace): Update.
+       * lisp/bindings.el (mode-line-position): Update callers.
+
+       * lisp/subr.el (string-replace): Rename from replace-in-string
+       since that clashes with XEmacs' replace-in-string which is
+       equivalent to the Emacs replace-regexp-in-string (bug#43598).
+
+2020-09-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix gnus-faq example
+
+       * doc/misc/gnus-faq.texi (FAQ 6-2): replace-in-string was the XEmacs
+       name for the function.
+
+2020-09-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Slight replace-in-string optimization
+
+       * lisp/subr.el (replace-in-string): Optimize to return the
+       original string if nothing was replaced (bug#43598).
+
+2020-09-26  Mathias Dahl  <mathias.dahl@gmail.com>
+
+       Abbrev suggestions helps users remember to use defined abbrevs
+
+           * lisp/abbrev.el (abbrev-suggest): New defcustom.
+           (abbrev-suggest-hint-threshold): New defcustom.
+           (abbrev--suggest-get-active-tables-including-parents): New defun.
+           (abbrev--suggest-get-active-abbrev-expansions): New defun.
+           (abbrev--suggest-count-words): New defun.
+           (abbrev--suggest-get-previous-words): New defun.
+           (abbrev--suggest-above-threshold): New defun.
+           (abbrev--suggest-saved-recommendations): New defvar.
+           (abbrev--suggest-inform-user): New defun.
+           (abbrev--suggest-shortest-abbrev): New defun.
+           (abbrev--suggest-maybe-suggest): New defun.
+           (abbrev--suggest-get-totals): New defun.
+           (abbrev-suggest-show-report): New defun.
+           (expand-abbrev): If the previous word was not an abbrev, maybe
+           suggest an abbrev to the user.
+           * doc/emacs/abbrevs.texi (Abbrev suggestions): New section.
+           * etc/NEWS: Announce abbrev suggestions.
+
+2020-09-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix the patch tagging in submit-emacs-patch
+
+       * lisp/mail/emacsbug.el (submit-emacs-patch): Put the tags in the
+       debbugs pseudo-headers because X-Debbugs-Tags is not a thing that
+       exists.
+
+2020-09-26  Eli Zaretskii  <eliz@gnu.org>
+
+       Followup to a recent change in menu-bar.el
+
+       * lisp/fileloop.el (fileloop--operate-function): Mention in a
+       comment that menu-bar.el relies on the default value.
+
+2020-09-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       message-add-action doc string fix
+
+       * lisp/gnus/message.el (message-add-action): Document types.
+
+2020-09-26  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Display some character widget values in a more user-friendly way
+
+       * lisp/wid-edit.el (widget-character--escape-sequences-alist): New
+       variable.
+       (widget-character--change-character-display): New function.  Use the new
+       variable.
+       (widget-character-notify): New function, to keep track of the changes
+       in the character widget, and display characters like tab,
+       newline and spaces better.
+       (character widget): Use widget-character-notify as the notify
+       function.  Use widget-character--change-character-display for the
+       internal representation of value (bug#15925).
+
+2020-09-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make macroexpand of `push' slightly less confusing
+
+       * lisp/subr.el (push): Use a symbol with a different name to make
+       macroexpand look slightly less confusing (bug#43601).
+
+2020-09-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix defcustom types of some variables defined in C
+
+       * lisp/cus-start.el (standard): Fix the defcustom type of a number
+       of variables defined in C (bug#43611).
+
+2020-09-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix mouse highlighting in Customize buffers
+
+       * lisp/wid-edit.el (widget-button-click): Remove a
+       newly-introduced check that made mouse highlights no longer work
+       (bug#43612).  It's unclear what the check was trying to fix.
+
+2020-09-26  Harald Jörg  <haj@posteo.de>
+
+       cperl-mode: Delete conditional code where conditions evaluate to nil
+
+       * lisp/progmodes/cperl-mode.el (cperl-force-face): This
+       macro's single effect is now inlined, and the macro is gone.
+       (cperl-problems): The reference to choose-color.el, which
+       is no longer available for download, is deleted.
+       (no function): A list of unnecessary empty variable
+       definitions is gone.  They were needed for Emacs v19 and
+       below.
+       (cperl-init-faces-weak): This function does no longer do
+       anything and is therefore deleted.
+       (cperl-init-faces): Some bodies of conditional code is deleted
+       because as of today the conditions evaluate to constants.  The
+       face cperl-nonoverridable-face is no longer available as
+       variable and needs to be doubly-quoted in one place (bug#43622).
+
+2020-09-26  Andrea Corallo  <akrl@sdf.org>
+
+       Always set 'Vexec_path' before 'Vinvocation_directory' (bug#43137)
+
+       Do this as depending on the OS if argv0 is not populated 'Vexec_path'
+       is used to infer 'Vinvocation_directory'.
+
+       * src/pdumper.c (pdumper_load): Invoke 'init_vars_for_load' instead
+       of 'set_invocation_vars'.
+
+       * src/lisp.h: Extern 'init_vars_for_load' instead of
+       'set_invocation_vars' .
+
+       * src/emacs.c (set_invocation_vars): Make it static and remove
+       double invocation guard.
+       (init_vars_for_load): Wrap 'init_callproc_1' and 'set_invocation_vars'
+       calls + add double invocation guard.
+       (init_cmdargs): Move out 'set_invocation_vars' invocation.
+       (main): Call 'init_vars_for_load' instead of 'init_callproc_1'.
+
+2020-09-26  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/cl-macs.el (cl--optimize): Add a FIXME.
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-09-26  Stefan Kangas  <stefankangas@gmail.com>
+
+       Silence some byte-compiler warnings
+
+       * test/lisp/arc-mode-tests.el (arc-mode-test-archive-int-to-mode):
+       * test/lisp/custom-tests.el (cus-test-opts):
+       * test/lisp/help-fns-tests.el (foo-test-map)
+       (help-fns-test--describe-keymap-foo):
+       * test/src/fns-tests.el (w32-collate-ignore-punctuation)
+       (fns-tests-func-arity): Silence byte-compiler warnings.
+
+2020-09-26  Stefan Kangas  <stefankangas@gmail.com>
+
+       Repurpose libxml test for obsolete argument
+
+       * test/src/xml-tests.el (libxml-tests): Move half this test for the
+       recently obsoleted fourth argument to libxml-parse-xml-region...
+       * test/lisp/xml-tests.el (xml-tests--remove-comments): ...to a new
+       test here for xml-remove-comments.
+
+       * test/src/xml-tests.el (libxml-tests--data-comments-discarded):
+       Move test data from here...
+       * test/lisp/xml-tests.el (xml-tests--data-with-comments): ...to here.
+
+2020-09-26  Michael Albinus  <michael.albinus@gmx.de>
+
+       * etc/NEWS: Add new D-Bus monitor functionality.  Fix typos.
+
+2020-09-26  Michael Albinus  <michael.albinus@gmx.de>
+
+       Add D-Bus monitor
+
+       * lisp/net/dbus.el (dbus-interface-monitoring): New defconst.
+       (dbus-call-method, dbus-call-method-asynchronously)
+       (dbus-send-signal, dbus-method-return-internal)
+       (dbus-method-error-internal, dbus-check-arguments): Accept also
+       :system-private and :session-private.
+       (dbus-check-event, dbus-event-path-name)
+       (dbus-event-interface-name)
+       (dbus-event-member-name, dbus-property-handler)
+       (dbus-handle-bus-disconnect): Adapt according to new structure.
+       (dbus-handle-event): Handle also monitor events.
+       (dbus-event-destination-name, dbus-event-handler)
+       (dbus-event-arguments, dbus-register-monitor, dbus-monitor-handler):
+       New defuns.
+
+       * src/dbusbind.c (XD_DBUS_VALIDATE_BUS_ADDRESS, xd_remove_watch)
+       (Fdbus__init_bus): Accept also :system-private and :session-private.
+       (xd_read_message_1): Add destination and error_name to
+       dbus-event.  Handle monitor events.
+       (syms_of_dbusbind): Declare QCsystem_private, QCsession_private
+       and QCmonitor.
+       (dbus-registered-objects-table): Fix docstring.
+
+2020-09-26  Eli Zaretskii  <eliz@gnu.org>
+
+       Enable "Continue Tags Search" menu item only when it can be used
+
+       * lisp/menu-bar.el (menu-bar-search-menu) <tags-continue>: Enable
+       only when there was a previous tags search.  (Bug#43569)
+       (menu-bar-replace-menu) <tags-repl-continue>: Enable only when
+       there was a previous tags-replace.
+
+2020-09-26  Stefan Kangas  <stefankangas@gmail.com>
+
+       Fix byte-compiler warning in CEDET
+
+       * lisp/cedet/semantic/lex.el (semantic-lex-catch-errors): Fix
+       byte-compiler warning by removing obsolete variable.
+
+2020-09-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix soap-client URL
+
+       * lisp/net/soap-client.el (soap-create-envelope):
+       Fix URL that I broke in 2019-09-23T06:53:30Z!eggert@cs.ucla.edu.
+       Problem reported by Thomas Fitzsimmons.
+
+2020-09-26  Thomas Fitzsimmons  <fitzsim@fitzsim.org>
+
+       soap-client.el: Prevent some invalid encoding warnings
+
+       * lisp/net/soap-client.el (soap-encode-xs-complex-type): Do not
+       warn about missing non-nillable slot if type itself is optional.
+
+2020-09-25  Glenn Morris  <rgm@gnu.org>
+
+       Fix out-of-tree make check
+
+       * test/lisp/custom-tests.el (custom-test-admin-cus-test): New const.
+       (check-for-wrong-custom-types): Use it.
+
+2020-09-25  Alan Third  <alan@idiocy.org>
+
+       Tidy up NS color handling
+
+       * src/nsimage.m (COLORSPACE_NAME): New macro to find the current
+       colorspace.
+       ([EmacsImage initFromXBM:width:height:fg:bg:reverseBytes:]):
+       ([EmacsImage initForXPMWithDepth:width:height:]): Use the current
+       colorspace.
+       * src/nsterm.h (NSAppKitVersionNumber10_7):
+       (NSAppKitVersionNumber10_10): Define for macOS version checks.
+       * src/nsterm.m ([NSColor colorForEmacsRed:green:blue:alpha:]): Tidy up
+       the version checking.
+       ([NSColor colorUsingDefaultColorSpace]): Tidy the version checking and
+       use [NSColor colorUsingColorSpace:] with GNUstep.
+
+2020-09-25  Alan Third  <alan@idiocy.org>
+
+       Remove obsolete macOS support for NS font backend
+
+       The ns font backend is has been disabled on macOS for a long time and
+       doesn't work correctly even if re-enabled.
+
+       * src/nsfont.m:
+       (ns_char_width):
+       (ns_ascii_average_width):
+       (ns_get_covering_families):
+       (nsfont_open):
+       (nsfont_close):
+       (nsfont_draw):
+       (ns_uni_to_glyphs):
+       (ns_glyph_metrics):
+       (EmacsGlyphStorage): Remove all Cocoa only code.
+       * src/nsterm.h (EmacsGlyphStorage): Remove.
+       (struct nsfont_info): Make GNUstep only.
+       * src/nsterm.m (ns_compute_glyph_string_overhangs): Remove GNUstep
+       only code from Cocoa builds.
+
+2020-09-25  Alan Third  <alan@idiocy.org>
+
+       Implement internal border colors on NS (bug#41071)
+
+       * src/nsterm.m (ns_clear_under_internal_border): New function.
+       (ns_after_update_window_line): Use the correct background color.
+       (ns_redisplay_interface): Add ns_clear_under_internal_border.
+
+2020-09-25  Mattias Engdegård  <mattiase@acm.org>
+
+       string-search robustness and documentation improvement (bug#43598)
+
+       * src/fns.c (Fstring_search): Check START-POS argument range.
+       Simplify logic.  Improve doc string.
+       * test/src/fns-tests.el (string-search): Add test cases.
+       * doc/lispref/strings.texi (Text Comparison): Elaborate.
+       * lisp/emacs-lisp/byte-opt.el (pure-fns): Mark string-search as pure.
+
+2020-09-25  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix support for Zip64 zip files
+
+       * lisp/arc-mode.el (archive-zip-summarize): Fix detection of Zip64
+       central directory.  Support 64-bit file size field used by Zip64.
+       (Bug#43597)
+
+2020-09-25  Noam Postavsky  <npostavs@gmail.com>
+
+       * CONTRIBUTE: Don't recommend action stamps
+
+       * CONTRIBUTE: Remove mention of the "action stamp" thing (bug#20609).
+
+2020-09-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Partially revert previous prolog.el cleanup
+
+       * lisp/progmodes/prolog.el (prolog-font-lock-keywords): Partially
+       revert previous patch -- we want the prolog-warning-face symbol,
+       not its value.
+
+2020-09-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix defcustom type in sql.el for sql-postgres-login-params
+
+       * lisp/progmodes/sql.el (sql-login-params): Fix defcustom type to
+       match sql-postgres-login-params value.
+
+2020-09-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix a defcustom type in gdb-mi.el
+
+       * lisp/progmodes/gdb-mi.el (gdb-display-source-buffer-action): Fix
+       defcustom type to match the value.
+
+2020-09-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix defcustom type in whitespace.el
+
+       * lisp/whitespace.el (whitespace-space-after-tab-regexp)
+       (whitespace-indentation-regexp): The first string here isn't a
+       regexp, it's a string (that's expanded with format to be a regexp).
+
+2020-09-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix the defcustom type fix in python.el
+
+       * lisp/progmodes/python.el (python-pdbtrack-exit-command): Fix
+       defcustom type (bug#30990).
+
+2020-09-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix some defcustom types
+
+       * lisp/whitespace.el (whitespace-style):
+       * lisp/gnus/message.el (message-screenshot-command):
+       * lisp/progmodes/compile.el (compilation-transform-file-match-alist):
+       * lisp/progmodes/gdb-mi.el (gdb-default-window-configuration-file):
+       * lisp/progmodes/python.el (python-pdbtrack-exit-command): Fix the
+       defcustom types.
+       * lisp/progmodes/sql.el (sql-password-wallet): Fix the value.
+
+2020-09-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add an expensive test for defcustom types
+
+       * admin/cus-test.el (cus-test-opts): Return the tests.
+
+       * test/lisp/custom-tests.el (check-for-wrong-custom-types): Test
+       custom types (bug#30990).
+
+2020-09-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mark string-search as being side effect free
+
+       * lisp/emacs-lisp/byte-opt.el (side-effect-free-fns): Add
+       string-search.
+
+2020-09-25  Noam Postavsky  <npostavs@users.sourceforge.net>
+
+       Make the Man completion code work better if man -k fails
+
+       * lisp/man.el (Man-completion-table): Check the return code for
+       "man -k" and assume it failed if there's a non-zero exit code
+       (bug#16722).
+
+2020-09-25  Tino Calancha  <tino.calancha@gmail.com>
+
+       Use the char history in zap-up-to-char
+
+       * lisp/misc.el (zap-up-to-char): Use read-char-from-minibuffer
+       (bug#39154).
+
+2020-09-25  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix replace-in-string infloop with empty pattern string (bug#43598)
+
+       * lisp/subr.el (replace-in-string): Raise an error if FROMSTRING is
+       empty.
+       * test/lisp/subr-tests.el (replace-in-string): Add test case.
+
+2020-09-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak updating the process mark in set-process-buffer
+
+       * src/process.c (Fset_process_buffer): Only update the process
+       mark if we actually change the buffer.
+
+2020-09-25  Eli Zaretskii  <eliz@gnu.org>
+
+       * lisp/hi-lock.el (hi-lock-auto-select-face): Doc fix.  (Bug#43600)
+
+2020-09-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove more compat code from prolog.el
+
+       * lisp/progmodes/prolog.el (prolog-font-lock-keywords): Remove
+       compat test for a face that's always defined.
+
+2020-09-25  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid infinite recursion with 'relative' line numbers display
+
+       * src/xdisp.c (display_count_lines_visually): Bind
+       'display-line-numbers' to 'relative' around 'start_display' as
+       well, since that can invoke 'move_it_to' internally, thus
+       causing infinite recursion.  (Bug#43589)
+
+2020-09-25  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/ruby-mode.el (ruby-use-smie): Declare obsolete
+
+       (ruby-mode-map, ruby-mode-menu): Don't use ruby-for/backward-sexp any 
more.
+       (ruby-mode-variables): Always setup SMIE navigation.
+       Still obey `ruby-use-smie` for indentation.
+       (ruby-forward-sexp, ruby-backward-sexp): Mark as obsolete.
+
+2020-09-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some XEmacs compat code from prolog.el
+
+       * lisp/progmodes/prolog.el (prolog-replace-in-string): Remove XEmacs
+       compat code and make obsolete.
+       (prolog-guess-fill-prefix): Adjust callers.
+       (prolog-uncomment-region): Make obsolete.
+       (prolog-mode-syntax-table): syntax-propertize-rules is always defined.
+       (prolog-syntax-propertize-function): Ditto.
+       (prolog-face-name-p): Make into obsolete alias.
+       (prolog-font-lock-keywords): Adjust callers.
+
+2020-09-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clean up replace-in-string slightly
+
+       * lisp/subr.el (replace-in-string): Clean up previous fix slightly.
+
+2020-09-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix previous replace-in-string rewrite
+
+       * lisp/subr.el (replace-in-string): Fix logic errors in previous
+       patch.
+
+2020-09-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix replace-in-string multibyteness problems with string-search
+
+       * lisp/subr.el (replace-in-string): Simplify by using the new
+       string-search function (bug#43598).
+
+2020-09-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a new function 'string-search'
+
+       * doc/lispref/strings.texi (Text Comparison): Document it.
+       * src/fns.c (Fstring_search): New function.
+
+2020-09-25  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/help-fns.el (help-fns--first-release): Use etc/NEWS as well
+
+2020-09-24  Glenn Morris  <rgm@gnu.org>
+
+       Update a failing lisp test
+
+       * test/lisp/emacs-lisp/lisp-tests.el (up-list-no-cross-string):
+       Update for recent "Don't signal scan-error" change.
+
+2020-09-24  Juri Linkov  <juri@linkov.net>
+
+       Horizontal scrolling for mouse wheel with Shift modifier (bug#43568)
+
+       * lisp/mwheel.el (mouse-wheel-scroll-amount): Change 'shift' default 
value
+       from 5 to 'hscroll'.  Add new option "Scroll horizontally" for 
'hscroll'.
+       (mwheel-scroll): Handle value 'hscroll' and call 
mwheel-scroll-left-function
+       or mwheel-scroll-right-function.
+
+       * doc/emacs/frames.texi (Mouse Commands): Update for horizontal 
scrolling
+       with Shift modifier.
+
+2020-09-24  Theodor Thornhill  <theo@thornhill.no>
+
+       Set mwheel default scroll value to 1 (bug#43380)
+
+       * lisp/mwheel.el (mouse-wheel-scroll-amount): Change default value 5 to 
1
+       and shift default value from 1 to 5.
+       Default value is changed as discussed in etc/TODO.
+
+2020-09-24  Juri Linkov  <juri@linkov.net>
+
+       * lisp/simple.el (goto-line-read-args): More relevant default line 
number.
+
+2020-09-24  Glenn Morris  <rgm@gnu.org>
+
+       Add skip condition for some dbus tests
+
+       * test/lisp/net/dbus-tests.el (dbus-test01-type-conversion)
+       (dbus-test01-basic-types): Add skip for hydra.nixos.org failures.
+
+2020-09-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make set-process-buffer also update the process mark
+
+       * src/process.c (Fset_process_buffer): Update the process mark
+       (bug#43573).
+
+2020-09-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Refactor process mark setting
+
+       * src/process.c (update_process_mark): Make into its own function.
+       (Fmake_process, Fmake_pipe_process, Fmake_serial_process)
+       (connect_network_socket): Use it.
+
+2020-09-24  dickmao  <none>
+
+       Add sanity check for Gnus groups that belong to no topic
+
+       * lisp/gnus/gnus-topic.el (gnus-topic-change-level): Do not change
+       gnus-topic-alist when group is outside "topology" (bug#43582).
+
+2020-09-24  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix last change in resize_mini_window
+
+       * src/xdisp.c (resize_mini_window): Prevent recentering the
+       mini-window once its start position is computed.  (Bug#43572)
+
+2020-09-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix recent simple.el compilation warning
+
+       * lisp/simple.el (goto-line-relative): Suppress byte compilation
+       warning about goto-line.
+
+2020-09-24  Michael Albinus  <michael.albinus@gmx.de>
+
+       Minor Tramp cleanup
+
+       * doc/misc/tramp.texi: Some stylistic changes.
+       (Frequently Asked Questions): Mention ProxyCommand and ProxyJump.
+
+       * lisp/net/tramp-sh.el (tramp-use-ssh-controlmaster-options):
+       Fix docstring.
+
+2020-09-24  Andrea Corallo  <akrl@sdf.org>
+
+       Rename comp--subr-safe-advice -> comp-subr-safe-advice
+
+       * lisp/emacs-lisp/comp.el (comp-subr-safe-advice): Rename
+       comp--subr-safe-advice -> comp-subr-safe-advice.
+       * lisp/emacs-lisp/nadvice.el (advice--add-function): Likewise.
+       * lisp/emacs-lisp/advice.el (ad-add-advice): Likewise.
+
+2020-09-24  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (comp-body-eff): Improve style.
+
+2020-09-24  Andrea Corallo  <akrl@sdf.org>
+
+       Do not install a subr trampoline twice
+
+       * src/comp.c (syms_of_comp): Define and initialize
+       'Vcomp_installed_trampolines_h'.
+       (Fcomp__install_trampoline): Fill 'Vcomp_installed_trampolines_h'
+       * lisp/emacs-lisp/comp.el (comp--subr-safe-advice): Make use of
+       `comp-installed-trampolines-h' to guard against installing a
+       trampoline twice.
+
+2020-09-24  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (comp-never-optimize-functions): Clean-up.
+
+2020-09-24  Andrea Corallo  <akrl@sdf.org>
+
+       Add a test for primitive advicing effectiveness
+
+       * test/src/comp-test-funcs.el (comp-test-primitive-advice-f): New
+       function.
+       * test/src/comp-tests.el (comp-test-primitive-advice): New test.
+
+2020-09-24  Andrea Corallo  <akrl@sdf.org>
+
+       Call `comp--subr-safe-advice' from the advice machinery
+
+       * lisp/emacs-lisp/nadvice.el (advice--add-function): Call
+       `comp--subr-safe-advice' when necessary.
+
+       * lisp/emacs-lisp/advice.el (ad-add-advice): Likewhise.
+
+2020-09-24  Andrea Corallo  <akrl@sdf.org>
+
+       Add `comp--subr-safe-advice' entry point
+
+       Add a Lisp side entry-point to be called to make primitive adivicing
+       effective.
+
+       * lisp/emacs-lisp/comp.el (comp-trampoline-sym)
+       (comp-trampoline-filename): New substs.
+       (comp-make-lambda-list-from-subr, comp-search-trampoline)
+       (comp-tampoline-compile): New functions
+
+2020-09-24  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Write Gnus active files with quotes around group names
+
+       * lisp/gnus/gnus-util.el (gnus-write-active-file): In case of group
+       names with spaces in them (see Bug#42823). Names are later read with
+       `read', so this should be quite robust.
+
+2020-09-23  Juri Linkov  <juri@linkov.net>
+
+       New command goto-line-relative (bug#5042, bug#9917)
+
+       * lisp/simple.el (goto-line-read-args): New function with code from 
goto-line.
+       (goto-line): New arg RELATIVE.  Also use 'widen-automatically' to
+       leave all lines accessible in the narrowed buffer.
+       (goto-line-relative): New command.
+
+       * lisp/info.el (Info-mode-map): Remap 'goto-line' to 
'goto-line-relative'.
+
+       * doc/emacs/basic.texi (Moving Point):
+       * doc/emacs/display.texi (Optional Mode Line): Mention 
goto-line-relative.
+
+2020-09-23  Andrea Corallo  <akrl@sdf.org>
+
+       Add `comp--install-trampoline' machinery
+
+       * src/comp.c (Fcomp__install_trampoline): New function to
+       install a subr trampoline into the function relocation table.
+       Once this is done any call from native compiled Lisp to the
+       related primitive will go through the `funcall' trampoline
+       making advicing effective.
+
+2020-09-23  Andrea Corallo  <akrl@sdf.org>
+
+       Make CHECK_SUBR public
+
+       * src/data.c (CHECK_SUBR): Move from here to...
+       * src/lisp.h (CHECK_SUBR): ...to here.
+
+2020-09-23  Stefan Kangas  <stefan@marxist.se>
+
+       Remove TODO to convert files to unit tests
+
+       * test/lisp/textmodes/css-mode-tests.el:
+       * test/lisp/progmodes/ruby-mode-tests.el: Remove TODO to convert test
+       files into unit tests.  The files are still useful for debugging.
+       Ref: https://lists.gnu.org/r/emacs-devel/2020-09/msg01906.html
+
+2020-09-23  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (comp-final): Log when interactively invoked.
+
+       * lisp/emacs-lisp/comp.el (native-compile): Add OUTPUT parameter.
+
+2020-09-23  Stefan Kangas  <stefan@marxist.se>
+
+       Convert some completion.el tests to ERT
+
+       * test/lisp/completion-tests.el: New file.
+       * lisp/completion.el: Move commented out tests to completion-tests.el.
+
+2020-09-23  Stefan Kangas  <stefan@marxist.se>
+
+       Convert allout unit tests to ERT
+
+       * test/lisp/allout-tests.el: New file.
+       * lisp/allout.el (allout-run-unit-tests-on-load)
+       (allout-run-unit-tests): Remove.
+       (allout-tests-obliterate-variable)
+       (allout-tests-globally-unbound, allout-tests-globally-true)
+       (allout-tests-locally-true, allout-test-resumptions): Move to
+       allout-tests.el
+
+       * test/lisp/allout-widgets-tests.el: New file.
+       * lisp/allout-widgets.el (allout-widgets-run-unit-tests-on-load)
+       (allout-widgets-run-unit-tests): Remove.
+       (allout-test-range-overlaps): Move to allout-widgets-tests.el.
+
+2020-09-23  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/repeat.el: Remove obsolete comment.
+
+2020-09-23  Michael Albinus  <michael.albinus@gmx.de>
+
+       * test/lisp/net/dbus-tests.el (dbus-test01-basic-types): Adapt test.
+
+2020-09-23  Mattias Engdegård  <mattiase@acm.org>
+
+       Don't signal scan-error when moving by sexp interactively
+
+       * lisp/emacs-lisp/lisp.el (forward-sexp, backward-sexp, forward-list)
+       (backward-list, down-list, up-list, mark-sexp, kill-sexp)
+       (backward-kill-sexp): Remove unsightly scan-error when running
+       interactively and no further movement by sexp can be made (bug#43489).
+
+2020-09-23  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Allow the newline character in the character widget (Bug#15925)
+
+       * lisp/wid-edit.el (widget-specify-field): Extend check for adding the
+       boundary overlay.  Plus, a minor comment indentation fix.
+       (character widget): Tweak the valid-regexp to allow the newline
+       character.
+
+       * test/lisp/wid-edit-tests.el (widget-test-character-widget-value)
+       (widget-test-editable-field-widget-value): New tests (bug#15925).
+
+2020-09-23  Andrew G Cohen  <cohen@andy.bu.edu>
+
+       Improve mark handling in gnus nnselect
+
+       * lisp/gnus/nnselect.el (numbers-by-group,
+       nnselect-request-update-info, nnselect-push-info): Handle all three
+       mark types ('tuple, 'range, 'list) and general speedups.
+
+2020-09-23  Alan Mackenzie  <acm@muc.de>
+
+       Handle escaped comment enders correctly in syntax.c, fixing bug #43558
+
+       This fixes forward-comment, scan-lists, and parse-partial-sexp.
+
+       * src/syntax.c (forw_comment): Detect and skip an escaped comment ender
+       (e.g. \*/ in C) when comment-end-can-be-escaped is non-nil.
+
+2020-09-23  Andrew G Cohen  <cohen@andy.bu.edu>
+
+       Run gnus-parse-headers-hook when retrieving nnselect headers
+
+       * lisp/gnus/nnselect.el (nnselect-retrieve-headers): Run the
+       gnus-parse-headers-hook when retrieving headers in nnselect, just like
+       in a real group.
+
+2020-09-23  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       test/src/xdisp-tests.el: New file
+
+2020-09-23  Andrew G Cohen  <cohen@andy.bu.edu>
+
+       Use gnus-extra-headers in nnselect header parsing
+
+       * lisp/gnus/nnselect.el (nnselect-retrieve-headers): Bind
+       nnmail-extra-headers to gnus-extra-headers before parsing retrieved
+       headers.
+
+2020-09-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Ensure that the game directory exists before trying to write to it
+
+       * lisp/play/gamegrid.el (gamegrid-add-score-insecure): Make the
+       directory if it doesn't exist (bug#37836).
+
+2020-09-22  martin rudalics  <rudalics@gmx.at>
+
+       Make delete-pair only delete pairs that are part of insert-pair-alist
+
+       * lisp/emacs-lisp/lisp.el (delete-pair): Only delete pairs that
+       are part of `insert-pair-alist' (bug#4136).
+
+2020-09-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix off-by-one error in eldoc--handle-docs
+
+       * lisp/emacs-lisp/eldoc.el (eldoc--handle-docs): We have one extra
+       line to use if we don't show the truncation message (bug#43543).
+
+2020-09-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Speed up shr-insert slightly
+
+       * lisp/net/shr.el (shr-insert): Speed up regularising spaces --
+       the vast majority of the spaces are already OK, so transforming
+       " " to " " just takes time.
+
+2020-09-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix filling problem in shr due to zero-width id tagging
+
+       * lisp/net/shr.el (shr-descend): Fix problem with filling lines
+       that have a zero-width ID tag at the start.
+
+2020-09-22  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix cursor display in mini-window under icomplete-mode
+
+       * src/xdisp.c (resize_mini_window): When we show only part of the
+       mini-window's contents, make sure the window-start position is at
+       the beginning of a screen line.  (Bug#43519)
+
+2020-09-22  Andrea Corallo  <akrl@sdf.org>
+
+       Fix MacOS Emacs.app installation (bug#43532)
+
+       * src/comp.c (Fcomp_el_to_eln_filename): Adapt the filename
+       hashing algorithm to allow for producing a MacOS self-contained
+       Emacs.app.
+
+2020-09-22  David Reitter  <david.reitter@gmail.com>
+
+       Fix font-panel on NS (bug#43480)
+
+       * lisp/term/ns-win.el (ns-respond-to-change-font): Set the font using
+       customize.
+
+2020-09-22  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove broken compat code from EDE
+
+       * lisp/cedet/ede/detect.el: Remove broken Emacs 24.1 compat code.
+       This would never have worked, since the fallback library is missing.
+
+2020-09-22  Stefan Kangas  <stefan@marxist.se>
+
+       Fix shellcheck warning
+
+       * build-aux/update-subdirs: Fix issue indicated by the shellcheck
+       linter (warning SC2046).
+
+2020-09-22  Stefan Kangas  <stefan@marxist.se>
+
+       Support shellcheck in compilation-mode
+
+       * lisp/progmodes/compile.el
+       (compilation-error-regexp-alist-alist): Add shellcheck regexp.
+       * test/lisp/progmodes/compile-tests.el
+       (compile-tests--test-regexps-data):
+       (compile-test-error-regexps): Add test for shellcheck.
+       * etc/compilation.txt: Add shellcheck example.
+       * etc/NEWS: Announce the change.
+
+       foo
+
+2020-09-22  Stefan Kangas  <stefan@marxist.se>
+
+       Remove Emacs 23 compat code from cedet
+
+       * lisp/cedet/ede/proj-elisp.el (project-compile-target):
+       * lisp/cedet/semantic/bovine/grammar.el (bovine-grammar-expand-form):
+       * lisp/cedet/semantic/ede-grammar.el (project-compile-target):
+       Remove Emacs 23 compat code.
+
+2020-09-22  Stefan Kangas  <stefan@marxist.se>
+
+       Remove some Emacs 20 compat code
+
+       * lisp/apropos.el (apropos-local-value):
+       * lisp/progmodes/antlr-mode.el (antlr-mode-menu):
+       * lisp/progmodes/idlwave.el (idlwave-attach-classes):
+       * lisp/textmodes/artist.el (artist-replace-chars): Remove Emacs 20
+       compat code.
+
+2020-09-22  Stefan Kangas  <stefan@marxist.se>
+
+       Remove some unnecessary compat code
+
+       * test/lisp/emacs-lisp/ert-x-tests.el (ert-test-describe-test):
+       * test/lisp/wdired-tests.el (wdired-test-unfinished-edit-01):
+       Remove unnecessary compat code; these tests should never need to run
+       on older versions of Emacs.
+
+2020-09-22  Stefan Kangas  <stefan@marxist.se>
+
+       Fix thinko in dired-change-marks
+
+       * lisp/dired.el (dired-change-marks): Fix my previous broken attempt
+       to declare advertised-calling-convention.
+
+2020-09-21  Andrea Corallo  <akrl@sdf.org>
+
+       Make use of use of `subr-primitive-p' in `find-function-library'
+
+       * lisp/emacs-lisp/find-func.el (find-function-library): Use
+       `subr-primitive-p'.
+
+2020-09-21  Andrea Corallo  <akrl@sdf.org>
+
+       Sandbox synchronous libgccjit invocation on interactive sessions
+
+       Avoid unnecessary memory fragmentation/leakeage
+
+       * lisp/emacs-lisp/comp.el (comp-final1): New function.
+       (comp-final): Invoke `comp-final1' in a child process if in an
+       interactive session or directly otherwise.
+
+2020-09-21  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-09-21  Stefan Kangas  <stefankangas@gmail.com>
+
+       Move several completions from eshell to pcomplete (Bug#10585)
+
+       * lisp/eshell/em-unix.el (eshell-complete-hostname)
+       (pcomplete/ftp, pcomplete/ncftp, pcomplete/ping)
+       (pcomplete/rlogin, pcomplete/telnet, pcomplete/rsh):
+       Move from here...
+       * lisp/pcmpl-unix.el (pcmpl-unix-complete-hostname)
+       (pcomplete/ftp, pcomplete/ncftp, pcomplete/ping)
+       (pcomplete/rlogin, pcomplete/telnet, pcomplete/rsh):
+       ...to here.  Make old names into aliases.
+
+       * lisp/eshell/esh-util.el (eshell-hosts-file)
+       (eshell-host-names, eshell-host-timestamp)
+       (eshell-read-hosts-file, eshell-read-hosts)
+       (eshell-read-host-names): Move from here...
+       * lisp/pcomplete.el (pcomplete-hosts-file)
+       (pcomplete--host-name-cache)
+       (pcomplete--host-name-cache-timestamp)
+       (pcomplete-read-hosts-file, pcomplete-read-hosts)
+       (pcomplete-read-host-names): ...to here.  Make old names into
+       aliases.
+
+       * lisp/eshell/em-unix.el (eshell-complete-host-reference): Update
+       caller.
+
+2020-09-21  Stefan Kangas  <stefankangas@gmail.com>
+
+       Move pcomplete/bcc32 from eshell to pcmpl-x (Bug#10585)
+
+       * lisp/eshell/em-xtra.el (pcomplete/bcc32, pcomplete/bcc): Move
+       from here...
+       * lisp/pcmpl-x.el (pcomplete/bcc32, pcomplete/bcc): ...to here.
+
+2020-09-21  Stefan Kangas  <stefan@marxist.se>
+
+       Convert a manual test for nxml-mode to unit test
+
+       * test/manual/indent/nxml.xml: Delete file.
+       * test/lisp/nxml/nxml-mode-tests.el
+       (nxml-mode-test-comment-bug-17264): New test based on deleted file.
+
+2020-09-21  Stefan Kangas  <stefan@marxist.se>
+
+       Convert manual indent test for ruby-mode into unit test
+
+       * test/manual/indent/ruby.rb: Move from here...
+       * test/lisp/progmodes/ruby-mode-resources/ruby.rb: ...to here.
+
+       * test/lisp/progmodes/ruby-mode-tests.el
+       (ruby-mode-tests-data-dir): New variable.
+       (ruby--indent/converted-from-manual-test): New test.
+
+2020-09-21  Stefan Kangas  <stefan@marxist.se>
+
+       Convert manual indent test for scheme-mode into unit test
+
+       * test/manual/indent/scheme.scm: Delete file.
+       * test/lisp/progmodes/scheme-tests.el: New file with unit test for
+       scheme-mode based on deleted file.
+
+2020-09-21  Stefan Kangas  <stefan@marxist.se>
+
+       Convert manual indent test for ps-mode into unit test
+
+       * test/manual/indent/ps-mode.ps: Delete file.
+       * test/lisp/progmodes/ps-mode-tests.el (ps-mode-test-indent):
+       New unit test based on deleted file.
+
+2020-09-21  Sam Steingold  <sds@gnu.org>
+
+       (json-encode-string): Strip properties to fix bug#43549
+
+2020-09-21  Lin Sun  <lin.sun@zoom.us>
+
+       Fix problem with ede-mode bugging out on non-existent files
+
+       * lisp/cedet/ede/emacs.el: Check whether the directory exists in
+       ede-emacs-find-in-directories before using it (bug#43547).
+
+2020-09-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix recent change to window-max-chars-per-line
+
+       * lisp/window.el (window-max-chars-per-line):
+       line-number-display-width can return a floating point number, but
+       we want an integer (bug#43548).
+
+2020-09-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Doc string fix for gnus-summary-hide-thread
+
+       * lisp/gnus/gnus-sum.el (gnus-summary-hide-thread): Remove text
+       from doc string apparently copy-pasted from the function above.
+
+2020-09-21  dickmao  <none>
+
+       Remove a misleading message in gnus-summary-hide-thread
+
+       * lisp/gnus/gnus-sum.el (gnus-summary-hide-thread):
+       Jump past invisible thread instead of begging off with an out-of-band
+       diagnostic (bug#43538).
+
+2020-09-21  Stefan Kangas  <stefan@marxist.se>
+
+       Convert manual indent test for opascal-mode into unit test
+
+       * test/manual/indent/opascal.pas: Delete file.
+       * test/lisp/progmodes/opascal-tests.el: New file with unit test for
+       oposcal-mode based on deleted file.
+
+2020-09-21  Stefan Kangas  <stefan@marxist.se>
+
+       Convert manual indent test for lisp-mode into unit test
+
+       * test/manual/indent/lisp.lisp: Delete file.
+       * test/lisp/emacs-lisp/lisp-mode-tests.el (lisp-indent-defun):
+       New unit test based on deleted file.
+
+2020-09-21  Stefan Kangas  <stefan@marxist.se>
+
+       Convert manual indent test for elisp-mode into unit test
+
+       * test/manual/indent/elisp.el: Delete file.
+       * test/lisp/progmodes/elisp-mode-tests.el (elisp-indent-basic):
+       New unit test based on deleted file.
+
+2020-09-21  Stephen Berman  <stephen.berman@gmx.net>
+
+       Fix check in `newline' for blank lines
+
+       * lisp/simple.el (newline): Clarify doc string and fix check for
+       blank lines (bug#13810).
+
+2020-09-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix line width in M-x term on -nw with line numbers
+
+       * lisp/window.el (window-max-chars-per-line): Make the line width
+       more correct in the presence of display-line-numbers-mode (bug#34513).
+
+2020-09-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add more isearch submatch faces
+
+       * doc/emacs/search.texi (Search Customizations): Adjust
+       documentation.
+       * lisp/isearch.el (search-highlight-submatches): Be a boolean.
+       (isearch-group-{6-9}): New faces.
+       (isearch-highlight): Use the variable as a boolean.
+
+2020-09-21  Juri Linkov  <juri@linkov.net>
+
+       Tweak how Man selects the previous window on failure
+
+       * lisp/man.el (Man-bgproc-sentinel): Ensure that we select the
+       correct previous window (bug#38164).
+
+2020-09-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow disabling the verbose eldoc truncation message
+
+       * doc/emacs/programs.texi (Lisp Doc): Document it.
+
+       * lisp/emacs-lisp/eldoc.el (eldoc-display-truncation-message): New
+       variable (bug#43543).
+       (eldoc--handle-docs): Use it.
+
+2020-09-21  Nicolas Graner  <nicolas.graner@universite-paris-saclay.fr>  (tiny 
change)
+
+       Fix default value in checkboxes in eww
+
+       * lisp/net/eww.el (eww-submit): Checked checkboxes need a default
+       value (bug#43542).
+
+2020-09-21  Michael Albinus  <michael.albinus@gmx.de>
+
+       Add D-Bus tests
+
+       * doc/misc/dbus.texi (Type Conversion): Precise basic type values.
+
+       * lisp/net/dbus.el (dbus-register-property): Send signal directly.
+
+       * src/dbusbind.c (xd_signature): Accept non-nil objects for
+       DBUS_TYPE_BOOLEAN.
+
+       * test/lisp/net/dbus-tests.el (dbus-test01-basic-types)
+       (dbus-test01-compound-types): New tests.
+
+2020-09-21  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       02a31c9632 (origin/emacs-27) Minor improvement in the ELisp manual's ...
+       f750def778 Mention in PROBLEMS the problems with fonts and Uniscribe
+       082d8a21b1 Minor copyedits in 'line-height' documentation
+       5b23393bcc ; * src/frame.c (syms_of_frame) <make-pointer-invisible>: ...
+
+2020-09-21  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       df04f3e755 Fix a rare segfault in syntax.c
+       fd1fe1e1ec Add doc to syntax-propertize-function saying it must do a ...
+       fcd599bbea Minor copyedits of doc of 'with-silent-modifications'
+       759399cdb1 Improve documentation of 'max-mini-window-height'
+       3223302aa2 Use modern constant names for the NS pasteboard
+       985703d380 Fix doc string of 'toggle-menu-bar-mode-from-frame'
+       184a4977c7 Make vc-bzr tests work with brz 3.1 (bug#43314)
+
+       # Conflicts:
+       #       lisp/emacs-lisp/syntax.el
+       #       src/syntax.c
+
+2020-09-21  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       694acda5f2 Fix compilation on TERMINFO platforms with GCC 10
+       f3373901e5 Fix the font-lock-debug-fontify NEWS entry
+
+       # Conflicts:
+       #       etc/NEWS
+
+2020-09-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix infloop when folding difficult headers in Message
+
+       * lisp/mail/rfc2047.el (rfc2047-fold-field): Return the end point.
+       * lisp/gnus/message.el (message--fold-long-headers): Use that to
+       reliably achieve progress.
+
+2020-09-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow not selecting messages in Gnus before resending
+
+       * lisp/gnus/gnus-msg.el (gnus-summary-resend-message): Allow not
+       selecting messages.  This is faster when resending huge spam messages.
+
+2020-09-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make xterm-mouse-event check whether the click event is valid
+
+       * lisp/xt-mouse.el (xterm-mouse-event): Defensively check against
+       a situation that shouldn't happen (but does) (bug#17378).
+
+2020-09-20  Alan Mackenzie  <acm@muc.de>
+
+       C++ Mode: Modernize the fontification of "using"
+
+       Since "using" is now used in three distinct ways in C++, write a special
+       function to handle these rather than attempting to adapt the old regular
+       expressions.
+
+       * lisp/progmodes/cc-fonts.el (c-font-lock-declarators): Amend to allow 
the
+       argument TYPES to be a face.  This face is given to the declarator being
+       processed.
+       (c-font-lock-single-decl): Make an argument to c-font-lock-declarators 
nil or
+       t, not merely nil or non-nil.
+       (c-complex-decl-matchers): Include c-font-lock-c++-using in the C++ 
value of
+       this variable.
+       (c-font-lock-c++-using): New function.
+
+       * lisp/progmodes/cc-langs.el (c-using-kwds, c-using-key): New lang
+       consts/vars.
+       (c-modifier-kwds): Remove "using" from the C++ value.
+
+2020-09-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Restore the previous minimum-width specs in the line/column mode lines
+
+       * lisp/bindings.el (mode-line-position-line-format)
+       (mode-line-position-column-format)
+       (mode-line-position-column-line-format, mode-line-position):
+       Restore the previous min-width specs (bug#28648).
+
+2020-09-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make (let ((:key 'foo)) :key) signal an error in lexical elisp, too
+
+       * src/lread.c (intern_sym): Mark keywords as special (bug#38872).
+
+2020-09-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix typo in dbus.texi
+
+       * doc/misc/dbus.texi (Type Conversion): Remove spurious { character.
+
+2020-09-20  Michael Albinus  <michael.albinus@gmx.de>
+
+       Make D-Bus properties type safe
+
+       * doc/misc/dbus.texi (Properties and Annotations):
+       Precise dbus-get-property and dbus-set-property.
+       (Type Conversion): Explain :byte and :boolean type conversion.
+       (Errors and Events): dbus-ignore-errors returns nil when there is
+       a D-Bus error.  Remove dbus-show-dbus-errors.
+
+       * etc/NEWS: Some D-Bus relevant changes.
+
+       * lisp/net/dbus.el (dbus-show-dbus-errors): Remove.
+       (dbus-ignore-errors): Replay implementation without that variable.
+       (dbus-check-arguments): New defun.
+       (dbus-list-activatable-names, dbus-list-names)
+       (dbus-list-queued-owners, dbus-get-name-owner, dbus-introspect)
+       (dbus-get-all-properties, dbus-get-all-managed-objects): Don't debug.
+       (dbus-get-property, dbus-set-property): Propagate errors.
+       (dbus-register-property): Check for valid VALUE.
+       (dbus-property-handler): Simplify.
+
+       * src/dbusbind.c (Fdbus_message_internal): Adapt docstring.
+       Handle DBUS_MESSAGE_TYPE_INVALID.
+
+       * test/lisp/net/dbus-tests.el (dbus-show-dbus-errors): Don't declare.
+       (dbus-test06-register-property)
+       (dbus-test06-register-property-emits-signal): Adapt tests.
+
+2020-09-20  Eli Zaretskii  <eliz@gnu.org>
+
+       Minor improvement in the ELisp manual's Introduction
+
+       * doc/lispref/intro.texi (Printing Notation): Clarify what
+       "execute code" means in this context.  (Bug#43463)
+
+2020-09-20  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of a recently-added feature
+
+       * lisp/isearch.el (search-highlight-submatches): Improve the doc
+       string.
+
+       * doc/emacs/search.texi (Search Customizations): Improve the
+       documentation of 'search-highlight-submatches'.
+
+       * etc/NEWS: Minor change of the entry for
+       'search-highlight-submatches'.
+
+2020-09-20  Juri Linkov  <juri@jurta.org>
+
+       Highlight regexp sub-expressions
+
+       * doc/emacs/search.texi (Search Customizations): Document it.
+
+       * lisp/isearch.el (search-highlight-submatches): New variable.
+       (isearch-group-1, isearch-group-2, isearch-group-3)
+       (isearch-group-4, isearch-group-5): New faces.
+       (isearch-highlight): Use them.
+       (isearch-dehighlight): Ditto (bug#6227).
+
+2020-09-20  Kévin Le Gouguec  <kevin.legouguec@gmail.com>
+
+       Tweak dired warning about "wildcard" characters
+
+       * lisp/dired-aux.el (dired-isolated-string-re): Use explicitly
+       numbered groups.
+       (dired--star-or-qmark-p): Add START parameter.  Make sure to
+       return the first isolated match.
+       (dired--need-confirm-positions, dired--mark-positions)
+       (dired--highlight-no-subst-chars, dired--no-subst-explain)
+       (dired--no-subst-ask, dired--no-subst-confirm): New functions.
+       (dired-do-shell-command): Use them (bug#28969, bug#35564).
+
+       * test/lisp/dired-aux-tests.el (dired-test-bug27496): Adapt to
+       new prompt.
+       (dired-test--check-highlighting): New test helper.
+       (dired-test-highlight-metachar): New tests.
+
+2020-09-20  Eli Zaretskii  <eliz@gnu.org>
+
+       Mention in PROBLEMS the problems with fonts and Uniscribe
+
+       * etc/PROBLEMS: Mention font-related problems with Uniscribe on
+       MS-Windows.  (Bug#39340)
+
+2020-09-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix bug out when indenting inserted images in shr
+
+       * lisp/net/shr.el (shr-fill-line): We may not have a
+       shr-indentation text property here.  In that case, default to the
+       dynamically bound value.
+
+2020-09-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove code checked in to lread.c by mistake
+
+       * src/lread.c (intern_sym): Remove code under development
+       inadvertently checked in.
+
+2020-09-20  dickmao  <dick.r.chiang@gmail.com>
+
+       Terminate `comint-password-function' tests
+
+       * test/lisp/comint-tests.el (comint-test-no-password-function)
+       (comint-test-password-function-with-value)
+       (comint-test-password-function-with-nil): refactor
+       (comint-tests/test-password-function): actually test
+       `comint-send-invisible' and inhibit inadvertent interactive query
+       (bug#38825).
+
+2020-09-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak a hash table print test
+
+2020-09-20  Pip Cet  <pipcet@gmail.com>
+
+       Fix printing of hash tables with removed elements
+
+       * src/print.c (print_vectorlike): Keep track of the actual number
+       of elements printed rather than attempting to use hash bucket
+       indices (bug#38892).
+
+2020-09-20  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Don't have vc-git-stash-list bug out on the .git directory
+
+       * lisp/vc/vc-git.el (vc-git-stash-list): Don't bug out when
+       running on the .git directory itself (bug#39285).
+
+2020-09-20  Earl  <ej32u@protonmail.com>
+
+       Add new tab command `C-x t C-r'
+
+       * doc/emacs/misc.texi (FFAP): Document new commands (bug#43503).
+
+       * lisp/ffap.el (ffap-read-only-other-tab): New command.
+
+       * lisp/tab-bar.el (find-file-read-only-other-tab): New command and
+       keystroke.
+
+2020-09-20  Noam Postavsky  <npostavs@gmail.com>
+
+       Fix slow python-mode inserts when there's a lot of strings
+
+       * lisp/progmodes/python.el (python-info-docstring-p): Doing more
+       than two repetitions here doesn't improve indentation (bug#39598).
+
+2020-09-20  Mauro Aranda  <maurooaranda@gmail.com>
+
+       New command: revert-buffer-with-fine-grain
+
+       * doc/emacs/files.texi (Reverting): Document the new command and the
+       new variable.
+
+       * etc/NEWS: Mention the new command and the new variable.
+
+       * lisp/files.el (revert-buffer-with-fine-grain): New command.  Revert
+       a buffer trying to be non-destructive, by using replace-buffer-contents.
+       (revert-buffer-insert-file-contents-delicately): New function, 
alternative
+       to revert-buffer-insert-file-contents-function--default-function.
+       (revert-buffer-with-fine-grain-max-seconds): New variable.  Passed as
+       argument MAX-SECS of replace-buffer-contents.
+
+       * test/lisp/files-tests.el (files-tests-lao files-tests-tzu): Helper
+       variables, taken from diffutils manual, to test reverting a buffer.
+       (files-tests-revert-buffer)
+       (files-tests-revert-buffer-with-fine-grain): New tests (bug#18).
+
+2020-09-20  Nick Roberts  <nickrob@snap.net.nz>
+
+       Make a gud error message more informative
+
+       * lisp/progmodes/gud.el (gud-jdb-marker-filter): Make the error
+       message more informative (bug#1282).
+
+2020-09-20  Peder O. Klingenberg  <peder@klingenberg.no>
+
+       Extend process-lines to allow exit status handling
+
+       * lisp/subr.el (process-lines-handling-status): Extension of the
+       old process-lines, with more flexible handling of the exit status.
+       (process-lines): Old API implemented using the new function.
+       (process-lines-ignore-status): Another use of the new function -
+       return the output lines regardless of the exit status (bug#1321).
+
+2020-09-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Minor copyedits in 'line-height' documentation
+
+       * doc/lispref/display.texi (Line Height): Describe the possible
+       values of the 'line-height' property in a more consistent format.
+
+2020-09-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a new variable 'gnus-global-groups'
+
+       * doc/misc/gnus.texi (HTML): Document it.
+
+       * lisp/gnus/gnus-art.el (gnus-global-groups): New variable.
+       (gnus-block-private-groups): Use it.
+
+2020-09-19  bug-gnu-emacs@gnu.org  <bug-gnu-emacs@gnu.org>
+
+       Honor make-pointer-invisible on macOS
+
+       * src/nsterm.m ([EmacsView keyDown:]): Call
+       [NSCursor setHiddenUntilMouseMoves:] with the correct argument, 
depending on
+       variable make-pointer-invisible.
+
+2020-09-19  Gregor Zattler  <telegraph@gmx.net>
+
+       * doc/misc/eww.texi: Document the `w' key's double function
+
+       * doc/misc/eww.texi (Basics): Describe what the `w' command does
+       in eww (bug#43517).
+
+2020-09-19  Gregor Zattler  <telegraph@gmx.net>
+
+       * doc/misc/eww.texi: Document the `w' key's double function
+
+       * doc/misc/eww.texi (Basics): Describe what the `w' command does
+       in eww (bug#43517).
+
+2020-09-19  Daniel Martín  <mardani29@yahoo.es>
+
+       Put files in mhtml-mode when they have <!DOCTYPE, case-insensitive
+
+       * lisp/files.el (magic-fallback-mode-alist): Match "DOCTYPE" in a
+       case-insensitive way before putting files in mhtml-mode. See
+       https://html.spec.whatwg.org/multipage/syntax.html#the-doctype for the
+       standard reference.
+       * test/lisp/files-tests.el (files-test-magic-mode-alist-doctype): Add
+       a test (bug#43511).
+
+2020-09-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix problem with spurious extra paragraphs in shr
+
+       * lisp/net/shr.el (shr-ensure-paragraph): Don't regard <div
+       id=foo></div> (empty placeholders) as occupying any space (bug#43510).
+
+2020-09-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix a rare segfault in syntax.c
+
+       * src/syntax.c (Fforward_comment): Prevent the loop for COUNT < 0
+       from going outside the valid range of character/byte positions.
+       (Bug#43499)
+
+       * doc/lispref/syntax.texi (Syntax Class Table): Mention the
+       "comment-fence" and "string-fence" as alternative names of 2
+       syntax classes.
+
+2020-09-19  Alan Mackenzie  <acm@muc.de>
+
+       Add doc to syntax-propertize-function saying it must do a 100% job
+
+       and cannot be combined with other ways of applying syntax-table text
+       properties.
+
+       * lisp/emacs-lisp/syntax.el (syntax-propertize-function): Amend doc 
string.
+
+       * doc/lispref/syntax.texi (Syntax Properties): Amend the description of 
the
+       variable.
+
+2020-09-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       * lisp/menu-bar.el (menu-bar-showhide-fringe-menu): Adjust caller.
+       (menu-bar-search-options-menu): Ditto.
+       (menu-bar-options-menu): Ditto.
+       (menu-bar-options-menu): Ditto.
+
+       * lisp/progmodes/gdb-mi.el (menu): Ditto.
+
+       * lisp/emacs-lisp/find-func.el (find-function-regexp): Add
+       menu-bar-make-toggle-command.
+
+       * lisp/menu-bar.el (menu-bar-make-toggle): Compatibility wrapper.
+
+2020-09-19  Drew Adams  <drew.adams@oracle.com>
+
+       * lisp/menu-bar.el (menu-bar-make-toggle-command): Add doc string
+       and allow setting all keywords (bug#17954).
+
+2020-09-19  Lennart Borgman  <lennart.borgman@gmail.com>
+
+       Allow reveal mode to not automatically re-hide revealed text
+
+       * lisp/reveal.el (reveal-hide-revealed): New command (bug#7101).
+       (reveal-auto-hide): New defcustom.
+       (reveal-post-command): Use it.
+
+2020-09-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow customizing hooks defined via define-minor-mode
+
+       * lisp/emacs-lisp/easy-mmode.el (define-minor-mode): Allow using
+       Customize on the hooks (bug#10773).
+
+2020-09-19  Alex Bochannek  <alex@bochannek.com>
+
+       Fix gnus-summary-catchup-from-here edge case
+
+       * lisp/gnus/gnus-sum.el (gnus-summary-catchup-from-here): Make the
+       command work in the final line in the buffer, too (bug#43496).
+
+2020-09-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Document Gnus body matching quirks
+
+       * doc/misc/gnus.texi (Summary Score Commands): Document body
+       match quirks (bug#43502).
+
+2020-09-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Display the language in the Flyspell mode line
+
+       * lisp/textmodes/flyspell.el (flyspell-mode): Display the language
+       in the mode line (bug#14957).
+
+2020-09-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Minor copyedits of doc of 'with-silent-modifications'
+
+       * doc/lispref/text.texi (Changing Properties):
+       * doc/lispref/buffers.texi (Buffer Modification): Improve
+       documentation and indexing of 'with-silent-modifications'.
+
+2020-09-18  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of 'max-mini-window-height'
+
+       * src/xdisp.c (syms_of_xdisp):
+       * doc/lispref/minibuf.texi (Minibuffer Windows): More accurate
+       wording in the documentation of 'max-mini-window-height', to
+       clarify the meaning of an integer value.
+
+2020-09-18  Daniel Martín  <mardani29@yahoo.es>
+
+       Use modern constant names for the NS pasteboard
+
+       Use the same pasteboard constant names defined in
+       ns_drag_types. (Bug#43470).
+
+       * src/nsterm.m: Rename NSURLPboardType to NSPasteboardTypeURL,
+       NSStringPboardType to NSPasteboardTypeString, and
+       NSTabularTextPboardType to NSPasteboardTypeTabularText
+
+2020-09-18  Stefan Kangas  <stefan@marxist.se>
+
+       Fix typo in project-kill-buffers
+
+       * lisp/progmodes/project.el (project-kill-buffers): Fix typo.
+       Reported by Manuel Uberti <manuel.uberti@inventati.org>
+
+2020-09-18  Andrii Kolomoiets  <andreyk.mad@gmail.com>
+
+       Save and restore point in ewoc-invalidate
+
+       * lisp/emacs-lisp/ewoc.el (ewoc--refresh-node): Save and restore point 
line
+       and column offset.
+       (eowc-map) (ewoc--invalidate) (ewoc-set-hf): Don't use save-excursion
+       * lisp/vc/vc-dir.el (vc-dir-update): Don't save/restore point on calling
+       'ewoc-invalidate'.
+
+2020-09-18  Adam Sjøgren  <asjo@koldfront.dk>
+
+       Make emacs-uptime insert at point with prefix arg
+
+       * lisp/time.el (emacs-uptime): Insert at point when called with prefix
+       argument.  (Bug#20112)
+
+2020-09-18  Stefan Kangas  <stefan@marxist.se>
+
+       Doc fix in directory-free-space-program
+
+       * lisp/files.el (directory-free-space-program): Doc fix; there is no
+       need to repeat that its obsolete here since it will be shown by
+       customize, describe-variable, etc. automatically.
+
+2020-09-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix the defcustom type of eww-retrieve-command
+
+       * lisp/net/eww.el (eww-retrieve-command): The type is a list of
+       strings.
+
+2020-09-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Use a widget for the face link in Customize buffers
+
+       * doc/lispref/customize.texi (Common Keywords): Document it.
+
+       * lisp/cus-edit.el (custom-face-value-create): Use a widget
+       instead of a button so that TAB works (bug#20664).
+
+       * lisp/wid-edit.el (face-link): New widget.
+       (widget-face-link-action): New action.
+
+2020-09-18  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix error in D-Bus test
+
+       * test/lisp/net/dbus-tests.el (dbus-test04-register-method):
+       Do not check for error message text.
+       (dbus--test-signal-handler): Fix docstring.
+       (dbus--test-timeout-handler): New defun.
+       (dbus-test05-register-signal)
+       (dbus-test06-register-property-emits-signal): Use it.
+
+2020-09-18  Michael Albinus  <michael.albinus@gmx.de>
+
+       * lisp/progmodes/cperl-mode.el (cperl-set-style): Fix docstring.
+
+2020-09-18  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Fix typo, reported by Manuel Uberti
+
+       * lisp/progmodes/project.el (project-kill-buffer-conditions):
+       Fix typo.
+
+2020-09-18  Eli Zaretskii  <eliz@gnu.org>
+
+       Minor cleanup of last change
+
+       * src/termchar.h (struct tty_display_info):
+       * src/term.c (turn_on_face, tty_capable_p): Reformat new code.
+
+2020-09-18  Mike Hamrick  <mikeh@muppetlabs.com>
+
+       TTY Support for ECMA-48 strike-through graphic rendition
+
+       * src/term.c: Support strike-through in capable terminals.
+       (no_color_bit): Replace unused NC_INVIS with
+       NC_STRIKE_THROUGH.
+       (turn_on_face): Output via TS_enter_strike_through_mode
+       if available.
+       (turn_off_face): Handle strike-through case.
+       (tty_capable_p, init_tty): Support strike-through.
+       * src/termchar.h (struct tty_display_info): Add field for
+       strike-through.
+       * src/xfaces.c (tty_supports_face_attributes_p, realize_tty_face):
+       Handle strike-through case.
+       * src/dispextern.h: Add TTY_CAP_STRIKE_THROUGH definition.
+       (struct face): Add field tty_strike_through_p.
+
+2020-09-18  James N. V. Cash  <james.cash@occasionallycogent.com>  (tiny 
change)
+
+       * lisp/tab-bar.el (tab-bar-new-tab-to): Fix tabs not reappearing 
(bug#42052)
+
+2020-09-18  Eli Zaretskii  <eliz@gnu.org>
+
+       Update TUTORIAL.he
+
+       * etc/tutorials/TUTORIAL.he: Adapt to latest changes in the
+       English TUTORIAL.
+
+2020-09-18  Richard Stallman  <rms@gnu.org>
+
+       Document easy ways of typing undo key on TTY frames
+
+       * doc/emacs/basic.texi (Basic Undo): Document the easiest way to
+       type the undo key.
+
+       * etc/tutorials/TUTORIAL: Describe typing C-_ without the Shift
+       key.
+
+2020-09-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Make delete-pair only delete pairs that are part of 
insert-pair-alist"
+
+       This reverts commit 82de8ecc080d91dd05f2432d2d07feb2955aeec4.
+
+       This patch breaks doing `M-x delete-pair' on "foo" in text-mode.
+
+2020-09-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove mention of C-u M-. from the refcards
+
+       The "find next tags" command no longer exists, as the machinery has
+       been replaced by xref.
+
+2020-09-17  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Fix recent change in wid-edit
+
+       * lisp/wid-edit.el (widget-button--check-and-call-button): Record the
+       ending position of event, because we might need it when
+       the :mouse-down-action function returns non-nil (bug#20664).
+
+2020-09-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Doc string typo fix for mode-line-position-column-format
+
+       * lisp/bindings.el (mode-line-position-column-format): Fix typo in
+       doc string.
+
+2020-09-17  Oleh Krehel  <ohwoeowho@gmail.com>
+
+       Make face names clickable in Customize buffers
+
+       * lisp/cus-edit.el (custom-face-value-create): Make the face name
+       a clickable button (bug#20664).
+
+2020-09-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Refactor a very long wid-edit function and add additional checking
+
+       * lisp/wid-edit.el (widget-button--check-and-call-button): Factor
+       out a too-long condition/call...
+       (widget-button-click): From here.
+
+2020-09-17  Juri Linkov  <juri@linkov.net>
+
+       Allow binding keys in `query-replace-map'
+
+       * lisp/replace.el (perform-replace): Allow binding keys in
+       `query-replace-map' (bug#20687).
+
+2020-09-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix up previous autoload-find-generated-file change
+
+       * lisp/emacs-lisp/autoload.el (autoload-find-generated-file): Use
+       the correct name for find-file-hook.
+
+2020-09-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make package install not bug out on weird stuff in find-file-hooks
+
+       * lisp/emacs-lisp/autoload.el (autoload-find-generated-file):
+       Users may have read-only-mode in find-file-hooks (bug#43460) so
+       just disable all the hooks here.
+
+2020-09-17  Harald Jörg  <haj@posteo.de>
+
+       cperl-mode: Add new value "PBP" for 'cperl-set-style'
+
+       * lisp/progmodes/cperl-mode.el (cperl-style-alist)
+       (cperl-set-style): Add indentation style recommended by Damian Conway's
+       book "Perl Best Practices".
+
+       * test/lisp/progmodes/cperl-mode-tests.el
+       (cperl-mode-test-indent-styles): Add a test to verify indentation
+       and unraveling of conditionals (bug#43457).
+
+2020-09-17  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix documentation of a recent change
+
+       * src/keyboard.c (update_recent_keys): Fix commentary.
+       (Flossage_size): Fix doc string.
+
+       * etc/NEWS: Move and fix wording of the recently added entry.
+
+2020-09-17  Masahiro Nakamura  <tsuucat@icloud.com>
+
+       etc/refcards/refcard.tex: Fix some grouping regexps
+
+       * etc/refcards/refcard.tex (section{Regular Expressions}): Fix the
+       shy/numbered grouping examples (bug#43429).
+
+2020-09-17  Michael Albinus  <michael.albinus@gmx.de>
+
+       Work on D-Bus properties etc
+
+       * lisp/net/dbus.el (seq, subr-x): Require.
+       (dbus-error-disconnected, dbus-error-service-unknown): New defconst.
+       (dbus-set-property, dbus-register-property): Use `keywordp'.  Fix
+       proper value sending a signal.
+
+       * test/lisp/net/dbus-tests.el (dbus-test04-register-method):
+       Extend test.
+       (dbus--test-signal-received): New defvar.
+       (dbus--test-signal-handler): New defun.
+       (dbus-test05-register-signal)
+       (dbus-test06-register-property-emits-signal): New tests.
+       (dbus-test06-register-property)
+       (dbus-test06-register-property-several-paths): Rename tests.
+
+2020-09-17  Alex Bochannek  <alex@bochannek.com>
+
+       Allow user-defined scoring in Gnus
+
+       * lisp/gnus/gnus-score.el (gnus-score-func): New function (bug#43413).
+       * doc/misc/gnus.texi (Score File Format): Document it.
+
+2020-09-17  martin rudalics  <rudalics@gmx.at>
+
+       Make delete-pair only delete pairs that are part of insert-pair-alist
+
+       * lisp/emacs-lisp/lisp.el (delete-pair): Only delete pairs that
+       are part of `insert-pair-alist' (bug#4136).
+
+2020-09-17  Tino Calancha  <ccalancha@suse.com>
+
+       Give Lisp control on the lossage size
+
+       Add a command 'lossage-size' to set the maximum
+       number or recorded keystrokes (Bug#38796).
+
+       * src/keyboard.c (lossage_limit):
+       Static variable with the current lossage size limit.
+       (MIN_NUM_RECENT_KEYS): Renamed from NUM_RECENT_KEYS.
+       Set it as 100 and use it as the minimum value for lossage_limit.
+       Keep the same default for the vector size as before (300).
+       (lossage-size): New command.
+       (update_recent_keys): Helper function.
+       (command_loop_1)
+       (record_char)
+       (recent-keys)
+       (syms_of_keyboard): Use lossage_limit as the vector size.
+
+       * lisp/help.el (view-lossage): Mention the new command in the docstring.
+       * etc/NEWS (Changes in Emacs 28.1): Announce this change.
+       * doc/emacs/help.texi (Misc Help): Update manual.
+       * test/src/keyboard-tests.el (keyboard-lossage-size): Add test.
+
+2020-09-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix up previous change for column/line spec mechanism in the mode line
+
+       * lisp/bindings.el (column-number-indicator-zero-based): Make
+       obsolete (bug#28648).
+       (mode-line-position-column-line-format): New variable.
+       (mode-line-position--column-line-properties): New const.
+       (mode-line-position): Use it.
+
+2020-09-17  Andreas Schwab  <schwab@linux-m68k.org>
+
+       Remove pointless use of intern
+
+       * lisp/mwheel.el (mouse-wheel-left-event)
+       (mouse-wheel-right-event): Replace use of intern with quoted
+       symbol.
+       * lisp/profiler.el (profiler-calltree-build-unified): Likewise.
+       * lisp/vc/ediff-util.el (ediff-debug-info): Likewise.
+
+2020-09-16  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix doc string of 'toggle-menu-bar-mode-from-frame'
+
+       * lisp/menu-bar.el (toggle-menu-bar-mode-from-frame): Improve the
+       wording of the doc string.  (Bug#43383)
+
+2020-09-16  Michael Albinus  <michael.albinus@gmx.de>
+
+       D-Bus: keep type information in D-Bus events
+
+       * doc/misc/dbus.texi (Errors and Events):
+       * etc/NEWS: D-Bus events keep the type information of their arguments.
+
+       * lisp/net/dbus.el (dbus-check-event): Fix docstring.
+       (dbus-delete-types, dbus-flatten-types): New defuns.
+       (dbus-handle-event, dbus-register-property, dbus-property-handler):
+       Handle type information.
+       (dbus-set-property): Fix thinko.
+
+       * src/dbusbind.c (XD_BASIC_DBUS_TYPE): Simplify.
+       (xd_dbus_type_to_symbol): New function.
+       (xd_retrieve_arg): Return type information for the arguments.
+       (xd_read_message_1):  Return type information for the error name.
+       (dbus-registered-objects-table): Fix docstring.
+
+2020-09-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix problem with previous dired.el change
+
+       * lisp/dired.el (dired-get-filename): dired-current-directory
+       can't be called before the dired buffer has been set up.
+       (add-hook 'dired-mode-hook 'dired-sort-toggle) calls
+       dired-get-filename in a way that exposes this problem, so avoid
+       it.
+
+2020-09-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak previous report-emacs-bug-hook change
+
+       * lisp/mail/emacsbug.el (report-emacs-bug-hook): Add to the hook
+       locally so sending stuff from Message afterwards won't trigger the
+       same question.
+
+2020-09-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make sgml-validate not bug out from buffers not visiting a file
+
+       * lisp/textmodes/sgml-mode.el (sgml-validate): Don't bug out when
+       running from a buffer that's not visiting a file (bug#22906).
+
+2020-09-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Use a square root character in calc displays
+
+       * lisp/calc/calccomp.el (math-compose-sqrt): Use a square root
+       character, if possible (bug#22919).  Suggested by Zephyr Pellerin
+       <zephyr.pellerin@gmail.com>.
+
+2020-09-15  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid aborts in display_mode_element
+
+       * src/xdisp.c (display_mode_element): Use parse_str_as_multibyte,
+       not multibyte_chars_in_text, to determine whether mode-line spec
+       shall be displayed as a multibyte or unibyte string.  We cannot
+       use multibyte_chars_in_text here because it aborts when it finds
+       raw bytes in the spec string.  (Bug#43409)
+
+2020-09-15  Robert Pluim  <rpluim@gmail.com>
+
+       Stop querying for fonts as soon as a match is found
+
+       Scanning through fonts can be very slow, especially with the 'x' font
+       backend, and the result is almost always not used.  Stop looking for a
+       font as soon as one is found rather than scanning all the backends.
+
+       * src/font.c (font_list_entities): Stop scanning through the font
+       backends as soon as we find a match unless
+       'query-all-font-backends is set (Bug#43177).
+       (syms_of_font): New variable 'query-all-font-backends', default
+       false.
+
+2020-09-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix up previous replace-in-string commit
+
+       * lisp/subr.el (replace-in-string): Fix thinko in implementation.
+
+2020-09-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow controlling the look of the line/column indicators
+
+       * doc/lispref/modes.texi (Mode Line Variables): Document them.
+
+       * lisp/bindings.el (mode-line-position-line-format): New variable
+       (bug#28648).
+       (mode-line-position-column-format): Ditto.
+       (mode-line-position): Use them.
+
+       * lisp/simple.el (column-number-mode): Mention them.
+       (line-number-mode): Ditto.
+
+2020-09-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add new, simple `replace-in-string' function
+
+       * lisp/subr.el (replace-in-string): New, side-effect-free function.
+
+       * doc/lispref/searching.texi (Search and Replace): Document it.
+
+2020-09-15  Stefan Kangas  <stefankangas@gmail.com>
+
+       * lisp/window.el: Add provide statement
+
+       * lisp/window.el (window): Put a `provide' form to help with the
+       popular `use-package' external package (bug#37053).
+
+2020-09-15  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix MS-Windows compilation of Gnulib with old versions of MinGW
+
+       * nt/inc/ms-w32.h (_WIN32_WINNT_WIN2K, _WIN32_WINNT_WINXP)
+       (_WIN32_WINNT_WS03, _WIN32_WINNT_VISTA, _WIN32_WINNT_WIN7,
+       _WIN32_WINNT_WIN8, _WIN32_WINNT_WINBLUE, _WIN32_WINNT_WIN10)
+       [__MINGW32__]: Define if any of these is not defined.  Reported by
+       martin rudalics <rudalics@gmx.at>.
+
+2020-09-15  Jimmy Aguilar Mena  <spacibba@aol.com>
+
+       Merge branch 'feature/uniquify-as-function' into master
+
+       Document use of uniquify-buffer-name-style as a function.
+
+2020-09-15  Jimmy Aguilar Mena  <spacibba@aol.com>
+
+       Enable uniquify-buffer-name-style to be a function.
+
+       * lisp/uniquify.el (uniquify-buffer-name-style) : Add "Other" custom
+       option
+       (uniquify-get-proposed-name) : Add condition for when
+       uniquify-buffer-name-style is a function.
+
+2020-09-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix mailclient-send-it after recent browse-url rewrite
+
+       * lisp/mail/mailclient.el (mailclient-send-it): Make this function
+       work again after the browse-url machinery was changed to use
+       browse-url-default-handlers instead.
+
+2020-09-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix regression in non-querying about mail addresses in "emacs -Q"
+
+       * lisp/mail/emacsbug.el (report-emacs-bug-hook): Don't query about
+       the mail address if using an external mailer (bug#43386).
+
+2020-09-15  Daniel Martín  <mardani29@yahoo.es>
+
+       Check that the buffer in diff-buffer-with-file is visiting a file
+
+       * lisp/vc/diff.el (diff-buffer-with-file): Signal a specific error
+       when the buffer passed to diff-buffer-with-file is not visiting a
+       file (bug#43401).
+
+2020-09-15  Andrea Corallo  <akrl@sdf.org>
+
+       Better error handling after calling 'gcc_jit_context_compile_to_file'
+
+       Typically errors are catched in 'compile_function' but in case
+       libgccjit throw an error only afterwards while compiling the whole
+       compilation unit we have to report it correctly.
+
+       * src/comp.c (Fcomp__compile_ctxt_to_file): Catch libgccjit
+       errors after calling 'gcc_jit_context_compile_to_file'.
+
+2020-09-14  Andrea Corallo  <akrl@sdf.org>
+
+       * test/src/comp-tests.el (comp-tests-bootstrap): Print compilation time.
+
+2020-09-14  Andrea Corallo  <akrl@sdf.org>
+
+       Fix free function compilation load process.
+
+       * lisp/emacs-lisp/comp.el (comp-clean-up-stale-eln): Do not crash
+       if the eln filename is not canonical (tmp file or manual load).
+
+2020-09-14  Andrea Corallo  <akrl@sdf.org>
+
+       Add gv-setters for compiler hints
+
+       * lisp/emacs-lisp/comp.el (comp-hint-fixnum, comp-hint-cons): Add
+       gv-setters so type hinted expressions can be used as places.
+       Read we can now have like: '(cl-incf (cl-the fixnum x))'.
+
+2020-09-14  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (comp-sp): Better style gv-setter declaration.
+
+2020-09-14  Andrea Corallo  <akrl@sdf.org>
+
+       Remove type check emission from type hints low level primitives
+
+       These have to be emitted by higher level primitives as `cl-the'.
+
+       * lisp/emacs-lisp/comp.el (comp-hint-fixnum, comp-hint-cons): Do
+       not emit type checks.
+
+2020-09-14  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/cl-macs.el: Define fixnum and bignum.
+
+       Define fixnum so `cl-typep' recognize it and the type check emitted by
+       `cl-the' is effective.
+
+2020-09-14  Andrea Corallo  <akrl@sdf.org>
+
+       Add 'cl-optimize' as function declaration
+
+       * lisp/emacs-lisp/cl-macs.el: Register cl-optimize into
+       `defun-declarations-alist' and `macro-declarations-alist'.
+       (cl--optimize): New function to serve 'cl-optimize' declaration.
+
+2020-09-14  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/cl-macs.el (cl-the): Emit compiler hints when native.
+
+2020-09-14  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * test/lisp/emacs-lisp/find-func-tests.el: New file (for bug#43393)
+
+       * lisp/emacs-lisp/ert-x.el (ert-simulate-keys): New macro.
+
+       * test/lisp/international/mule-tests.el
+       (mule-cmds--test-universal-coding-system-argument): Use it and enable
+       the test also in batch mode.
+
+2020-09-14  Kevin Ryde  <user42@zip.com.au>
+
+       Tweak the `C-x v =' command when done from a diff buffer
+
+       * lisp/vc/vc.el (vc-diff): Offer to save the relevant buffer(s)
+       when doing `C-x v =' from a diff buffer (bug#5773).
+
+2020-09-14  Pip Cet  <pipcet@gmail.com>
+
+       Don't retry reading after receiving EINVAL
+
+       * src/process.c (wait_reading_process_output): Don't retry reading
+       from an fd after an unknown error (bug#6074).
+
+2020-09-14  Stephen Berman  <stephen.berman@gmx.net>
+
+       Fix problem of marking files with hidden subdirs
+
+       * lisp/dired.el (dired-unhide-subdir):
+       (dired-subdir-hidden-p):
+       (dired-subdir-min): Moved from subr-x.
+       (dired-get-filename): Get the correct filename when directories
+       are hidden (bug#8484).
+
+2020-09-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow preserving (some) text properties from completion tables
+
+       * doc/lispref/minibuf.texi (Text from Minibuffer): Document it.
+
+       * lisp/minibuffer.el (completion--replace): Preserve text
+       properties on completed items (bug#43218).
+
+2020-09-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow hitting RET on info node names with multiple whitespace chars
+
+       * lisp/info.el (info--node-canonicalize-whitespace): New function
+       (bug#10784).
+       (Info-extract-menu-node-name): Use it.
+       (Info-find-node): Use it.
+
+2020-09-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Fix completion in `read-library-name'"
+
+       This reverts commit ed44217d3245ddc8f2cf75c9499d5bb37848cfd7.
+
+       This commit broke the use case of `M-x load-library RET o/or TAB' to
+       expand to org/org.
+
+2020-09-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Further fixups in minibuffer-default--in-prompt-regexps
+
+       * lisp/minibuf-eldef.el (minibuffer-default--in-prompt-regexps):
+       Really allow shortening the default prompt format to [foo] (if
+       requested) (bug#12443).
+
+2020-09-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Support build of Emacs on ARM Macos machines
+
+       * configure.ac: Add support for aarch64-* on Macos (i.e., 64-bit
+       ARM) (bug#43369).
+
+2020-09-14  Mattias Engdegård  <mattiase@acm.org>
+
+       Calc: fix binomial coefficients for negative arguments (bug#16999)
+
+       For some values outside integers 0≤k≤n, (n choose k) gave wrong
+       results, entered infinite recursion or used unreasonably amounts of
+       stack space.  This change fixes that and extends the function to all
+       integer arguments using the definitions from M. J. Kronenburg
+       (https://arxiv.org/abs/1105.3689).
+
+       * lisp/calc/calc-comb.el (calcFunc-choose):
+       Fix sign error to prevent infinite recursion and extend function to
+       handle all integer arguments.
+       (math-choose-iter, math-choose-float-iter): Rewrite in iterative form;
+       no TCO in elisp yet.
+       * test/lisp/calc/calc-tests.el (calc-tests--fac, calc-tests--choose)
+       (calc-tests--check-choose, calc-tests--explain-choose)
+       (calc-tests--calc-to-number): New helper functions.
+       (calc-choose): New test.
+
+2020-09-14  Mattias Engdegård  <mattiase@acm.org>
+
+       * lisp/simple.el (undo-redo): Rephrase error message.
+
+2020-09-14  Glenn Morris  <rgm@gnu.org>
+
+       Fix builds without modules
+
+       * src/data.c (Finteractive_form):
+       * src/eval.c (Fcommandp): Fix builds without modules.
+
+2020-09-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix up report-emacs-bug action on invalid From headers
+
+       * lisp/mail/emacsbug.el (report-emacs-bug-hook): Move point to the
+       From header if the user has to edit the From header.
+
+2020-09-14  akater  <nuclearspace@gmail.com>  (tiny change)
+
+       Fix compilation-mode-map doc string
+
+       * lisp/progmodes/compile.el (compilation-mode-map): Remove mention of
+       compilation-minor-mode-map (bug#43382).
+
+       As the comment in the body says:
+
+       ;; Don't inherit from compilation-minor-mode-map,
+       ;; because that introduces a menu bar item we don't want.
+       ;; That confuses C-down-mouse-3.
+
+       and the map actually inherits from special-mode-map.
+
+2020-09-13  Philipp Stephani  <phst@google.com>
+
+       Add facility to make module functions interactive (Bug#23486).
+
+       * src/module-env-28.h: Add field for 'make_interactive' function.
+
+       * src/emacs-module.c (Lisp_Module_Function): Add new field holding the
+       interactive form.
+       (allocate_module_function): Adapt to structure layout change.
+       (module_make_interactive, module_function_interactive_form): New
+       functions.
+       (initialize_environment): Use them.
+
+       * src/eval.c (Fcommandp):
+       * src/data.c (Finteractive_form): Also handle interactive module
+       functions.
+
+       * test/data/emacs-module/mod-test.c (Fmod_test_identity): New test
+       function.
+       (emacs_module_init): Create two interactive module test functions.
+
+       * test/src/emacs-module-tests.el (module/interactive/return-t)
+       (module/interactive/return-t-int, module/interactive/identity):
+       New unit tests.
+
+       * doc/lispref/internals.texi (Module Functions): Document new
+       function.  Rework paragraph about wrapping module functions, as the
+       example no longer applies.
+
+       * etc/NEWS: Document new facility.
+
+2020-09-13  Reuben Thomas  <rrt@sc3d.org>
+
+       Escape ampersand in table.el LaTeX output
+
+       * lisp/textmodes/table.el (table--generate-source-scan-lines): Add
+         ampersand '&' to the list of characters to escape in LaTeX output.
+
+2020-09-13  Andrea Corallo  <akrl@sdf.org>
+
+       Fix defsbust declare effectiveness introduced by 80d7f710 (Bug#43280).
+
+       * lisp/emacs-lisp/byte-run.el (defsubst): Do not add a speed
+       declaration as this breaks a pre existing ones if present but
+       rather calls directly `byte-run--set-speed'.
+
+2020-09-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Further fixups of the variable-pitch eww header line change
+
+       * lisp/net/eww.el (eww-update-header-line-format): Protect against
+       :url not being set.
+
+2020-09-13  Stefan Kangas  <stefan@marxist.se>
+
+       Improve wording of cua-mode menu entry
+
+       * lisp/menu-bar.el (menu-bar-options-menu): Improve wording of the
+       cua-mode menu entry.  (Bug#43323)
+
+2020-09-13  Stefan Kangas  <stefan@marxist.se>
+
+       Improve frame-title-format and icon-title-format
+
+       * src/xdisp.c (syms_of_xdisp): Replace 'invocation-name' with the text
+       "%b - GNU Emacs" and replace "@" with " at ".  (Bug#41147)
+       * etc/NEWS: Announce the above change.
+
+2020-09-13  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-09-13  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix punctuation in EWW manual
+
+       * doc/misc/eww.texi (Advanced): Fix punctuation of a recent
+       change.
+
+2020-09-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make diff--refine-hunk bug out less on broken patches
+
+       * lisp/vc/diff-mode.el (diff--refine-hunk): Don't bug out on
+       broken patches where we can't find the middle.
+
+2020-09-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make the eww header work again even if the title is nil
+
+       * lisp/net/eww.el (eww-update-header-line-format): Don't bug out
+       if the title isn't set at all.
+
+2020-09-13  Dario Gjorgjevski  <dario.gjorgjevski@gmail.com>
+
+       Make ERC desktop notifications lenient to invalid XML characters
+
+       * lisp/xml.el (xml-invalid-characters-re): New constant.
+
+       * lisp/erc/erc-desktop-notifications.el
+       (erc-notifications-notify): Strip IRC control codes and invalid
+       XML characters before notifying (bug#43328).
+
+2020-09-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't eagerly store articles in the Agent by default
+
+       * lisp/gnus/gnus-agent.el (gnus-agent-store-article): Made
+       obsolete.
+
+       * lisp/gnus/gnus-art.el (gnus-request-article-this-buffer): Don't
+       call it.
+
+       * lisp/gnus/gnus-async.el (gnus-async-article-callback): Ditto
+       (bug#43356).
+
+       This partially reverts f3b146e943cd733fb716c75048f24b73826e5f30, which
+       in was response to what appears to be an erroneous feature-request -
+       bug#8502.
+
+       Instead this should be done instead:
+
+       “If I read an article while plugged, do they get entered into the
+       Agent?”
+
+            *No*. If you want this behavior, add
+            ‘gnus-agent-fetch-selected-article’ to
+            ‘gnus-select-article-hook’.
+
+2020-09-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Kill gpg-agents started by mml-sec-tests (bug#43358)
+
+2020-09-13  Brian Leung  <leungbk@mailfence.com>  (tiny change)
+
+       Update .gitignore with ccls files
+
+       * .gitignore: Ignore files used by ccls, a language server for C
+       (bug#43365).
+
+2020-09-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Doc string clarification in file-directory-p
+
+       * src/fileio.c (Ffile_directory_p): Mention that "" is a special
+       case (bug#43375).
+
+2020-09-13  Kiso Katsuyuki  <katsuyuki2388@gmail.com>  (tiny change)
+
+       Clarify when tab-line-switch-cycling is used
+
+       * lisp/tab-line.el (tab-line-switch-cycling): Clarify when the
+       variable is used.
+
+2020-09-13  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/time.el (display-time-world): Make obsolete.
+
+2020-09-13  Stefan Kangas  <stefan@marxist.se>
+
+       Make M-x show what aliases point to (Bug#43300)
+
+       * lisp/simple.el (read-extended-command--annotation): Show an
+       annotation for aliases saying what it points to.
+
+2020-09-13  Stefan Kangas  <stefan@marxist.se>
+
+       Make M-x show obsolete commands (Bug#43300)
+
+       * lisp/simple.el (read-extended-command): Don't hide obsolete
+       commands.
+       (read-extended-command--annotation): Show an annotation for obsolete
+       commands that says what their new name is.
+
+2020-09-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Use format-prompt in read-file-name calls that have a default"
+
+       This reverts commit de4f347901adffd07bc9bff028dc073fb3c6df33.
+
+       read-file-name already displays a long path when given a default
+       (like INITIAL in many other prompting functions), so using
+       format-prompt here is superfluous.
+
+2020-09-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make `ascii' a coding system alias for `us-ascii'
+
+       * lisp/international/mule-conf.el (ascii): Define `ascii' as a
+       coding system alias to `us-ascii' (bug#43351).
+
+2020-09-13  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix a conversion failure in tramp-archive-tests (Bug#43353)
+
+       * test/lisp/net/tramp-archive-tests.el
+       (tramp-archive-test-file-archive-hexlified): New defun.
+       (tramp-archive-test02-file-name-dissect): Use it.  (Bug#43353)
+
+2020-09-13  Glenn Morris  <rgm@gnu.org>
+
+       Don't force LC_ALL=C upon make check (bug#43353)
+
+       * test/Makefile.in (TEST_LOCALE): Remove.
+       (emacs): Don't force LC_ALL=C, since it causes problems with
+       non-ascii directories.  This mirrors a 7-year old lisp/Makefile change.
+
+2020-09-13  Glenn Morris  <rgm@gnu.org>
+
+       Mark some diff tests as failing in nonascii directories
+
+       * test/lisp/vc/diff-mode-tests.el (diff-mode-test-font-lock)
+       (diff-mode-test-font-lock-syntax-one-line):
+       Expect failure in non-ascii directories.
+
+2020-09-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clean up eww error buffer
+
+       * lisp/net/eww.el (eww-retrieve): Clean up error buffer after exiting.
+
+2020-09-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix up example code from previous eww.texi commit
+
+       * doc/misc/eww.texi (Advanced): Simplify example command (and
+       "--virtual-time-budget=3000" makes Chromium unstable).
+
+2020-09-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a way to use an external command to download HTML in eww
+
+       * doc/misc/eww.texi (Advanced): Document it.
+
+       * lisp/net/eww.el (eww-retrieve): New function.
+       (eww-reload): Use it.
+       (eww): Ditto.
+       (eww-retrieve-command): New variable.
+
+2020-09-12  Glenn Morris  <rgm@gnu.org>
+
+       Adapt some tests for Emacs's excitingly variable quoting format
+
+       * test/lisp/subr-tests.el (subr-test-version-parsing):
+       * test/lisp/emacs-lisp/gv-tests.el (gv-dont-define-expander-other-file):
+       * test/src/callint-tests.el 
(call-interactively/incomplete-multibyte-sequence):
+       * test/src/emacs-module-tests.el (module/describe-function-1):
+       Don't fail if curly quotes are in use, as they can be if LC_ALL != C.
+
+2020-09-12  Michael Albinus  <michael.albinus@gmx.de>
+
+       Cleanup in dbus.el, dbus-tests.el
+
+       * lisp/net/dbus.el (dbus-error-no-reply): New defconst.
+       (dbus-call-method): Use it.
+       (dbus-call-method-asynchronously, dbus-register-signal): Fix docstring.
+       (dbus-unregister-object): Obey :serial entries in
+       `dbus-registered-objects-table'.
+
+       * test/lisp/net/dbus-tests.el (dbus-test04-register-method)
+       (dbus-test05-register-property): Extend tests.
+
+2020-09-12  Glenn Morris  <rgm@gnu.org>
+
+       Make vc-bzr tests work with brz 3.1 (bug#43314)
+
+       * test/lisp/vc/vc-bzr-tests.el (vc-bzr-test-bug9726)
+       (vc-bzr-test-bug9781, vc-bzr-test-faulty-bzr-autoloads):
+       Make them work with brz 3.1.
+
+2020-09-12  Alan Mackenzie  <acm@muc.de>
+
+       C++ Mode: handle __attribute__,etc. inside constructor argument lists
+
+       This corrects both the fontification and indentation of these things, 
fixing
+       bug #42270.
+
+       * lisp/progmodes/cc-engine.el (c-do-declarators): Skip over "hangon 
keys" and
+       noise macros whilst scanning a putative C++ function.
+       (c-forward-decl-or-cast-1): When checking for typeless functions, skip 
over
+       "hangon keys" and noise macros.
+
+       * lisp/progmodes/cc-mode.el (c-fl-decl-end): Deal with certain invalid
+       "nested declarators" by scanning over them with a recursive call of
+       c-fl-decl-end.
+
+       * lisp/progmodes/cc-vars.el (c-noise-macro-names)
+       (c-noise-macro-with-parens-names): State in the doc strings that if 
either of
+       these is a regexp, it must have a submatch 1 which matches the noise 
macro
+       exactly.
+
+2020-09-12  Glenn Morris  <rgm@gnu.org>
+
+       Small Texinfo markup fixes
+
+       * doc/misc/dbus.texi (Register Objects):
+       * doc/misc/gnus.texi (Searching): Texinfo markup fixes.
+
+2020-09-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix compilation warning in cl-font-lock
+
+       * lisp/progmodes/cl-font-lock.el (cl-font-lock-built-in-mode): Put
+       in the tools group to avoid a compilation warning.
+
+2020-09-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix compilation warning in obsolete/complete.el
+
+       * lisp/obsolete/complete.el (completion-base-size): Avoid
+       compilation warning.
+
+2020-09-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix compilation warning in cl-lib.el
+
+       * lisp/emacs-lisp/cl-lib.el (cl-old-struct-compat-mode): Put the
+       minor mode in the tools group (to avoid a compilation warning).
+
+2020-09-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       dired-omit-mode may not be defined in dired-jump
+
+       * lisp/dired.el (dired-jump): dired-omit-mode is in dired-x, so it
+       may not be defined in dired.
+
+2020-09-12  Alex Bochannek  <alex@bochannek.com>
+
+       Support scoring on article age interactively in Gnus
+
+       * lisp/gnus/gnus-score.el (gnus-summary-score-entry): Support
+       scoring on article age in interactive scoring (bug#43270).
+
+2020-09-12  Glenn Morris  <rgm@gnu.org>
+
+       Default Emacs to UTF-8 instead of Latin-1
+
+       * doc/emacs/mule.texi (File Name Coding): Document it.
+
+       * lisp/international/mule-cmds.el (reset-language-environment):
+       Default to utf-8 instead of latin-1.
+
+       * lisp/mail/sendmail.el (default-sendmail-coding-system): Ditto.
+
+       * lisp/mh-e/mh-comp.el (mh-send-letter): Ditto.
+
+2020-09-12  Martin Rudalics  <rudalics@gmx.at>
+
+       Fix toggle-frame-fullscreen on w32 builds
+
+       * src/w32term.c (w32_read_socket): Set 'fullscreen' to 'maximized'
+       if Windows sends SIZE_MAXIMIZED and either the top or the left of
+       the frame is outside the screen.  (Bug#25542)
+
+2020-09-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Further diff-no-select doc string clarification
+
+       * lisp/vc/diff.el (diff-no-select): Doc string clarification.
+
+2020-09-12  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid unneeded recentering when header-line is used
+
+       * src/xdisp.c (try_window): Account for header-line height only in
+       the scroll-margin at the window's top, but not at its bottom.
+       (Bug#42653)
+
+2020-09-12  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix compilation on TERMINFO platforms with GCC 10
+
+       * src/terminfo.c [TERMINFO]: Don't redefine UP, BC, and CP, as
+       that could cause linking errors due to multiple definitions.
+       (Bug#43195)
+
+2020-09-12  Stefan Kangas  <stefan@marxist.se>
+
+       Move dired-jump from dired-x to dired (Bug#21981)
+
+       * lisp/dired-x.el (dired-bind-jump): Change into defvar and make
+       obsolete.
+       (dired-extra-startup): Doc fix.
+       (dired-jump, dired-jump-other-window): Move from here...
+       * lisp/dired.el (dired-jump, dired-jump-other-window): ...to here.
+
+       * lisp/bindings.el (ctl-x-map, ctl-x-4-map): Bind 'C-j' to
+       'dired-jump' and 'dired-jump-other-window'.
+
+       * doc/misc/dired-x.texi (Features, Installation)
+       (Miscellaneous Commands): Remove documentation of 'dired-jump'.
+       * doc/emacs/dired.texi (Dired Enter): Document 'dired-jump' and
+       dired-jump-other-window.
+       * etc/NEWS: Announce the above changes.
+
+       * test/lisp/dired-tests.el (dired-autoload): Adjust test.
+
+2020-09-11  Stefan Kangas  <stefan@marxist.se>
+
+       Add some eshell completion patterns
+
+       * lisp/eshell/em-cmpl.el (eshell-command-completions-alist):
+       Add 'gunzip', 'bunzip2' and 'unxz'.
+
+2020-09-11  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove cedet items obsolete since 23.2
+
+       * lisp/cedet/semantic.el (semantic-toplevel-bovine-table)
+       (semantic-toplevel-bovine-cache)
+       (semantic-before-toplevel-bovination-hook)
+       (semantic-after-toplevel-bovinate-hook, semantic-init-hooks)
+       (semantic-init-mode-hooks, semantic-init-db-hooks)
+       (semantic-bovination-working-type, semantic-bovinate-toplevel)
+       (semantic-bovinate-region-until-error)
+       (semantic-bovinate-from-nonterminal-full):
+       * lisp/cedet/semantic/db-mode.el (semanticdb-mode-hooks):
+       * lisp/cedet/semantic/decorate/mode.el
+       (semantic-decorate-pending-decoration-hooks):
+       * lisp/cedet/semantic/edit.el
+       (semantic-edits-incremental-reparse-failed-hooks):
+       * lisp/cedet/semantic/fw.el (define-mode-overload-implementation):
+       * lisp/cedet/semantic/idle.el
+       (semantic-before-idle-scheduler-reparse-hooks)
+       (semantic-after-idle-scheduler-reparse-hooks):
+       (semantic-eldoc-current-symbol-info)
+       * lisp/cedet/semantic/imenu.el (semantic-imenu-expand-type-parts)
+       (semantic-imenu-bucketize-type-parts)
+       (semantic-imenu-expandable-token):
+       * lisp/cedet/semantic/java.el
+       (semantic-java-prototype-nonterminal):
+       * lisp/cedet/semantic/lex.el (semantic-flex-token-start)
+       (semantic-flex-token-end, semantic-flex-token-text)
+       (semantic-flex-make-keyword-table, semantic-flex-keyword-p)
+       (semantic-flex-keyword-put, semantic-flex-keyword-get)
+       (semantic-flex-map-keywords, semantic-flex-keywords)
+       (semantic-flex-buffer, semantic-flex-list, semantic-flex):
+       * lisp/cedet/semantic/tag-file.el (semantic-find-nonterminal)
+       (semantic-find-dependency):
+       * lisp/cedet/semantic/tag-ls.el (semantic-nonterminal-full-name)
+       (semantic-nonterminal-protection, semantic-nonterminal-abstract)
+       (semantic-nonterminal-leaf):
+       * lisp/cedet/semantic/tag.el (semantic-token-type-parent)
+       (semantic-tag-make-assoc-list, semantic-expand-nonterminal):
+       * lisp/cedet/semantic/util.el (semantic-file-token-stream)
+       (semantic-something-to-stream):
+       * lisp/cedet/semantic/wisent.el (wisent-lex-make-token-table):
+       Delete many items obsolete since Emacs 23.2.
+       * lisp/cedet/semantic.el (semantic--set-buffer-cache)
+       (semantic-fetch-tags): Don't run removed hooks
+       'semantic-after-toplevel-bovinate-hook' and
+       'semantic-before-toplevel-bovination-hook'.
+       * lisp/cedet/semantic/bovine/el.el: Remove reference to obsolete
+       variable 'define-mode-overload-implementation'.
+       * lisp/cedet/semantic/doc.el (semantic-doc-snarf-comment-for-tag):
+       Don't bind removed variable 'semantic-ignore-comments'.
+       * lisp/cedet/semantic/fw.el (semantic-overload-symbol-from-function)
+       (semantic-alias-obsolete, semantic-varalias-obsolete): Declare
+       obsolete in favor of standard Emacs 'define-obsolete-*-alias'.
+       * lisp/cedet/semantic/grammar.el (semantic-grammar-ASSOC): Don't
+       use obsolete names.
+       * lisp/cedet/semantic/tag-ls.el (semantic-tag-full-package)
+       (semantic-tag-full-name): Doc fixes.
+       * lisp/cedet/semantic/util.el (semantic-describe-buffer): Don't bind
+       removed variable 'semantic-after-toplevel-bovinate-hook'.
+       * lisp/cedet/semantic/lex.el (semantic-flex-tokens)
+       (semantic-flex-unterminated-syntax-end-function)
+       (semantic-flex-extensions, semantic-flex-syntax-modifications)
+       (semantic-ignore-comments, semantic-flex-enable-newlines)
+       (semantic-flex-enable-whitespace, semantic-flex-enable-bol)
+       (semantic-number-expression, semantic-flex-depth): Make unused
+       variables obsolete.
+
+2020-09-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Guard against faulty flow-filled emails
+
+       * lisp/mail/flow-fill.el (fill-flowed): Don't bug out if there's a
+       space at the end of the buffer.  This is probably not allowed in
+       the flow-fill specification, but has been observed in the wild.
+
+2020-09-11  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: Fix minor bugs in the string handling functions
+
+       These sometimes gave rise to the tail of a buffer being "stringed out".
+
+       * lisp/progmodes/cc-defs.el (c-will-be-unescaped): New macro.
+
+       * lisp/progmodes/cc-mode.el (c-before-change-check-unbalanced-strings)
+       (c-after-change-mark-abnormal-strings): Fix bugs in the handling of 
string
+       fence syntax-table text properties.
+
+2020-09-11  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve help-echo of Undo and Redo menu items
+
+       * lisp/menu-bar.el (undo-redo, undo): Improve the wording of
+       help-echo strings.
+
+2020-09-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak previous mailcap patch (for external viewers)
+
+       * lisp/net/mailcap.el (mailcap-view-mime): Delete contents of the
+       buffer in the external case, too.
+
+2020-09-11  Michael Albinus  <michael.albinus@gmx.de>
+
+       D-Bus: Implement other compound types of properties
+
+       * doc/misc/dbus.texi (Errors and Events):
+       * etc/NEWS: Mention dbus-show-dbus-errors.
+
+       * lisp/net/dbus.el (dbus-compound-types): New defconst.
+       (dbus): New defgroup.
+       (dbus-show-dbus-errors): New defcustom.
+       (dbus-ignore-errors): Use it.
+       (dbus-set-property): Simplify.
+       (dbus-property-handler): Implement other compound types of properties.
+
+       * test/lisp/net/dbus-tests.el (dbus--test-register-service)
+       (dbus-test05-register-property): Extend tests.
+
+2020-09-11  Andrea Corallo  <akrl@sdf.org>
+
+       * src/comp.c (emit_static_object): Make use of ARRAYELTS.
+
+2020-09-11  Andrea Corallo  <akrl@sdf.org>
+
+       Make use of new 'gcc_jit_global_set_initializer' entry point
+
+       Use this brand new entry point to avoid the current workaround and its
+       load-time memcpys.
+
+       * src/comp.c (gcc_jit_global_set_initializer): Add to the dynamic
+       load machinery.
+       (static_obj_t): Remove const qualifier from the data field.
+       (emit_static_object): Make use of 'gcc_jit_global_set_initializer'
+       when available.
+       (load_static_obj): Use the blob for loading if that was emitted.
+
+2020-09-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix up eldef shortening of the minibuffer
+
+       * lisp/minibuf-eldef.el (minibuffer-default--in-prompt-regexps):
+       Don't include the ": " bit in the portion to be replaced
+       (bug#12443).
+
+2020-09-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Improve diff-no-select doc string
+
+       * lisp/vc/diff.el (diff-no-select): Improve the doc string somewhat.
+
+2020-09-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix viewing PDFs from eww with external viewers
+
+       * lisp/net/mailcap.el (mailcap-view-mime): Most MIME viewers can't
+       take input on stdin (and in any case, "-" is not how many of them
+       designate stdin) (bug#43318).  So rewrite to put the data on a
+       file and feed the file name to the viewer.
+
+2020-09-11  Mattias Engdegård  <mattiase@acm.org>
+
+       Calc: regularise test names
+
+       * test/lisp/calc/calc-tests.el (calc-remove-units, calc-extract-units)
+       (calc-convert-units, calc-bug-23889, calc-trig, calc-format-radix)
+       (calc-calendar, calc-solve-linear-system):
+       Use a uniform naming convention (calc- prefix) to simplify test running.
+
+2020-09-11  Mattias Engdegård  <mattiase@acm.org>
+
+       Simplify big integer constants in Calc
+
+       * lisp/calc/calc-comb.el (math-small-factorial-table):
+       * lisp/calc/calc-funcs.el (math-bernoulli-b-cache):
+       * lisp/calc/calc.el (math-2-word-size, math-half-2-word-size):
+       No need for math-read-number-simple.
+
+2020-09-11  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix calc tests when running noninteractively
+
+       This error was introduced in 8e1376a39125c3ffc0484077b502444d853eca79.
+
+       * lisp/calc/calc.el (calc--header-line): Prevent size from being 
negative.
+
+2020-09-11  Andrea Corallo  <akrl@sdf.org>
+
+       Update gitlab CI yml file
+
+       * .gitlab-ci.yml (test-native-bootstrap-speed0)
+       (test-native-bootstrap-speed1, test-native-bootstrap-speed2):
+       Update for new make invocation.
+
+2020-09-11  Andrea Corallo  <akrl@sdf.org>
+
+       By default when building native compile only what's part of the dump 
image
+
+       To Ahead of Time compile the whole Emacs distro define NATIVE_FULL_AOT
+       when invoking make ex: 'make NATIVE_FULL_AOT=1'.
+
+       * lisp/Makefile.in (NATIVE_SKIP_NONDUMP): New variable.
+       (compile-main): Use it + rename NATIVE_DISABLE -> NATIVE_DISABLED.
+       * lisp/emacs-lisp/comp.el
+       (batch-byte-native-compile-for-bootstrap): Rename NATIVE_DISABLE
+       -> NATIVE_DISABLED.
+
+2020-09-11  Eli Zaretskii  <eliz@gnu.org>
+
+       * lisp/simple.el (undo-redo): Doc fix.
+
+2020-09-11  Andrew G Cohen  <cohen@andy.bu.edu>
+
+       Allow an info structure as argument for gnus-group-get-parameter
+
+       * lisp/gnus/gnus.el (gnus-group-get-parameter): Allow the group
+       argument to be either a group name or a group info structure. This is
+       then parallel to gnus-group-set-parameter.
+
+2020-09-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/loadup.el ("button"): Move to after loaddefs.el
+
+2020-09-11  Andrew G Cohen  <cohen@andy.bu.edu>
+
+       Clean up group-finding in Gnus nnir search
+
+       This is part of removing code from nnir.el that isn't related to
+       searching backends and therefore belongs somewhere else.
+
+       * lisp/gnus/gnus-group.el (gnus-group-make-search-group)
+       (gnus-group-read-ephemeral-search-group): Put the logic for
+       determining the groups to search here, rather than in nnir. Improve
+       documentation.
+       * lisp/gnus/gnus-int.el (gnus-server-get-active): Renamed from
+       'nnir-get-active.
+       * lisp/gnus/nnir.el (nnir-run-imap, nnir-run-find-grep): Use it.
+       (nnir-get-active): Remove.
+       (nnir-make-specs): Make obsolete.
+       * lisp/gnus/nnselect.el (nnselect-group-server):  Make obsolete in
+       favor of 'gnus-group-server.
+
+2020-09-11  Andrew G Cohen  <cohen@andy.bu.edu>
+
+       Allow editing articles in Gnus nnselect groups
+
+       * lisp/gnus/nnselect.el (nnselect-request-replace-article): New 
function.
+
+2020-09-11  Elad Lahav  <elahav@qnx.com>  (tiny change)
+
+       Fix QNX build
+
+       * configure.ac: The __NO_EXT_QNX flag is no longer needed, and is
+       masking the declaration of memset_s() (bug#43234).
+
+2020-09-10  Boruch Baum  <boruch_baum@gmx.com>
+
+       Use a header line in calc mode instead of a regular in-buffer line
+
+       * lisp/calc/calc.el (calc-trail-here): Use a header line.
+       (calc--header-line): New function.
+       (calc-trail-mode): Use a header line.
+
+2020-09-10  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak how `M-RET' in Message mode fills paragraphs
+
+       * lisp/gnus/message.el (message-newline-and-reformat): Pick up any
+       longer white-space prefix before starting to fill (bug#43299).
+       This fixes the problem of hitting M-RET on a line that's just ">".
+
+2020-09-10  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Doc fix for diff-no-select
+
+       * lisp/vc/diff.el (diff-no-select): Document the BUF argument
+       (bug#43307).
+
+2020-09-10  Caio Henrique  <caiohcs0@gmail.com>  (tiny change)
+
+       Add a "Redo" entry to the menu
+
+       * lisp/menu-bar.el (menu-bar-edit-menu): Add "Redo" under "Undo"
+       in the Edit menu (bug#43315).
+
+2020-09-10  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix the font-lock-debug-fontify NEWS entry
+
+       * etc/NEWS: Fix the name of `font-lock-debug-fontify' (bug#43319).
+
+2020-09-10  Stefan Kangas  <stefan@marxist.se>
+
+       * lisp/textmodes/artist.el: Remove obsolete comments.
+
+2020-09-10  Stefan Kangas  <stefan@marxist.se>
+
+       Convert indent test for css-mode into automatic test
+
+       * test/lisp/textmodes/css-mode-tests.el (css-mode-test-indent): New
+       test.
+       (css-mode-tests-data-dir): New variable.
+       * test/manual/indent/css-mode.css: Move from here...
+       * test/lisp/textmodes/css-mode-resources/test-indent.css: ...to here.
+
+2020-09-10  Stefan Kangas  <stefan@marxist.se>
+
+       Mark some tests as expensive
+
+       * test/lisp/autorevert-tests.el
+       (auto-revert-test00-auto-revert-mode)
+       (auto-revert-test03-auto-revert-tail-mode)
+       (auto-revert-test04-auto-revert-mode-dired):
+       * test/lisp/cedet/semantic-utest-c.el
+       (semantic-test-c-preprocessor-simulation):
+       * test/lisp/cedet/srecode-utest-getset.el
+       (srecode-utest-getset-output):
+       * test/lisp/emacs-lisp/cl-seq-tests.el (cl-seq-test-bug24264):
+       * test/lisp/emacs-lisp/package-tests.el
+       (package-test-update-archives-async):
+       * test/lisp/filenotify-tests.el (file-notify-test03-events)
+       (file-notify-test04-autorevert)
+       (file-notify-test05-file-validity, file-notify-test08-backup):
+       * test/lisp/net/gnutls-tests.el (test-gnutls-005-aead-ciphers):
+       * test/lisp/shadowfile-tests.el (shadow-test00-clusters)
+       (shadow-test09-shadow-copy-files):
+
+2020-09-10  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in mml-sec-tests.el
+
+       * test/lisp/gnus/mml-sec-tests.el: Use lexical-binding.
+       (mml-secure-test-mail-fixture)
+       (mml-secure-test-en-decrypt-with-passphrase): Fix warnings.
+
+2020-09-10  Stefan Kangas  <stefan@marxist.se>
+
+       * test/lisp/org/org-tests.el: Use lexical-binding.
+
+2020-09-10  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in url-future-tests.el
+
+       * test/lisp/url/url-future-tests.el: Use lexical-binding.
+       (url-future-tests--saver): New variable.
+       (url-future-tests): Use new variable.
+
+2020-09-10  Stefan Kangas  <stefan@marxist.se>
+
+       Use lexical-binding in semantic-utest-c.el
+
+       * test/lisp/cedet/semantic-utest-c.el: Use lexical-binding.
+       (semantic-test-gcc-output-parser): Fix warning.
+
+2020-09-10  Michael Albinus  <michael.albinus@gmx.de>
+
+       Implement D-Bus properties with compound type.
+
+       * lisp/net/dbus.el (dbus-set-property): Fix thinko.
+       (dbus-register-property, dbus-property-handler): Support compound
+       properties.
+
+       * src/dbusbind.c (dbus-registered-objects-table): Fix docstring.
+
+       * test/lisp/net/dbus-tests.el (dbus--test-interface): Make it
+       different to `dbus--test-service'.
+       (dbus-test05-register-property)
+       (dbus-test05-register-property-several-paths): Adapt tests.
+
+2020-09-10  Nick Savage  <nick@nicksavage.ca>  (tiny change)
+
+       Open describe-function NEWS links in view-mode
+
+       * lisp/help-mode.el (help-news): Open describe-function NEWS links in
+       view-mode (Bug#39912)
+
+2020-09-10  Alex Bochannek  <alex@bochannek.com>  (tiny change)
+
+       Fix up < and > "date" scoring rules in Gnus
+
+       * lisp/gnus/gnus-score.el (gnus-score-date): The previous < and >
+       "date" scoring rules (added in the previous patch) had reversed
+       logic (bug#43270).
+
+2020-09-10  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Fix :match function for the file widget
+
+       * lisp/wid-edit.el (file widget): Return nil if value is not a
+       string (bug#25678).
+
+2020-09-10  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert back to using ESC as viper-ESC-key again
+
+       * lisp/emulation/viper-keym.el (viper-ESC-key): Revert back to
+       using ESC instead of `escape' (bug#18182).  This allows using
+       `C-[' again on terminals for ESC.  The key should be mapped back
+       to `escape' by `function-key-map'.
+
+2020-09-10  Andrew G Cohen  <cohen@andy.bu.edu>
+
+       Fix new summary-line after editing an article in Gnus
+
+       * lisp/gnus/gnus-sum.el (gnus-summary-edit-article-done): Strip ^M
+       from the ends of lines after saving an edited article. Otherwise the
+       new header isn't always parsed properly, resulting in an incorrect
+       subject line in the summary buffer.
+
+2020-09-10  Andrea Corallo  <akrl@sdf.org>
+
+       Guard against trying to rename files into eln sys directory
+
+       * src/comp.c (file_in_eln_sys_dir): New function.
+       (Fnative_elisp_load): Make use of.
+
+2020-09-10  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-09-10  Andrea Corallo  <akrl@sdf.org>
+
+       Fix rename file error when reloading the same file from an sys eln dir.
+
+       * src/comp.c (Fnative_elisp_load): Don't rename files we don't
+       have the permission for.
+
+2020-09-10  Andrea Corallo  <akrl@sdf.org>
+
+       Revert "* src/comp.c (Fcomp__compile_ctxt_to_file): Don't cleanup 
caches at bootstrap."
+
+       This reverts commit 15acd27d1c0de8b56bab61daa0a8fcd4fef0fdc4.
+
+2020-09-10  Amin Bandali  <bandali@gnu.org>
+
+       Set `generated-autoload-file' in erc-status-sidebar.el
+
+       * lisp/erc/erc-status-sidebar.el: Set `generated-autoload-file' to
+       ERC's dedicated "erc-loaddefs.el", since we don't need this file's
+       autoloaded functions to be available before ERC itself is loaded.
+
+2020-09-09  Kiso Katsuyuki  <katsuyuki2388@gmail.com>  (tiny change)
+
+       Introduce a new variable tab-line-switch-cycling
+
+       If it is set t, enable cycling tab switch.  Default is nil.
+
+2020-09-09  Kiso Katsuyuki  <katsuyuki2388@gmail.com>  (tiny change)
+
+       Suppress errors of tab-line-switch functions
+
+       Target errors occurs when tab-line-switch-to-prev-tab or
+       tab-line-switch-to-next-tab is invoked in a buffer which is not in
+       tabs
+
+2020-09-09  João Távora  <joaotavora@gmail.com>
+
+       Fix up fix for bug#19032
+
+       * lisp/icomplete.el (icomplete-ret): Call
+       minibuffer-icomplete-and-exit, not minibuffer-exit.
+
+2020-09-09  Stefan Kangas  <stefan@marxist.se>
+
+       Minor clean ups and doc fixes in find-dired
+
+       * lisp/find-dired.el (find-ls-option, find-dired): Doc fixes.
+       (find-dired, kill-find): Minor clean ups.
+
+2020-09-09  Stefan Kangas  <stefankangas@gmail.com>
+
+       Make flyspell-prog-text-faces into defcustom
+
+       * lisp/textmodes/flyspell.el (flyspell-prog-text-faces):
+       Make into defcustom.  (Bug#32136)
+
+2020-09-09  Naoya Yamashita  <conao3@gmail.com>
+
+       Add gv-define-expander for plist-get
+
+       It is necessary to make plist-get as a generalized variable, and this
+       definition allows user to use setf and other useful functions on
+       plist-get.
+
+       * lisp/emacs-lisp/gv.el: Add gv-define-expander for plist-get
+
+       * test/lisp/emacs-lisp/gv-tests.el: Add new tests for plist-get
+
+2020-09-09  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/dnd.el: Use lexical-binding.  Remove redundant :group
+
+       (dnd--unescape-uri): Mark it internal, but don't mark it inlinable.
+
+       * lisp/cus-edit.el (dnd): Move the group to dnd.el.
+
+2020-09-09  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       (define-minor-mode): Don't compute a default :group (bug#41145)
+
+       * lisp/emacs-lisp/easy-mmode.el (define-minor-mode): Rely on the
+       `defcustom`s own defaulting for the :group.
+
+       * lisp/display-fill-column-indicator.el
+       (global-display-fill-column-indicator-mode): Remove now redundant 
:group.
+
+       * lisp/cus-dep.el (custom--get-def): New function.
+       (custom-make-dependencies): Use it.
+
+2020-09-09  Michael Albinus  <michael.albinus@gmx.de>
+
+       Adapt Tramp doc
+
+       * doc/misc/tramp.texi (Remote shell setup):
+       Mention password-word-equivalents.
+
+       * lisp/net/tramp.el (tramp-password-prompt-regexp): Fix docstring.
+
+2020-09-09  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       366a97c980 (origin/emacs-27) Avoid crashes when trying to load bad GI...
+       7938713105 C++ Mode: handle comma separated brace initializers.
+       2b95300cf8 * lisp/display-fill-column-indicator.el: Fix bug#41145
+
+2020-09-09  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       9b35b0c99c ; * lisp/man.el (Man-mode): Fix formatting.
+       abca75d2e9 ; Fix typos; change "Emacs-Lisp" to "Emacs Lisp"
+
+2020-09-09  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       302f71e55d Fix help message with help-window-select
+       0fb3fc92b3 Remove obsolete "Wide Characters" section of Gnus manual
+
+2020-09-09  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix thinko in dbus.el
+
+       * doc/misc/dbus.texi (Register Objects): Rename from "Receiving
+       Method Calls".  Add reference to D-Bus API Design document.
+
+       * lisp/net/dbus.el (dbus-managed-objects-handler): Fix thinko.
+
+       * test/lisp/net/dbus-tests.el (dbus-test05-register-property)
+       (dbus-test05-register-property-several-paths): Extend tests.
+
+2020-09-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add the (hopefully) correct debbugs header for patches
+
+       * lisp/mail/emacsbug.el (submit-emacs-patch): Mark the submission
+       as a patch.
+
+2020-09-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Implement a new `submit-emacs-patch' command
+
+       * doc/emacs/trouble.texi (Checklist): Mention the new command.
+
+       * doc/lispref/intro.texi (Caveats): Ditto.
+
+       * lisp/mail/emacsbug.el (emacs-bug--system-description): Factor
+       out into own function.
+       (report-emacs-bug): ... from here.
+       (submit-emacs-patch): New command.
+
+2020-09-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make the button navigation commands available via a minor mode
+
+       * lisp/button.el (button-mode): New minor mode.
+
+       * doc/lispref/display.texi (Button Buffer Commands): Mention it.
+
+2020-09-09  Andrew G Cohen  <cohen@andy.bu.edu>
+
+       Make Gnus cache work with nnselect
+
+       * lisp/gnus/gnus-cache.el (gnus-cache-possibly-enter-article)
+       (gnus-cache-possibly-remove-articles)
+       (gnus-cache-possibly-remove-article): Use originating article info for
+       nnselect groups.
+
+2020-09-09  Andrew G Cohen  <cohen@andy.bu.edu>
+
+       Add Gnus function to make a persistent group from a search result
+
+       * lisp/gnus/gnus-sum.el (gnus-summary-make-group-from-search): New
+       command (bound to C-c C-p in summary buffers).
+       * doc/misc/gnus.texi (What is nnir?): Document it. Correct previous
+       errors.
+       * etc/NEWS (Gnus): Mention it.
+
+2020-09-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow DEFAULT in format-prompt to be a list
+
+       * doc/lispref/minibuf.texi (Text from Minibuffer): Document it.
+
+       * lisp/minibuffer.el (format-prompt): Allow DEFAULT to be a list
+       (and use the first element).  This is how many of the prompting
+       functions interpret their default parameters.
+
+2020-09-08  Win Treese  <treese@acm.org>
+
+       Fix crash from clicking on menu bar (bug#34762, bug#26982)
+
+       * src/nsmenu.m (ns_update_menubar): Remove extraneous use of
+       autorelease pool.
+
+2020-09-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Use format-prompt in calls to read-from-minibuffer with default 
value"
+
+       This reverts commit 1921d2176bb9127d2483a1c8a470abfc3f4eec33.
+
+       The DEFAULT-VALUE here isn't really a default value (since READ is 
nil), so
+       don't say there's a default.
+
+2020-09-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Doc string update for tramp-password-prompt-regexp
+
+       * lisp/net/tramp.el (tramp-password-prompt-regexp): Mention
+       password-word-equivalents in the doc string.
+
+2020-09-08  Daniel Martín  <mardani29@yahoo.es>
+
+       Use mouse-wheel-up-event in mwheel-tests.el
+
+       Enabling mouse-wheel-mode binds two different mouse events, depending
+       on the operating system. The correct way to check for those events is
+       by checking mouse-wheel-up-event, as explained in the ELisp manual.
+
+       * test/lisp/mwheel-tests.el (mwheel-test-enable/disable): Check
+       mouse-wheel-up-event instead of mouse-4 to make the test work
+       irrespective of the platform it's running.
+
+2020-09-08  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid crashes when trying to load bad GIF files
+
+       * src/image.c (gif_load): Handle the case when GifErrorString
+       returns NULL.  (Bug#43281)
+
+2020-09-08  Glenn Morris  <rgm@gnu.org>
+
+       Skip failing cperl test on hydra
+
+       * test/lisp/progmodes/cperl-mode-tests.el (cperl-mode-test-bug-10483):
+       Skip on hydra.nixos.org.
+
+2020-09-08  Michael Albinus  <michael.albinus@gmx.de>
+
+       * etc/NEWS: Add D-Bus changes.
+
+2020-09-08  Michael Albinus  <michael.albinus@gmx.de>
+
+       Implement typed D-Bus properties (Bug#43252)
+
+       * doc/misc/dbus.texi (Properties and Annotations)
+       (Receiving Method Call): Document optional type symbol in
+       `dbus-set-property' and `dbus-register-property'.
+
+       * lisp/net/dbus.el (dbus-error-unknown-interface)
+       (dbus-error-unknown-method, dbus-error-unknown-object)
+       (dbus-error-unknown-property): New defconsts.
+       (dbus-peer-handler): Improve error handling.
+       (dbus-introspect-get-signature): Handle also properties.
+       (dbus-set-property, dbus-register-property): Allow optional TYPE
+       symbol for VALUE.  (Bug#43252)
+       (dbus-property-handler): Implement property types.  Improve error
+       handling.
+
+       * src/dbusbind.c (dbus-message-internal, dbus-registered-objects-table):
+       Fix docstring.
+
+       * test/lisp/net/dbus-tests.el (dbus-test05-register-property):
+       Extend test.
+       (dbus-test05-register-property-several-paths): New test.
+
+2020-09-08  Andrea Corallo  <akrl@sdf.org>
+
+       * src/comp.c (Fcomp__compile_ctxt_to_file): Don't cleanup caches at 
bootstrap.
+
+2020-09-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Explain in the tab-always-indent doc how to make TAB insert a 
TAB"
+
+       This reverts commit 4b2371631167e509668b6268334e324fdd2f0327.
+
+       overriding-terminal-local-map should apparently not be used for minor 
stuff like this.
+
+2020-09-08  Alex Bochannek  <alex@bochannek.com>
+
+       Introduce a new Gnus scoring method (for article age)
+
+       * doc/misc/gnus.texi (Score File Format): Document it.
+
+       * lisp/gnus/gnus-score.el (gnus-score-check-syntax): Add support
+       for the new date methods < and > (bug#43270).
+       (gnus-score-date): Allow scoring on dates by age.
+
+2020-09-08  João Távora  <joaotavora@gmail.com>
+
+       Change icomplete-show-matches-on-no-input behaviour for Icomplete only
+
+       (Bug#19032), bug#43120
+
+       Previous fixes to bug#19032 introduced bugs in Fido mode.  This fix
+       relies on a new command bound to RET.
+
+       * etc/NEWS (Miscellaneous): Mention icomplete-show-matches-on-no-input.
+
+       * lisp/icomplete.el (icomplete-show-matches-on-no-input): Add comment.
+       (icomplete-minibuffer-map): Rebind minibuffer-complete-and-exit to
+       icomplete-ret.
+       (icomplete-ret): New command.
+
+2020-09-08  João Távora  <joaotavora@gmail.com>
+
+       Revert two commits for bug#19032
+
+       This reverts:
+
+       - commit 585fe00557489e49188b6a301f001ef01ff15dcb, which is titled
+         "Fix up previous icomplete-show-matches-on-no-input change"
+
+       - commit 1b8d369c381b5a63e40529d0d95dfa75d94b8e09, which is titled
+         "Change icomplete-show-matches-on-no-input behavior".
+
+       A simpler, less intrusive fix follows shortly after this commit.
+
+2020-09-08  Amin Bandali  <bandali@gnu.org>
+
+       * etc/NEWS: Mention the new erc-status-sidebar.el
+
+       * lisp/erc/erc-status-sidebar.el: Fix header and make small tweaks
+
+2020-09-08  Andrew Barbarello  <andrew.barbarello@outlook.com>
+
+       * lisp/erc/erc-status-sidebar.el: New file
+
+       Taken from commit 87210a3ccc16a86e6b5992744b68daabed3b2d11
+       of https://github.com/drewbarbs/erc-status-sidebar.
+
+2020-09-08  Andrea Corallo  <akrl@sdf.org>
+
+       Name temp eln files as .eln.tmp so we can't clean-up them mistakenly.
+
+       * src/comp.c (Fcomp__compile_ctxt_to_file): Postfix temporary eln
+       files as .eln.tmp.
+
+2020-09-07  Andrea Corallo  <akrl@sdf.org>
+
+       Do not crash compilation if user eln-cache wasn't already created.
+
+       * lisp/emacs-lisp/comp.el (comp-clean-up-stale-eln): Guard
+       against calling `directory-files' on non existent directories.
+
+2020-09-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Use format-prompt in read-file-name calls that have a default
+
+       * lisp/xwidget.el (xwidget-webkit-save-as-file):
+       * lisp/vc/vc.el (vc-backend-for-registration, vc-delete-file)
+       (vc-rename-file):
+       * lisp/vc/ediff-ptch.el (ediff-prompt-for-patch-file):
+       * lisp/vc/diff-mode.el (diff-tell-file-name):
+       * lisp/progmodes/etags.el (visit-tags-table)
+       (visit-tags-table-buffer):
+       * lisp/misearch.el (multi-isearch-read-files):
+       * lisp/mail/rmailmm.el (rmail-mime-save):
+       * lisp/help-fns.el (doc-file-to-man, doc-file-to-info):
+       * lisp/gnus/gnus-bookmark.el (gnus-bookmark-load):
+       * lisp/files.el (write-file, basic-save-buffer):
+       * lisp/dired.el (dired-read-dir-and-switches):
+       * lisp/bookmark.el (bookmark-save, bookmark-load):
+       * lisp/abbrev.el (write-abbrev-file, abbrev-edit-save-to-file):
+       Use format-prompt in read-file-name calls that have a default.
+
+2020-09-07  Reuben Thomas  <rrt@sc3d.org>
+
+       Fix Enchant dictionary finding routine
+
+       * lisp/textmodes/ispell.el (ispell-find-enchant-dictionaries): Don’t
+         pass `buffer-string' to enchant-lsmod. Remove zero-length substrings
+         from the split output of `enchant-lsmod`, as the output ends with a
+         separator. Pass the current language to
+         `ispell--get-extra-word-characters', so we get the result for the
+         current language, not the default language. (Patch from Jorge P. de
+         Morais Neto.)
+
+2020-09-07  Juri Linkov  <juri@linkov.net>
+
+       * lisp/char-fold.el (char-fold-to-regexp): Handle lax-whitespace 
(bug#38539)
+
+2020-09-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix test failure in custom--test-theme-variables
+
+       * test/lisp/custom-tests.el (custom--test-theme-variables): "make
+       check" in the main directory didn't work because the path was
+       wrong.  Use EMACS_TEST_DIRECTORY to find the test directory
+       instead.
+
+2020-09-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Require ert in the cperl tests, since it's reloading itself
+
+2020-09-07  Viktor Slavkovikj  <zhtvk@gmx.com>  (tiny change)
+
+       Use auth-source for passwords in rmail
+
+       * lisp/mail/rmail.el (rmail-get-remote-password): Use auth-source for
+       passwords (bug#24274).
+       (rmail-parse-url): Pass in user/host.
+
+2020-09-07  Daniel Martín  <mardani29@yahoo.es>  (tiny change)
+
+       Add support for horizontal scrolling in tab-line
+
+       * lisp/tab-line.el ([tab-line wheel-left]): Bind left and right tab
+       line scrolling to the 'wheel-left' and 'wheel-right' mouse events.
+       ([tab-line S-wheel-right]): Analogous change for the functions that
+       switch tabs.
+       * etc/NEWS: Announce the new feature (bug#43224).
+
+2020-09-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Show the status of signed + encrypted S/MIME messages in Gnus
+
+       * lisp/gnus/mm-decode.el (mm-possibly-verify-or-decrypt): Use the
+       data to tell the caller (i.e., Gnus) something about the
+       validation of signed + encrypted S/MIME messages.
+
+       * lisp/gnus/mm-view.el (mm-view-pkcs7-verify): Pass along details
+       about whether we could validate the signature or not (bug#42637).
+
+2020-09-07  João Távora  <joaotavora@gmail.com>
+
+       Better explain behaviour of icomplete--sorted-completions
+
+       * lisp/icomplete.el (icomplete--sorted-completions): Overhaul comment
+
+2020-09-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove debugging code inadvertently checked in
+
+       * lisp/gnus/gnus-fun.el (gnus-face-from-file): Remove debugging
+       code inadvertently checked in.
+
+2020-09-07  Andrew G Cohen  <cohen@andy.bu.edu>
+
+       Add aliases for recent Gnus nnselect changes
+
+       * lisp/org/ol-gnus.el (org-gnus-store-link): Change 'nnir to
+       'nnselect.
+       * lisp/gnus/gnus-group.el: Define obsolete function alias for
+       'gnus-group-make-nnir-group to
+       'gnus-group-read-ephemeral-search-group.
+       * lisp/gnus/gnus-sum.el: Define obsolete variable alias for
+       'gnus-refer-thread-use-nnir to 'gnus-refer-thread-use-search.
+       * lisp/gnus/nnselect.el: Define obsolete variable alias for
+       'nnir-retrieve-headers-override-function to
+       'nnselect-retrieve-headers-override-function.
+       * lisp/gnus/nnir.el: Restore definition of 'nnir-summary-line-format
+       and mark obsolete.
+
+2020-09-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Use variable-pitch fonts in the eww headers
+
+       * lisp/net/eww.el (eww--limit-string-pixelwise)
+       (eww--pixel-column): New functions.
+       (eww-update-header-line-format): Use variable pitch fonts in the
+       header line.
+
+2020-09-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add edebug form to subr--with-wrapper-hook-no-warnings
+
+       * lisp/subr.el (subr--with-wrapper-hook-no-warnings): Add a debug
+       form to allow edebugging some stuff.
+
+2020-09-07  Reuben Thomas  <rrt@sc3d.org>
+
+       Add enchant-2 to list of default spelling checker programs
+
+       * lisp/textmodes/ispell.el (ispell-program-name): Check `enchant-2',
+       as it is likely to be a suitable version.
+
+2020-09-07  Philip K  <philipk@posteo.net>
+
+       Allow CSS completion with multiple rules on one line
+
+       * lisp/textmodes/css-mode.el (css--complete-property-value): Check
+       for semi-colon when completing property values (bug#43242).
+
+2020-09-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Use format-prompt in some read-string calls
+
+       * lisp/progmodes/prolog.el (prolog-help-on-predicate):
+       * lisp/cmuscheme.el (scheme-trace-procedure):
+       * lisp/calendar/todo-mode.el (todo-convert-legacy-files): Use
+       format-prompt in some read-string calls (that have default values).
+
+       * lisp/printing.el (pr-interactive-regexp): No need to use "" as
+       the default value, because that's the default default value.
+       (pr-interactive-n-up): Use read-number instead of read-string and
+       then parsing the string.
+
+2020-09-06  dickmao  <none>
+
+       Make list-processes--refresh work for pipe processes, too
+
+       * lisp/simple.el (list-processes--refresh): Don't bug out in the
+       presence of a `pipe' process (bug#43202).
+
+2020-09-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Use format-prompt in calls to read-from-minibuffer with default value
+
+       * lisp/tab-bar.el (tab-bar-rename-tab)
+       (tab-bar-rename-tab-by-name):
+       * lisp/simple.el (next-matching-history-element): Use
+       format-prompt in calls to read-from-minibuffer with at default
+       value.
+
+2020-09-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Use format-prompt in read-string calls (that have default values)
+
+       * lisp/vc/vc-annotate.el (vc-annotate):
+       * lisp/vc/log-edit.el (log-edit-comment-search-backward)
+       (log-edit-comment-search-forward):
+       * lisp/textmodes/rst.el (rst-insert-list-new-item):
+       * lisp/server.el (server-force-delete):
+       * lisp/mpc.el (mpc):
+       * lisp/frame.el (set-frame-name):
+       * lisp/emulation/cua-rect.el (cua-sequence-rectangle):
+       * lisp/cedet/semantic/symref/list.el (semantic-symref-regexp):
+       * lisp/calendar/todo-mode.el (todo-read-time): Use `format-prompt'
+       in `read-string' calls that have defaults.
+
+2020-09-06  Stefan Kangas  <stefankangas@gmail.com>
+
+       Add autoload cookie to eshell-bookmark-jump
+
+       * lisp/eshell/esh-mode.el (eshell-bookmark-jump): Add autoload
+       cookie, so we can jump to bookmarks before having used eshell.
+       Problem noted by Stefan Monnier.
+
+2020-09-06  Michael Albinus  <michael.albinus@gmx.de>
+
+       More work on D-Bus error messages
+
+       * lisp/net/dbus.el (dbus-get-property): Adapt docstring.
+       (dbus-set-property): Handle case of `:write' access type.
+       (dbus-get-other-registered-properties): Rename from
+       `dbus-get-other-registered-property'.
+       (dbus-property-handler): Fix thinkos.
+
+       * src/dbusbind.c (xd_read_message_1): Add error_name to event args
+       in case of DBUS_MESSAGE_TYPE_ERROR.
+
+       * test/lisp/net/dbus-tests.el (dbus--test-enabled-session-bus)
+       (dbus--test-enabled-system-bus): Make them defconst.
+       (dbus--test-service, dbus--test-path, dbus--test-interface):
+       New defconst.  Replace all occurrences of `dbus-service-emacs' by
+       `dbus--test-service'.
+       (dbus--test-method-handler): New defun.
+       (dbus-test04-register-method, dbus-test05-register-property): New tests.
+
+2020-09-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Use format-prompt in calls to completing-read with a default value
+
+       * lisp/textmodes/rst.el (rst-insert-list-new-item):
+       * lisp/tab-bar.el (tab-bar-switch-to-tab):
+       * lisp/profiler.el (profiler-start):
+       * lisp/frame.el (set-frame-font):
+       * lisp/erc/erc.el (erc-join-channel):
+       * lisp/emacs-lock.el (emacs-lock--set-mode):
+       * lisp/emacs-lisp/elp.el (elp-set-master):
+       * lisp/emacs-lisp/checkdoc.el ()
+       (checkdoc-this-string-valid-engine):
+       * lisp/calendar/todo-mode.el (todo-find-filtered-items-file):
+       * lisp/calendar/calendar.el (calendar-set-date-style): Use
+       `format-prompt' in calls to completing-read that has a default
+       value, but didn't mention that in the prompt.
+
+2020-09-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Use a popup menu for <select>s in eww
+
+       * lisp/net/eww.el (eww-change-select): Use a popup menu for the
+       select (bug#43218).
+       (eww--form-items): New utility function.
+       (eww-select-map): Allow using a mouse to click on select buttons.
+
+2020-09-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Disable display-warning buttons when doing batch compiles
+
+       * lisp/emacs-lisp/warnings.el (display-warning): Don't output the
+       buttons when we're not interactive (bug#43244).
+
+2020-09-06  Andrea Corallo  <akrl@sdf.org>
+
+       * src/data.c (subr-native-lambda-list): Defined it unconditionally 
(bug#43255)
+
+       * src/comp.c (Fcomp__compile_ctxt_to_file): Rename a variable.
+
+2020-09-06  Andrea Corallo  <akrl@sdf.org>
+
+       * src/comp.c (Fnative_elisp_load): Make recompilation always effective.
+
+       When loading a file if in this session there was ever a file loaded
+       with that name rename it before loading it to make sure we always get
+       a new handle from the standard library.
+
+2020-09-06  Andrea Corallo  <akrl@sdf.org>
+
+       Rework eln deletion strategy for new eln-cache folder structure
+
+       When recompiling remove the corresponding stale elns found in the
+       `comp-eln-load-path'.
+
+       When removing a package remove the corresponding elns too.
+
+       On Windows both of these are performed only when possible, when it's
+       not the file is renamed as .eln.old and a last attempt to remove this
+       is performed closing the Emacs session.  When a file being deleted was
+       loaded by multiple Emacs sessions the last one being closed should
+       delete it.
+
+       * lisp/emacs-lisp/comp.el (comp-clean-up-stale-eln): New function.
+       (comp-delete-or-replace-file): Rename from
+       `comp--replace-output-file' and update so it can be used for
+       replacing or deleting shared libs safely.
+
+       * lisp/emacs-lisp/package.el (package--delete-directory): When
+       native compiled just call `comp-clean-up-stale-eln' for each
+       eln file we want to clean-up.
+
+       * src/alloc.c (cleanup_vector): Call directly the dynlib_close.
+
+       * src/comp.c (syms_of_comp): Update for comp_u->cfile removal.
+       Make 'all_loaded_comp_units_h' key-value weak as now the key will
+       be the filename.
+       (load_comp_unit): Register the compilation unit only when the load
+       is fully completed.
+       (register_native_comp_unit): Make the key of
+       all_loaded_comp_units_h the load filename.
+       (eln_load_path_final_clean_up): New function.
+       (dispose_comp_unit)
+       (finish_delayed_disposal_of_comp_units)
+       (dispose_all_remaining_comp_units)
+       (clean_package_user_dir_of_old_comp_units): Remove.
+       (Fcomp__compile_ctxt_to_file): Update for
+       `comp--replace-output-file' -> `comp-delete-or-replace-file'
+       rename.
+
+       * src/comp.h (dispose_comp_unit)
+       (finish_delayed_disposal_of_comp_units)
+       (dispose_all_remaining_comp_units)
+       (clean_package_user_dir_of_old_comp_units): Remove.
+       (eln_load_path_final_clean_up): Add.
+       (struct Lisp_Native_Comp_Unit): Remove cfile field.
+
+       * src/emacs.c (Fkill_emacs): Call 'eln_load_path_final_clean_up'.
+
+       * src/pdumper.c (dump_do_dump_relocation): Do not set comp_u->cfile.
+
+2020-09-06  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Fix formatting of recent Gnus nnselect changes
+
+       * doc/misc/gnus.texi (Finding the Parent, Selection Groups)
+       (Searching, Basic Usage): Heed sentence-end-double-space.  Fix
+       formatting of prose and examples.
+       * etc/NEWS: Fix typo.
+       * lisp/gnus/gnus-srvr.el: Remove disabled autoload.
+       * lisp/gnus/gnus-cloud.el (gnus-cloud-available-chunks):
+       * lisp/gnus/gnus-group.el (gnus-group-read-ephemeral-search-group):
+       * lisp/gnus/gnus-sum.el (gnus-refer-thread-use-search)
+       (gnus-summary-refer-thread):
+       * lisp/gnus/gnus.el (gnus-kill-ephemeral-group):
+       * lisp/gnus/nnheader.el (nnheader-head-make-header)
+       (nnheader-parse-head):
+       * lisp/gnus/nnir.el:
+       (nnir-hyrex-remove-prefix, nnir-run-notmuch):
+       * lisp/gnus/nnselect.el: Fix formatting/indentation of commentary,
+       docstring, and/or code.
+
+2020-09-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Use `format-prompt' when prompting with default values
+
+       * lisp/woman.el (woman-file-name):
+       * lisp/wid-edit.el (widget-file-prompt-value)
+       (widget-coding-system-prompt-value):
+       * lisp/w32-fns.el (w32-set-system-coding-system):
+       * lisp/vc/vc.el (vc-print-root-log):
+       * lisp/vc/vc-annotate.el (vc-annotate):
+       * lisp/vc/emerge.el (emerge-read-file-name):
+       * lisp/vc/ediff.el (ediff-directories)
+       (ediff-directory-revisions, ediff-directories3)
+       (ediff-merge-directories, )
+       (ediff-merge-directories-with-ancestor)
+       (ediff-merge-directory-revisions)
+       (ediff-merge-directory-revisions-with-ancestor)
+       (ediff-merge-revisions, ediff-merge-revisions-with-ancestor)
+       (ediff-revision):
+       * lisp/vc/ediff-util.el (ediff-toggle-regexp-match):
+       * lisp/vc/ediff-mult.el (ediff-filegroup-action):
+       * lisp/vc/add-log.el (prompt-for-change-log-name):
+       * lisp/textmodes/table.el (table-insert-row-column)
+       (table-span-cell, table-split-cell-horizontally)
+       (table-split-cell, table-justify, table-generate-source)
+       (table-insert-sequence, table-capture)
+       (table--read-from-minibuffer, table--query-justification):
+       * lisp/textmodes/sgml-mode.el (sgml-tag, sgml-tag-help):
+       * lisp/textmodes/reftex-ref.el (reftex-goto-label):
+       * lisp/textmodes/refer.el (refer-get-bib-files):
+       * lisp/textmodes/css-mode.el (css-lookup-symbol):
+       * lisp/term.el (serial-read-name, serial-read-speed):
+       * lisp/speedbar.el (speedbar-change-initial-expansion-list):
+       * lisp/simple.el (previous-matching-history-element)
+       (set-variable):
+       * lisp/ses.el (ses-read-cell, ses-set-column-width):
+       * lisp/replace.el (query-replace-read-from)
+       (occur-read-primary-args):
+       * lisp/rect.el (string-rectangle, string-insert-rectangle):
+       * lisp/progmodes/tcl.el (tcl-help-on-word):
+       * lisp/progmodes/sh-script.el (sh-set-shell):
+       * lisp/progmodes/python.el (python-eldoc-at-point):
+       * lisp/progmodes/octave.el (octave-completing-read)
+       (octave-update-function-file-comment, octave-insert-defun):
+       * lisp/progmodes/inf-lisp.el (lisp-symprompt):
+       * lisp/progmodes/cperl-mode.el (cperl-info-on-command)
+       (cperl-perldoc):
+       * lisp/progmodes/compile.el (compilation-find-file):
+       * lisp/net/rcirc.el (rcirc-prompt-for-encryption):
+       * lisp/net/eww.el (eww):
+       * lisp/net/browse-url.el (browse-url-with-browser-kind):
+       * lisp/man.el (man):
+       * lisp/mail/sendmail.el (sendmail-query-user-about-smtp):
+       * lisp/mail/mailalias.el (build-mail-aliases):
+       * lisp/mail/mailabbrev.el (merge-mail-abbrevs)
+       (rebuild-mail-abbrevs):
+       * lisp/locate.el (locate-prompt-for-search-string):
+       * lisp/isearch.el (isearch-occur):
+       * lisp/international/ogonek.el (ogonek-read-encoding)
+       (ogonek-read-prefix):
+       * lisp/international/mule.el (read-buffer-file-coding-system)
+       (set-terminal-coding-system, set-keyboard-coding-system)
+       (set-next-selection-coding-system, recode-region):
+       * lisp/international/mule-cmds.el ()
+       (universal-coding-system-argument, search-unencodable-char)
+       (select-safe-coding-system-interactively):
+       * lisp/info.el (Info-search, Info-search-backward, Info-menu):
+       * lisp/info-look.el (info-lookup-interactive-arguments):
+       * lisp/imenu.el (imenu--completion-buffer):
+       * lisp/ibuf-ext.el (mode, used-mode, ibuffer-mark-by-mode):
+       * lisp/hi-lock.el (hi-lock-unface-buffer)
+       (hi-lock-read-face-name):
+       * lisp/help.el (view-emacs-news, where-is):
+       * lisp/help-fns.el (describe-variable, describe-symbol)
+       (describe-keymap):
+       * lisp/gnus/mm-decode.el (mm-save-part):
+       * lisp/gnus/gnus-sum.el (gnus-summary-browse-url):
+       * lisp/gnus/gnus-group.el (gnus-group--read-bug-ids)
+       (gnus-group-set-current-level):
+       * lisp/frame.el (make-frame-on-monitor)
+       (close-display-connection, select-frame-by-name):
+       * lisp/format.el (format-encode-buffer, format-encode-region):
+       * lisp/files.el (recode-file-name):
+       * lisp/files-x.el (read-file-local-variable)
+       (read-file-local-variable-value, )
+       (read-file-local-variable-mode):
+       * lisp/ffap.el (ffap-menu-ask):
+       * lisp/faces.el (face-read-string):
+       * lisp/facemenu.el (facemenu-set-charset):
+       * lisp/erc/erc-dcc.el (erc-dcc-do-GET-command):
+       * lisp/emulation/edt-mapper.el (edt-mapper):
+       * lisp/emacs-lisp/trace.el (trace--read-args)
+       (trace-function-foreground, trace-function-background):
+       * lisp/emacs-lisp/smie.el (smie-config-set-indent):
+       * lisp/emacs-lisp/re-builder.el (reb-change-syntax):
+       * lisp/emacs-lisp/package.el (describe-package):
+       * lisp/emacs-lisp/find-func.el (read-library-name)
+       (find-function-read):
+       * lisp/emacs-lisp/ert.el (ert-read-test-name)
+       (ert-run-tests-interactively):
+       * lisp/emacs-lisp/disass.el (disassemble):
+       * lisp/emacs-lisp/debug.el (debug-on-entry)
+       (debug-on-variable-change):
+       * lisp/emacs-lisp/advice.el (ad-read-advised-function)
+       (ad-read-advice-class, ad-read-advice-name, ad-read-regexp):
+       * lisp/dired-x.el (dired--mark-suffix-interactive-spec):
+       * lisp/dired-aux.el (dired-diff):
+       * lisp/cus-edit.el (custom-variable-prompt, customize-mode)
+       (customize-changed-options):
+       * lisp/completion.el (interactive-completion-string-reader):
+       * lisp/calendar/timeclock.el (timeclock-ask-for-project):
+       * lisp/calc/calcalg3.el (calc-get-fit-variables):
+       * lisp/calc/calc-store.el (calc-edit-variable):
+       * lisp/calc/calc-bin.el (calc-word-size):
+       * lisp/bookmark.el (bookmark-set-internal):
+       * lisp/abbrev.el (read-abbrev-file): Use `format-prompt' for
+       prompting (bug#12443).
+
+2020-09-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make C-h S in Customize buffers work more reliably
+
+       * lisp/cus-edit.el (custom-unlispify-menu-entry): Put a property
+       on the returned string so that we can determine what the symbol
+       was after the fact.
+
+       * lisp/info-look.el (info-lookup-guess-default*): Allow lambda
+       forms as rules.
+       (:mode): Use the stored symbol.
+       (info-lookup-guess-custom-symbol): No longer used; mark as
+       obsolete (bug#41905).
+
+2020-09-06  João Távora  <joaotavora@gmail.com>
+
+       Don't resort Icomplete candidates when default already on top
+
+       (Bug#43222)
+
+       Icomplete mode re-sorts candidates, bubbling the default to top if
+       it's found somewhere down the list.  This is done according to two
+       criteria: exact match and prefix match.  Before this fix, it didn't
+       take into account the possibility that the exact match for the default
+       would already be on top, and would incorrectly bubble a prefixing
+       completion down the list to the top.  This commit fixes that.
+
+       * lisp/icomplete.el (icomplete--sorted-completions):
+       Rework. Recomment.
+
+2020-09-06  Andrea Corallo  <akrl@sdf.org>
+
+       Makefile.in (ELN_DESTDIR): Add ${version}/ to it.
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-09-06  Thomas Fitzsimmons  <fitzsim@fitzsim.org>
+
+       EUDC: Reword macOS Contacts back end overview
+
+       * doc/misc/eudc.texi (macOS Contacts): Shorten section.
+
+2020-09-06  Thomas Fitzsimmons  <fitzsim@fitzsim.org>
+
+       EUDC: Fix a minor formatting issue
+
+       * lisp/net/eudcb-macos-contacts.el
+       (eudc-macos-contacts-query-internal): Move result to its own line
+       to eliminate a lisp-mode warning.
+
+2020-09-06  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from Gnulib
+
+       This incorporates:
+       2020-09-05 verify: avoid __builtin_assume
+       2020-08-30 strerrorname_np: New module
+       2020-08-26 include_next, stdint, time_rz: Change configure message
+       * lib/gnulib.mk.in: Regenerate.
+       * lib/string.in.h, lib/verify.h, m4/include_next.m4, m4/stdint.m4:
+       * m4/string_h.m4, m4/time_rz.m4: Copy from Gnulib.
+
+2020-09-06  Stefan Kangas  <stefankangas@gmail.com>
+
+       * lisp/svg.el: Bump package version to 1.1.
+
+2020-09-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix eww-change-select defaults in a different way
+
+       * lisp/net/eww.el (eww-change-select): Fix bug#43218 in a more
+       safe way than the previous version.
+
+2020-09-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix up previous icomplete-show-matches-on-no-input change
+
+       * lisp/icomplete.el (icomplete-completions): Ensure that the
+       default value is cleared (bug#43120).
+
+2020-09-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Reinstall recent GC-related changes
+
+       The report that they broke macOS was a false alarm, as the
+       previous commit was also broken (Bug#43152#62).
+       * src/alloc.c (live_string_holding, live_cons_holding)
+       (live_symbol_holding):
+       Count only pointers that point to a struct component,
+       or are a tagged pointer to the start of the struct.
+       Exception: for non-bool-vector pseudovectors,
+       count any pointer past the header, since it’s too much
+       of a pain to write code for every pseudovector.
+       (live_float_holding, live_vector_pointer):
+       New functions, which are similar about counting pointers.
+       (live_float_p, live_large_vector_holding)
+       (live_small_vector_pointer, mark_maybe_pointer): Use them.
+       (mark_maybe_object, mark_maybe_objects): Remove,
+       and remove all callers; mark_maybe_pointer now suffices.
+       (mark_objects): New function.
+       * src/alloc.c (mark_vectorlike, mark_face_cache):
+       * src/eval.c (mark_specpdl):
+       * src/fringe.c (mark_fringe_data):
+       * src/keyboard.c (mark_kboards):
+       Simplify by using mark_objects.
+       * src/lisp.h (SAFE_ALLOCA_LISP_EXTRA):
+       Clear any Lisp_Object arrays large enough to not fit into the stack,
+       so that GC need not worry about whether they contain objects.
+
+2020-09-05  Michael Albinus  <michael.albinus@gmx.de>
+
+       Adapt tramp-test30-make-process
+
+       * test/lisp/net/tramp-tests.el (tramp-list-tramp-buffers)
+       (tramp-time-diff): Don't declare.
+       (tramp-test30-make-process): Adapt test.
+
+2020-09-05  Michael Albinus  <michael.albinus@gmx.de>
+
+       Minor improvements in Tramp error reporting
+
+       * lisp/net/tramp-cmds.el (tramp-bug):
+       Handle `tramp-suppress-trace' property.
+       (tramp-reporter-dump-variable): Improve variable dump.
+
+       * lisp/net/tramp.el (tramp--startup-hook, tramp-password-save-function):
+       Add `tramp-suppress-trace' property.
+
+2020-09-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Display name with with spaces, but keep symbol name underneath"
+
+       This reverts commit e0c77bb62c1c950a82ea0517646d989dc5c1fe27.
+
+       We can't use a string with a display string here, anyway, because
+       it's used in other contexts.
+
+2020-09-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "info-lookup-symbol: Fix the suggested default value in Custom 
buffers"
+
+       This reverts commit ccae4ea6990580e7489e7c9f958b4a094b32b8b8.
+
+       We can't use a string with a display string here, anyway, because
+       it's used in other contexts.
+
+2020-09-05  Mauro Aranda  <maurooaranda@gmail.com>
+
+       info-lookup-symbol: Fix the suggested default value in Custom buffers
+
+       * lisp/info-look.el (info-lookup-maybe-add-help 'Custom-mode): Don't
+       pass info-lookup-guess-custom-symbol as the :parse-rule, since we
+       don't need it anymore.  (Bug#41905)
+       (info-lookup-guess-custom-symbol): Now unused, mark as obsolete.
+       (info-lookup-interactive-arguments): Get rid of text properties before
+       passing the default value to completing-read.
+
+2020-09-05  Lucas Werkmeister  <mail@lucaswerkmeister.de>
+
+       Mark sgml-basic-offset as safe for integers
+
+       * lisp/textmodes/sgml-mode.el (sgml-basic-offset):
+       Add :safe.  (Bug#43215)
+
+2020-09-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Explain in the tab-always-indent doc how to make TAB insert a TAB
+
+       * lisp/indent.el (tab-always-indent): Mention how to make TAB
+       insert a TAB character always (bug#37183).
+
+2020-09-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix default value in selects in eww
+
+       * lisp/net/eww.el (eww-change-select): Make hitting RET with an
+       empty string use a default (bug#43218).
+
+2020-09-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix <optgroup> in selects in eww
+
+       * lisp/net/eww.el (eww-tag-select): Use all the options.  This
+       fixes the problem with <optgroup> elements that wrap them (bug#43217).
+
+2020-09-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak how cperl-mode fontifies hashes and arrays
+
+       * lisp/progmodes/cperl-mode.el (cperl-init-faces): Fontify hashes
+       and arrays (%foo and @foo) before the keywords, since the keyword
+       regexps are "wider" and the hash/array regexp just match those two
+       things (bug#22867).
+
+2020-09-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Protect compilation-auto-jump against code killing the buffer
+
+       * lisp/progmodes/compile.el (compilation-auto-jump): Something may
+       have killed the buffer before the timer fired (bug#24585).
+
+2020-09-05  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Improve call to widget-create-child-and-convert in cus-edit
+
+       * lisp/cus-edit.el (custom-variable-value-create): Pass tag as the
+       :tag property value (bug#41905).
+
+2020-09-05  ej-32u  <ej32u@protonmail.com>  (tiny change)
+
+       Display name with with spaces, but keep symbol name underneath
+
+       * lisp/cus-edit.el (custom-unlispify-menu-entry): Display the
+       pretty name, but keep the real symbol name as the value (bug#41905).
+
+2020-09-05  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Preserve user customizations after disabling a theme
+
+       * lisp/custom.el (enable-theme): Since we are enabling the theme, bind
+       custom--inhibit-theme-enable to nil.  Then rely on custom-push-theme
+       to do the right thing with the theme settings and prior user settings,
+       instead of manipulating the property here.  This way, when disabling a
+       theme, we restore user preferences, even when the values were changed
+       outside of customize.
+       (disable-theme): Call custom-push-theme instead of handling theme
+       settings directly.
+       (custom-push-theme): Avoid another instance of Bug#28904: we don't
+       need the changed theme when the value recorded for it is going to be
+       the same as the recorded for the user theme.
+
+       * test/lisp/custom-tests.el (custom--test-theme-variables): Get rid of
+       a portion of the test that will always fail, because the user theme
+       has priority over every other theme.  Expect the test to pass now that
+       we preserve user customizations after disabling a theme (bug#34027).
+
+2020-09-05  Andrew G Cohen  <cohen@andy.bu.edu>
+
+       Introduce nnselect backend for gnus
+
+       This new backend allows gnus to handle arbitrary sets of messages
+       spanning multiple groups, even when these groups are from different
+       backends and different servers. All gnus glue is removed from
+       nnir (leaving only the backend search functions) and gnus
+       search-related processing is done through nnselect. In appropriate
+       places 'nnir' has been replaced by 'nnselect' or 'search'.
+
+       * etc/NEWS: Document the change.
+       * doc/misc/gnus.texi: New  documentation for nnselect and update
+       searching and thread-referral  sections.
+       * lisp/gnus/nnselect.el: New file.
+       * lisp/gnus/nnir.el: Remove all gnus glue, leaving only searching
+       capability. Improve documentation strings.
+       * lisp/gnus/gnus-group.el (gnus-group-read-ephemeral-search-group,
+       gnus-group-make-search-group): New functions.
+       * lisp/gnus/gnus-msg.el (gnus-setup-message, gnus-group-news,
+       gnus-summary-news-other-window): Update to work for nnselect. Fix
+       gnus-newsgroup-name wrangling.
+       *lisp/gnus/gnus-registry.el
+       (gnus-registry-action,gnus-registry-ignore-group-p): Make work from 
nnselect.
+       * lisp/gnus/nnheader.el (nnheader-parse-head, nnheader-parse-nov):
+       Rework and consolidate header parsing.
+       * lisp/gnus/gnus-agent.el (gnus-agent-regenerate-group):
+       * lisp/gnus/gnus-cache.el (gnus-possibly-enter-article):
+       * lisp/gnus/gnus-cloud.el (gnus-cloud-available-chunks):
+       * lisp/gnus/gnus-msg.el (gnus-inews-yank-articles):
+       * lisp/gnus/gnus-sum.el (gnus-get-newsgroup-headers):
+       * lisp/gnus/nndiary.el (nndiary-parse-head):
+       * lisp/gnus/nnfolder.el (nnfolder-parse-head):
+       * lisp/gnus/nnmaildir.el (nnmaildir--update-nov):
+       * lisp/gnus/nnml.el (nnml-parse-head):
+       * lisp/gnus/nnspool.el (nnspool-insert-nov-head):
+       Use new header parsing.
+       * lisp/gnus/gnus-start.el (gnus-read-active-for-groups): Rescan on
+       activation by default.
+       * lisp/gnus/gnus-sum.el (gnus-summary-line-format-alist): New specs
+       for virtual groups.
+       (gnus-article-sort-by-rsv, gnus-thread-sort-by-rsv):  New functions to
+       allow sorting by search RSV.
+
+2020-09-04  Andrii Kolomoiets  <andreyk.mad@gmail.com>
+
+       Don't move point in vc-dir on vc-register/vc-checkin (bug#43188)
+
+       * lisp/vc/vc-dir.el (vc-dir-update):
+         Save and restore point on 'ewoc-invalidate'.
+       * lisp/vc/vc-dispatcher.el (vc-finish-logentry):
+         Don't call 'vc-dir-move-to-goal-column'.
+       * lisp/vc/vc.el (vc-register): Don't call 'vc-dir-move-to-goal-column'.
+
+2020-09-04  Alan Mackenzie  <acm@muc.de>
+
+       C++ Mode: handle comma separated brace initializers.
+
+       This includes both indentation and fontification.
+
+       * lisp/progmodes/cc-engine.el (c-do-declarators): Handle brace 
initializers
+       without = correctly.
+       (c-looking-at-or-maybe-in-bracelist): Use c-do-declarators with a simple
+       inline function to check that after-type-id-pos points to the start of a
+       declarator.
+
+       * lisp/progmodes/cc-langs.el (c-recognize-bare-brace-inits): New lang
+       const/variable.
+
+2020-09-04  Andrea Corallo  <akrl@sdf.org>
+
+       Rename and move eln system directory
+
+       Rename eln sys directory into 'native-lisp' and move it from
+       "$(DESTDIR)${libexecdir}/emacs/${version}/${configuration}/" to
+       "$(DESTDIR)${libdir}/emacs/".
+
+       Add to the directory name used to disambiguate the eln compatibility
+       the Emacs version to have it more user friendly.
+
+       * Makefile.in (clean, install-eln): Rename eln-cache into
+       native-lisp.
+       (ELN_DESTDIR): Move from
+       '$(DESTDIR)${libexecdir}/emacs/${version}/${configuration}/' to
+       '$(DESTDIR)${libdir}/emacs/'.
+
+       * lisp/loadup.el: Update for comp-native-path-postfix ->
+       comp-native-version-dir rename.
+
+       * src/comp.c (syms_of_comp): Rename eln-cache -> native-lisp.
+       (syms_of_comp, Fcomp_el_to_eln_filename): Rename
+       comp-native-path-postfix -> comp-native-version-dir.
+       (hash_native_abi): Rework and add emacs-version to
+       comp-native-version-dir.
+
+2020-09-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix previous manual mis-merge of dired-aux
+
+       * lisp/dired-aux.el (dired-rename-file): Fix manual mis-merge of
+       previous patch.
+
+2020-09-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix up previous LAMDA->LAMBDA patch
+
+       * lisp/international/mule-cmds.el (ucs-names): Ensure we're only
+       matching LAMDA as a word.  Noted by Stefan Monnier.
+
+2020-09-04  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Do not remove unbound variables or faces when modifying a custom-theme
+
+       * lisp/cus-theme.el (custom-theme-write-variables
+       custom-theme-write-faces): Remove check for a bound symbol or for a
+       face name, so saving a theme does not remove not yet defined variables
+       or faces (bug#24727).
+
+2020-09-04  Michael Albinus  <michael.albinus@gmx.de>
+
+       * etc/NEWS: Add changes for D-Bus; fix typos.
+
+2020-09-04  Michael Albinus  <michael.albinus@gmx.de>
+
+       Extend dbus.el by error messages, and :write access type
+
+       * doc/misc/dbus.texi (Receiving Method Calls): Describe how to
+       produce D-Bus error messages.
+       (Receiving Method Calls): Support :write access type.
+
+       * lisp/net/dbus.el (dbus-error-dbus, dbus-error-failed)
+       (dbus-error-access-denied, dbus-error-invalid-args)
+       (dbus-error-property-read-only): New defconsts.
+       (dbus-method-error-internal): Add arg ERROR-NAME.
+       (dbus-register-method): Adapt docstring.
+       (dbus-handle-event): Handle error messages returned from the handler.
+       (dbus-get-this-registered-property)
+       (dbus-get-other-registered-property): New defuns.
+       (dbus-register-property): Support :write access type.
+       (dbus-property-handler): Submit proper D-Bus error messages.
+       Handle several paths at the same interface.
+
+       * src/dbusbind.c (Fdbus_message_internal): Improve handling of
+       DBUS_MESSAGE_TYPE_ERROR.
+
+2020-09-04  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Document :type-error property for customization types
+
+       * doc/lispref/customize.texi (Type Keywords): Document :type-error, so
+       Lisp programs can display a more correct message when the value of a
+       user option doesn't match its type (bug#23975).
+
+2020-09-04  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/display-fill-column-indicator.el: Fix bug#41145
+
+       (global-display-fill-column-indicator-mode): Specify the implicit
+       defustom's group explicitly.
+
+       * lisp/cus-dep.el (custom-make-dependencies): Also look at
+       define(-globalized)-minor-mode since it can also define custom vars.
+
+2020-09-04  Michael Albinus  <michael.albinus@gmx.de>
+
+       Backport recent change in tramp-tests.el from master, don't merge
+
+       * test/lisp/net/tramp-tests.el (tramp-test05-expand-file-name):
+       No need to expect different results in Emacs 28 and later.
+
+2020-09-04  Noam Postavsky  <npostavs@gmail.com>
+
+       Allow "lambda" spelling for ucs-insert
+
+       * lisp/international/mule-cmds.el (ucs-names): Add a "LAMBDA"
+       completion variant for every "LAMDA" name (bug#30513).
+
+2020-09-04  Robert Pluim  <rpluim@gmail.com>
+
+       Show log suppression buttons in display-warning buffer
+
+       * etc/NEWS: Describe 'display-warning' button change (bug#30757).
+       * lisp/emacs-lisp/warnings.el (warning-suppress-warning):
+       Define button.
+       (warning-suppress-action): New function.
+       (warning-suppress-log-warning): Define button.
+       (warning-suppress-log-action): New function.
+       (display-warning): Show buttons to allow permanent
+       modification of warning-suppress-types and
+       warning-suppress-log-types per warning.
+
+2020-09-04  Tino Calancha  <tino.calancha@gmail.com>
+
+       wdired-do-renames: Speed up for long Emacs sessions
+
+       `dired-rename-file' calls unconditionally `dired-rename-subdir'.
+       The second function performs performs a loop on all the Emacs
+       buffers; this step is only needed if FILE is a directory (bug#32899).
+
+       In a long lived Emacs session, this can make a difference
+       when renaming a bunch of files with `wdired'.
+       For instance, in my 40 days old Emacs session, with ~ 700 buffers,
+       this patch increases the speed to rename 2000 files a factor ~ 15.
+
+       * lisp/dired-aux.el (dired-rename-file): Call `dired-rename-subdir'
+       if FILE is a directory.  Add docstring.
+       (dired-rename-subdir, dired-remove-entry)
+       (dired-remove-file): Add docstring.
+
+       (dired-remove-entry): Move definition into `dired.el'.
+
+       * lisp/wdired.el (wdired-do-renames): Use a progress-reporter.
+
+       * lisp/dired.el (dired-delete-entry):
+       Use `dired-remove-entry'.  Add docstring.
+
+       (dired-buffers-for-dir, dired-fun-in-all-buffers):
+       Change comment into docstring.
+       (dired-fun-in-all-buffers): Prefer `when' and `push' here.
+
+2020-09-04  Harald Jörg  <haj@posteo.de>
+
+       Fix infloop when indenting in cperl-mode
+
+       * lisp/progmodes/cperl-mode.el (cperl-indent-exp): Fix (Bug#10483)
+       Perl expressions (e.g. function calls) ending in ")" without
+       statement terminator on the same line no longer loop endlessly.
+
+2020-09-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix previous buffer name fixup in save-some-buffers
+
+       * lisp/files.el (save-some-buffers): Get the file name for the
+       correct buffer in the buffer name check (bug#43192).
+
+2020-09-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't display the Gnus splash on gnus-read-ephemeral-emacs-bug-group
+
+       * lisp/gnus/gnus.el: Don't display the Gnus splash at load time
+       (bug#43123).
+
+2020-09-04  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/mail/mspools.el: Use lexical-scoping.  Autoload `mspools-show`.
+
+       (mspools-mode-map): Remove bindings made redundant by 
`special-mode-map`.
+       (mspools-show): Autoload.  Use `erase-buffer`.
+       (mspools-visit-spool): Use `inhibit-read-only`; simplify a bit.
+       (mspools-get-spool-files): Avoid `setq`.  Use `pcase-dolist`.
+       (mspools-revert-buffer): Make (unused) args optional.
+       (mspools-help, mspools-show-again, mspools-quit): Declare obsolete.
+
+2020-09-04  João Távora  <joaotavora@gmail.com>
+
+       Fix ElDoc's eldoc-documentation-enthusiast strategy
+
+       As soon as we get a response from any of the user functions/sources in
+       eldoc-documentation-functions, we must make sure to call the
+       display-doc local function, just like in the other strategies.
+
+       That is even if that response produced nil, meaning that there's no
+       doc coming from that source.  Failure to do so when none of the
+       sources produced non-nil would keep stale documentation displaying.
+
+       First reported in https://github.com/joaotavora/eglot/issues/503
+
+       * lisp/emacs-lisp/eldoc.el (eldoc--invoke-strategy): Fix
+       :enthusiast strategy.
+       (Version): Bump to 1.10.0
+
+2020-09-03  Harald Jörg  <haj@posteo.de>
+
+       Fix freeze in cperl-mode when editing a regexp
+
+       * lisp/progmodes/cperl-mode.el (cperl-forward-group-in-re): Make
+       sure that an error is reported back to the caller (Bug#16368).
+
+       * test/lisp/progmodes/cperl-mode-tests.el (cperl-mode-test-bug-16368):
+       Tests for balanced (no error) and unbalanced (caught exception)
+       cases of `cperl-forward-group-in-re'.
+
+2020-09-03  Alan Third  <alan@idiocy.org>
+
+       * configure.ac (GNU_OBJC_CFLAGS): Check ObjC defaults to C99. 
(bug#43167)
+
+       * src/image.c (svg_load_image): Use xmalloc and xfree. (bug#43135)
+
+2020-09-03  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Revert recent GC-related changes (Bug#43152)
+
+       * src/alloc.c (live_string_holding, live_cons_holding)
+       (live_symbol_holding, live_large_vector_holding)
+       (live_small_vector_holding):
+       Go back to old approach of treating every would-be pointer to any
+       byte in the object (though not to just past the object end) as
+       addressing the object.
+       (live_float_p): Require that the would-be float point
+       to the start of the Lisp_Float, and not anywhere else.
+       (live_vector_pointer, live_float_holding, mark_objects):
+       Remove.  All uses removed.
+       (mark_maybe_object, mark_maybe_objects):
+       Bring back these functions.
+       * src/lisp.h (SAFE_ALLOCA_LISP_EXTRA): Do not clear the
+       new slots, as they're now checked via mark_maybe_objects,
+       not via mark_objects.
+
+2020-09-03  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix 'expand-file-name' for remote files
+
+       This reverts most of commit 14fb657ba82da346d36f05f88da26f1c5498b798
+       and its followup fixes, and instead fixes the original bugs in a
+       different manner that doesn't affect any unrelated use cases.  As
+       part of this, the code which caused 'expand-file-name' to enforce
+       a trailing slash on expanded directories is removed, as this kind
+       of semantic processing is outside of 'expand-file-name's scope.
+       * src/fileio.c (Fexpand_file_name): If expanding default_directory
+       yields a remote file name, call its handlers.  (Bug#26911)
+       (Bug#34834)
+
+       * doc/lispref/files.texi (File Name Expansion): Remove the
+       requirement that expanding a directory name yields a directory
+       name, i.e. that the expansion must end in a slash.
+
+       * etc/NEWS: Remove the announcement of the changed behavior of
+       'expand-file-name' wrt trailing slashes.
+
+       * test/src/fileio-tests.el (fileio-tests--HOME-trailing-slash)
+       (fileio-tests--expand-file-name-trailing-slash): Remove tests.
+       * test/lisp/net/tramp-tests.el (tramp-test05-expand-file-name): No
+       need to expect different results in Emacs 28 and later.
+
+2020-09-03  Stefan Kangas  <stefankangas@gmail.com>
+
+       Fix my previous change to cancel world-clock timer
+
+       * lisp/time.el (subr-x): Require when compiling.
+       (world-clock): Set 'kill-buffer-hook' buffer locally only.
+       (world-clock-update): Break out timer cancellation from here...
+       (world-clock-cancel-timer): ...to here, and don't rely on variable to
+       find the timer to cancel.
+       (world-clock-timer): Delete now superfluous variable.
+
+2020-09-03  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix vertical cursor motion when 'visual-line-mode' is in effect
+
+       * src/xdisp.c (move_it_in_display_line_to): Fix a logic error made
+       as part of introducing the 'word-wrap-by-category' feature; that
+       error brought back bug#8155.
+
+2020-09-03  João Távora  <joaotavora@gmail.com>
+
+       Unbreak project.el, the GNU Elpa package, for Emacs 26.3
+
+       (Bug#43164)
+
+       * lisp/progmodes/project.el: Bump to 0.5.2
+       (bound-and-true-p): Check that tab-prefix-map is bound before binding.
+
+2020-09-03  Stefan Kangas  <stefankangas@gmail.com>
+
+       * lisp/eshell/esh-mode.el: Remove redundant :group args.
+
+2020-09-03  Stefan Kangas  <stefankangas@gmail.com>
+
+       Support bookmarking Eshell buffers
+
+       * lisp/eshell/esh-mode.el (eshell-bookmark-name)
+       (eshell-bookmark-make-record, eshell-bookmark-jump): New defuns.
+       (eshell-mode): Set up bookmark handler.
+
+2020-09-03  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix bug in dbus.el; do not merge with master
+
+       * lisp/net/dbus.el (dbus-register-property)
+       (dbus-property-handler): Handle properties of the same interface
+       at different object paths properly.  (Bug#43146)
+
+2020-09-03  Stefan Kangas  <stefankangas@gmail.com>
+
+       Cancel timer when world-clock buffer is killed
+
+       * lisp/time.el (world-clock-timer): New variable.
+       (world-clock-cancel-timer): New defun.
+       (world-clock): Add 'world-clock-cancel-timer' to 'kill-buffer-hook'.
+
+2020-09-02  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in mwheel.el
+
+2020-09-02  Stefan Kangas  <stefankangas@gmail.com>
+
+       Simplify mwheel-mode by using alist instead of two variables
+
+       * lisp/mwheel.el (mouse-wheel--remove-bindings): Update call
+       signature to take no arguments.  Doc fix.
+       (mouse-wheel--add-binding): Break out from...
+       (mouse-wheel-mode): ...here.  Simplify by using above functions.
+       (mouse-wheel--installed-bindings-alist): New variable.
+       (mwheel-installed-bindings): Make obsolete.
+       (mwheel-installed-text-scale-bindings): Make obsolete.
+       * test/lisp/mwheel-tests.el (mwheel-test-enable/disable):
+       New test.
+
+2020-09-02  Stefan Kangas  <stefankangas@gmail.com>
+
+       Fix binding mouse wheel with modifiers in buffer area
+
+       * test/lisp/mwheel-tests.el (mwheel-test--create-scroll-keys): Fix
+       binding mouse wheel with modifiers in buffer area, while ignoring them
+       for fringes, margins, etc.  My previous change mistakenly ignored all
+       modifiers in `mouse-wheel-scroll-amount'.
+       * lisp/mwheel.el (mouse-wheel--create-scroll-keys): Fix test to
+       reflect the above.
+
+2020-09-02  Ulf Jasper  <ulf.jasper@web.de>
+
+       Apply icalendar.el patch by Thomas Plass <thunk2@arcor.de>.  Fix 
bug#34315.
+
+       * lisp/calendar/icalendar.el (icalendar--convert-tz-offset): No DST
+         when RDATE is present.
+       * lisp/calendar/icalendar.el (icalendar--parse-vtimezone): Use
+         `icalendar--get-most-recent-observance'.
+       * (icalendar--get-most-recent-observance): New.
+       * (icalendar--decode-isodatetime): Add parameters source-zone, 
result-zone.
+       * (icalendar--decode-isoduration): Fix decoding days.
+       * test/lisp/calendar/icalendar-tests.el (icalendar--decode-isoduration):
+         Add testcases.
+
+2020-09-02  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix bug in dbus.el
+
+       * lisp/net/dbus.el (dbus-register-property)
+       (dbus-property-handler): Handle properties of the same interface
+       at different object paths properly.  (Bug#43146)
+
+2020-09-02  Ulf Jasper  <ulf.jasper@web.de>
+
+       Add unit tests for icalendar.el
+
+       * test/lisp/calendar/icalendar-tests.el (icalendar--parse-vtimezone,
+         icalendar--decode-isodatetime): Add testcases.
+       * test/lisp/calendar/icalendar-tests.el (icalendar--convert-tz-offset,
+         icalendar--decode-isoduration): New.
+
+2020-09-02  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Handle different IMAP server responses to COPY and MOVE
+
+       * lisp/gnus/nnimap.el (nnimap-request-move-article): Need to examine
+       different parts of the result.
+
+2020-09-02  Stefan Kangas  <stefankangas@gmail.com>
+
+       Fix OBOE in flyspell-check-previous-highlighted-word
+
+       * lisp/textmodes/flyspell.el
+       (flyspell-check-previous-highlighted-word): Fix off-by-one error when
+       word is at (point-min).  (Bug#39898)
+
+       Suggested by OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>.
+
+2020-09-02  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in pcmpl-unix.el
+
+       * lisp/pcmpl-unix.el: Use lexical-binding.
+       (pcmpl-ssh-known-hosts, pcmpl-ssh-config-hosts, pcmpl-ssh-hosts):
+       Adjust for lexical-binding.
+
+2020-09-02  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in pcmpl-linux.el and add tests
+
+       * lisp/pcmpl-linux.el: Use lexical-binding.
+       (pcmpl-linux-fs-modules-path-format)
+       (pcmpl-linux-mtab-file): New constants.
+       (pcmpl-linux-fs-types, pcmpl-linux-mounted-directories): Use above
+       new constants.
+       * test/lisp/pcmpl-linux-resources/fs/ext4/.keep:
+       * test/lisp/pcmpl-linux-resources/mtab:
+       * test/lisp/pcmpl-linux-tests.el: New files.
+
+2020-09-01  Andrea Corallo  <akrl@sdf.org>
+
+       Fix `load-filename' for installed instance (bug#43089)
+
+       * src/lread.c (parent_directory): Remove function as now
+       unnecessary.
+       (compute_found_effective): New function.
+       (Fload): Make use of 'compute_found_effective' and fix
+       `load-filename' computation.
+
+2020-09-01  Robert Pluim  <rpluim@gmail.com>
+
+       Strip carriage returns from received password prompts (comint)
+
+       * lisp/comint.el (comint-password-prompt-regexp): Strip carriage
+       returns from the received prompt before matching.  (Bug#43003)
+
+2020-09-01  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Improve documentation for custom :options
+
+       * doc/lispref/customize.texi (Variable Definitions):
+       Mention that re-evaluating a defcustom form doesn't reset custom
+       options (bug#30101).
+
+2020-09-01  Robert Pluim  <rpluim@gmail.com>
+
+       Document 'smtp-auth' in auth-source info
+
+       * doc/misc/auth.texi (Help for users): Mention 'smtp-auth' key,
+       add cross-reference to smtpmail.info.
+       * doc/misc/smtpmail.texi (Authentication): Fix markup.
+
+2020-09-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention C-c C-w in the signature section of the Message manual
+
+       * doc/misc/message.texi (Insertion Variables): Mention the C-c C-w
+       command (bug#43136).  Text suggested by Dan Jacobson.
+
+2020-09-01  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove spurious @ character in smtpmail.texi
+
+       * doc/misc/smtpmail.texi (Authentication): Remove a presumably
+       spurious @ character.
+
+2020-09-01  Stefan Kangas  <stefankangas@gmail.com>
+
+       Fix help message with help-window-select
+
+       * lisp/help.el (help-print-return-message):
+       (help-window-display-message): Recommend 'scroll-up-command' instead
+       of 'scroll-up' when 'help-window-select' is non-nil.  (Bug#43122)
+
+2020-09-01  Andrea Corallo  <akrl@sdf.org>
+
+       Rework native compiled lisp/d lambda list accessor
+
+       * lisp/help.el (help-function-arglist): Logic update for new
+       'Fsubr_native_lambda_list'.
+       * src/data.c (Fsubr_native_dyn_p): Remove.
+       (Fsubr_native_lambda_list): Return t when the input is not a
+       compiled lisp/d subr.
+       (syms_of_data): Update for 'Fsubr_native_dyn_p' removal.
+
+2020-08-31  Andrea Corallo  <akrl@sdf.org>
+
+       * src/lread.c (Fload): Fix for manual eln load.
+
+2020-08-31  Andrea Corallo  <akrl@sdf.org>
+
+       Fix describe function arglist for native compiled lisp/d (bug#42572)
+
+       * lisp/help.el (help-function-arglist): Handle the case of native
+       compiled lisp/d.
+
+       * src/data.c (syms_of_data): Register new subrs.
+       (Fsubr_native_dyn_p, Fsubr_native_lambda_list): New primitives.
+
+       * test/src/comp-tests.el (comp-tests-dynamic-help-arglist): New test.
+
+2020-08-31  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in pong.el
+
+       * lisp/play/pong.el: Use lexical-binding.
+       Remove redundant :group args.
+
+2020-08-31  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Remove obsolete "Wide Characters" section of Gnus manual
+
+       * doc/misc/gnus.texi: This hasn't been valid since 2016.
+
+2020-08-31  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       f20169399d (origin/emacs-27) Fix typo in Introduction to Emacs Lisp
+       7605060d51 Update Elisp Manual reference to which-function-mode
+       29708cbde7 Some precisions to bug handling
+       dddc971f0e CC Mode: Fix processing for when c-multiline-string-start-...
+       4a73fb9668 Fix description of %-constructs in 'mode-line-format'
+
+2020-08-31  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       da4840af12 Adapt reminder-for-release-blocking-bugs
+
+2020-08-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make quoted-printable-encode-region work in multibyte buffers
+
+       * lisp/mail/qp.el (quoted-printable-encode-region): If we're in a
+       multibyte buffer (that has been encoded with some coding system),
+       then get-byte will get the correct byte value.
+
+2020-08-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a new function dom-print
+
+       * doc/lispref/text.texi (Document Object Model): Document it.
+
+       * lisp/dom.el (dom-print): New function.
+
+2020-08-31  Stefan Kangas  <stefankangas@gmail.com>
+
+       * lisp/dired-x.el (dired-omit-mode): Add autoload cookie.
+
+2020-08-31  Michael Albinus  <michael.albinus@gmx.de>
+
+       * .gitlab-ci.yml (test-all): Add lib/*.{h,c}.
+
+2020-08-31  Stefan Kangas  <stefankangas@gmail.com>
+
+       Fix minibuffer default of ephemeral debbugs group
+
+       * lisp/gnus/gnus-group.el (gnus-group--read-bug-ids): Don't read
+       number in "bug-123" as a negative bug ID; they are always positive.
+
+2020-08-31  Stefan Kangas  <stefankangas@gmail.com>
+
+       Fix typo in Introduction to Emacs Lisp
+
+       * doc/lispintro/emacs-lisp-intro.texi (type-of-animal in detail):
+       Remove extraneous parenthesis.
+
+2020-08-31  Alan Third  <alan@idiocy.org>
+
+       * .gitlab-ci.yml (test-all): Change .m to .c for standard C files.
+
+2020-08-31  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * src/alloc.c (live_symbol_holding): Pacify gcc -Wlogical-op.
+
+       * src/lisp.h (lisp_h_XPL, XPL): Remove; unused.
+
+2020-08-31  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Use mark_objects elsewhere too
+
+       * src/alloc.c (mark_vectorlike, mark_face_cache):
+       * src/eval.c (mark_specpdl):
+       * src/fringe.c (mark_fringe_data):
+       * src/keyboard.c (mark_kboards):
+       Use mark_objects instead of doing it by hand.
+
+2020-08-31  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Remove mark_maybe_object
+
+       * src/alloc.c (mark_maybe_object, mark_maybe_objects): Remove.
+       (mark_objects): New function.
+       * src/eval.c (mark_specpdl): Use mark_objects instead of
+       mark_maybe_objects, since the array now has only valid Lisp objects.
+       * src/lisp.h (SAFE_ALLOCA_LISP_EXTRA): When allocating a large
+       array, clear it so that it contains only valid Lisp objects.  This
+       is simpler and safer, and does not hurt performance significantly
+       on my usual benchmark as the code is executed so rarely.
+
+2020-08-31  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Avoid some false matches in mark_maybe_pointer
+
+       This lets Emacs avoid marking some garbage as if it were in use.
+       On one test platform (RHEL 7.8, Intel Xeon Silver 4116) it
+       sped up ‘cd lisp; make compile-always’ by a bit over 1%.
+       * src/alloc.c (live_string_holding, live_cons_holding)
+       (live_symbol_holding, live_large_vector_holding)
+       (live_small_vector_holding):
+       Count only pointers that point to a struct component,
+       or are a tagged pointer to the start of the struct.
+       Exception: for non-bool-vector pseudovectors,
+       count any pointer past the header, since it’s too much
+       of a pain to write code for every pseudovector.
+       (live_vector_pointer): New function.
+
+2020-08-31  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Omit no-longer-needed stack mark_maybe_object
+
+       * src/alloc.c (mark_memory): Do not bother using mark_maybe_object
+       on the stack, since mark_maybe_pointer now marks everything that
+       mark_maybe_object would.
+
+2020-08-31  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix GC bug with Lisp floats and --with-wide-int
+
+       On --with-wide-int platforms where Lisp_Object can be
+       put into non-adjacent registers, mark_maybe_pointer failed
+       to mark a float whose only reference was as a tagged pointer.
+       * src/alloc.c (live_float_holding): New function,
+       a generalization of the old live_float_p.
+       (live_float_p): Use it.
+       (mark_maybe_pointer): Use live_float_holding, not live_float_p.
+
+2020-08-31  Stefan Kangas  <stefankangas@gmail.com>
+
+       Update Elisp Manual reference to which-function-mode
+
+       * doc/lispref/modes.texi (Mode Line Top, Mode Line Variables)
+       Don't refer to obsolete alias for 'which-function-mode'.
+       (Bug#13716)
+
+2020-08-30  Stefan Kangas  <stefankangas@gmail.com>
+
+       Bind 'n' and 'p' in compilation-mode-map
+
+       * lisp/progmodes/compile.el (compilation-mode-map): Bind
+       '(next|previous)-error-no-select' to 'n' and 'p'.  (Bug#41844)
+
+2020-08-30  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in life.el and add tests
+
+       * lisp/play/life.el: Use lexical-binding.
+       (life--tick): Extract from...
+       (life): ...here.
+       (life--max-width, life--max-height): New variables.
+       (life-mode, life-setup): Use above variables.
+
+       * test/lisp/play/life-tests.el: New file.
+
+2020-08-30  Stefan Kangas  <stefankangas@gmail.com>
+
+       Various life.el improvements
+
+       * lisp/play/life.el (life): New defgroup.
+       (life-step-time): New defcustom (lower default from 1 to 0.5).
+       (life): Use above new variable.  Make prefix arguments set step time
+       in tenths of a second instead of whole seconds.
+       (life-expand-plane-if-needed): Rename argument to step-time.
+
+       (life-setup): Fix running `M-x life' with existing buffer.
+
+       (life-patterns): Add three more classic patterns.
+
+2020-08-30  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove some XEmacs compat code from gamegrid.el
+
+       * lisp/play/gamegrid.el (gamegrid-setup-face): Remove XEmacs
+       compat code.
+
+2020-08-30  Stefan Kangas  <stefankangas@gmail.com>
+
+       * lisp/play/tetris.el: Use lexical-binding.
+
+2020-08-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak background colours in shr when there's indentation
+
+       * lisp/net/shr.el (shr-fill-line): Get the background colour right
+       for the indentation, too.
+
+2020-08-30  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Respect :must-match for file types in customization buffers
+
+       * lisp/wid-edit.el (file widget): Add a :match and a :validate
+       function to the 'file widget, to be able to check if the widget
+       value is an existent file, when required (bug#25678).
+
+2020-08-30  João Távora  <joaotavora@gmail.com>
+
+       Place flymake-eldoc-function at the end of eldoc-documentation-functions
+
+       Having it placed in the beginning of that hook meant it was mostly
+       impossible to track the args to a function call while writing it from
+       scratch, since most compilers issue a diagnostic about incorrect
+       number of arguments.
+
+       See bug#43103.
+
+       * lisp/progmodes/flymake.el (flymake-mode): Lower priority of
+       flymake-eldoc-function.
+
+2020-08-30  Michael Albinus  <michael.albinus@gmx.de>
+
+       Some precisions to bug handling
+
+       * admin/admin.el (reminder-for-release-blocking-bugs): Add date to 
subject.
+
+       * admin/notes/bug-triage:
+       * admin/notes/bugtracker: Minor precisions.
+
+2020-08-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make format-prompt interpret a nil default value as "no default"
+
+       * doc/lispref/minibuf.texi (Text from Minibuffer): Document it.
+
+       * lisp/help-fns.el (describe-function): Adjust the caller.
+
+       * lisp/minibuffer.el (format-prompt): Interpret a nil default
+       value as "no default".
+
+2020-08-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix compilation warning in snake.el
+
+       * lisp/play/snake.el (snake-reset-game): Avoid warning about
+       unused variable.
+
+2020-08-30  Michael Albinus  <michael.albinus@gmx.de>
+
+       * .gitlab-ci.yml (test-all): Run only when needed.
+
+2020-08-30  Andrea Corallo  <akrl@sdf.org>
+
+       Store raw documentation during native compilation (bug#42974)
+
+       * lisp/emacs-lisp/comp.el (comp-spill-lap-function)
+       (comp-intern-func-in-ctxt): Use raw documentation.
+
+2020-08-30  Stefan Kangas  <stefankangas@gmail.com>
+
+       Convert manual rmailmm tests to ert
+
+       * test/manual/rmailmm.el: Move from here...
+       * test/lisp/mail/rmailmm-tests.el: ...to here, and convert to ert.
+
+2020-08-29  Stefan Kangas  <stefankangas@gmail.com>
+
+       Convert unsafep tests to ert
+
+       * lisp/emacs-lisp/tcover-unsafep.el: Move from here...
+       * test/lisp/emacs-lisp/unsafep-tests.el: ...to here, and convert to
+       use ert instead of tcover.
+
+2020-08-29  Stefan Kangas  <stefankangas@gmail.com>
+
+       * lisp/play/snake.el: Use lexical-binding.
+
+2020-08-29  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in more tests
+
+       * test/lib-src/emacsclient-tests.el:
+       * test/lisp/emacs-lisp/hierarchy-tests.el:
+       * test/lisp/eshell/eshell-tests.el:
+       * test/lisp/gnus/gnus-util-tests.el:
+       * test/lisp/progmodes/js-tests.el:
+       * test/lisp/textmodes/bibtex-tests.el:
+       * test/src/editfns-tests.el:
+       * test/src/fns-tests.el: Use lexical-binding.
+
+       * test/lisp/emacs-lisp/hierarchy-tests.el
+       (hierarchy-leafs-includes-lonely-roots):
+       * test/src/editfns-tests.el (transpose-test-get-byte-positions):
+       * test/src/fns-tests.el (fns-tests-func-arity):
+       Adjust for lexical-binding.
+
+2020-08-29  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Mark failing fileio test on MS-Windows
+
+       * test/src/fileio-tests.el (fileio-tests--HOME-trailing-slash):
+       Expect failure on MS-Windows.
+
+2020-08-29  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: Fix processing for when c-multiline-string-start-char is a 
character
+
+       * lisp/progmodes/cc-mode.el (c-pps-to-string-delim)
+       (c-multiline-string-check-final-quote): Replace c-clear-char-property by
+       c-clear-syn-tab.
+       (c-multiline-string-check-final-quote): Replace c-put-char-property by
+       c-put-syn-tab.
+
+2020-08-29  Alan Third  <alan@idiocy.org>
+
+       Run GNUstep build test more often
+
+       * .gitlab-ci.yml (test-gnustep): Include more files that may affect
+       the GNUstep build.
+
+2020-08-29  Stefan Kangas  <stefankangas@gmail.com>
+
+       * lisp/mail/mspools.el: Remove redundant :group args.
+
+2020-08-29  Andrea Corallo  <akrl@sdf.org>
+
+       * test/src/comp-tests.el (comp-tests-doc): Update test.
+
+       * lisp/startup.el (command-line): Clean-up logic for new .eln 
disposition.
+
+2020-08-29  Andrea Corallo  <akrl@sdf.org>
+
+       Have .elc files in `load-history' when loading native code (bug#43089)
+
+       * src/lread.c (Fload): Add the corresponding .elc file to
+       `load-history' when loading native code.
+
+       * lisp/subr.el (eval-after-load): Use `load-file-name' instead of
+       `load-true-file-name'.
+
+2020-08-29  João Távora  <joaotavora@gmail.com>
+
+       Prevent ElDoc blinking when eldoc-documentation-enthusiast is used
+
+       This eldoc-documentation-strategy function didn't always obey protocol
+       since it returned nil sometimes, which the eldoc engine took it as a
+       hint for the "old" protocol to clear the echo area.
+
+       * lisp/emacs-lisp/eldoc.el (eldoc-documentation-enthusiast):
+       Return t.
+       (Version): Bump to 1.9.0
+
+2020-08-29  Andrea Corallo  <akrl@sdf.org>
+
+       Back using `load-file-name' when reading '#$' (bug#42961)
+
+       * src/lread.c (read1, read_list): Use again load-file-name when
+       reading '#$'.
+       (syms_of_lread): Update `load-file-name' doc.
+
+2020-08-29  Ulrich Müller  <ulm@gentoo.org>
+
+       Delete duplicate definition for koi8-u coding system
+
+       * lisp/language/cyrillic.el (koi8-u): Delete duplicate definition.
+
+2020-08-29  Mattias Engdegård  <mattiase@acm.org>
+
+       * test/lisp/emacs-lisp/rx-tests.el: Improve test coverage.
+
+2020-08-29  Andrea Corallo  <akrl@sdf.org>
+
+       * src/lread.c (Fload): Bind load-file-name to the .elc filename.
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-08-29  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix description of %-constructs in 'mode-line-format'
+
+       * doc/lispref/modes.texi (%-Constructs): Document %@ and remove
+       %M, which is no longer supported.   (Bug#43092)
+
+2020-08-29  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Revert recent expand-file-name changes if DOS_NT
+
+       * src/fileio.c (Fexpand_file_name): Restore pre-August-26
+       behavior, if DOS_NT.  This should fix the recently-introduced
+       expand-file-name bugs on DOS_NT (Bug#26911).
+
+2020-08-29  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * src/fileio.c (Fexpand_file_name): Omit unnecessary assignment.
+
+2020-08-29  Andrew G Cohen  <cohen@andy.bu.edu>
+
+       Allow direct choice of smtp authentication method
+
+       * lisp/mail/smtpmail.el (smtpmail-try-auth-methods): Let the
+       authorization credentials have an entry with key :smtp-auth containing
+       a preferred authentication mechanism.
+
+2020-08-28  Alan Third  <alan@idiocy.org>
+
+       Fix Objective-C C99 build problem
+
+       * configure.ac (NS_IMPL_GNUSTEP): GCC appears to need to be told to
+       use C99 when compiling Objective-C.
+
+2020-08-28  Alan Third  <alan@idiocy.org>
+
+       Add GNUstep build to Gitlab CI/CD
+
+       * .gitlab-ci.yml (test-gnustep): New test target.
+
+2020-08-28  Daniel Martín  <mardani29@yahoo.es>
+
+       Add support for parsing column numbers in Visual Studio messages
+
+       * lisp/progmodes/compile.el (compilation-error-regexp-alist-alist):
+       Extend regular expression to match optional column numbers.
+       *
+       test/lisp/progmodes/compile-tests.el (compile-tests--test-regexps-data):
+       Add a test.
+       * test/lisp/progmodes/compile-tests.el (compile-test-error-regexps):
+       Update the total number of compilation errors in a test.
+       * etc/compilation.txt: Update compilation.txt with the newly supported
+       message format.
+       * etc/NEWS: Advertise the feature.
+
+2020-08-28  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix Bug#43052
+
+       * test/lisp/net/tramp-tests.el (tramp-test04-substitute-in-file-name):
+       Make user name unique.  (Bug#43052)
+
+2020-08-28  Stefan Kangas  <stefankangas@gmail.com>
+
+       Add commands to run shell commands in project root
+
+       * lisp/progmodes/project.el (project-async-shell-command)
+       (project-shell-command): New commands to run 'async-shell-command'
+       and 'shell-command' in project's root directory.
+       (project-prefix-map): Bind commands to '!' and '&'.
+       * doc/emacs/maintaining.texi (Project File Commands): Document the
+       new commands.
+       * etc/NEWS: Announce the new commands.
+
+2020-08-28  Stefan Kangas  <stefankangas@gmail.com>
+
+       Make XEmacs compat aliases obsolete in warnings.el
+
+       * lisp/emacs-lisp/warnings.el (display-warning-minimum-level)
+       (log-warning-minimum-level): Make XEmacs compat aliases into obsolete
+       aliases for 'warning-minimum-level' and 'warning-minimum-log-level'.
+
+2020-08-28  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in warnings.el and add tests
+
+       * lisp/emacs-lisp/warnings.el: Use lexical-binding.
+       Remove redundant :group args.
+
+       * test/lisp/emacs-lisp/warnings-tests.el: New file.
+
+2020-08-28  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       New eieio-persistent-make-instance generic function
+
+       This allows override of the read process for eieio-persistent objects,
+       providing the possibility of matching read/write customization for
+       eieio-persistent subclasses.
+
+       * lisp/emacs-lisp/eieio-base.el (eieio-persistent-make-instance): New
+       generic function for constructing instances from object data written
+       to disk. Previously known as eieio-persistent-convert-list-to-object.
+
+2020-08-28  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Remove redundant slot validation in eieio-persistent-read
+
+       Actual object creation (in `make-instance') will later run all slot
+       values through cl-typep, which does a better job of validation. This
+       validation is redundant, and slows the read process down.
+
+       * lisp/emacs-lisp/eieio-base.el (eieio-persistent-fix-value): Rename
+       from `eieio-persistent-validate/fix-slot-value', as we no longer
+       validate, and we don't care about the slot definition.
+       (eieio-persistent-slot-type-is-class-p): Delete function.
+       (eieio-persistent-convert-list-to-object): Still call
+       `eieio--full-class-object', to trigger an autoload if necessary, but
+       discard the return value.
+
+2020-08-28  Harald Jörg  <haj@posteo.de>
+
+       Fix indent-region for identifiers with underscores in cperl-mode
+
+        * lisp/progmodes/cperl-mode.el (cperl-fix-line-spacing): Fix Bug#18985.
+        Hash keys or function names starting with a Perl keyword followed
+        by an underscore (as in "for_me" are no longer split into two words
+        by M-x indent-region.
+
+2020-08-28  Stefan Kangas  <stefankangas@gmail.com>
+
+       * lisp/mwheel.el: Improve package description.
+
+2020-08-28  Mattias Engdegård  <mattiase@acm.org>
+
+       * test/src/fileio-tests.el: Preserve HOME when a test fails
+
+2020-08-28  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix most of fileio-tests on MS-Windows
+
+       * test/src/fileio-tests.el (fileio-tests--HOME-trailing-slash)
+       (fileio-tests--expand-file-name-trailing-slash): Account for drive
+       letters in MS-Windows/MS-DOS file names.  (Bug#26911)
+
+2020-08-27  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix recently-introduced expand-file-name bug
+
+       The bug was that (expand-file-name "~") returned something
+       like "/home/eggert/" instead of "/home/eggert".
+       Problem reported by Mattias Engdegård (Bug#26911#27).
+       * src/fileio.c (Fexpand_file_name): When concatenating NEWDIR to
+       NM, instead of stripping trailing slashes from NEWDIR (which can
+       turn non-symlinks into symlinks), strip leading slashes from NM.
+       This also simplifies the code by removing no-longer-needed DOS_NT
+       special-casing.  Also, remove an unnecessary ‘target[length] = 0;’
+       as that byte will be overwritten by the next memcpy anyway.
+       * test/src/fileio-tests.el (fileio-tests--HOME-trailing-slash):
+       New test.
+
+2020-08-27  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Set Gnus server 'closed status in gnus-close-server
+
+       * lisp/gnus/gnus-int.el (gnus-close-server): Set 'closed status here.
+       * lisp/gnus/gnus-group.el (gnus-group-suspend): Not here.
+
+2020-08-27  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Switch Gnus D-Bus signal from :session to :system
+
+       * lisp/gnus/gnus-dbus.el (gnus-dbus-register-sleep-signal): Apparently
+       this needs to be :system -- perhaps because PrepareForSleep is a
+       system-level event?
+
+2020-08-27  Michael Albinus  <michael.albinus@gmx.de>
+
+       Adapt tramp-tests
+
+       * test/lisp/net/tramp-tests.el (tramp-test05-expand-file-name)
+       (tramp-test05-expand-file-name-relative): Adapt tests.
+
+2020-08-27  Michael Albinus  <michael.albinus@gmx.de>
+
+       Adapt tramp-tests.el, don't merge with master
+
+       * test/lisp/net/tramp-tests.el (tramp-test05-expand-file-name)
+       (tramp-test05-expand-file-name-relative): Adapt tests.
+       (tramp--test-emacs28-p): New defun.
+
+2020-08-27  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Keep the user theme in sync when marking a variable as set
+
+       * lisp/custom.el (customize-mark-as-set): Keep the user theme in sync
+       even if the new value of the variable is the saved-value or the
+       standard-value.  If we don't do this, custom themes might end up
+       stepping over the user preferences in a session (bug#28904).
+
+2020-08-27  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make minibuf-eldef respect minibuffer-default-prompt-format
+
+       * lisp/minibuf-eldef.el (minibuffer-default--in-prompt-regexps):
+       Take minibuffer-default-prompt-format into account.
+
+2020-08-27  Stefan Kangas  <stefankangas@gmail.com>
+
+       Substitute command keys in display-local-help
+
+       * lisp/help-at-pt.el (display-local-help): Pass 'help-echo' property
+       through 'substitute-command-keys' before displaying to be consistent
+       with tooltips.  (Bug#37628)
+
+       This was discussed in:
+       https://lists.gnu.org/archive/html/emacs-devel/2019-10/msg00090.html
+
+2020-08-27  Stephen Berman  <stephen.berman@gmx.net>
+
+       Prevent spurious tabs by RET in todo-edit-mode (bug#43068)
+
+       * lisp/calendar/todo-mode.el (todo-key-bindings-t)
+       (todo-edit-mode-map): Remove remapping of `newline' to
+       `newline-and-indent'.
+       (todo-modes-set-1): Remove local setting of `indent-line-function'.
+       (todo-edit-mode): Locally set `indent-line-function' to `todo-indent'.
+
+       * test/lisp/calendar/todo-mode-tests.el (todo-test-move-item05):
+       Prevent interactive test failure.  (Until the addition of testcat4
+       to todo-test-1.todo, the test passed by chance, since testcat3 is
+       empty and has no archived items.)
+       (todo-test-edit-item-date-month): Refer to bug number.
+       (todo-test-multiline-item-indentation-1)
+       (todo-test-multiline-item-indentation-2)
+       (todo-test-multiline-item-indentation-3): New tests.
+
+       * test/lisp/calendar/todo-mode-resources/todo-test-1.todo: Remove
+       spurious tabs from testcat1.
+
+2020-08-27  Stefan Kangas  <stefankangas@gmail.com>
+
+       Minor clean up in flyspell.el
+
+       * lisp/textmodes/flyspell.el (flyspell-buffers): Declare obsolete.
+       (flyspell--prev-meta-tab-binding): Doc fix.
+
+2020-08-27  Tino Calancha  <tino.calancha@gmail.com>
+
+       dired: Show broken/circular links w/ different face
+
+       * lisp/dired.el (dired-broken-symlink): New face.
+       (dired-font-lock-keywords):
+       Use it for broken/circular links (Bug#39145).
+
+       * etc/NEWS (Changes in Specialized Modes and Packages in Emacs 28.1):
+       Announce this change.
+
+2020-08-27  Michael Albinus  <michael.albinus@gmx.de>
+
+       Adapt reminder-for-release-blocking-bugs
+
+       * admin/admin.el (reminder-for-release-blocking-bugs):
+       Require `debbugs-gnu' also in `interactive' form.
+
+       * admin/release-process: Rename RELEASE-CRITICAL to RELEASE-BLOCKING.
+       Adapt Emacs version.  Describe `reminder-for-release-blocking-bugs'.
+
+2020-08-27  Stefan Kangas  <stefankangas@gmail.com>
+
+       Only show flyspell welcome message interactively
+
+       * lisp/textmodes/flyspell.el (flyspell-mode): Only show welcome
+       message when called interactively.  (Bug#43065)
+
+2020-08-27  Stefan Kangas  <stefankangas@gmail.com>
+
+       Add ASTEC-X issue to PROBLEMS
+
+       * etc/PROBLEMS: Mention problem with multiple monitors on proprietary
+       X Server ASTEC-X.  (Bug#36779)
+
+2020-08-27  Stefan Kangas  <stefankangas@gmail.com>
+
+       Fix flyspell welcome message
+
+       * lisp/textmodes/flyspell.el (flyspell-mode, flyspell-mode-on):
+       Fix showing welcome message when `flyspell-issue-welcome-flag' and
+       `flyspell-issue-message-flag' are both non-nil.  (Bug#43065)
+
+2020-08-27  Andrew G Cohen  <cohen@andy.bu.edu>
+
+       Allow a function for the :secret in a plstore
+
+       * lisp/auth-source.el (auth-source-plstore-search): If the :secret
+       value is a function, call it on plist to obtain the real password.
+
+2020-08-27  Stefan Kangas  <stefankangas@gmail.com>
+
+       Refer to correct mouse button in flyspell message
+
+       * lisp/textmodes/flyspell.el (make-flyspell-overlay)
+       (flyspell-mode-on): Refer to mouse-3 in help messages when the
+       variable 'flyspell-use-mouse-3-for-menu' is non-nil.  (Bug#11680)
+
+2020-08-27  Stefan Kangas  <stefankangas@gmail.com>
+
+       Signal error on Hunspell installation problem
+
+       * lisp/textmodes/ispell.el (ispell-find-hunspell-dictionaries):
+       Signal user-error when Hunspell warns that it "Can't open affix or
+       dictionary files", and propagate this message.  (Bug#25825)
+
+2020-08-27  Protesilaos Stavrou  <info@protesilaos.com>
+
+       Add themes modus-operandi and modus-vivendi
+
+       * etc/themes/modus-operandi-theme.el:
+       * etc/themes/modus-vivendi-theme.el: New themes.  (Bug#43019)
+
+2020-08-27  Stefan Kangas  <stefankangas@gmail.com>
+
+       Sort Info index completions alphabetically
+
+       * lisp/info.el (Info-complete-menu-item): Sort the list of completions
+       alphabetically using 'nreverse'.  This makes no difference for Emacs
+       but helps third-party completion frameworks such as Ivy.  (Bug#38614)
+
+       Suggested by Howard Melman <hmelman@gmail.com>.
+
+2020-08-26  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Unbreak dired-do-find-regexp in Emacs 26
+
+       * lisp/progmodes/xref.el (xref--show-xrefs):
+       Support the old convention (bug#42967).
+
+2020-08-26  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Unbreak xref-goto-xref in Emacs 26
+
+       * lisp/progmodes/xref.el (xref-goto-xref):
+       Call next-error-found only if it's defined (bug#42981).
+
+2020-08-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix expand-file-name symlink-to-dir bug
+
+       Problem reported by Yegor Timoshenko (Bug#26911),
+       and I ran into it myself recently in normal-top-level.
+       * doc/lispref/files.texi (File Name Expansion), etc/NEWS: Mention this.
+       * src/fileio.c (Fexpand_file_name): Expand "/a/b/." to "/a/b/" not
+       "/a/b", to avoid misinterpreting a symlink "/a/b".  Similarly,
+       expand "/a/b/c/.." to "/a/b/" not "/a/b".
+       * test/lisp/net/tramp-tests.el (tramp-test05-expand-file-name):
+       Adjust to match new behavior.
+       (tramp-test05-expand-file-name-relative): This test now succeeds,
+       at least on Fedora 31.
+       * test/src/fileio-tests.el:
+       (fileio-tests--expand-file-name-trailing-slash) New test.
+
+2020-08-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix PWD startup checking with symlinks
+
+       * lisp/startup.el (normal-top-level): Do not put "." after "/";
+       it’s not needed and with current file-name-as-directory it does
+       the wrong thing if PWD is a symlink.
+
+2020-08-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * lisp/files.el (insert-directory): Simplify (if ... X X) to X.
+
+2020-08-26  Andrea Corallo  <akrl@sdf.org>
+
+       Merge branch 'add_driver_option' into HEAD
+
+2020-08-26  Andrea Corallo  <akrl@sdf.org>
+
+       Init gcc_jit_context_add_driver_option as optional
+
+       * src/comp.c (init_gccjit_functions): Use LOAD_DLL_FN_OPT to init
+       'gcc_jit_context_add_driver_option' as this is optional.
+
+2020-08-26  Andrea Corallo  <akrl@sdf.org>
+
+       Rename comp-native-driver-options-available-p
+
+       * src/comp.c (Fcomp_native_driver_options_effective_p)
+       Rename plus better doc.
+       (add_driver_options, syms_of_comp): Rename
+       `comp-native-driver-options-available-p' into
+       comp-native-driver-options-effective-p.
+
+2020-08-26  Andrea Corallo  <akrl@sdf.org>
+
+       * src/comp.c (add_driver_options): Fix missing condition + clean-up 
pragma
+
+2020-08-26  Andreas Fuchs  <asf@boinkor.net>
+
+       * Add 'comp-native-driver-options-available-p'
+
+       * src/comp.c (comp-native-driver-options-available-p): New
+         function that returns t if driver options can be used.
+
+2020-08-26  Andrea Corallo  <akrl@sdf.org>
+
+       Improve 'add_driver_options'
+
+       * src/comp.c (add_driver_options): Use
+       load_gccjit_if_necessary and FOR_EACH_TAIL + GNU style.
+
+2020-08-26  Andreas Fuchs  <asf@boinkor.net>
+
+       Fix windows NT handling for [...]_add_driver_options
+
+       * src/comp.c (add_driver_options): Instead of conditionalizing on
+       the wrong preprocessor flag, now use the right one:
+       'LIBGCCJIT_HAVE_gcc_jit_context_add_driver_option'.  Also perform
+       the driver-option-adding step on win NT, but only if the function
+       is non-NULL.  Make the function declaration for add_driver_options
+       non-old-style.
+
+2020-08-26  Andreas Fuchs  <asf@boinkor.net>
+
+       Set native driver options in async compiles, also
+
+       Ensure the variable is set to the value that was customized in the
+       parent process in child compilation processes, also.
+
+2020-08-26  Stefan Kangas  <stefankangas@gmail.com>
+
+       Sync latest SKK-JISYO.L
+
+       * leim/SKK-DIC/SKK-JISYO.L: Sync to current upstream version.
+
+2020-08-26  leo  <gnu_lists@halloleo.hailmail.net>  (tiny change)
+
+       Allow disabling double buffering at build time
+
+       * configure.ac: Allow disabling double buffering (bug#32032).
+
+2020-08-26  Robert Pluim  <rpluim@gmail.com>
+
+       Allow directories to be called .el in -add-subdirs-to-load-path
+
+       * lisp/startup.el (normal-top-level-add-subdirs-to-load-path):
+       Allow the directories to be called "<foo>.el" (bug#32266).
+
+2020-08-26  Glenn Morris  <rgm@gnu.org>
+
+       Fix doc-view problem with file names with spaces in them
+
+       * lisp/doc-view.el (doc-view-get-bounding-box): Don't bug out on
+       file names with spaces in them (bug#33344).
+
+2020-08-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Use format-prompt a couple of places
+
+       * lisp/ps-print.el (ps-print-preprint):
+       * lisp/help-fns.el (describe-function): Use `format-prompt'
+       (bug#12443).
+
+2020-08-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Implement a way to customize "default" values
+
+       * doc/lispref/minibuf.texi (Text from Minibuffer): Document them.
+
+       * lisp/minibuffer.el (format-prompt): New function (bug#12443).
+       (minibuffer-default-prompt-format): New variable.
+
+2020-08-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make the epa key display slightly more informative
+
+       * lisp/epa.el (epa--button-key-text): Say what the validity
+       characters output by GPG mean (bug#34726).
+
+2020-08-26  Štěpán Němec  <stepnem@gmail.com>
+
+       Document ispell comment/string checking commands in the user manual
+
+       * doc/emacs/fixit.texi (Spelling): Mention
+       'ispell-comments-and-strings' and 'ispell-comment-or-string-at-point'.
+       (bug#6411)
+
+2020-08-26  Štěpán Němec  <stepnem@gmail.com>
+
+       ispell: Commands to check comments or strings at point or in region
+
+       * lisp/textmodes/ispell.el (ispell-comments-and-strings): Accept START
+       and END arguments, defaulting to active region in interactive calls.
+       (ispell-comment-or-string-at-point): New command. (bug#6411)
+
+2020-08-26  Noam Postavsky  <npostavs@gmail.com>
+
+       Don't recommend redefining auto-save filename functions
+
+       * doc/lispref/backups.texi (Auto-Saving): Document
+       auto-save-file-name-transforms.
+       * lisp/files.el (make-auto-save-file-name)
+       (auto-save-file-name-p): Remove suggestion to redefine for
+       customization (bug#34911).
+
+2020-08-26  Phil Sainty  <psainty@orcon.net.nz>
+
+       term.el: Use correct exit status in suggested dir-tracking functions
+
+       * lisp/term.el: Make some of the examples better (bug#43055).
+
+2020-08-26  Brian Leung  <leungbk@mailfence.com>  (tiny change)
+
+       eshell: Remove unnecessary check in em-hist
+
+       * lisp/eshell/em-hist.el
+       (eshell-previous-matching-input-string-position): Both before and
+       within the while loop, n is always smaller than n (bug#43056).
+
+2020-08-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove side-effect-free markup for assoc-default
+
+       * lisp/subr.el (assoc-default): assoc-default isn't
+       side-effect-free, because it takes a :test parameter that can do
+       anything (bug#37943).
+
+2020-08-26  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix lexical misunderstandings in gnus-icalendar-tests.el (bug#39782)
+
+       * test/lisp/gnus/gnus-icalendar-tests.el:
+       (icalendar-tests--get-ical-event): Remove unused function accidentally
+       copy-pasted from icalendar-tests.el.
+       (gnus-icalendar-parse, gnus-icalendary-byday):
+       Remove unintended initial newlines.
+       Duplicate comma-escaping backslashes so that they have intended
+       effects, conforming to RFC 5545.
+       Remove ineffective comma-escaping backslashes where not intended.
+
+2020-08-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       regex-emacs: copy less when reallocating
+
+       * src/regex-emacs.c (GROW_FAIL_STACK): Copy just the
+       occupied stack slots, as the rest are garbage.
+
+2020-08-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       regex-emacs: fix leak on memory allocation failure
+
+       * src/regex-emacs.c (ENSURE_FAIL_STACK): If the failure
+       stack cannot be grown, free locally-allocated storage
+       before returning.
+
+2020-08-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       regex-emacs: subscript-check register numbers
+
+       * src/regex-emacs.c (PUSH_FAILURE_REG, POP_FAILURE_REG_OR_COUNT)
+       (re_match_2_internal): Add some easserts for subscript checking.
+
+2020-08-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       regex-emacs: omit regstart tests and regend set
+
+       * src/regex-emacs.c (PUSH_FAILURE_REG, POP_FAILURE_REG_OR_COUNT)
+       (re_match_2_internal): Add some assertions that regstart
+       is set whenever regend is.
+       (re_match_2_internal): Omit two unnecessary REG_UNSET (regstart ...)s
+       and one unnecessary assignment to regend.
+
+2020-08-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       regex-emacs omit allocation of 3 slots
+
+       * src/regex-emacs.c (re_match_2_internal): Avoid
+       unnecessary allocation of REGEND[0], BEST_REGSTART[0],
+       BEST_REGEND[0].
+
+2020-08-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       regex-emacs omit POS runtime check
+
+       * src/regex-emacs.c (re_match_2_internal): Replace unnecessary
+       runtime check of POS with some eassumes.
+
+2020-08-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix gpg2-related test failures on RHEL 7.8
+
+       * test/lisp/gnus/mml-sec-tests.el (test-conf)
+       (mml-secure-en-decrypt-passphrase-no-cache-openpgp-todo)
+       (mml-secure-run-tests-with-gpg2):
+       Use epg-find-configuration instead of the obsolescent
+       epg-configuration.  This fixes test failures on RHEL 7.8,
+       where ‘gpg’ and ‘gpg2’ are both 2.0.22.
+
+2020-08-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       mml-secure-en-decrypt-sign-1-2-double is unstable
+
+       * test/lisp/gnus/mml-sec-tests.el:
+       (mml-secure-en-decrypt-sign-1-2-double): Mark this as unstable.
+
+2020-08-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from Gnulib
+
+       This incorporates:
+       2020-08-25 verify: Avoid warnings when assume(0) is used
+       * lib/verify.h: Copy from Gnulib.
+
+2020-08-26  Stefan Kangas  <stefankangas@gmail.com>
+
+       Add package prefix to jsonrpc defconst
+
+       * lisp/jsonrpc.el (jsonrpc-default-request-timeout): Rename from
+       'jrpc-default-request-timeout'.
+       (jrpc-default-request-timeout): Make into obsolete variable alias
+       for 'jsonrpc-default-request-timeout'.  (Bug#40054)
+
+2020-08-25  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Omit "V" at the start of DEFVAR_BOOL vars
+
+       Problem noted by Stefan Monnier in:
+       https://lists.gnu.org/r/emacs-devel/2020-08/msg00846.html
+       * src/font.c (xft_ignore_color_fonts):
+       * src/syntax.c (comment_end_can_be_escaped):
+       * src/xdisp.c (word_wrap_by_category, display_fill_column_indicator):
+       Rename these DEFVAR_BOOL variables to avoid the initial "V"
+       that wrongly suggests that they are Lisp_Object variables.
+       All uses changed.
+
+2020-08-25  Daniel Colascione  <dancol@dancol.org>
+
+       Add undefine keyword to make-mode
+
+       * lisp/progmodes/make-mode.el (makefile-gmake-statements): Add
+       "undefine" to the list of gmake keywords
+
+2020-08-25  Stefan Kangas  <stefankangas@gmail.com>
+
+       Add "Delete" submenu to Dired "Operate" menu
+
+       * lisp/dired.el (dired-mode-map): Add "Delete" submenu to "Operate"
+       menu with an entry for 'dired-do-flagged-delete'.  (Bug#41524)
+
+2020-08-25  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Add basic D-Bus integration to Gnus
+
+       * lisp/gnus/gnus-dbus.el: New library, registering a signal that
+       closes all Gnus servers when the system is going to sleep.
+       * lisp/gnus/gnus-start.el: Check new option
+       `gnus-dbus-close-on-sleep', and register the appropriate D-Bus signal
+       if it is non-nil.
+       * lisp/gnus/gnus.el: New gnus-dbus customization group.
+       * doc/misc/gnus.texi: Document.
+
+2020-08-25  Štěpán Němec  <stepnem@gmail.com>
+
+       Preserve setf semantics in 'substring', 'cons', 'logand' expanders
+
+       * doc/lispref/variables.texi (Adding Generalized Variables): Fix 
example.
+       * lisp/emacs-lisp/cl-lib.el (substring)
+       * lisp/emacs-lisp/gv.el (cons, logand): Return the value being
+       assigned, as specified for 'setf'.  (bug#35546)
+
+2020-08-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak the file/buffer comparison from previous save-some-buffers change
+
+       * lisp/files.el (save-some-buffers): Relax the "similarity" regexp
+       from the previous regexp: Don't show both file and buffer names if
+       the file is /tmp/foo and the buffer name is foo<zot>.
+
+2020-08-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix problem with folded Gcc headers in Gnus
+
+       * lisp/gnus/gnus-msg.el (gnus-inews-do-gcc): Tokenize the gcc
+       header properly (there may be newlines and tabs in the separators)
+       (bug#43036).
+
+2020-08-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Possibly mention both file and buffer names in save-some-buffers
+
+       * lisp/files.el (save-some-buffers): If the file and buffer names
+       are dissimilar, mention both their names (bug#8399).
+
+2020-08-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't bug out in gnus-icalendar when there no recurring event
+
+       * lisp/gnus/gnus-icalendar.el
+       (gnus-icalendar-event:recurring-days): Fix previous patch
+       (bug#43038) -- don't bug out when there's no recurring event.
+
+2020-08-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       * admin/admin.el (reminder-for-release-blocking-bugs): New command.
+
+2020-08-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       remove-overlays doc clarification
+
+       * lisp/subr.el (remove-overlays): Doc fix (bug#13648).
+
+2020-08-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Doc fix for copy-directory
+
+       * lisp/files.el (copy-directory): PARENTS is no longer the last
+       argument.
+
+2020-08-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       Merge from origin/emacs-27
+
+       44104a607a Fix error in GMP test
+       e26e63444d Add Feature testing for Windows binaries
+       4e2caef384 ; * src/character.c (str_as_multibyte): Fix the commentary.
+       d3a4ce8420 Revert "; * etc/NEWS: Remove temporary note on documentati...
+       16f00e36dc * admin/admin.el (set-version): Trap yet another NEWS error.
+       121be3e118 ; * etc/NEWS: Remove temporary note on documentation.  (Bu...
+       5fcb97dabd Fix cond jump table compilation (bug#42919)
+
+2020-08-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Extend background colours in shr
+
+       * lisp/net/shr.el (shr-colorize-region): Extend backgrounds to the
+       end (bug#43031).  This avoid ragged edges to the right when, for
+       instance, the <body> has a bgcolor.
+       (shr-face-background): Ditto.
+
+2020-08-25  Stephen Berman  <stephen.berman@gmx.net>
+
+       Tweak how "u" works in Info buffers when scroll-conservatively is set
+
+       * lisp/info.el (Info-up): If scroll-conservatively is non-zero and
+       less than 101, display as much of the superior node above the
+       target line as possible (Bug#13690).
+
+2020-08-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make shadowing warning in describe_map less confusing
+
+       * src/keymap.c (describe_map): A binding may be shadowed by
+       something else than a mode (bug#14086) (just a `define-key'
+       works), so don't say that it's a mode that shadows it.
+
+2020-08-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert previous hideshow commit
+
+       Hideshow has defaults that are overridden if we look for derived modes
+       in hs-special-modes-alist.  For instance, in lisp-interaction-mode
+       we'll choose a lookup based on parent modes, and that overrides the
+       default (bug#43032).
+
+       This reverts a415179b56f022f50138f55d231070e3d1b00697.
+
+2020-08-25  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from Gnulib
+
+       This incorporates:
+       * lib/diffseq.h, m4/inttypes.m4: Copy from Gnulib.
+       * m4/gnulib-comp.m4: Regenerate.
+
+2020-08-24  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Fix error in GMP test
+
+       * etc/w32-feature.el: Update to use system-configuration-features for
+         GMP test.
+
+2020-08-24  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Add Feature testing for Windows binaries
+
+       * etc/w32-feature.el: New file
+
+2020-08-24  Paul Eggert  <eggert@cs.ucla.edu>
+
+       replace-buffer-contents cleanups
+
+       * src/editfns.c (NOTE_DELETE, NOTE_INSERT): Avoid unnecessary parens.
+       (Freplace_buffer_contents): Check args before returning results.
+       Avoid integer overflow when computing too_expensive, and work even
+       if MAX-COSTS is bignum.  Call alloca and/or malloc just once, not
+       three times.
+       (set_bit, bit_is_set): Simplify micro-optimization by using eassume.
+
+2020-08-24  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix replace-region-contents performance bug
+
+       * src/editfns.c (rbc_quitcounter): Remove; the quitcounter
+       is now part of the context.
+       (EXTRA_CONTEXT_FIELDS): Remove unused member early_abort_tests.
+       Add jmp, quitcounter.
+       (Freplace_buffer_contents): Use setjmp/longjmp to recover from
+       a compareseq that runs too long.  Omit unnecessary rarely_quit
+       call.
+       (buffer_chars_equal): Occasionally check for early abort and
+       longjmp out if so (Bug#43016).
+
+2020-08-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify sorting order by file-backup-file-names
+
+       * doc/lispref/backups.texi (Backup Names): Ditto.
+
+       * lisp/files.el (file-backup-file-names): Clarify sorting order.
+
+2020-08-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Rewrite the epa key interface to use buttons instead of widgets
+
+       * lisp/epa.el (epa-font-lock-keywords): Removed.
+       (epa-key-list-mode-map): Bind tab/backtab to button navigation.
+       (epa-key): Remove widget.
+       (epa--button-key-text): Return the propertized text instead of
+       return a widget text.
+       (epa-key-list-mode): Don't use font locking; everything is output
+       as it should be.
+       (epa--insert-keys): Rewrite to just output the data instead of
+       widgetising.
+       (epa--select-keys): Insert buttons instead of widgets.
+
+2020-08-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix error when loading a new, non-existent foo.gpg file
+
+       * lisp/epa-file.el (epa-file-insert-file-contents): Propagate the
+       correct error upwards (bug introduced by fixing bug#3829, and
+       messing up where the `when' form ended).
+       Reported by "Herbert J. Skuhra" <herbert@gojira.at>.
+
+2020-08-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Document file-backup-file-names
+
+       * doc/lispref/backups.texi (Backup Names): Document
+       file-backup-file-names.
+
+2020-08-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Extend the default value in dired-diff to all the backup files
+
+       * lisp/dired-aux.el (dired-diff): When diffing files with backup
+       files, put all the backup files into the defaults so that they can
+       be reached with `M-n' from `read-file-name' (bug#24089).
+
+2020-08-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a new function 'file-backup-file-names'
+
+       * lisp/files.el (file-backup-file-names): New function (bug#24089).
+       (file-newest-backup): Use it.
+
+2020-08-24  Noam Postavsky  <npostavs@users.sourceforge.net>
+
+       Fix inferior octave single-quote font lock
+
+       * lisp/progmodes/octave.el (octave-mode-syntax-table): Fix
+       fontification of single quotes in inferior octave mode (bug#25517).
+
+       It looks like the problem is that octave-mode-syntax-table sets single
+       quotes as punctuation even though GNU Octave's manual says single quotes
+       are string syntax [1].
+
+       [1]:
+       https://www.gnu.org/software/octave/doc/interpreter/String-Objects.html
+
+2020-08-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Have gnutls_symmetric cache the results from Fgnutls_ciphers
+
+       * src/gnutls.c (gnutls_symmetric): Cache the results from
+       Fgnutls_ciphers, since that function isn't very fast (bug#42998).
+       (syms_of_gnutls): Initialize cache variable.
+
+2020-08-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Explain what C-h t means in the preface
+
+       * doc/emacs/emacs.texi (Top): Explain what C-h t means (since this
+       section is for people who haven't even used the tutorial) (bug#42982).
+
+2020-08-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Change how #:uninterned symbols are font-locked in Lisp mode
+
+       * lisp/emacs-lisp/lisp-mode.el (lisp-fdefs): Font-lock
+       #:uninterned symbols as a single entity instead of #: and
+       uninterned separately (bug#43001).
+
+2020-08-24  Michael Albinus  <michael.albinus@gmx.de>
+
+       Add sanity check in tramp-sh-get-signal-strings
+
+       * lisp/net/tramp-sh.el (tramp-sh-get-signal-strings): Add sanity check.
+
+       * test/lisp/net/tramp-tests.el (tramp-test28-process-file):
+       Remove instrumentation.
+       (tramp--test--deftest-direct-async-process): Adapt docstring.
+       (tramp--test-windows-nt-p, tramp--test-windows-nt-and-batch-p):
+       Rename from `tramp--test-windows-nt', 
`tramp--test-windows-nt-and-batch'.
+
+2020-08-24  Stefan Kangas  <stefankangas@gmail.com>
+
+       Avoid some uses of obsolete function interactive-p
+
+       * doc/lispref/help.texi (Accessing Documentation):
+       * lisp/cedet/data-debug.el:
+       * lisp/emacs-lisp/edebug.el (edebug-wrap-def-body):
+       * lisp/simple.el (append-next-kill):
+       * test/manual/cedet/cedet-utests.el (cedet-utest, pulse-test):
+       * test/manual/cedet/semantic-tests.el (semantic-lex-spp-write-utest)
+       (semantic-symref-test-count-hits-in-tag): Use 'called-interactively-p'
+       instead of obsolete function 'interactive-p'.
+
+2020-08-24  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove many items obsolete since Emacs 23.2 and 23.3
+
+       * lisp/allout.el (allout-init):
+       * lisp/emacs-lisp/shadow.el (shadows-compare-text-p):
+       * lisp/ffap.el (ffap-version):
+       * lisp/filecache.el (file-cache-choose-completion):
+       * lisp/help.el (print-help-return-message):
+       * lisp/image-mode.el (image-mode-maybe):
+       * lisp/imenu.el (imenu-example--name-and-position):
+       * lisp/international/mule-cmds.el (princ-list):
+       * lisp/mail/rmail.el (rmail-highlight-face):
+       * lisp/minibuffer.el (read-file-name-predicate):
+       * lisp/mouse.el (mouse-choose-completion):
+       * lisp/progmodes/cc-cmds.el (c-forward-into-nomenclature):
+       * lisp/progmodes/xscheme.el
+       (advertised-xscheme-send-previous-expression):
+       * lisp/simple.el (completion-base-size)
+       (choose-completion-delete-max-match, exchange-dot-and-mark):
+       * lisp/subr.el (eval-next-after-load):
+       * lisp/term.el (term-dynamic-simple-complete):
+       Remove items, obsolete since Emacs 23.2 and 23.3.
+       * doc/misc/cc-mode.texi (Movement Commands): Doc fix.
+       * doc/lispref/help.texi (Accessing Documentation):
+       * lisp/emacs-lisp/edebug.el (edebug-wrap-def-body):
+       * lisp/comint.el (comint-dynamic-list-completions):
+       * lisp/progmodes/idlwave.el 
(idlwave-make-modified-completion-map-xemacs)
+       (idlwave-make-modified-completion-map-emacs)
+       (idlwave-choose-completion):
+       * lisp/progmodes/vhdl-mode.el:
+       * lisp/term.el (term-dynamic-list-completions):
+       Remove references to 'mouse-choose-completion'.
+       * lisp/image-mode.el (image-mode-to-text):
+       Remove reference to 'image-mode-maybe'.
+       * lisp/mail/rmail.el (rmail-highlight-headers):
+       Use 'rmail-highlight' face instead of 'rmail-highlight-face'.
+       * lisp/progmodes/antlr-mode.el (antlr-mode-map, antlr-mode-menu):
+       Remove reference to 'c-forward-into-nomenclature'.
+       * lisp/simple.el (choose-completion, choose-completion-string)
+       (completion-list-mode, completion-setup-function): Don't use
+       'completion-base-size'.
+
+       This was discussed in
+       https://lists.gnu.org/archive/html/emacs-devel/2020-08/msg00400.html
+
+2020-08-24  Asher Gordon  <AsDaGo@posteo.net>  (tiny change)
+
+       Quote other suspicious characters in mml-insert-tag.
+
+       * lisp/gnus/mml.el (mml-insert-tag): Ensure that the characters
+       "[]<>=" are quoted correctly (bug#43009).
+
+2020-08-24  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Simplify by using Gnulib sigdescr_np module
+
+       Inspired by a straightforward patch by Bruno Haible.
+       * admin/merge-gnulib (GNULIB_MODULES): Add sigdescr_np.
+       * configure.ac: Do not check for sys_siglist or __sys_siglist.
+       * lib/gnulib.mk.in, m4/gnulib-comp.m4: Regenerate.
+       * lib/sigdescr_np.c, m4/sigdescr_np.m4: New files, copied from Gnulib.
+       * src/sysdep.c (sys_siglist, sys_siglist_entries): Remove.
+       (init_signals): Do not initialize sys_siglist.
+       (safe_strsignal): Use sigdescr_np instead of sys_siglist.
+
+2020-08-24  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from Gnulib
+
+       This incorporates:
+       2020-08-23 intprops: be consistent about +X vs X+0
+       2020-08-23 intprops: fix INT_MULTIPLY_WRAPV bit-field bug
+       2020-08-23 verify: Make assume work on bit field expressions
+       2020-08-23 libc-config: Improve comments
+       2020-08-22 verify: Do use __builtin_assume on clang
+       2020-08-22 sig2str: Add more signals
+       2020-08-21 sigdescr_np: New module
+       * lib/cdefs.h, lib/intprops.h, lib/sig2str.c, lib/string.in.h:
+       * lib/verify.h, m4/string_h.m4: Copy from Gnulib.
+       * lib/gnulib.mk.in: Regenerate.
+
+2020-08-23  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix more compilation warnings in xdisp.c
+
+       * src/xdisp.c (display_mode_element, decode_mode_spec_coding):
+       Avoid compilation warnings.
+
+2020-08-23  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix a compilation warning in xdisp.c
+
+       * src/xdisp.c (gui_consider_frame_title): Fix compilation warning.
+       Reported by Lars Ingebrigtsen <larsi@gnus.org>.
+
+2020-08-23  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve handling of coding-system mnemonic indicators
+
+       This fixes assertion violations when the mnemonic is
+       given as a string, and allows non-ASCII characters be
+       used as mode-line mnemonic of a coding-system.
+       * src/xdisp.c (decode_mode_spec_coding): Handle multibyte
+       characters as coding-system's mnemonic.
+       (display_mode_element): If decode_mode_spec returns a multibyte
+       string, display it as multibyte.
+       * src/coding.c (Fdefine_coding_system_internal)
+       (Fcoding_system_put): If :mnemonic is a string, use its first
+       character.  This avoids assertion violations if someone uses a
+       string as the mnemonic of a coding-system.
+
+2020-08-23  Mattias Engdegård  <mattiase@acm.org>
+
+       Always make a multibyte string for the frame title (bug#42904)
+
+       * src/xdisp.c (gui_consider_frame_title): Multibyte-encode any raw
+       bytes in the title, and then pass a multibyte string to the back-end
+       for use as a frame title.  This cuts down a little on the rubbish
+       shown when raw bytes sneak in by mistake (as part of the buffer name,
+       for instance).
+
+2020-08-23  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix image display on w32 as followup to recent changes
+
+       The new code calls 'malloc' and 'free', so we can no longer
+       * src/image.c (struct image_type): Rename 'load' to 'load_img' and
+       'free' to 'free_img'.  All callers changed.
+       (free_image) [WINDOWSNT]: Don't #undef 'free'.
+
+2020-08-23  Alan Third  <alan@idiocy.org>
+
+       Silence compiler warning (bug#40845)
+
+       * src/image.c (lookup_image): Don't allow face to be NULL.
+
+2020-08-23  Alan Third  <alan@idiocy.org>
+
+       Set basic SVG attributes (bug#40845)
+
+       * test/manual/image-transforms-tests.el: Replace hard-coded colors
+       with defaults.
+       * src/dispextern.h (struct image):
+       * src/image.c (search_image_cache):
+       (xbm_load_image):
+       (xbm_load):
+       (pbm_load): Rename from frame to face where relevant.
+       (svg_load_image): Parse the image to find out the size, then wrap it
+       in another SVG to set a new size and colors, etc.
+       (lookup_image): Use the face colors instead of the frame colors.
+       (search_image_cache): Add ability to ignore the face colors.
+       (uncache_image): Uncache all copies of the image that share the spec,
+       even if the face colors don't match.
+       * etc/NEWS: Describe the changes.
+
+2020-08-23  Michael Albinus  <michael.albinus@gmx.de>
+
+       Rework direct async processes in Tramp
+
+       * doc/misc/tramp.texi (Remote processes): Precise restrictions for 
direct
+       async processes.
+
+       * lisp/net/tramp.el (tramp-methods): Adapt docstring.
+       (tramp-direct-async-process-p): Make it more precise.
+       (tramp-handle-make-process): Rewrite, based on `make-process'.
+
+       * test/lisp/net/tramp-tests.el (tramp-test-temporary-file-directory):
+       Add `tramp-direct-async-args` for mock method.
+       (tramp-test29-start-file-process, tramp-test30-make-process):
+       Use weaker regexp checking "foo".
+       (tramp-test30-make-process): Do not check stderr for direct async 
processes.
+       (tramp--test--deftest-direct-async-process): New defmacro.
+       (tramp-test29-start-file-process-direct-async)
+       (tramp-test30-make-process-direct-async): New tests.
+
+2020-08-23  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (native-compile): Fix free function 
compilation.
+
+2020-08-23  Andrea Corallo  <akrl@sdf.org>
+
+       A cc-mode fix to be compiled correctly once installed
+
+       * lisp/progmodes/cc-bytecomp.el (cc-bytecomp-load): If cc-mode
+       is not compiled during the initial build (read
+       NATIVE_FAST_BOOT) it will be when already in el.gz form.
+
+2020-08-23  Andrea Corallo  <akrl@sdf.org>
+
+       Rework eln hash filename strategy
+
+       Generate eln filename hashing also the source file content in the form:
+
+       /absolute/path/filename.el + content ->
+       eln-cache/filename-path_hash-content_hash.eln
+
+       * src/lread.c (maybe_swap_for_eln): Always call
+       Fcomp_el_to_eln_filename on an existing source file.
+
+       * src/comp.c (md5.h, sysstdio.h, zlib.h): New include.
+       (comp_hash_string): Use md5 instead of sha512.
+       (MD5_BLOCKSIZE): New macro.
+       (accumulate_and_process_md5, final_process_md5, md5_gz_stream)
+       (comp_hash_source_file): New functions.
+       (Fcomp_el_to_eln_filename): Rework for hasing using also source
+       file content.
+
+       * src/lread.c (maybe_swap_for_eln): Rename el_name -> src_name as
+       this can be also a have .el.gz extension.
+
+2020-08-23  Andrea Corallo  <akrl@sdf.org>
+
+       Import lib/af_alg.h from gnulib
+
+       * lib/af_alg.h: New file.
+
+2020-08-23  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-08-23  Eli Zaretskii  <eliz@gnu.org>
+
+       Minor fixes for last change
+
+       * lisp/international/kinsoku.el (kinsoku): Provide 'kinsoku'.
+       * lisp/cus-start.el (standard): Use 'require' instead of 'load.
+
+       * etc/NEWS:
+       * doc/emacs/display.texi (Visual Line Mode): Improve wording and
+       markup of last change.
+
+2020-08-23  Yuan Fu  <casouri@gmail.com>
+
+       Improve word wrapping for CJK characters
+
+       Note about the change around line 9257 and 23372:
+
+       Before, the test for whitespace checks for can_wrap_before and
+       can_wrap_after simutaniously.  Now we separate these two checks, and
+       the logic needs to change a little bit.  However, when we don't enable
+       the new wrapping feature, 'can_wrap_after' is equivalent to
+       'IT_DISPLAYING_WHITESPACE' and 'can_wrap_before' is equivalent to
+       '!IT_DISPLAYING_WHITESPACE'.  And the new logic is equivalent with the
+       old one in that case.
+
+       Old logic:
+
+           if (whitespace) /* Which means can wrap after && can't wrap
+                              before.  */
+             may_wrap = true;
+
+           else if (may_wrap) /* aka (!whitespace && may_wrap)
+             (set wrap point)  * aka (can't wrap after && can wrap before
+             may_wrap = false  *      && may_wrap)
+                               */
+
+       New logic:
+
+           if (can_wrap_after)
+             next_may_wrap = true
+           else
+             next_may_wrap = false;
+
+           if (may_wrap && can_wrap_before)
+             (set wrap point)
+
+           /* Update may_wrap.  */
+           may_wrap = next_may_wrap;
+
+       * src/xdisp.c (it_char_has_category, char_can_wrap_before)
+       (char_can_wrap_after): New functions.
+       (move_it_in_display_line_to, display_line): Replace calls to
+       'IT_DISPLAYING_WHITESPACE' with either 'char_can_wrap_before' or
+       'char_can_wrap_after'.
+       (word-wrap-by-category): New variable.
+
+       * lisp/cus-start.el (minibuffer-prompt-properties--setter): Add
+       'word-wrap-by-category' as a customizable variable.
+
+       * doc/emacs/display.texi (Visual Line Mode): Add a paragraph about the
+       new 'word-wrap-by-category' feature.
+       * etc/NEWS: Announce the change.
+
+2020-08-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Bind the time zone so that the tests work everywhere
+
+       Use lexical-binding and remove compat code
+
+2020-08-22  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix documentation of a recent change in Dired
+
+       * etc/NEWS:
+       * doc/emacs/dired.texi (Dired Enter): Fix the text describing
+       'dired-maybe-use-globstar'.
+
+       * lisp/dired.el (dired-maybe-use-globstar): Add :version.
+
+2020-08-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify inline-letevals in the manual
+
+       * doc/lispref/functions.texi (Inline Functions): Try to clarify
+       what inline-letevals really does, and how it differs from `let'
+       (bug#31052).
+
+2020-08-22  Tino Calancha  <tino.calancha@gmail.com>
+
+       Handle globstar in dired
+
+       Allow user to enable globstar when the shell support
+       it and disable it by default (e.g. bash).
+       * lisp/dired.el (dired-maybe-use-globstar): New user option.
+       (dired-enable-globstar-in-shell): New variable.
+       (dired-insert-directory): if `dired-maybe-use-globstar' is
+       non-nil and the shell supports globstar, then enable it.
+
+       * doc/emacs/dired.texi: Document feature.
+
+2020-08-22  Alan Third  <alan@idiocy.org>
+
+       Fix NS build failure
+
+       * src/thread.c: xgselect isn't used with NS, even when HAVE_GLIB is
+       defined.
+
+2020-08-22  Alan Third  <alan@idiocy.org>
+
+       Extend NSString further and use the new methods
+
+       * src/nsfns.m (ns_set_icon_name):
+       (ns_set_name):
+       (ns_set_represented_filename):
+       (ns_implicitly_set_icon_type):
+       (ns_set_icon_type):
+       (ns_appkit_version_str):
+       (Fx_create_frame):
+       (Fns_read_file_name):
+       (Fns_get_resource):
+       (Fns_set_resource):
+       (Fns_list_colors):
+       (Fns_perform_service):
+       (ns_do_applescript): Use the new NSString methods.
+       ([NSString stringWithLispString:]): Fix the surrogate algorithm.
+       ([NSString lispString]): New method.
+       * src/nsterm.h (NSString): Add new method.
+       * src/nsterm.m ([EmacsApp openFile:]):
+       ([EmacsApp requestService:userData:error:]):
+       ([EmacsApp fulfillService:withArg:]):
+       ([EmacsView changeFont:]):
+       ([EmacsView setMarkedText:selectedRange:]):
+       ([EmacsView initFrameFromEmacs:]):
+       ([EmacsView performDragOperation:]):
+       ([EmacsView performDragOperation:]):
+       ([EmacsView performDragOperation:]):
+       ([EmacsWindow accessibilityAttributeValue:]): Use the new NSString
+       methods.
+
+2020-08-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Doc string (and defcustom type) fix for grep-find-command
+
+       * lisp/progmodes/grep.el (grep-find-command): Add the cons type to
+       the defcustom, and document it (bug#36113).  (It has always been a
+       valid value for the variable.)
+
+2020-08-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       nndoc minor clean-up
+
+       * lisp/gnus/nndoc.el (nndoc-possibly-change-buffer): Erase the
+       buffer before changing multibyteness.
+
+2020-08-22  Jan Tatarik  <jan.tatarik@gmail.com>
+
+       gnus-icalendar does not understand multiple repeating days
+
+       * lisp/gnus/gnus-icalendar.el
+       (gnus-icalendar-event:recurring-days): New function (bug#39782).
+       (gnus-icalendar-event:org-timestamp): New function.
+       (gnus-icalendar--find-day): Use them.
+       (gnus-icalendar-event--org-timestamp): Ditto.
+
+2020-08-22  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Make ruby-parse-partial more stable
+
+       * lisp/progmodes/ruby-mode.el (ruby-parse-partial):
+       Don't call ruby-deep-indent-paren-p (bug#42841).
+
+2020-08-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Restrict the range of image formats to be converted
+
+       * lisp/image/image-converter.el (image-converter--filter-formats):
+       New function.
+       (image-converter): Mention this in the doc string.
+
+2020-08-22  Stefan Kangas  <stefankangas@gmail.com>
+
+       Bind mwheel-scroll on more parts of frame's display
+
+       * lisp/mwheel.el (mouse-wheel-mode): Bind unmodified 'mwheel-scroll'
+       on scroll bars, fringes, margins, header and mode line.  (Bug#5557)
+       (mouse-wheel--create-scroll-keys): New helper function for
+       'mouse-wheel-mode'.
+       * test/lisp/mwheel-tests.el: New file.
+
+2020-08-21  Stephen Berman  <stephen.berman@gmx.net>
+
+       Fix several todo-mode.el editing bugs (bug#42976)
+
+       * lisp/calendar/todo-mode.el (todo-insert-item--basic): Ensure the
+       target todo file is in todo-mode.
+       (todo-edit-item--text): When editing a done item comment, prevent
+       clobbering match data on finishing the edit.
+       (todo-edit-item--header): Ensure that decrementing the month of
+       the date header works for intervals greater than a year, and when
+       incrementing or decrementing the month crosses one or more years,
+       adjust the year as needed.
+       (todo-read-category): If we're outside of todo-mode and there is a
+       current todo file, use it; otherwise, use the default todo file.
+
+       * test/lisp/calendar/todo-mode-tests.el
+       (todo-test-edit-item-date-month): New test.
+
+       * test/lisp/calendar/todo-mode-resources/todo-test-1.todo: Modify
+       to accommodate new test.
+
+2020-08-21  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from Gnulib
+
+       This incorporates:
+       2020-08-20 sigabbrev_np: New module
+       2020-08-20 stdalign: Fix 32-bit test failures clang versions < 8
+       2020-08-17 careadlinkat: speedup for GCC 10 with GCC_LINT
+       2020-08-17 Assume autoconf >= 2.64
+       * build-aux/config.guess, build-aux/config.sub, lib/careadlinkat.c:
+       * lib/stdalign.in.h, lib/string.in.h, m4/std-gnu11.m4, m4/string_h.m4:
+       Copy from Gnulib.
+       * lib/gnulib.mk.in: Regenerate.
+
+2020-08-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Minor mode doc string clarification
+
+       * lisp/emacs-lisp/easy-mmode.el (easy-mmode--arg-docstring):
+       Clarify that the minor mode hook is called both when enabling and
+       disabling the mode (bug#34073).
+
+2020-08-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fread_variable doc string clarification
+
+       * src/minibuf.c (Fread_variable): Doc string clarification (bug#38886).
+
+2020-08-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       help-at-pt-display-when-idle doc string clarification
+
+       * lisp/help-at-pt.el (help-at-pt-display-when-idle): Clarify when
+       kbd-help is useful (bug#39295).
+
+2020-08-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention `exec-path' in some process related doc strings
+
+       * src/callproc.c (Fcall_process_region):
+       (Fcall_process):
+       * src/process.c (Fmake_process): Mention `exec-path' in the doc
+       strings (bug#42704).
+
+2020-08-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Highlight error messages from diff in diff-mode
+
+       * lisp/vc/diff-mode.el (diff-error): New face (bug#2739).
+       (diff-font-lock-keywords): Use it to highlight lines like "diff: "
+       which are error messages from diff (for instance, when a file
+       doesn't exist).
+
+2020-08-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix problem with 8bit content-transfer-encoding in nndoc mbox files
+
+       * lisp/gnus/nndoc.el (nndoc-possibly-change-buffer): If we're
+       reading an mbox file, it may contain messages that use
+       content-transfer-encoding 8bit, which means that we have to treat
+       the file as a sequence of byte (bug#42951).  This avoids
+       double-decoding -- once by Emacs when inserting the mbox into the
+       buffer, and once by Gnus when displaying the articles.
+
+2020-08-21  Noam Postavsky  <npostavs@gmail.com>
+
+       Clarify docs about line movement
+
+       * doc/lispref/positions.texi (Text Lines, Screen Lines): Add index
+       entries.
+       * lisp/simple.el (move-beginning-of-line): Remove incorrect mention of
+       images, and reference beginning-of-visual-line.
+       * src/editfns.c (Fline_beginning_position): Reference
+       `vertical-motion' (bug#35899).
+
+2020-08-21  Pip Cet  <pipcet@gmail.com>
+
+       Fix lock failures in xg_select
+
+       * src/xgselect.c (release_select_lock, acquire_select_lock):
+       Introduce.
+       (xg_select): Use `acquire_select_lock', `release_select_lock'.
+       * src/thread.c (release_select_lock): Introduce for non-GLib builds.
+       (really_call_select): Call `release_select_lock'.  Simplify by
+       ensuring acquisition of the lock always succeeds (bug#36609).
+
+2020-08-21  Pip Cet  <pipcet@gmail.com>
+
+       Fix return value for CCL opcode lookup-integer
+
+       * src/ccl.c (ccl_driver): Fix LookupIntConstTbl return value.
+       * test/lisp/international/ccl-tests.el (ccl-hash-table): Add test.
+       * lisp/international/ccl.el (ccl-embed-data): Don't pass non-numbers
+       to `ccl-fixnum' (bug#36740).
+
+2020-08-21  Tobias Zawada  <i_inbox@tn-home.de>
+
+       Make hs-special-modes-alist also work for modes derived from those modes
+
+       * lisp/progmodes/hideshow.el (hs-grok-mode-type): Also set up
+       hideshow variables based on hs-special-modes-alist in derived
+       modes (bug#39354).
+
+2020-08-21  Kevin Ryde  <user42_kevin@yahoo.com.au>
+
+       Have ispell add new LocalWords lines after any such existing lines
+
+       * lisp/textmodes/ispell.el (ispell-add-per-file-word-list): Add
+       new LocalWords line just after existing such lines.  Good to keep
+       words together or if deliberately placed somewhere special
+       (bug#20486).
+
+2020-08-21  Christophe Troestler  <Christophe.Troestler@umons.ac.be>  (tiny 
change)
+
+       Fix displaying inline ical attachments with no charset
+
+       * lisp/gnus/gnus-icalendar.el
+       (gnus-icalendar-with-decoded-handle): Check whether there is a
+       charset before using it (bug#40290).
+
+2020-08-21  Gregory Heytings  <ghe@sdf.org>  (tiny change)
+
+       Tweak completion of Makefile targets
+
+       * lisp/pcmpl-gnu.el (pcmpl-gnu-make-targets): Require that target
+       names not be preceded by a TAG character (bug#42411).
+
+2020-08-21  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove some compat code from cperl-mode
+
+       * lisp/progmodes/cperl-mode.el (cperl-use-syntax-table-text-property)
+       (cperl-syntaxify-by-font-lock, cperl-mode-map, cperl-mode)
+       (cperl-windowed-init, cperl-init-faces, cperl-write-tags): Remove
+       some XEmacs and <21 compat code.
+
+2020-08-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make image cache lookups work again after previous patch
+
+       * src/image.c (search_image_cache): Fix reversed logic in previous
+       patch.
+
+2020-08-21  Juri Linkov  <juri@linkov.net>
+
+       * lisp/simple.el (previous-line-or-history-element): Handle logical 
lines.
+
+       When 'line-move-visual' is nil, use 'end-of-line' to move point to the 
end
+       of the first logical line (bug#42862)
+
+       Thanks to Michael Welsh Duggan <mwd@md5i.com>.
+
+2020-08-21  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix off-by-one error in decoded-time-add (with months)
+
+       * lisp/calendar/time-date.el (decoded-time-add): Fix month
+       addition, which was off-by-one.
+
+2020-08-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix problem with non-ASCII characters in ediff error messages
+
+       * lisp/vc/ediff-diff.el (ediff-prepare-error-list): Decode the
+       data from diff before displaying (bug#5050).  This fixes a problem
+       with displaying raw bytes in the error messages in non-ASCII locales.
+
+2020-08-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make image-mode give better feedback when the buffer is empty
+
+       * lisp/image-mode.el (image-mode): Give a less confusing message
+       if we don't have any image data (bug#16062).  Also leave the
+       buffer in fundamental mode.
+
+2020-08-20  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix NS crash on invalid frame title string (bug#42904)
+
+       Instead of blindly assuming that all Emacs strings are valid UTF-8,
+       which they are not, use a more careful conversion going via UTF-16
+       which is what NSString uses internally.  Unpaired surrogates will
+       still go through to the NSString objects, but the NS libs handle them
+       gracefully.
+
+       * src/nsterm.h (EmacsString): New category.
+       * src/nsfns.m (all_nonzero_ascii): New helper function.
+       ([NSString stringWithLispString:]): New method.
+       (ns_set_name_internal): Use new conversion method.
+
+2020-08-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix compilation warning in vc-cvs from previous change
+
+       * lisp/vc/vc-cvs.el (log-edit-extract-headers): Fix compilation
+       warning.
+
+2020-08-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix message.el compilation warning
+
+       * lisp/gnus/message.el (smtpmail-stream-type): Fix compilation
+       warning from last change.
+
+2020-08-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow specifying the TLS port in X-Message-SMTP-Method
+
+       * lisp/gnus/message.el (message-multi-smtp-send-mail): If the user
+       has specified the TLS SMTP port, then force a TLS connection
+       (bug#38066).
+
+2020-08-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't message the hunk status when just going to it
+
+       * lisp/vc/diff-mode.el (diff-goto-source): Don't output a status
+       about the hunk just when jumping to it (bug#38370).  This would
+       output "Hunk already applied" when browsing diffs.
+
+2020-08-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a new way to encode unprintable characters in Message: url-encode
+
+       * lisp/gnus/message.el (message-fix-before-sending): Add a new
+       conversion method for invalid characters -- URL-encoding (bug#38955).
+
+2020-08-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix problem with unprintable characters in Message headers
+
+       * lisp/gnus/message.el (message-fix-before-sending): Remove
+       unprintable characters from the entire buffer, not just the body
+       (bug#38955).
+
+2020-08-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix interactive spec of message-beginning-of-line
+
+       * lisp/gnus/message.el (message-beginning-of-line): Fix problem
+       with C-S-a getting translated to C-a in message-mode (bug#39545).
+
+2020-08-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove the "Summary: " but from cvs checkins
+
+       * lisp/vc/vc-cvs.el (vc-cvs-checkin): Remove the "Summary:" bit
+       from the comment (bug#40506).
+
+2020-08-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       message-sendmail-f-is-evil doc string fix
+
+       * lisp/gnus/message.el (message-sendmail-f-is-evil): Make doc
+       string less confusing by removing a joke (bug#41096).
+
+2020-08-20  Noah Swainland  <noah@distinctly.pink>
+
+       Add global-goto-address-mode
+
+       * doc/emacs/misc.texi (Goto Address mode): Document it.
+
+       * lisp/net/goto-addr.el (global-goto-address-mode)
+       (goto-addr-mode--turn-on): New functions (bug#42937).
+
+2020-08-20  Andrea Corallo  <akrl@sdf.org>
+
+       Revert "Fix native code uneffective loads after recompilation" 
(bug#42944)
+
+       This reverts commit 8a931a97b8dd19a38d6f719f810280a07ba76438.
+
+       This introduced bug#42944.
+
+2020-08-20  Stefan Kangas  <stefankangas@gmail.com>
+
+       Revert "; * etc/NEWS: Remove temporary note on documentation.  
(Bug#42917)"
+
+       This reverts commit 121be3e1181e609734fc4cc9d2d54cf7eec18ab2.
+
+2020-08-19  Glenn Morris  <rgm@gnu.org>
+
+       * admin/admin.el (set-version): Trap yet another NEWS error.
+
+2020-08-19  Stefan Kangas  <stefankangas@gmail.com>
+
+       Fix minor issues after recent world-clock rename
+
+       * lisp/time.el (world-clock-mode): Set 'revert-buffer-function'
+       buffer-locally rather than globally.
+       (display-time-world): Unobsolete alias for 'world-clock'.  Some users
+       might be used to the old name.
+
+2020-08-19  Andreas Fuchs  <asf@boinkor.net>
+
+       Pass driver options to libgccjit where supported
+
+       Add a customizable variable for driver options (such as linker flags)
+       to pass to libgccjit (Bug #42761).
+
+       * lisp/emacs-lisp/comp.el (comp-native-driver-options): New
+       customization variable.
+       * src/comp.c: Use comp-native-driver-options to set libgccjit's driver
+       options, if supported on the library's ABI version.
+
+2020-08-19  Andrea Corallo  <akrl@sdf.org>
+
+       Fix native code uneffective loads after recompilation
+
+       'dlopen' can return the same handle if two shared with the same
+       filename are loaded in two different times (even if the first was
+       deleted!).  To prevent this scenario the last modification time of the
+       source file is included in the hashing algorithm.
+
+       * src/comp.c (Fcomp_el_to_eln_filename): Update hashing algo to
+       include the source last modification date.
+       * src/lread.c (maybe_swap_for_eln): Do not check for eln newer
+       then elc as this is now unnecessary.
+
+2020-08-19  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-08-19  Noah Friedman  <friedman@splode.com>
+
+       Make shell-resync-dirs handle whitespace in directory names
+
+       * lisp/shell.el (shell-resync-dirs): Correctly handle
+       whitespace in directory names (bug#23324).
+
+2020-08-19  Juri Linkov  <juri@jurta.org>
+
+       Allow searching interactively over completions in `M-x'
+
+       * lisp/simple.el (read-extended-command): Allow doing interactive
+       searches over the completions (bug#12490).  This restores the
+       behaviour from Emacs 23 that was lost in Emacs 24.
+
+2020-08-19  Grégoire Jadi  <gregoire.jadi@univ-nantes.fr>
+
+       Ensure `bibtex-set-dialect' is executed in bibtex buffers
+
+       * lisp/textmodes/bibtex.el (bibtex-mode): Call `bibtex-set-dialect'.
+       * test/automated/bibtex-tests.el: Add regression tests (bug#21764).
+
+2020-08-19  Robert Weiner  <rswgnu@gmail.com>
+
+       Make etags-list-tags work with Exuberant ctags
+
+       * lisp/progmodes/etags.el (etags-list-tags): Make the function
+       work with Exuberant ctags (bug#23400).
+
+2020-08-19  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix cond jump table compilation (bug#42919)
+
+       This bug affected compilation of
+
+        (cond ((member '(some list) variable) ...) ...)
+
+       While equal is symmetric, member is not; in the latter case the
+       arguments must be a variable and a constant list, in that order.
+
+       Reported by Ikumi Keita.
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile--cond-switch-prefix):
+       Don't treat equality and member predicates in the same way; only
+       the former are symmetric in their arguments.
+       * test/lisp/emacs-lisp/bytecomp-tests.el
+       (byte-opt-testsuite-arith-data): Add test cases.
+
+2020-08-19  Anders Lindgren  <andlind@gmail.com>
+
+       Fix #'(lambda ...) font locking
+
+       * lisp/emacs-lisp/lisp-mode.el (lisp--el-non-funcall-position-p):
+       Fontize #'(lambda ...) better (bug#23465).
+
+2020-08-19  Doug Gilmore  <dougjgilmore@gmail.com>
+
+       Fix a segfault in daemon mode Emacs when detaching an X session
+
+       * src/xterm.c (x_uncatch_errors): Add a sanity check for
+       x_error_message (bug#23939).
+
+2020-08-19  Mattias Engdegård  <mattiase@acm.org>
+
+       Distinguish errors in bytecomp-tests
+
+       * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-check-1)
+       (test-byte-opt-arithmetic, bytecomp-lexbind-check-1)
+       (bytecomp-lexbind-explain-1):
+       When comparing interpreted with compiled results, don't consider all
+       errors to be equal; take the error type into account.  (The error
+       arguments may differ, but there may be good reasons for that.)
+
+2020-08-19  Mattias Engdegård  <mattiase@acm.org>
+
+       Make bytecomp-tests re-runnable
+
+       * test/lisp/emacs-lisp/bytecomp-tests.el
+       (test-byte-comp-macro-expand-lexical-override): Remove functions
+       before testing so that the test can be run twice without failing.
+
+2020-08-19  Tino Calancha  <tino.calancha@gmail.com>
+
+       Make thingatpt recognise files names with @ in them
+
+       * lisp/thingatpt.el (thing-at-point-file-name-chars): Add @
+       (Bug#24606).
+
+2020-08-19  Tom Tromey  <tom@tromey.com>
+
+       Add a variable to control VC completion over branch names
+
+       * lisp/vc/vc-git.el (vc-git-revision-complete-only-branches): New
+       variable (bug#25710).
+       (vc-git-revision-table): Use it.
+
+2020-08-19  Michael Albinus  <michael.albinus@gmx.de>
+
+       Better check for multi-hops when calling direct async processes
+
+       * lisp/net/tramp-sh.el (tramp-multi-hop-p, tramp-compute-multi-hops):
+       Move them from here ...
+
+       * lisp/net/tramp.el (tramp-multi-hop-p, tramp-compute-multi-hops): ... 
here.
+       (tramp-direct-async-process-p): Use `tramp-compute-multi-hops'.
+
+2020-08-19  Carlos Pita  <carlosjosepita@gmail.com>
+
+       Don't override python font locking in comint
+
+       * lisp/comint.el (comint-highlight-input): New variable (bug#32344).
+       (comint-send-input): Use it.
+
+       * lisp/progmodes/python.el (inferior-python-mode): Set it.
+
+2020-08-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Signal an end-of-file error upon errors when reading from stdin
+
+       * src/minibuf.c (read_minibuf_noninteractive): Signal an
+       `end-of-file' error when reading from stdin instead of a general
+       error (bug#34123).  This makes it easier to write code that
+       recovers from this situation.
+
+       Suggested by Noam Postavsky <npostavs@gmail.com>.
+
+2020-08-19  Noam Postavsky  <npostavs@users.sourceforge.net>
+
+       Let ido-everywhere turn on ido-mode
+
+       * lisp/ido.el (ido-everywhere): Turn on ido-mode, if it's not already
+       on.  Otherwise, having ido-everywhere enabled messes all file and
+       buffer reading interactive commands (bug#34292).
+
+2020-08-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix the [ command in speedbar mode
+
+       * lisp/speedbar.el (speedbar-expand-line-descendants): Expand only
+       the current line -- not all subsequent lines in the speedbar
+       buffer (bug#35014).
+
+2020-08-19  Sebastian Urban  <mrsebastianurban@gmail.com>
+
+       Fix a page-break in the middle of a keystroke in basic.texi
+
+       * doc/emacs/basic.texi (Inserting Text): Avoid having the C-x 8 ]
+       keystroke broken over two pages in the PDF version (bug#35885).
+
+2020-08-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from viper-cmd.el
+
+2020-08-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from ispell.el
+
+       * lisp/textmodes/ispell.el (ispell): transient-mark-mode and
+       mark-active are always bound, so remove the check.
+
+2020-08-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from erc
+
+       * lisp/erc/erc.el (erc-mode): next-line-add-newlines is always
+       defined, so remove the check.
+
+2020-08-18  Alan Third  <alan@idiocy.org>
+
+       Get rid of build-time checks around NS tabbar code (bug#33118)
+
+       * src/nsterm.m ([EmacsView initFrameFromEmacs:]): Get rid of version
+       checks.
+
+2020-08-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from viper-*.el
+
+       * lisp/emulation/viper-util.el (viper-check-minibuffer-overlay):
+       * lisp/emulation/viper-cmd.el (viper-minibuffer-standard-hook)
+       (viper-minibuffer-real-start, viper-submit-report): No need to
+       check whether minibuffer-prompt-end is defined.
+
+2020-08-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from descr-text.el
+
+       * lisp/descr-text.el (describe-text-properties-1): button.el is
+       pre-loaded, so remove check for it.
+
+2020-08-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from viper-cmd.el
+
+       * lisp/emulation/viper-cmd.el (viper-next-line-at-bol): No need to
+       check for button-at.
+
+2020-08-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from ps-print.el
+
+       * lisp/ps-print.el: Don't make a face-list alias.
+
+2020-08-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from forms.el
+
+       * lisp/forms.el (forms-mode): make-face always exists.
+
+2020-08-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from smiley.el
+
+       * lisp/gnus/smiley.el (smiley-style): face-attribute is always defined.
+
+2020-08-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from chart.el
+
+       * lisp/emacs-lisp/chart.el (chart-face-list):
+       set-face-background-pixmap is always defined.
+
+2020-08-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from htmlfontify.el
+
+       * lisp/htmlfontify.el (hfy-color-vals): color-values is always
+       defined.
+
+2020-08-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from ps files
+
+       * lisp/ps-def.el (ps-color-device): Ditto.
+
+       * lisp/ps-print.el (ps-color-scale): Make into an obsolete alias.
+       (ps-begin-job): Adjust caller.
+
+       * lisp/progmodes/ebnf2ps.el (ebnf-generate-eps, ebnf-generate): Ditto.
+
+2020-08-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from woman.el
+
+       * lisp/woman.el (woman-fontify): Don't check for functions always
+       defined.
+
+2020-08-18  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Replace last uses of idlwave-get-buffer-visiting
+
+       * lisp/progmodes/idlw-help.el (idlwave-help-with-source):
+       * lisp/progmodes/idlw-shell.el (idlwave-shell-set-bp-in-module)
+       (idlwave-shell-delete-temp-files, idlwave-shell-save-and-action):
+       Replace last occurrences of deprecated idlwave-get-buffer-visiting
+       with now-equivalent find-buffer-visiting.
+
+2020-08-18  Stefan Kangas  <stefankangas@gmail.com>
+
+       * lisp/vt-control.el: Use lexical-binding.
+
+2020-08-18  Philip K  <philipk@posteo.net>
+
+       Fix Libravatar federation handling
+
+       * lisp/image/gravatar.el (gravatar--service-libravatar): Implement
+       correct algorithm (bug#40354).
+
+2020-08-18  Philip K  <philipk@posteo.net>
+
+       Fix Libravatar federation handling
+
+       * lisp/image/gravatar.el (gravatar--service-libravatar): Implement
+       correct algorithm (bug#40354).
+
+2020-08-18  Robert Pluim  <rpluim@gmail.com>
+
+       Fix truncated command names in process-attributes under Macos
+
+       * src/sysdep.c (system_process_attributes): Fix truncation of
+       command names in process-attributes under Macos (bug#36287).
+
+2020-08-18  Stefan Kangas  <stefankangas@gmail.com>
+
+       Rearrange and clean up code in time.el (Bug#40863)
+
+       * lisp/time.el (world-clock, zoneinfo-style-world-list)
+       (legacy-style-world-list, world-clock-list)
+       (time--display-world-list, world-clock-time-format)
+       (world-clock-timer-enable, world-clock-timer-second): Move definitions
+       closer to 'world-clock' code.  Remove redundant :group args.
+
+       (display-time-mail-file, display-time-mail-directory)
+       (display-time-mail-function)
+       (display-time-default-load-average)
+       (display-time-load-average-threshold, display-time-day-and-date)
+       (display-time-interval, display-time-24hr-format)
+       (display-time-hook, display-time-mail-face)
+       (display-time-use-mail-icon, display-time-mail-string)
+       (display-time-format, display-time-string-forms): Remove redundant
+       :group args.
+
+2020-08-18  Stefan Kangas  <stefankangas@gmail.com>
+
+       Rename 'display-time-world' to 'world-clock' (Bug#40863)
+
+       * lisp/time.el (world-clock-list, world-clock-time-format)
+       (world-clock-buffer-name, world-clock-timer-enable)
+       (world-clock-timer-second, world-clock-label, world-clock-mode)
+       (world-clock-display, world-clock, world-clock-update): Rename
+       from 'display-time-world-*' and update all uses.
+
+       (world-clock): New defgroup.
+       (zoneinfo-style-world-list, legacy-style-world-list): Use :group
+       'world-clock'.
+
+       (display-time-world-list, display-time-world-time-format)
+       (display-time-world-buffer-name)
+       (display-time-world-timer-enable)
+       (display-time-world-timer-second): Make into obsolete variable
+       aliases for the new names.
+
+       * lisp/time.el (display-time-world-mode)
+       (display-time-world-display, display-time-world)
+       (display-time-world-timer): Make into obsolete function aliases
+       for the new names.
+
+       * etc/NEWS: Announce the above changes.
+
+2020-08-18  Stefan Kangas  <stefankangas@gmail.com>
+
+       Improve display-time-world UI (Bug#40863)
+
+       * lisp/time.el (display-time-world-mode): Set 'revert-buffer-function'
+       to 'display-time-world-timer'.
+
+       (display-time-world-label): New face.
+       (display-time-world-display): Use the new face.  Move point to new
+       buffer on creation and resize.
+
+2020-08-18  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove the "Recent message" section from the bug reports
+
+       * lisp/mail/emacsbug.el (report-emacs-bug): Don't include "Recent
+       messages" since it has privacy implications.  Problem reported by
+       Lars Ingebrigtsen in:
+       https://lists.gnu.org/archive/html/emacs-devel/2019-11/msg01099.html
+       (bug#39185).
+
+2020-08-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       srecode-utest-project test should now work on Hydra, hopefully
+
+2020-08-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix a big in the srecore test setup
+
+       * test/lisp/cedet/srecode-utest-template.el
+       (srecode-utest-project): Set the current directory in the project
+       so that we'll find it later (bug#42533).  The in-project directory
+       is /tmp, which is not actually what it is on many machines that
+       have the temporary directory somewhere else.
+
+2020-08-18  Stefan Kangas  <stefankangas@gmail.com>
+
+       * lisp/savehist.el: Doc fix.
+
+2020-08-18  Pip Cet  <pipcet@gmail.com>
+
+       Fix minor bugs in image.c
+
+       * test/lisp/image-tests.el (image-test-circular-specs): New file.
+       * src/image.c (parse_image_spec): Return failure for circular lists.
+       (valid_image_p): Don't look at odd-numbered list elements expecting to
+       find a property name.
+       (image_spec_value): Handle circular lists.
+       (equal_lists): Introduce.
+       (search_image_cache): Use `equal_lists' (bug#36403).
+
+2020-08-18  Philip K  <philipk@posteo.net>
+
+       Fix issues with OpenPGP header
+
+       * doc/misc/message.texi (OpenPGP Header): Mention correct hook
+       * lisp/gnus/message.el (message-openpgp-header): Improve customize type
+       (message-add-openpgp-header): Insert header into correct buffer
+       (bug#42913).
+
+2020-08-18  Kalle Olavi Niemitalo  <kon@iki.fi>  (tiny change)
+
+       Fix buffer overflow in x-send-client-message
+
+       * src/xselect.c (x_fill_property_data): Add parameter NELEMENTS_MAX.
+       * src/xterm.h (x_fill_property_data): Update prototype.
+       * src/xselect.c (Fx_send_client_event): Update call.  This fixes
+         a buffer overflow in event.xclient.data.
+       * src/xfns.c (Fx_change_window_property): Update call (bug#23482).
+
+2020-08-18  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       362ca83a3b (origin/emacs-27) Let Emacs start even if curdir is inacce...
+       dd989c0ea0 * etc/NEWS: Mention GnuPG 2.0 through 2.1.5 issue (Bug#428...
+       4542b750cc Fix bug with ~/Emacs file not being read at init
+       9b403d624e ; Fix last change
+       6bff65a626 ; * doc/lispref/sequences.texi (Sequence Functions): Typo ...
+       3c4edfd85e Prevent from frozen frame after `C-z' in Lucid builds
+       98e8241992 Document the 'flex' completion style
+       19fa8b7ca3 Note that Emacs needs systemd support if systemd is used t...
+
+       # Conflicts:
+       #       etc/NEWS
+
+2020-08-18  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       cf0ee6f49b ; spelling fixes
+       16f4f26632 Fix startup working dir bug on NeXTSTEP
+
+2020-08-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Implement a cache for all types of gravatars
+
+       * lisp/image/gravatar.el (gravatar-automatic-caching): Made obsolete.
+       (gravatar-cache-ttl): Ditto.
+       (gravatar--cache): New variable to cache gravatars in-memory.
+       (gravatar-retrieve): Maintain the cache.
+       (gravatar--prune-cache): Remove old entries.
+       (gravatar-retrieved): Remove use of the old-style cache (bug#40355).
+
+2020-08-18  Clément Pit-Claudel  <clement.pitclaudel@live.com>
+
+       Fix ert ability to peek inside structures when comparing unequal values
+
+       * lisp/emacs-lisp/ert.el (ert--explain-equal-rec): Treat records
+       as arrays (bug#40562).  Also add support for cl-structs.
+
+2020-08-18  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove reference to Emacs Lisp List from FAQ
+
+       * doc/misc/efaq.texi (Packages that do not come with Emacs): Remove
+       reference to Emacs Lisp List.  (Bug#41681)
+
+2020-08-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add NEWS entry for the count-lines change
+
+2020-08-18  Jen-Chieh Shen  <jcs090218@gmail.com>
+
+       Add optional ALL-FRAMES arfument to count-windows
+
+       * lisp/window.el (count-windows): Allow counting the windows on
+       all frames (bug#42872).
+
+2020-08-18  Stefan Kangas  <stefankangas@gmail.com>
+
+       Rename new option to flyspell-use-mouse-3-for-menu
+
+       * lisp/textmodes/flyspell.el (flyspell-use-mouse-3-for-menu): Rename
+       from 'flyspell-correct-on-mouse-3'.  The previous name did not make it
+       clear that it's about opening a menu.  (Bug#11680)
+       (flyspell--set-use-mouse-3-for-menu): Rename from
+       'flyspell--set-correct-on-mouse-3'.  Bind menu to 'down-mouse-3'
+       instead of 'mouse-3' to be more in line with user expectations.
+       (flyspell-mode): Use the above new names.
+       * doc/emacs/fixit.texi (Spelling):
+       * etc/NEWS: Update documentation to use the new name.
+
+       Suggested by Stefan Monnier <monnier@iro.umontreal.ca>.
+
+2020-08-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Trim titles in eww so that the host from the URL is visible
+
+       * lisp/net/eww.el (eww-update-header-line-format): Trim the line
+       of the title so that the host bit of the URL is visible (bug#42898).
+
+2020-08-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from esh-io.el
+
+       * lisp/eshell/esh-io.el (eshell-set-output-handle): Remove check
+       for null-device, which is always bound.
+
+2020-08-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from ediff
+
+       * lisp/vc/ediff-init.el (ediff-convert-standard-filename): Make
+       obsolete.
+       * lisp/vc/ediff-util.el (ediff-setup): Adjust callers.
+       (ediff-make-temp-file): Ditto.
+
+2020-08-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from ede/make.el and semantic/dep.el
+
+       * lisp/cedet/ede/make.el (ede--find-executable): Make obsolete.
+       (ede-make-command): Adjust caller.
+
+       * lisp/cedet/semantic/dep.el
+       (semantic--dependency-find-file-on-path): Make obsolete.
+       (semantic-dependency-find-file-on-path): Adjust callers.
+
+2020-08-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from python.el
+
+       * lisp/progmodes/python.el: Remove some compat function definitions.
+
+2020-08-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from binhex.el and uudecode.el
+
+       * lisp/mail/binhex.el (binhex-temporary-file-directory): Make obsolete.
+       (binhex-decode-region-external): Adjust usage.
+
+       * lisp/mail/uudecode.el (uudecode-temporary-file-directory): Make
+       obsolete.
+       (uudecode-decode-region-external): Adjust usage.
+
+2020-08-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from ispell.el
+
+       * lisp/textmodes/ispell.el (ispell-check-version): Remove check
+       for temporary-file-directory, which is always defined.
+
+2020-08-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from uudecode.el
+
+       * lisp/mail/uudecode.el (uudecode-decode-region-external): Remove
+       check for make-temp-file, which is always defined.
+
+2020-08-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from ediff-util.el
+
+       * lisp/vc/ediff-util.el (ediff-minibuffer-with-setup-hook): Make
+       into an obsolete macro.
+       (ediff-read-file-name): Adjust caller.
+
+2020-08-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove XEmacs compat code from idlwave.el
+
+       idlwave.el: (idlwave-comment-line-start-skip, idlwave-mode-map)
+       (idlwave-mode, idlwave-get-buffer-visiting)
+       (idlwave-find-file-noselect, idlwave-complete-in-buffer)
+       (idlwave-attach-classes, idlwave-popup-select)
+       (idlwave-split-menu-emacs, idlwave-display-completion-list)
+       (idlwave-default-choose-completion)
+       (idlwave-display-completion-list-emacs)
+       (idlwave-display-completion-list-1)
+       (idlwave-make-modified-completion-map-emacs)
+       (idlwave-class-file-or-buffer, idlwave-rinfo-mouse-map)
+       (idlwave-display-calling-sequence)
+       (idlwave-insert-source-location)
+       (idlwave-list-load-path-shadows, idlwave-edit-in-idlde): Remove
+       XEmacs compat code.
+
+2020-08-18  Andrew Whatson  <whatson@gmail.com>
+
+       * Fix async compilation `comp-eln-load-path' effectiveness (bug#42909)
+
+       * lisp/emacs-lisp/comp.el (comp-run-async-workers): Forward
+       `comp-eln-load-path' to async workers.
+
+2020-08-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from window.el
+
+       * lisp/window.el (window-fixed-size-p): Remove check for
+       window-size-fixed, which is always defined.
+
+2020-08-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from idlwave.el
+
+       * lisp/progmodes/idlwave.el (idlwave-one-key-select): Remove check
+       from fit-window-to-buffer, which always exists.
+
+2020-08-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove come compat code from rmailedit.el
+
+       * lisp/mail/rmailedit.el (rmail-edit-mode): Remove check for
+       mode-line-modified, which is always defined.
+
+2020-08-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from erc-track.el
+
+       * lisp/erc/erc-track.el (erc-track-remove-from-mode-line)
+       (erc-track-add-to-mode-line): Remove check for mode-line-modes,
+       which is always bound.
+
+2020-08-18  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix glitch uncovered by gcc -fsanitize=undefined
+
+       * src/ccl.c (ccl_driver): Defend against signed integer
+       overflow (Bug#42660).  Perhaps some of this is unnecessary,
+       but it is safe and ccl.c is low-priority these days.
+
+2020-08-18  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Let Emacs start even if curdir is inaccessible
+
+       * lisp/startup.el (normal-top-level): Also delete PWD if
+       file-attributes fails for either $PWD or default-directory,
+       instead of failing out of the top level.
+       This fixes a regression from Emacs 26 (Bug#42903).
+
+2020-08-18  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from Gnulib
+
+       This incorporates:
+       2020-08-17 verify: avoid __built_assume on Clang
+       2020-08-17 libc-config: avoid Clang’s __diagnose_if__
+       * lib/cdefs.h, lib/verify.h: Copy from Gnulib.
+
+2020-08-17  Eli Zaretskii  <eliz@gnu.org>
+
+       Don't use -Wsuggest-attribute=malloc by default
+
+       * configure.ac: Move -Wsuggest-attribute=malloc to the set used
+       only under --enable-gcc-warnings.
+
+2020-08-17  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix assertion violation in pdumper.c
+
+       * src/pdumper.c (pdumper_find_object_type_impl): When checking
+       last_mark_bits, require the offset to be less than
+       discardable_start, not cold_start.  This fixes a typo introduced in
+       2020-08-14T21:33:21Z!eggert@cs.ucla.edu (Bug#42832).
+
+2020-08-17  Andrea Corallo  <akrl@sdf.org>
+
+       Improve eln filename hashing
+
+       Make eln filename hashing logic insensitive to the installation
+       process.
+
+       * src/comp.c (epaths.h): New include to have PATH_DUMPLOADSEARCH,
+       PATH_LOADSEARCH definitions.
+       (loadsearch_re_list): New static var.
+       (Fcomp_el_to_eln_filename): Update logic to have the eln hashing
+       insensitive to the installation process.
+       (syms_of_comp): GC protect 'loadsearch_re_list'.
+
+2020-08-17  Andrea Corallo  <akrl@sdf.org>
+
+       * test/src/comp-tests.el (comp-tests-bootstrap): Fix test for new eln 
setup.
+
+2020-08-17  Andrea Corallo  <akrl@sdf.org>
+
+       Introduce `load-no-native'
+
+       Given load loads automatically a .eln in place of a .elc we need a way
+       to force the .elc load in the case we really want it.
+
+       * src/lread.c (syms_of_lread): Define `load-no-native'.
+       (maybe_swap_for_eln): Make use of.
+
+2020-08-17  Andrea Corallo  <akrl@sdf.org>
+
+       Remove a false permission related error while native compiling
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-file): Do not crash if
+       native compiling we have no permission to create the .elc
+       file.  We are not creating it.
+
+2020-08-17  Andrea Corallo  <akrl@sdf.org>
+
+       Allow for native compiling .el.gz files
+
+       This is needed for installed instances compiled with NATIVE_FAST_BOOT
+
+       * src/comp.c (maybe_defer_native_compilation): Search for .el.gz
+       too as a source if the .el is not found.
+       (Fcomp_el_to_eln_filename): Remove the .gz in case to
+       generate the hash.
+
+       * lisp/emacs-lisp/comp.el (comp-valid-source-re): New defconst.
+       (comp-run-async-workers, native-compile-async): Make use of
+       `comp-valid-source-re'.
+
+2020-08-17  Andrea Corallo  <akrl@sdf.org>
+
+       Make install target functional for new eln-cache directory arrangement
+
+       * src/comp.h (fixup_eln_load_path): New extern.
+
+       * src/comp.c (fixup_eln_load_path): New function.
+
+       * src/pdumper.c (dump_do_dump_relocation): Update to make use of
+       'fixup_eln_load_path'.
+
+       * lisp/loadup.el: Update to store in the compilation unit the
+       correct eln-cache installed path. Rename --lisp-dest -> --eln-dest
+       and.
+
+       * Makefile.in: Pass the eln destination directory to
+       src/Makefile. Rename LISP_DESTDIR -> ELN_DESTDIR.
+       (ELN_DESTDIR): Define.
+       (install-eln): New target.
+       (install): Add install-eln as prerequisite.
+
+       * src/Makefile.in: Rename --lisp-dest -> --eln-dest and
+       LISP_DESTDIR -> ELN_DESTDIR.
+
+2020-08-17  Andrea Corallo  <akrl@sdf.org>
+
+       Deferred compilation must always compile despite source file timestamp
+
+       * lisp/emacs-lisp/comp.el (comp-run-async-workers): Always compile
+       if load is set.
+
+2020-08-17  Andrea Corallo  <akrl@sdf.org>
+
+       Do not fail if more then one level of directories has to be created
+
+       * lisp/emacs-lisp/comp.el (native-compile-async): Call
+       make-directory if necessary.
+
+2020-08-17  Andrea Corallo  <akrl@sdf.org>
+
+       Prevent recursive load
+
+       Prevent autoload to kicks in while running `native-compile-async'.
+       Autoload cannot be used safely by functions serving deferred
+       compilation as a circular load can be triggered if the dependency is
+       not native compiled already.
+
+       * lisp/emacs-lisp/comp.el (warnings): Add require.
+
+2020-08-17  Andrea Corallo  <akrl@sdf.org>
+
+       Some Makefile updates and clean-up
+
+       * Makefile.in (clean): Remove 'eln-cache' folder.
+
+       * lisp/Makefile.in (.SUFFIXES): Remove .eln.
+       (native-compile-clean): Target remove.
+       (compile-always, bootstrap-clean): Remove 'native-compile-clean'
+       prerequisite.
+
+       * src/Makefile.in (%.eln): Remove rule.
+
+2020-08-17  Andrea Corallo  <akrl@sdf.org>
+
+       Make comp-deferred-compilation a simple global and set it on by default
+
+       * src/comp.c (comp_deferred_compilation): Doc update and set it to
+       true by default.
+
+       * lisp/emacs-lisp/comp.el (comp-deferred-compilation): Remove
+       customize.
+
+2020-08-17  Andrea Corallo  <akrl@sdf.org>
+
+       Move eln files into dedicated cache directories
+
+       When loading a elc file search for a corresponding eln one into
+       `comp-eln-load-path' directories and load it if available.
+       `comp-eln-load-path' contains by default two directory (user and
+       system one).
+
+       * src/pdumper.c (dump_do_dump_relocation): While resurrecting from
+       load set eln cache sys dir in `Vcomp_eln_load_path'.
+
+       * src/lread.c (maybe_swap_for_eln): New function.
+       (Fload): Clean-up some now unnecessary code going
+       back to the master one.
+       (Fload): Make use of Vcomp_eln_to_el_h for the reverse file
+       look-up.
+       (openp_add_middle_dir_to_suffixes)
+       (openp_max_middledir_and_suffix_len, openp_fill_filename_buffer):
+       Remove functions.
+       (openp): As for Fload revert code modifications.
+       (openp): When a .elc file is being loaded check if a corresponding
+       eln can be loaded in place.
+
+       * src/comp.c (ELN_FILENAME_HASH_LEN): New macro.
+       (comp_hash_string): New function.
+       (hash_native_abi): Make use of 'comp_hash_string'.
+       (hash_native_abi): Change `comp-native-path-postfix' format.
+       (Fcomp_el_to_eln_filename): New function.
+       (Fcomp__compile_ctxt_to_file): Have file_name as a input.
+       (Vcomp_eln_to_el_h, Vcomp_eln_load_path): New global variables.
+
+       * lisp/startup.el (normal-top-level): Add user eln cache directory
+       in `comp-eln-load-path'.
+
+       * lisp/help-fns.el (find-lisp-object-file-name): Reverse look-up
+       files using `comp-eln-to-el-h'.
+
+       * lisp/files.el (locate-file): Likewise.
+
+       * lisp/emacs-lisp/find-func.el (find-library-name): Likewise.
+
+       * lisp/emacs-lisp/comp.el (comp-output-directory)
+       (comp-output-base-filename, comp-output-filename): Remove function.
+       (comp-compile-ctxt-to-file): Create parent directories if
+       necessary.
+       (comp-run-async-workers, native-compile, native-compile-async):
+       Make use `comp-el-to-eln-filename'.
+
+2020-08-17  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * etc/NEWS: Mention GnuPG 2.0 through 2.1.5 issue (Bug#42845).
+
+2020-08-17  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove some obsolete items from PROBLEMS
+
+       * etc/PROBLEMS: Remove some obsolete items.
+
+2020-08-17  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove more XEmacs compat code from viper
+
+       * lisp/emulation/viper-util.el (viper-sit-for-short)
+       (viper-last-command-char): Make obsolete.
+       (viper-fast-keysequence-p):
+       * lisp/emulation/viper-cmd.el (viper-escape-to-emacs)
+       (viper-digit-argument, viper-command-argument, viper-undo)
+       (viper-exit-minibuffer):
+       * lisp/emulation/viper-mous.el (viper-multiclick-p):
+       Adjust callers.
+
+2020-08-17  Robert Pluim  <rpluim@gmail.com>
+
+       Fix bug with ~/Emacs file not being read at init
+
+       * src/xrdb.c (get_user_app): Put "/" between homedir
+       and %L or %N (Bug#42827).
+
+2020-08-16  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Simplify format_time_string
+
+       * src/timefns.c (emacs_nmemftime, format_time_string):
+       Simplify on the basis of recent nstrftime changes.
+       Propagate nstrftime errno.
+
+2020-08-16  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from Gnulib
+
+       This incorporates:
+       2020-08-16 time_rz: remove unused functions
+       2020-08-16 time_rz: fix issues with mktime_z failures
+       2020-08-16 nstrftime: Guide inlining also on clang
+       2020-08-16 intprops: Avoid bogus warning on clang
+       2020-08-16 libc-config: Enable __REDIRECT macro also on clang
+       2020-08-16 regex: Use initializer shorthand syntax also with clang
+       2020-08-16 regex: Use space optimization also with clang
+       2020-08-16 Use _Static_assert and static_assert when present on clang
+       2020-08-16 Use 'throw ()' for optimization in C++ mode also on clang
+       2020-08-16 stdio: Don't break attribute 'scanf' on clang
+       2020-08-16 Fix "warning: 'format' attribute ...: rpl_printf"
+       2020-08-16 Fix "warning: attribute declaration must precede definition"
+       2020-08-16 Fix undesired warnings
+       2020-08-16 Don't use Autoconf quadrigraphsxo
+       2020-08-16 Fix quoting of AC_LANG_PROGRAM arguments
+       2020-08-16 Assume autoconf >= 2.64
+       2020-08-15 nstrftime: be more predictable about errno
+       2020-08-15 canonicalize: Fix autoconf test on MSVC/clang
+       2020-08-15 Support compiling without -loldnames on native Windows
+       2020-08-14 mktime, mktime-internal: Remove obsolete code
+       2020-08-14 Assume tzset exists
+       * lib/c++defs.h, lib/canonicalize-lgpl.c, lib/cdefs.h, lib/dup2.c:
+       * lib/fcntl.in.h, lib/getopt-cdefs.in.h, lib/intprops.h, lib/md5.h:
+       * lib/mktime.c, lib/nstrftime.c, lib/open.c, lib/regcomp.c:
+       * lib/regex_internal.h, lib/stdio.in.h, lib/stdlib.in.h:
+       * lib/strftime.h, lib/string.in.h, lib/sys_select.in.h:
+       * lib/sys_stat.in.h, lib/sys_time.in.h, lib/time.in.h, lib/time_rz.c:
+       * lib/unistd.in.h, lib/verify.h, m4/00gnulib.m4:
+       * m4/absolute-header.m4, m4/alloca.m4, m4/canonicalize.m4, m4/dup2.m4:
+       * m4/fchmodat.m4, m4/fcntl.m4, m4/fdopendir.m4, m4/fpending.m4:
+       * m4/futimens.m4, m4/getdtablesize.m4, m4/getloadavg.m4:
+       * m4/gnulib-common.m4, m4/include_next.m4, m4/largefile.m4:
+       * m4/manywarnings.m4, m4/mktime.m4, m4/nstrftime.m4, m4/open-slash.m4:
+       * m4/pselect.m4, m4/pthread_sigmask.m4, m4/time_h.m4, m4/utimens.m4:
+       * m4/utimensat.m4, m4/utimes.m4, m4/warnings.m4:
+       Copy from Gnulib.
+       * lib/gnulib.mk.in: Regenerate.
+
+2020-08-16  Jonas Bernoulli  <jonas@bernoul.li>
+
+       Allow overriding read--expression-try-read bindings
+
+       * lisp/simple.el (read--expression): No longer bind
+       read--expression-try-read here.
+       * lisp/simple.el (read-expression-map): Bind
+       read--expression-try-read here (bug#42893).
+
+       This new specialized command was recently added in [1: 4a6dd13fa4].
+       It reestablishes the bindings every time `read--expression' is
+       invoked, which is wrong because it makes it impossible for users
+       to remove these bindings.
+
+       1: 4a6dd13fa42c87175ac72e1980f31cac56582db3
+       Change 'M-:' to not error out on incomplete expressions.
+
+2020-08-16  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Implement list-system-processes on OpenBSD
+
+       * src/sysdep.c: Implement list-system-processes on OpenBSD:
+       (bug#13881).  Based on a patch by Jérémie Courrèges-Anglas.
+
+2020-08-16  João Távora  <joaotavora@gmail.com>
+
+       Don't let docless variables hide function signature
+
+       In Elisp mode, ElDoc will try the variable's docstring first, then the
+       function signature.  If the former doesn't have one, don't hide the
+       latter.
+
+       * lisp/progmodes/elisp-mode.el (elisp-eldoc-var-docstring): If no
+       symbol docstring, don't declare any.
+
+2020-08-16  Stefan Kangas  <stefankangas@gmail.com>
+
+       Add new option flyspell-correct-on-mouse-3
+
+       * lisp/textmodes/flyspell.el
+       (flyspell-correct-on-mouse-3): New option to bind
+       'flyspell-correct-word' to 'mouse-3'.
+       (flyspell--set-correct-on-mouse-3): New function to update option.
+       (flyspell-mode): Update 'flyspell-mouse-map' if above option is
+       set.
+       * doc/emacs/fixit.texi (Spelling): Mention the new option.
+       * etc/NEWS: Announce the new option.
+
+2020-08-16  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove redundant :group args from flyspell.el
+
+       * lisp/textmodes/flyspell.el: Remove redundant :group args.
+
+2020-08-16  Stefan Kangas  <stefankangas@gmail.com>
+
+       Mark XEmacs compat alias as obsolete
+
+       * lisp/subr.el (user-original-login-name): Mark as obsolete.  This
+       XEmacs compat alias was obsoleted even by XEmacs, so there is no point
+       in keeping it around.
+
+2020-08-16  Steven Allen  <steven@stebalien.com>
+
+       Set the current buffer in esh-mode before running filter functions
+
+       * lisp/eshell/esh-mode.el: (eshell-output-filter): Match
+       current-buffer behavior of comint-output-filter (bug#42870).
+
+       This change (a) sets the current buffer to the process-buffer when
+       invoking preoutput filter functions and (b) only invokes them when the
+       process-buffer is live. Otherwise, the preoutput filter functions be
+       invoked in whatever buffer happens to be focused, breaking hooks that
+       read buffer-local variables.
+
+2020-08-16  Mattias Engdegård  <mattiase@acm.org>
+
+       Stop using calc for ntlm time computation
+
+       * lisp/net/ntlm.el: Don't require calc.
+       (ntlm-compute-timestamp): Use plain arithmetic instead of calc.
+       (ntlm--time-to-timestamp): New helper function.
+
+2020-08-16  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/net/eudc-bob.el (eudc-bob-pipe-object-to-external-program): 
Simplify
+
+       Use `with-temp-buffer`.
+
+2020-08-15  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/net/eudc-bob.el: Use lexical-binding; Misc simplifications
+
+       (eudc-bob-generic-keymap, eudc-bob-image-keymap)
+       (eudc-bob-sound-keymap, eudc-bob-url-keymap, eudc-bob-mail-keymap):
+       Move initialization into declaration.  Use RET rather than `return`.
+       (eudc-jump-to-event): Delete; use `mouse-set-point` instead.
+       (eudc-bob-save-object): Rewrite using `write-region`.
+       (eudc-bob-popup-menu): Use `popup-menu`.
+
+2020-08-15  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix recently-introduced Fdelete bug
+
+       Problem reported by Pip Cet in:
+       https://lists.gnu.org/r/emacs-devel/2020-08/msg00444.html
+       * src/fns.c (Fdelete): Fix correctness bug via a simpler (though more
+       memory-intensive) approach.  It’s probably not worth optimizing
+       the memory usage yere.
+       * test/src/fns-tests.el (test-vector-delete): Add test for the bug.
+
+2020-08-15  Andrea Corallo  <akrl@sdf.org>
+
+       Remove a warning for conventional build
+
+       * src/lread.c (parent_directory): Add ATTRIBUTE_UNUSED.
+
+2020-08-15  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Minimize ‘equal’ calls in (delete x vector)
+
+       * src/fns.c (Fdelete): When deleting from a vector, call Fequal
+       only once per vector element.  This is faster when Fequal is slow,
+       and avoids the need to preinitialize the vector result.  Finish
+       when the result is exhausted, not when the input is exhausted;
+       the two are equivalent but the former may be faster.
+       * test/src/fns-tests.el (test-vector-delete): New test.
+
+2020-08-15  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fdelete speed tweak for strings
+
+       * src/fns.c (Fdelete): Hoist FIXNUMP out of a loop,
+       and turn it into CHARACTERP.
+
+2020-08-15  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Prefer Fvector to make_uninit_vector
+
+       Fvector is less error-prone than make_uninit_vector, as it
+       avoids the possibility of a GC crash due to an uninitialized
+       vector.  So prefer Fvector to make_uninit_vector when this is
+       easy (and when there's no significant performance difference).
+       Inspired by a suggestion by Pip Cet in:
+       https://lists.gnu.org/r/emacs-devel/2020-08/msg00313.html
+       * src/ccl.c (Fregister_ccl_program):
+       * src/ccl.c (Fregister_ccl_program):
+       * src/charset.c (Fdefine_charset_internal):
+       * src/font.c (Fquery_font, Ffont_info, syms_of_font):
+       * src/fontset.c (font_def_new, Fset_fontset_font):
+       * src/ftfont.c (ftfont_shape_by_flt):
+       * src/hbfont.c (hbfont_shape):
+       * src/macfont.m (macfont_shape):
+       * src/search.c (Fnewline_cache_check):
+       * src/xfaces.c (Fx_family_fonts):
+       * src/xfns.c (Fx_window_property_attributes):
+       Prefer Fvector to make_uninit_vector when either is easy.
+       * src/fontset.c (font_def_new): Now a function with one less
+       arg instead of a do-while macro, and renamed from FONT_DEF_NEW.
+       All uses changed.
+
+2020-08-15  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix GC bugs related to uninitialized vectors
+
+       Avoid problems if GC occurs while initializing a vector.
+       Problem with Fdelete reported by Pip Cet in:
+       https://lists.gnu.org/r/emacs-devel/2020-08/msg00313.html
+       I looked for similar problems elsewhere and found quite a few.
+       * src/coding.c (make_subsidiaries):
+       * src/composite.c (syms_of_composite):
+       * src/font.c (build_style_table, Ffont_get_glyphs):
+       * src/nsselect.m (clean_local_selection_data):
+       * src/nsxwidget.m (js_to_lisp):
+       * src/syntax.c (init_syntax_once):
+       * src/window.c (Fcurrent_window_configuration):
+       * src/xselect.c (selection_data_to_lisp_data)
+       (clean_local_selection_data):
+       Use make_nil_vector instead of make_uninit_vector.
+       * src/fns.c (Fdelete):
+       * src/xwidget.c (webkit_js_to_lisp):
+       Use allocate_nil_vector instead of allocate_vector.
+       * src/search.c (Fnewline_cache_check):
+       Use make_vector instead of make_uninit_vector.
+
+2020-08-15  Roland Kaufmann  <rlndkfmn+emacs@gmail.com>  (tiny change)
+
+       Allow build configuration on Apple ARM devices (bug#41994)
+
+       * configure.ac: Add arm as a port target for Darwin.
+
+2020-08-15  Tino Calancha  <tino.calancha@gmail.com>
+
+       Prevent from frozen frame after `C-z' in Lucid builds
+
+       Some WMs (e.g. mutter in Gnome Shell) don't unmap iconized windows,
+       thus we won't get a MapNotify when deconifying them.
+       Check if we are deconifying a window elsewhere (Bug#42655).
+
+       - src/xterm.c (handle_one_xevent):
+       Check for window deconify when receiving a FocusIn signal.
+
+2020-08-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add new variable term-set-terminal-size (not setting LINES/COLUMNS)
+
+       * lisp/term.el (term-set-terminal-size): New variable (bug#37564).
+       (term-exec-1): Use it.  Based on a patch from Matthew Leach
+       <matthew@mattleach.net>.
+
+2020-08-15  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make Gnus stop clobbering the M-s search prefix key binding
+
+       * doc/emacs/misc.texi (Gnus Summary Buffer): Ditto.
+
+       * doc/misc/gnus.texi (Searching for Articles): Document moved M-s
+       (bug#39706).
+
+       * lisp/gnus/gnus-sum.el (gnus-summary-mode-map): Move
+       gnus-summary-search-article-forward to M-s M-s, and add M-s M-r
+       for gnus-summary-search-article-backward.
+
+2020-08-15  Steven Allen  <steven@stebalien.com>
+
+       Fix thinko in setting url-portspec
+
+       * lisp/url/url-expand.el (url-default-expander): Set
+       `url-portspec' (bug#42869).
+
+2020-08-15  Dario Gjorgjevski  <dario.gjorgjevski+git@gmail.com>
+
+       Tweak how ido handles killing virtual buffers
+
+       * lisp/ido.el (ido-buffer-internal): Handle killing of virtual buffers
+       as a special case.
+       (ido-visit-buffer): Document the special case (bug#38294).
+
+2020-08-15  Eli Zaretskii  <eliz@gnu.org>
+
+       Don't wrap lines at NBSP when nobreak-char-display is t
+
+       * src/xdisp.c (get_next_display_element): When
+       nobreak-char-display is t, display NBSP and non-ASCII hyphens as
+       themselves, not as their ASCII counterparts, just with the
+       nobreak-space/nobreak-hyphen face.  (Bug#42811)
+
+2020-08-15  Jari Aalto  <jari.aalto@cante.net>
+
+       Add support for ffap guessing at file names containing spaces
+
+       * lisp/ffap.el (ffap-file-name-with-spaces): New variable (bug#8439).
+       (ffap-search-backward-file-end, ffap-search-forward-file-end)
+       (ffap-dir-separator-near-point): New functions.
+       (ffap-string-at-point): Use the variable and the new functions to
+       guess at files containing strings.
+
+2020-08-15  Eli Zaretskii  <eliz@gnu.org>
+
+       Document the 'flex' completion style
+
+       * doc/emacs/mini.texi (Completion Styles): Document the 'flex'
+       completion style.  (Bug#42763)
+
+2020-08-15  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Pacify Apple clang 11 __builtin_assume
+
+       Problem reported by Mattias Engdegård in:
+       https://lists.gnu.org/r/emacs-devel/2020-08/msg00300.html
+       * src/lisp.h (bool_vector_bitref, bool_vector_set):
+       Use eassert instead of eassume for bool_vector_size checks.
+
+2020-08-15  Amin Bandali  <bandali@gnu.org>
+
+       Add `message' to erc-match.el highlight types
+
+       * lisp/erc/erc-match.el (erc-current-nick-highlight-type,
+       erc-pal-highlight-type, erc-fool-highlight-type,
+       erc-keyword-highlight-type, erc-dangerous-host-highlight-type): Add
+       `message' type for highlighting the entire message but not the
+       sender's nick.
+       (erc-match-message): Check for the new `message' highlight type and
+       propertize the message (not including the nick) accordingly.
+       * etc/NEWS: Announce the addition of the `message' highlight type.
+
+2020-08-15  Paul Eggert  <eggert@cs.ucla.edu>
+           Pip Cet  <pipcet@gmail.com>
+
+       Fix bus error on Debian bullseye
+
+       Problem reported by Lars Ingebrigtsen, and problem diagnosis
+       and most of this patch by Pip Cet (Bug#42832).
+       * src/pdumper.c (dump_bitsets_init): Rename from dump_bitset_init.
+       All callers changed.  Initialize two bitsets with a single malloc
+       call.
+       (struct pdumper_loaded_dump_private): New member last_mark_bits.
+       (pdumper_find_object_type_impl): Return PDUMPER_NO_OBJECT if
+       the last_mark_bits’ bit is clear.
+       (pdumper_set_marked_impl): Assert that the last_mark_bits’
+       bit is set.
+       (pdumper_clear_marks_impl): Save mark_bits into
+       last_mark_bits before clearing mark_bits.
+
+2020-08-14  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove XEmacs compat code from mwheel.el
+
+       * lisp/mwheel.el (mwheel-event-button, mwheel-event-window):
+       Remove XEmacs compat code.
+
+2020-08-14  Noam Postavsky  <npostavs@gmail.com>
+
+       Make configure say so if we have "--with-json" but no jansson support
+
+       * configure.ac (OPTION_DEFAULT_IFAVAILABLE): New macro.  Use it to
+       define the --with-json option.  Add with_json and HAVE_JSON to the
+       'MISSING' checks (bug#39953).
+
+2020-08-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mop up project-kill-buffers-ignores renaming
+
+       * doc/emacs/maintaining.texi (Project Buffer Commands): Update
+       project-kill-buffers-ignores that was renamed recently
+       (bug#41868) (in 2ab66c9f9be923350f123fdea05b5b3ce8283d8a).
+
+2020-08-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Note that Emacs needs systemd support if systemd is used to stop/start
+
+       * etc/NEWS: Note that Emacs needs to be built with systemd support
+       systemd is used to stop/start Emacs (bug#42242).  Change suggested by
+       Bhavin Gandhi <bhavin7392@gmail.com>
+
+2020-08-14  Yuan Fu  <casouri@gmail.com>
+
+       Add two new commands for centering doc-view images
+
+       * lisp/doc-view.el (doc-view-mode-map): Add binding for centering
+       commands.
+       (doc-view-center-page-horizontally, doc-view-center-page-vertically):
+       New functions (bug#42272).
+
+2020-08-14  Gregory Heytings  <ghe@sdf.org>  (tiny change)
+
+       Fix visual fringe glitch in diff-mode
+
+       * lisp/vc/diff-mode.el (diff--font-lock-prettify): Fix problems
+       with visual gaps in the fringes when changing font size (bug#42300).
+
+2020-08-14  Stefan Kangas  <stefankangas@gmail.com>
+
+       Comment to postpone deletion of c-subword-mode
+
+       * lisp/progmodes/subword.el (c-subword-mode): Clarify that this
+       obsolete function alias should not be removed just yet.  There is a
+       copy of this definition in cc-cmds.el, obsolete since 24.3, and it is
+       better to delete both at the same time.
+
+2020-08-14  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/perl-mode.el (perl--syntax-exp-intro-regexp): Bug#42168
+
+       * test/lisp/progmodes/cperl-mode-tests.el: Adjust for `perl-mode`.
+       (cperl-test-ppss): Rename from `cperl-test-face` and change return 
value.
+       (cperl-mode-test-bug-42168): Test the `syntax-ppss` state rather than
+       the font-lock faces, so it works for both `perl-mode` and `cperl-mode`.
+
+2020-08-14  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Make sure we only act on edited widgets in Custom-save
+
+       * lisp/cus-edit.el (Custom-save): Only act on edited widgets in the
+       buffer.  If we attempt to redraw all widgets, we confuse
+       custom-variable-modified-p, or we end up drawing State buttons for
+       all options, including the hidden ones (bug#42801).
+
+2020-08-14  Jonas Bernoulli  <jonas@bernoul.li>
+
+       Parse the whole buffer at once in compile.el
+
+       * lisp/progmodes/compile.el (compilation-next-single-property-change):
+       Parse whole buffer at once (bug#42806).
+
+       Also remove the comment that mentioned that it is an option to do it
+       in one go as we now actually start doing.  As the existence of that
+       comment suggested, there is not really a reason to process the buffer
+       in small chunks.  On the contrary, processing the output in arbitrary
+       units can result in certain constructs not being recognized because
+       they begin in one arbitrary chunk, while ending in another.
+
+2020-08-14  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Unbreak project-find-regexp in Emacs 26.3 (bug#42765)
+
+       * lisp/progmodes/project.el: Depend on xref.  Bump the version.
+
+       * lisp/progmodes/xref.el: Remove 'project' from the list of
+       dependencies.  Depending on Emacs 26.3 already ensures that some
+       version is available.  Bump the version.
+       (xref--process-file-region): Move from project.el with a rename.
+       Update the sole caller.
+       (xref-backend-references): Make compatible with old project.el.
+       Update the docstring.
+
+2020-08-14  Ferdinand Pieper  <git@pie.tf>
+
+       Fix flow filling for flowing multiple flowed lines
+
+       * lisp/mail/flow-fill.el (fill-flowed): Loop until all flowed lines
+       are collected.
+       * test/lisp/mail/flow-fill-tests.el
+       (fill-flow-tests-fill-flowed-decode): Also test for multiple
+       flowed lines (bug#42855).
+
+2020-08-14  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * doc/lispref/searching.texi (Regexp Special): Tweak wording
+
+2020-08-14  Yuan Fu  <casouri@gmail.com>
+
+       Allow doc-view.el to rescale without imagemagick support
+
+       * lisp/doc-view.el (doc-view-mode-p, doc-view-enlarge)
+       (doc-view-scale-reset, doc-view-insert-image): Remove checks for
+       imagemagick (bug#42272) -- Emacs can rescale images without imagemagick.
+
+2020-08-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Change icomplete-show-matches-on-no-input behavior
+
+       * lisp/icomplete.el (icomplete-show-matches-on-no-input): Doc fix.
+       (icomplete-completions): Set completion-content-when-empty.
+
+       * lisp/minibuffer.el (completion-content-when-empty): New variable.
+       (completion--complete-and-exit): Use it (bug#19032).
+
+       Based on a patch by Matthew Leach <matthew@mattleach.net>.
+
+2020-08-14  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove Emacs 22 compat code from semantic
+
+       * lisp/cedet/semantic/bovine/c.el (semantic-c-end-of-macro):
+       Make into obsolete function alias for 'c-end-of-macro'.
+       (semantic-lex-cpp-define, semantic-lex-c-macrobits):
+       * lisp/cedet/semantic/lex-spp.el (semantic-lex-spp-paren-or-list):
+       Adjust callers.
+
+2020-08-14  Stefan Kangas  <stefankangas@gmail.com>
+
+       Make Emacs 20 compat code in derived.el obsolete
+
+       * lisp/emacs-lisp/derived.el (derived-mode-setup-function-name):
+       Declare obsolete.  This was for compatibility with Emacs 20 or older.
+
+2020-08-14  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove many items obsolete since Emacs 23.1
+
+       Emacs 23.1 was five major releases and over a decade ago.
+       This list can be reviewed before to the next release, but for now
+       hopefully this motivates any needed external updates.
+       Ref: 
https://lists.gnu.org/archive/html/emacs-devel/2020-05/msg02198.html
+
+       * lisp/abbrev.el (pre-abbrev-expand-hook):
+       * lisp/bookmark.el (bookmark-read-annotation-text-func)
+       (bookmark-jump-noselect):
+       * lisp/buff-menu.el (buffer-menu-mode-hook):
+       * lisp/cus-edit.el (custom-mode-hook, custom-mode):
+       * lisp/dirtrack.el (dirtrack-debug-toggle, dirtrack-debug):
+       * lisp/emacs-lisp/crm.el (crm-minibuffer-complete)
+       (crm-minibuffer-completion-help)
+       (crm-minibuffer-complete-and-exit):
+       * lisp/emacs-lisp/easymenu.el
+       (easy-menu-precalculate-equivalent-keybindings):
+       * lisp/emacs-lisp/lisp-mode.el (lisp-mode-auto-fill):
+       * lisp/epa.el (epa-display-verify-result):
+       * lisp/epg.el (epg-passphrase-callback-function):
+       * lisp/eshell/eshell.el (eshell-report-bug):
+       * lisp/ffap.el (ffap-bug, ffap-submit-bug):
+       * lisp/files.el (locate-file-completion):
+       * lisp/hi-lock.el (hi-lock-face-history, hi-lock-regexp-history):
+       * lisp/hilit-chg.el (highlight-changes-initial-state)
+       (highlight-changes-active-string)
+       (highlight-changes-passive-string, global-highlight-changes):
+       * lisp/international/mule-cmds.el (nonascii-insert-offset)
+       (nonascii-translation-table):
+       * lisp/international/mule-diag.el (non-iso-charset-alist):
+       * lisp/international/mule-util.el (detect-coding-with-priority):
+       * lisp/international/mule.el (charset-id, charset-bytes)
+       (charset-list, char-valid-p, generic-char-p)
+       (char-coding-system-table, make-coding-system)
+       (set-coding-priority)
+       * lisp/mail/rmail.el (rmail-message-filter):
+       * lisp/minibuffer.el (complete-in-turn, dynamic-completion-table)
+       (completion-common-substring)
+       (minibuffer-local-must-match-filename-map):
+       * lisp/mouse.el (mouse-major-mode-menu, mouse-popup-menubar)
+       (mouse-popup-menubar-stuff):
+       * lisp/net/newst-treeview.el (newsticker-groups-filename):
+       * lisp/obsolete/tpu-edt.el (tpu-have-ispell, GOLD-map):
+       * lisp/password-cache.el (password-read-and-add):
+       * lisp/shell.el (shell-dirtrack-toggle):
+       * lisp/subr.el (forward-point, redisplay-end-trigger-functions)
+       (process-filter-multibyte-p, set-process-filter-multibyte):
+       * lisp/t-mouse.el (t-mouse-mode):
+       * lisp/term/w32-win.el (w32-focus-frame, w32-select-font):
+       * lisp/textmodes/ispell.el (ispell-aspell-supports-utf8):
+       * lisp/textmodes/remember.el (remember-buffer):
+       * lisp/tooltip.el (tooltip-hook):
+       * lisp/url/url-util.el (url-generate-unique-filename):
+       * lisp/url/url-vars.el (url-temporary-directory):
+       * lisp/vc/vc-hooks.el (vc-workfile-version)
+       (vc-default-working-revision):
+       * lisp/vc/vc-mtn.el (vc-mtn-command):
+       * lisp/vc/vc.el (vc-revert-buffer):
+       * lisp/vcursor.el (vcursor-toggle-vcursor-map):
+       Remove items, obsolete since Emacs 23.1.
+       * lisp/abbrev.el (expand-abbrev):
+       * lisp/epg.el (epg-context): Change
+       'epg-passphrase-callback-function' call to 'epa-' alternative.
+       * lisp/eshell/em-rebind.el (eshell-cannot-leave-input-list): Don't
+       refer to removed function 'forward-point'.
+       * test/manual/etags/c-src/abbrev.c (Fexpand_abbrev):
+       (syms_of_abbrev): Don't run removed hook 'pre-abbrev-expand-hook'.
+       * lisp/international/mule.el (transform-make-coding-system-args):
+       Declare obsolete.
+       * lisp/progmodes/idlwave.el:
+       Update reference to removed function 'char-valid-p'.
+       * lisp/gnus/mml2015.el (epg-encrypt-string):
+       * lisp/gnus/mml1991.el (epg-make-context):
+       * lisp/gnus/mml-smime.el (autoload):
+       Remove autoload of removed 'epg-passphrase-callback-function'.
+       * lisp/minibuffer.el (completion-extra-properties):
+       Remove support for `completion-common-substring'.
+       * lisp/obsolete/tpu-edt.el (tpu-toggle-overwrite-mode)
+       Remove support for removed `spell' package.
+       * src/coding.c (syms_of_coding):
+       * doc/misc/efaq.texi:
+       * doc/emacs/frames.texi (Menu Mouse Clicks):
+       * doc/misc/url.texi (Customization): Doc fixes.
+
+2020-08-14  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Preserve the face foreground in Info-fontify-node"
+
+       This reverts commit 1bed252ae9109493133a0cc3e9aad9e9a5ddde37.
+
+       Juri Linkov says:
+
+       This patch breaks Info fontification, please revert it.
+       Here is what I said in the message sent later with another patch at
+       https://debbugs.gnu.org/14645#14
+
+         Using the text property `face' instead of `font-lock-face'
+         might break something, so a better patch below removes
+         the text properties `face info-index-match' from the Info buffer
+
+2020-08-14  Stefan Kangas  <stefankangas@gmail.com>
+
+       Add test for Bug#41761
+
+       * test/lisp/simple-tests.el (simple-test-count-words-bug-41761):
+       New test.
+
+2020-08-14  Daniel Koning  <dk@danielkoning.com>  (tiny change)
+
+       Don't stop at field boundaries when counting words (Bug#41761)
+
+       * lisp/simple.el (count-words): Ensure that `forward-word-strictly'
+       moves point from one field to the next during the word-counting loop.
+
+2020-08-14  Harald Jörg  <haj@posteo.de>
+
+       cperl-mode: Highlight '{$a++ / $b}' correctly
+
+       * lisp/progmodes/cperl-mode.el (cperl-find-pods-heres):
+       Recognize {$a++ / $b} correctly as division.  (Bug#42168)
+       * test/lisp/progmodes/cperl-mode-tests.el: New file with test
+       verifying the fix.
+
+2020-08-14  Andrea Corallo  <akrl@sdf.org>
+
+       Fix excessive echo area usage
+
+       * lisp/emacs-lisp/comp.el (comp-run-async-workers): Use
+       `with-temp-file' to fill temp-file.
+
+2020-08-14  Andrea Corallo  <akrl@sdf.org>
+
+       * src/pdumper.c (dump_do_dump_relocation): Improve error messages.
+
+2020-08-14  Stefan Kangas  <stefankangas@gmail.com>
+
+       Make erc-compat.el obsolete
+
+       * lisp/erc/erc-compat.el: Move from here...
+       * lisp/obsolete/erc-compat.el: ...to here.
+       * lisp/erc/erc-backend.el:
+       * lisp/erc/erc-pcomplete.el:
+       * lisp/erc/erc-stamp.el:
+       * lisp/erc/erc-track.el:
+       * lisp/erc/erc.el: Don't require 'erc-compat'.
+
+       * lisp/erc/erc-backend.el (erc-decode-string-from-target):
+       * lisp/erc/erc-dcc.el (pcomplete/erc-mode/DCC):
+       * lisp/erc/erc-fill.el (erc-fill-mode):
+       * lisp/erc/erc-goodies.el (erc-controls-interpret):
+       * lisp/erc/erc-log.el (erc-log-setup-logging):
+       * lisp/erc/erc-notify.el (erc-notify-QUIT):
+       * lisp/erc/erc.el (erc-startup-file-list, define-erc-module)
+       (erc-canonicalize-server-name, erc-cmd-SV, erc-banlist-update)
+       (erc-group-list, erc-seconds-to-string): Adjust callers.
+       * lisp/erc/erc.el: Require cl-lib and format-spec.
+
+       * etc/NEWS: Add entry announcing erc-compat.el being marked as
+       obsolete.
+
+2020-08-14  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from Gnulib
+
+       This incorporates:
+       2020-08-13 sys_random: Work around an uClibc bug
+       * lib/sys_random.in.h, m4/getrandom.m4, m4/sys_random_h.m4:
+       Copy from Gnulib.
+
+2020-08-14  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix startup working dir bug on NeXTSTEP
+
+       * src/emacs.c (main) [NS_IMPL_COCOA]: Update emacs_wd
+       after a NS GUI chdirs successfully (Bug#42836).
+
+2020-08-13  Stefan Kangas  <stefankangas@gmail.com>
+
+       Add tests for cl-{incf,decf}
+
+       * test/lisp/emacs-lisp/cl-lib-tests.el (cl-lib-test-incf)
+       (cl-lib-test-decf): New tests.
+
+2020-08-13  Alan Third  <alan@idiocy.org>
+
+       Fix slow down when moving between monitors (bug#42834)
+
+       * src/nsterm.m ([EmacsView windowDidChangeBackingProperties:]):
+       Recreate the buffer every time.
+
+2020-08-13  Tobias Zawada  <i_inbox@tn-home.de>  (tiny change)
+
+       Handle nil load-path element in read-library-name
+
+       * lisp/emacs-lisp/find-func.el (read-library-name): Fix handling of
+       nil 'load-path' element.  (Bug#41998)
+
+2020-08-13  Glenn Morris  <rgm@gnu.org>
+
+       Update a paragraphs test
+
+       * test/lisp/textmodes/paragraphs-tests.el
+       (paragraphs-tests-mark-paragraph): Update for recent change.
+
+2020-08-13  Glenn Morris  <rgm@gnu.org>
+
+       Update a compile test
+
+       * test/lisp/progmodes/compile-tests.el (compile-test-error-regexps):
+       Update info/warning count for recent compile.el change.
+
+2020-08-13  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       69568674b3 (origin/emacs-27) Improve documentation of function argume...
+       1c0bc1ccd8 Improve documentation of special events
+
+2020-08-13  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       63f614d76c Fix comint-redirect-results-list regexp usage (Bug#42662)
+
+2020-08-13  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       86d8d76aa3 (tag: emacs-27.1-rc2, tag: emacs-27.1) ; lisp/ldefs-boot.e...
+       a6634197da * etc/HISTORY: Update the Emacs 27.1 release date.
+       a68b3f761a ; Update ChangeLog.3
+       7cc85e7b51 ; Update etc/AUTHORS
+       1ca4da054b ; * etc/NEWS: fix some quoting
+       5578febcd4 ; * lisp/so-long.el: Documentation
+       fa20e443c8 lisp/so-long.el: Improve support for major mode hooks
+
+       # Conflicts:
+       #       etc/AUTHORS
+       #       etc/NEWS
+
+2020-08-13  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of function argument lists
+
+       * doc/lispref/functions.texi (Lambda Components)
+       (Defining Functions): Add a cross-reference to "Argument List".
+       (Argument List): Improve the section name.  (Bug#42750)
+
+2020-08-13  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve documentation of special events
+
+       * doc/lispref/commands.texi (Misc Events): Explain how to bind
+       special events to commands.
+
+2020-08-13  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix face merging at EOL when inherited face specifies :extend
+
+       * src/xfaces.c (merge_face_ref): Handle correctly faces that
+       inherit from another, and in addition specify :extend.
+       (Bug#42552)
+
+       (cherry picked from commit 39c90f8dfabe158ad7ac9243aa9b9dedb9409e19)
+
+2020-08-13  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix face extension past EOL in overlay strings
+
+       * src/xdisp.c (face_at_pos): Pass ATTR_FILTER to
+       face_for_overlay_string.
+       * src/xfaces.c (face_for_overlay_string): Accept an additional
+       argument ATTR_INDEX and pass it to merge_face_ref for merging the
+       face at POS.  This ensures a face from buffer text will not be
+       merged unless it specifies the :extend attribute.  (Bug#42552)
+       * src/dispextern.h (face_for_overlay_string): Adjust prototype.
+
+       (cherry picked from commit 35564bea4d73bc266743216599d01d644aed6fd8)
+
+2020-08-13  Juri Linkov  <juri@jurta.org>
+
+       Preserve the face foreground in Info-fontify-node
+
+       * lisp/info.el (Info-fontify-node): Preserve the face foreground.
+       Previously `Info-index' added the `info-index-match' face to the
+       strings of the found index entries.  Later
+       `Info-virtual-index-find-node' inserts strings to the Info buffer.
+       And finally `Info-fontify-node' puts the `font-lock-face' property
+       with `info-xref' on links.  The `face info-index-match' takes
+       precedence over `font-lock-face info-xref' (bug#14645).
+
+2020-08-13  Ryan Crum  <ryan@ryancrum.org>
+
+       Add a new variable to not recenter term on all input
+
+       * lisp/term.el (term-scroll-snap-to-bottom): New variable (bug#15744).
+       * lisp/term.el (term-emulate-terminal): Use it.
+
+2020-08-13  Andrea Corallo  <akrl@sdf.org>
+
+       * src/pdumper.c (dump_cold_native_subr): Clean-up *IMPLICIT_CONVERSION 
macros.
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-08-13  Dima Kogan  <dima@secretsauce.net>
+
+       gcc-include compilation lines are now INFO, instead of WARNING
+
+       * lisp/progmodes/compile.el
+       (compilation-error-regexp-alist-alist): Prior to this patch the
+       line that contains "from a.h:1:0," was seen as INFO and the line
+       that contains "from a.c:1:" was seen as a WARNING.  This patch
+       makes them both INFO (bug#17826).
+
+2020-08-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Ensure that server-socket-dir doesn't have "//" in the path
+
+       * lisp/server.el (server-socket-dir): Use expand-file-name to
+       avoid "//" in the path name (if either XDG_RUNTIME_DIR or TMPDIR
+       ends in a slash) (bug#18658).
+
+2020-08-13  H. Dieter Wilhelm  <dieter@duenenhof-wilhelm.de>
+
+       Handle negative prefix arguments to mark-paragraph correctly
+
+       * lisp/textmodes/paragraphs.el (mark-paragraph): Handle negative
+       arguments correctly (bug#18847).  This makes `M- M-h M-h' do the
+       correct thing with expanding the region (like other marking
+       commands) backwards.  Also fix problem at the end of the buffer,
+       where the numbers of paragraphs left in the buffer is less than
+       ARG, then paragraphs would also be marked *before* the current
+       paragraph.  Also clarify the doc string.
+
+2020-08-13  Jonas Bernoulli  <jonas@bernoul.li>
+
+       Update section heading conventions for libraries
+
+       * doc/lispref/tips.texi (Comment Tips): Update information on section
+         headings to reflect common usage.
+
+       Previously the tips stated that if the code is split up into multiple
+       sections, then that should be done by splitting up the ";;; Code:"
+       section into multiple sub-sections.
+
+       However about half the libraries in Emacs instead use multiple
+       top-level sections.  We update the tips (aka conventions) to allow
+       this common usage, but because it is awkward if there is a section
+       named "Code", which contains only some of the code instead of all of
+       it, we now recommend that that section should be empty in this case.
+
+       We cannot just give up on the "Code:" section/heading because that is
+       an old convention that is followed be nearly every library and because
+       it is likely that there are some utilities out there that depend on
+       its presence.
+
+       This was discussed in
+       https://lists.gnu.org/archive/html/emacs-devel/2020-07/msg00444.html
+       https://lists.gnu.org/archive/html/emacs-devel/2020-08/msg00001.html
+
+2020-08-13  Jonas Bernoulli  <jonas@bernoul.li>
+
+       * lisp/font-lock.el: No longer use headings as end of section markers.
+
+       Each section ends right before the following section begins and IMO
+       that means that it is unnecessary to mark the end of sections.
+
+       For users of `outline-minor-mode' the old end-of-section markers were
+       a distraction.  They made it much harder to parse the overview outline
+       state because each section heading was followed by a end-of-section
+       marker that was formatted as a section heading.  Because of this I
+       wanted to remove the end-of-section markers.
+
+       But as Eli pointed out these sections are long and not everyone uses
+       `outline-minor-mode'.
+
+       So instead of removing them, I am turning the end-of-section markers
+       into regular comments (beginning with just two semicolons) instead of
+       section headings (beginning with tree semicolons).  That way users of
+       `outline-minor-mode' won't be distracted by them and others can still
+       benefit from the markers as before.
+
+2020-08-13  Jonas Bernoulli  <jonas@bernoul.li>
+
+       * lisp/font-lock.el: Split the Commentary into subsections.
+
+       The "Commentary" was already split into multiple sections, but
+       these sections where on the same level as "Commentary" itself,
+       which is less convenient for users of `outline-minor-mode'.
+
+2020-08-13  Jonas Bernoulli  <jonas@bernoul.li>
+
+       * lisp/net/imap.el: Use proper outline headings
+
+       This library already used section headings but it used just two
+       instead of three semicolons, making them indistinguishable from
+       plain comments.  One heading is new.
+
+2020-08-13  Jonas Bernoulli  <jonas@bernoul.li>
+
+       * lisp/obsolete/longlines.el: Use proper outline headings.
+
+       This library already used section headings but it used just two
+       instead of three semicolons, making them indistinguishable from
+       plain comments.  One heading is new.
+
+2020-08-13  Jonas Bernoulli  <jonas@bernoul.li>
+
+       * test/src/emacs-module-tests.el: Use proper outline headings.
+
+       This library already used section headings but it used just two
+       instead of three semicolons, making them indistinguishable from
+       plain comments.
+
+2020-08-13  Jonas Bernoulli  <jonas@bernoul.li>
+
+       * lisp/mail/smtpmail.el: Use outline headings.
+
+2020-08-13  Jonas Bernoulli  <jonas@bernoul.li>
+
+       * lisp/progmodes/compile.el: Remove unnecessary comments.
+
+       These comments are unnecessary because the doc-strings that follow
+       already cover the same ground, while being more concise.  These
+       comments were also prefixed with too many semicolons, causing them
+       to be treated as outline headings.
+
+2020-08-13  Jonas Bernoulli  <jonas@bernoul.li>
+
+       Merge two conditions and fix indentation
+
+       The motivation behind this change is that the indentation of some
+       lines was outright wrong.  If we address that issue, then we might
+       as well also address the issue that some code is needlessly nested
+       an additional level.  That we can fix by merging the conditions.
+
+       By doing these two changes in on commit we have to change the fewest
+       lines.  Even though we are moving to using just spaces for indentation
+       of the modified lines, other lines in the same function are left alone
+       and continue to us tabs+spaces for indentation.  That is not "wrong",
+       but just the style we are slowly migrating away from when touching
+       lines for other reasons.
+
+       Discussed in bug#42397.
+
+       * lisp/emacs-lisp/eldoc.el (eldoc-minibuffer-message): Merge two
+       conditions and fix indentation.
+
+2020-08-13  Jonas Bernoulli  <jonas@bernoul.li>
+
+       Split EasyPG libraries into outline sections
+
+       * lisp/epa-dired.el:
+       lisp/epa-file.el:
+       lisp/epa-hook.el:
+       lisp/epa-mail.el:
+       lisp/epa.el:
+       lisp/epg-config.el:
+       lisp/epg.el: Split into outline sections.
+       * lisp/epg.el (epg-error): Move definition.
+
+2020-08-13  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't output emacsclient warning if both -a and --quiet
+
+       * lib-src/emacsclient.c (set_local_socket): Don't output the
+       warning if both -a and --quiet are specified (bug#16117).
+       Inspired by a patch from Scott Turner <srt19170@gmail.com>.
+
+2020-08-13  Emilio Lopes  <eclig@gmx.net>
+
+       Notify the user if we errors when querying for registered git files
+
+       * lisp/vc/vc-git.el (vc-git-registered): Notify the user when
+       something fails here (bug#18481).
+
+2020-08-13  Paul Eggert  <eggert@cs.ucla.edu>
+
+       mml-secure-en-decrypt-sign-2 is unstable
+
+       * test/lisp/gnus/mml-sec-tests.el (mml-secure-en-decrypt-sign-2):
+       Mark as unstable (Bug#42720).
+
+2020-08-13  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove Emacs 22 compat code from dns.el
+
+       * lisp/net/dns.el (dns-servers-up-to-date-p, dns-set-servers):
+       Remove check for function that is always there.
+
+2020-08-13  Stefan Kangas  <stefankangas@gmail.com>
+
+       Declare semantic XEmacs compat code obsolete
+
+       * lisp/cedet/semantic/grammar.el
+       (semantic-grammar-setup-menu-xemacs): Declare obsolete.
+
+2020-08-13  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove XEmacs compat code from allout-widgets.el
+
+       * lisp/allout-widgets.el
+       (allout-widgets-item-image-properties-xemacs)
+       (allout-item-widget, allout-fetch-icon-image)
+       (allout-widgets-copy-list): Remove XEmacs compat code.
+
+2020-08-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/net/mailcap.el (mailcap-mime-data): Remove long-forgotten `ee`
+
+       It referred apparently to the "Electric Eyes" image viewer:
+       https://archive.org/details/tucows_31588_Electric_Eyes
+
+2020-08-12  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Stop using Gnulib inttypes module
+
+       It wasn’t needed for MinGW after all, no other platform
+       seems to need it, and it slows down ‘configure’.
+       * admin/merge-gnulib (GNULIB_MODULES): Remove inttypes.
+       * m4/gnulib-comp.m4: Regenerate.
+
+2020-08-12  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from Gnulib
+
+       This incorporates:
+       2020-08-12 stdint: port intptr_t to more-recent MinGW
+       2020-08-11 Use __restrict also on clang
+       2020-08-11 Use flexible array syntax also on clang
+       2020-08-11 fcntl: On native Windows, use _setmode, not setmode
+       * lib/binary-io.h, lib/cdefs.h, lib/fcntl.c, lib/regex.h:
+       * lib/stdint.in.h: Copy from Gnulib.
+
+2020-08-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from mm-util.el
+
+       * lisp/gnus/mm-util.el (mm-charset-to-coding-system): Remove the
+       non-mule case, because it's always false.
+
+2020-08-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Simplify the computation of mm-mime-mule-charset-alist
+
+       * lisp/gnus/mm-util.el (mm-mime-mule-charset-alist): For
+       compatibility with XEmacs, mm-mime-mule-charset-alist was first
+       set to a list of hard-coded entries, and then overwritten on Emacs
+       from `coding-system-list'.  Remove the hard-coded values and
+       simplify the code.
+
+2020-08-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from eudc-bob.el
+
+       * lisp/net/eudc-bob.el (eudc-bob-save-object)
+       (eudc-bob-pipe-object-to-external-program): Remove checks for
+       functions that are always defined in Emacs.
+
+2020-08-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from url-handlers.el
+
+       * lisp/url/url-handlers.el (url-insert-buffer-contents): Remove
+       check for function that's always defined in Emacs.
+
+2020-08-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from gnus.el
+
+       * lisp/gnus/gnus.el: Remove a check for a function that is always
+       defined.
+
+2020-08-12  Amin Bandali  <bandali@gnu.org>
+
+       Add support for italic text in ERC
+
+       * lisp/erc/erc-goodies.el (erc-italic-face): New face for italic text.
+       (erc-controls-interpret), (erc-controls-highlight): Add `italicp'.
+       (erc-controls-remove-regexp),
+       (erc-controls-highlight-regexp): Handle C-] for italic.
+       (erc-controls-propertize): Add `italicp' argument and use it to
+       conditionally propertize text with the new `erc-italic-face'.
+       * etc/NEWS: Announce italic text support.
+
+2020-08-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from viper-cmd.el
+
+       * lisp/emulation/viper-cmd.el (viper-register-to-point):
+       frame-configuration-p is always available in Emacs now.
+
+2020-08-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from viper*.el
+
+       * lisp/emulation/viper.el (viper-go-away, viper-set-hooks)
+       (viper-non-hook-settings, viper-mode):
+       * lisp/emulation/viper-cmd.el (viper-normalize-minor-mode-map-alist)
+       (viper-harness-minor-mode): Remove a bunch of checks to do (or
+       not do) things based on whether add-to-ordered-list is fbound and
+       emulation-mode-map-alists is bound, because in Emacs now, these
+       are always true.
+
+2020-08-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mark some unused defaliases in semantic/fw.el obsolete
+
+       * lisp/cedet/semantic/fw.el (semantic-run-mode-hooks)
+       (semantic-subst-char-in-string): Make two unused defaliases obsolete.
+
+2020-08-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from epa.el
+
+       * lisp/epa.el (epa--derived-mode-p, epa-import-keys): Make
+       defalias obsolete, and adjust a comment.
+
+2020-08-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from bubbles.el
+
+       * lisp/play/bubbles.el (bubbles--remove-overlays): Make into an
+       obsolete alias.
+       (bubbles--initialize, bubbles--show-images): Adjust callers.
+
+2020-08-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix a check for whether Emacs can play sounds in eudc-bob
+
+       * lisp/net/eudc-bob.el (eudc-bob-sound-menu)
+       (eudc-bob-play-sound-at-point): Check for play-sound-internal
+       instead of play-sound, because the latter is always defined.
+
+2020-08-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from allout.el
+
+       * lisp/allout.el (allout-numbered-bullet)
+       (allout-file-xref-bullet): string-or-null-p is always defined.
+
+2020-08-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from allout*.el
+
+       * lisp/allout-widgets.el (allout-widgets-mode-inhibit): Ditto.
+
+       * lisp/allout.el (allout-use-hanging-indents)
+       (allout-show-bodies, allout-old-style-prefixes)
+       (allout-stylish-prefixes): `booleanp' is always defined.
+
+2020-08-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from prolog.el
+
+       * lisp/progmodes/prolog.el (match-string): Remove alias to
+       function that always exists.
+
+2020-08-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from idlwave.el
+
+       * lisp/progmodes/idlwave.el: Remove some checks for functions that
+       always exist.
+
+2020-08-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove some compat code from ediff-init.el
+
+       * lisp/vc/ediff-init.el (subst-char-in-string, format-message):
+       Remove aliases to functions that always exist.
+
+2020-08-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Check make-process to determine if we support multi-processing
+
+       * lisp/eshell/esh-proc.el (eshell-gather-process-output):
+       * lisp/comint.el (make-comint-in-buffer): Check that make-process
+       exists instead of start-file-process (which always exists).
+
+2020-08-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Remove compat code from esh-proc.el"
+
+       This reverts commit 97c4d941daffba1635bd738fae9c4ff36e5ad0cf.
+
+       We still have Emacs builds on systems with no multi-tasking.
+
+2020-08-12  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Remove compat code from comint.el"
+
+       This reverts commit 4d00db5538dc0ef47cf1cdf425b895d04145fe9e.
+
+       We still have Emacs builds on systems with no multi-taskin.
+
+2020-08-12  Tino Calancha  <tino.calancha@gmail.com>
+
+       Do not truncate /foo//bar to /bar/ in parse-colon-path
+
+       * lisp/files.el (parse-colon-path): Use substitute-env-vars and
+       expand-file-name instead of substitute-in-file-name (Bug#21454).
+
+2020-08-12  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove Emacs 23 compat code from checkdoc.el
+
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-run-hooks): Redefine as
+       obsolete function alias for 'run-hook-with-args-until-success'.
+       (checkdoc-this-string-valid-engine)
+       (checkdoc-file-comments-engine): Adjust callers.
+
+2020-08-12  Stefan Kangas  <stefankangas@gmail.com>
+
+       Minor cleanup in ps-def.el
+
+       * lisp/ps-def.el (ps-frame-parameter): Make alias obsolete.
+       * lisp/ps-print.el (ps-begin-job): Adjust caller.
+
+2020-08-12  Phil Sainty  <psainty@orcon.net.nz>
+
+       Fix comint-redirect-results-list regexp usage (Bug#42662)
+
+       * lisp/comint.el (comint-redirect-results-list-from-process):
+       Don't treat the literal string argument COMMAND as a regexp.
+
+2020-08-12  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+
+       Fix monospace font calculations on macOS
+
+       * src/macfont.m (macfont_monospace_width_multiplier): New function
+       to compute the width for monospace fonts (bug#24582).
+       (macfont_glyph_extents): Fix monospace glyph computation.
+       (macfont_shape): Ditto.
+
+2020-08-12  Mingde Matthew Zeng  <matthewzmd@gmail.com>
+
+       Fix erc-reuse-buffers behavior
+
+       * lisp/erc/erc.el (erc-generate-new-buffer-name): Fixes behavior 1,
+       also determines if the '#channel/server' buffer already exists
+       and will reuse that buffer when joining on the same
+       server. Additionally when creating a new buffer with
+       '#channel/serverB', the existing buffer '#channel' on 'severA' will be
+       renamed to '#channel/serverA' for the sake of consistency (bug#40121).
+
+       * lisp/erc/erc-join.el (erc-autojoin-channels): The logic is
+       simplified ensuring that when autojoining channels specified in
+       erc-autojoin-channels-alist, if there exists an erc buffer with the
+       same channel name but a different server, it will create a new buffer
+       to join the channel. The current logic is very weak that will skip
+       joining same channel on different servers altogether.
+
+       By the definition of erc-reuse-buffers, if non-nil it should create a
+       new buffer when joining channels with same names on different
+       servers. The current behavior of erc-reuse-buffers is:
+       1. when non-nil, it will always reuse the same channel buffer,
+       resulting in server A's channel gets reconnected to the channel with
+       the same name of server B.
+       2. when nil, the buffer-name of the joined channel is
+       '#channel/server'. However if one tries to '/join #channel' from the
+       server buffer, it creates a new empty buffer with buffer-name
+       '#channel', instead of opening the already-joined channel buffer.
+
+2020-08-12  Michael Albinus  <michael.albinus@gmx.de>
+
+       Implement Tramp direct async processes fallback for multi-hops
+
+       * doc/misc/tramp.texi (Remote processes): Precise restrictions for 
direct
+       async processes.
+
+       * lisp/net/tramp-adb.el (tramp-adb-handle-make-process):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-make-process):
+       Use `tramp-direct-async-process-p'.
+
+       * lisp/net/tramp.el (tramp-direct-async-process-p): New defun.
+       (tramp-handle-make-process): Adapt handling of :stderr.  Simplify.
+
+2020-08-12  Sungbin Jo  <pcr910303@icloud.com>
+           Jaesup Kwak  <veshboo@gmail.com>
+
+       Add utility functions and new xwidget commands
+
+
+       * lisp/xwidget.el (xwidget-webkit-callback): Add case for
+       'response-callback' event.
+       (xwidget-webkit-download-dir): New variable.
+       (xwidget-webkit-save-as-file): New function.
+       * src/nsxwidget.m (XwWebView::decidePolicyForNavigationResponse):
+       Store download event.
+       * src/xwidget.c src/xwidget.h (store_xwidget_download_callback_event):
+       New function.
+
+2020-08-12  Sungbin Jo  <pcr910303@icloud.com>
+           Jaesup Kwak  <veshboo@gmail.com>
+
+       Add utility functions and new xwidget commands
+
+
+       * etc/NEWS: Announce new functions and options.
+       * lisp/xwidget.el (xwidget): New defgroup.
+       (xwidget-webkit-mode-map): Add new keybindings.
+       (xwidget-webkit-scroll-up, xwidget-webkit-scroll-down)
+       (xwidget-webkit-scroll-forward, xwidget-webkit-scroll-backward):
+       Add optional argument to specify specific amounts to scroll down.
+       (xwidget-webkit-scroll-up-line, xwidget-webkit-scroll-down-line): New
+       functions.
+       (xwidget-webkit-scroll-bottom): Fix function to scroll to the bottom
+       of the document.
+       (xwidget-webkit-callback): Use new function to update buffer title
+       even when Javascript is disabled.
+       (xwidget-webkit-bookmark-jump-new-session): New variable.
+       (xwidget-webkit-bookmark-make-record): Modify to use xwidget-webkit to
+       open bookmark that is created in xwidget-webkit.
+       (xwidget-webkit-insert-string): Fix Javascript snippet to not throw
+       Javascript exceptions.
+       (xwidget-webkit-inside-pixel-width)
+       (xwidget-window-inside-pixel-height): New functions.
+       (xwidget-webkit-adjust-size-to-window): Use new functions.
+       (xwidget-webkit-new-session): Insert invisible URL instead of an empty
+       string to achieve better default behavior.
+       (xwidget-webkit-back, xwidget-webkit-forward, xwidget-webkit-reload)
+       (xwidget-webkit-current-url): Use new functions to enable scrolling
+       even when Javascript is disabled.
+       (xwidget-webkit-copy-selection-as-kill): Remove unnecessary lambda.
+       * src/nsxwidget.h src/nsxwidget.m (nsxwidget_webkit_uri)
+       (nsxwidget_webkit_title, nsxwidget_webkit_goto_history): Add new
+       functions.
+       * src/xwidget.c (Fxwidget_webkit_uri, Fxwidget_webkit_title)
+       (Fxwidget_webkit_goto_history): Add new functions.
+       (syms_of_xwidget): Define new functions.
+
+2020-08-12  Glenn Morris  <rgm@gnu.org>
+
+       Tweak recent solar.el change
+
+       * lisp/calendar/solar.el (sunrise-sunset, solar-equinoxes-solstices):
+       Use +0000 for "numeric" UTC, not +0100.
+
+2020-08-12  Glenn Morris  <rgm@gnu.org>
+
+       Rename recent calendar user option
+
+       * lisp/calendar/calendar.el (calendar-time-zone-style):
+       Rename from calendar-use-numeric-time-zones.
+       * lisp/calendar/cal-dst.el (calendar-standard-time-zone-name)
+       (calendar-daylight-time-zone-name):
+       * lisp/calendar/solar.el (sunrise-sunset, solar-equinoxes-solstices):
+       Use new variable name.
+       * doc/emacs/calendar.texi (Sunrise/Sunset): Update.
+
+2020-08-12  Sungbin Jo  <pcr910303@icloud.com>
+           Jaesup Kwak  <veshboo@gmail.com>
+
+       Add xwidget support for macOS
+
+
+       * configure.ac: Allow '--with-xwidgets' for "${NS_IMPL_COCOA}".
+       * etc/NEWS: Mention new feature.
+       * etc/TODO: Remove done TODO to implement xwidget in NeXTstep port.
+       * lisp/xwidget.el (xwidget-webkit-clone-and-split-below)
+       (xwidget-webkit-clone-and-split-right): New procedures.
+       (xwidget-webkit-callback): Remove call to
+       'xwidget-webkit-adjust-size-to-window' as adjusting xwidget size is
+       handled in 'x_draw_xwidget_glyph_string'.
+       (xwidget-webkit-enable-plugins): New variable.
+       * nextstep/templates/Info.plist.in: Add 'NSAppTransportSecurity'.
+       * src/Makefile.in: Add nsxwidget.o for compilation.
+       * src/emacs.c (main): Move conditional call to 'syms_of_xwidget'.
+       * src/nsterm.m (ns_draw_glyph_string): Add case for 'XWIDGET_GLYPH'.
+       (note_mouse_movement mouseMoved): Make it easy to resize window by
+       dragging mode-line or vertical separator adjacent to large glyph.
+       * src/nsxwidget.h src/nsxwidget.m: Newly added files, xwidget webkit
+       backend for macOS Cocoa.
+       * src/xwidget.c (Fmake_xwidget, xwidget_init_view)
+       (x_draw_xwidget_glyph_string, xwidget_is_web_view)
+       (Fxwidget_webkit_goto_uri, Fxwidget_webkit_zoom, Fxwidget_resize)
+       (Fxwidget_size_request, Fdelete_xwidget_view, xwidget_end_redisplay)
+       (kill_buffer_xwidgets): Add macOS Cocoa specific functions and code
+       with 'NS_IMPL_COCOA' and guard GTK specific functions and code with
+       'USE_GTK'.
+       (x_draw_xwidget_glyph_string): Handle adjusting xwidget size.
+       * src/xwidget.h (xwidget, xwidget_view): Add macOS Cocoa specific
+       fields with 'NS_IMPL_COCOA' and guard GTK specific fields with
+       USE_GTK.
+
+2020-08-12  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove comment on Burma / Myanmar (Bug#42788)
+
+       * lisp/language/burmese.el: Remove comment on Burma / Myanmar.
+
+2020-08-12  Stefan Kangas  <stefankangas@gmail.com>
+
+       Avoid ambiguity about what st refers to
+
+       * lisp/term/st.el: Add link to website.
+
+2020-08-12  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Don’t warn about integer conversion in pdumper.c
+
+       Problem reported by Juanma Barranquero in:
+       https://lists.gnu.org/r/emacs-devel/2020-08/msg00279.html
+       and a similar glitch was reported by Eli Zaretskii (Bug#36597#67).
+       * src/pdumper.c: Remove -Wconversion pragma.
+       (ALLOW_IMPLICIT_CONVERSION, DISALLOW_IMPLICIT_CONVERSION):
+       Remove.  All uses removed.  Although -Wconversion may have
+       been helpful when writing pdumper.c it is now causing more
+       trouble than it’s worth here (just as in the rest of Emacs).
+       (dump_read_all): Avoid no-longer-necessary use of ‘size_t’
+       rather than ‘int’.
+
+2020-08-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove compat code from autoload.el
+
+       * lisp/emacs-lisp/autoload.el (autoload--make-defs-autoload):
+       register-definition-prefixes is in subr.el, so it shouldn't be
+       necessary to check whether it's defined.
+
+2020-08-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove compat code from comint.el
+
+       * lisp/comint.el (make-comint-in-buffer): `start-file-process' is
+       always defined, so remove test.
+
+2020-08-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove compat code from esh-proc.el
+
+       * lisp/eshell/esh-proc.el (eshell-gather-process-output):
+       `start-file-process' is always defined, so remove the code that
+       deals with Emacs versions that doesn't have it.
+
+2020-08-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove compat code from allout.el
+
+       * lisp/allout.el: (allout-process-exposed): Make
+       allout-region-active-p an obsolete alias, and adjust callers.
+
+2020-08-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove compat code in prolog.el
+
+       * lisp/progmodes/prolog.el (use-region-p): Remove compat code.
+
+2020-08-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Slight allout.el clean-up
+
+       * lisp/allout.el (allout-end-of-line, allout-mark-active-p): Make
+       allout-mark-active-p obsolete, and adjust callers.
+
+2020-08-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Minor idlwave clean up
+
+       * lisp/progmodes/idlw-shell.el (idlwave-shell-mouse-examine)
+       (idlwave-shell-print): Adjust callers.
+
+       * lisp/progmodes/idlwave.el (idlwave-region-active-p): Make into
+       obsolete alias.
+
+2020-08-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Slight gnus-util clean-up
+
+       * lisp/gnus/gnus-util.el (gnus-message-with-timestamp-1):
+       messages-buffer is always defined.
+
+2020-08-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Slight cleanup in calc-yank
+
+       * lisp/calc/calc-yank.el (calc-yank): Remove compat code.
+
+2020-08-11  Philipp Stephani  <phst@google.com>
+
+       Unbreak build with --enable-checking=all
+
+       Commit 16a16645f524c62f7906036b0e383e4247b58de7 has only changed a
+       comment in ‘struct Lisp_Hash_Table’, so the portable dumper doesn’t
+       need to be adapted.
+
+       * src/pdumper.c (dump_hash_table): Update hash code for ‘struct
+       Lisp_Hash_Table’.
+
+2020-08-11  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Use Gnulib inttypes module
+
+       Needed for platforms like MinGW that don’t support C99 PRIdPTR.
+       * admin/merge-gnulib (GNULIB_MODULES): Add inttypes.
+       * m4/gnulib-comp.m4: Regenerate.
+
+2020-08-11  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from Gnulib
+
+       This incorporates:
+       2020-08-11 Use expression statements also on clang
+       2020-08-10 Use many __attribute__s with clang
+       2020-08-09 Use attribute __aligned__ with clang
+       2020-08-09 Use __alignof__ with clang
+       2020-08-09 ignore-value: Simplify on clang
+       2020-08-09 Use __typeof__ with clang
+       2020-08-09 intprops: Fix typo in comment
+       2020-08-09 Silence warnings from clang 10 with -Wimplicit-fallthrough
+       2020-08-09 count-one-bits: Use __builtin_popcount{,l,ll} on clang
+       2020-08-09 string: Fix build error in C++ mode with clang
+       2020-08-09 Add ability to emit user-defined diagnostics with clang
+       2020-08-07 alloca: No need to compile alloca.c with clang
+       2020-08-06 Use __builtin_assume with clang
+       * lib/alloca.in.h, lib/arg-nonnull.h, lib/c++defs.h, lib/cdefs.h:
+       * lib/count-one-bits.h, lib/dirent.in.h, lib/ignore-value.h:
+       * lib/intprops.h, lib/malloca.h, lib/regex_internal.h:
+       * lib/stdalign.in.h, lib/stddef.in.h, lib/stdio.in.h:
+       * lib/stdlib.in.h, lib/string.in.h, lib/verify.h, lib/warn-on-use.h:
+       * m4/gnulib-common.m4, m4/stddef_h.m4, m4/stdint.m4:
+       Copy from Gnulib.
+
+2020-08-11  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Prefer make_nil_vector to make-vector with nil
+
+       * src/pdumper.c (hash_table_thaw): Pacify -Wconversion so
+       we can use make_nil_vector again.
+       * src/timefns.c (syms_of_timefns): Prefer make_nil_vector
+       to make_vector with Qnil.
+
+2020-08-11  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix MinGW build broken by recent pdumper changes.
+
+       * src/pdumper.c (hash_table_thaw): Use Fmake_vector.  Suggested by
+       Pip Cet <pipcet@gmail.com>.
+       (dump_trace): Declare ATTRIBUTE_FORMAT_PRINTF, not
+       ATTRIBUTE_FORMAT((__printf__), so that we pick the right attribute
+       for MinGW.
+
+2020-08-11  Bastian Beischer  <bastian.beischer@rwth-aachen.de>  (tiny change)
+
+       Make mouse-2 respect select-enable-primary etc
+
+       * lisp/calc/calc-yank.el (calc-yank-internal): Factor out into its
+       own function (bug#23629).
+       (calc-yank): Factored out from here.
+       (calc-yank-mouse-primary): New command to
+
+2020-08-11  Robert Weiner  <rsw@gnu.org>
+
+       Allow count-lines to ignore invisible lines
+
+       * doc/lispref/positions.texi (Text Lines): Document it (bug#23675).
+
+       * lisp/simple.el (count-lines): Add an optional parameter to
+       ignore invisible lines (bug#23675).
+
+2020-08-11  Michael Albinus  <michael.albinus@gmx.de>
+
+       * lisp/net/tramp.el: Make last change backward compatible.
+
+2020-08-11  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix face merging at EOL when inherited face specifies :extend
+
+       * src/xfaces.c (merge_face_ref): Handle correctly faces that
+       inherit from another, and in addition specify :extend.
+       (Bug#42552)
+
+2020-08-11  Robert Weiner  <rsw@gnu.org>
+
+       Add new commands for environment movement in .texi files
+
+       * lisp/textmodes/texinfo.el (texinfo-mode-map): New keystrokes for
+       environment movement commands (bug#23985).
+
+2020-08-11  Puneeth Chaganti  <punchagan@muse-amuse.in>
+
+       Allow specifying the callback in new xwidget sessions
+
+       * lisp/xwidget.el (xwidget-webkit-new-session): Optional callback
+       arg (bug#24019).
+       (xwidget-event-handler): Respect the 'callback parameter.
+
+2020-08-11  Noam Postavsky  <npostavs@gmail.com>
+
+       Fix (end-of-defun N) for N >= 2
+
+       * lisp/emacs-lisp/lisp.el (end-of-defun): Only skip to next line when
+       after end of defun when ARG is 1 or less.
+       * test/lisp/emacs-lisp/lisp-tests.el (end-of-defun-twice): New
+       test (bug#24427).
+
+2020-08-11  Tino Calancha  <tino.calancha@gmail.com>
+
+       Change the Calc text input method to insert at point
+
+       * lisp/calc/calc.el (calcDigit-delchar): New command to delete chars
+       forward in the calc minibuffer.
+       (calc-digit-map): Bind calcDigit-delchar to '\C-d'.
+       (calcDigit-key): Do not go to (point-max) in calc minibuffer
+       before insert a digit (Bug#24612).
+
+2020-08-11  Alexander Gramiak  <agrambot@gmail.com>
+
+       Only search for a variable when instructed
+
+       * lisp/help-fns.el (find-lisp-object-file-name): Check for 'defvar
+       argument before searching for an internal variable (Bug#24697).
+       * test/lisp/help-fns-tests.el: New tests.
+
+2020-08-11  Kaushal Modi  <kaushal.modi@gmail.com>
+
+       Allow Dired to dereference symbolic links when copying
+
+       * doc/emacs/dired.texi (Operating on Files): Mention the new
+       defcustom (bug#25075).
+       * lisp/dired-aux.el (dired-do-copy): Invert the value of
+       `dired-copy-dereference' in lexical scope when prefix argument is
+       '(4). Update function documentation for the new defcustom.
+
+       * lisp/dired-aux.el (dired-copy-file): Use `dired-copy-dereference' as
+       the `dereference' argument to `dired-copy-file-recursive'.
+
+       * lisp/dired-aux.el (dired-copy-file-recursive): Add new optional
+       argument `dereference'.
+
+       * lisp/dired.el (dired-copy-dereference): New defcustom, defaults to
+       nil.
+
+2020-08-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mark further mml-sec-tests as unstable
+
+       * test/lisp/gnus/mml-sec-tests.el (mml-secure-en-decrypt-sign-3):
+       (mml-secure-en-decrypt-sign-1-3-double): These tests are unstable
+       on Ubuntu (bug#42803).
+
+2020-08-11  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Further tweaks to the user manual about shell-command-buffer-name
+
+       * doc/emacs/misc.texi (Single Shell): Reintroduce the actual
+       buffer names in the user manual (bug#39138), but keep the
+       references to the variables.  It's easier for people reading the
+       user manual to deal with actual names.
+
+2020-08-11  Paul Eggert  <eggert@cs.ucla.edu>
+
+       pdumper avoid listing hash table contents
+
+       * src/pdumper.c (hash_table_contents): Create a vector directly,
+       instead of creating a list and then converting that to a vector.
+
+2020-08-11  Paul Eggert  <eggert@cs.ucla.edu>
+
+       pdumper speed tweeks for hash tables
+
+       * src/pdumper.c (dump_queue_empty_p): Avoid unnecessary call
+       to Fhash_table_count on a known hash table.
+       (dump_hash_table_list): !NILP, not CONSP.
+       (hash_table_freeze, hash_table_thaw): ASIZE, not Flength, on vectors.
+       Initialize in same order as struct.
+       (hash_table_thaw): make_nil_vector, not Fmake_vector with nil.
+
+2020-08-11  Paul Eggert  <eggert@cs.ucla.edu>
+
+       In pdumper, simplify INT_MAX computation
+
+       * src/pdumper.c (dump_read_all): Avoid unnecessary cast.
+       Also, round down to page size, as sysdep.c does.
+       Also, don’t assume INT_MAX <= UINT_MAX (!).
+
+2020-08-11  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Don’t needlessly convert to ‘unsigned’ in pdumper
+
+       * src/pdumper.c (PRIdDUMP_OFF): New macro.
+       (EMACS_INT_XDIGITS): New constant.
+       (struct dump_context): Use dump_off for relocation counts.
+       All uses changed.
+       (dump_queue_enqueue, dump_queue_dequeue, Fdump_emacs_portable):
+       Don’t assume counts fit in ‘unsigned’ or ‘unsigned long’.
+       Use EMACS_INT_XDIGITS instead of assuming it’s 16.
+
+2020-08-11  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * src/pdumper.c (pdumper_load): XSETVECTOR -> make_lisp_ptr.
+
+       * src/fns.c (hash_table_rehash): Help the compiler a bit.
+
+2020-08-11  Pip Cet  <pipcet@gmail.com>
+
+       Rehash hash tables eagerly after loading a dump
+
+       This simplifies code, and helps performance in some cases (Bug#36597).
+       * src/lisp.h (hash_rehash_needed_p): Remove.  All uses removed.
+       (hash_rehash_if_needed): Remove.  All uses removed.
+       (struct Lisp_Hash_Table): Remove comment about rehashing hash tables.
+       * src/pdumper.c (thaw_hash_tables): New function.
+       (hash_table_thaw): New function.
+       (hash_table_freeze): New function.
+       (dump_hash_table): Simplify.
+       (dump_hash_table_list): New function.
+       (hash_table_contents): New function.
+       (Fdump_emacs_portable): Handle hash tables by eager rehashing.
+       (pdumper_load): Restore hash tables.
+       (init_pdumper_once): New function.
+
+2020-08-11  Stefan Kangas  <stefankangas@gmail.com>
+
+       Fix \epsilon and \varepsilon in TeX input method
+
+       * lisp/leim/quail/latin-ltx.el: Add correct \epsilon and \varepsilon
+       characters to TeX input method.  (Bug#26060)
+
+2020-08-10  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix fontification of outdated TeX form
+
+       * lisp/textmodes/tex-mode.el (tex-font-lock-keywords-2): End the
+       expression before the terminating $ in constructions like $\it
+       identifiername$
+       (bug#28277). This avoids italicising the final $ character.
+
+       This fixes the final $ of the final test case here:
+
+       $foo$
+       \textit{foo}
+       {\it foo}
+       $\mathit{identifiername}$
+       $\textit{identifiername}$
+       ${\it identifiername}$
+       $\it identifiername$
+
+2020-08-10  Stefan Kangas  <stefankangas@gmail.com>
+
+       Add new command apropos-function (Bug#41021)
+
+       * lisp/apropos.el (apropos-function): New command.
+       * etc/NEWS: Announce it.
+
+2020-08-10  Charles A. Roelli  <charles@aurox.ch>
+
+       Change 'M-:' to not error out on incomplete expressions
+
+       * lisp/simple.el (read--expression-try-read): New function to read
+       a Lisp expression from the minibuffer (bug#30697).  This will not
+       (as before) signal an error on incomplete expressions, but allow
+       users to continue editing it.
+       (read--expression): Use it (and add a doc string).
+
+2020-08-10  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix problem with /- incorrectly starting a comment in SQL mode
+
+       * lisp/progmodes/sql.el (sql-mode): Move all the syntax setup
+       stuff here (bug#35646).  Add handling of -* and /- from Kristian
+       Hole <kristian@hole.priv.no>.
+
+2020-08-10  Stefan Kangas  <stefankangas@gmail.com>
+
+       Add term/st.el (Bug#33182)
+
+       This is a copy of term/konsole.el with konsole -> st.
+       * lisp/term/st.el: New file.
+
+2020-08-10  Matthew Bauer  <mjbauer95@gmail.com>
+
+       Add zsh extended_history handling for comint.el input ring
+
+       * lisp/comint.el (comint-input-ring-file-prefix): New variable
+       (bug#36034).
+       (comint-read-input-ring): Use it.
+
+       * lisp/shell.el (shell-mode): Set it.
+
+2020-08-10  Stefan Kangas  <stefankangas@gmail.com>
+
+       * lisp/vt100-led.el: Use lexical-binding.
+
+2020-08-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Revert "Indent python multiline strings to start and previous levels"
+
+       This reverts commit b78583cde7d8aaa1fa19c20975c03d689c78baef.
+
+       The multi-line string indentation was incorrect after applying this 
patch.
+
+2020-08-09  Matthew White  <mehw.is.me@inventati.org>
+
+       Add ability to mark/unmark/delete all bookmarks
+
+       Thanks to Karl Fogel for pre-commit review.
+
+       * lisp/bookmark.el (bookmark-delete-all): New function to delete all
+         bookmarks.
+         (bookmark-bmenu-mark-all): New function to mark all bookmarks in the
+         bookmark list buffer.
+         (bookmark-bmenu-unmark-all): New function to unmark all bookmarks in
+         the bookmark list buffer.
+         (bookmark-bmenu-delete-all): New function to mark for deletion all
+         bookmarks in the bookmark list buffer.
+         (bookmark-map): Map "D" to `bookmark-delete-all'.
+         (bookmark-bmenu-mode-map): New mapping for "M" to
+         `bookmark-bmenu-mark-all'.
+         (bookmark-bmenu-mode-map): New mapping for "U" to
+         `bookmark-bmenu-unmark-all'.
+         (bookmark-bmenu-mode-map): New mapping for "D" to
+         `bookmark-bmenu-delete-all'.
+         (bookmark-bmenu-mark-all): New bookmark menu to
+         `bookmark-delete-all'.
+         (easy-menu-define): New bookmark menu to `bookmark-bmenu-mark-all'.
+         (easy-menu-define): New bookmark menu to
+         `bookmark-bmenu-unmark-all'.
+         (easy-menu-define): New bookmark menu to
+         `bookmark-bmenu-delete-all'.
+         (bookmark-bmenu-select): Update docstring to include a reference to
+         `bookmark-bmenu-mark-all'.
+         (bookmark-bmenu-mode): Update docstring. Add/Update description:
+         `bookmark-bmenu-mark-all', `bookmark-bmenu-delete-all',
+         `bookmark-bmenu-execute-deletions', and `bookmark-bmenu-unmark-all'.
+       * test/lisp/bookmark-resources/test-list.bmk: New bookmark file to
+         test a list of bookmarks.
+       * test/lisp/bookmark-tests.el (bookmark-tests-bookmark-file-list): New
+         reference to the bookmark file used for testing a list of bookmarks.
+         (bookmark-tests-bookmark-list-0, bookmark-tests-bookmark-list-1,
+         bookmark-tests-bookmark-list-2): New cached values for testing a
+         list of bookmark.
+         (bookmark-tests-cache-timestamp-list): New variable to set
+         `bookmark-bookmarks-timestamp'.
+         (with-bookmark-test-list): New macro environment to test a list of
+         bookmarks.
+         (with-bookmark-test-file-list): New macro environment to test a list
+         of bookmarks with example.txt.
+         (with-bookmark-bmenu-test-list): New macro environment to test
+         functions about a list of bookmarks from `bookmark-bmenu-list'.
+         (bookmark-tests-all-names-list, bookmark-tests-get-bookmark-list,
+         bookmark-tests-get-bookmark-record-list): New functions to test the
+         records of the list of bookmarks.
+         (bookmark-tests-make-record-list): New function to test the creation
+         of a record from example.txt with a list of bookmarks loaded.
+         (bookmark-tests-delete-all): New function to test
+         `bookmark-delete-all'.
+         (bookmark-test-bmenu-any-marks-list): New function to test
+         `bookmark-bmenu-any-marks' with a list of bookmarks.
+         (bookmark-test-bmenu-mark-all): New function to test
+         `bookmark-bmenu-mark-all'.
+         (bookmark-test-bmenu-unmark-all): New function to test
+         `bookmark-bmenu-unmark-all'.
+         (bookmark-test-bmenu-delete-all): New function to test
+         `bookmark-bmenu-delete-all'.
+
+2020-08-09  Wolfgang Scherer  <wolfgang.scherer@gmx.de>
+
+       Use one src status -a call for vc-src-dir-status-files
+
+       lisp/vc/vc-src.el: (vc-src--parse-state) new function.
+       (vc-src-state) use vc-src--parse-state.
+       (vc-src-dir-status-files) use recursive calls to `src status -a' 
(bug#39502).
+
+2020-08-09  Kristian Hole  <kristian@hole.priv.no>  (tiny change)
+
+       Adds backslash as escape character to mysql syntax-alist
+
+       * lisp/progmodes/sql.el (sql-product-alist): The \ character is an
+       escape character in mysql (bug#37459).
+       (sql-mode): Changes the example from the incorrect use of
+       punctuation rule, to the escape character rule.
+
+2020-08-09  Carlos Pita  <carlosjosepita@gmail.com>
+
+       Indent python multiline strings to start and previous levels
+
+       * lisp/progmodes/python.el (python-indent--calculate-indentation):
+       Add an additional indentation point to match indentation of
+       previous line in a multiline string.  Then Tab iterates between 0,
+       the start indentation level and the previous line level
+       (bug#37726).
+
+2020-08-09  Philipp Stephani  <phst@google.com>
+
+       * src/json.c (lisp_to_json): Simplify.
+
+2020-08-09  Stefan Kangas  <stefankangas@gmail.com>
+
+       Revert obsoletion of manual-entry
+
+       Ref: 
https://lists.gnu.org/archive/html/emacs-devel/2020-08/msg00167.html
+
+       * lisp/man.el (manual-entry): Revert obsoletion of this alias.
+
+2020-08-09  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix recently added documentation bits
+
+       * lisp/simple.el (async-shell-command-buffer)
+       (async-shell-command, shell-command, shell-command-on-region):
+       * lisp/dired-aux.el (dired-do-async-shell-command)
+       (dired-do-shell-command):
+       * doc/misc/tramp.texi (Remote processes):
+       * doc/emacs/misc.texi (Single Shell):
+       * etc/NEWS: Fix wording and punctuation of recently added
+       documentation.
+
+2020-08-09  Carlos Pita  <carlosjosepita@gmail.com>
+
+       Improve client/daemon xdg/systemd experience
+
+       * Makefile.in: Add emacsclient.desktop generation.
+       * etc/emacsclient.desktop: Add file, use emacsd as StartupWMClass.
+       * etc/emacs.service: Run with name emacsd (bug#37847).
+
+2020-08-09  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/bytecomp.el: Guard against double native compilation.
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-08-09  Damien Cassou  <damien@cassou.me>
+
+       Add the new library hierarchy.el
+
+       * lisp/emacs-lisp/hierarchy.el: New file.
+
+2020-08-09  Andrii Kolomoiets  <andreyk.mad@gmail.com>
+
+       vc-hg: use 'hg summary' to populate vc-dir headers
+
+       * lisp/vc/vc-hg.el (vc-hg-dir-extra-headers): Use 'hg summary' command.
+       (vc-hg-dir-extra-header): Remove unused function.
+       * etc/NEWS: Mention changes to vc-hg.el (bug#38387).
+
+2020-08-09  Andrii Kolomoiets  <andreyk.mad@gmail.com>
+
+       vc-hg-create-tag: Possibility to create a branch
+
+       * lisp/vc/vc-hg.el (vc-hg-create-bookmark): New user option.
+       (vc-hg-create-tag): Use it (bug#38425).
+
+2020-08-09  Tino Calancha  <tino.calancha@gmail.com>
+
+       Add constants for shell command output buffer names
+
+       Buffers `*Shell Command Output*' and `*Async Shell Command*'
+       have been around since a long time; used across several libraries,
+       they are de facto output buffers for shell commands.
+
+       * lisp/simple.el (shell-command-buffer-name)
+       (shell-command-buffer-name-async): New variables.
+       * lisp/dired-aux.el
+       * lisp/gnus/gnus-sum.el
+       * lisp/gnus/gnus-win.el
+       * lisp/ibuf-ext.el
+       * lisp/net/tramp.el: Use them.
+
+       * etc/NEWS (Changes in Emacs 28.1): Announce this change.
+
+       * doc/emacs/misc.texi (Single Shell)
+       * doc/misc/tramp.texi (Remote processes):
+       Update manual (bug#39138).
+
+2020-08-09  Jorge P. de Morais Neto  <jorge+list@disroot.org>  (tiny change)
+
+       TUTORIAL: "buffer" vs "file" consistency; capitalize Dired
+
+       * etc/tutorials/TUTORIAL: For consistency with C-x s ("save some
+       buffers") and for accuracy, describe C-x C-s as "Save buffer to
+       file"), and then C-x s as "Save some buffers to their files"
+       (bug#39359).  Also capitalize "Dired".
+
+2020-08-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make solar commands in Calendar less beepy
+
+       * lisp/calendar/solar.el (solar-setup): Remove a (beep) that's
+       been in this code since 1992 (bug#42774).
+
+2020-08-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a command line (and MIME handler) function to start eww
+
+       * lisp/net/eww.el (eww-browse): New command (bug#42768) to be used
+       from the command line.
+
+       * doc/misc/eww.texi (Command Line): Document it.
+
+2020-08-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Doc string fix for message-mailto
+
+       * lisp/gnus/message.el (message-mailto): Doc string fix.
+
+2020-08-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Slight code clean-up in message-mailto
+
+       * lisp/gnus/message.el (message-mailto): Clean up code slightly.
+
+2020-08-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a variable to allow displaying numeric time zones
+
+       * lisp/calendar/calendar.el (calendar-use-numeric-time-zones): New
+       variable.
+
+       * doc/emacs/calendar.texi (Sunrise/Sunset): Document it (bug#33149).
+
+       * lisp/calendar/cal-dst.el (calendar-standard-time-zone-name): Use it.
+       (calendar-daylight-time-zone-name): Ditto.
+
+       * lisp/calendar/solar.el (sunrise-sunset): Adjust usage.
+       (solar-equinoxes-solstices): Ditto.
+
+2020-08-09  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove superfluous code from the previous '' sql string fix
+
+       * lisp/progmodes/sql.el (sql-mode): Remove setting that's now
+       superfluous from previous check-in.
+
+2020-08-09  Juri Linkov  <juri@linkov.net>
+
+       * lisp/custom.el (custom-add-choice): Fix previous commit.
+
+2020-08-08  Glenn Morris  <rgm@gnu.org>
+
+       * lisp/outline.el (outline-minor-mode-prefix): Fix compilation.
+
+2020-08-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Document the OpenPGP header
+
+       * doc/misc/message.texi (Using the OpenPGP Header): Document the
+       OpenPGP header (bug#39964).
+
+2020-08-08  Philip K  <philip.kaludercic@fau.de>
+
+       Add support for the OpenPGP header to Emacs
+
+       * lisp/gnus/message.el (message-openpgp-header): New variable
+       (bug#39964).
+       (messasge-add-openpgp-header): New function to use it.
+
+2020-08-08  Florian v. Savigny  <f.savigny@mailbox.org>
+
+       Handle '' in strings in SQL Mode
+
+       * lisp/progmodes/sql.el
+       (sql--syntax-propertize-escaped-apostrophe): Handle '' in strings
+       (bug#40231).
+       (sql-mode): Use it.
+
+2020-08-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Modernise a code example in os.texi
+
+       * doc/lispref/os.texi (Session Management): Use
+       with-current-buffer in the example instead of save+switch (bug#40341).
+
+2020-08-08  Bruno Félix Rezende Ribeiro  <oitofelix@gnu.org>  (tiny change)
+
+       * doc/lispref/os.texi (Session Management): Make example homoiconic
+
+       * doc/lispref/os.texi (Session Management): Don't insert Lisp as
+       strings, but use format (bug#40341).
+
+2020-08-08  Fabrice Niessen  <fniessen@pirilampo.org>
+
+       Update Leuven-theme
+
+       * etc/themes/leuven-theme.el (class): Update theme (bug#40759).
+
+2020-08-08  Philip K  <philip@warpmail.net>
+
+       Use write-region when saving recentf file
+
+       * lisp/recentf.el (recentf-save-list): Don't generate backups for
+       recentf files (bug#41060).
+
+2020-08-08  Philip K  <philip@warpmail.net>
+
+       outline-minor-mode-prefix is a key sequence, not a string
+
+       * lisp/outline.el (outline-minor-mode-prefix): Fix the type (bug#41072).
+
+2020-08-08  Philip K  <philip@warpmail.net>
+
+       Make Customize changes to outline-minor-mode-prefix happen immediately
+
+       * lisp/outline.el (outline-minor-mode-prefix): Update the key map
+       after changing the value in Customize (bug#41073).
+
+2020-08-08  Matthias Meulien  <orontee@gmail.com>
+
+       lisp/bookmark.el: Customize choice to show bookmark list in a new tab
+
+       * lisp/bookmark.el (bookmark-bmenu-get-buffer): Add as a choice
+       for new-tab targets (bug#41225).
+
+2020-08-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add new utility function custom-add-choice
+
+       * lisp/custom.el (custom-add-choice): New function (bug#41225).
+
+2020-08-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix up previous list-buffers patch to work when there's no buffer
+
+       * lisp/buff-menu.el (Buffer-menu--dynamic-name-width): Use apply
+       #'max instead of seq-max since the list may be empty.
+
+2020-08-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mark an mml-sec test as unstable
+
+       * test/lisp/gnus/mml-sec-tests.el
+       (mml-secure-en-decrypt-sign-1-1-single): Mark the test as unstable
+       (bug#42720).  It sometimes fails on some systems (Fedora?) when
+       run with "-j5", so there may be a race condition in the code somewhere.
+
+2020-08-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak how whitespace-mode marks the end of the buffer
+
+       * lisp/whitespace.el (whitespace-missing-newline-at-eof): Change
+       the colours to not be as angry.
+       (whitespace-color-on): Don't mark the end of the buffer if point
+       is there.
+
+2020-08-08  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make the name column in 'list-buffers' have a dynamic width
+
+       * lisp/buff-menu.el (Buffer-menu--dynamic-name-width): New
+       function (bug#30692).
+       (Buffer-menu-name-width): Default to using it.
+       (list-buffers--refresh): Call it.
+
+       * lisp/emacs-lisp/seq.el (seq-max): Add autoload cookie.
+
+2020-08-08  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in saveplace.el and add tests
+
+       * lisp/saveplace.el: Use lexical-binding.
+       (save-place-to-alist): Doc fix.
+       * test/lisp/saveplace-tests.el:
+       * test/lisp/saveplace-resources/saveplace: New files.
+
+2020-08-07  Stefan Kangas  <stefankangas@gmail.com>
+
+       * lisp/scroll-lock.el: Use lexical-binding.
+
+2020-08-07  Simen Heggestøyl  <simenheg@gmail.com>
+
+       Use lexical-binding in browse-url.el and add tests
+
+       * lisp/net/browse-url.el: Turn on lexical-binding.
+       (browse-url--mailto, browse-url--man, browse-url--browser): Use
+       imperative form in docstrings.
+       (browse-url-delete-temp-file): Turn comment into a proper docstring.
+
+       * test/lisp/net/browse-url-tests.el: New file with tests for
+       browse-url.el.
+
+2020-08-07  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove support for Mosaic from browse-url
+
+       * lisp/net/browse-url.el (browse-url-mosaic-program)
+       (browse-url-mosaic-arguments, browse-url-mosaic-pidfile)
+       (browse-url-CCI-port, browse-url-CCI-host)
+       (browse-url-default-browser, browse-url-mosaic, browse-url-cci):
+       Remove support for the Mosaic browser, which saw its last release in
+       1997, or 23 years ago.
+
+       * etc/NEWS: Announce its removal.
+
+2020-08-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix fontification of %d in strings in cperl-mode
+
+       * lisp/progmodes/cperl-mode.el (cperl-init-faces): Don't fontify
+       directives like %d in strings as hashes (bug#22867).
+
+2020-08-07  Stefan Kangas  <stefankangas@gmail.com>
+
+       Make more erc function aliases obsolete
+
+       * lisp/erc/erc-compat.el (erc-propertize, erc-view-mode-enter)
+       (erc-function-arglist, erc-delete-dups)
+       (erc-replace-regexp-in-string): Make these aliases obsolete.
+
+       * lisp/erc/erc-capab.el (erc-capab-identify-add-prefix)
+       (erc-capab-identify-remove/set-identified-flag):
+       * lisp/erc/erc-dcc.el (erc-dcc-chat-parse-output)
+       (erc-dcc-unquote-filename, pcomplete/erc-mode/DCC):
+       * lisp/erc/erc-list.el (erc-list-menu-mode, erc-list-button)
+       (erc-list-make-string):
+       * lisp/erc/erc-log.el (erc-log-standardize-name):
+       * lisp/erc/erc-match.el (erc-log-matches-make-buffer):
+       * lisp/erc/erc-networks.el (erc-server-select):
+       * lisp/erc/erc.el (erc-message-english-PART)
+       (erc-update-mode-line-buffer, erc-format-my-nick)
+       (erc-format-@nick, erc-get-user-mode-prefix, erc-display-prompt)
+       (erc-part-reason-zippy, erc-quit-reason-zippy, erc-get-arglist)
+       (erc-toggle-debug-irc-protocol, erc-log-irc-protocol)
+       (erc-migrate-modules): Adjust callers.
+
+2020-08-07  Stephen Leake  <stephen_leake@stephe-leake.org>
+
+       * lisp/files.el (auto-mode-alist): delete ada-mode; now in GNU ELPA only
+
+2020-08-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add some documentation for widget-describe and button-describe
+
+       * doc/emacs/help.texi (Key Help): Document button-describe and
+       widget-describe.
+
+       * lisp/button.el (push-button): Mention button-describe.
+
+       * lisp/cus-edit.el (Custom-newline): Mention widget-describe (bug#139).
+
+2020-08-07  Mauro Aranda  <maurooaranda@gmail.com>
+
+       Add new commands to describe buttons and widgets
+
+       * lisp/help-fns.el (describe-widget-functions): New variable, used by
+       describe-widget.
+       (describe-widget): New command, to display information about a widget.
+       * lisp/button.el (button-describe): New command, for describing a 
button.
+       (button--describe): Helper function for button-describe.
+       * lisp/wid-edit.el (widget-describe): New command, for describing a
+       widget.
+       (widget--resolve-parent-action): Helper function, to allow
+       widget-describe to display more useful information (bug#139).
+
+2020-08-07  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix documentation of 'missing-newline-at-eof'
+
+       * doc/emacs/display.texi (Useless Whitespace):
+       * etc/NEWS (missing-newline-at-eof): Improve wording and
+       punctuation.
+
+2020-08-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Buffer-menu-select doc string clarification
+
+       * lisp/buff-menu.el (Buffer-menu-select): Document that it removed
+       the marks (bug#6491).
+
+2020-08-07  Peder O. Klingenberg  <peder@klingenberg.no>
+
+       * lisp/play/snake.el (snake-null-map): Quit on `q'. (Bug#42731)
+
+2020-08-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a new command to copy a file from zip files
+
+       * lisp/arc-mode.el (archive-copy-file): New command, keystroke and
+       menu bar entry (bug#26192).
+       (archive-extract): Refactored out code from here...
+       (archive--extract-file): ... to here for use in archive-copy-file.
+
+2020-08-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow ffap to do the right thing with 'https://gnu.org'
+
+       * lisp/thingatpt.el (thing-at-point-bounds-of-url-at-point): Don't
+       include trailing ' in the URL, because it's more likely to be a
+       punctuation character (bug#29410).
+
+2020-08-07  Mattias Engdegård  <mattiase@acm.org>
+
+       Clean up and improve compilation of arithmetic (bug#42597)
+
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize-associative-math)
+       (byte-optimize-min-max): Transform 3-arg min/max call into two 2-arg
+       calls, which is faster.
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-associative): Rename to...
+       (byte-compile-variadic-numeric): ...this function and simplify,
+       fixing incorrect comments.  The 3-arg strength reduction is now
+       always done in the optimisers and is no longer needed here.
+       (byte-compile-min-max): New function.
+       (byte-compile-minus): Simplify, remove incorrect comment, and use
+       byte-compile-variadic-numeric.
+       (byte-compile-quo): Simplify and fix comment.
+
+2020-08-07  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix byte-compilation of (+ -0.0) (bug#42597)
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-associative):
+       Translate numerical identity expressions, such as (+ x) and (* x),
+       into (* x 1) since the previous translation (+ x 0) gets it wrong
+       for x = -0.0.
+       * test/lisp/emacs-lisp/bytecomp-tests.el
+       (byte-opt-testsuite-arith-data): Add test cases.
+
+2020-08-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add missing "this is documented" marker to previous checkin
+
+2020-08-07  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make whitespace-mode highlight missing newlines at the end of buffers
+
+       * lisp/whitespace.el (whitespace-missing-newline-at-eof): New face
+       (bug#34952).
+       (whitespace-report-region): Add a test for
+       end-of-buffer-without-newline.
+       (whitespace-color-on): Ditto.
+
+       * doc/emacs/display.texi (Useless Whitespace): Document it.
+
+2020-08-07  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Pacify gcc -Wunused-variable
+
+       * src/frame.c (Fset_mouse_position, Fset_mouse_pixel_position)
+       (Fset_frame_position): Always use xval, yval.  Simplify #if nesting.
+
+2020-08-07  Juri Linkov  <juri@linkov.net>
+
+       * lisp/hi-lock.el (hi-lock-set-pattern): Display warning on narrow 
(bug#42609)
+
+2020-08-07  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/skeleton.el: Use lexical-binding
+
+       (skeleton-proxy-new): Use `use-region`.
+
+2020-08-07  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from Gnulib
+
+       This incorporates:
+       2020-08-06 libgmp: add <gmp/gmp.h> support
+       2020-08-06 Consider that clang defines __OPTIMIZE__ like GCC does
+       2020-08-06 Use __builtin_expect with clang everywhere
+       2020-08-05 Use __builtin_clz{,l,ll} with clang, also on Windows
+       2020-08-05 Use __builtin_ctz{,l,ll} and __builtin_ffs{,l,ll} with clang
+       2020-07-31 _GL_CMP: Improve documentation
+       2020-07-30 alloca, largefile: sync with Autoconf master
+       * lib/c++defs.h, lib/cdefs.h, lib/count-leading-zeros.h:
+       * lib/count-trailing-zeros.h, m4/alloca.m4, m4/gnulib-common.m4:
+       * m4/largefile.m4, m4/libgmp.m4:
+       Copy from Gnulib.
+       * lib/gnulib.mk.in, m4/gnulib-comp.m4: Regenerate.
+
+2020-08-06  Tassilo Horn  <tsdh@gnu.org>
+
+       Show A C hint only if partial fetches are enabled.
+
+       * lisp/gnus/gnus-art.el (gnus-insert-mime-button): Show A C hint for
+       downloading the complete message only if partial fetches are enabled.
+
+2020-08-06  Tassilo Horn  <tsdh@gnu.org>
+
+       Show A C hint for loading complete message only in nnimap groups.
+
+       * lisp/gnus/gnus-art.el (gnus-insert-mime-button): Show A C hint for
+       loading complete message only in nnimap groups.
+
+2020-08-06  Kévin Le Gouguec  <kevin.legouguec@gmail.com>
+
+       Fix the mailto: examples in the manual and in NEWS
+
+       * doc/misc/message.texi (System Mailer Setup): Fix mailto: examples.
+
+2020-08-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix broken desktop file
+
+       Looks like I pasted in the data twice...
+
+2020-08-06  Philip K  <philipk@posteo.net>
+
+       Remove usages of assoc-delete-all in project.el
+
+       assoc-delete-all is not available for users who have installed
+       project.el via ELPA on older Emacs versions (bug#42668).
+
+       * lisp/progmodes/project.el
+       (project-remember-project, project--remove-from-project-list):
+       Replace assoc-delete-all with equivalent alternatives.
+
+2020-08-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweat how MML specifies the encoding of binary data
+
+       * lisp/gnus/mml.el (mml-parse-1): Use `data-encoding' to be
+       slightly less confusing than `content-transfer-encoding'.
+
+       * doc/misc/emacs-mime.texi (MML Definition): Document it.
+
+       * lisp/gnus/message.el (message-insert-screenshot): Adjust usage.
+
+2020-08-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Change how Mail-Copies-To: never is handled in Message
+
+       * lisp/gnus/message.el (message-get-reply-headers): Change how
+       Mail-Copies-To: never is handled (bug#37591).  When that header is
+       present, put all the remaining recipients in the To header,
+       instead of picking an arbitrary recipient to have in the To
+       header, and the rest in the Cc header.
+
+2020-08-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add a new HTML skeleton for relative (file) URLs
+
+       * lisp/textmodes/sgml-mode.el (html-href-anchor-file): New
+       skeleton and keystroke (bug#37644).
+
+2020-08-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make it possible to use Message as a mailto: desktop handler
+
+       * doc/misc/message.texi (System Mailer Setup): Document the usage.
+
+       * lisp/gnus/gnus-art.el (gnus-url-mailto): Move most of the code
+       here to 'message-mailto-1' (bug#38314).
+
+       * lisp/gnus/message.el (message-parse-mailto-url): Mark as obsolete.
+       (message-parse-mailto-url): Rewritten slightly from the above.
+       (message-mailto): New command.
+       (message-mailto-1): New function.
+
+2020-08-06  Nick Helm  <nick@tenpoint.co.nz>
+
+       Signal an error in dired when moving to a directory that doesn't exist
+
+       * lisp/dired-aux.el (dired-do-create-files): Give an error when
+       apparently moving to a directory name, and that directory doesn't
+       exist (bug#38707).
+
+2020-08-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make 'n'/'p' in image mode buffers respect dired sorting
+
+       The commands now also now work on archive and tar mode parent buffers.
+
+       * doc/emacs/files.texi (Image Mode): Document it.
+
+       * lisp/arc-mode.el (archive-goto-file): New function (bug#38647).
+       (archive-next-file-displayer): Ditto.
+
+       * lisp/image-mode.el (image-next-file): Reimplement to work on
+       displayed dired buffers and the like.  This means that `n' and `p'
+       now works on the displayed ordering in the dired buffer, so if
+       you've reversed the sorting, `n' picks the right "next" file.
+       (image-mode--directory-buffers): New function.
+       (image-mode--next-file): Ditto.
+
+       * lisp/tar-mode.el (tar-goto-file): New function.
+       (tar-next-file-displayer): Ditto.
+
+2020-08-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mark two cconv tests as :unstable
+
+       * test/lisp/emacs-lisp/cconv-tests.el
+       (cconv-tests-cl-iter-defun-:documentation): Mark as unstable
+       (bug#42723).
+       (cconv-tests-iter-defun-:documentation): Ditto.
+
+2020-08-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak the autoloads scrape output slightly
+
+       * lisp/emacs-lisp/autoload.el (batch-update-autoloads--summary):
+       Output " ..." at the end of the non-concluding lines to signify
+       that the output continues.
+
+2020-08-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make the loaddefs scraping compilation output look more regular
+
+       * lisp/Makefile.in ($(lisp)/loaddefs.el): Don't output the
+       directories here.
+
+       * lisp/emacs-lisp/autoload.el (batch-update-autoloads--summary):
+       New function.
+       (batch-update-autoloads): Use it to output the directories we're
+       scraping.
+
+       This changes the compilation output from:
+
+       Directories for loaddefs: . ./calc ./calendar ./cedet ./cedet/ede
+       ./cedet/semantic ./cedet/semantic/analyze ./cedet/semantic/bovine
+       ./cedet/semantic/decorate ./cedet/semantic/symref 
./cedet/semantic/wisent
+       ./cedet/srecode ./emacs-lisp ./emulation ./erc ./eshell ./gnus ./image
+       ./international ./language ./leim ./leim/ja-dic ./leim/quail ./mail 
./mh-e
+       ./net ./nxml ./org ./play ./progmodes ./textmodes ./url ./vc
+
+       (but all on one long line)
+
+       To:
+
+         SCRAPE   . ./calc ./calendar ./cedet ./cedet/ede ./cedet/semantic
+         SCRAPE   ./cedet/semantic/analyze ./cedet/semantic/bovine
+         SCRAPE   ./cedet/semantic/decorate ./cedet/semantic/symref
+         SCRAPE   ./cedet/semantic/wisent ./cedet/srecode ./emacs-lisp 
./emulation
+         SCRAPE   ./erc ./eshell ./gnus ./image ./international ./language 
./leim
+         SCRAPE   ./leim/ja-dic ./leim/quail ./mail ./mh-e ./net ./nxml ./org 
./play
+         SCRAPE   ./progmodes ./textmodes ./url ./vc
+
+       Compilation output with very long lines can be mistaken for errors
+       when they scroll by fast in the compilation output.  Making it look
+       more like normal informational output avoids this confusion.
+
+2020-08-06  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make 'byte-compile-info*' functions more logical
+
+       * lisp/emacs-lisp/byte-run.el (byte-compile-info): New function
+       that's more flexible that replaces 'byte-compile-info-string' and
+       'byte-compile-info-message'.
+       (byte-compile-info-string): Make obsolete.
+       (byte-compile-info-message): Ditto.
+
+       * lisp/international/ja-dic-cnv.el (skkdic-convert-okuri-ari)
+       (skkdic-convert-postfix, skkdic-convert-prefix)
+       (skkdic-collect-okuri-nasi, skkdic-set-okuri-nasi):
+       * lisp/finder.el (finder-compile-keywords):
+       * lisp/cus-dep.el (custom-make-dependencies): Adjust callers to
+       use the new function.
+
+2020-08-06  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Simplify Solaris port
+
+       This should avoid some configuration confusion as exemplified
+       by Jeffrey Walton’s recent bug report (Bug#42675).
+       * configure.ac (opsys): Simplify Solaris configuration by
+       not worrying about Solaris 9 and earlier, as they are no
+       longer supported by the Solaris developers.  This should
+       support Walton’s ‘./configure --build=x86_64-sun-solaris’.
+       Instead of bothering with ‘opsys=sol2-6’ and ‘opsys=sol2-10’,
+       just use ‘opsys=solaris’.  All uses changed.
+       (emacs_check_sunpro_c): Remove unused var.
+       * doc/misc/tramp.texi (Remote programs):
+       * etc/MACHINES, etc/PROBLEMS:
+       Modernize PATH for Oracle Developer Studio.
+       * etc/PROBLEMS: Move Solaris-related problems to legacy area,
+       except those that are still relevant.
+
+2020-08-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Skip epg tests if gpg isn't installed
+
+       Split sometimes-failing test into three tests to ease debugging
+
+2020-08-05  Christophe Troestler  <Christophe.Troestler@umons.ac.be>  (tiny 
change)
+
+       Enable replying to an ical event even when not an attendee
+
+       * lisp/gnus/gnus-icalendar.el
+       (gnus-icalendar-event--build-reply-event-body): Display a warning
+       instead of barfing when user is missing from attendee list.
+
+       When the user identity is not present in the attendee list, an error
+       is triggered making replying to such an event impossible (the reply
+       message not being even composed).  This replaces it with a warning.
+       This is necessary because one may receive events that the organizer
+       did not set up well and it is up to the user to decide whether or not
+       to reply to them (bug#41723).
+
+2020-08-05  Harald Jörg  <haj@posteo.de>
+
+       cperl-mode.el: Correctly terminate HERE-docs
+
+       * lisp/progmodes/cperl-mode.el (cperl-find-pods-heres): cperl-mode
+       in the master branch wrongly uses the first occurrence of "HERE"
+       to terminate the string, resulting in badly fontified / indented
+       code which follows (bug#42251).
+
+2020-08-05  Philip K  <philip@warpmail.net>
+
+       Wrap skeleton logic in atomic-change-group
+
+       * lisp/skeleton.el (define-skeleton): Use an atomic change group
+       so that if the user `C-g's in the middle of it, we're not left
+       with half a skeleton in the buffer (bug#42311).
+
+2020-08-05  Harald Jörg  <haj@posteo.de>  (tiny change)
+
+       cperl-mode: Fix bad parameter construction in cperl-etags
+
+       * lisp/progmodes/cperl-mode.el (cperl-etags): This fails with
+       (wrong-type-argument stringp cperl-sub-regexp). The error came
+       with incorporating Jonathan Rockway's work (bug#42355).
+
+2020-08-05  Harald Jörg  <haj@posteo.de>
+
+       cperl-mode: Workaround for failure of cperl-write-tags
+
+       * lisp/progmodes/cperl-mode.el (cperl-mode): Accommodate recent
+       changes in etags (bug#42356).
+
+2020-08-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix max-width/height for Message screenshots
+
+       * lisp/gnus/message.el (message-insert-screenshot):
+       :max-width/height apparently has to be integers.
+
+2020-08-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       mouse-drag-copy-region doc string clarification
+
+       * lisp/mouse.el (mouse-drag-copy-region): Clarify that the
+       variable only applies to selections in Emacs (bug#41856).
+
+2020-08-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention C-y in the manual for yanking the primary selection
+
+       * doc/emacs/killing.texi (Primary Selection): Mention C-y here for
+       yanking the primary selection (bug#41857).
+
+2020-08-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak the Message screenshot insertion
+
+       * lisp/gnus/message.el (message-insert-screenshot): Force scaling
+       to 1, since the screenshot image will already be suitable for
+       displaying directly (it's the same resolution).
+
+2020-08-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Implement a screenshot command for Message mode
+
+       * doc/misc/message.texi (MIME): Document it.
+
+       * lisp/gnus/message.el (message-screenshot-command): New variable.
+       (message-mode-map): New keystroke and menu item.  Also add
+       mml-attach-file to the menu.
+       (message-insert-screenshot): New command.
+
+       * lisp/gnus/mml.el (mml-parse-1): Allow having
+       content-transfer-encoding already in the part, so that we can have
+       inline base64-encoded binaries in the Message buffers.
+
+2020-08-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fontize $(...) slightly better in bash mode
+
+       * lisp/progmodes/sh-script.el (sh-font-lock-keywords-var): Fontize
+       $(...) slightly better (bug#42417).  Instead of just fontizing the
+       first word in the expression, fontize until the closing
+       parenthesis.  This doesn't work well if you have nested $(...)
+       expressions.
+
+2020-08-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention undo in the doc string of dired-do-kill-lines
+
+       * lisp/dired-aux.el (dired-do-kill-lines): Mention that this can
+       be undone (bug#42707).
+
+2020-08-05  Kevin Brubeck Unhammer  <unhammer@fsfe.org>
+
+       Further fix for erc-generate-new-buffer-name
+
+       * lisp/erc/erc.el (erc-generate-new-buffer-name): Fix buffer name
+       generation when there's two networks on the same
+       server:port (bug#40121).
+
+2020-08-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make the erc /ignore command prompt for a timeout
+
+       * lisp/erc/erc.el (erc--unignore-user): Separate into own function
+       (bug#40137).
+       (erc-cmd-IGNORE): Ask if the user wants a timeout.
+       (erc--read-time-period): New function.
+
+2020-08-05  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add new function decoded-time-period
+
+       * lisp/calendar/time-date.el (decoded-time-period): New function.
+
+2020-08-05  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/x-dnd.el: Use lexical-scoping
+
+2020-08-05  Juri Linkov  <juri@linkov.net>
+
+       * lisp/generic-x.el (ansible-inventory-generic-mode): Fix filename 
(bug#42703)
+
+2020-08-04  Alan Third  <alan@idiocy.org>
+
+       Don't smooth images when scaling up (bug#38394)
+
+       * src/image.c (image_set_transform [HAVE_XRENDER]): Use different filter
+       when scaling up vs scaling down.
+       * src/nsimage.m (ns_image_set_smoothing):
+       ([EmacsImage setSmoothing:]): New functions.
+       * src/nsterm.h: Add definitions.
+       * src/nsterm.m (ns_dumpglyphs_image): Disable smoothing if requested.
+
+2020-08-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       When decrypting non-decrypted files, make epa show the raw files
+
+       * lisp/epa-file.el (epa-file-insert-file-contents): When trying to
+       decrypt a non-decrypted file, just show the bytes from the file
+       instead (bug#3829).
+
+2020-08-04  Nicolas Petton  <nicolas@petton.fr>
+
+       * etc/HISTORY: Update the Emacs 27.1 release date.
+
+2020-08-04  Arik Mitschang  <arik.mitschang@gmail.com>  (tiny change)
+
+       Add options for mode modern ciphers in smime-encrypt-cipher
+
+       * lisp/gnus/smime.el (smime-encrypt-cipher): Add support for more
+       modern ciphers (bug#8474).
+
+2020-08-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Drop support for -fcheck-pointer-bounds
+
+       GCC has removed the -fcheck-pointer bounds option, and the Linux
+       kernel has also removed support for Intel MPX, so there’s no point
+       to keeping this debugging option within Emacs.
+       * src/bytecode.c (BYTE_CODE_THREADED):
+       * src/lisp.h (DEFINE_LISP_SYMBOL, XSYMBOL, make_lisp_symbol):
+       Assume __CHKP__ is not defined.
+       * src/ptr-bounds.h: Remove.  All uses of ptr_bounds_clip,
+       ptr_bounds_copy, ptr_bounds_init, ptr_bounds_set removed.
+
+2020-08-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Ignore test/data/mml-sec/random_seed
+
+       The file is generated when mml-sec-tests is run.
+
+2020-08-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Remove mistakenly checked-in random_seed file
+
+2020-08-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Tweak mml-sec test that sometimes fails
+
+       * test/lisp/gnus/mml-sec-tests.el
+       (mml-first-secure-en-decrypt-sign-1): mml-secure-en-decrypt-sign-1
+       fail sometimes, on some machines, unless it's the first test.  I'm
+       guessing there's a race condition somewhere in the test, but put
+       it first now to avoid build reports.
+
+2020-08-04  Jens Lechtenbörger  <jens.lechtenboerger@fsfe.org>
+
+       Add tests for mml-sec.el
+
+2020-08-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix two mml-sec minor bugs revealed by new test harness
+
+       * lisp/gnus/mml-sec.el
+       (mml-secure-allow-signing-with-unknown-recipient): New variable
+       (bug#18393) (but this should probably be fixed in a different way).
+       (mml-secure-epg-sign): Use it.
+       (mml-secure-check-user-id): Protect against recipients that aren't
+       email addresses, like "No recipient".
+
+2020-08-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add test file lost when merged from Gnus in 2016
+
+2020-08-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mark unused Gnus util function as obsolete
+
+       * lisp/gnus/gnus-util.el (gnus-test-list): Mark utility function
+       as obsolete -- there are no in-tree usage.
+
+2020-08-04  Stefan Kangas  <stefankangas@gmail.com>
+
+       Add new cconv-tests (Bug#28557)
+
+       These tests are all written by Gemini Lasswell <gazally@runbox.com>.
+
+       * test/lisp/emacs-lisp/cconv-tests.el
+       (top-level): Add two commented out tests which the byte-compiler
+       can't handle.
+       (cconv-tests-lambda-:documentation)
+       (cconv-tests-pcase-lambda-:documentation)
+       (cconv-tests-defun-:documentation)
+       (cconv-tests-cl-defun-:documentation)
+       (cconv-tests-function-:documentation)
+       (cconv-tests-cl-defgeneric-literal-:documentation)
+       (cconv-tests-defsubst-:documentation)
+       (cconv-tests-cl-defsubst-:documentation): New tests.
+       (cconv-tests-cl-iter-defun-:documentation)
+       (cconv-tests-iter-defun-:documentation)
+       (cconv-tests-iter-lambda-:documentation)
+       (cconv-tests-cl-function-:documentation)
+       (cconv-tests-cl-defgeneric-:documentation): New failing tests.
+
+2020-08-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix viewing encrypted+signed messages from Outlook
+
+       * lisp/gnus/mm-decode.el (mm-possibly-verify-or-decrypt): Fix
+       problem with CRLF-encoded encrypted+signed parts (bug#42637).
+
+2020-08-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix previous network stream test
+
+       * test/lisp/net/network-stream-tests.el
+       (network-test--resolve-system-name): There's only one ipv6
+       localhost address.
+
+2020-08-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make a network-stream test more robust
+
+       * test/lisp/net/network-stream-tests.el
+       (network-test--resolve-system-name): New function.
+       (echo-server-with-dns): Skip test if (system-name) doesn't look
+       like it's going to resolve (bug#42535).
+
+2020-08-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mark the end of file names correctly on Macos in wdired
+
+       * lisp/wdired.el (wdired--restore-dired-filename-prop): Fix
+       problem with finding the end of the name on Macos.
+
+2020-08-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix debugging code checked in from wdired-tests
+
+2020-08-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix svn tests on Macos
+
+       * test/lisp/vc/vc-tests.el (vc-test--svn-enabled): Macos machines
+       may have a dummy svn program that helpfully just outputs "There's
+       no svn program here", so also test for the svnadmin program
+       (bug#42536).
+
+2020-08-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       dired-ls-F-marks-symlinks should be set under Macos
+
+       * lisp/dired.el (dired-ls-F-marks-symlinks): Not that this should
+       be set under Macos (bug#42537).
+
+2020-08-04  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix wdired test for Macos
+
+       * test/lisp/wdired-tests.el (wdired-test-bug34915): Macos adds "@"
+       to the end of symlinks (bug#42537).
+
+2020-08-04  Michael Albinus  <michael.albinus@gmx.de>
+
+       * etc/NEWS: Add Tramp support of direct asynchronous process invocation.
+
+2020-08-04  Michael Albinus  <michael.albinus@gmx.de>
+
+       Add Tramp support of direct asynchronous process invocation
+
+       * doc/misc/tramp.texi (Predefined connection information):
+       Add "direct-async-process".
+       (Remote processes): New subsection "Improving performance of
+       asynchronous remote processes".
+
+       * lisp/net/tramp-adb.el (tramp-methods) <adb>: Add `tramp-login-program'
+       and `tramp-login-args'.
+       (tramp-adb-handle-make-process): Use `tramp-handle-make-process'.
+       (tramp-adb-maybe-open-connection): Add "set +o vi +o emacs" command.
+
+       * lisp/net/tramp-sh.el (tramp-sh-handle-make-process):
+       Use `tramp-handle-make-process'.
+       (tramp-sh-file-name-handler-p, tramp-multi-hop-p): New defuns.
+       (tramp-compute-multi-hops): Use `tramp-multi-hop-p'.
+
+       * lisp/net/tramp.el (tramp-dissect-file-name, tramp-dissect-hop-name):
+       Use `tramp-multi-hop-p'.
+       (tramp-handle-insert-file-contents, tramp-local-host-p):
+       Use `tramp-sh-file-name-handler-p'.
+       (tramp-handle-make-process): New defun.
+
+       * test/README: Add another example how to use SELECTOR.
+
+       * test/lisp/net/tramp-tests.el (tramp-test03-file-name-method-rules):
+       Adapt test.
+       (tramp--test-sh-p): Use `tramp-sh-file-name-handler-p'.
+
+2020-08-04  Theodor Thornhill  <theo@thornhill.no>
+
+       Add sass @use rule to css-mode
+
+       * lisp/textmodes/css-mode.el (scss-at-ids): Add 'use' to scss-at-ids
+       for autocompletion (bug#42700).
+
+2020-08-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Use void * for pointers in with_echo_area_buffer
+
+       * src/xdisp.c (with_echo_area_buffer): Pass void * instead of
+       ptrdiff_t, since the values are typically pointers and this ports
+       better to (mostly-theoretical) hosts where ptrdiff_t is narrower
+       than intptr_t.  All uses changed.
+
+2020-08-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Ignore another memory leak
+
+       * src/pdumper.c (dump_mmap_contiguous_heap):
+       Ignore the heap control block when checking for leaks.
+
+2020-08-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Simplify use of __lsan_ignore_object
+
+       * configure.ac: Use AC_CHECK_FUNCS_ONCE for __lsan_ignore_object.
+       * src/buffer.c, src/data.c, src/emacs-module.c, src/regex-emacs.c:
+       * src/search.c: Use __lsan_ignore_object unconditionally, and don’t
+       include sanitizer/lsan_interface.h.
+       * src/lisp.h (__lsan_ignore_object): Provide a dummy in the
+       typical case where leak sanitization is not available.
+
+2020-08-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Simplify pointer computation in mark_maybe_object
+
+       * src/alloc.c (mark_maybe_object):
+       Use simpler way to avoid -fsanitize=undefined false alarms,
+       by converting the word tag to intptr_t first.
+       Omit now-unnecessary runtime overflow check.
+       (mark_memory): Work even if UINTPTR_MAX <= INT_MAX (!).
+
+2020-08-03  Philipp Stephani  <phst@google.com>
+
+       Avoid duplicate Edebug symbols when backtracking (Bug#42701)
+
+       When Edebug backtracks, it nevertheless generates definitions for the
+       non-matching branches, see Bug#41988 and Bug#42701.  This should be
+       fixed eventually (probably by deferring the definition until a branch
+       is known to match), but for now add a band-aid to avoid these
+       duplicate symbols, at least for anonymous forms.
+
+       * lisp/emacs-lisp/edebug.el (edebug-make-enter-wrapper): Regenerate
+       anonymous names.
+
+       * test/lisp/emacs-lisp/edebug-tests.el
+       (edebug-tests-duplicate-symbol-backtrack): New regression test.
+
+2020-08-03  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       8576297b2a (origin/emacs-27) ; lisp/so-long.el: Prevent potential err...
+       986c12b20f ; * lisp/so-long.el: Byte-compilation bug fix
+       19f8f36f11 ; * lisp/so-long.el (so-long-variable-overrides): Improve doc
+       83bc4ad369 ; * so-long.el: Documentation and spelling
+       72c5f71cd4 Avoid segfaults if XIM is set but not xim_styles
+       f54ddb0198 (emacs-27) ; * test/lisp/emacs-lisp/generator-tests.el: St...
+
+       # Conflicts:
+       #       test/lisp/emacs-lisp/generator-tests.el
+
+2020-08-03  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       e12d1fbc15 ; ChangeLog.3 and etc/AUTHORS fixes
+       748f0d4bc6 * admin/authors.el (authors-aliases): Remove a faulty regexp.
+
+       # Conflicts:
+       #       etc/AUTHORS
+
+2020-08-03  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix last change in 'try_window'
+
+       * src/xdisp.c (try_window): Don't modify the logic when EOB is in
+       the viewport.  (Bug#42653)
+
+2020-08-03  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make `n'/`p' in image-mode also find externally converted images
+
+       * lisp/image-file.el (image-file-name-regexp): Use it to make
+       `n'/`p' in image mode work (bug#39994).
+
+       * lisp/image/image-converter.el
+       (image-converter-file-name-extensions): New variable to keep track
+       of all suffixes.
+       (image-convert-p): Update.
+       (image-converter--find-converter): Set.
+
+2020-08-03  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix problem with viewing .webp files from .zip buffers
+
+       * lisp/image-mode.el (image-toggle-display-image): Make it
+       possible to view images (via external formatters, like webp) from
+       zip files (and other archive modes) (bug#39994).
+
+2020-08-03  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Adjust error message in image-mode
+
+       * lisp/image-mode.el (image-mode): Even when
+       `image-user-external-converter' is on, we may get
+       `unknown-image-type' (bug#39994).  Adjust the error message in
+       that case.
+
+2020-08-03  Derek Zhou  <derek@3qin.us>
+
+       Fix problem where TLS connections would sometimes hang
+
+       * src/process.c (wait_reading_process_output): Before the select,
+       check every interesting gnutls stream for available data in the
+       buffer.  If some of them hit, and either there is no wait_proc or
+       the wait_proc is one of the gnutls streams with new data, set the
+       select timeout to 0 after the select, and merge the gnutls buffer
+       status into the select returns (bug#40665).  This fixes a problem
+       where TLS connections would sometimes hang.
+
+2020-08-02  Philipp Stephani  <phst@google.com>
+
+       Improve Edebug symbols for inlined secondary methods (Bug#42671)
+
+       * lisp/emacs-lisp/cl-generic.el (cl-defgeneric): Include qualifiers in
+       Edebug symbol name.
+
+       * test/lisp/emacs-lisp/cl-generic-tests.el
+       (cl-defgeneric/edebug/method): Adapt unit test.
+
+2020-08-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       If gnus-visual is nil, don't fontify patches and the like
+
+       * doc/misc/emacs-mime.texi (Display Customization): Document it.
+
+       * lisp/gnus/gnus-art.el (gnus-mime-display-single): Bind it.
+
+       * lisp/gnus/mm-view.el (mm-inline-font-lock): New variable (bug#38421).
+       (mm-display-inline-fontify): Use it.
+
+2020-08-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Document that :width/:height in XBM images are peculiar
+
+       * doc/lispref/display.texi (XBM Images): Note the peculiarities of
+       :width/:height in XBM images (bug#39735).
+
+2020-08-02  Philipp Stephani  <phst@google.com>
+
+       Add a workaround for Bug#42672
+
+       * lisp/emacs-lisp/cl-generic.el (cl-defgeneric): Work around Bug#42672
+       by uniquifying inline method names.
+
+       * test/lisp/emacs-lisp/cl-generic-tests.el
+       (cl-defgeneric/edebug/method): New regression test.
+
+2020-08-02  Andrea Corallo  <akrl@sdf.org>
+
+       Fix defsubst missing inline Bug#42664
+
+       * lisp/emacs-lisp/byte-run.el (defsubst): Do not native compile
+       defsubsts to have them always effective.
+
+2020-08-02  Philipp Stephani  <phst@google.com>
+
+       Avoid duplicate Edebug symbols when using ‘cl-flet’ (Bug#41989)
+
+       * lisp/emacs-lisp/edebug.el (edebug-match-:unique): Add a new
+       ‘:unique’ specifier to generate unique names.
+
+       * lisp/emacs-lisp/cl-macs.el (cl-flet): Use it.  This requires
+       inlining the ‘cl-defun’ specification.
+
+       * test/lisp/emacs-lisp/edebug-tests.el (edebug-tests-cl-flet): New
+       unit test.
+
+       * doc/lispref/edebug.texi (Specification List): Document new ‘:unique’
+       construct.
+
+2020-08-02  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-08-02  Eli Zaretskii  <eliz@gnu.org>
+
+       Re-enable scroll-margin when cursor-motion optimization is disabled
+
+       * src/xdisp.c (try_window): Fix logic of disabling margins when
+       cursor is close to BOB or EOB.  Account for header-line, if any,
+       when computing the scroll margin in pixels.  (Bug#42653)
+
+2020-08-02  Philipp Stephani  <phst@google.com>
+
+       * src/alloc.c (mark_maybe_object): Avoid signed integer overflow
+
+2020-08-02  Philipp Stephani  <phst@google.com>
+
+       Don’t generate duplicate symbols for secondary CL methods (Bug#42671)
+
+       * lisp/emacs-lisp/edebug.el
+       (edebug-match-cl-generic-method-qualifier): Add matcher for
+       ‘cl-defmethod’ qualifier.
+
+       * lisp/emacs-lisp/cl-generic.el (cl-defmethod): Use it.
+
+       * test/lisp/emacs-lisp/edebug-tests.el
+       (edebug-cl-defmethod-qualifier): New unit test.
+
+2020-08-02  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix last change in alloc.c.
+
+       * src/alloc.c (mark_maybe_object) [WIDE_EMACS_INT]: Avoid compiler
+       warning about 'overflow' being unused.
+
+2020-08-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make the "All" setting for large-newsgroup-initial in Gnus work
+
+       * lisp/gnus/gnus-sum.el (gnus-articles-to-read): Use it.
+       (gnus-summary-insert-old-articles): Ditto.
+
+       * lisp/gnus/gnus.el (large-newsgroup-initial): Make the "All"
+       setting work by using a special symbol, instead of nil which is
+       indistinguishable from not being present (bug#38466).
+
+2020-08-02  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix Tramp portability issues
+
+       * lisp/net/tramp-sh.el (tramp-set-remote-path): Replace "echo -n" by
+       "printf", it isn't portable.
+
+       * test/lisp/net/tramp-tests.el (tramp-test33-environment-variables)
+       (tramp-test33-environment-variables-and-port-numbers): Do not use
+       "echo -n", it isn't portable.
+       (tramp--test-utf8): Filter out not displayable characters.
+
+2020-08-02  Philipp Stephani  <phst@google.com>
+
+       * src/alloc.c (mark_memory): Avoid signed integer overflow
+
+2020-08-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Signal an error in the user clicks "cancel" when signing in epg
+
+       * lisp/epg.el (epg-sign-string): If the user clicks "cancel" on
+       the pinentry, then we don't have an error from gpg(sm), but
+       instead nothing (bug#39058).  Signal an error in that case.
+
+2020-08-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix erc bug when there's two channels with the same name
+
+       * lisp/erc/erc.el (erc-generate-new-buffer-name): Fix logic when
+       there's two channels with the same name from two different servers
+       (bug#40121).
+
+2020-08-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Try to fix mailcap parsing again to respect Emacs defaults
+
+       * lisp/net/mailcap.el (mailcap--computed-mime-data): New variable.
+       (mailcap-parse-mailcaps): Don't delete Emacs-distributed fallback
+       values (bug#40247).
+       (mailcap-add-mailcap-entry): Extend to allow working on different
+       variables.
+       (mailcap-add): Store data in mailcap-user-mime-data, since it
+       should be heeded first.
+
+2020-08-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make some erc function aliases obsolete
+
+       * lisp/erc/erc-networks.el (erc-current-network):
+       * lisp/erc/erc-join.el (erc-autojoin-channels-delayed):
+       * lisp/erc/erc-backend.el (erc-server-setup-periodical-ping)
+       (erc-server-send-ping, erc-server-send-queue):
+       * lisp/erc/erc-autoaway.el (erc-autoaway-reestablish-idletimer)
+       (autoaway): Adjust callers.
+
+       * lisp/erc/erc-compat.el (erc-with-selected-window)
+       (erc-cancel-timer, erc-make-obsolete)
+       (erc-make-obsolete-variable): Make these aliases obsolete.
+
+2020-08-02  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix race condition in erc-server-send-queue vs quitting erc
+
+       * lisp/erc/erc-backend.el (erc-server-send-queue): Check that the
+       buffer is live before using it (bug#40418).  This fixes a rare
+       problem when the queue is non-empty when `erc-quit-server' is run.
+
+2020-08-01  Philipp Stephani  <phst@google.com>
+
+       * src/alloc.c (mark_maybe_object): Make overflow check conditional.
+
+2020-08-01  Philipp Stephani  <phst@google.com>
+
+       Improve offset calculation in wide int builds
+
+       * src/alloc.c (mark_maybe_object): Make sure that OFFSET isn’t widened
+       during subtraction.
+
+2020-08-01  Philipp Stephani  <phst@google.com>
+
+       * src/alloc.c (resize_string_data): Adjust string bytes (Bug#42540)
+
+2020-08-01  Alan Third  <alan@idiocy.org>
+
+       Recreate macOS color list if it is corrupt
+
+       * src/nsterm.m (ns_term_init): Generate the color list if there are
+       less colors in the existing file than in rgb.txt.
+
+2020-08-01  Michael Albinus  <michael.albinus@gmx.de>
+
+       Implement alternative for Tramp's signal return string
+
+       * lisp/net/tramp-adb.el (process-file-return-signal-string): Declare.
+       (tramp-adb-get-signal-strings): New defun.
+       (tramp-adb-handle-process-file): Use it.
+
+       * lisp/net/tramp-sh.el (process-file-return-signal-string): Declare.
+       (tramp-sh-get-signal-strings): New defun.
+       (tramp-sh-handle-process-file): Use it.
+
+       * lisp/net/tramp.el (tramp-get-signal-strings): Remove function.
+
+       * test/lisp/net/tramp-tests.el (tramp-test28-process-file):
+       Accept alternative signal return string.
+
+2020-08-01  Philipp Stephani  <phst@google.com>
+
+       Use a more precise check for '__lsan_ignore_object'
+
+       * configure.ac: Add check for __lsan_ignore_object.
+
+       * src/buffer.c (enlarge_buffer_text):
+       * src/data.c (make_blv):
+       * src/emacs-module.c (Fmodule_load, initialize_environment):
+       * src/regex-emacs.c (regex_compile):
+       * src/search.c (newline_cache_on_off): Use new configuration macro.
+
+2020-08-01  Philipp Stephani  <phst@google.com>
+
+       Suppress sanitizer errors about pointer arithmetic in a few places
+
+       We perform weird pointer arithmetic due to the layout of Lisp_Objects
+       holding symbols.  ASan/UBSan warns about that (Bug#42530).  Suppress
+       the warnings by performing the arithmetic on integer types and casting
+       back to pointers.
+
+       * src/alloc.c (mark_maybe_object, mark_memory): Temporarily cast
+       pointer to 'intptr_t'.
+
+2020-08-01  Philipp Stephani  <phst@google.com>
+
+       Suppress leak sanitizer in a few more places
+
+       * src/regex-emacs.c (regex_compile):
+       src/search.c (newline_cache_on_off): Suppress leak sanitizer.
+
+2020-08-01  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix last change
+
+       * src/emacs-module.c (initialize_environment): Call
+       __lsan_ignore_object only if HAVE_SANITIZER_LSAN_INTERFACE_H is
+       undefined.  This fixes compilation on systems that don't have
+       __lsan_* functions.
+
+2020-08-01  Philipp Stephani  <phst@google.com>
+
+       Suppress leak detector in some cases
+
+       We intentionally leak some objects.  Prevent the ASan leak detector
+       from raising false alarms in these cases.
+
+       * configure.ac: Search for lsan_interface.h header.
+
+       * src/data.c (make_blv): Allow leaking of buffer-local values.
+
+       * src/buffer.c (enlarge_buffer_text): Allow leaking of buffer text.
+
+       * src/emacs-module.c (Fmodule_load, initialize_environment): Allow
+       intentional leak of runtime and environment objects if module
+       assertions are enabled.
+
+2020-08-01  Philipp Stephani  <phst@google.com>
+
+       * test/data/emacs-module/mod-test.c (Fmod_test_string_a_to_b): Fix leak
+
+2020-07-31  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/byte-opt.el: Minor simplifications
+
+       (byte-optimize-form-code-walker): Use `byte-optimize-form` after
+       inlining, so optimizations are also applied to the top level call.
+       Simplify the code for `pure` functions using 
`byte-optimize-constant-args`.
+       (byte-optimize-all-constp): Remove, not used any more.
+       (byte-optimize-1+, byte-optimize-1-): Remove, they are redundant
+       with the `pure` annotation.
+
+2020-07-31  Stefan Kangas  <stefankangas@gmail.com>
+
+       Declare some ancient compat aliases obsolete (Bug#41328)
+
+       * lisp/comint.el (comint-read-noecho):
+       * lisp/emacs-lisp/edebug.el (edebug-all-defuns):
+       * lisp/man.el (manual-entry):
+       * lisp/vc/log-edit.el (vc-log-mode-map, vc-log-entry-mode): Declare
+       ancient backwards-compatibility aliases and functions obsolete.  The
+       oldest in this list was added in 1992, and the most recent in 2004.
+
+       * lisp/net/telnet.el (telnet-initial-filter): Don't use
+       `comint-read-noecho'.
+
+2020-07-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Minor dns.el clean up
+
+       * lisp/net/dns.el (dns-query-asynchronous, dns-query): Adjust some
+       parameter names to not end with "p", as these are not predicates.
+
+2020-07-31  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make gravatar-build-url respect dynamically bound variables again
+
+       * lisp/image/gravatar.el (gravatar-build-url): Compute
+       query-string first, so that dynamically bound values of
+       `gravatar-rating' (etc.) are respected, instead of computing it
+       when the callback happens.
+
+2020-07-30  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from Gnulib
+
+       This incorporates:
+       2020-07-30 work around some Oracle Studio attribute bugs
+       2020-07-29 fsusage, regex, stat-size: remove Cray support
+       2020-07-26 inttypes: remove support for AIX 4
+       2020-07-26 gettimeofday: remove workaround for Mac OS X 10.0
+       2020-07-26 don't require gl_LOCALTIME_BUFFER_DEFAULTS
+       2020-07-26 alloca: remove Cray-2 and Cray Y-MP support
+       2020-07-26 libgmp: remove dependency on havelib
+       2020-07-26 libgmp: remove HAVE_GMP, LIB_GMP
+       2020-07-25 multiarch: prepare for x86_64+arm64 universal in macOS 11
+       2020-07-25 sigprocmask: small autoconf macro improvement
+       2020-07-25 small autoconf macro improvements
+       2020-07-24 timespec: remove dependence on ‘verify’
+       2020-07-24 optimize a few more three-valued comparisons
+       2020-07-24 fix _GL_CMP parenthesization typo
+       2020-07-23 optimize three-valued comparison between integers
+       2020-07-24 doc: update for Mac OS X 10.13
+       2020-07-23 fchmodat, lchmod: use /proc on Cygwin
+       2020-07-21 inttypes: fix PRI*PTR and SCN*PTR on 64-bit native Windows
+       2020-07-12 libgmp: avoid warning when --without-libgmp is used
+       2020-07-12 libgmp: link to the correct shared library
+       * lib/mini-gmp-gnulib.c: Ignore -Wsuggest-attribute=malloc only for
+       * build-aux/config.guess, build-aux/config.sub:
+       * build-aux/install-sh, doc/misc/texinfo.tex, lib/c-strcasecmp.c:
+       * lib/c-strncasecmp.c, lib/fchmodat.c, lib/fsusage.c:
+       * lib/gettimeofday.c, lib/inttypes.in.h, lib/lchmod.c:
+       * lib/mini-gmp-gnulib.c, lib/nstrftime.c, lib/regex.h, lib/timespec.h:
+       * m4/alloca.m4, m4/getgroups.m4, m4/gettimeofday.m4:
+       * m4/gnulib-common.m4, m4/inttypes.m4, m4/libgmp.m4, m4/mktime.m4:
+       * m4/multiarch.m4:
+       Copy from Gnulib.
+       * lib/gnulib.mk.in, m4/gnulib-comp.m4: Regenerate.
+       * src/Makefile.in, test/Makefile.in (LIBGMP):
+       Rename from LIB_GMP for compatibility with Gnulib.
+       All uses changed.
+
+2020-07-30  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Port to Oracle Studio 12.6 (sparc)
+
+       * src/alloc.c (__builtin_unwind_init) [!HAVE___BUILTIN_UNWIND_INIT]:
+       Move from here ...
+       * src/lisp.h: ... to here, since flush_stack_call_func uses it.
+       * src/pdumper.c (dump_off_from_lisp): Avoid ‘return n;;’ to pacify
+       Oracle Studio.
+
+2020-07-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix face extension past EOL in overlay strings
+
+       * src/xdisp.c (face_at_pos): Pass ATTR_FILTER to
+       face_for_overlay_string.
+       * src/xfaces.c (face_for_overlay_string): Accept an additional
+       argument ATTR_INDEX and pass it to merge_face_ref for merging the
+       face at POS.  This ensures a face from buffer text will not be
+       merged unless it specifies the :extend attribute.  (Bug#42552)
+       * src/dispextern.h (face_for_overlay_string): Adjust prototype.
+
+2020-07-30  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix Tramp bug#42538
+
+       * lisp/net/tramp-sh.el (tramp-set-remote-path): Send the command
+       in several chunks if it is too large.  (Bug#42538)
+
+2020-07-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make libravatar lookups asynchronous
+
+       * lisp/gnus/gnus-gravatar.el (gnus-gravatar-insert): Fix check for
+       repeated gravatars, which is now easier to trigger now that things
+       are more asynchronous.
+
+       * lisp/image/gravatar.el (gravatar--service-libravatar): Fetch the
+       data asynchronously (bug#40676).
+       (gravatar-service-alist): Adjust all providers so they are
+       asynchronous.
+       (gravatar-build-url): Adjust caller to be asynchronous.
+       (gravatar-retrieve): Ditto.
+       (gravatar-retrieve-synchronously): Ditto.
+
+2020-07-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add the new function dns-query-asynchronous
+
+       * lisp/net/dns.el (dns-query-asynchronous): New function.
+       (dns--lookup, dns--filter): New internal functions.
+       (dns-query): Reimplement on top of dns-query-asynchronous.
+
+2020-07-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Use lexical binding in dns.el
+
+       * lisp/net/dns.el: Use lexical-binding.
+       (dns-write-bytes, dns-read): Adjust for lexical-binding.
+
+2020-07-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Small dns.el code cleanup
+
+       * lisp/net/dns.el (dns-query): Clean up code slightly by removing
+       a macro and moving the code into the function itself.
+
+2020-07-30  Glenn Morris  <rgm@gnu.org>
+
+       * admin/gitmerge.el (gitmerge-resolve): Discard AUTHORS conflicts.
+
+2020-07-29  Glenn Morris  <rgm@gnu.org>
+
+       Update a gravatar test
+
+       * test/lisp/image/gravatar-tests.el (gravatar-build-url):
+       Update for recent change in default gravatar-service.
+
+2020-07-29  Mattias Engdegård  <mattiase@acm.org>
+
+       Preserve match data in 'kbd'
+
+       * lisp/subr.el (kbd): Preserve match data since this function is
+       declared pure (see discussion in bug#42147).
+
+2020-07-29  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       d024fc141b (origin/emacs-27) * doc/lispref/symbols.texi (Definitions)...
+       d78e0f3cd5 ; lisp/ldefs-boot.el: Update.
+       27877e7bcf (tag: emacs-27.1-rc1) * etc/HISTORY: Add Emacs 27.1 
release...
+
+2020-07-29  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       1fc742b63e ; Update ChangeLog.3
+       4c7f6217da * etc/AUTHORS: Update.
+       24391f517a Update authors.el
+       56f958807c * etc/NEWS: Remove temporary markup.
+       73a2f51043 Add another test for global module references
+
+       # Conflicts:
+       #       etc/AUTHORS
+       #       etc/NEWS
+
+2020-07-29  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       4b3085a7fe Fix last change
+       efdd4632c9 Fix Arabic shaping when column-number-mode is in effect
+       d5acc50941 Fix description of kmacro-* commands in the user manual
+
+2020-07-29  Michael Albinus  <michael.albinus@gmx.de>
+
+       * etc/NEWS: Fix typos.
+
+2020-07-29  Michael Albinus  <michael.albinus@gmx.de>
+
+       Tramp doc edit
+
+       * doc/misc/tramp.texi: Use it.
+
+       * doc/misc/trampver.texi: Declare @trampurl.
+
+2020-07-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't default to librgravatar, since there are security implications
+
+       * lisp/image/gravatar.el (gravatar-service): Change the default
+       from libravatar, since that has privacy concerns (bug#40676).
+
+2020-07-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Use a new method to determine when to auto-stop image animations
+
+       * lisp/image.el (image-animate-timeout): Make the animation
+       auto-stop use a decaying average to determine when to stop
+       (bug#40685).  The default stop condition will probably require
+       some tweaking -- the current default may be too aggressive.
+
+2020-07-29  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make eww use the XDG download directory
+
+       * lisp/net/eww.el (erc--download-directory): New function (bug#41030).
+       (eww-download-directory): Use it.
+       (eww-download): Use it.
+       (eww-download-callback): Adjust parameters.
+
+2020-07-29  Philip K  <philip@warpmail.net>
+
+       Make the erc-header-line default to header-line
+
+       * lisp/erc/erc.el (erc-header-line): Inherit from header-line (the
+       old values were very similar in light mode, but very different
+       in dark mode) (bug#41095).
+
+2020-07-29  Juri Linkov  <juri@linkov.net>
+
+       * lisp/vc/vc-git.el (vc-git-log-view-mode): Font-lock AuthorDate 
(bug#40248)
+
+       Highlight "AuthorDate" in log-view-font-lock-keywords
+       when [format] pretty = fuller.
+
+2020-07-29  Philip K  <philip@warpmail.net>
+
+       Replace project-kill-buffers-ignores with project-kill-buffer-conditions
+
+       * lisp/progmodes/project.el (project-kill-buffer-conditions):
+       Replace the project-kill-buffers-ignores user option.
+       (project--kill-buffer-check): New function.
+       (project--buffers-to-kill): New function.
+       (project-kill-buffers): Use them.  Add the NO-CONFIRM argument.
+
+2020-07-28  Nicolas Petton  <nicolas@petton.fr>
+
+       Revert "* etc/NEWS.27: Remove temporary markup."
+
+       This reverts commit c270104e503cf0435a5ae40c5d0e430f4ef4bfb0.
+
+2020-07-28  Nicolas Petton  <nicolas@petton.fr>
+
+       * etc/NEWS.27: Remove temporary markup.
+
+       * etc/AUTHORS: Update.
+
+2020-07-28  Nicolas Petton  <nicolas@petton.fr>
+
+       Update authors.el
+
+       * admin/authors.el (authors-aliases): Add author aliases.
+       (authors-ignored-files):
+       (authors-valid-file-names):
+       (authors-renamed-files-alist): Update file lists.
+
+2020-07-28  Mattias Engdegård  <mattiase@acm.org>
+
+       Simplify and streamline optimizer clauses
+
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker):
+       Remove clause for 'with-output-to-temp-buffer', since it is a
+       macro and will have been expanded before reaching this point.
+       Move clauses for 'lambda' and 'closure' to avoid splitting
+       a cond jump table.
+
+2020-07-28  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Fix uses of deprecated SELinux security_context_t
+
+       SELinux has used 'char *' in place of its typedef
+       'security_context_t' since 2014 (v2.3) because the latter was
+       inconvenient to use when paired with the 'const' qualifier.  The
+       typedef has been kept around for compatibility with legacy callers,
+       but it is deprecated in SELinux v3.1.  See the following URL for the
+       relevant announcement:
+       
https://lore.kernel.org/selinux/20200710162034.GC1768200@localhost.localdomain/
+
+       * src/fileio.c (Fcopy_file, Ffile_selinux_context)
+       (Fset_file_selinux_context) [HAVE_LIBSELINUX]: Replace deprecated
+       'security_context_t' typedef with the equivalent 'char *'.
+
+2020-07-28  Michael Albinus  <michael.albinus@gmx.de>
+
+       Apply simpler fix for Tramp bug#39399
+
+       * lisp/net/tramp-sh.el (tramp-open-shell): Remove "~/.editrc" editing.
+       (tramp-open-connection-setup-interactive-shell): Move up "set +o
+       vi +o emacs" command.   (Bug#39399)
+
+2020-07-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix thinko in previous nnmail.el patch
+
+       * lisp/gnus/nnmail.el (nnmail-check-duplication): Fix thinko in
+       previous patch -- group-art is a list of pairs, not a pair.
+
+2020-07-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix problem with new-mail-mark in Gnus with non-unique names
+
+       * lisp/gnus/gnus-group.el (gnus-group-new-mail): Call with Gnus
+       group name.
+       (gnus-group-catchup): Ditto.
+
+       * lisp/gnus/gnus-sum.el (gnus-summary-exit): Ditto.
+
+       * lisp/gnus/nnimap.el (nnimap-update-info): Store Gnus group name.
+
+       * lisp/gnus/nnmail.el (nnmail-check-duplication): Store unique
+       Gnus names in the history instead of backend-specific (possibly
+       duplicated) group names (bug#41842).
+
+2020-07-28  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       * doc/misc/gnus.texi: Add introductory section to Gnus manual
+
+       "Don't Panic: Your first 20 minutes with Gnus."
+
+2020-07-27  João Távora  <joaotavora@gmail.com>
+
+       Make newer ElDoc versions are compatible with Emacs < 28
+
+       (Bug#42563)
+
+       For some time, Eldoc has has some Elisp-specific code that shouldn't
+       live there, but in elisp-mode.el.  This can be fixed in Emacs master,
+       but since ElDoc is distributed in GNU Elpa and is meant to work with
+       Emacs 26 and 27, this means that that elisp-specific code must still
+       be distributed with eldoc.el and kept up to date.
+
+       * lisp/emacs-lisp/eldoc.el (eldoc--eval-expression-setup): Ensure
+       implementation is compatible with Emacs < 28.
+       (Version): Bump to 1.8
+
+2020-07-27  João Távora  <joaotavora@gmail.com>
+
+       Bring back ElDoc's eldoc-display-message-p, but obsolete it
+
+       Like others, this is an implementation detail that third parties could
+       be relying on.  Better not remove it outright just now, since its
+       implementation is very simple anyway.
+
+       * lisp/emacs-lisp/eldoc.el (Version): Bump to 1.7.0
+       (eldoc-display-message-p): Bring back, but obsolete.
+
+2020-07-27  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Fix argument reference
+
+       * lisp/progmodes/project.el
+       (project-display-buffer-other-frame): Fix argument reference.
+
+2020-07-27  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Move project--value-in-dir to a different section
+
+       * lisp/progmodes/project.el (project--value-in-dir):
+       Move closer to its uses.
+
+2020-07-27  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Bind switch-to-buffer-obey-display-actions to t
+
+       * lisp/progmodes/project.el (project--other-place-command):
+       Bind switch-to-buffer-obey-display-actions to t, so that
+       project-other-window-command and friends can affect
+       project-switch-to-buffer.
+
+2020-07-27  Sean Whitton  <spwhitton@spwhitton.name>
+
+       Add project other place commands
+
+       * lisp/progmodes/project.el (project-other-window-map,
+       project-other-frame-map, project--other-place-command,
+       project-other-window-command, project-other-frame-command,
+       project-other-tab-command): Add these functions and maps.
+       * lisp/progmodes/project.el: Bind project-other-window-command to C-x
+       4 p, project-other-frame-command to C-x 5 p and
+       project-other-tab-command to C-x t p (bug#42210).
+
+2020-07-27  Sean Whitton  <spwhitton@spwhitton.name>
+
+       Add project-display-buffer and project-display-buffer-other-frame
+
+       * lisp/progmodes/project.el (project-display-buffer,
+       project-display-buffer-other-frame): Add commands.
+
+2020-07-27  Sean Whitton  <spwhitton@spwhitton.name>
+
+       Factor out project--read-project-buffer from project-switch-buffer
+
+       * lisp/progmodes/project.el (project--read-project-buffer): New
+       function extracted from project-switch-buffer.
+       * lisp/progmodes/project.el (project-switch-buffer): Instead of
+       unconditionally reading a project buffer from the user, add
+       buffer-or-name argument, and populate it using
+       project--read-project-buffer when called interactively.  Update
+       docstring.
+
+2020-07-26  Philipp Stephani  <phst@google.com>
+
+       Small refactoring to simplify the interface of internal function.
+
+       * src/emacs-module.c (allocate_emacs_value): Remove STORAGE parameter.
+       (lisp_to_value): Adapt caller.
+
+2020-07-26  João Távora  <joaotavora@gmail.com>
+
+       Correct order or eldoc-documentation-functions in Elisp mode
+
+       (Bug#42531)
+
+       * lisp/progmodes/elisp-mode.el (emacs-lisp-mode): Reverse order of
+       eldoc-documentation-functions.
+
+2020-07-26  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savahnna/master' into HEAD
+
+2020-07-26  Andrea Corallo  <akrl@sdf.org>
+
+       Add NATIVE_COMP to `system-configuration-features'
+
+       * configure.ac (emacs_config_features): Add NATIVE_COMP
+
+2020-07-26  Andrea Corallo  <akrl@sdf.org>
+
+       Add `comp-ensure-native-compiler' guarding entry points
+
+       * lisp/emacs-lisp/comp.el (comp-ensure-native-compiler): New function.
+       (native-compile, batch-native-compile)
+       (batch-byte-native-compile-for-bootstrap, native-compile-async):
+       Make use of `comp-ensure-native-compiler'.
+
+2020-07-25  Philipp Stephani  <phst@google.com>
+
+       Make checking for liveness of global values more precise.
+
+       We can't just use a hash lookup because a global and a local reference
+       might refer to the same Lisp object.
+
+       * src/emacs-module.c (module_free_global_ref): More precise check for
+       global liveness.
+
+       * test/data/emacs-module/mod-test.c (Fmod_test_globref_invalid_free):
+       New test module function.
+       (emacs_module_init): Export it.
+
+       * test/src/emacs-module-tests.el
+       (module--test-assertions--globref-invalid-free): New unit test.
+
+2020-07-25  Philipp Stephani  <phst@google.com>
+
+       Fix subtle bug when checking liveness of module values.
+
+       We can't simply look up the Lisp object in the global reference table
+       because an invalid local and a valid global reference might refer to
+       the same object.  Instead, we have to test the address of the global
+       reference against the stored references.
+
+       * src/emacs-module.c (module_global_reference_p): New helper function.
+       (value_to_lisp): Use it.
+
+       * test/data/emacs-module/mod-test.c
+       (Fmod_test_invalid_store_copy): New test module function.
+       (emacs_module_init): Export it.
+
+       * test/src/emacs-module-tests.el
+       (module--test-assertions--load-non-live-object-with-global-copy):
+       New unit test.
+
+2020-07-25  Mattias Engdegård  <mattiase@acm.org>
+
+       Optimise 3-arg +, - and *
+
+       Turn (+ a b c) into (+ (+ a b) c), and do the same for - and *.
+       The 2-arg operations have their own bytecode which results in a 1.5×
+       speed-up.  Furthermore, the transform enables other optimisations; for
+       example, (+ a 1 b) -> (+ (1+ a) b).
+
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize-plus, byte-optimize-minus)
+       (byte-optimize-multiply): Transform (OP a b c) into (OP (OP a b) c).
+
+2020-07-25  Eli Zaretskii  <eliz@gnu.org>
+
+       Update and improve documentation of project.el commands
+
+       * doc/emacs/custom.texi (Prefix Keymaps): Document
+       'project-prefix-map'.
+       * doc/emacs/maintaining.texi (Project File Commands)
+       (Switching Projects): Describe key bindings for the commands
+       described in the sections.  Document 'project-list-file'.
+       (Project Buffer Commands): New section.
+       * doc/emacs/emacs.texi (Top): Add Project sections to the detailed
+       menu.
+
+       * etc/NEWS: Add entries for project.el, and mark documented entries as
+       appropriate.
+
+2020-07-25  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix display of man pages after killing the 'man' process
+
+       * lisp/man.el (Man-bgproc-filter, Man-bgproc-sentinel): Use
+       'buffer-live-p' instead of just testing the buffer's name.
+       (Bug#42160)
+
+2020-07-25  Dmitry Gutov  <dgutov@yandex.ru>
+
+       project-remember-project: New public function
+
+       * lisp/progmodes/project.el (project-remember-project):
+       Rename from project--add-to-project-list-front (bug#42332).
+       And autoload it.
+
+2020-07-24  Juri Linkov  <juri@linkov.net>
+
+       * lisp/vc/vc-git.el (vc-git-log-view-mode): Fix commit regexp 
(bug#40248)
+
+       The regexp 'log-view-message-re' should match e.g. "commit 123456789",
+       not "CommitDate".
+
+2020-07-23  Tassilo Horn  <tsdh@gnu.org>
+
+       Don't call undefined function elisp-eldoc-documentation-function 
(bug#42493)
+
+       * lisp/ielm.el (inferior-emacs-lisp-mode): Add
+       `elisp-eldoc-var-docstring' and `elisp-eldoc-funcall' as
+       `eldoc-documentation-functions' instead of the undefined
+       elisp-eldoc-documentation-function (bug#42493).
+
+2020-07-23  Tassilo Horn  <tsdh@gnu.org>
+
+       bug-reference auto-setup for IRC, implementation for ERC
+
+       * lisp/progmodes/bug-reference.el (bug-reference-setup-from-irc-alist):
+       Change SERVER-REGEXP to NETWORK-REGEXP in docstring.
+       * lisp/progmodes/bug-reference.el (bug-reference--maybe-setup-from-irc):
+       Change semantics from requiring a match of channel OR server to
+       requiring a match of both (if both are configured).
+       * lisp/progmodes/bug-reference.el (bug-reference-try-setup-from-erc):
+       New defun doing the auto-setup for ERC.
+       (bug-reference--run-auto-setup): Run bug-reference-try-setup-from-erc.
+       * etc/NEWS: Extend entry describing bug-reference auto-setup.
+
+2020-07-23  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix viewing of encrypted S/MIME messages
+
+       * lisp/gnus/mm-decode.el (mm-possibly-verify-or-decrypt): Don't
+       add a content-type header if there already is one (bug#41659).
+
+2020-07-23  Philipp Stephani  <phst@google.com>
+
+       Fix memory leak for global module objects (Bug#42482).
+
+       Instead of storing the global values in a global 'emacs_value_storage'
+       object, store them as hash values alongside the reference counts.
+       That way the garbage collector takes care of cleaning them up.
+
+       * src/emacs-module.c (global_storage): Remove.
+       (struct module_global_reference): New pseudovector type.
+       (XMODULE_GLOBAL_REFERENCE): New helper function.
+       (module_make_global_ref, module_free_global_ref): Use
+       'module_global_reference' struct for global reference values.
+       (value_to_lisp, module_handle_nonlocal_exit): Adapt to deletion of
+       'global_storage'.
+
+2020-07-23  João Távora  <joaotavora@gmail.com>
+
+       Don't needlessly request docs from ElDoc functions
+
+       (Bug#42421)
+
+       Do this conservatively for now: if the ElDoc helper buffer (as
+       returned by eldoc--doc-buffer) is visible and showing documentation
+       for the very same "situation" (as computed by the the new
+       eldoc--request-state helper), don't request that documentation from
+       sources again.
+
+       Before this change, not only was that request inefficient but if the
+       user invoked scroll-other-window to see more of the helper buffer,
+       that would eventually cause it to be reformatted and unexpectedly
+       recentered.
+
+       Later on, when a customizable list of documentation "sinks" is offered
+       to the user, say, something like eldoc-display-functions, this process
+       must be consolidated.  In those circumstances, as soon as one of those
+       sinks signals that it doesn't have up-to-date documentation for the
+       state computed by eldoc--request-state, documentation will have to be
+       requested anew from eldoc-documentation-functions via
+       eldoc--invoke-strategy.
+
+       * lisp/emacs-lisp/eldoc.el (eldoc--request-docs-p): Rework from
+       eglot-display-message-p.
+       (eldoc--last-request-state): New variable.
+       (eldoc--request-state): New helper.
+       (eldoc--handle-docs): Memorize state of request in doc buffer.
+       (eldoc-print-current-symbol-info): Pass a token to
+       eldoc--request-docs-p.
+       (Version): Bump to 1.6.0
+
+2020-07-22  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       4db3235fd8 Run custom-magic-reset in the customize buffer
+       3c9c3f04de ; spelling fix
+
+2020-07-22  Mattias Engdegård  <mattiase@acm.org>
+
+       Calc: fix interval entry snag (bug#42438)
+
+       * lisp/calc/calc.el (calcDigit-key): Don't signal a 'Bad format' error
+       when entering '..' after pushing an incomplete interval.
+
+       Reported by Allen Li.
+
+2020-07-20  Ken Manheimer  <ken.manheimer@gmail.com>
+
+       Rectify allout-widgets region undecoration so item at start is not 
missed.
+
+       * lisp/allout-widgets.el (allout-widgets-undecorate-region):
+       Reorganize the loop so an item at the start is not skipped.
+
+2020-07-20  Ken Manheimer  <ken.manheimer@gmail.com>
+
+       Resolve missing button-region keymap bindings.
+
+       * lisp/allout-widgets.el (allout-item-icon-keymap,
+       allout-item-body-keymap, allout-cue-span-keymap, allout-widgets-mode):
+       Inherit from both (current-local-map) and (current-global-map). This
+       provides for missing global bindings when inheriting from
+       just (current-local-map), eg Esc-<.
+
+2020-07-20  Ken Manheimer  <ken.manheimer@gmail.com>
+
+       Provide missing let definition to prevent background void-variable 
error.
+
+       * lisp/allout-widgets.el (allout-widgets-exposure-change-processor)
+       Let-declare handled-conceal, for reference through `(symbol-value)'
+       within the let body. (Because the error happens in an
+       after-change-functions hook, so it is caught and reported as a message
+       by allout-widgets-hook-error-handler.)
+
+2020-07-20  Ken Manheimer  <ken.manheimer@gmail.com>
+
+       Don't let item decoration be disrupted by too-shallow items.
+
+       * lisp/allout-widgets.el (allout-decorate-item-and-context): Check for
+       parent-position having value before using it.
+
+       Also, shift local emacs vars topic deeper so it doesn't constitute
+       an instance of that particular aberrant case.
+
+2020-07-20  Ken Manheimer  <ken.manheimer@gmail.com>
+
+       Fix allout-widgets-mode handling of edits to item cue, fixing 
(bug#11312)
+
+       * lisp/allout-widgets.el (allout-decorate-item-cue): Properly decorate
+       item cue span.
+       (allout-setup-text-properties): use allout-graphics-modification-handler
+       as allout-cue-span-category modification hook.
+
+2020-07-20  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       cd93debc60 (origin/emacs-27) Merge branch 'emacs-27' of git.savannah....
+       2c0c613ec5 Document prefix arg effects for 'epa-mail-{sign,encrypt}'
+       551123e0b2 * etc/NEWS: Correct description of :client-certificate change
+       05c4329cf5 Revert "Fix filename completion in shell mode buffers"
+       de68572742 Improve documentation of 'bookmark-bmenu-mode'
+       fd85e70be7 Update systems using GnuTLS certificate files
+       0d4ba1c2b2 Improve documentation of 'kill-emacs'
+       b3bbd4fd00 Improve documentation of 'display-raw-bytes-as-hex'
+       f50d79af6b Correct descriptions of init file
+       e325d2638c Fix interrupt-process on MS-Windows
+       d24e56a5e4 Revert "* doc/misc/flymake.texi (An annotated example back...
+
+       # Conflicts:
+       #       etc/NEWS
+
+2020-07-20  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix problem with Tramp progress reporter
+
+       * lisp/net/tramp.el (with-tramp-progress-reporter): Do not span a
+       new progress reporter if there's already another one.
+
+2020-07-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make xwidget-webkit-browse-url slightly more DWIM
+
+       * lisp/xwidget.el (xwidget-webkit-browse-url): Prepend "https" to
+       URLs that don't have a protocol (bug#31369).
+
+2020-07-20  Mattias Engdegård  <mattiase@acm.org>
+
+       Suppress relint false positive in gnus-start.el
+
+       * lisp/gnus/gnus-start.el (gnus-active-to-gnus-format):
+       Add suppressive comment.  Prepending "^to\\.\\|" is redundant when
+       'gnus-ignored-newsgroups' already matches that pattern, but adding
+       logic here is not worth the trouble.
+
+2020-07-20  Dmitry Gutov  <dgutov@yandex.ru>
+
+       project.el: Add more docs and two new key bindings
+
+       * lisp/progmodes/project.el:
+       Add a longer description of the package and how to use it.
+       (project-prefix-map): Add entries for
+       'project-or-external-find-file' and
+       'project-or-external-find-regexp'.
+
+2020-07-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Only kill url-retrieve-synchronously connections when we have a timeout
+
+       * lisp/url/url.el (url-retrieve-synchronously): Only kill the
+       connections when we have a timeout (bug#34607).
+
+2020-07-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make timeouts work more reliably in url-retrieve-synchronously
+
+       * lisp/url/url.el (url-retrieve-synchronously): Ensure that the
+       processes have been killed on timeouts before returning the buffer
+       (bug#34607).
+
+2020-07-19  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-07-19  Daniele Nicolodi  <daniele@grinta.net>  (tiny change)
+
+       url-http: Fix handling of redirect locations
+
+       * lisp/url/url-http.el (url-http-parse-headers): Parse redirect
+       URIs more like other web browsers (bug#42382).
+
+       RFC 7231 the Location header is defined to carry a URI-reference.
+       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
+       angle bracket quotes as they are not valid according to the RFCs.
+
+2020-07-19  Satoshi Nakagawa  <ghnacker@gmail.com>  (tiny change)
+
+       Support Proxy-Authorization in HTTPS CONNECT proxies
+
+       * lisp/url/url-http.el (url-https-proxy-connect): Support CONNECT
+       with Proxy-Authorization header (bug#42422).
+
+2020-07-19  Michael Albinus  <michael.albinus@gmx.de>
+
+       * lisp/net/tramp-adb.el (tramp-adb-prompt): Further simplification.
+
+       Suggested by Mattias Engdegård <mattiase@acm.org>.
+
+2020-07-19  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Complete over the MIME types in gnus-summary-save-parts
+
+       * lisp/gnus/gnus-sum.el (gnus-summary-save-parts): Allow
+       completing over the parts in the first article in the list of the
+       process-marked articles (bug#39543).
+
+2020-07-19  Štěpán Němec  <stepnem@gmail.com>
+
+       gnus-button-alist: Prefer URL links to Elisp library links
+
+       * lisp/gnus/gnus-art.el (gnus-button-alist): Move the URL clauses
+       higher up the list before library link setup to prevent URLs ending in
+       ".el" from failing to be recognized (and invalid library links being
+       created instead) (bug#39781).
+
+2020-07-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Do window configuration change before killing Gnus buffers on exit
+
+       * lisp/gnus/gnus-sum.el (gnus-summary-exit): Do window
+       configuration changes before killing off the summary buffer, so
+       that the window conf machinery can return to a group-only
+       configuration (bug#40069).
+
+2020-07-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow adjusting the `W Q' Gnus summary command interactively
+
+       * doc/misc/gnus.texi (Article Washing): Document it.
+
+       * lisp/gnus/gnus-art.el (article-fill-long-lines): Take a numeric
+       prefix as the fill width (bug#38698).
+
+2020-07-19  Alan Mackenzie  <acm@muc.de>
+
+       Remove redundant code from c-font-lock-fontify-region
+
+       * lisp/progmodes/cc-mode.el (c-font-lock-fontify-region): Remove 
variables
+       string-fence-beg and lim, and the code used to calculate them.
+
+2020-07-19  Philipp Stephani  <phst@google.com>
+
+       Add missing 'require'.
+
+       * lisp/progmodes/project.el: Require seq.el explicitly as
+       'seq-every-p' isn't autoloaded in Emacs 26.3.
+
+2020-07-19  Kévin Le Gouguec  <kevin.legouguec@gmail.com>
+
+       Simplify dummy root subject before comparing it to the current article
+
+       * lisp/gnus/gnus-sum.el (gnus-summary-prepare-threads): Simplify both
+       the dummy root and the following article before comparing them,
+       otherwise both the former and the latter might display the thread's
+       subject even when gnus-summary-line-format contains "%s" (bug#40520).
+
+2020-07-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix C-c C-f in the Gnus article buffer
+
+       * lisp/gnus/gnus-art.el (gnus-article-mode-map): Make the C-c C-f
+       command work in the article buffer, too (bug#40548).
+
+2020-07-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Mention the Emacs bug tracker in the bug reporting doc strings
+
+       * lisp/gnus/gnus-msg.el (gnus-bug): Mention the Emacs bug tracker.
+
+       * lisp/mail/emacsbug.el (report-emacs-bug): Link directly to the
+       Emacs portion of the bug reports (bug#41109).
+
+2020-07-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Doc fix for article-fill-long-lines
+
+       * lisp/gnus/gnus-art.el (article-fill-long-lines): Mention that it
+       also respects `fill-column' (bug#41534).
+
+2020-07-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Allow open-network-stream to use different TLS capability commands
+
+       * doc/lispref/processes.texi (Network): Document non-string
+       capability command.
+       * lisp/gnus/nntp.el (nntp-open-connection): Use HELP for Typhoon
+       and CAPABILITIES for everything else (bug#41960).
+
+       * lisp/net/network-stream.el (open-network-stream): Document
+       function variety of :capability-command.
+       (network-stream-open-starttls): Use it.
+       (network-stream-open-tls): Ditto.
+       (network-stream-open-shell): Ditto.
+       (network-stream--capability-command): New helper function.
+
+2020-07-19  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Narrow to headers in gnus-registry before getting data
+
+       * lisp/gnus/gnus-registry.el (gnus-registry-spool-action): Narrow
+       to the headers before getting data from them (bug#42029).
+
+2020-07-19  João Távora  <joaotavora@gmail.com>
+
+       Fix ElDoc bugs around eldoc-echo-area-use-multiline-p.
+
+       If the value is 'truncate-sym-name-if-fit and the single docstring
+       doesn't fit in the echo area even when the symbol name is elided, that
+       step shouldn't be attempted.  Also if the value is nil, really ensure
+       that only the first line is shown.
+
+       * lisp/emacs-lisp/eldoc.el (eldoc--handle-docs): Rework
+       'truncate-sym-name-if-fit case of eldoc-echo-area-use-multiline-p.
+
+2020-07-19  Juri Linkov  <juri@linkov.net>
+
+       * lisp/window.el (display-buffer-override-next-command): Add ECHO arg.
+
+       * lisp/frame.el (other-frame-prefix):
+       * lisp/tab-bar.el (other-tab-prefix):
+       * lisp/windmove.el (windmove-display-in-direction):
+       * lisp/window.el (other-window-prefix, same-window-prefix):
+       Use new ECHO arg of display-buffer-override-next-command.
+
+       https://lists.gnu.org/archive/html/emacs-devel/2020-06/msg00819.html
+
+2020-07-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't have shr kill random buffers on network failures
+
+       * lisp/url/url-queue.el (url-queue-callback-function): Don't kill
+       off random buffers on HTTP failures (bug#40976).
+
+2020-07-18  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make eww-open-file work with Tramp file names
+
+       * lisp/net/eww.el (eww-open-file): Allow opening non-local Tramp
+       files (bug#40425).
+       (eww): Adjust calling convention to allow passing in data directly
+       via a buffer.
+
+2020-07-18  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix documentation of a recent change in shr.el
+
+       * lisp/net/shr.el (shr-max-width, shr-width): Fix typo and wording
+       of the doc strings.
+
+       * etc/NEWS: Fix the wording of the 'shr-max-width's entry, and
+       move it to the SHR section.
+
+2020-07-17  Tassilo Horn  <tsdh@gnu.org>
+
+       bug-reference auto-setup for IRC, implementation for rcirc
+
+       * lisp/progmodes/bug-reference.el (bug-reference-setup-from-irc-alist):
+       New defvar for configuring bug regexp and URL based on IRC channel and
+       server names.
+       (bug-reference--maybe-setup-from-irc): New defun doing the setup given
+       channel and server.
+       (bug-reference-try-setup-from-rcirc): New defun calling the above for
+       rcirc buffers.
+       (bug-reference--run-auto-setup): Enable the auto-setup for rcirc.
+       * etc/NEWS: Extend entry describing bug-reference auto-setup.
+
+2020-07-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix NOT-CURRENT behaviour in text-property-search-backward
+
+       * lisp/emacs-lisp/text-property-search.el
+       (text-property-search-backward): Fix inconsistent behaviour of
+       S-TAB in eww (and other callers that use the NOT-CURRENT
+       behaviour) when there are adjacent elements
+       (bug#39239).
+
+2020-07-17  Xu Chunyang  <xuchunyang56@gmail.com>
+
+       Fix <textarea> default texts in eww
+
+       * lisp/net/eww.el (eww-tag-textarea): <textarea> default text
+       comes from the contents, not a value attribute (bug#39867).
+
+2020-07-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't message complete GIF data upon errors
+
+       * src/image.c (gif_load): When unable to parse a GIF specified
+       via a data attribute, don't message the complete binary, because
+       that's not useful (bug#40850).
+
+2020-07-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add support for a shr-max-width variable
+
+       * doc/misc/eww.texi (Advanced): Document it.
+
+       * lisp/net/shr.el (shr-max-width): Add new variable (bug#40909).
+       (shr-insert-document): Use it.
+
+2020-07-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Clarify shr width computation
+
+       * lisp/net/shr.el (shr-insert-document): Clarify width
+       computation: shr-width was checked again in the `else' part where
+       we already knew it was nil.
+
+2020-07-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make old aliases to gnus-child* commands work before Gnus is loaded
+
+       * lisp/gnus/gnus.el (gnus-slave-no-server, gnus-slave): Mark as
+       obsolete in a way that still lets them be used as interactive
+       commands before Gnus is loaded.
+       * lisp/gnus/gnus-agent.el (gnus-slave-unplugged): Ditto (bug#42401).
+
+2020-07-17  Stefan Kangas  <stefankangas@gmail.com>
+
+       Show eww bookmarks buffer only if it's not empty
+
+       * lisp/net/eww.el (eww-list-bookmarks): Don't show buffer if there
+       are no bookmarks.  (Bug#41385)
+       (eww-bookmark-prepare): Move signalling an error if there are no
+       bookmarks from here...
+       (eww-read-bookmarks): ...to here.  Add new argument `error-out' to
+       control this.
+       (eww-next-bookmark, eww-previous-bookmark): Call
+       `eww-read-bookmarks'.
+
+2020-07-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix problems with not rendering shr tables with rowspan
+
+       * lisp/net/shr.el (shr-max-columns): When rowspans were in effect,
+       columns would go missing from subsequent lines (bug#42194).
+
+2020-07-17  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Adjust naming convention for dependent Gnus sessions
+
+       * doc/misc/gnus.texi (Child Gnusae): Rename node from "Slave
+       Gnusae" and adjust wording.  Also remove at least one joke.
+
+       * lisp/gnus/gnus-start.el (gnus-no-server-1, gnus-1)
+       (gnus-setup-news, gnus-save-newsrc-file): Adjust parameter names.
+       (gnus-child-mode): Rename and add alias.
+       (gnus-child-save-newsrc): Rename.
+       (gnus-parent-read-child-newsrc): Ditto.
+
+       * lisp/gnus/gnus-group.el (gnus-group-mode)
+       (gnus-group-get-new-news): Ditto.
+
+       * lisp/gnus/gnus-agent.el (gnus-child-unplugged): Rename function
+       from gnus-slave-unplugged (and add the latter as an obsolete alias).
+
+       * lisp/gnus/gnus.el (gnus-other-frame-function): Adjust function
+       names in the defcustom to new naming scheme.
+       (gnus-other-frame-resume-function): Ditto.
+       (gnus): Adjust parameter names.
+
+2020-07-16  Tassilo Horn  <tsdh@gnu.org>
+
+       Add tramp and orgmode to bug-reference-setup-from-mail-alist.
+
+       Also add a TODO that I should implement something similar for
+       IRC (rcirc/ERC).
+
+       * lisp/progmodes/bug-reference.el (bug-reference-setup-from-mail-alist):
+       Auto-setup also with groups matching orgmode and tramp.
+
+2020-07-16  Juri Linkov  <juri@linkov.net>
+
+       Use describe-char-padded-string for composed character names in "C-u 
C-x ="
+
+       * lisp/descr-text.el (describe-char): Use describe-char-padded-string
+       for displaying Unicode names of composed characters on GUI frames.
+       (Bug#42256)
+
+2020-07-15  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savahnna/master' into HEAD
+
+2020-07-15  Andrea Corallo  <akrl@sdf.org>
+
+       Add a testcase for bug#42360
+
+       * test/src/comp-tests.el (comp-test-42360): New testcase.
+
+       * test/src/comp-test-funcs.el (comp-test-42360-f): New function.
+
+2020-07-15  Andrea Corallo  <akrl@sdf.org>
+
+       Fix bug#42360
+
+       * src/comp.c (compile_function): Allocate function frame as array
+       if non local exits are present to retain correct Elisp semantic.
+       (emit_limple_call_ref): Directly use the frame array for ref calls
+       to have GCC spills into it before calling.
+
+2020-07-15  Tassilo Horn  <tsdh@gnu.org>
+
+       ;Fix eldoc regression bug#42365
+
+2020-07-15  Jonas Bernoulli  <jonas@bernoul.li>
+
+       * lisp/epa.el (epa-show-key): New command.
+
+       Users can move in `epa-key-list-mode' buffers using either
+       `next-line'/`previous-line' or `widget-forward'/`widget-backward'.
+       When using the first set of commands, then the cursor stays in the
+       current column and that normally is the first column.  The key
+       widgets do not begin until the third character of their respective
+       lines.
+
+       All `epa' commands work regardless of whether the cursor is on the
+       widget or before them.  The `epa-show-key' command did not exist until
+       now because the `widget-button-press' already performs its task.  But
+       because the widgets don't span complete lines we actually need this
+       command too.
+
+2020-07-15  Jonas Bernoulli  <jonas@bernoul.li>
+
+       epa-key-list-mode-map: Use widget-keymap as parent keymap
+
+       Normally when one keymap is to be treated as the parent of another,
+       then that relationship is setup once at the time when the child is
+       being defined, i.e. at birth.  For some reason, this was not done
+       here; instead `widget-keymap' is set as `epa-key-list-mode-map'
+       parent every time the former is setup to be used as the local map.
+
+       This appears to be a mistake.  A few other keymaps use `widget-keymap'
+       as their parent and in those cases the relationship is established
+       just once. `epa-key-list-mode-map' is the only exception and because
+       there is absolutely no indication that that is justified, we remove
+       this inconsistency.
+
+       * lisp/epa.el (epa-key-list-mode-map): Set the parent of this keymap
+       while defining it.
+       * lisp/epa.el (epa--list-keys): Do not set the parent of the local
+       keymap here.
+
+2020-07-15  Jonas Bernoulli  <jonas@bernoul.li>
+
+       Cosmetic changes to epa libraries
+
+       These changes make the code more readable.
+
+       * lisp/epa-dired.el (epa-dired-do-decrypt, epa-dired-do-verify)
+       (epa-dired-do-sign, epa-dired-do-encrypt): Use dolist instead
+       of while.
+       * lisp/epa-file.el (epa-file-passphrase-callback-function):
+       Set just one variable per setq call.
+
+2020-07-15  Jonas Bernoulli  <jonas@bernoul.li>
+
+       Drop unnecessary backward compatibility aliases
+
+       We can assume that `encode-coding-string' and `decode-coding-string'
+       are available; they were added in 1997.
+
+       * lisp/epa-file.el (epa-file--encode-coding-string)
+       (epa-file--decode-coding-string): Remove aliases for
+       encode-coding-string and decode-coding-string.
+       * lisp/epa-file.el (epa-file-write-region): Use encode-coding-string
+       instead of removed epa-file--encode-coding-string.
+
+2020-07-15  Jonas Bernoulli  <jonas@bernoul.li>
+
+       Improve and add doc-strings
+
+       * lisp/epa-file.el (epa-file-select-keys):
+       lisp/epa-hook.el (epa-file-name-regexp):
+       lisp/epa.el (epa-exit-buffer): Improve doc-string.
+       * lisp/epa-hook.el (epa-file-name-regexp-update): Add doc-string.
+
+2020-07-15  Jonas Bernoulli  <jonas@bernoul.li>
+
+       * lisp/epg-config.el (epg-config--make-gpg-configuration): Fix 
indentation.
+
+2020-07-15  Jonas Bernoulli  <jonas@bernoul.li>
+
+       Add all epa faces to epa-faces Custom group
+
+       `epa-validity-face-alist' isn't actually a face but belongs
+       in that group anyway.
+
+       * lisp/epa.el (epa-field-name, epa-field-body)
+       (epa-validity-face-alist): Add to epa-faces Custom group.
+
+2020-07-15  Jonas Bernoulli  <jonas@bernoul.li>
+
+       * lisp/epa.el (epa-faces): Move definition.
+
+       Previously option `epa-mail-aliases' was the only option that was
+       defined right after the group `epa-faces' and right before all the
+       faces.  Now it is defined with all the other options and thus before
+       the definition of the `epa-faces' group, which it does not belong to.
+
+2020-07-15  Andrea Corallo  <akrl@sdf.org>
+
+       Add a simple major mode for coloring LIMPLE in the log buffer
+
+       * lisp/emacs-lisp/comp.el (comp-limple-lock-keywords): New const.
+       (comp-limple-mode): New major mode.
+       (comp-log-to-buffer): Enable `comp-limple-mode' in the log buffer.
+
+2020-07-15  Juri Linkov  <juri@linkov.net>
+
+       Improve display of composed character names in "C-u C-x =" on GUI frames
+
+       * lisp/descr-text.el (describe-char): On GUI frames, display the
+       Unicode names of really composed characters only (Bug#42256)
+
+2020-07-14  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Consistently stylize eldoc as ElDoc in more prose
+
+       This fixes new occurrences of "Eldoc" since emacs-27.
+
+       * doc/lispref/modes.texi (Major Mode Conventions):
+       * etc/NEWS:
+       * lisp/descr-text.el (describe-char-eldoc):
+       * lisp/emacs-lisp/eldoc.el (eldoc-echo-area-use-multiline-p)
+       (eldoc-prefer-doc-buffer, eldoc--documentation-strategy-defcustom):
+       Consistently capitalize eldoc as ElDoc rather than Eldoc in
+       documentation and commentary.
+
+2020-07-14  Juri Linkov  <juri@linkov.net>
+
+       Improve documentation of "C-u C-x ="
+
+       * doc/emacs/mule.texi (International Chars): Update the
+       composition information displayed by "C-u C-x =".  (Bug#42256)
+
+2020-07-13  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savahnna/master' into HEAD
+
+2020-07-13  Andrea Corallo  <akrl@sdf.org>
+
+       Rename `comp-propagate' into  `fw-prop'
+
+       * lisp/emacs-lisp/comp.el (comp-passes): Rename `comp-propagate'
+       -> `comp-fwprop'.
+       (comp-fwprop-prologue): Rename from `comp-propagate-prologue'.
+       (comp-fwprop-insn): Rename from `comp-fwprop-insn'.
+       (comp-propagate*): Rename from `comp-propagate*' and update.
+       (comp-fwprop): Rename from `comp-propagate' and update.
+
+2020-07-13  Andrea Corallo  <akrl@sdf.org>
+
+       Clean-up now unnecessary backward propagation in comp.el
+
+       * lisp/emacs-lisp/comp.el (comp-passes): Invoke 'comp-propagate'
+       instead of 'comp-propagate-alloc'.
+       (comp-mvar): Remove unnecessary `array-idx' slot.
+       (comp-propagate-prologue): Remove.
+       (comp-propagate-prologue): Remove `backward' parameter and
+       backward propagation logic.
+       (comp-propagate1): Remove and move logic into `comp-propagate'.
+       (comp-propagate-alloc): Remove pass.
+
+2020-07-13  Andrea Corallo  <akrl@sdf.org>
+
+       Rework frame allocation strategy
+
+       All frame slots are now simple automatic variables given the array
+       allocation and fill is done in 'emit_limple_call_ref'.
+
+       * src/comp.c (comp_t): Remove 'f_frame' 'arrays' slots, add
+       'frame'.
+       (emit_mvar_lval): Simplify to make use of 'comp.frame'.
+       (compile_function): Clean-up and add comp.frame initialization.
+
+2020-07-13  Andrea Corallo  <akrl@sdf.org>
+
+       Rework the backend to allocate arument arrays for call by references
+
+       * src/comp.c (comp_t): Add 'zero' field.
+       (emit_limple_call_ref): Allocate an array to host the parameters
+       and generate the code moving values into.
+       (Fcomp__init_ctxt): Initialize comp.zero.
+
+2020-07-13  Juri Linkov  <juri@linkov.net>
+
+       Display "C-u C-x =" composed character names on GUI frames as well
+
+       * lisp/descr-text.el (describe-char): On GUI frames, display the
+       Unicode names of the composed characters like they are displayed
+       on TTY frames.  (Bug#42256)
+
+2020-07-12  Eli Zaretskii  <eliz@gnu.org>
+
+       ;* lisp/progmodes/project.el (project-current): Doc fix.
+
+2020-07-12  James N. V. Cash  <james.nvc@gmail.com>  (tiny change)
+
+       Fix a typo in eldoc.el
+
+       * lisp/emacs-lisp/eldoc.el (eldoc-documentation-functions): Fix a
+       typo.  (Bug#42310)
+
+2020-07-12  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix last doc changes in project.el
+
+       * lisp/progmodes/project.el (project-find-functions)
+       (project-current): Add back information which was recently
+       removed.
+
+2020-07-12  João Távora  <joaotavora@gmail.com>
+
+       Sort out ElDoc backward compatibility of eldoc-documentation-function
+
+       As explained previously, we can't simply make
+       eldoc-documentation-function an variable alias for
+       eldoc-documentation-strategy, because ElDoc is pre-loaded in Emacs <
+       28, where it holds at least one buffer-local binding.  So if eldoc.el
+       is loaded in those versions, we do the variable alias binding in
+       reverse.  We do this using a macro
+       eldoc--documentation-strategy-defcustom to at load time in which
+       direction to make the variable alias.
+
+       * lisp/emacs-lisp/eldoc.el
+       (eldoc--documentation-strategy-defcustom): Helper macro.
+       (eldoc-documentation-strategy, eldoc-documentation-function): Use it.
+       (Version): Bump to 1.5.0
+
+2020-07-12  Michael Albinus  <michael.albinus@gmx.de>
+
+       More Tramp code cleanup
+
+       * lisp/net/tramp.el (tramp-process-actions):
+       * lisp/net/tramp-adb.el (tramp-adb-handle-file-system-info)
+       (tramp-adb-handle-set-file-times)
+       (tramp-adb-maybe-open-connection):
+       * lisp/net/tramp-cmds.el (tramp-rename-files, tramp-rename-these-files)
+       (tramp-reporter-dump-variable):
+       * lisp/net/tramp-sh.el (tramp-do-file-attributes-with-stat)
+       (tramp-sh-handle-file-selinux-context)
+       (tramp-do-directory-files-and-attributes-with-stat)
+       (tramp-sh-handle-file-name-all-completions)
+       (tramp-sh-handle-write-region)
+       (tramp-sh-handle-file-notify-add-watch)
+       (tramp-sh-gvfs-monitor-dir-process-filter)
+       (tramp-sh-inotifywait-process-filter)
+       (tramp-sh-handle-file-system-info, tramp-find-executable)
+       (tramp-open-shell, tramp-find-shell):
+       * lisp/net/tramp-smb.el (tramp-smb-do-file-attributes-with-stat)
+       (tramp-smb-handle-file-system-info):
+       * lisp/net/tramp-sudoedit.el 
(tramp-sudoedit-handle-file-selinux-context)
+       (tramp-sudoedit-handle-file-system-info): Remove superfluous
+       `eval-when-compile', `concat' creates the string during byte
+       compilation.  Reported by Mattias Engdegård <mattiase@acm.org>.
+
+       * lisp/net/tramp-adb.el (tramp-adb-prompt): Simplify.
+       (tramp-adb-send-command):
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-dbus-string-to-byte-array):
+       Use `string-match-p'.
+
+       * lisp/net/tramp-sh.el (tramp-sunos-unames): New defconst.
+       (tramp-find-executable, tramp-find-shell, tramp-get-remote-stat): Use 
it.
+
+2020-07-12  Dmitry Gutov  <dgutov@yandex.ru>
+
+       project-kill-buffers: Update the docstring too
+
+       * lisp/progmodes/project.el (project-kill-buffers):
+       Copy a sentence over from project-switch-to-buffer.
+
+2020-07-12  Dmitry Gutov  <dgutov@yandex.ru>
+
+       More docstring updates in project.el
+
+       * lisp/progmodes/project.el (project-find-functions)
+       (project-current, project-switch-to-buffer):
+       More docstring updates.
+
+2020-07-11  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       c04b92104c Add commentary in gtkutil.c
+       6290850dac Consistently stylize eldoc as ElDoc in prose
+       136e931189 Improve documentation of "C-u C-x ="
+       1f52771fd3 Mention floating rounding issues
+       c892ae65b4 Repair global-auto-revert-ignore-modes (bug#42271)
+       3a446a02fb ; * src/xdisp.c (decode_mode_spec): Fix commentary.
+       79f381b4a6 One more improvement of left/right-fringe display spec docs
+       1279bdb072 Another clarification of left/right-fringe display spec
+
+       # Conflicts:
+       #       doc/emacs/programs.texi
+
+2020-07-11  Mattias Engdegård  <mattiase@acm.org>
+
+       Correct 'concat' manual entry (bug#42296)
+
+       * doc/lispref/strings.texi (Creating Strings): 'concat' does not
+       necessarily return a newly allocated string.  This has been the case
+       at least since 1997 (Emacs 20.3).
+
+2020-07-11  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix multibyte chars of file names in tramp-adb.el
+
+       * lisp/net/tramp-adb.el (tramp-adb-execute-adb-command): Revert return
+       value meaning.  Insert the result into the connection buffer.
+       (tramp-adb-handle-file-local-copy)
+       (tramp-adb-handle-write-region, tramp-adb-handle-copy-file)
+       (tramp-adb-get-device): Adapt calls.
+       (tramp-adb-send-command): Use "adb shell ..." in case the command
+       contains multibyte chars.
+
+       * test/lisp/net/tramp-tests.el (tramp--test-utf8): Extend test.
+
+2020-07-11  Eli Zaretskii  <eliz@gnu.org>
+
+       Another minor improvement of project.el doc strings
+
+       * lisp/progmodes/project.el (project-find-functions)
+       (project-current, project-switch-to-buffer): Doc fix.
+       (project-current): Rename the argument DIR to DIRECTORY.
+
+2020-07-11  Andrea Corallo  <akrl@sdf.org>
+
+       * doc/misc/flymake.texi (An annotated example backend): Typo fix.
+
+2020-07-11  Dmitry Gutov  <dgutov@yandex.ru>
+
+       project-switch-to-buffer: Reword the docstring
+
+       * lisp/progmodes/project.el (project-switch-to-buffer):
+       Reword the docstring, copying the style from project-kill-buffers.
+
+2020-07-10  João Távora  <joaotavora@gmail.com>
+
+       Fix placement of Eldoc docs during eval-expression (bug#42309)
+
+       * lisp/emacs-lisp/eldoc.el (eldoc--handle-docs): Rework.
+
+2020-07-10  João Távora  <joaotavora@gmail.com>
+
+       Revert "Fix Eldoc problem when loading on Emacs 26.3"
+
+       This reverts commit 9ade7ea7b77ec40c16deb4dff139ce7127a703e2.
+
+       * lisp/emacs-lisp/eldoc.el (Version): Bump to 1.4.0
+
+2020-07-10  Michael Albinus  <michael.albinus@gmx.de>
+
+       Tramp code cleanup
+
+       * lisp/net/tramp.el (tramp-shell-prompt-pattern)
+       (tramp-wrong-passwd-regexp, tramp-method-regexp-alist)
+       (tramp-domain-regexp, tramp-host-regexp, tramp-ipv6-regexp)
+       (tramp-port-regexp, tramp-debug-outline-regexp)
+       (tramp-drop-volume-letter, tramp-parse-shostkeys)
+       (tramp-handle-file-name-case-insensitive-p):
+       * lisp/net/tramp-adb.el (tramp-adb-send-command-and-check):
+       * lisp/net/tramp-ftp.el (tramp-ftp-enable-ange-ftp):
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-monitor-process-filter):
+       * lisp/net/tramp-sh.el (tramp-display-escape-sequence-regexp)
+       (tramp-device-escape-sequence-regexp):
+       * lisp/net/tramp-smb.el (tramp-smb-do-file-attributes-with-stat)
+       (tramp-smb-handle-set-file-acl, tramp-smb-read-file-entry):
+       * lisp/net/tramp-sudoedit.el 
(tramp-sudoedit-handle-file-selinux-context):
+       Use character classes in regexp.
+
+       * lisp/net/tramp-adb.el (tramp-adb-ls-date-year-regexp)
+       (tramp-adb-ls-date-time-regexp): New defconst.
+       (tramp-adb-ls-date-regexp, tramp-adb-ls-toolbox-regexp)
+       (tramp-adb-sh-fix-ls-output): Use them.
+       (tramp-adb-handle-set-file-times, tramp-adb-maybe-open-connection):
+       Apply `eval-when-compile' on constant concat data.
+       (tramp-do-parse-file-attributes-with-ls):
+       Suppress `signal-hook-function'.
+       (tramp-adb--gnu-switches-to-ash): Remove unused function.
+       (tramp-adb-handle-set-file-modes): Qhote argument.
+       (tramp-adb-maybe-open-connection): Set file property rather than flush.
+
+       * lisp/net/tramp-cmds.el (tramp-rename-these-files):
+       Apply `eval-when-compile' on constant concat data.
+
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-file-attributes)
+       (tramp-gvfs-file-attributes-with-gvfs-ls-regexp): Embed them in
+       `eval-and-compile'.
+       (tramp-gvfs-get-directory-attributes): Apply `eval-when-compile'
+       on constant concat data.
+
+2020-07-10  João Távora  <joaotavora@gmail.com>
+
+       Fix byte compilation warning in Eldoc
+
+       * lisp/emacs-lisp/eldoc.el (eldoc-documentation-function): Pass nil as
+       second argument.
+
+2020-07-10  João Távora  <joaotavora@gmail.com>
+
+       Fix Eldoc problem when loading on Emacs 26.3
+
+       When defining the obsolete variable alias for old
+       eldoc-documentation-function (which now points to the newer
+       eldoc-documentation-strategy), one gets the error "don't know how to
+       make a localized vareiable an alias".  I'm not sure, but I suspect
+       this is because Eldoc is preloaded in Emacs 26.3 and the
+       eldoc-documentation-function variable is already set locally by some
+       Elisp buffer.
+
+       Uninterning the symbol shortly before defining the alias seems to fix
+       it.
+
+       * lisp/emacs-lisp/eldoc.el (eldoc-documentation-function):
+       Unintern on load.
+       (Version): Bump to 1.3.0
+
+2020-07-10  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix out-of-source ‘make check’ emacs-module-tests
+
+       Problem reported by Koki Fukuda in:
+       https://lists.gnu.org/r/emacs-devel/2020-07/msg00169.html
+       * test/Makefile.in (MODULE_CFLAGS):
+       Include from the same directories included from in ../src.
+       * test/src/emacs-module-tests.el (module/describe-function-1):
+       Strip path to source directory.
+
+2020-07-10  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Use Gnulib libgmp module
+
+       Instead of doing GMP by hand, use the Gnulib libgmp module.
+       * .gitignore: Add lib/gmp.h.
+       * admin/merge-gnulib (GNULIB_MODULES): Add libgmp.
+       * configure.ac (GMP_LIB, GMP_OBJ): Remove.  Gnulib uses the name
+       LIB_GMP, so all uses changed.  All uses of GMP_OBJ removed.
+       (HAVE_GMP): Set this from Gnulib’s variables.
+       * lib/gnulib.mk.in, m4/gnulib-comp.m4: Regenerate.
+       * lib/mini-gmp-gnulib.c, lib/mini-gmp.c, lib/mini-gmp.h, m4/libgmp.m4:
+       New files, copied from Gnulib.
+       * src/bignum.h, test/data/emacs-module/mod-test.c:
+       Include gmp.h unconditionally.
+       * src/mini-gmp-emacs.c, src/mini-gmp.c, src/mini-gmp.h:
+       Remove.  This moves these files from src to lib, and
+       updates them to the current GMP version.
+       * test/Makefile.in (GMP_H): New macro.
+       ($(test_module)): Use it to decide whether to compile
+       mini-gmp-gnulib.c too.
+
+2020-07-10  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Speed up GCC 10.1 compilation in default Git builds
+
+       * configure.ac (nw): GCC 10.1 introduced warnings enabled by -fanalyzer
+       that slow down compilation considerably.  Generate these warnings only
+       if --enable-gcc-warnings is explicitly given.  Also, do not bother to
+       eliminate warnings that Gnulib’s revised manywarnings module no longer
+       generates.
+
+2020-07-10  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from Gnulib
+
+       This incorporates:
+       2020-07-07 dup2: remove support for some very old platforms
+       2020-07-07 memchr: remove support for some very old platforms
+       2020-07-04 getumask: new module
+       2020-07-03 getrandom: fix compilation error on native Windows
+       2020-07-03 lchmod: simplify after 2020-02-22 change
+       2020-07-01 manywarnings: improve port to GCC 10.1
+       2020-06-28 getrandom: fix compilation errors on older versions of mingw
+       2020-06-29 alloca-opt: fix warning on mingw
+       * lib/alloca.in.h, lib/dup2.c, lib/getrandom.c, lib/string.in.h:
+       * lib/sys_stat.in.h, lib/unistd.in.h, m4/dup2.m4, m4/getrandom.m4:
+       * m4/lchmod.m4, m4/manywarnings.m4, m4/string_h.m4, m4/sys_stat_h.m4:
+       * m4/unistd_h.m4: Copy from Gnulib.
+       * lib/gnulib.mk.in, m4/gnulib-comp.m4: Regenerate.
+
+2020-07-09  Alexander Adolf  <alexander.adolf@condition-alpha.com>
+
+       EUDC: Add macOS Contacts backend
+
+       * lisp/net/eudcb-macos-contacts.el: New file.
+       * doc/misc/eudc.texi (macOS Contacts): New section.
+       (macOS Contacts Configuration): Likewise.
+       * etc/NEWS: Mention new macOS Contacts backend.
+
+2020-07-09  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve display of compositions by "C-u C-x ="
+
+       * lisp/descr-text.el (describe-char): On TTY frames, display the
+       Unicode names of the composed characters as well.  (Bug#42256)
+
+2020-07-09  João Távora  <joaotavora@gmail.com>
+
+       Unbreak M-x eldoc
+
+       The command should always invoke Eldoc when called interactively,
+       instead of going through the usual checks, which are performed to
+       avoid interference with other commands.
+
+       * lisp/emacs-lisp/eldoc.el (eldoc-print-current-symbol-info): Rework.
+       (Version): Bump to 1.2.0
+
+2020-07-09  João Távora  <joaotavora@gmail.com>
+
+       Prevent infloop in Eldoc message truncation algorithm
+
+       The truncation algorithm still has a long way to go for very narrow
+       frame sizes.  It should become a generic mechanism that would allows
+       one to truncate a string so that fits in N possibly truncated screen
+       lines of a full-width window.
+
+       * lisp/emacs-lisp/eldoc.el (eldoc-handle-docs): Tweak
+
+2020-07-09  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into wip2
+
+2020-07-09  Andrea Corallo  <akrl@sdf.org>
+
+       Disable ipa-pure in comp-tests-tco
+
+       * test/src/comp-tests.el (comp-tests-tco): Disable ipa-pure to
+       check effectively for tail recursion elimination.
+
+2020-07-09  Andrea Corallo  <akrl@sdf.org>
+
+       Add `comp-disabled-passes'
+
+       * lisp/emacs-lisp/comp.el (comp-disabled-passes): New special
+       variable.
+       (native-compile): Make use of `comp-disabled-passes'.
+
+2020-07-09  Andrea Corallo  <akrl@sdf.org>
+
+       ;* test/src/comp-test-funcs-dyn.el: Fix comment header.
+
+2020-07-09  Andrea Corallo  <akrl@sdf.org>
+
+       Add some tests for pure function optimization
+
+       * test/src/comp-tests.el (comp-tests-fw-prop): Fix docstring.
+       (comp-tests-pure-checker-1, comp-tests-pure-checker-2): New
+       functions.
+       (comp-tests-pure): New test testing for pure function
+       optimization.
+
+2020-07-09  Andrea Corallo  <akrl@sdf.org>
+
+       Optimize pure functions defined by the compilation environment
+
+       * lisp/emacs-lisp/comp.el (comp-apply-in-env): New macro.
+       (comp-function-call-maybe-remove): Update to make use of
+       `comp-apply-in-env'.
+
+2020-07-09  Andrea Corallo  <akrl@sdf.org>
+
+       Introduce a new pass ipa-pure
+
+       Add a simple pass to infer pure functions not explicitly declared as
+       such.  Use this information only during compilation (speed 3) to
+       optimize out function calls whe possible.
+
+2020-07-09  Andrea Corallo  <akrl@sdf.org>
+
+       Add `comp-call-op-p'
+
+       * lisp/emacs-lisp/comp.el (comp-call-op-p): New predicate.
+       (comp-limple-insn-call-p): Make use of.
+
+2020-07-09  Andrea Corallo  <akrl@sdf.org>
+
+       * test/src/comp-test-funcs.el (comp-tests-aref-aset-f) : Fix UB.
+
+2020-07-09  Andrea Corallo  <akrl@sdf.org>
+
+       Define `comp-symbol-func-to-fun'
+
+       * lisp/emacs-lisp/comp.el (comp-symbol-func-to-fun): New function.
+       (comp-func-in-unit): Make use of the `comp-symbol-func-to-fun'.
+
+2020-07-09  Andrea Corallo  <akrl@sdf.org>
+
+       Add a test targeting forward propagation
+
+       * test/src/comp-tests.el (comp-tests-fw-prop-checker-1): New
+       function.
+       (comp-tests-fw-prop): New test.
+
+2020-07-09  João Távora  <joaotavora@gmail.com>
+
+       Bump Flymake version
+
+       * lisp/progmodes/flymake.el (Version): Bump to 1.0.9.
+
+2020-07-09  Glenn Morris  <rgm@gnu.org>
+
+       Update tests for recent changes
+
+       * test/lisp/descr-text-tests.el (descr-text-test-desc):
+       Update for recent change to describe-char-eldoc.
+       * test/lisp/progmodes/elisp-mode-tests.el
+       (elisp--highlight-function-argument-indexed)
+       (elisp--highlight-function-argument-keyed-1)
+       (elisp--highlight-function-argument-keyed-2):
+       Update for recent change to elisp--highlight-function-argument.
+
+2020-07-09  Glenn Morris  <rgm@gnu.org>
+
+       * lisp/progmodes/cc-engine.el (c-at-expression-start-p): Fix message.
+
+2020-07-08  João Távora  <joaotavora@gmail.com>
+
+       Shoosh warnings about obsolete eldoc-documentation-function
+
+       * lisp/progmodes/cfengine.el (cfengine3-mode): Remove mention to
+       obsolete eldoc-documentation-function.
+
+       * lisp/progmodes/python.el (python-mode): Use with-no-warnings.
+
+2020-07-08  Andrea Corallo  <akrl@sdf.org>
+
+       Rework some test logic for generality
+
+       * test/src/comp-tests.el (comp-tests-make-insn-checker): New
+       function splitting logic from `comp-tests-tco-checker' to have it
+       more general.
+       (comp-tests-tco-checker): Make use of
+       `comp-tests-make-insn-checker'.
+
+2020-07-08  Andrea Corallo  <akrl@sdf.org>
+
+       Clean-up some const folding logic and add `comp-function-pure-p'
+
+       * lisp/emacs-lisp/comp.el (comp-function-pure-p): New predicate.
+       (comp-function-call-maybe-remove): Update to use the
+       `comp-function-pure-p'.
+
+2020-07-08  Mattias Engdegård  <mattiase@acm.org>
+
+       Special-case symbol and fixnum keys in member, assoc and rassoc
+
+       * src/fns.c (Fmember, Fassoc, Frassoc): Delegate to the cheaper Fmemq,
+       Fassq and Frassq for arguments of the appropriate types.
+       (eq_comparable_value): New function.
+
+2020-07-08  João Távora  <joaotavora@gmail.com>
+
+       Improve Eldoc docstrings
+
+       * lisp/emacs-lisp/eldoc.el (eldoc-documentation-strategy): Improve
+       docstring.
+       (eldoc--make-callback): Improve docstring.
+       (eldoc--invoke-strategy): New helper function.
+       (eldoc-print-current-symbol-info): Call eldoc--invoke-strategy.
+       (eldoc-documentation-functions): Improve docstring.
+
+2020-07-08  João Távora  <joaotavora@gmail.com>
+
+       Change version scheme of two Eldoc obsolete specs
+
+       * lisp/emacs-lisp/eldoc.el (eldoc-documentation-function)
+       (eldoc-message): Obsolete spec uses eldoc-1.1.0.
+
+2020-07-08  João Távora  <joaotavora@gmail.com>
+
+       Adjust describe-char-eldoc to new eldoc-documentation-functions protocol
+
+       * lisp/descr-text.el (describe-char-eldoc): Adjust to new
+       eldoc-documentation-functions protocol.
+
+2020-07-08  João Távora  <joaotavora@gmail.com>
+
+       Adjust Eldoc documentation after Eli's review
+
+       * etc/NEWS (Eldoc): Adjust paragraphs.
+
+       * lisp/emacs-lisp/eldoc.el (eldoc-prefer-doc-buffer): Adjust
+       docstring.
+       (eldoc--enthusiasm-curbing-timer, eldoc-documentation-strategy)
+       (eldoc-documentation-functions): Adjust docstring.
+       (eldoc--handle-docs): Adjust comments.
+       (eldoc--documentation-compose-1): New helper.
+       (eldoc-documentation-compose)
+       (eldoc-documentation-compose-eagerly): Use it.
+       (eldoc-print-current-symbol-info): Adjust comments.
+
+2020-07-08  João Távora  <joaotavora@gmail.com>
+
+       Make more parts of Emacs use new Eldoc capabilities
+
+       Elisp-mode was doing a lot of work that can now be delegated to Eldoc.
+       Flymake uses the new Eldoc functionality, too, installing a global
+       documentation function that may report on diagnostics under point.
+
+       CEDET's grammar.el was left as the only user of an Eldoc-internal
+       function.  That function was moved to grammar.el.  That file is still,
+       somewhat reprehensibly, using an internal function of elisp-mode.el,
+       but this was left unchanged.
+
+       In other situations, eldoc-documentation-functions is used or
+       recommended.
+
+       The only other places where the obsolete eldoc-documentation-function
+       is still used is in libraries which are presumably meant to remain
+       compatible with previous Emacs versions.
+
+       * lisp/progmodes/elisp-mode.el (elisp-eldoc-funcall)
+       (elisp-eldoc-var-docstring): New functions.
+       (emacs-lisp-mode): Put two elements in
+       eldoc-documentation-functions.
+
+       * lisp/emacs-lisp/eldoc.el (eldoc--eval-expression-setup): Setup
+       new Elisp eldoc-documentation-functions.
+
+       * lisp/progmodes/flymake.el (flymake-mode): Use
+       flymake-eldoc-function.
+       (flymake-eldoc-function): New function.
+       (Package-Requires): Require eldoc 1.1.0
+
+       * lisp/descr-text.el (describe-char-eldoc): Recommend
+       eldoc-documentation-functions.
+
+       * lisp/progmodes/cfengine.el (cfengine3-documentation-function):
+       Recommend eldoc-documentation-functions
+
+       * lisp/progmodes/octave.el (inferior-octave-mode): Use
+       eldoc-documentation-functions.
+
+       * lisp/cedet/semantic/grammar.el (semantic--docstring-format-sym-doc):
+       New function.
+       (semantic-grammar-eldoc-get-macro-docstring): Adjust.
+
+2020-07-08  João Távora  <joaotavora@gmail.com>
+
+       * lisp/emacs-lisp/eldoc.el (Version): Bump to 1.1.0
+
+2020-07-08  João Távora  <joaotavora@gmail.com>
+
+       New M-x eldoc for on-demand and interactive documentation requests
+
+       The function eldoc is just an alias for
+       eldoc-print-current-symbol-info, which is made interactive.
+
+       * lisp/emacs-lisp/eldoc.el (eldoc-print-current-symbol-info): Now an
+       interactive function.
+       (eldoc): Alias to eldoc-print-current-symbol-info.
+
+2020-07-08  João Távora  <joaotavora@gmail.com>
+
+       Better handle asynchronous Eldoc sources
+
+       This is a backward compatible redesign of significant parts of the
+       eldoc.el library.
+
+       Previously, Eldoc clients (major/minor modes setting its documentation
+       gathering variables) needed to directly call eldoc-message, an
+       internal function, to display the docstring to the user.  When more
+       asynchronous sources are involved, this is hard to do or even breaks
+       down.
+
+       Now, an Eldoc backend may return any non-nil, non-string value and
+       call a callback afterwards.  This restores power to Eldoc over how
+       (and crucially also when) to display the docstrings to the user.
+
+       Among other things, this fixes so called "doc blinking", or the very
+       short-lived display of a lower priority Eldoc message.  This would
+       happen if a particular producer of documentation finishes shortly
+       before a higher priority one, like in the LSP engine Eglot as reported
+       by Andrii Kolomoiets <andreyk.mad@gmail.com> and Dmitry Gutov
+       <dgutov@yandex.ru>.
+
+       Gathering docstrings is now delegated to the variable
+       eldoc-documentation-strategy, which is the new name for the
+       now-obsolete eldoc-documentation-function, and still accepts the
+       so-called "old protocol".  Examples of the new strategies enabled are
+       codified in functions such as eldoc-documentation-enthusiast,
+       eldoc-documentation-compose-eagerly, along with the existing
+       eldoc-documentation-compose and eldoc-documentation-default.
+
+       The work of displaying and formatting docstrings is shifted almost
+       fully to Eldoc itself and is delegated to the internal function
+       eldoc--handle-docs.  Among other improvements, it handles most of
+       eldoc-echo-area-use-multiline-p and outputs documentation to a
+       temporary *eldoc* buffer.
+
+       The manual and NEWS are updated to mention the new Eldoc features.
+
+       * lisp/emacs-lisp/eldoc.el (eldoc-documentation-functions):
+       Overhaul docstring.
+       (eldoc-documentation-compose, eldoc-documentation-default): Handle
+       non-nil, non-string values of elements of
+       eldoc-documentation-functions.  Use eldoc--handle-multiline.
+       (eldoc-print-current-symbol-info): Honour non-nil, non-string
+       values returned by eldoc-documentation-callback.
+       (eldoc--make-callback): Now also a function.
+       (eldoc-documentation-default, eldoc-documentation-compose): Tweak 
docstring.
+       (eldoc-documentation-enthusiast, eldoc-documentation-compose-eagerly):
+       New functions.
+       (eldoc-echo-area-use-multiline-p): Add new semantics.
+       (eldoc--handle-docs): Handle some of eldoc-echo-area-use-multiline-p.
+       (eldoc-doc-buffer): New command.
+       (eldoc-prefer-doc-buffer): New defcustom.
+       (eldoc--enthusiasm-curbing-timer): New variable.
+       (eldoc-documentation-strategy): Rename from 
eldoc-documentation-function.
+       (eldoc--supported-p): Use eldoc-documentation-strategy
+       (eldoc-highlight-function-argument)
+       (eldoc-argument-case, global-eldoc-mode)
+       (turn-on-eldoc-mode): Mention eldoc-documentation-strategy.
+       (eldoc-message-function): Mention eldoc--message.
+       (eldoc-message): Made obsolete.
+       (eldoc--message): New helper.
+
+       * lisp/hexl.el (hexl-print-current-point-info): Adjust to new
+       eldoc-documentation-functions protocol.
+
+       * lisp/progmodes/cfengine.el (cfengine3-documentation-function):
+       Adjust to new eldoc-documentation-functions protocol.
+
+       * lisp/progmodes/elisp-mode.el
+       (elisp-eldoc-documentation-function): Adjust to new
+       eldoc-documentation-functions protocol.
+
+       * lisp/progmodes/octave.el (octave-eldoc-function): Adjust to new
+       eldoc-documentation-functions protocol.
+
+       * lisp/progmodes/python.el (python-eldoc-function): Adjust to new
+       eldoc-documentation-functions protocol.
+
+       (eldoc-print-current-symbol-info): Rework with cl-labels.
+
+       * doc/emacs/programs.texi (Lisp Doc): Mention
+       eldoc-documentation-strategy.
+
+       * doc/lispref/modes.texi (Major Mode Conventions): Mention
+       eldoc-documentation-functions.
+
+       * etc/NEWS: Mention eldoc-documentation-strategy.
+
+2020-07-07  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-07-07  Mattias Engdegård  <mattiase@acm.org>
+
+       Optimise assoc and rassoc with symbol key to assq and rassq
+
+       This is the same transformation made for member to memq.
+
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize-assoc): New function.
+       (assoc, rassoc): Set the byte-optimizer property.
+
+2020-07-07  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       71fc003860 (origin/emacs-27) Avoid infloop in 'format-mode-line'
+       247dcb4b1b Clarify the documentation of 'left/right-fringe' display spec
+       d453cee177 Minor improvement in ELisp manual
+       3c778c443c * doc/misc/tramp.texi (Customizing Methods): Fix typo.
+
+2020-07-07  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       59e768d64a Fix undefined behavior in json.c (Bug#42113)
+       cce00bef03 Fix ACTION argument of 'display-buffer' call in gud.el
+       0121db2702 * src/keyboard.c (Fclear_this_command_keys): Doc fix.
+       b9abf5ceb2 Improve do string of 'man'
+       b87fc938a0 ; * src/xdisp.c (pos_visible_p): Yet another minor fix for...
+
+2020-07-07  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/cl-macs.el (cl-deftype-satisfies): Add `keyword`
+
+2020-07-06  Mattias Engdegård  <mattiase@acm.org>
+
+       Simplify byte-code optimisation of pure functions
+
+       Most pure functions need no explicit optimisation; we can do away with
+       almost all uses of byte-optimize-predicate (now renamed to
+       byte-optimize-constant-args, since it is not just for predicates).
+       Also remove some superfluous arity warnings.
+
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize-identity, 
byte-optimize-memq)
+       (byte-optimize-nth, byte-optimize-nthcdr):
+       Remove arity warnings and simplify.
+       * lisp/emacs-lisp/byte-opt.el (<, >, <=, >=, not, null, consp, listp)
+       (symbolp, stringp, string<, string-lessp, proper-list-p, logand)
+       (logior, logxor, lognot, car, cdr, car-safe, cdr-safe):
+       Remove superfluous byte-optimizer property.
+       (byte-optimize-predicate): Rename to byte-optimize-constant-args.
+       All uses changed.
+
+2020-07-06  Mattias Engdegård  <mattiase@acm.org>
+
+       Mark more functions pure (bug#42147)
+
+       Extend the list of 'pure' functions to many predicates and numerical
+       functions that we are reasonably confident will give portable results.
+       Also include various list and array accessors, because our use of purity
+       in the byte compiler isn't affected by the mutability of arguments.
+
+       * lisp/emacs-lisp/byte-opt.el: Update example in comment.
+       (pure-fns): Add many functions.
+       (byte-optimize-form-code-walker) Don't signal errors during evaluation
+       of calls to pure functions with constant arguments at compile time,
+       since such calls are not necessarily reachable.
+
+2020-07-05  Dmitry Gutov  <dgutov@yandex.ru>
+
+       * lisp/progmodes/project.el: Bump the version.
+
+2020-07-05  Dmitry Gutov  <dgutov@yandex.ru>
+
+       project-switch-to-buffer: Don't filter based on default-directory
+
+       * lisp/progmodes/project.el (project-switch-to-buffer):
+       Don't filter based on default-directory
+       (https://lists.gnu.org/archive/html/emacs-devel/2020-07/msg00075.html).
+       (project-switch-to-buffer): Ditto.
+
+2020-07-05  Wilson Snyder  <wsnyder@wsnyder.org>
+
+       Verilog-Mode collected updates.
+
+       * lisp/progmodes/verilog-mode.el (verilog-auto-inst): Support regexp of
+       what AUTOINST I/O to include, issue #1682.  Reported by Mrainy.
+       (verilog-font-lock-keywords-1): Fix highlighting module names with no
+       following (, issue #1679.  Reported by Vinam Arora.
+       (verilog-font-lock-keywords) Adds syntax highlighting for identifiers in
+       declaration statements, #1678.
+       (verilog-calculate-indent, verilog-inject-arg)
+       (verilog-keywords, verilog-showscopes): Support AMS
+       connectmodule/endconnectmodule, #1665. Reported by Dan McMahill.
+
+2020-07-05  Mattias Engdegård  <mattiase@acm.org>
+
+       Don't confuse errors with nil in bytecomp-tests.el
+
+       * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-check-1)
+       (bytecomp-explain-1, test-byte-opt-arithmetic, bytecomp-lexbind-check-1)
+       (bytecomp-lexbind-explain-1):
+       If an expression raises an error when evaluated, don't treat it as if
+       it had succeeded with the value nil; use 'bytecomp-check-error' as the
+       result instead.
+
+2020-07-05  Mattias Engdegård  <mattiase@acm.org>
+
+       Relax portable number check in byte compiler (bug#42147)
+
+       With bignums, the set of representable integers is no longer
+       platform-dependent, and since we use nothing but IEEE754 64-bit
+       floats, all numbers are now portable.  Take advantage of this fact
+       to simplify constant-folding in the byte compiler, allowing it to
+       be applied more widely.
+
+       * lisp/emacs-lisp/byte-opt.el (byte-opt--portable-max)
+       (byte-opt--portable-min, byte-opt--portable-numberp): Remove.
+       (byte-opt--arith-reduce, byte-optimize-minus, byte-optimize-1+)
+       (byte-optimize-1-): Simplify: any number will do, and if N is a
+       number, then so are -N, N+1 and N-1.
+
+2020-07-04  Alan Mackenzie  <acm@muc.de>
+
+       Remove long obsolete c-looking-at-bos.  Make c-at-expression-start-p 
obsolete
+
+       * lisp/progmodes/cc-engine.el (c-looking-at-bos): Remove.
+       (c-at-expression-start-p): Make obsolete, with no alternative function.
+
+2020-07-04  Andrea Corallo  <akrl@sdf.org>
+
+       Relax constant folding rules
+
+       * lisp/emacs-lisp/comp.el (comp-function-optimizable-p): No need to
+       check for operands or result to be fixnums.
+
+2020-07-04  Alan Mackenzie  <acm@muc.de>
+
+       Fix filling in js-mode and mhtml-mode (js-mode parts), fixing bug #41897
+
+       * lisp/progmodes/js.el (js-mode): Use "\\(?:" in the value of
+       comment-start-skip rather than "\\(", fixing the second half of bug 
#41952.
+       Call c-foreign-init-lit-pos-cache and install 
c-foreign-truncate-lit-pos-cache
+       on before-change-functions, to connect up correctly with CC Mode's 
filling
+       mechanism.
+
+       * lisp/textmodes/mhtml-mode.el (mhtml--crucial-variable-prefix): Add 
prefixes
+       "adaptive-fill-", "fill-", "normal-auto-fill-function" and "paragraph-" 
to
+       pull in variables crucial to filling.
+       (mhtml-syntax-propertize): Read the current submode from the piece of 
text
+       being propertized rather than one character before it, and do so before
+       erasing the submode text-property.
+       (mhtml-mode): Set the js-mode value of auto-fill-function to 
js-do-auto-fill.
+       Correctly initialize and use CC Mode's filling facilities, as above.
+
+2020-07-04  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: Fix wrong value of comment-start-skip, fixing half of bug 
#41952
+
+       Also add functions to enable correct use of CC Mode's filling 
functionality
+       from major modes which don't initialize CC Mode fully.  These modes are
+       currently js-mode and mhtml-mode.
+
+       * lisp/progmodes/cc-langs.el (comment-start-skip): Replace "\\(" by 
"\\(?:" so
+       that (match-end 1) isn't falsely taken to be the start of the comment.
+
+       * lisp/progmodes/cc-engine.el (c-foreign-truncate-lit-pos-cache)
+       (c-foreign-init-lit-pos-cache): New functions.
+
+2020-07-04  Daniel Koning  <dk@danielkoning.com>  (tiny change)
+
+       Use 'emacs-lisp-mode-syntax-table' for reading Lisp expressions
+
+       * lisp/simple.el (read--expression): Set syntax table to
+       'emacs-lisp-mode-syntax-table' when reading a Lisp expression
+       from the minibuffer.  (Bug#41781)
+
+2020-07-02  Andrea Corallo  <akrl@sdf.org>
+
+       Fix missing tail recursion elimination
+
+       * lisp/emacs-lisp/comp.el (comp-tco-func): Fix tail recursion
+       elimination given now functions in LIMPLE are expressed with
+       the C name.
+
+2020-07-02  Andrea Corallo  <akrl@sdf.org>
+
+       Add a test to verify tail recursion elimination
+
+       * test/src/comp-tests.el (comp-tests-tco): Compile a recursive
+       functions at speed 3 and verify the tail recursion elimination.
+       (comp-tests-tco-checker, comp-tests-mentioned-p)
+       (comp-tests-mentioned-p-1): New support functions.
+
+2020-07-02  Andrea Corallo  <akrl@sdf.org>
+
+       Rework `comp-c-func-name' arguments
+
+       * lisp/emacs-lisp/comp.el (comp-c-func-name): Add FIRST argument
+       to ignore the compiler context and return the first name.
+
+       * lisp/emacs-lisp/disass.el (disassemble-internal): Update the
+       `comp-c-func-name' call.
+
+2020-07-02  Andrea Corallo  <akrl@sdf.org>
+
+       Add to possibility to write per pass specific tests
+
+       * lisp/emacs-lisp/comp.el (comp-post-pass-hooks): New special
+       variable.
+       (native-compile): Run what is registered in
+       `comp-post-pass-hooks'.
+
+2020-07-02  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savahnna/master' into HEAD
+
+2020-07-02  Alan Mackenzie  <acm@muc.de>
+
+       * lisp/progmodes/cc-mode.el (c-or-c++-mode--regexp): Change WS to [ \t] 
in it
+
+2020-07-02  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Remove Emacs-27 reference
+
+       * admin/nt/dist-build/README-windows-binaries:
+
+2020-07-02  Juri Linkov  <juri@linkov.net>
+
+       Revert feature added in bfd96e995d using project directories in vc 
(bug#41821)
+
+2020-07-01  YASUOKA Masahiko  <yasuoka@yasuoka.net>  (tiny change)
+
+       Support pty's on OpenBSD
+
+       * configure.ac (PTY_TTY_NAME_SPRINTF): OpenBSD has posix_openpt
+       nowadays.  (Bug#42059)
+
+2020-06-30  Juri Linkov  <juri@linkov.net>
+
+       Bind 'C-x 4 1' to 'same-window-prefix' and document new commands 
(bug#41691)
+
+       * lisp/window.el (ctl-x-4-map): Bind 'C-x 4 1' to 'same-window-prefix'.
+
+       * doc/emacs/windows.texi (Pop Up Window): Add 'C-x 4 4' and 'C-x 4 1'.
+       * doc/emacs/frames.texi (Creating Frames): Add 'C-x 5 5'.
+       (Tab Bars): Add 'C-x t t'.
+
+2020-06-30  Andrea Corallo  <akrl@sdf.org>
+
+       Add a test for lambda list containing uninterned symbols
+
+       * test/src/comp-resources/comp-test-funcs-dyn.el
+       (comp-tests-cl-uninterned-arg-parse-f): New function.
+
+       * test/src/comp-tests.el (comp-tests-cl-uninterned-arg-parse-f):
+       New test.
+
+2020-06-30  Andrea Corallo  <akrl@sdf.org>
+
+       Fix lambda-list relocation class
+
+       Lambda-lists must stay in the same relocation class of the object
+       referenced by code to respect uninterned symbols.
+
+       * lisp/emacs-lisp/comp.el (comp-prepare-args-for-top-level): Break
+       the original function in a generic specializing for
+       dynamic/lexical functions.  When allocating the lambda-list for
+       dynamic functions do that in the default relocation class.
+       (comp-emit-for-top-level): Make use of the new
+       `comp-prepare-args-for-top-level'.
+       (comp-emit-lambda-for-top-level): Likewise.
+
+2020-06-30  James N. V. Cash  <james.nvc@gmail.com>  (tiny change)
+
+       Subject: Frame-local tab-bar for numeric value of tab-bar-show 
(bug#42052)
+
+       * lisp/tab-bar.el (tab-bar-new-tab-to): Set frame parameter
+       tab-bar-lines to 1 when tab-bar-show is the same as number of tabs.
+       (tab-bar-close-tab, tab-bar-close-other-tabs): Set frame parameter
+       tab-bar-lines to 0 when tab-bar-show is the same as number of tabs.
+
+2020-06-29  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: optimize for repeated simple operations.
+
+       Do this by recognising that unterminated strings in a buffer are 
typically
+       going to be few and close together.  Also optimize code for C++ 
attributes.
+
+       * lisp/progmodes/cc-defs.el (c-previous-single-property-change): New 
macro.
+       (c-put-syn-tab, c-clear-syn-tab): Turned from macros into functions, 
and moved
+       to cc-mode.el.
+       (c-clear-syn-tab-properties): Amended to use c-min/max-syn-tab-mkr.
+       (c-with-extended-string-fences): Removed.
+
+       * lisp/progmodes/cc-engine.el (c-enclosing-c++-attribute): Rewritten for
+       speed.
+       (c-slow-enclosing-c++-attribute): Removed.
+       (c-semi-pp-to-literal): Remove a superfluous call to
+       c-with-extended-string-fences.
+
+       * lisp/progmodes/cc-mode.el (c-min-syn-tab-mkr, c-max-syn-tab-mkr): two 
new
+       marker variables which bound the region occupied by positions with
+       c-fl-syn-tab text properties.
+       (c-basic-common-init): Initialize these two variables.
+       (c-fl-syn-tab-region): Removed.
+       (c-put-syn-tab, c-clear-syn-tab): Functions moved from cc-defs.el.
+       (c-clear-string-fences): Amended to use the new scheme.
+       (c-restore-string-fences): Now takes no arguments; amended to use the 
new
+       scheme.
+       (c-font-lock-fontify-region): Amended to use the new scheme.
+
+2020-06-29  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * test/src/fns-tests.el (test-secure-hash): Test getrandom format.
+
+2020-06-29  Andrea Corallo  <akrl@sdf.org>
+
+       Revert "* src/comp.c (Fcomp__register_subr): Remove code duplication 
using Fdefalias."
+
+       This reverts commit 6c7f615ae59b636efe5012f761a25acfd956480d.
+
+2020-06-28  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from Gnulib.
+
+       This incorporates:
+       2020-06-28 getrandom: do not depend on ‘open’ on mingw
+       2020-06-28 getrandom: fix compilation errors on older versions of mingw
+       * build-aux/config.sub, lib/getrandom.c, m4/getrandom.m4:
+       Copy from Gnulib
+       * lib/gnulib.mk.in, m4/gnulib-comp.m4: Regenerate.
+
+2020-06-28  Andrea Corallo  <akrl@sdf.org>
+
+       Do not skip native compilation for leim subfolder during bootstrap
+
+       * lisp/emacs-lisp/comp.el (comp-bootstrap-black-list): Remove
+       "^leim/".
+
+2020-06-28  Andrea Corallo  <akrl@sdf.org>
+
+       Enable deferred compilation for dynamic scoped code
+
+       * src/comp.c (maybe_defer_native_compilation): Trigger for dynamic
+       code and add a comment.
+
+2020-06-28  Eli Zaretskii  <eliz@gnu.org>
+
+       MS-Windows fixes as followup to import of Gnulib 'getrandom'
+
+       * nt/mingw-cfg.site (gl_cv_lib_assume_bcrypt): Set to "no" to
+       disable linking against bcrypt.dll.  (Bug#42095)
+
+       * src/gnutls.c (gnutls_rnd) [WINDOWSNT]: Don't define a function
+       pointer, and don't load it from GnuTLS DLL.
+       (w32_gnutls_rnd) [WINDOWSNT]: Delete unused function.
+       * src/fns.c (gnutls_rnd) [WINDOWSNT]: Don't redirect to
+       w32_gnutls_rnd.
+
+2020-06-28  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into uninterned
+
+       * src/comp.c (Fcomp__register_subr): Remove code duplication using 
Fdefalias.
+
+2020-06-28  Andrea Corallo  <akrl@sdf.org>
+
+       Add a test to verify CL macro expansion in dynamic scope
+
+       * test/src/comp-tests.el (comp-tests-cl-macro-exp): New test.
+
+       * test/src/comp-resources/comp-test-funcs-dyn.el: Require
+       `cl-lib'.
+       (comp-tests-cl-macro-exp-f): New function.
+
+2020-06-28  Andrea Corallo  <akrl@sdf.org>
+
+       Setup correctly the printer while dumping objs in native CU (bug#42088)
+
+       * src/comp.c (emit_static_object): Bind a bunch of special
+       variables to setup `prin1-to-string' as
+       `byte-compile-output-file-form' does.  This to preserve
+       uninterned symbols.
+
+2020-06-28  Timo Myyrä  <timo.myyra@bittivirhe.fi>
+
+       Add thread-naming support for OpenBSD
+
+       OpenBSD has pthread_set_name_np; FreeBSD appears to have both
+       this call and pthread_setname_np (the latter call is used in 
preference).
+
+       * configure.ac: Detect pthread_set_name_np.
+       * src/systhread.c:
+       Include <pthread_np.h> and call pthread_set_name_np if available.
+
+2020-06-27  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+       src/comp.c (Fcomp__register_subr): Handle advice activation (bug#42038).
+
+2020-06-27  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Use getrandom syscall for nonces
+
+       * admin/merge-gnulib (GNULIB_MODULES): Add getrandom.
+       * doc/lispref/text.texi (Format of GnuTLS Cryptography Inputs):
+       Don’t say that iv-auto uses GNUTLS_RND_NONCE.  Also, don’t say
+       that it returns the IV’s actual value, as it never has done that.
+       * src/fns.c, src/sysdep.c: Include sys/random.h, for getrandom.
+       * src/fns.c (Fsecure_hash_algorithms): Use getrandom so that this
+       function does not depend on HAVE_GNUTLS3.
+       * src/sysdep.c: Do not include <gnutls/crypto.h>.
+       (random_seed) [HAVE_LRAND48]: Can be long int now.
+       (init_random) [!WINDOWSNT]: Use getrandom syscall instead
+       of opening /dev/urandom, as this works even on GNU/Linux
+       hosts that lack /dev/urandom.  Don’t bother with gnutls_rnd
+       as it’s not needed now that we have getrandom.
+
+2020-06-27  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from Gnulib
+
+       This incorporates:
+       2020-06-27 getloadavg: don’t depend on fopen-gnu
+       2020-06-25 c-dtoastr, c-ldtoastr: new modules
+       2020-06-01 getloadavg: fix double-increment bug
+       2020-06-01 tempname: use getrandom, not getentropy
+       2020-05-31 tempname: merge from glibc and coreutils
+       2020-05-31 getentropy: work around a macOS and Solaris problem
+       2020-05-31 fnmatch: merge from glibc
+       2020-05-30 unistd: remove conflicting declaration of getrandom
+       2020-05-30 don't assume that UNICODE is not defined
+       2020-05-29 fix compilation error on native Windows
+       2020-05-28 avoid dynamic loading of Windows API functions when possible
+       2020-05-28 at-internal: make more robust in multithreaded applications
+       2020-05-28 getloadavg: make more robust in multithreaded applications
+       2020-05-27 getloadavg: make more robust in multithreaded applications
+       2020-05-26 count-one-bits: fix MSVC specific code
+       2020-05-25 getentropy, getrandom: new modules
+       2020-05-24 open, openat: really support O_CLOEXEC
+       2020-05-23 verify: document ‘assume’ better
+       2020-05-21 regex: configure better with "clang -fsanitize=leak"
+       2020-05-21 memmem: configure better with "clang -fsanitize=undefined"
+       2020-05-19 ftoastr: fix ifndef typo
+       * build-aux/config.guess, build-aux/config.sub, doc/misc/texinfo.tex:
+       * lib/count-one-bits.h, lib/ftoastr.c, lib/ftoastr.h:
+       * lib/getloadavg.c, lib/gettimeofday.c, lib/libc-config.h:
+       * lib/open.c, lib/openat-proc.c, lib/tempname.c, lib/tempname.h:
+       * lib/unistd.in.h, lib/verify.h, m4/memmem.m4, m4/regex.m4:
+       * m4/unistd_h.m4:
+       Update from Gnulib.
+       * lib/getrandom.c, lib/sys_random.in.h:
+       * m4/getrandom.m4, m4/sys_random_h.m4:
+       New files, copied from Gnulib.
+       * lib/gnulib.mk.in, m4/gnulib-comp.m4: Regenerate.
+
+2020-06-26  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       5280e118c0 (origin/emacs-27) ; * src/xdisp.c (pos_visible_p): Fix las...
+       bb1a9481c9 Fix posn-at-point at beginning of a display string
+       0c4b033670 Improve documentation of Info node movement commands
+       632b0119e1 Add Jansson dependency to Windows Build
+       dbfcdab837 Unbreak 'reverse-region'
+       c37de84845 Fix typos and markup in fill column indicator docs
+       f61bff3ee9 ; * CONTRIBUTE: Clarify the preferences for patch formatting.
+       368e140660 Avoid crashes in 'defconst'
+       11e3413cff Fix text about Lisp archives in the Emacs FQ
+       4c81724675 Don't use 'cl' functions in ELisp manual's examples
+
+2020-06-26  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix byte-compilation warning in project.el
+
+       * lisp/emacs-lisp/seq.el (seq-every-p): Autoload it.  This fixes
+       byte-compilation warning in project.el.
+
+2020-06-26  Dmitry Gutov  <dgutov@yandex.ru>
+
+       vc-known-roots: Actually update
+
+       * lisp/vc/vc-hooks.el (vc-known-roots):
+       Actually update for the change in 733921edfe (bug#41821).
+
+2020-06-26  Dmitry Gutov  <dgutov@yandex.ru>
+
+       project--read-project-list: Add structure verification
+
+       * lisp/progmodes/project.el (project--list): Update docstring.
+       (project--read-project-list): Add structure verification.
+
+2020-06-26  Dmitry Gutov  <dgutov@yandex.ru>
+
+       project-known-roots: Rename and improve
+
+       * lisp/progmodes/project.el (project-known-project-roots):
+       Rename from 'project-known-roots'.  Update the docstring.  Make
+       sure the returned value is a list of strings.  Update the caller
+       (bug#41821).
+
+2020-06-26  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Rename project-kill-buffers-{skip-conditions,ignores}
+
+       * lisp/progmodes/project.el (project-kill-buffers-ignores):
+       Rename from project-kill-buffers-skip-conditions (bug#41868).
+       Update both references.
+       Add a :package-version attribute.
+
+2020-06-25  Tassilo Horn  <tsdh@gnu.org>
+
+       Add NEWS entry for bug-reference auto-setup.
+
+       * etc/NEWS: Add entry for bug-reference auto-setup.
+
+2020-06-25  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix last change
+
+       * lisp/menu-bar.el (menu-bar-describe-menu): Improve the wording
+       and the help-echo of the new list-recent-keystrokes Help menu
+       item.  (Bug#41933)
+
+       * etc/NEWS: Call out the new menu item.
+
+2020-06-25  Tino Calancha  <tino.calancha@gmail.com>
+
+       Add help menu entry for view-lossage
+
+       * lisp/menu-bar.el (menu-bar-describe-menu):
+       Add an entry for view-lossage (Bug#41933).
+
+2020-06-25  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode.  Fix an off by one error.  Fixes bug #41809
+
+       * lisp/progmodes/cc-engine.el (c-full-pp-to-literal): Change > to >= 
(twice).
+
+2020-06-25  Juri Linkov  <juri@linkov.net>
+
+       Push action to list of functions in display-buffer-override-next-command
+
+       * lisp/window.el (display-buffer-override-next-command):
+       Push action to 'car' of 'display-buffer-overriding-action'
+       and in exitfun remove action from 'car'.
+       https://lists.gnu.org/archive/html/emacs-devel/2020-06/msg00803.html
+
+2020-06-24  Alan Mackenzie  <acm@muc.de>
+
+       Make switch work in AWK Mode.  Fixes bug #41923
+
+       lisp/progmodes/cc-langs.el (c-block-stmt-2-kwds): Insert "switch" into 
the AWK
+       Mode entry.
+       (c-case-kwds): Remove the special entry for AWK Mode.
+
+2020-06-24  Juri Linkov  <juri@linkov.net>
+
+       M-n in read-directory-name of vc commands gets project dirs (bug#41821)
+
+       * lisp/progmodes/project.el (project-known-roots): New autoloaded 
function.
+
+       * lisp/vc/vc-hooks.el (vc-known-roots): New function.
+
+       * lisp/vc/vc.el (vc-root-diff, vc-print-root-log):
+       * lisp/vc/vc-dir.el (vc-dir): Use 'vc-known-roots' for default
+       values for read-directory-name.
+
+2020-06-24  Juri Linkov  <juri@linkov.net>
+
+       More not-state-changing vc commands can be used from non-file buffers
+
+       * lisp/vc/vc.el (vc-deduce-fileset): Instead of checking for
+       log-view-mode, check for '(not buffer-file-name)' before trying to
+       get the backend for default-directory.  Remove the branch that
+       checks for '(not buffer-file-name)' and signals the error because
+       vc-responsible-backend used in previous condition already signals
+       its error.  (Bug#41974)
+
+2020-06-23  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix problem in tramp-smb.el
+
+       * lisp/net/tramp-smb.el (tramp-smb-handle-directory-files):
+       Use `directory-file-name'.
+
+       * test/lisp/net/tramp-tests.el (trace): Require it.
+       (tramp--test-instrument-test-case): Print also function traces.
+       (tramp--test-smb-p): New defun.
+       (tramp-test03-file-name-method-rules)
+       (tramp-test05-expand-file-name-relative)
+       (tramp-test21-file-links, tramp--test-windows-nt-or-smb-p)
+       (tramp--test-check-files): Use it.
+
+2020-06-23  David Edmondson  <dme@dme.org>
+
+       Fix gnus-cloud-download-all-data return value
+
+       * lisp/gnus/gnus-cloud.el (gnus-cloud-download-data): Return the
+       result of calling `gnus-cloud-update-all' when UPDATE is t, as per the
+       documented behaviour. (Bug#40280)
+
+2020-06-23  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/gnus/gnus.el (gnus): Fix a check to handle native compilation.
+
+2020-06-22  Eli Zaretskii  <eliz@gnu.org>
+
+       Minor improvements as followup to recent RGB string-parsing change
+
+       * src/xfaces.c (Finternal_color_values_from_color_spec): Rename to...
+       (Fcolor_values_from_color_spec): ...this.  Callers changed.
+       Rename the argument to SPEC and improve the doc string.
+       (parse_color_spec, parse_float_color_comp, parse_hex_color_comp):
+       Improve commentary.
+       (parse_color_spec): Rename the argument S to SPEC.
+
+       * etc/NEWS: Mention 'color-values-from-color-spec'.
+
+2020-06-22  Dmitry Gutov  <dgutov@yandex.ru>
+
+       project-switch-to-buffer: Improve Ido compatibility
+
+       * lisp/progmodes/project.el (project-switch-to-buffer):
+       Check that the entry contains a non-nil CDR.
+
+2020-06-22  Dmitry Gutov  <dgutov@yandex.ru>
+
+       project-switch-to-buffer: Do not require matching input
+
+       * lisp/progmodes/project.el (project-switch-to-buffer):
+       Do not require matching input, to allow creating buffers as well
+       (bug#41879).
+
+2020-06-22  Mattias Engdegård  <mattiase@acm.org>
+
+       Accept lexical lambda in auto-insert-alist
+
+       This bug was exposed by a previous removal of quoting around lambda
+       expressions in autoinsert-tests.el (1ecd350f38ee), which caused some
+       of those tests to fail.
+
+       * lisp/autoinsert.el (auto-insert): Cope with lexical closures.
+
+2020-06-22  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix spurious error in beginning-of-defun in pascal-mode (bug#41740)
+
+       * lisp/progmodes/pascal.el (pascal-beg-of-defun):
+       Ignore errors in forward-sexp.
+       * test/lisp/progmodes/pascal-tests.el (pascal-beg-of-defun): New test.
+
+2020-06-22  Mattias Engdegård  <mattiase@acm.org>
+
+       Preserve point in pascal-mode completion (bug#41740)
+
+       Failure to do so caused errors in several cases.
+       Reported by Shinichi Sakata.
+
+       * lisp/progmodes/pascal.el (pascal-type-completion)
+       (pascal-completion): Wrap code that may move point in save-excursion.
+       * test/lisp/progmodes/pascal-tests.el: New file.
+
+2020-06-22  Juri Linkov  <juri@linkov.net>
+
+       Fix display-buffer-override-next-command to call action only once 
(bug#39722)
+
+       * lisp/vc/vc-dir.el (vc-dir-bookmark-jump): Don't use 
save-window-excursion.
+
+       * lisp/window.el (display-buffer-override-next-command): Reset
+       display-buffer-overriding-action after the first buffer display action.
+
+       * lisp/tab-bar.el (switch-to-buffer-other-tab): Don't reuse frame tabs.
+       (other-tab-prefix): Don't reuse frame tabs.
+
+2020-06-22  Juri Linkov  <juri@linkov.net>
+
+       New commands other-window-prefix (C-x 4 4) and other-frame-prefix (C-x 
5 5)
+
+       * lisp/window.el (other-window-prefix, same-window-prefix): New 
commands.
+       (ctl-x-4-map): Bind 'C-x 4 4' to 'other-window-prefix'.  (Bug#41691)
+
+       * lisp/frame.el (other-frame-prefix): New command.
+       (ctl-x-5-map): Bind 'C-x 5 5' to 'other-frame-prefix'.
+
+2020-06-22  Theodor Thornhill  <theo@thornhill.no>
+
+       Forward declare eshell-buffer-name in project-eshell
+
+       * lisp/progmodes/project.el: Forward declare 'eshell-buffer-name' so
+       that 'project-eshell' can use dynamically scoping with it.
+
+2020-06-22  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savahnna/master' into dev
+
+2020-06-22  Andrea Corallo  <akrl@sdf.org>
+
+       Two `load-history' eln related fixes.
+
+       * src/lread.c (Fload): Fix `load-history' filling for elns non in
+       root lisp-dir.
+
+       * lisp/startup.el (command-line): Fix `load-history' fixup
+       algorithm for eln files.
+
+2020-06-22  Andrea Corallo  <akrl@sdf.org>
+
+       ;* src/comp.c (define_maybe_gc_or_quit): Fix a comment.
+
+       * src/comp.c (Fcomp__compile_ctxt_to_file): Confine gcc optim level in 
[0, 3].
+
+2020-06-22  Andrea Corallo  <akrl@sdf.org>
+
+       Handle correctly pure delaration specifier.
+
+       * lisp/emacs-lisp/comp.el (comp-func): New slot 'pure'.
+       (comp-spill-decl-spec): New function.
+       (comp-spill-speed): Rework to use the later.
+       (comp-spill-lap-function, comp-intern-func-in-ctxt): Spill pure
+       decl value.
+       (comp-function-optimizable-p): Check in the compiler env too if
+       pure.
+
+2020-06-22  Andrea Corallo  <akrl@sdf.org>
+
+       Add a func-arity test for dynamic functions
+
+       * test/src/comp-tests.el (comp-tests-dynamic-arity): New test.
+
+2020-06-22  Andrea Corallo  <akrl@sdf.org>
+
+       Do not native compile two functions to allow cc-mode hack
+
+       * lisp/progmodes/cc-langs.el (c-populate-syntax-table): Declare
+       with speed -1.
+
+       * lisp/progmodes/cc-bytecomp.el
+       (cc-bytecomp-compiling-or-loading): Declare with speed -1.
+
+2020-06-22  Andrea Corallo  <akrl@sdf.org>
+
+       Add a test for speed -1
+
+       * test/src/comp-tests.el (comp-test-speed--1): New test
+
+       * test/src/comp-test-funcs.el (comp-test-speed--1-f): New
+       function.
+
+2020-06-22  Andrea Corallo  <akrl@sdf.org>
+
+       Allow per function speed declaration
+
+       * src/comp.c (COMP_SPEED): Rename.
+       (comp_t): Add 'func_speed' field.
+       (emit_mvar_lval, compile_function): Update for per function speed.
+       (Fcomp__compile_ctxt_to_file): COMP_SPEED renamed.
+
+       * lisp/emacs-lisp/comp.el (comp-speed): Doc update.
+       (comp-func): New 'speed' slot.
+       (comp-spill-speed): New function.
+       (comp-spill-lap-function, comp-intern-func-in-ctxt): Fill 'speed'
+       slot.
+       (comp-spill-lap-function): Gate -1 speed functions for native
+       compilation and emit bytecode instead.
+       (comp-spill-lap): Close over `byte-to-native-plist-environment'.
+       (comp-latch-make-fill): Update for per function speed.
+       (comp-limplify-top-level): Fill speed.
+       (comp-propagate1, comp-call-optim-form-call, comp-call-optim)
+       (comp-dead-code, comp-tco, comp-remove-type-hints): Update for per
+       function speed.
+
+2020-06-22  Andrea Corallo  <akrl@sdf.org>
+
+       Execute top level forms in the right lex/dyn scope.
+
+       * lisp/emacs-lisp/bytecomp.el (byte-to-native-top-level): Add
+       'lexical' slot.
+       (byte-compile-output-file-form): Update for new slot.
+       (byte-compile-file-form-defmumble): Capture scope.
+
+       * lisp/emacs-lisp/comp.el (comp-emit-for-top-level): Specify
+       execution scope.
+
+2020-06-22  Andrea Corallo  <andcor03@e112547.nice.arm.com>
+
+       Add some testing for dynamic scope
+
+       * test/src/comp-test-funcs-dyn.el: New file.
+
+       * test/src/comp-tests.el (comp-tests-dynamic-ffuncall): Add
+       new tests.
+
+2020-06-21  Mattias Engdegård  <mattiase@acm.org>
+
+       Consolidate #RGB string parsers
+
+       Use a single parser of color strings in the #RGB, rgb:R/G/B and
+       rgbi:R/G/B formats, replacing four existing ones.  Previously,
+       error-checking was spotty, handling of the rgbi: format not always
+       present, and normalization of the result was sometimes incorrect.
+
+       * src/dispextern.h: New prototype.
+       * src/xfaces.c (parse_hex_color_comp, parse_float_color_comp)
+       (parse_color_spec, Finternal-color_values_from_color_spec): New 
functions.
+       * test/src/xfaces-tests.el 
(xfaces-internal-color-values-from-color-spec):
+       New test.
+       * lisp/term/tty-colors.el (tty-color-standard-values):
+       Use internal-color-values-from-color-spec, replacing old parser.
+       * src/nsterm.m (ns_get_color):
+       * src/w32fns.c (x_to_w32_color):
+       * src/xterm.c (x_parse_color): Use parse_color_spec, replacing old
+       parsers.
+       (HEX_COLOR_NAME_LENGTH): Remove #define.
+
+2020-06-21  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Revert last change in benchmark.el
+
+       For discussion, see the following thread:
+       https://lists.gnu.org/archive/html/emacs-devel/2020-06/msg00791.html
+
+       * lisp/emacs-lisp/benchmark.el (benchmark-run-compiled): Revert to
+       giving byte-compile a form rather than a closure.
+
+2020-06-21  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve doc strings of 'project-shell' and 'project-eshell'
+
+       * lisp/progmodes/project.el (project-shell, project-eshell): Doc
+       fixes.
+
+2020-06-21  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Replace some uses of cl-mapcan with mapcan
+
+       * lisp/progmodes/project.el (project-files, project-files):
+       * lisp/progmodes/xref.el (xref-backend-references)
+       (xref--convert-hits):
+       * test/lisp/emacs-lisp/package-tests.el
+       (package-test-strip-version): Replace cl-mapcan with equivalent
+       calls to mapcan.
+
+2020-06-21  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix remaining problems with tramp-crypt.el
+
+       * lisp/net/tramp-compat.el (tramp-compat-make-temp-file):
+       Simplify implementation.
+
+       * lisp/net/tramp-crypt.el (tramp-crypt-handle-delete-file)
+       (tramp-crypt-handle-file-attributes, 
tramp-crypt-handle-file-system-info)
+       (tramp-crypt-handle-make-directory): Let-bind `tramp-crypt-enabled' to 
nil.
+
+       * lisp/net/tramp.el (tramp-file-name-for-operation): Fix for operations
+       with two arguments.
+       (tramp-handle-load): Suppress `signal-hook-function' when NOERROR
+       is non-nil.
+
+       * test/lisp/net/tramp-tests.el (tramp-test41-utf8)
+       (tramp-test41-utf8-with-stat, tramp-test41-utf8-with-perl)
+       (tramp-test41-utf8-with-ls): Skip if needed.
+
+2020-06-21  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Evaluate some unnecessarily quoted lambdas
+
+       * lisp/cedet/semantic/complete.el
+       (semantic-displayer-tooltip-max-tags):
+       * lisp/emacs-lisp/benchmark.el (benchmark-run-compiled):
+       * lisp/emacs-lisp/package.el (package--default-summary)
+       (package-menu-filter-by-version):
+       * lisp/eshell/em-pred.el (eshell-pred-file-time):
+       * lisp/progmodes/verilog-mode.el (verilog-auto-lineup)
+       (verilog-auto-reset-widths, verilog-auto-arg-format)
+       (verilog-auto-inst-vector, verilog-auto-inst-template-numbers):
+       * lisp/textmodes/bibtex.el (bibtex-dialect):
+       * test/lisp/autoinsert-tests.el
+       (autoinsert-tests-define-auto-insert-before)
+       (autoinsert-tests-define-auto-insert-after): Remove some unnecessary
+       quoting around anonymous functions.
+
+2020-06-21  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Silence some warnings in tests
+
+       * test/lisp/emacs-lisp/package-tests.el
+       (package-test-suffix-matches): Evaluate lambda.
+       (package-test-list-filter-marked):
+       * test/lisp/vc/vc-tests.el
+       (vc-test--run-maybe-unsupported-function):
+       * test/src/undo-tests.el (undo-test-skip-invalidated-markers):
+       Silence "unused local variable" warnings.
+       * test/lisp/imenu-tests.el (imenu-simple-scan-deftest): Fix
+       docstring.  Don't shadow global major-mode.
+
+2020-06-21  Theodor Thornhill  <theo@thornhill.no>
+
+       Pop to an existing Eshell buffer by default
+
+       * lisp/progmodes/project.el (project-shell): Improve docstring to
+       include information about an implementation detail.
+
+       * lisp/progmodes/project.el (project-eshell): Modelled after
+       'project-shell', change default behavior such that we don't create too
+       many eshell buffers by default.  Use universal argument to create
+       subsequent buffers.
+
+2020-06-20  Philipp Stephani  <phst@google.com>
+
+       Fix a byte-compile warning.
+
+       * lisp/gnus/gnus-cloud.el (gnus-cloud-download-data): Don't use
+       'mapcar' or effect.
+
+2020-06-20  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix last change for bug#41619
+
+       * lisp/progmodes/python.el (python-shell-virtualenv-root): Fix
+       last change.  (Bug#41619)
+
+2020-06-20  Eli Zaretskii  <eliz@gnu.org>
+
+       Documentation followup to the last change
+
+       * doc/emacs/cmdargs.texi (General Variables):
+       * etc/NEWS: Document the COLORTERM environment variable.
+       (Bug#41846)
+
+2020-06-20  Jan Beich  <jbeich@FreeBSD.org>  (tiny change)
+
+       Add fallback for 24-bit terminal color via COLORTERM=truecolor
+
+       * src/term.c (init_tty): When COLORTERM=truecolor is defined,
+       override setaf/setab/colors terminfo capabilities with 24-bit
+       color support.
+
+       * doc/misc/efaq.texi (Colors on a TTY): Mention the possibility to
+       enable 24-bit color via the COLORTERM environment variable.
+
+       (Bug#41846)
+
+2020-06-20  Eli Zaretskii  <eliz@gnu.org>
+
+       Revert "Don't mention non-GNU package archives."
+
+       This reverts commit 5daa7a5fd4aced33a2ae016bde5bb37d1d95edf6.
+       A proper fix will be committed to the emacs-27 branch, and
+       will be later merged to master.
+
+2020-06-20  Andrew Burgess  <andrew.burgess@embecosm.com>  (tiny change)
+
+       Fix bug with deactivation of mark in 'cua-cancel'
+
+       * lisp/emulation/cua-base.el (cua-cancel): Use 'deactivate-mark'
+       instead of setting 'mark-active' directly.
+
+2020-06-20  Theodor Thornhill  <theo@thornhill.no>
+
+       project-shell: Pop to an existing shell buffer by default
+
+       * lisp/progmodes/project.el (project-shell):
+       Pop to an existing shell buffer by default.
+       If there's none, or if universal argument is used, open a subsequent
+       shell buffer and jump to it.  Prefix shell buffer name with the base
+       name of project root directory. (Bug#41858)
+
+2020-06-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix last change in doc strings of project.el
+
+       * lisp/progmodes/project.el (project-switch-to-buffer): More accurate
+       doc string.
+
+2020-06-19  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix various problems in Tramp
+
+       * lisp/net/tramp-compat.el (tramp-temp-name-prefix): Declare.
+       (tramp-compat-make-temp-name):
+       * lisp/net/tramp.el (tramp-make-tramp-temp-name): New defuns.
+
+       * lisp/net/tramp.el (tramp-make-tramp-temp-file):
+       * lisp/net/tramp-sh.el (tramp-find-inline-encoding)
+       (tramp-maybe-open-connection, tramp-get-remote-touch)
+       (tramp-get-remote-chmod-h):
+       * lisp/net/tramp-smb.el (tramp-smb-handle-copy-directory): Use them.
+
+       * lisp/net/tramp-sh.el (tramp-do-file-attributes-with-stat):
+       Simplify shell command.  Suppress errors (interpret as nil).
+       (tramp-sh-handle-make-process): Do not visit with
+       `insert-file-contents'.  Delete tmp file only if exists.
+       (tramp-send-command-and-read): Suppress `signal-hook-function'
+       when reading expression.
+
+2020-06-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve doc strings of project.el
+
+       * lisp/progmodes/project.el (project-dired, project-shell)
+       (project-eshell, project-switch-to-buffer, project-kill-buffers)
+       (project-list-file, project--read-project-list)
+       (project--ensure-read-project-list, project--write-project-list)
+       (project--add-to-project-list-front)
+       (project--remove-from-project-list, project-prompt-project-dir)
+       (project-switch-commands, project-switch-project): Fix wording and
+       formatting of doc strings.
+
+2020-06-19  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix newly introduced errors in Tramp
+
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-unload-hook):
+       Remove `tramp-gvfs-dbus-event-error' from `dbus-event-error-functions'.
+
+       * lisp/net/tramp.el (tramp-autoload-file-name-handler): Revert patch.
+
+2020-06-19  Andrea Corallo  <akrl@sdf.org>
+
+       Add native compiler dynamic scope support
+
+       Add an initial implementation to support dynamic scope.  Arg
+       parsing/binding it's done using the existing code in use for
+       bytecode (no ad-hoc code is synthetized for that).
+
+       * src/lisp.h (struct Lisp_Subr): Add lambda_list field.
+       (SUBR_NATIVE_COMPILED_DYNP): New inliner.
+
+       * src/alloc.c (mark_object): Update for Add lambda_list field.
+
+       * src/eval.c (eval_sub, Ffuncall, funcall_lambda): Handle native
+       compiled dynamic scope
+
+       * src/comp.c (declare_lex_function): Rename from declare_function
+       and rework.
+       (declare_function): New function.
+       (make_subr): Handle daynamic scope
+
+       * src/pdumper.c (dump_subr): Update for lambda_list field.
+
+       * lisp/emacs-lisp/comp.el (comp-func): Remove args slot.
+       (comp-func-l, comp-func-d): New classes deriving from `comp-func'.
+       (comp-spill-lap-function): Rework.
+       (comp-prepare-args-for-top-level): New function.
+       (comp-emit-for-top-level, comp-emit-lambda-for-top-level): Make
+       use of `comp-prepare-args-for-top-level'.
+       (comp-limplify-top-level): Use `comp-func-l'.
+       (comp-limplify-function): Emit arg prologue only for dynamic
+       scoped functions.
+       (comp-call-optim-form-call): Use `comp-func-l'.
+       (comp-call-optim, comp-tco): Do not optimize dynamic scoped code.
+
+2020-06-19  Andrii Kolomoiets  <andreyk.mad@gmail.com>
+
+       project-switch-to-buffer: Use the "other buffer" as default
+
+       * lisp/progmodes/project.el
+       (project-switch-to-buffer): Pass the "other buffer" as DEF to
+       read-buffer if it belongs to the current project (bug#41879).
+
+2020-06-18  Paul Eggert  <eggert@cs.ucla.edu>
+           Tino Calancha  <tino.calancha@gmail.com>
+
+       Check AREF and aref_addr subscripts
+
+       * src/lisp.h (gc_asize): Move before first use.
+       (AREF, aref_addr): Check subscripts.
+
+2020-06-18  Mattias Engdegård  <mattiase@acm.org>
+
+       Define the dark luminance limit as a named constant
+
+       To make the meaning of the color-dark-p cutoff luminance clear,
+       define it as a named constant.  (We no longer use the somewhat
+       obscure 0.6^2.2 definition since it doesn't really make sense
+       to define the limit in gamma-compressed space.)
+
+       * lisp/faces.el (color-luminance-dark-limit): New constant.
+       (color-dark-p): Use color-luminance-dark-limit.
+
+2020-06-18  Michael Albinus  <michael.albinus@gmx.de>
+
+       * etc/NEWS: Fix inconsistencies.  Add `tramp-crypt-add-directory'.
+
+2020-06-18  Michael Albinus  <michael.albinus@gmx.de>
+
+       Some Tramp cleanups, mainly in tramp-crypt.el
+
+       * lisp/net/tramp-crypt.el (tramp-crypt-file-name-handler-alist):
+       Add `add-name-to-file', `make-directory-internal',
+       `make-nearby-temp-file', `temporary-file-directory' and
+       `unhandled-file-name-directory'.
+       (tramp-crypt-file-name-for-operation):
+       Use `tramp-compat-temporary-file-directory'.
+       (tramp-crypt-do-encrypt-or-decrypt-file-name)
+       (tramp-crypt-do-encrypt-or-decrypt-file): Fix syntax error in
+       `tramp-error'.
+
+       * lisp/net/tramp.el (tramp-autoload-file-name-handler):
+       * lisp/net/tramp-rclone.el (tramp-rclone-mounted-p)
+       (tramp-rclone-flush-directory-cache):
+       Use `tramp-compat-temporary-file-directory'.
+
+2020-06-18  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Add binding for project-kill-buffers
+
+       * lisp/progmodes/project.el (project-prefix-map):
+       Add binding for project-kill-buffers (bug#41868).
+
+2020-06-18  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Propertize all shr fragment IDs as shr-target-id
+
+       * lisp/net/shr.el (shr-target-id): Add docstring.
+       (shr-descend, shr-tag-a): Display dummy anchor characters as the
+       empty string.  Give all relevant 'id' or 'name' fragment identifier
+       attributes the shr-target-id text property.  This ensures that
+       cached content, such as tables, retains the property across
+       renders.  (Bug#40532)
+
+       * lisp/net/eww.el: (eww-display-html): Adapt shr-target-id property
+       search accordingly.
+
+2020-06-18  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Improve battery.el UPower support
+
+       For discussion, see the following threads:
+       https://lists.gnu.org/archive/html/emacs-devel/2020-01/msg00843.html
+       https://lists.gnu.org/archive/html/emacs-devel/2020-02/msg00042.html
+       https://lists.gnu.org/archive/html/emacs-devel/2020-02/msg00282.html
+
+       * etc/NEWS: Announce that battery-upower is enabled by default.
+
+       * lisp/battery.el (battery-upower-device): Accept both battery and
+       line power device names, or a list thereof (bug#39491).
+       (battery-upower-line-power-device): Remove user option; superseded
+       by battery-upower-device.
+       (battery-upower-subscribe): New user option.
+       (battery-status-function): Check whether a UPower service is
+       provided without activating it.
+       (display-battery-mode): Subscribe to UPower signals when using
+       battery-upower.
+       (battery-upower): Merge data from multiple power sources.  Calculate
+       terse battery status %b based on average battery load percentage
+       rather than coarse and often missing BatteryLevel (bug#39491).  Add
+       support for average temperature %d.
+
+       (battery-upower-dbus-service)
+       (battery-upower-dbus-interface)
+       (battery-upower-dbus-path)
+       (battery-upower-dbus-device-interface)
+       (battery-upower-dbus-device-path)
+       (battery-upower-device-all-properties): Rename to...
+       (battery-upower-service)
+       (battery-upower-interface)
+       (battery-upower-path)
+       (battery-upower-device-interface)
+       (battery-upower-device-path)
+       (battery--upower-device-properties): ...these, respectively.
+
+       (battery-upower-device-list): Rename to...
+       (battery--upower-devices) ...this.  Return a flat list of device
+       names determined by battery-upower-device.
+       (battery-upower-types, battery-upower-states)
+       (battery-upower-device-property, battery-upower-device-autodetect):
+       Remove.
+       (battery--upower-signals): New variable.
+       (battery--upower-signal-handler, battery--upower-props-changed)
+       (battery--upower-unsubscribe, battery--upower-subsribe)
+       (battery--upower-state): New functions.
+
+       * test/lisp/battery-tests.el (battery-upower-state)
+       (battery-upower-state-unknown): New tests.
+
+2020-06-18  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Various battery.el improvements (bug#41808)
+
+       * lisp/battery.el: Mention BSD support in Commentary.  Don't load
+       preloaded lisp/emacs-lisp/timer.el.
+       (battery--files): New function.
+       (battery--find-linux-sysfs-batteries): Use it and make fewer
+       syscalls.
+       (battery-status-function): Perform GNU/Linux checks in increasing
+       order of obsolescence: sysfs, ACPI, and then APM.  Simplify Darwin
+       check.  Add :version tag now that battery-upower is the default.
+       (battery-echo-area-format, battery-mode-line-format): Mention %s.
+       (battery-load-low, battery-load-critical): New faces.
+       (battery-update): Display battery-mode-line-format even if
+       percentage is N/A.  Apply faces battery-load-low or
+       battery-load-critical according to the percentage, but append them
+       so they don't override user customizations.  Update all mode lines
+       since we are in global-mode-string.
+       (battery-linux-proc-apm-regexp): Mark as obsolete, replacing with...
+       (battery--linux-proc-apm): ...this new rx definition.
+       (battery-linux-proc-apm): Use it.  Fix indentation.  Simplify.
+       (battery--acpi-rate, battery--acpi-capacity): New rx definitions.
+       (battery-linux-proc-acpi): Use them.  Fix pathological whitespace
+       regexps.  Simplify.
+       (battery-linux-sysfs): Fix docstring and indentation.  Reduce number
+       of file searches.  Simplify.
+       (battery-bsd-apm): Fix docstring.  Simplify.
+       (battery-pmset): Fix docstring.  Simplify ID regexp.
+
+       * lisp/emacs-lisp/rx.el (rx-define): Indent as a defun.
+
+       * test/lisp/battery-tests.el (battery-linux-proc-apm-regexp): Test
+       new battery--linux-proc-apm rx definition.
+       (battery-acpi-rate-regexp, battery-acpi-capacity-regexp): New tests.
+
+2020-06-18  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Fix and extend format-spec (bug#41758)
+
+       * lisp/format-spec.el: Use lexical-binding.  Remove dependence on
+       subr-x.el.
+       (format-spec-make): Clarify docstring.
+       (format-spec--parse-modifiers): Rename to...
+       (format-spec--parse-flags): ...this and simplify.  In particular,
+       don't bother parsing :space-pad which is redundant and unused.
+       (format-spec--pad): Remove, replacing with...
+       (format-spec--do-flags): ...this new helper function which performs
+       more of format-spec's supported text manipulation.
+       (format-spec): Autoload.  Allow optional argument to take on special
+       values 'ignore' and 'delete' for more control over what happens when
+       a replacement for a format specification isn't provided.  Bring back
+       proper support for a precision modifier similar to that of 'format'.
+
+       * lisp/battery.el (battery-format): Rewrite in terms of format-spec.
+       (battery-echo-area-format, battery-mode-line-format): Mention
+       support of format-spec syntax in docstrings.
+
+       * doc/lispref/strings.texi (Custom Format Strings):
+       * etc/NEWS: Document and announce these changes.
+
+       * lisp/dired-aux.el (dired-do-compress-to):
+       * lisp/erc/erc-match.el (erc-log-matches):
+       * lisp/erc/erc.el (erc-update-mode-line-buffer):
+       * lisp/gnus/gnus-sieve.el (gnus-sieve-update):
+       * lisp/gnus/gssapi.el (open-gssapi-stream):
+       * lisp/gnus/mail-source.el (mail-source-fetch-file)
+       (mail-source-fetch-directory, mail-source-fetch-pop)
+       (mail-source-fetch-imap):
+       * lisp/gnus/message.el (message-insert-formatted-citation-line):
+       * lisp/image-dired.el:
+       * lisp/net/eww.el:
+       * lisp/net/imap.el (imap-kerberos4-open, imap-gssapi-open)
+       (imap-shell-open):
+       * lisp/net/network-stream.el (network-stream-open-shell):
+       * lisp/obsolete/tls.el (open-tls-stream):
+       * lisp/textmodes/tex-mode.el:
+       Remove extraneous loads and autoloads of format-spec now that it is
+       autoloaded and simplify its uses where possible.
+
+       * test/lisp/battery-tests.el (battery-format): Test new format-spec
+       support.
+       * test/lisp/format-spec-tests.el (test-format-spec): Rename to...
+       (format-spec) ...this, extending test cases.
+       (test-format-unknown): Rename to...
+       (format-spec-unknown): ...this, extending test cases.
+       (test-format-modifiers): Rename to...
+       (format-spec-flags): ...this.
+       (format-spec-make, format-spec-parse-flags, format-spec-do-flags)
+       (format-spec-do-flags-truncate, format-spec-do-flags-pad)
+       (format-spec-do-flags-chop, format-spec-do-flags-case): New tests.
+
+2020-06-18  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Various dbus.el cleanups (bug#41744)
+
+       * etc/NEWS: Announce removal of aliases obsolete since Emacs 24.3.
+
+       * lisp/net/dbus.el: Remove unneeded dependency on cl-lib.el.  Quote
+       function symbols as such.
+       (dbus-ignore-errors): Don't add macro name to font-lock keywords, as
+       emacs-lisp-mode now dynamically fontifies new macro definitions.
+       (dbus-event-error-hooks, dbus-call-method-non-blocking): Remove
+       aliases obsolete since Emacs 24.3.
+       (dbus-register-signal, dbus-escape-as-identifier): Simplify.  Use
+       regexp \` and \' in place of ^ and $.
+       (dbus--parse-xml-buffer): New function for libxml2 compatibility.
+       (dbus-introspect-xml): Use it.
+
+       (dbus-string-to-byte-array, dbus-byte-array-to-string)
+       (dbus-unescape-from-identifier, dbus-list-known-names)
+       (dbus-introspect-get-all-nodes, dbus-get-all-properties)
+       (dbus-get-all-managed-objects): Simplify.
+
+       (dbus--introspect-names, dbus--introspect-name): New convenience
+       functions.
+       (dbus-introspect-get-node-names)
+       (dbus-introspect-get-interface-names)
+       (dbus-introspect-get-interface, dbus-introspect-get-method-names)
+       (dbus-introspect-get-method, dbus-introspect-get-signal-names)
+       (dbus-introspect-get-signal, dbus-introspect-get-property-names)
+       (dbus-introspect-get-property)
+       (dbus-introspect-get-annotation-names)
+       (dbus-introspect-get-annotation)
+       (dbus-introspect-get-argument-names, dbus-introspect-get-argument):
+       Use them to DRY.
+
+       * test/lisp/net/dbus-tests.el (dbus-test-all): Quote function
+       symbols as such.
+
+2020-06-18  Tassilo Horn  <tsdh@gnu.org>
+
+       ;Fix error in commit dcdf6d7124
+
+2020-06-18  Tassilo Horn  <tsdh@gnu.org>
+
+       Make bug-reference auto-setup work in vc-dir or Magit like modes
+
+       * lisp/progmodes/bug-reference.el (bug-reference-try-setup-from-vc):
+       Use default-directory if not in a file-visiting buffer to determine
+       VC URL.
+
+2020-06-18  Tassilo Horn  <tsdh@gnu.org>
+
+       Bind default-directory to given DIR.
+
+       Otherwise, "git config branch.<branch>.remote" would return the global
+       default "origin" instead of the actual, project-specific remote name.
+
+       * lisp/vc/vc-git.el (vc-git-dir-extra-headers): Bind default-directory
+       to given DIR.
+
+2020-06-18  Philip K  <philip@warpmail.net>
+
+       New command: project-kill-buffers
+
+       * lisp/progmodes/project.el
+       (project-kill-buffers-skip-conditions): New variable.
+       (project--buffer-list): New function.
+       (project-kill-buffers): New command (bug#41868).
+
+2020-06-18  Theodor Thornhill  <theo@thornhill.no>
+
+       New command: project-switch-to-buffer
+
+       * lisp/progmodes/project.el (project-switch-to-buffer): New command.
+
+2020-06-18  Theodor Thornhill  <theo@thornhill.no>
+
+       Add global bindings for project commands
+
+       * lisp/progmodes/project.el
+       (project-prefix-map): New variable.
+       Add the new keymap to ctl-x-map.
+
+2020-06-18  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Fix setting project-vc-merge-submodules via .dir-locals.el
+
+       * lisp/progmodes/project.el
+       (project--vc-merge-submodules-p): New function.
+       (project-try-vc, project--vc-list-files): Use it.
+
+2020-06-18  Dmitry Gutov  <dgutov@yandex.ru>
+
+       vc-git-dir-extra-headers: Fix recent breakage
+
+       * lisp/vc/vc-git.el (vc-git-dir-extra-headers): Account for
+       'remote' being set to "" when not found
+       (https://lists.gnu.org/archive/html/emacs-devel/2020-06/msg00582.html).
+       (vc-git-dir-extra-headers): Check the value of remote-url instead.
+
+2020-06-17  Tassilo Horn  <tsdh@gnu.org>
+
+       Auto-setup for bug-reference-mode
+
+       Tries to guess suitable bug-reference-bug-regexp and
+       bug-reference-url-format values based on version control URL (in file
+       buffers) and mail information (in Gnus summary and article buffers).
+
+       * lisp/progmodes/bug-reference.el
+       (bug-reference--maybe-setup-from-vc): New defun.
+       (bug-reference-setup-from-vc-alist): New defvar defining setup rules
+       based on version control URL.
+       (bug-reference-try-setup-from-vc): New defun using above defvar.
+       (bug-reference--maybe-setup-from-mail): New defun.
+       (bug-reference-setup-from-mail-alist): New defvar defining setup rules
+       based on mail/newsgroups and header values.
+       (bug-reference-try-setup-from-gnus): New defun using above defvar.
+       (bug-reference--try-setup-gnus-article): New defun.
+       (bug-reference--run-auto-setup): New defun.
+       (bug-reference-mode): Call bug-reference--run-auto-setup as
+       :after-hook.
+       (bug-reference-prog-mode): Call bug-reference--run-auto-setup as
+       :after-hook.
+
+2020-06-17  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       229995ba2c (origin/emacs-27) Fix some Texinfo markup
+       01e86b9fdf Fix recentf typo in Emacs manual
+       cd4f75bb86 Rename default function to next-error-buffer-unnavigated-c...
+       1dff0a8949 * lisp/image-mode.el (image-toggle-display-image): Fix fit...
+       a71d1787f1 * doc/misc/tramp.texi (Predefined connection information):...
+       079b0dc430 Delete, don't kill, dir dir fragments in icomplete-fido-ba...
+       6cdecc2659 Revert markup change in with-coding-priority docs
+       22f4fba8a9 * lisp/emulation/cua-rect.el (cua--rectangle-region-insert...
+       6b9eac6759 * lisp/simple.el (shell-command-on-region): Fix docstring.
+       43ad7dc1af Clean up D-Bus documentation (bug#41744)
+       c43e5ed60d * lisp/image-mode.el (image-transform-original): New comma...
+       6eb18a950d Move tab-bar and tab-line faces to faces.el (part of bug#4...
+
+       # Conflicts:
+       #       etc/NEWS
+       #       lisp/simple.el
+
+2020-06-17  Juri Linkov  <juri@linkov.net>
+
+       * lisp/dired-aux.el (dired-vc-deduce-fileset): Add autoload cookie.
+
+2020-06-17  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Bump the project.el package version
+
+       * lisp/progmodes/project.el: Bump the package version.
+
+2020-06-17  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Change the key for project-find-regexp
+
+       * lisp/progmodes/project.el (project-switch-commands):
+       Change the key for 'project-find-regexp' to 'g', which seems to be
+       the consensus.
+
+2020-06-17  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Make project file name completion adhere to customization
+
+       * lisp/progmodes/project.el (project-find-file-in):
+       Bind completion-ignore-case to the value of
+       read-file-name-completion-ignore-case (bug#41902).
+
+2020-06-16  David Edmondson  <dme@dme.org>
+
+       gnus-cloud: Improve cloud sync
+
+       After replaying a set of actions downloaded by gnus-cloud, persist the
+       highest sequence number seen as the local `gnus-cloud-sequence'
+       number, in order that a future download will not unnecessarily replay
+       previously seen actions and any future uploads from this emacs
+       instance use a higher sequence number than that downloaded.
+
+       Remove the test on whether individual newsrc entries are older than
+       the current time, as that is always going to be the case.
+
+2020-06-15  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix some Tramp problems seen during tests
+
+       * lisp/net/tramp-crypt.el (tramp-crypt-file-name-handler-alist):
+       Add `access-file'.
+       (tramp-crypt-file-name-for-operation): Rewrite.  Take second
+       argument into account.
+       (tramp-crypt-file-name-handler): Use it.
+       (tramp-crypt-send-command): Set buffer multibyte (but utf8 files
+       still don't work).
+       (tramp-crypt-handle-access-file): New defun.
+       (tramp-crypt-do-copy-or-rename-file): Short track if both files
+       are on a crypted remote dir.
+
+       * lisp/net/tramp.el (file-notify-rm-watch): Declare.
+       (tramp-inhibit-progress-reporter): New defvar.
+       (tramp-message): Display message only if not suppressed by
+       progress reporter.
+       (with-tramp-progress-reporter): Suppress concurrent progress
+       reporter messages.
+       (tramp-file-notify-process-sentinel): Simplify.
+
+2020-06-15  Tassilo Horn  <tsdh@gnu.org>
+
+       Use vc-git-repository-url in vc-git-dir-extra-headers
+
+       * lisp/vc/vc-git.el (vc-git-dir-extra-headers): Use
+       vc-git-repository-url for getting the remote's URL.
+
+2020-06-15  Tassilo Horn  <tsdh@gnu.org>
+
+       Add optional remote-name argument to VC repository-url command
+
+       * lisp/vc/vc.el: Document new remote-name argument of VC
+       repository-url command.
+       * lisp/vc/vc-git.el (vc-git-repository-url): Add and use new arg.
+       * lisp/vc/vc-hg.el (vc-hg-repository-url): Add and use new arg.
+       * lisp/vc/vc-bzr.el (vc-bzr-repository-url): Add new arg but ignore
+       it.
+       * lisp/vc/vc-svn.el (vc-svn-repository-url): Add new arg but ignore
+       it.
+
+2020-06-14  Tassilo Horn  <tsdh@gnu.org>
+
+       Add new VC command `repository-url'
+
+       * lisp/vc/vc.el: Document repository-url command.
+       * lisp/vc/vc-bzr.el (vc-bzr-repository-url): New defun.
+       * lisp/vc/vc-git.el (vc-git-repository-url): New defun.
+       * lisp/vc/vc-hg.el (vc-hg-repository-url): New defun.
+       * lisp/vc/vc-svn.el (vc-svn-repository-url): New defun.
+
+2020-06-14  Philipp Stephani  <phst@google.com>
+
+       Band-aid for edebugging generator bodies (Bug#40434).
+
+       Edebug doesn't support them well.  Rather than trying to fix Edebug,
+       disable instrumentation for now to prevent annoying bugs.
+
+       * lisp/emacs-lisp/generator.el (iter-defun, iter-lambda, iter-make)
+       (iter-do): Don't attempt to instrument bodies that are mangled by the
+       CPS transformer.
+
+       * test/lisp/emacs-lisp/generator-tests.el
+       (generator-tests-edebug): New regression test.
+
+2020-06-14  Philipp Stephani  <phst@google.com>
+
+       Ensure that getters and setters can be edebugged at the same time.
+
+       It's necessary to add a name suffix to setters defined with
+       'gv-define-setter' so that Edebug can distinguish between the getter
+       and the setter (Bug#41853).
+
+       * lisp/emacs-lisp/gv.el (gv-define-setter): Add a name suffix to
+       setter definitions.
+
+       * test/lisp/emacs-lisp/gv-tests.el (gv-setter-edebug): New regression
+       test.
+
+2020-06-14  Michael Albinus  <michael.albinus@gmx.de>
+
+       Rearrange detecting remote uid and gid in Tramp
+
+       * lisp/net/tramp-adb.el (tramp-adb-file-name-handler-alist):
+       * lisp/net/tramp-archive.el (tramp-archive-file-name-handler-alist):
+       * lisp/net/tramp-rclone.el (tramp-rclone-file-name-handler-alist):
+       * lisp/net/tramp-smb.el (tramp-smb-file-name-handler-alist):
+       Add `tramp-get-remote-gid' and 'tramp-get-remote-uid'.
+
+       * lisp/net/tramp-crypt.el (tramp-crypt-file-name-handler-alist):
+       Add `file-ownership-preserved-p'.
+       (tramp-crypt-add-directory): Check, that NAME is not quoted.
+       (tramp-crypt-handle-file-ownership-preserved-p): New defun.
+       (tramp-crypt-handle-insert-directory): Fix docstring.
+
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist):
+       Add `tramp-get-remote-gid' and 'tramp-get-remote-uid'.
+       (tramp-gvfs-handle-file-readable-p): Call `tramp-get-remote-uid'.
+       (tramp-gvfs-handle-get-remote-uid)
+       (tramp-gvfs-handle-get-remote-gid): Rename from
+       `tramp-gvfs-get-remote-{uid,gid}'.  Do not cache result.
+       (tramp-gvfs-maybe-open-connection): No special handling for remote
+       uid and gid.
+
+       * lisp/net/tramp-sh.el (tramp-sh-file-name-handler-alist):
+       Add `tramp-get-remote-gid' and 'tramp-get-remote-uid'.
+       (tramp-sh-handle-get-remote-uid, tramp-sh-handle-get-remote-gid):
+       Rename from `tramp-get-remote-{uid,gid}'.  Do not cache result.
+       (tramp-sh-handle-file-ownership-preserved-p): Distinguish by GROUP
+       when caching.
+
+       * lisp/net/tramp-sudoedit.el (tramp-sudoedit-file-name-handler-alist):
+       Add `tramp-get-remote-gid' and 'tramp-get-remote-uid'.
+       (tramp-sudoedit-handle-get-remote-uid)
+       (tramp-sudoedit-handle-get-remote-gid): Rename from
+       `tramp-sudoedit-get-remote-{uid,gid}'.  Do not cache result.
+       (tramp-sudoedit-handle-set-file-uid-gid)
+       (tramp-sudoedit-handle-write-region): Call `tramp-get-remote-uid'
+       and `tramp-get-remote-gid'.
+       (tramp-sudoedit-maybe-open-connection): No special handling for
+       remote uid and gid.
+
+       * lisp/net/tramp.el (tramp-file-name-for-operation):
+       Add `tramp-get-remote-gid' and 'tramp-get-remote-uid'.
+       (tramp-handle-write-region, tramp-check-cached-permissions):
+       Call `tramp-get-remote-uid' and `tramp-get-remote-gid'.
+       (tramp-get-remote-uid, tramp-get-remote-gid): New defuns.
+       (tramp-local-host-p): Simplify `tramp-get-remote-uid' call.
+
+       * test/lisp/net/tramp-tests.el (tramp-test17-dired-with-wildcards)
+       Skip if needed.
+
+2020-06-14  Michael R. Mauger  <michael@mauger.com>
+
+       * lisp/progmodes/sql.el (sql-add-product): Re-correct argument
+       spec.  Previous change was due to my mistake; I have
+       resolved back to the prior behavior (Bug#39960).
+       * test/lisp/progmodes/sql-tests.el (sql-test-add-product): Added
+       test to insure I don't make the same mistake again.
+
+2020-06-13  Glenn Morris  <rgm@gnu.org>
+
+       Tag a test as unstable
+
+       * test/lisp/calendar/lunar-tests.el (lunar-test-phase-list):
+       Mark as unstable.  Eg fails on hydra.nixos.org.
+
+2020-06-13  Andrea Corallo  <akrl@sdf.org>
+
+       Implement 'maybe_gc_or_quit' to allow correct GC in compiled Lisp.
+
+       Implement the backend side of 'maybe_gc_or_quit' so that every time a
+       call to it is emitted we render it accordingly.  This allow GC to
+       kicks in during long loops in Lisp code.
+
+       * src/comp.c (comp_t): Add 'maybe_gc_or_quit' field.
+       (helper_link_table): Add 'maybe_gc', 'maybe_quit'.
+       (emit_maybe_gc_or_quit): New function.
+       (declare_runtime_imported_funcs): Import 'maybe_gc', 'maybe_quit'
+       functions.
+       (define_maybe_gc_or_quit): New function.
+       (Fcomp__init_ctxt): Register emitter.
+       (Fcomp__compile_ctxt_to_file): Call 'define_maybe_gc_or_quit'.
+       (syms_of_comp): Define Qcomp_maybe_gc_or_quit.
+
+2020-06-13  Andrea Corallo  <akrl@sdf.org>
+
+       Introduce latches
+
+       Define a new kind of basic block 'latch' to close over loops.  Its
+       purpose is for now to emit calls to `comp-maybe-gc-or-quit' but in
+       future will be useful for the loop optimizer to exploit unboxes.
+
+       * lisp/emacs-lisp/comp.el (comp-block): New base class.
+       (comp-block-lap): New class for LAP derived basic blocks.
+       (comp-latch): New class.
+       (comp-bb-maybe-add, comp-make-curr-block, comp-emit-handler)
+       (comp-emit-switch, comp-emit-switch, comp-limplify-top-level)
+       (comp-addr-to-bb-name, comp-limplify-block)
+       (comp-limplify-function): Update logic for new bb objects
+       arrangement.
+       (comp-latch-make-fill): New function.
+       (comp-emit-uncond-jump, comp-emit-cond-jump): Update to emit
+       latches.
+       (comp-new-block-sym): Add a postfix paramenter.
+
+2020-06-13  Andrea Corallo  <akrl@sdf.org>
+
+       Fix const qualifier warnings
+
+       * src/lisp.h (struct Lisp_Subr): Remove const qualifier from
+       'native_c_name'.
+
+       * src/alloc.c (cleanup_vector): Cast to discard const qualifier.
+
+2020-06-13  Philip K  <philip@warpmail.net>
+
+       Mark python-shell-virtualenv-root as safe for directories
+
+       * lisp/progmodes/python.el (python-shell-virtualenv-root):
+       Require a directory name.  (Bug#41619)
+
+2020-06-13  Konstantin Kharlamov  <Hi-Angel@yandex.ru>
+
+       Highlight typed variables in Python
+
+       * lisp/progmodes/python.el
+       (python-font-lock-keywords-maximum-decoration): Recognize
+       typed variables like "foo: int = 1" as well.  (Bug#41684)
+
+2020-06-13  Andrea Corallo  <akrl@sdf.org>
+
+       * src/alloc.c (cleanup_vector): Fix --enable-check-lisp-object-type 
build.
+
+2020-06-12  Michael Albinus  <michael.albinus@gmx.de>
+
+       Further fixes while testing tramp-crypt
+
+       * doc/misc/tramp.texi (External methods): Remove experimental note
+       for rclone.
+       (Keeping files encrypted): Mark file encryption as experimental.
+
+       * lisp/net/tramp-adb.el (tramp-adb-file-name-handler-alist):
+       Use `tramp-handle-file-truename'.
+       (tramp-adb-handle-file-truename): Remove.
+
+       * lisp/net/tramp-crypt.el (tramp-crypt-file-name-handler-alist):
+       Add `file-writable-p'.
+       (tramp-crypt-send-command): Return t if no error.
+       (tramp-crypt-do-encrypt-or-decrypt-file-name)
+       (tramp-crypt-do-encrypt-or-decrypt-file): Raise an error if it fails.
+       (tramp-crypt-do-copy-or-rename-file): Flush file properties also
+       when copying a directory.
+       (tramp-crypt-handle-file-writable-p): New defun.
+       (tramp-crypt-handle-insert-directory): Check for library
+       `text-property-search'.
+
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-handle-set-file-uid-gid):
+       Rename from `tramp-gvfs-set-file-uid-gid'.
+
+       * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename):
+       Use `tramp-handle-file-truename' as fallback.
+
+       * lisp/net/tramp.el (tramp-handle-file-truename):
+       Let-bind `tramp-crypt-enabled' to nil.
+       (tramp-handle-write-region): Set also file ownership.
+
+       * test/lisp/net/tramp-tests.el (tramp-test17-insert-directory):
+       Skip if needed.
+
+2020-06-12  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Derive gnus-edit-form-mode from lisp-data-mode, fix mode map
+
+       * lisp/gnus/gnus-eform.el (gnus-edit-form-mode): Derive from
+       lisp-data-mode, which can be handy for users who have turned on things
+       like paredit for lisp-data-mode.
+       (gnus-edit-form-mode-map): Put creation of the map inside the defvar.
+
+2020-06-11  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savahnna/master' into HEAD
+
+2020-06-11  Andrea Corallo  <akrl@sdf.org>
+
+       Fix memory leak when native compiled function is collected
+
+       * src/alloc.c (cleanup_vector): Handle native compiled
+       functions.
+
+2020-06-11  Andrea Corallo  <akrl@sdf.org>
+
+       Fix recursive load for non cons hashed 'data_ephemeral_vec' content
+
+       Removing `Vcomp_sym_subr_c_name_h' all c_name functions are GC
+       markable only through 'data_ephemeral_vec'.  A recursive load must not
+       override its content otherwise a previously activated load will have
+       the original content collected before it's used.
+
+       * src/comp.h (struct Lisp_Native_Comp_Unit): Add 'load_ongoing'
+       field.
+
+       * src/comp.c (unset_cu_load_ongoing): New function.
+       (load_comp_unit): Update logic to detect and handle recursive
+       loads.
+
+2020-06-11  Andrea Corallo  <akrl@sdf.org>
+
+       Remove `Vcomp_sym_subr_c_name_h'
+
+       Given there's no more unique relation symbol-name -> c-name remove
+       `Vcomp_sym_subr_c_name_h' and store the c_name directly in struct
+       Lisp_Subr.  The old approach would have failed dumping two functions
+       with the same symbol-name.
+
+       * src/lisp.h (struct Lisp_Subr): Add 'native_c_name' field.
+
+       * src/pdumper.c (dump_subr): Update hash + dump 'native_c_name'.
+       (dump_cold_native_subr): dump 'native_c_name'.
+       (dump_do_dump_relocation): Update logic for reviving using
+       'native_c_name'.
+
+       * src/comp.c (make_subr): Update for 'native_c_name' field.
+       (Fcomp__register_lambda, Fcomp__register_subr): Clean-up code for
+       'Vcomp_sym_subr_c_name_h' removal.
+       (syms_of_comp): Remove 'Vcomp_sym_subr_c_name_h'.
+
+2020-06-10  Mattias Engdegård  <mattiase@acm.org>
+
+       Improved light/dark colour predicate (bug#41544)
+
+       Add a predicate, color-dark-p, for deciding whether a colour is more
+       readable with black or white as contrast.  It has experimentally been
+       shown to be more accurate and robust than the various methods
+       currently employed.
+
+       The new predicate compares the relative luminance of the colour to an
+       empirically determined cut-off value, and it seems to get it right in
+       almost all cases, with no value leading to outright bad results.
+
+       * lisp/faces.el (readable-foreground-color): Use color-dark-p.
+       (color-dark-p): New function.
+       * lisp/facemenu.el (list-colors-print): Use readable-foreground-color,
+       improving readability of list-colors-display.
+       * lisp/textmodes/css-mode.el (css--contrasty-color): Remove.
+       (css--fontify-region): Use readable-foreground-color.
+
+2020-06-10  Michael Albinus  <michael.albinus@gmx.de>
+
+       Further tramp-crypt implementation and documentation
+
+       * doc/misc/tramp.texi (Top, Configuration): Insert section
+       `Keeping files encrypted' in menu.
+       (Keeping files encrypted): New node.
+
+       * lisp/net/tramp-crypt.el (tramp-crypt-file-name-handler-alist):
+       Add `tramp-set-file-uid-gid'.
+       (tramp-crypt-maybe-open-connection): Simplify.
+       (tramp-crypt-do-encrypt-or-decrypt-file): Use `binary' coding system.
+       (tramp-crypt-handle-set-file-uid-gid): New defun.
+
+       * test/lisp/net/tramp-tests.el (tramp-test09-insert-file-contents):
+       Adapt test.
+
+2020-06-10  Philipp Stephani  <phst@google.com>
+
+       Slightly improve commit 73be4d1ed5b190bd93e9bad6aebe43d0dea0d7d3.
+
+       * lisp/emacs-lisp/cl-macs.el (cl-lambda-list, cl-lambda-list1)
+       (cl-macro-list, cl-macro-list1): Use exactly the same specification as
+       for &optional (sans the third optional list element).
+
+2020-06-10  Philipp Stephani  <phst@google.com>
+
+       Allow destructuring in &aux sections when using edebug (Bug#40431)
+
+       * lisp/emacs-lisp/cl-macs.el (cl-lambda-list, cl-lambda-list1)
+       (cl-macro-list, cl-macro-list1): Allow arbitrary 'cl-lambda'
+       arguments in the &aux section.
+
+       * test/lisp/emacs-lisp/cl-macs-tests.el (cl-macs-aux-edebug): New
+       regression test.
+
+2020-06-10  Andrea Corallo  <akrl@sdf.org>
+
+       Remove unused 'helper_save_window_excursion'
+
+       * src/comp.c (helper_unwind_protect): Remove definition and
+       declaration.
+
+2020-06-10  Nicolás Bértolo  <nicolasbertolo@gmail.com>
+
+       Copy suffixes passed to 'openp' to avoid GC crashes. Fixes bug#41755
+
+       In openp_add_middle_dir_to_suffixes we build a heap-based list from
+       the passed suffixes.  It is crucial that we don't create a heap-based
+       cons that points to a stack-based list.
+
+       * src/lread.c (openp_add_middle_dir_to_suffixes): Copy suffixes when
+       building a list of middle-dirs and suffixes.
+
+2020-06-09  Simen Heggestøyl  <simenheg@gmail.com>
+
+       Save project list as lisp data
+
+       Save the project list file as lisp data instead of line separated
+       strings to make it more extendable in the future.
+
+       * lisp/progmodes/project.el (project--read-project-list)
+       (project--write-project-list, project--add-to-project-list-front)
+       (project--remove-from-project-list): Adjust to `project--list' now
+       being an alist.
+
+2020-06-09  Alan Mackenzie  <acm@muc.de>
+
+       Orthographical amendments to commit 
145aab0672ae259736ee9230f8e0ff4effa5f4fd
+
+       * etc/NEWS: Correct the spelling of CC Mode.
+
+       * lisp/progmodes/cc-fonts.el (doxygen-font-lock-doc-comments): Replace 
curly
+         quotes in comments by ASCII ones.
+
+2020-06-09  Nicolás Bértolo  <nicolasbertolo@gmail.com>
+
+       * Fix usage of cl-destructuring-bind in package--delete-directory.
+
+       * lisp/emacs-lisp/package.el (package--delete-directory): Fix usage of
+       cl-destructuring-bind.
+
+2020-06-09  Michael Albinus  <michael.albinus@gmx.de>
+
+       Continue implementation of tramp-crypt.el
+
+       * lisp/net/tramp-crypt.el (tramp-crypt-do-encrypt-or-decrypt-file):
+       Add leading "/" to infile.
+       (tramp-crypt-add-directory): Fix docstring.  Expand NAME.
+       (tramp-crypt-remove-directory)
+       (tramp-crypt-handle-file-name-all-completions)
+       (tramp-crypt-handle-set-file-times): New defuns.
+       (tramp-crypt-handle-file-executable-p)
+       (tramp-crypt-handle-file-readable-p)
+       (tramp-crypt-handle-file-system-info)
+       (tramp-crypt-handle-set-file-modes): Fix implementation.
+
+       * test/lisp/net/tramp-tests.el: Adapt call convention
+       for (tramp--test-crypt-p).
+
+2020-06-09  Juri Linkov  <juri@linkov.net>
+
+       * lisp/simple.el (shell-command-on-region): Handle nil replace on 
rectangles.
+
+       When 'region-noncontiguous-p' is non-nil (rectangular region)
+       but 'replace' is nil, pop up the shell output buffer (bug#41440).
+       When 'replace' is non-nil, trim the trailing newline.
+
+2020-06-08  Andrea Corallo  <akrl@sdf.org>
+
+       * src/comp.h (struct Lisp_Native_Comp_Unit): Fix missing 
GCALIGNED_STRUCT.
+
+2020-06-08  Andrea Corallo  <akrl@sdf.org>
+
+       Rename lambda_gc_guard -> lambda_gc_guard_h
+
+       * src/comp.h (struct Lisp_Native_Comp_Unit): Rename
+       lambda_gc_guard -> lambda_gc_guard_h
+
+       * src/pdumper.c (dump_do_dump_relocation): Likewise.
+
+       * src/comp.c (check_comp_unit_relocs, Fcomp__register_lambda)
+       (Fnative_elisp_load): Likewise.
+
+2020-06-08  Andrea Corallo  <andcor03@e112547.nice.arm.com>
+
+       * Fix load logic for the reloading CU case (bug#41754)
+
+       * src/comp.c (load_comp_unit): When swapping the compilation unit
+       abandoning the new one for the original do not forget to set its
+       loaded_once field to true because is in use by
+       `comp--register-lambda'.
+       (Fcomp__register_lambda): Add sanity a check to spot
+       early if we are trying to load the same lambda twice.
+
+2020-06-08  Andrea Corallo  <andcor03@e112547.nice.arm.com>
+
+       * Move final log after containers has been finalized
+
+       * lisp/emacs-lisp/comp.el (comp-final): Remove function log.
+       (comp-compile-ctxt-to-file): Add function log.
+
+2020-06-08  Andrea Corallo  <andcor03@e112547.nice.arm.com>
+
+       * src/pdumper.c (dump_do_dump_relocation): Fix 'lambda_gc_guard' fill 
value.
+
+       Given 'lambda_gc_guard' is in use for sanity checking fill it with t
+       as value.
+
+2020-06-08  Mattias Engdegård  <mattiase@acm.org>
+
+       More robust NS hex colour string parsing
+
+       Invalid arguments to color-values, such as "#abcdefg" or "#1234", or
+       valid ones like "#111222333", should not yield nonsense values.
+
+       * src/nsterm.m (ns_get_color):
+       Only accept "#RGB" strings with 1-4 digits per components, equal number
+       of digits each, and no trailing characters.  Parse 12-bit colours
+       correctly.
+
+2020-06-08  Michael Albinus  <michael.albinus@gmx.de>
+
+       Add autoload problem in tramp-crypt.el.
+
+       * lisp/net/tramp-crypt.el (tramp-crypt-encfs-config):
+       Add ;;;###tramp-autoload cookie.
+       (tramp-crypt-directories): Move it up.
+       (tramp-crypt-file-name-p): Move it up.  Add ;;;###tramp-autoload
+       cookie.  Make it a defsubst.
+
+       * test/lisp/net/tramp-tests.el (tramp-crypt): Do not require.
+
+2020-06-07  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into dev
+
+2020-06-07  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in lunar.el and add tests
+
+       * lisp/calendar/lunar.el: Use lexical-binding.
+       (lunar-phases, diary-lunar-phases): Silence byte-compiler.
+       * test/lisp/calendar/lunar-tests.el: New file.
+
+2020-06-07  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/byte-opt.el (side-effect-free-fns): Add 
`make-byte-code'.
+
+       `make-byte-code' wraps `vector' doing some sanity check on the input
+       arguments.  `vector' is in side-effect-and-error-free-fns so add
+       `make-byte-code' to side-effect-free-fns.
+
+2020-06-07  Glenn Morris  <rgm@gnu.org>
+
+       * test/lisp/net/tramp-tests.el: tramp-crypt-file-name-p not autoloaded.
+
+2020-06-07  Andrea Corallo  <akrl@sdf.org>
+
+       Rename comp-function-optimizable -> comp-function-optimizable-p
+
+       * lisp/emacs-lisp/comp.el (comp-function-optimizable): Rename into
+       'comp-function-optimizable-p'.
+       (comp-function-call-maybe-remove): Use the new name.
+
+2020-06-07  Andrea Corallo  <akrl@sdf.org>
+
+       Fix comp-call-optim-form-call for null `callee'
+
+       * lisp/emacs-lisp/comp.el (comp-call-optim-form-call): Guard
+       agains null `calle'.
+
+2020-06-07  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       35661ef943 (origin/emacs-27) Fix typo in "(elisp) Type Keywords"
+       1af0e95fec Gnus nnir-summary-line-format has no effect
+       dd366b5d3b Improve documentation of 'window-text-pixel-size'
+       fbd49f969e * src/xdisp.c (Fwindow_text_pixel_size): Doc fix.  (Bug#41...
+       d8593fd19f Minor improvements to EDE and EIEIO manuals
+       3916e63f9e Have Fido mode also imitate Ido mode in ignore-case options
+       cc35b197c7 Update package-menu-quick-help
+       bf09106256 Improve documentation of 'sort-subr'
+       73749efa13 Update Ukrainian transliteration
+       30a7ee505a Fix Arabic shaping when eww/shr fill the text to be rendered
+       7d323f07c0 Silence some byte-compiler warnings in tests
+       cf473e742f * test/lisp/battery-tests.el: New file.
+       b07e3b1d97 Improve format-spec documentation (bug#41571)
+
+       # Conflicts:
+       #       test/lisp/emacs-lisp/package-tests.el
+
+2020-06-07  Alan Mackenzie  <acm@muc.de>
+
+       * lisp/progmodes/js.el (js-mode): Remove second call to 
c-init-language-vars
+
+       This spurious second call fouled up already set configuration variables.
+       Fixes bug #41649.
+
+2020-06-07  Andrea Corallo  <akrl@sdf.org>
+
+       Improve propagate pass
+
+       As function folding can generate 'setimm' insns handle them in the
+       `comp-propagate-insn'.
+
+       * lisp/emacs-lisp/comp.el (comp-propagate-insn): Handle 'setimm'
+       insn.
+
+2020-06-07  Michael Albinus  <michael.albinus@gmx.de>
+
+       Add file encryption to Tramp
+
+       * lisp/net/tramp-crypt.el: New file.
+
+       * lisp/net/tramp.el (tramp-run-real-handler):
+       Add `tramp-crypt-file-name-handler'.
+       (tramp-register-file-name-handlers):
+       Call `tramp-register-crypt-file-name-handler'.
+       (tramp-handle-insert-file-contents, tramp-local-host-p): Check for
+       `tramp-crypt-enabled'
+
+       * test/lisp/net/tramp-tests.el (tramp--test-crypt-p): New defun.
+       (tramp-test24-file-acl, tramp-test25-file-selinux)
+       (tramp-test28-process-file, tramp-test29-start-file-process)
+       (tramp-test30-make-process, tramp-test31-interrupt-process)
+       (tramp-test32-shell-command)
+       (tramp-test32-shell-command-dont-erase-buffer)
+       (tramp-test33-environment-variables)
+       (tramp-test33-environment-variables-and-port-numbers)
+       (tramp-test34-explicit-shell-file-name, tramp-test35-exec-path)
+       (tramp-test35-remote-path, tramp-test36-vc-registered)
+       (tramp--test-check-files, tramp-test43-asynchronous-requests): Use it.
+
+2020-06-07  Michael Albinus  <michael.albinus@gmx.de>
+
+       Tramp code cleanup
+
+       * lisp/net/tramp-cache.el (tramp-get-connection-property): Cleanup.
+
+       * lisp/net/tramp-cmds.el (tramp-cleanup-all-connections): Delete also
+       connection processes.
+
+       * lisp/net/tramp-sh.el (tramp-set-remote-path): Cache 4096 even if
+       PIPE_BUF doesn't exist.
+
+2020-06-07  Mattias Engdegård  <mattiase@acm.org>
+
+       Use 65535 as color-values scale value in the NS backend
+
+       * src/nsfns.m (Fxw_color_values): Scale with 65535 instead of 65280, for
+       uniformity with other backends.
+       * lisp/faces.el (color-values): Update doc string.
+       * doc/lispref/frames.texi (Color Names): Update examples.
+
+2020-06-07  Andrea Corallo  <akrl@sdf.org>
+
+       Optimize optimizable variables
+
+       * lisp/emacs-lisp/comp.el (comp-symbol-values-optimizable): New
+       defconst.
+       (comp-function-call-maybe-remove): New logic to to remove
+       unnecessary `symbol-value' calls.
+
+2020-06-07  Juri Linkov  <juri@linkov.net>
+
+       The key prefix 'C-x t t' displays next command buffer in a new tab 
(bug#41691)
+
+       * lisp/tab-bar.el (other-tab-prefix): New command.
+       (tab-prefix-map): Bind key 'C-x t t' to other-tab-prefix.
+
+       * lisp/windmove.el (windmove-display-in-direction):
+       Use display-buffer-override-next-command.
+
+       * lisp/window.el (display-buffer-override-next-command):
+       New function refactored from windmove-display-in-direction.
+
+2020-06-06  Andrea Corallo  <akrl@sdf.org>
+
+       Mitigate possible speed 3 miss-optimization
+
+       Do not perform trampoline optimization at speed 3 on function if their
+       name is not unique inside the compilation unit.  Note that the
+       function can still be redefined in any other way therefore this is a
+       mitigation.
+
+       * lisp/emacs-lisp/comp.el (comp-func-unique-in-cu-p): New
+       predicate.
+       (comp-call-optim-form-call): Perform trampoline optimization
+       for named functions only if they are unique within the current
+       compilation unit.
+
+2020-06-06  Andrea Corallo  <akrl@sdf.org>
+
+       Allow for optimizing anonymous lambdas in call-optim
+
+       * lisp/emacs-lisp/comp.el (comp-func-in-unit): New function.
+       (comp-call-optim-form-call): Update logic for optimizing
+       anonymous lambdas.
+
+2020-06-06  Andrea Corallo  <akrl@sdf.org>
+
+       Clean-up unnecessary lisp_X context definition
+
+       * src/comp.c (Fcomp__init_ctxt, comp_t): Remove lisp_X
+       definition as is used only locally.
+
+2020-06-06  Andrea Corallo  <akrl@sdf.org>
+
+       Change 'direct-call' 'direct-callref' LIMPLE ops sematinc
+
+       Is cleaner to have the function c-name as first argument of
+       'direct-call' 'direct-callref'.  This is preparatory to anonymous
+       lambdas optimization.
+
+       * lisp/emacs-lisp/comp.el (comp-propagate-insn): Use c-name when
+       gathering the comp-func definition for direct calls.
+       (comp-call-optim-form-call): Add put c-name as first argument of
+       direct-call direct-callref when optimizing.
+
+       * src/comp.c (emit_call): Update logic for having c-name as
+       first arg of direct calls.
+       (emit_call_ref): Rename 'subr_sym' into 'func'.
+
+2020-06-06  Nicolás Bértolo  <nicolasbertolo@gmail.com>
+
+       Reduce the number of files probed when finding a lisp file.
+
+       * src/lread.c (get-load-suffixes): Do not add any suffix to files that
+       need to be loaded by the dynamic linker.
+       (effective_load_path): Remove function.
+       (load): Don't add any suffix if file ends in a suffix already.
+       (effective_load_path): Remove function.
+       (openp_add_middle_dir_to_suffixes): Add helper function to create
+       pairs of middle directories and suffixes.
+       (openp_max_middledir_and_suffix_len): Add helper function to count the
+       number of bytes needed to store the middle directory and suffix.
+       (openp_fill_filename_buffer): Add helper function to copy middle
+       directory, basename and suffix to the filename buffer.
+
+2020-06-06  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-06-06  Paul Eggert  <eggert@cs.ucla.edu>
+
+       make-text-button no longer modifies its string arg
+
+       * etc/NEWS: Mention this.
+       * lisp/apropos.el (apropos-library-button):
+       * lisp/ibuf-ext.el (ibuffer-old-saved-filters-warning):
+       There’s no longer a need copy make-text-button’s string arg.
+       * lisp/button.el (make-text-button): Return a copy of a string arg.
+       Delay making the copy until after error-checking.
+
+2020-06-06  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Un-deprecate oset and oset-default
+
+       For discussion see the following threads:
+       https://lists.gnu.org/archive/html/emacs-devel/2020-05/msg00630.html
+       https://lists.gnu.org/archive/html/emacs-devel/2020-05/msg00674.html
+       https://lists.gnu.org/archive/html/emacs-devel/2020-06/msg00099.html
+
+       * lisp/emacs-lisp/eieio.el (oset, oset-default): Un-deprecate.
+       * lisp/emacs-lisp/eieio-core.el (eieio-oref): Declare gv-setter here
+       instead of in lisp/emacs-lisp/eieio.el.  Suggested by
+       Stefan Monnier <monnier@iro.umontreal.ca>.
+       (eieio-oref-default): Add gv-setter declaration.
+       * etc/NEWS: Announce these changes.
+       * doc/misc/eieio.texi (Accessing Slots): Document oref and
+       oref-default as generalized variables.  Consistently document
+       getters before setters.
+       * test/lisp/emacs-lisp/eieio-tests/eieio-tests.el: Use
+       lexical-binding.
+       (eieio-test-13-init-methods): Simplify.
+       (eieio-test-33-instance-tracker): Declare IT-list as special.
+
+2020-06-06  Andrea Corallo  <akrl@sdf.org>
+
+       Some fixes for --without-nativecomp config
+
+       * src/pdumper.c (dump_subr): Do not add RELOC_NATIVE_SUBR for
+       VERY_LATE_RELOCS in --without-nativecomp.
+       (dump_do_dump_relocation): Add a sanity check that no
+       RELOC_NATIVE_SUBR exists in --without-nativecomp.
+
+       * src/lread.c (Fload): As Fnative_elisp_load is not defined
+       in --without-nativecomp so ifdef this block.
+
+2020-06-06  Ellington Santos  <ellingtonsantos@gmail.com>  (tiny change)
+
+       Improve battery status display via GNU/Linux sysfs
+
+       * lisp/battery.el (battery-linux-sysfs): Support %b format.
+       Improve the display of %p.  (Bug#41542)
+
+2020-06-05  Pip Cet  <pipcet@gmail.com>
+
+       Avoid zero-width glyphs and the resulting cursor artifacts
+
+       * src/xdisp.c (fill_gstring_glyph_string): Handle unavailable glyphs.
+       (append_composite_glyph): Mark unavailable glyphs.
+       (gui_produce_glyphs): Make glyphs unavailable for zero-width
+       compositions.  (Bug#41645)
+
+2020-06-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Streamline live_*_holding
+
+       (live_string_holding, live_cons_holding, live_symbol_holding)
+       (live_float_p, live_vector_holding):
+       Assert that m->type is correct, instead of testing this at
+       runtime.  All callers changed.
+       (live_large_vector_holding, live_small_vector_holding):
+       Now two functions instead of the old live_vector_holding.
+       All callers changed.
+       (live_large_vector_p, live_small_vector_p):
+       Now two functions instead of the old live_vector_p.
+       All callers changed.
+       (mark_maybe_object): Ignore Lisp_Type_Unused0 quickly too,
+       since that cannot possibly be an object.
+       (CHECK_LIVE, CHECK_ALLOCATED_AND_LIVE):
+       New arg MEM_TYPE.  All callers changed.
+       (CHECK_ALLOCATED_AND_LIVE_SYMBOL): Simplify by combining
+       GC_CHECK_MARKED_OBJECTS code.
+
+2020-06-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Make live_*_p more accurate
+
+       * src/alloc.c (live_string_holding, live_cons_holding)
+       (live_symbol_holding, live_vector_holding):
+       Return a C pointer, not a Lisp_Object.  All callers changed.
+       This helps the compiler a bit.
+       (live_string_p, live_cons_p, live_symbol_p, live_vector_p):
+       Require that P point directly at the object, rather than
+       somewhere within the object.  This fixes some false positives
+       with valid_lisp_object_p (used only in debugging).
+       (mark_maybe_object): Rely on the new accuracy.
+
+2020-06-05  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Fix some side-effecting uses of make-text-button
+
+       For discussion, see the following thread:
+       https://lists.gnu.org/archive/html/emacs-devel/2020-06/msg00117.html
+
+       * lisp/apropos.el (apropos-library-button):
+       * lisp/help-fns.el (help-fns--first-release): Return result of
+       make-text-button instead of relying on its side effects.
+       * lisp/ibuf-ext.el (ibuffer-old-saved-filters-warning): Avoid
+       modifying an immutable string.
+
+2020-06-05  Juri Linkov  <juri@linkov.net>
+
+       * lisp/dired.el (dired-toggle-marks): Use region for non-nil 
dired-mark-region
+
+       (dired-mark--region-use-p, dired-mark--region-beginning)
+       (dired-mark--region-end): New internal functions.
+       (dired-mark-if): Use new functions.  (Bug#39902)
+
+2020-06-04  Simen Heggestøyl  <simenheg@gmail.com>
+
+       Change default project list filename to "projects"
+
+       * lisp/progmodes/project.el (project-list-file): Change the default
+       filename to "projects".
+
+2020-06-04  Simen Heggestøyl  <simenheg@gmail.com>
+
+       Use characters for keys in project-switch-commands
+
+       * lisp/progmodes/project.el (project-switch-commands): Use
+       characters for keys instead of string for better future
+       compatibility with 'read-multiple-choice'.
+       (project-switch-project): Adjust to above change.
+
+2020-06-04  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/font-lock.el (font-lock--syntax-table-affects-ppss): New var
+
+       This tries to make `font-lock-syntax-table` work correctly even when
+       it changes the parsing of strings and comments, as was the case in
+       `font-latex.el`.
+
+       We should probably deprecate the use of `font-lock-syntax-table` since
+       the present fix is still not 100% and since it comes with performance
+       problems in large files.
+
+       (font-lock-set-defaults): Set it.
+       (font-lock-fontify-syntactically-region): Don't use `syntax-ppss`
+       when we think that `font-lock-syntax-table` would interfere.
+
+2020-06-04  Andrea Corallo  <akrl@sdf.org>
+
+       Fix build for --enable-check-lisp-object-type=yes (bug#41703)
+
+       * src/comp.c (emit_coerce): Add missing declaration.
+
+2020-06-04  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-06-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Don’t default to Valgrind unless ENABLE_CHECKING
+
+       * src/alloc.c (USE_VALGRIND): If not defined, don’t default it to
+       1 unless ENABLE_CHECKING.  The Valgrind hooks bloat the garbage
+       collector a bit in production, and there’s no need for them these
+       days if one has a Valgrind suppressions file (which one needs anyway).
+       (mark_maybe_pointer): Use ‘#if USE_VALGRIND’ instead of ‘#ifdef
+       USE_VALGRIND’ for consistency with other uses of USE_VALGRIND.
+       This is in case someone builds with ‘-DENABLE_CHECKING
+       -DUSE_VALGRIND=0’ in CFLAGS.
+
+2020-06-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Revert make-text-button string copy
+
+       * lisp/button.el (make-text-button): Don’t make a copy of
+       a button’s string label.  This reverts the change made in
+       2020-05-17T05:23:28Z!eggert@cs.ucla.edu, which broke SLY.
+       Problem reported by João Távora in:
+       https://lists.gnu.org/r/emacs-devel/2020-06/msg00117.html
+       However, we’ll need a better fix for this once string
+       literals become contents, if SLY uses string constants
+       for text button labels.
+
+2020-06-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix make-text-button bug with string copy
+
+       * lisp/button.el (make-text-button): Use the copy of BEG
+       uniformly, instead of in just one place.  This fixes a typo
+       introduced in 2020-05-17T05:23:28Z!eggert@cs.ucla.edu.
+       Problem reported by João Távora in:
+       https://lists.gnu.org/r/emacs-devel/2020-06/msg00117.html
+
+2020-06-03  Andrea Corallo  <akrl@sdf.org>
+
+       Introduce `comp-loop-insn-in-block'
+
+       * lisp/emacs-lisp/comp.el (comp-loop-insn-in-block): New macro.
+       (comp-call-optim-func, comp-dead-assignments-func)
+       (comp-remove-type-hints-func): Use `comp-loop-insn-in-block'.
+
+2020-06-03  João Távora  <joaotavora@gmail.com>
+
+       Ensure Jsonrpc processes are created in correct buffer
+
+       Report and original implementation by Steve Purcell
+       <steve@sanityinc.com>.  See also See
+       https://github.com/joaotavora/eglot/pull/493 for details
+
+       * lisp/jsonrpc.el (initialize-instance): Make process in original
+       buffer.
+       (Version): Bump to 1.0.12
+
+2020-06-03  Mattias Engdegård  <mattiase@acm.org>
+
+       Make color-distance symmetric and more accurate
+
+       * src/xfaces.c (color_distance): Don't throw away the low 8 bits of
+       the colours, and make the function symmetric (bug41544)
+       (Fcolor_distance): Add caution about this not being a true metric.
+       * test/src/xfaces-tests.el: New file.
+
+2020-06-03  Pip Cet  <pipcet@gmail.com>
+
+       Handle mid-gstring face changes
+
+       * src/xdisp.c (fill_gstring_glyph_string): Don't extend the glyph
+       string past face changes.  (Bug#41454)
+
+2020-06-03  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix bug in recent byte-code checking hoist
+
+       Problem reported by Daniel Colascione (Bug#41680).
+       * src/lread.c (read1): Check that AREF (tmp, COMPILED_BYTECODE)
+       is a string before subjecting it to STRING_MULTIBYTE.
+       Be more consistent about using AREF in the neighborhood,
+       to help prevent this sort of problem from recurring.
+
+2020-06-03  Pip Cet  <pipcet@gmail.com>
+
+       Avoid losing composition state in handle_stop_backwards
+
+       * src/xdisp.c (handle_stop_backwards): Save composition iterator state
+       across our forward scan.  (Bug#41626)
+
+2020-06-03  Nicolás Bértolo  <nicolasbertolo@gmail.com>
+
+       Fix DLL imports of gccjit version functions.
+
+       * src/comp.c (init_gccjit_functions): Use LOAD_DLL_FN_OPT macro to
+       load gcc_jit_version_major, gcc_jit_version_major and
+       gcc_jit_version_patchlevel.
+       * src/w32common.h (LOAD_DLL_FN_OPT): Add macro optionally load a
+       function from a DLL.
+
+2020-06-02  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Small cleanup
+
+       * lisp/progmodes/project.el (project--add-to-project-list-front):
+       Small simplification.
+       (project--remove-from-project-list): Remove oudated comment.
+
+2020-06-02  Dmitry Gutov  <dgutov@yandex.ru>
+
+       project-list-file: New user option
+
+       * lisp/progmodes/project.el (project): New custom group.
+       (project-vc): Use it as parent.
+       (project-vc-merge-submodules): Tag with Emacs version.
+       (project-read-file-name-function): Assign to the 'project' group.
+       (project-list-file): New user option (bug#41600).
+       (project--write-project-list, project--read-project-list): Use it.
+
+2020-06-02  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix Arabic composition rules
+
+       * lisp/language/misc-lang.el (composition-function-table): Reorder
+       Arabic composition rules in descending order of lookback.
+
+       * src/composite.c (syms_of_composite): Document the order of rules
+       in 'composition-function-table'.
+
+2020-06-02  Simen Heggestøyl  <simenheg@gmail.com>
+
+       Write project list to file only when changed
+
+       * lisp/progmodes/project.el (project--add-to-project-list-front):
+       Write the project list to file only when it has changed.
+
+2020-06-02  Simen Heggestøyl  <simenheg@gmail.com>
+
+       Remove 'project--ensure-file-exists'
+
+       * lisp/progmodes/project.el (project--ensure-file-exists): Remove.
+       (project--read-project-list): Set 'project--list' to nil when the
+       project list file doesn't exist.
+
+2020-06-02  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix handling of CGJ in Hebrew text
+
+       * lisp/language/hebrew.el (hebrew): Add CGJ U+034F to the
+       combining characters supported in Hebrew compositions. (Bug#41645)
+
+2020-06-02  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Simplify and regularize some offset tests in alloc.c
+
+       * src/alloc.c (live_string_holding, live_cons_holding)
+       (live_symbol_holding, live_float_p): Simplify and regularize.
+
+2020-06-02  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Merge from origin/emacs-27
+
+       0260d2d2db Don't call 'mbrtowc' on WINDOWSNT
+
+2020-06-02  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Merge from origin/emacs-27
+
+       44c0e074f7 * doc/emacs/buffers.texi (Icomplete): Mention icomplete-mi...
+       68b6dad1d8 Be more aggressive in marking objects during GC
+       36f508f589 ; * src/xdisp.c (find_last_unchanged_at_beg_row): Fix a typo.
+       cc340da1fe Fix bug #41618 "(byte-compile 'foo) errors when foo is a m...
+       41232e6797 Avoid crashes due to bidi cache being reset during redisplay
+       f72bb4ce36 * lisp/tab-bar.el (switch-to-buffer-other-tab): Normalize ...
+       d3e0023aaa ; * etc/TODO: Fix formatting.  (Bug#41497)
+       a8ad94cd2f Fix mingw.org's MinGW GCC 9 warning about 'execve'
+
+       # Conflicts:
+       #       lisp/tab-bar.el
+       #       nt/inc/ms-w32.h
+       #       src/alloc.c
+
+2020-06-02  Juri Linkov  <juri@linkov.net>
+
+       * lisp/progmodes/project.el (project-vc-dir, project-shell): New 
commands.
+
+       (project-compile): Add args and interactive spec like in 'compile'.
+       (project-switch-commands): Bind project-vc-dir to "v",
+       project-shell to "s", and rebind project-find-regexp from "s" to "r".
+
+       * doc/emacs/maintaining.texi (Project File Commands):
+       Describe project-vc-dir and project-shell.
+
+2020-06-01  Nicolás Bértolo  <nicolasbertolo@gmail.com>
+
+       * Throw an ICE when asked to emit a cast with sign extension.
+
+       * src/comp.c (cast_kind_of_type): Enum that specifies the kind of type
+       in the cast enum (unsigned, signed, pointer).
+       (emit_coerce): Throw an ICE when asked to emit a cast with sign
+       extension.
+       (define_cast_from_to): Return NULL for casts involving sign extension.
+       (define_cast_functions): Specify the kind of each type in the cast
+       union.
+
+2020-06-01  Nicolás Bértolo  <nicolasbertolo@gmail.com>
+
+       * Define casts using functions.
+
+       This is to dump prettier C files.
+       This does not affect compilation times in my tests.
+
+       * src/comp.c: Define a 15x15 cast matrix. Use it in emit_coerce().
+
+2020-06-01  Nicolás Bértolo  <nicolasbertolo@gmail.com>
+
+       * Remove unnecessary DLL load of gcc_jit_block_add_assignment_op.
+
+       * src/comp.c (gcc_jit_block_add_assignment_op): Remove unnecessary
+       func import.
+
+2020-06-01  Alan Mackenzie  <acm@muc.de>
+
+       Bug #41061 patch: Fix typos and amend code slightly
+
+       * lisp/progmodes/cc-align.el (c-lineup-ternary-bodies)
+       * doc/misc/cc-mode.texi (Operator Line-Up): Fix typos and amend code.
+
+2020-06-01  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Change xref-find-apropos to pass PATTERN to backend verbatim
+
+       * lisp/progmodes/xref.el (xref-backend-apropos): Rename this
+       generic's second arg to PATTERN, to clarify that it should be
+       handled entirely in the backend, with no pre-processing by the
+       command.
+       (xref-find-apropos): Update accordingly, but keep compatibility
+       with backends in older Emacs versions.
+       (xref-apropos-regexp): Extract from xref-find-apropos.
+
+       * lisp/progmodes/etags.el (xref-backend-apropos): Use it here.
+
+       * lisp/progmodes/elisp-mode.el (xref-backend-apropos): And here.
+
+2020-05-31  Andrea Corallo  <akrl@sdf.org>
+
+       Store libgccjit version into generated code
+
+       * src/comp.c (emit_ctxt_code): Add libgccjit version into
+       stored optimize qualities.
+       (syms_of_comp): Define Qgccjit here.
+
+       * src/w32fns.c (syms_of_w32fns): Move out Qgccjit definition.
+
+2020-05-31  Andrea Corallo  <akrl@sdf.org>
+
+       Optimize 'emit_static_object' for load-time
+
+       * src/comp.c (emit_static_object): Use a chunk size of 200 bytes
+       on bugged GCCs and a longer one (1024) in sane ones. Rename
+       str in buff to disambiguate and prefer xmalloc to a VLA given
+       the buffer is not that small.
+
+2020-05-31  Andrea Corallo  <akrl@sdf.org>
+
+       Add `comp-libgccjit-version' subr
+
+       * src/comp.c (gcc_jit_version_major, gcc_jit_version_minor)
+       (gcc_jit_version_patchlevel): Import.
+       (Fcomp_libgccjit_version): New Lisp function.
+       (syms_of_comp): Update for 'comp-libgccjit-version'.
+
+2020-05-31  Philipp Stephani  <phst@google.com>
+
+       Unbreak compilation with CHECK_STRUCTS defined.
+
+       * src/pdumper.c (dump_float): Update hash value after commit
+       9f7bfb6cb06f1480a0904184cabf187e03628e55.  The struct layout is still
+       compatible.
+
+2020-05-31  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-05-31  Nicolás Bértolo  <nicolasbertolo@gmail.com>
+
+       * Cut down compile-time emitting static data as string literals
+
+       This change drastically reduce compile time.  Apparently GCC optimizer
+       does not scale up well at all for long sequences of assignments into a
+       single array.
+
+       Nicolás Bértolo <nicolasbertolo@gmail.com>
+       Andrea Corallo  <akrl@sdf.org>
+
+       * src/comp.c (gcc_jit_context_new_string_literal)
+       (gcc_jit_block_add_assignment_op): New imports.
+       (comp_t): New 'size_t_type' 'memcpy' fields.
+       (emit_static_object): Define static objects using string literals
+       and memcpy.
+       (define_memcpy): New function.
+       (Fcomp__init_ctxt): Define 'size_t_type' and 'memcpy'.
+
+2020-05-31  Andrea Corallo  <akrl@sdf.org>
+
+       Emit better debug comments in emit_static_object
+
+       * src/comp.c (emit_static_object): Do not truncate debug
+       comments at the first NULL character.
+
+2020-05-31  Tom Tromey  <tom@tromey.com>
+
+       Remove mhtml--extend-font-lock-region (Bug#41441)
+
+       * lisp/textmodes/mhtml-mode.el (mhtml--extend-font-lock-region):
+       Remove.
+       (mhtml-mode): Don't set font-lock-extend-region-functions.
+
+2020-05-31  Eli Zaretskii  <eliz@gnu.org>
+
+       Protect bidi cache from inadvertent resets
+
+       * src/xdisp.c (Fline_pixel_height, Fmove_point_visually): Save and
+       restore the bidi cache, to avoid inadvertently resetting it by
+       starting a new iteration through buffer text.  This could cause
+       trouble if these functions are called during a redisplay cycle,
+       especially while we were processing RTL text.
+
+2020-05-31  Tino Calancha  <tino.calancha@gmail.com>
+
+       occur: Add bindings for next-error-no-select
+
+       Make the navigation in the occur buffer closer
+       to the navigation in the compilation buffer.
+
+       Add bindings to navigate the occur matches (Bug#39121).
+       Honor `next-error-highlight' and `next-error-highlight-no-select'
+       when navigating the occurrences.
+
+       * lisp/replace.el (occur-highlight-regexp, occur-highlight-overlay):
+       New variables.
+       (occur-1): Set `occur-highlight-regexp' to the searched regexp.
+       (occur-goto-locus-delete-o, occur--highlight-occurrence): New defuns.
+       (occur-mode-display-occurrence, occur-mode-goto-occurrence):
+       Use `occur--highlight-occurrence'.
+       (occur-mode-map): Bind n to `next-error-no-select'
+       and p to `previous-error-no-select'
+
+       * etc/NEWS (Changes in Specialized Modes and Packages in Emacs 28.1):
+       Announce this change.
+
+       * test/lisp/replace-tests.el 
(replace-tests-with-highlighted-occurrence):
+       Add helper macro.
+       (occur-highlight-occurrence): Add test.
+
+2020-05-31  Nicolás Bértolo  <nicolasbertolo@gmail.com>
+
+       Fix loading of libgccjit.dll while dumping in Windows.
+
+       loadup.el calls `native-comp-available-p', that calls
+       load_gccjit_if_necessary() in Windows. That function tries to load
+       libgccjit using the mappings defined in `dynamic-library-alist'. That
+       mapping is filled by term/w32-win.el, but that file may be loaded too
+       late.
+
+       * src/emacs.c (syms_of_emacs): Add libgccjit to the
+       `dynamic-library-alist' used when starting to dump so
+       `native-comp-available-p' always works in Windows.
+
+2020-05-31  Nicolás Bértolo  <nicolasbertolo@gmail.com>
+
+       Do not call `gensym' too early when loading a dump file.
+
+       This happened when subr.eln was not the first native compilation unit
+       to be loaded. register_native_comp_unit() is called when loading a
+       native compilation unit and that in turn used to call `gensym', which
+       was not loaded yet. This led to a SIGSEGV.
+
+       * src/comp.c (register_native_comp_unit): Replace the call to `gensym'
+       with an ad-hoc counter.
+
+2020-05-30  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Don't return transient projects with MAYBE-PROMPT=nil
+
+       * lisp/progmodes/project.el (project-current): Only return
+       transient projects when called with non-nil MAYBE-PROMPT.
+       Also only update the known projects lists in this case.
+       (https://lists.gnu.org/archive/html/emacs-devel/2020-05/msg03375.html).
+
+2020-05-30  immerrr  <immerrr@gmail.com>
+
+       Minor fix in 'find-alternate-file'
+
+       This fixes the use case when, for example, 'find-file-hooks'
+       fails.
+       * lisp/files.el (find-alternate-file): If buffer 'oname' exists,
+       kill it before renaming the new one.  (Bug#41359)
+
+2020-05-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Remove private prototype for 'execve' and its uses in MinGW build
+
+       * src/sysdep.c (emacs_exec_file): Don't compile this function
+       anymore on WINDOWSNT, since it is not used there.  This function
+       was the only reason for having 'execve' prototype in ms-w32.h.
+
+       * nt/inc/ms-w32.h (execve): Remove prototype and the MinGW64 vs
+       ming.org mess that it causes.
+
+2020-05-30  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-05-30  Andrea Corallo  <akrl@sdf.org>
+
+       Avoid calling Ffile_exists_p too early
+
+       Being quite early in startup initialization is better not to rely on
+       Ffile_exists_p, this call Ffile_expand and not all the necessary
+       initialization already happened.
+
+       * src/pdumper.c (dump_do_dump_relocation): Use fopen instead of
+       Ffile_exists_p.
+
+2020-05-29  Eli Zaretskii  <eliz@gnu.org>
+
+       Another fix of display of line-prefix with fringe bitmaps
+
+       * src/xdisp.c (redisplay_internal): Don't use "optimization 1"
+       if a glyph row from which to start display begins with a display
+       property that draws into the fringes.  (Bug#41584)
+
+2020-05-29  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/package.el:
+       * lisp/emacs-lisp/smie.el: Fix indent.
+
+       Use the new "space after paren" convention to get the desired 
indentation
+
+2020-05-29  Dmitry Gutov  <dgutov@yandex.ru>
+
+       project-prompt-project-dir: Use more consistent prompts
+
+       * lisp/progmodes/project.el (project-prompt-project-dir):
+       Use more consistent prompts.
+
+2020-05-29  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix display of line-prefix with fringe bitmaps
+
+       * src/xdisp.c (try_window_id): Don't use this optimization if a
+       glyph row from which to start display begins with a display
+       property that draws into the fringes.  (Bug#41584)
+
+2020-05-29  Eli Zaretskii  <eliz@gnu.org>
+
+       Commit indian.el forgotten in previous change.
+
+2020-05-29  Michael Albinus  <michael.albinus@gmx.de>
+
+       * lisp/net/tramp-smb.el (tramp-smb-errors): Add 
"NT_STATUS_INVALID_PARAMETER".
+
+2020-05-29  akater  <nuclearspace@gmail.com>
+
+       * lisp/emacs-lisp/lisp-mode.el: Add new indentation convention
+
+       (calculate-lisp-indent): To distinguish code and data when indenting,
+       introduce the convention that a space between an open paren and
+       a symbol indicate that this should be indented as a simple data list.
+
+2020-05-29  Arnold Noronha  <arnold@tdrhq.com>  (tiny change)
+
+       Create a buffer-local binding to improve performance
+
+       * lisp/ido.el (ido-make-buffer-list-1):
+       Create a buffer-local binding to improve performance when a lot of
+       buffers are open (bug#41029).
+
+2020-05-29  Dmitry Gutov  <dgutov@yandex.ru>
+
+       next-error-find-buffer-function: Back to #'ignore
+
+       * lisp/simple.el (next-error-find-buffer-function):
+       Change the default back, to simplify the default behavior
+       (bug#40919).
+
+2020-05-28  James Thomas  <jimjoe@gmx.net>
+
+       Improve Malayalam language transliteration
+
+       The existing ITRANS scheme did not support some characters and
+       language quirks like 'chillu's.  The Inscript method had errors.
+       * lisp/language/ind-util.el (indian-mlm-base-table): Add archaic
+       chars, Mozhi combos; cleanup.
+       (indian-mlm-mozhi-table): New scheme Mozhi.
+       * lisp/leim/quail/indian.el (inscript-mlm-keytable): Correct
+       errors.  Add Inscript chillus & zero-width chars, Mozhi scheme.
+       * etc/NEWS: Mention the changes.
+
+2020-05-28  Simen Heggestøyl  <simenheg@gmail.com>
+
+       Merge branch 'feature/project-switching'
+
+2020-05-28  Mattias Engdegård  <mattiase@acm.org>
+
+       Document that {en,de}code-coding-string preserve match data
+
+       * lisp/international/mule.el (define-coding-system):
+       Require :pre-write-conversion and :post-read-conversion functions
+       to leave the match data untouched.
+       * src/coding.c (Fdecode_coding_string, Fencode_coding_string):
+       Document functions as match-data-preserving.
+
+       Suggested by Stefan Monnier (see bug#41445).
+
+2020-05-28  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       bd7b681dc4 (origin/emacs-27) Tiny texinfo markup fixes
+       d0dd0e0612 ; Fix more @var/@code mixups in Elisp manual
+       313dc0439e ; Fix another format-spec typo in the Elisp manual
+       9d7fd78421 Make next-error behavior a bit more flexible
+       0691d25295 * etc/NEWS.25: Belatedly announce upcase-dwim and downcase...
+       df91c94ca8 Fix access to single-byte characters in buffer text
+
+2020-05-28  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       e7a3ed8a6d Fix tab-bar-tab-name-ellipsis initialization
+       4737d0af75 Fix Elisp manual entry for format-spec
+       0195809bb6 Fix rare assertion violations in 'etags'
+       cddb0079ff ; * lisp/format-spec.el (format-spec): Fix typo.
+
+2020-05-27  Noam Postavsky  <npostavs@gmail.com>
+
+       Adjust NEWS for revert of eshell fix on emacs-27 (Bug#41370)
+
+       * etc/NEWS.27: Move "Eshell no longer re-initializes its keymap every
+       call" to...
+       * etc/NEWS: ... here.
+
+2020-05-27  Noam Postavsky  <npostavs@gmail.com>
+
+       Fix customizing of ido-mode (Bug#41557)
+
+       lisp/ido.el (ido-mode): When setting the user option to nil, pass 0 to
+       the function, so that it will be disabled as intended.
+
+2020-05-27  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix crash with invalid bytecode vectors
+
+       * src/lread.c (read_vector): If the vector is to short to be for
+       bytecodes don’t do bytecode processing for it, as the processing
+       might run past the end of the vector.
+
+2020-05-27  Paul Eggert  <eggert@cs.ucla.edu>
+
+       --with-wide-int is a no-op on 64-bit hosts
+
+       * configure.ac: Clarify wording for --with-wide-int help.
+       * src/pdumper.c (dump_vectorlike_generic):
+       Do the eassert even if --with-wide-int was specified unnecessarily.
+
+2020-05-27  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Omit unnecessary USE_LAB_TAG #if
+
+       * src/lisp.h: Omit unnecessary #if; the condition is always false now.
+
+2020-05-27  Simen Heggestøyl  <simenheg@gmail.com>
+
+       Simplify the previous commit
+
+       * lisp/progmodes/project.el (project--read-project-list): Simplify the
+       previous commit by utilizing the optional OMIT-NULLS argument to
+       'split-string'.
+
+2020-05-27  Mattias Engdegård  <mattiase@acm.org>
+
+       Don't clobber match data in utf-8-hfs conversion (bug#41445)
+
+       Reported by Ture Pålsson.
+
+       * lisp/international/ucs-normalize.el
+       (ucs-normalize-hfs-nfd-post-read-conversion)
+       (ucs-normalize-hfs-nfd-pre-write-conversion):
+       Use save-match-data to avoid match data clobber in normalisation.
+       * test/lisp/international/ucs-normalize-tests.el
+       (ucs-normalize-save-match-data): New test.
+
+2020-05-27  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Tweak GC performance if !USE_LSB_TAG
+
+       Performance issue reported by Eli Zaretskii (Bug#41321#149).
+       * src/alloc.c (GC_OBJECT_ALIGNMENT_MINIMUM): New constant.
+       (maybe_lisp_pointer): Use it instead of GCALIGNMENT.
+
+2020-05-26  Alan Mackenzie  <acm@muc.de>
+
+       Introduce some Objective-C 2.0 keywords.  This fixes bug #5953
+
+       * lisp/progmodes/cc-langs.el (c-other-decl-kwds): New keywords 
@property,
+       @dynamic, @synthesize, @compatibility_alias.
+       (c-protection-kwds): New keywords @package, @required, @optional.
+       (c-block-stmt-1-kwds): New keyword @autoreleasepool.
+       (c-constant-kwds): New keywords IBAction, IBOutlet.
+
+2020-05-26  Simen Heggestøyl  <simenheg@gmail.com>
+
+       Avoid adding the empty string to the project list
+
+       * lisp/progmodes/project.el (project--read-project-list): Avoid adding
+       the empty string to the project list.
+
+2020-05-26  Simen Heggestøyl  <simenheg@gmail.com>
+
+       Adapt project functions to the new 'project-root'
+
+       * lisp/progmodes/project.el (project-dired, project-eshell)
+       (project--read-project-list, project--write-project-list)
+       (project--add-to-project-list-front)
+       (project--remove-from-project-list): Adapt to the new 'project-root'.
+
+2020-05-26  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Some copy edits
+
+       * doc/emacs/maintaining.texi (Switching Projects)
+       (Project File Commands): Copy edits.
+
+       * etc/NEWS: Same.
+
+2020-05-26  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Teach project-current to inhibit the prompt
+
+       * lisp/progmodes/project.el:
+       (project-current-inhibit-prompt): New variable.
+       (project-current, project-switch-project): Use it.
+
+2020-05-26  Simen Heggestøyl  <simenheg@gmail.com>
+
+       Update the Emacs manual with recent project.el changes
+
+       * doc/emacs/maintaining.texi (Projects): Add a menu.
+       (Project File Commands): New subsection describing project file
+       commands (moved here from 'Working with Projects').  Describe the new
+       commands 'project-dired' and 'project-eshell'.
+       (Switching Projects): New subsection.
+
+       * etc/NEWS: Mention project.el changes.
+
+2020-05-26  Simen Heggestøyl  <simenheg@gmail.com>
+
+       Rename 'project-switch-menu' to 'project-switch-commands'
+
+       * lisp/progmodes/project.el (project-switch-commands): Rename from
+       'project-switch-menu'.
+       (project--keymap-prompt, project-switch-project): Update after the
+       renaming.
+
+2020-05-26  Simen Heggestøyl  <simenheg@gmail.com>
+
+       Simplify 'project--keymap-prompt' a bit
+
+       * lisp/progmodes/project.el: Remove seq requirement.
+       (project--keymap-prompt): Simplify with 'mapconcat'.
+
+2020-05-26  Simen Heggestøyl  <simenheg@gmail.com>
+
+       Turn project switch menu var into a public alist
+
+       * lisp/progmodes/project.el: Require seq.
+       (project--switch-alist): Remove in favor of the public
+       'project-switch-menu'.
+       (project-add-switch-command): Remove; not needed now that
+       'project-switch-menu' is a public alist.
+       (project-switch-menu): New variable mapping keys to project switching
+       menu entries.
+       (project--keymap-prompt, project-switch-project): Adjust to the new
+       'project-switch-menu' format.
+
+2020-05-26  Simen Heggestøyl  <simenheg@gmail.com>
+
+       Change dispatch binding of 'project-find-regexp'
+
+       * lisp/progmodes/project.el: Change default dispatch binding of
+       'project-find-regexp' to 's'.
+
+2020-05-26  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Integrate project-switch-project with project-find-regexp
+
+       * lisp/progmodes/project.el:
+       (project-find-regexp): Add to the list of 'switch' commands.
+       (project-switch-project): Use call-interactively so that the
+       former can read its arguments.
+
+2020-05-26  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Move project-dired and project-eshell higher
+
+       * lisp/progmodes/project.el:
+       (project-dired, project-eshell): Move higher in the file,
+       according to their universal utility.
+
+2020-05-26  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Use an alist instead of a keymap
+
+       * lisp/progmodes/project.el:
+       (project--switch-alist): New variable to use instead of
+       project-switch-keymap, which remove.  Update all references.
+
+2020-05-26  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Improve project name completion
+
+       * lisp/progmodes/project.el:
+       (project-prompt-project-dir): Use REQUIRE-MATCH=t.  Make sure the
+       'substring' completion style is used by default.
+
+2020-05-26  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Simplify a little, and avoid duplicate commands
+
+       * lisp/progmodes/project.el:
+       (project--transient-p) Remove, not needed.
+       (project-current): Move project-find based on the directory here.
+       (project--remove-from-project-list): Only write if the list changed.
+       (project-find-project): Rename to project-prompt-project-dir.
+       Simply return the directory selected by the user.
+       (project-switch-project-find-file): Remove.
+       (project-switch-project-dired): Rename to project-dired and make
+       it follow the convention of existing projec tcommands.
+       (project-switch-project-eshell): Ditto.
+       (project-switch-project): Instead of passing the project instance
+       to the command, just bind default-directory.
+
+2020-05-26  Simen Heggestøyl  <simenheg@gmail.com>
+
+       Add project switching functionality
+
+       * lisp/progmodes/project.el: Require subr-x.
+       (project--transient-p, project--ensure-file-exists)
+       (project--read-project-list, project--ensure-read-project-list)
+       (project--write-project-list)
+       (project--add-to-project-list-front)
+       (project--remove-from-project-list, project-find-project)
+       (project-switch-project-find-file, project-switch-project-dired)
+       (project-switch-project-eshell, project-add-switch-command)
+       (project--keymap-prompt, project-switch-project): New functions.
+       (project--list, project-switch-keymap): New variables.
+       (project-current): Call 'project-find-project' when no project is
+       current.
+
+2020-05-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Port struct Lisp_FLoat to oddball platforms
+
+       * src/lisp.h (struct Lisp_Float): Declare via
+       GCALIGNED_UNION_MEMBER, not via GCALIGNED_STRUCT, since alloc.c
+       creates these in arrays and GCALIGNED_STRUCT does not necessarily
+       suffice to align struct Lisp_Float when it’s used in an array.
+       This avoids undefined behavior on oddball machines where
+       sizeof (struct Lisp_Float) is not a multiple of 8 and the compiler
+       does not support __attribute__ ((aligned 8)).
+
+2020-05-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Move union emacs_align_type to alloc.c
+
+       * src/alloc.c (union emacs_align_type): Move to here ...
+       * src/lisp.h: ... from here, and uncomment out some of the
+       types that alloc.c can see but lisp.h cannot.
+
+2020-05-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Further fix for aborts due to GC losing pseudovectors
+
+       * src/alloc.c (MALLOC_ALIGNMENT_BOUND): Remove.
+       (LISP_ALIGNMENT): Go back to yesterday’s version, except use
+       union emacs_align_type instead of max_align_t.
+       (MALLOC_IS_LISP_ALIGNED): Go back to yesterday’s version.
+       (maybe_lisp_pointer): Check against GCALIGNMENT, not LISP_ALIGNMENT.
+       * src/lisp.h (union emacs_align_type): Bring back.
+
+2020-05-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Refix aborts due to GC losing pseudovectors
+
+       This is simpler, and fixes a bug in the previous fix.
+       * src/alloc.c (MALLOC_ALIGNMENT_BOUND): Simplify by
+       using max_align_t, since the buggy implementations won’t
+       break this simpler implementation.
+       (LISP_ALIGNMENT): Simplify by just using GCALIGNMENT, since the
+       fancier implementation wasn’t correct anyway, and fixing it
+       isn’t worth the trouble on practical platforms.
+       * src/lisp.h (union emacs_align_type): Remove.
+
+2020-05-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix aborts due to GC losing pseudovectors
+
+       Problem reported by Eli Zaretskii (Bug#41321).
+       * src/alloc.c (MALLOC_ALIGNMENT_BOUND): New constant.
+       (LISP_ALIGNMENT): Lower it to avoid crashes on MinGW and similarly
+       buggy platforms where malloc returns pointers not aligned to
+       alignof (max_align_t).  But keep it higher on platforms where this
+       is known to work, as it helps GC performance.
+       (MALLOC_IS_LISP_ALIGNED): Define in terms of the other two.
+       * src/alloc.c (stacktop_sentry):
+       * src/thread.c (run_thread):
+       Don’t overalign or oversize stack sentries; they need to be
+       aligned only for pointers and Lisp_Object, not for arbitrary
+       pseudovector contents.
+       * src/lisp.h (union emacs_align_type): New type, used for
+       LISP_ALIGNMENT.
+
+2020-05-26  Stefan Kangas  <stefankangas@gmail.com>
+
+       Mark metamail.el as obsolete (Bug#41388)
+
+       The metamail package was last released in 1994, and has been removed
+       from most GNU/Linux distributions due to being buggy and unmaintained.
+
+       * lisp/mail/metamail.el: Move from here...
+       * lisp/obsolete/metamail.el: ...to here.
+       * etc/NEWS: Mention its obsoletion.
+
+2020-05-25  Andrea Corallo  <akrl@sdf.org>
+
+       Add a compiler hint test
+
+       Test that compiler hints are executed transparently.
+
+       * test/src/comp-tests.el (comp-tests-type-hints): New test.
+
+       * test/src/comp-test-funcs.el (comp-tests-hint-fixnum-f)
+       (comp-tests-hint-cons-f): New functions.
+
+2020-05-25  Andrea Corallo  <akrl@sdf.org>
+
+       Split type hint pass from dead code removal pass into dedicated one.
+
+       Given SSA prop overwrite mvar type slot we clean-up the compiler type
+       hints as last.
+
+       * lisp/emacs-lisp/comp.el (comp-passes): Add comp-remove-type-hints.
+       (comp-remove-type-hints-func): Code move.
+       (comp-dead-code): Do not call `comp-remove-type-hints-func'.
+       (comp-remove-type-hints): Add as new pass.
+
+2020-05-25  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Bump project.el version
+
+       * lisp/progmodes/project.el: Bump the version
+
+2020-05-25  Philipp Stephani  <phst@google.com>
+
+       Allow inhibiting 'auto-save-visited-mode' on a per-buffer basis.
+
+       At least for me, 'auto-save-visited-mode' is very slow and blocks user
+       interaction for files visited over TRAMP.  Therefore, I'd like a
+       mechanism to disable it for some buffers (namely, those visiting
+       remote files).
+
+       * (auto-save-visited-mode): Document that 'auto-save-visited-mode' can
+       be set to nil buffer-locally.
+
+       * etc/NEWS: Document new behavior.
+
+2020-05-25  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-05-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't bug out in xml-escape-string if invalid characters aren't present
+
+       * lisp/xml.el (xml-escape-string): Don't bug out if invalid
+       characters aren't present.
+
+2020-05-25  ej32u@protonmail.com  <ej32u@protonmail.com>
+
+       Add command ffap-other-tab (Bug#41410)
+
+       * lisp/ffap.el (ffap-other-tab): New command, opens files at point in
+       another tab.
+       (ffap-bindings): Bind it to find-file-other-tab's binding.
+
+2020-05-25  Noam Postavsky  <npostavs@gmail.com>
+
+       Make dedicated keymap and mode for eshell-command (Bug#41370)
+
+       Otherwise, we end up permanently modifying eshell-mode-map when
+       running eshell-command.
+       * lisp/eshell/eshell.el (eshell-command-mode): New mode, with map to
+       contain the bindings previously set by eshell-return-exits-minibuffer.
+       (eshell-return-exits-minibuffer): Make into obsolete alias for
+       eshell-command-mode.
+       (eshell-command): Use eshell-command-mode instead of
+       eshell-return-exits-minibuffer.
+
+2020-05-25  Noam Postavsky  <npostavs@gmail.com>
+
+       Fix segfault on closing frame with tooltip (Bug#41239)
+
+       * src/gtkutil.c (xg_free_frame_widgets): Empty and unreference the
+       tooltip widget before destroying its label.
+
+2020-05-24  Andrea Corallo  <akrl@sdf.org>
+
+       Fix GNU style
+
+       * src/comp.h: Fix GNU style.
+
+       * src/comp.c (Fcomp__compile_ctxt_to_file): Likewise.
+
+       * lisp/emacs-lisp/comp.el (comp--replace-output-file): Likewise.
+
+       * src/pdumper.c (dump_do_dump_relocation): Likewise.
+
+2020-05-24  Andrea Corallo  <akrl@sdf.org>
+
+       Fix non Windows builds
+
+       * src/emacs.c (Fkill_emacs): Given
+       'finish_delayed_disposal_of_comp_units',
+       'dispose_all_remaining_comp_units' and
+       'clean_package_user_dir_of_old_comp_units' are defined only with
+       windows native-comp builds ifdef them.
+
+       * src/comp.h (dispose_comp_unit): Fix missing parameter in
+       declaration.
+
+2020-05-25  Nicolás Bértolo  <nicolasbertolo@gmail.com>
+
+       Improve handling of native compilation units still in use in Windows
+
+       When closing emacs will inspect all directories from which it loaded
+       native compilation units. If it finds a ".eln.old" file it will try to
+       delete it, if it fails that means that another Emacs instance is using 
it.
+
+       When compiling a file we rename the file that was in the output path
+       in case it has been loaded into another Emacs instance.
+
+       When deleting a package we move any ".eln" or ".eln.old" files in the
+       package folder that we can't delete to `package-user-dir`. Emacs will
+       check that directory when closing and delete them.
+
+       * lisp/emacs-lisp/comp.el (comp--replace-output-file): Function called
+       from C code to finish the compilation process. It performs renaming of
+       the old file if necessary.
+       * lisp/emacs-lisp/package.el (package--delete-directory): Function to
+       delete a package directory. It moves native compilation units that it
+       can't delete to `package-user-dir'.
+       * src/alloc.c (cleanup_vector): Call dispose_comp_unit().
+         (garbage_collect): Call finish_delayed_disposal_of_comp_units().
+       * src/comp.c: Restore the signal mask using unwind-protect. Store
+       loaded native compilation units in a hash table for disposal on
+       close. Store filenames of native compilation units GC'd in a linked
+       list to finish their disposal when the GC is over.
+       (clean_comp_unit_directory): Delete all *.eln.old files in a
+       directory.
+       (clean_package_user_dir_of_old_comp_units): Delete all *.eln.old files
+       in `package-user-dir'.
+       (dispose_all_remaining_comp_units): Dispose of native compilation
+       units that are still loaded.
+       (dispose_comp_unit): Close handle and cleanup directory or arrange for
+       later cleanup if DELAY is true.
+       (finish_delayed_disposal_of_comp_units): Dispose of native compilation
+       units that were GC'd.
+       (register_native_comp_unit): Register native compilation unit for
+       disposal when Emacs closes.
+       * src/comp.h: Introduce cfile member in Lisp_Native_Comp_Unit.
+       Add declarations of functions that: clean directories of unused native
+       compilation units, handle disposal of native compilation units.
+       * src/emacs.c (kill-emacs): Dispose all remaining compilation units
+       right right before calling exit().
+       * src/eval.c (internal_condition_case_3, internal_condition_case_4):
+       Add functions.
+       * src/lisp.h (internal_condition_case_3, internal_condition_case_4):
+       Add functions.
+       * src/pdumper.c (dump_do_dump_relocation): Set cfile to a copy of the
+       Lisp string specifying the file path.
+
+2020-05-24  Stefan Kangas  <stefankangas@gmail.com>
+
+       Mark browse-url-conkeror as obsolete
+
+       * lisp/net/browse-url.el:
+       (browse-url--browser-defcustom-type)
+       (browse-url-conkeror-new-window-is-buffer)
+       (browse-url-conkeror-program, browse-url-conkeror-arguments)
+       (browse-url-default-browser, browse-url-conkeror): Mark the
+       conkeror browser as obsolete.
+
+       * etc/NEWS: Mention this.
+
+2020-05-24  Carl Lei  <me@xecycle.info>
+
+       Add three C++20 coroutine keywords, co_await, co_yield, and co_return
+
+       * lisp/progmodes/cc-langs.el (c-operators): Add co_await and co_yield 
to the
+       C++ value of "Exception" keywords.
+       (c-return-kwds): Create a C++ value containing co_return.
+       (c-simple-stmt-kwds): Add co_return to the C++ value.
+
+2020-05-24  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-05-23  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Port etags FALLTHROUGH to C2X
+
+       Problem reported by Ashish SHUKLA in:
+       https://lists.gnu.org/r/emacs-devel/2020-05/msg03013.html
+       * lib-src/etags.c (C_entries): Move label so that FALLTHROUGH
+       precedes a case label, as draft C2X specifies.
+
+2020-05-23  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Restore check for Emacs 20.2 bytecodes
+
+       * src/eval.c (Ffetch_bytecode): Check for multibyte bytecodes
+       here too.  Problem reported by Stefan Monnier in:
+       https://lists.gnu.org/r/emacs-devel/2020-05/msg02876.html
+
+2020-05-23  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       d6a0b66a0c (origin/emacs-27) * lisp/subr.el (save-match-data): Clarif...
+       1a6d59eeba Improve the documentation of setting up fontsets
+       c7737d40f2 ; * etc/TODO (Ligatures): Update the entry based on recent...
+       fb2e34cd21 ; * etc/TODO (Ligatures): Update the entry based on recent...
+       13b6dfd4f7 * doc/emacs/killing.texi (Rectangles): Improve indexing.
+       a10254dd46 Fix accessing files on networked drives on MS-Windows
+
+2020-05-23  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       8cc453d788 Second attempt at improving indexing in control.texi
+
+2020-05-23  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       4b9fbdb5a7 ; Update TODO item about ligature support
+       03d44acfdd * doc/lispref/control.texi (Processing of Errors): Improve...
+       b48ab743a8 Minor fixups for mutability doc
+       6ac2326e5b Don’t use “constant” for values you shouldn’t change
+
+2020-05-23  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/loadup.el: Use new 'native-comp-available-p'.
+
+2020-05-23  Philipp Stephani  <phst@google.com>
+
+       Reject invalid characters in XML strings (Bug#41094).
+
+       * lisp/xml.el (xml-escape-string): Search for invalid characters.
+       (xml-invalid-character): New error symbol.
+
+       * test/lisp/xml-tests.el (xml-print-invalid-cdata): New unit test.
+
+       * etc/NEWS: Document new behavior.
+
+2020-05-23  Nicolás Bértolo  <nicolasbertolo@gmail.com>
+
+       Windows: Use NUMBER_OF_PROCESSORS environment variable.
+
+       * lisp/emacs-lisp/comp.el (comp-effective-async-max-jobs): Use
+       NUMBER_OF_PROCESSORS environment variable if system is Windows NT,
+       "nproc" if it is in PATH or a default of 1.
+
+2020-05-23  Nicolás Bértolo  <nicolasbertolo@gmail.com>
+
+       * Workaround the 32768 chars command line limit in Windows.
+
+       * lisp/emacs-lisp/comp.el (comp-run-async-workers): Pass the
+       compilation commands through a temporary file that is loaded by the
+       child process. This is also done all other operating systems, even
+       those that support long command lines. It should not be a problem
+       since libgccjit uses temporary files too.
+
+2020-05-23  Chris McMahan  <cmcmahan@gmail.com>
+
+       Let user adjust the column widths of the package menu.
+
+       * lisp/emacs-lisp/package.el (package-name-column-width)
+       (package-version-column-width, package-status-column-width)
+       (package-archive-column-width): New defcustoms.
+       (package-menu-mode):
+       Use the values of defcustoms instead of hardcoded
+       values.  (Bug#41086)
+
+2020-05-23  Andrea Corallo  <akrl@sdf.org>
+
+       * src/comp.c: Aesthetic, GNU style fixes.
+
+2020-05-23  Nicolás Bértolo  <nicolasbertolo@gmail.com>
+
+       Load libgccjit dynamically in Windows.
+
+       * configure.ac: don't add linker flags if compiling on
+       Windows. Compile dynlib.c if modules or native compilation are
+       enabled. Always compile comp.c
+       * lisp/term/w32-win.el: Map 'gccjit to "libgccjit.dll" in
+       `dynamic-library-alist`.
+       * src/Makefile.in: Update comments. Update to handle changes in
+       configure.ac.
+       * src/comp.c: Add declarations of used libgccjit functions using
+       DEF_DLL_FN. Add calls to load_gccjit_if_necessary() where necessary.
+       Add `native-comp-available-p`
+       * src/comp.h: Remove Fnative_elisp_load. Add syms_of_comp().
+       * src/emacs.c (main): Always call syms_of_comp()
+       * src/w32.c (globals_of_w32): Clear Vlibrary_cache when starting
+       because the libraries loaded when dumping will not be loaded when
+       starting.
+       * src/w32fns.c: Add Qgccjit symbol.
+
+2020-05-23  Stefan Kangas  <stefankangas@gmail.com>
+
+       Delete another library obsolete since 23.2
+
+       This was missed in a previous commit to remove obsolete libraries.
+       Its deletion was already announced in NEWS.
+
+       * lisp/obsolete/levents.el: Delete file.  This library has been
+       obsolete since 23.2.
+
+2020-05-23  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/doc-view.el (doc-view-presentation): Fix thinko
+
+2020-05-23  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Implement 'mark-resolved' for the Git backend
+
+       * lisp/vc/vc-git.el (vc-git-mark-resolved): New function.
+
+2020-05-23  Dmitry Gutov  <dgutov@yandex.ru>
+
+       project.el: A project has only one main root now
+
+       Practice shows that the vast majority of projects only use one main
+       root.  The users of this API very often make this assumption as well.
+       The rest of the "roots" should be possible to express through
+       project-external-roots.
+
+       * lisp/progmodes/project.el: Update the commentary.
+       Only 4 non-obsolete generics now.
+       (project-root): Replacement for `project-roots'.
+       All callers updated.  Implementations too.
+       (project-roots): Declare obsolete.
+       (project-external-roots): Simplify the docstring.
+       (project-ignores): Update the docstring.
+       (project-find-regexp): Omit the second arg to project-files.
+       (project--dir-ignores): Simplify.
+       (project-compile): Simplify, remove outdated comment.
+
+       * lisp/cedet/ede.el: Add a FIXME.
+
+2020-05-23  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Disable ido-everywhere when ido-mode is off
+
+       * lisp/ido.el (ido-mode): Disable the effects of 'ido-everywhere'
+       when ido-mode is turned off.
+
+2020-05-22  Andrea Corallo  <akrl@sdf.org>
+
+       * src/comp.c: Fix 32bit wide-int.
+
+       * src/comp.c (emit_XFIXNUM): Make right shift for MSB_TAG
+       arithmetic too to preserve sign bit.
+
+2020-05-22  Andrea Corallo  <akrl@sdf.org>
+
+       * src/comp.c: Fix i386 --enable-check-lisp-object-type
+
+       * src/comp.c (load_comp_unit): Fix return type, on i386 influence
+       parameter passing!
+
+2020-05-22  Andrea Corallo  <akrl@sdf.org>
+
+       * src/comp.c: Some aesthetic code clean-up.
+
+       * src/comp.c (comp_t): Remove 'lisp_X_s' field.
+       (emit_coerce): Respect 80 columns limit.
+       (emit_rvalue_from_emacs_uint): GNU style, unnecessary brackets.
+       (emit_rvalue_from_emacs_int): Likewise.
+       (emit_rvalue_from_lisp_word_tag): Likewise.
+       (emit_rvalue_from_lisp_word): Likewise.
+       (emit_lval_XLI): Remove unused function.
+       (emit_lval_XLP): Remove commented out code.
+       (define_add1_sub1): Respect 80 columns limit.
+       (Fcomp__init_ctxt): Reflect 'lisp_X_s' field removal.
+
+2020-05-22  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Improve shr/eww handling of mailto URLs
+
+       * lisp/net/eww.el (eww): Use function-put in place of put, as
+       recommended in "(elisp) Symbol Plists".
+       (eww-follow-link):
+       * lisp/net/shr.el (shr-browse-url): Rather than call browse-url-mail
+       directly, call browse-url which respects the user options
+       browse-url-handlers and browse-url-mailto-function.  (Bug#41133)
+       (shr--current-link-region): Return nil if there is no link at point.
+       (shr--blink-link): Adapt accordingly.
+       (shr-fill-line, shr-indent, shr-table-body): Refactor to avoid some
+       unnecessary allocations.
+       * etc/NEWS: Announce that eww-follow-link and shr-browse-url support
+       custom URL handlers.
+
+2020-05-22  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Various json.el improvements
+
+       * etc/NEWS: Announce that json-read-number is now stricter.
+
+       * lisp/json.el: Bump package version.
+       (json-encoding-lisp-style-closings, json-pre-element-read-function)
+       (json-post-element-read-function, json-advance, json-peek)
+       (json--path): Clarify and improve style of doc strings.
+       (json-join): Define as an obsolete alias of string-join.
+       (json-alist-p, json-plist-p): Refactor for speed and declare as
+       pure, side-effect-free, and error-free.
+       (json--plist-reverse): Rename function...
+       (json--plist-nreverse): ...to this, making it destructive for speed.
+       All callers changed.
+       (json--plist-to-alist): Remove, replacing single use with map-pairs.
+       (json--with-indentation): Accept multiple forms as arguments, fix
+       their indentation, and allow them to be instrumented for debugging.
+       Add docstring.
+       (json-pop, json-read-keyword, json-add-to-object)
+       (json-encode-array): Simplify for speed.
+       (json-skip-whitespace): Put newline before carriage return for
+       likely frequency of occurrence, and so that the characters appear in
+       increasing order.
+       (json--check-position): Use 1+.
+       (json-path-to-position): Open code apply-partially.
+       (json-keywords): Turn into a defconst and mark as obsolete now that
+       it is no longer used.
+       (json--post-value, json--number, json--escape): New rx definitions.
+       (json-encode-keyword): Declare as side-effect-free.
+       (json-read-number): Reject leading zeros and plus signs, and make
+       integer part mandatory in accordance with JSON standards and for
+       consistency with native JSON parsing functions.  Eagerly signal
+       json-number-format when garbage follows a valid number, e.g., when
+       reading "1.1.1", instead of leaving that up to the caller.  Remove
+       optional internal argument from advertised calling convention now
+       that the function is no longer recursive.
+       (json-encode-number): Define as an alias of number-to-string.
+       (json-special-chars): Turn into a defconst.
+       (json-read-escaped-char, json-new-object, json-read-file)
+       (json-pretty-print): Simplify.
+       (json-read-string): For consistency with other json.el error
+       reporting, remove check for leading '"', and use the integer value
+       rather than the printed representation of characters in error data.
+       At EOB signal json-end-of-file instead of json-string-format.
+       (json--long-string-threshold, json--string-buffer): New variables.
+       (json-encode-string): Reimplement in terms of buffer manipulation
+       for speed (bug#20154).
+       (json-read-object): Escape ?\} properly.
+       (json--encode-alist): New function extracted from json-encode-alist.
+       (json-encode-hash-table, json-encode-alist, json-encode-plist): Use
+       it to avoid destructively modifying the argument when
+       json-encoding-object-sort-predicate is non-nil without incurring
+       unnecessary copying (bug#40693).  Encode empty object as "{}" even
+       when pretty-printing.  Simplify for speed.
+       (json-read-array): Avoid recomputing list length on each iteration
+       when json-pre-element-read-function is non-nil.  Make first element
+       of json-array-format error data a string for consistency with
+       json-object-format and to make the displayed error message clearer.
+       (json-readtable-dispatch): Accept any kind of argument, not just
+       symbols.  Generate the table in a simpler manner so the dispatch
+       order is clearer.  Remove dispatch on ?+ and ?. now that
+       json-read-number is stricter and for consistency with native JSON
+       parsing functions.  Signal json-end-of-file if argument is nil.
+       (json-read): Simplify accordingly.
+       (json-encode): Avoid allocating a list on each invocation.
+
+       * lisp/jsonrpc.el (jsonrpc--json-read, jsonrpc--json-encode): Check
+       whether native JSON functions are fboundp only once, at load time.
+
+       * lisp/progmodes/python.el (python--parse-json-array): New function.
+       (python-shell-prompt-detect): Use it to parse JSON directly as a
+       list rather than converting from a vector.
+
+       * test/lisp/json-tests.el (json-tests--with-temp-buffer): Allow
+       instrumenting for debugging.
+       (test-json-join, test-json-plist-to-alist): Remove tests.
+
+       (test-json-alist-p, test-json-plist-p, test-json-advance)
+       (test-json-peek, test-json-pop, test-json-skip-whitespace)
+       (test-json-read-keyword, test-json-encode-keyword)
+       (test-json-encode-number, test-json-read-escaped-char)
+       (test-json-read-string, test-json-encode-string)
+       (test-json-encode-key, test-json-new-object)
+       (test-json-encode-hash-table, test-json-encode-plist)
+       (test-json-encode-list, test-json-read-array)
+       (test-json-encode-array, test-json-read)
+       (test-json-read-from-string, test-json-encode): Extend tests.
+
+       (test-json-plist-reverse): Rename test...
+       (test-json-plist-nreverse): ...to this and avoid modifying literal
+       lists.
+       (test-json-read-number): Rename test...
+       (test-json-read-integer): ...to this, focusing on integers.
+       (test-json-add-to-object): Rename test...
+       (test-json-add-to-alist): ...to this, focusing on alists.
+       (json-encode-simple-alist): Rename test...
+       (test-json-encode-alist): ...to this, extending it.
+       (test-json-encode-alist-with-sort-predicate): Rename test...
+       (test-json-encode-alist-sort): ...to this, extending it.
+       (test-json-encode-plist-with-sort-predicate): Rename test...
+       (test-json-encode-plist-sort): ...to this, extending it.
+
+       (test-json-read-keyword-invalid, test-json-read-fraction)
+       (test-json-read-exponent, test-json-read-fraction-exponent)
+       (test-json-read-number-invalid)
+       (test-json-read-escaped-char-invalid, test-json-add-to-plist)
+       (test-json-add-to-hash-table, test-json-read-object-empty)
+       (test-json-read-object-invalid, test-json-read-object-function)
+       (test-json-encode-hash-table-pretty)
+       (test-json-encode-hash-table-lisp-style)
+       (test-json-encode-hash-table-sort, test-json-encode-alist-pretty)
+       (test-json-encode-alist-lisp-style, test-json-encode-plist-pretty)
+       (test-json-encode-plist-lisp-style, test-json-read-array-function)
+       (test-json-encode-array-pretty, test-json-encode-array-lisp-style)
+       (test-json-read-invalid): New tests.
+
+       (test-json-path-to-position-no-match): Use should-not.
+       (test-json-read-object): Move error check to new test
+       test-json-read-object-invalid.
+       (test-json-pretty-print-object): Adapt test now that empty objects
+       are pretty-printed as "{}".
+
+2020-05-21  Ryan C. Thompson  <rct@thompsonclan.org>
+
+       lisp/ido.el: Respect completion-auto-help setting
+
+       This commit makes ido completion respect the user's setting for
+       `completion-auto-help' by default.  It does this by defining a wrapper
+       function `ido-completion-auto-help', which calls `ido-completion-help'
+       only when `completion-auto-help' is non-nil.
+
+       * lisp/ido.el (ido-completion-auto-help): New function.
+       (ido-cannot-complete-command):
+       Use it as the new default (bug#41340).
+
+2020-05-21  Matthias Meulien  <orontee@gmail.com>
+
+       Bookmark locations can refer to VC directory buffers (bug#39722)
+
+       * etc/NEWS: Document feature.
+       * lisp/vc/vc-dir.el (vc-dir-mode): Set local 
bookmark-make-record-function.
+       (bookmark-make-record-default, bookmark-prop-get, 
bookmark-default-handler)
+       (bookmark-get-bookmark-record): Declarations.
+       (vc-dir-bookmark-make-record): Make record used to bookmark a `vc-dir' 
buffer.
+       (vc-dir-bookmark-jump): Provides bookmark-jump behavior for a `vc-dir' 
buffer.
+
+2020-05-20  Nicolás Bértolo  <nicolasbertolo@gmail.com>
+
+       Handle LISP_WORDS_ARE_POINTERS and CHECK_LISP_OBJECT_TYPE.
+
+       * src/comp.c: Introduce the Lisp_X, Lisp_Word, and Lisp_Word_tag
+       types. These types are used instead of long or long long. Use
+       emacs_int_type and emacs_uint_types where appropriate.
+       (emit_coerce): Add special logic that handles the case when
+       Lisp_Object is a struct. This is necessary for handling the
+       --enable-check-lisp-object-type configure option.
+
+       * src/lisp.h: Since libgccjit does not support opaque unions, change
+       Lisp_X to be struct. This is done to ensure that the same types are
+       used in the same binary. It is probably unnecessary since only a
+       pointer to it is used.
+
+2020-05-20  Nicolás Bértolo  <nicolasbertolo@gmail.com>
+
+       * Remove a layer of indirection for access to pure storage.
+
+       * src/comp.c: Taking the address of an array is the same as casting it
+       to a pointer. Therefore, the C expression `(EMACS_INT **) &pure` is in
+       fact adding a layer of indirection that is not necessary. The fix is
+       to cast the `pure` array to a pointer and store that in a void pointer
+       that is part of the compiled shared library.
+
+2020-05-20  Andrea Corallo  <akrl@sdf.org>
+
+       * src/comp.c (emit_setjmp): Aesthetic, respect 80 columns limit.
+
+2020-05-20  Nicolás Bértolo  <nicolasbertolo@gmail.com>
+
+       * Handle setjmp() taking two arguments in Windows.
+
+       * src/comp.c: Add `define_setjmp_deps()` and `emit_setjmp()` which
+       abstract over this difference in behavior between operating systems.
+
+       WARNING: Not all cases are handled by this patch. The Mingw-64
+       setjmp.h header deals with many other combinations. I don't think it
+       is a good idea to replicate the logic of that header inside
+       emacs. (Maybe a few lines in the configure script could be added to
+       handle this problem?)
+
+2020-05-20  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: Fix bug #39972, by fixing c-display-defun-name for nested 
defuns
+
+       * lisp/progmodes/cc-mode.el (c-common-init): Build
+       add-log-current-defun-function out of c-defun-name-and-limits instead 
of the
+       former c-defun-name.
+
+2020-05-20  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Prevent gnus-registry-handle-action from creating spurious entries
+
+       Thanks to Bob Newell for finding this.
+
+       * lisp/gnus/gnus-registry.el (gnus-registry-handle-action): If a
+       message entry ends up with no groups in its 'group key, that means the
+       entry should be deleted.
+
+2020-05-20  Alan Mackenzie  <acm@muc.de>
+
+       which-function-mode: put hook function on after-change-major-mode-hook
+
+       , rather than find-file-hook.  This keeps which-function-mode active 
should
+       the major mode be reinitialized.  Also accept a null result from
+       add-log-current-defun as definitive, should that function have run.  
This
+       fixes bug #40714.
+
+       * lisp/progmodes/which-func.el (which-func-ff-hook): Put on
+       after-change-major-mode-hook.
+       (which-function): Enhance the logic to accept a null result from
+       add-log-current-defun.
+
+2020-05-20  Nicolás Bértolo  <nicolasbertolo@gmail.com>
+
+       Do not block SIGIO in platforms that don't have it.
+
+       * src/comp.c (comp--compile-ctxt-to-file): Add a preprocessor check to
+       avoid blocking SIGIO in platforms that don't have it.
+
+2020-05-20  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix minor Tramp oddities
+
+       * lisp/net/tramp-archive.el (tramp-archive-file-name-handler):
+       Increase `max-specpdl-size' temporarily.
+
+       * lisp/net/tramp-rclone.el (tramp-rclone-flush-directory-cache):
+       Fix a problem with older Emacsen.
+
+2020-05-20  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Hoist some byte-code checking out of eval
+
+       Check Lisp_Compiled objects better as they’re created,
+       so that the byte-code interpreter needn’t do the checks
+       each time it executes them.  This improved performance
+       of ‘make compile-always’ by 1.5% on my platform.  Also,
+       improve the quality of the (still-incomplete) checks, as
+       this is more practical now that they’re done less often.
+       * src/alloc.c (make_byte_code): Remove.  All uses removed.
+       (Fmake_byte_code): Put a better (though still incomplete)
+       check here instead.  Simplify by using Fvector instead
+       of make_uninit_vector followed by memcpy, and by using
+       XSETPVECTYPE instead of make_byte_code followed by XSETCOMPILED.
+       * src/bytecode.c (Fbyte_code): Do sanity check and conditional
+       translation to unibyte here instead of each time the function is
+       executed.
+       (exec_byte_code): Omit no-longer-necessary sanity and
+       unibyte checking.  Use SCHARS instead of SBYTES where
+       either will do, as SCHARS is faster.
+       * src/eval.c (fetch_and_exec_byte_code): New function.
+       (funcall_lambda): Use it.
+       (funcall_lambda, lambda_arity, Ffetch_bytecode):
+       Omit no-longer-necessary sanity checks.
+       (Ffetch_bytecode): Add sanity check if actually fetching.
+       * src/lisp.h (XSETCOMPILED): Remove.  All uses removed.
+       * src/lread.c (read1): Check byte-code objects more thoroughly,
+       albeit still incompletely, and do translation to unibyte here
+       instead of each time the function is executed.
+       (read1): Use XSETPVECYPE instead of make_byte_code.
+       (read_vector): Omit no-longer-necessary sanity check.
+
+2020-05-20  Kévin Le Gouguec  <kevin.legouguec@gmail.com>
+
+       Add test for bug#39680
+
+       * test/lisp/electric-tests.el (electric-pair-undo-unrelated-state):
+       New test.
+
+2020-05-20  Philip K  <philip@warpmail.net>
+
+       Add project-compile command
+
+       * lisp/progmodes/project.el (project-compile):
+         New function.
+
+2020-05-20  Dmitry Gutov  <dgutov@yandex.ru>
+
+       project--vc-list-files: Don't list conflicted files thrice
+
+       * lisp/progmodes/project.el (project--vc-list-files):
+       Use delete-consecutive-dups.
+
+2020-05-19  Tassilo Horn  <tsdh@gnu.org>
+
+       Allow back-references in syntax-propertize-rules.
+
+       * lisp/emacs-lisp/syntax.el 
(syntax-propertize--shift-groups-and-backrefs):
+       Renamed from syntax-propertize--shift-groups, and also shift
+       back-references.
+       (syntax-propertize-rules): Adapt docstring and use renamed function.
+       * test/lisp/emacs-lisp/syntax-tests.el: New test.
+       (syntax-propertize--shift-groups-and-backrefs): New ERT test.
+
+2020-05-19  Tassilo Horn  <tsdh@gnu.org>
+
+       Indicate not downloaded parts in MIME buttons.
+
+       Via nnimap-fetch-partial-articles one can tell Gnus to omit fetching
+       certain parts by default.  Now the MIME buttons in the article buffer
+       indicate how to fetch the complete message in order to act on those
+       missing parts.
+
+       * lisp/gnus/gnus-art.el (gnus-insert-mime-button): Indicate not
+       downloaded parts in MIME buttons.
+
+2020-05-19  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (comp-num-cpus): Fix definition.
+
+       Introduced by 2aec16ab75.
+
+2020-05-19  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Reject attempts to clear pure strings
+
+       * src/fns.c (Ffillarray, Fclear_string):
+       Add CHECK_IMPURE here, to be consistent with Faset etc.
+       (Ffillarray): Prefer memset when the fill is a single byte.
+
+2020-05-19  Stefan Kangas  <stefankangas@gmail.com>
+
+       Clarify wording in my last commit
+
+       * lisp/mouse.el (mouse-drag-and-drop-region-show-tooltip): Clarify
+       wording of integer option.  Suggested by Eli Zaretskii.
+
+2020-05-19  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Improve password-cache-add example in comment
+
+       * lisp/password-cache.el: Improve comment.  See Andreas Schwab in:
+       https://lists.gnu.org/r/emacs-devel/2020-05/msg02422.html
+
+2020-05-19  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Redo RCS Id for pdumper
+
+       * lisp/version.el: Don’t put an RCS Id style string into the
+       executable via purecopy, as this does not work with the pdumper.
+       * src/emacs.c (RCS_Id): New constant, for 'ident'.
+
+2020-05-18  Glenn Morris  <rgm@gnu.org>
+
+       Add test for recent buffer-local-variables change
+
+       * test/src/buffer-tests.el (buffer-tests-buffer-local-variables-undo):
+       New.
+
+2020-05-18  Andrea Corallo  <akrl@sdf.org>
+
+       Pacify with the byte-compiler
+
+       * lisp/emacs-lisp/comp.el (comp-num-cpus): New special variable.
+       (comp-effective-async-max-jobs): Make use of `comp-num-cpus'.
+       (comp-call-optim-form-call): Remove unnecessary parameter.
+       (comp-call-optim-func): Reflect `comp-call-optim-form-call'
+       parameter removal.
+
+2020-05-18  Andrea Corallo  <akrl@sdf.org>
+
+       Add new customize `comp-async-env-modifier-form' (Bug#40838)
+
+       * lisp/emacs-lisp/comp.el (comp-async-env-modifier-form): New
+       customize.
+       (comp-run-async-workers): Make use of `comp-async-env-modifier-form'.
+
+2020-05-18  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: Allow "static" etc. to be placed after a declaration's type 
name
+
+       Fixes bug #41284.
+
+       * lisp/progmodes/cc-langs.el (c-type-decl-prefix-key): include 
additionally
+       c-modifier-kwds in the set of keywords at the base of this lang-const.
+
+2020-05-18  Andrea Corallo  <akrl@sdf.org>
+
+       Make the Evil happy (Bug#41374)
+
+       * lisp/emacs-lisp/comp.el (comp-never-optimize-functions):
+       Blacklist all primitives advised by evil-mode from trampoline
+       optimization.
+       (comp-call-optim-form-call): Prevent trampoline optimization for
+       recursive calls at speed 2 to respect elisp original semantic.
+
+2020-05-18  Glenn Morris  <rgm@gnu.org>
+
+       Restore buffer-undo-list to buffer-local-variables
+
+       It has been missing since 2012-07-03 (Emacs 24.3)
+       "Cleanup basic buffer management", when undo_list was moved to
+       the end of struct buffer.  (Bug#33492)
+       * src/buffer.c (buffer_local_variables_1): New function.
+       (Fbuffer_local_variables): Explicitly add buffer-undo-list.
+
+2020-05-18  Simen Heggestøyl  <simenheg@gmail.com>
+
+       Use lexical-binding in webjump.el and add tests
+
+       * lisp/net/webjump.el: Use lexical-binding.
+       (webjump-read-url-choice): Remove redundant 'function' around lambda.
+
+       * test/lisp/net/webjump-tests.el: New file with tests for webjump.el.
+
+2020-05-18  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix calculator entry of numbers with negative exponents (bug#41347)
+
+       * lisp/calculator.el (calculator-string-to-number):
+       Remove obsolete string transformations preventing entry of 1e-3 etc.
+       Keep one transformation to allow entry of "1.e3".
+       Reported by Chris Zheng.
+
+2020-05-18  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Update the package version
+
+       * lisp/progmodes/project.el: Update the package version.
+       (project-vc-merge-submodules): Update the docstring.
+       (project-try-vc): Add a FIXME.
+
+2020-05-18  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Add user option project-vc-merge-submodules
+
+       * lisp/progmodes/project.el (project-vc): Update the docstring.
+       (project-vc-merge-submodules): New user option.
+       (project-try-vc): Use it.
+       (project--submodule-p): Extract from project-try-vc.
+
+2020-05-18  Dmitry Gutov  <dgutov@yandex.ru>
+
+       vc-working-revision: Bind default-directory
+
+       * lisp/vc/vc-hooks.el (vc-working-revision):
+       Bind default-directory to be on the safe side.
+       Suggested by Ilya Ostapyshyn
+       (https://lists.gnu.org/archive/html/emacs-devel/2020-05/msg02301.html).
+
+2020-05-18  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Don’t attempt to modify constant strings
+
+       These attempts were found by ‘make compile-always’.
+       * lisp/language/tibet-util.el (tibetan-obsolete-glyphs):
+       * lisp/org/org-agenda.el (org-agenda-get-restriction-and-command):
+       Don’t try to modify string constants.
+
+2020-05-17  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-05-17  Andrea Corallo  <akrl@sdf.org>
+
+       Fix Garbage Collector for missing calle-saved regs content (Bug#41357)
+
+       * src/alloc.c (SET_STACK_TOP_ADDRESS): Do not call
+       __builtin_unwind_init.
+       (flush_stack_call_func1): Rename from 'flush_stack_call_func'.
+       (flush_stack_call_func): New function to spill all registers
+       before calling 'flush_stack_call_func1'.  This to make sure the
+       top of the stack identified includes those registers.
+
+2020-05-17  Richard Stallman  <rms@gnu.org>
+
+       Don't mention non-GNU package archives.
+
+2020-05-17  Stefan Kangas  <stefankangas@gmail.com>
+
+       Fix minor issues with mouse-drag-and-drop-region-show-tooltip
+
+       * lisp/mouse.el (mouse-drag-and-drop-region-show-tooltip): Fix
+       defcustom type to allow all valid values.  Suggested by David
+       Ponce.  (Bug#41351)
+       (mouse-drag-and-drop-region): Fix bug where setting
+       `drag-and-drop-region-show-tooltip' to 0 would still show a
+       tooltip.
+
+2020-05-17  Andrea Corallo  <akrl@sdf.org>
+
+       Fix bug#41346 assertion triggered while loading dump
+
+       * src/comp.c (load_comp_unit): While loading from dump lambda
+       fixups are still to happen here.  Verify relocation coherency only
+       after 'top_level_run' execution.
+
+2020-05-17  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Don’t attempt to modify constant strings
+
+       * lisp/bookmark.el (bookmark-bmenu-set-header):
+       Use copy-sequence instead of concat, for clarity.
+       Also, the byte-compiler optimizes (concat "a" "b") into "ab".
+       * lisp/button.el (make-text-button):
+       * test/lisp/erc/erc-track-tests.el (erc-track--erc-faces-in):
+       * test/lisp/password-cache-tests.el:
+       (password-cache-tests-add-and-remove)
+       (password-cache-tests-read-from-cache)
+       (password-cache-tests-in-cache-p, password-cache-tests-read)
+       (password-cache-tests-reset)
+       (password-cache-tests-add/expires-key)
+       (password-cache-tests-no-password-cache):
+       Don’t attempt to modify constant strings.
+       * lisp/progmodes/elisp-mode.el (elisp--xref-format)
+       (elisp--xref-format-extra):
+       Don’t attempt to modify constant strings via put-text-property.
+       * test/lisp/emacs-lisp/cl-macs-tests.el (cl-macs-loop-across-ref):
+       Don’t attempt to modify constant vectors or strings.
+
+2020-05-17  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Don’t attempt to modify constant conses
+
+       From a patch privately suggested by Mattias Engdegård on 2020-05-11
+       in a followup to Bug#40671.
+       * admin/charsets/cp51932.awk:
+       * admin/charsets/eucjp-ms.awk:
+       Generate code that does not modify constant conses.
+       * doc/misc/emacs-mime.texi (Encoding Customization):
+       * lisp/emacs-lisp/byte-opt.el (byte-compile-side-effect-free-ops):
+       * lisp/frameset.el (frameset-persistent-filter-alist):
+       * lisp/gnus/gnus-sum.el (gnus-article-mode-line-format-alist):
+       Use append instead of nconc.
+       * lisp/language/japanese.el (japanese-ucs-cp932-to-jis-map)
+       (jisx0213-to-unicode):
+       Use mapcar instead of mapc.
+       * lisp/language/lao-util.el (lao-transcription-consonant-alist)
+       (lao-transcription-vowel-alist):
+       * lisp/language/tibetan.el (tibetan-subjoined-transcription-alist):
+       Use copy-sequence.
+       * test/src/fns-tests.el (fns-tests-nreverse):
+       (fns-tests-sort, fns-tests-collate-sort)
+       (fns-tests-string-version-lessp, fns-tests-mapcan):
+       Use copy-sequence, vector, and list.
+
+2020-05-16  John Wiegley  <johnw@newartisans.com>
+
+       Add a note to eshell.texi that I, too, was a contributor
+
+2020-05-16  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       b4937f64cd (origin/emacs-27) Improve documentation of manually 
install...
+       efd4e973a4 Reflect the emacs-devel ELPA/MELPA dispute in FAQ
+       28541674cd Consider face inheritance when checking region face backgr...
+       e75f6be6cc Fix dired default file operation (bug#41261)
+       406fb0746c Fix documentation related to 'command-switch-alist'.
+       747e0a2523 Improve ediff readability in misterioso theme (Bug#41221)
+       48830c73e7 Fix a crash in handle_display_spec
+       a37290a6f9 In x_hide_tip reset tip_last_frame for GTK+ tooltips only ...
+       3d81995692 Fix docstring of flymake-make-diagnostic (bug#40351)
+       632aa9d57a Go back to “Bahá’í”
+       e2406ff60f * lisp/dired.el (dired-toggle-marks): Doc fix.  (Bug#41097)
+
+       # Conflicts:
+       #       doc/emacs/building.texi
+
+2020-05-16  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove stale comments
+
+       * lisp/printing.el (pr-create-interface):
+       * lisp/progmodes/ebnf2ps.el (ebnf-eps-filename, ebnf-trim-right):
+       Remove old comments about Emacs 21/22 compatibility.
+
+2020-05-16  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove some compat code from CEDET
+
+       * lisp/cedet/data-debug.el (data-debug-overlay-properties)
+       (data-debug-overlay-p, dd-propertize):
+       Redefine as obsolete function aliases.
+       (data-debug-insert-overlay-props, data-debug-insert-hash-table)
+       (data-debug-insert-hash-table-button)
+       (data-debug-insert-widget-properties, data-debug-insert-widget)
+       (data-debug-insert-symbol-from-point)
+       (data-debug-insert-symbol-button, data-debug-insert-string)
+       (data-debug-insert-number, data-debug-thing-alist):
+       Don't use obsolete names.
+
+2020-05-16  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove Emacs 22 compat code from abbrev.el
+
+       * lisp/abbrev.el (write-abbrev-file): Remove Emacs 22
+       compatibility code.
+
+2020-05-16  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove Emacs 22 compat code from ediff-vers.el
+
+       * lisp/vc/ediff-vers.el (ediff-vc-revision-other-window)
+       (ediff-vc-working-revision): Redefine Emacs 22 compatibility
+       aliases as obsolete function aliases.
+       (ediff-vc-internal, ediff-vc-merge-internal): Don't use the now
+       obsolete aliases.
+
+2020-05-16  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove some XEmacs compat code from semantic
+
+       * lisp/cedet/semantic/wisent/comp.el (wisent-ISVALID-TOKEN)
+       (wisent-parse-nonterminals):
+       * lisp/cedet/semantic/wisent/wisent.el
+       (wisent-item-to-string): Remove XEmacs compatibility code.
+       (wisent-char-p): Redefine as obsolete function alias for
+       'characterp'.
+
+2020-05-16  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/textmodes/bibtex.el: Fix bug#41285 (paren typo)
+
+2020-05-16  Michael Albinus  <michael.albinus@gmx.de>
+
+       Introduce process-file-return-signal-string
+
+       * doc/lispref/processes.texi (Synchronous Processes):
+       Describe `process-file-return-signal-string'.
+
+       * doc/misc/tramp.texi: Adapt Tramp and Emacs version numbers.
+       (Remote processes): Describe `process-file-return-signal-string'
+       and $INSIDE_EMACS.
+
+       * etc/NEWS: Describe `process-file-return-signal-string'.  Fix typos.
+
+       * lisp/simple.el (process-file-return-signal-string): New user option.
+
+       * lisp/net/tramp-adb.el (tramp-adb-handle-process-file):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-process-file): Use it.
+
+       * lisp/net/tramp.el (tramp-get-signal-strings): New defun.
+
+       * test/lisp/net/tramp-tests.el (tramp-test28-process-file): Adapt test.
+
+2020-05-15  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/project.el (project-try-vc): Fix regexp typo.
+
+2020-05-15  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Fix submodules, second try
+
+       * lisp/progmodes/project.el (project-try-vc):
+       Call the backend directly instead of binding default-directory.
+
+2020-05-15  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: Fix bug #40052, where a very large macro was too slow in 
scrolling
+
+       * lisp/progmodes/cc-engine.el (c-end-of-macro): Fix faulty cache 
handling,
+       where the upper bound of c-macro-cache was never being set.
+       (c-forward-comment-minus-1): New macro which terminates unwanted 
indefinite
+       backward searching with lots of escaped newlines in 
c-backward-single-comment.
+       (c-backward-single-comment, c-backward-comments): Use the new macro 
above.
+
+       * lisp/progmodes/cc-mode.el (c-before-change-check-unbalanced-strings)
+       (c-after-change-mark-abnormal-strings, 
c-after-change-escape-NL-in-string):
+       Optimize three regexps by using shy groups, thus preventing regexp stack
+       overflow while handling the large C Macro.
+
+2020-05-15  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Fix Git submodules detection breakage
+
+       * lisp/progmodes/project.el (project-try-vc):
+       Use the absolute name of .git both times.
+
+2020-05-15  Andrea Corallo  <akrl@sdf.org>
+
+       Do not refuse to compile if a dynamic lambda is encountered
+
+       * lisp/emacs-lisp/comp.el (comp-lex-byte-func-p): New subst.
+       (comp-intern-func-in-ctxt): Do not crash if we still encounter a
+       non lexical scoped lambda.
+
+2020-05-15  Andrea Corallo  <akrl@sdf.org>
+
+       Allow for logging async compilation command line
+
+       * lisp/emacs-lisp/comp.el (comp-run-async-workers): When non zero
+       verbose log async compilation command line invocation.
+
+2020-05-15  Andrea Corallo  <akrl@sdf.org>
+
+       Add check_comp_unit_relocs
+
+       * src/comp.c (check_comp_unit_relocs): Add function to verify
+       relocation coherency.
+       (load_comp_unit): Call it.
+
+2020-05-15  Andrea Corallo  <akrl@sdf.org>
+
+       Sanity check on lambdas fixups
+
+       * src/pdumper.c (dump_do_dump_relocation): While fixing up lambda
+       relocation verify placeholder coherency.
+
+       * src/comp.c (syms_of_comp): Define symbol 'lambda-fixup'.
+
+       * lisp/emacs-lisp/comp.el (comp-finalize-container): Leave a
+       lambda-fixup as placeholder in the relocation as a sanity check.
+
+2020-05-15  Andrea Corallo  <akrl@sdf.org>
+
+       Fix speed 2 bootstrap
+
+       (comp-call-optim-func): Do nothing if the function name is
+       unknown.
+
+2020-05-15  Andrea Corallo  <akrl@sdf.org>
+
+       Native compiler test update
+
+       * test/src/comp-tests.el (comp-tests-lambda-return): Add a test
+       verifying that the returned lambda is actually native compiled.
+
+2020-05-15  Andrea Corallo  <akrl@sdf.org>
+
+       Better Vcomp_sym_subr_c_name_h test function + doc
+
+       * src/comp.c (syms_of_comp): 'Vcomp_sym_subr_c_name_h' need only
+       'eq' as test + fix doc for 'comp-sym-subr-c-name-h'.
+
+2020-05-15  Andrea Corallo  <akrl@sdf.org>
+
+       Add anonymous lambdas reload mechanism
+
+       * src/pdumper.c (dump_do_dump_relocation): Initialize
+       'lambda_gc_guard' while resurrecting.
+       (dump_do_dump_relocation): Revive lambdas and fixup them.
+
+       * src/comp.h (struct Lisp_Native_Comp_Unit): Define new
+       'lambda_gc_guard' 'lambda_c_name_idx_h' 'data_imp_relocs'
+       'loaded_once' fields.
+
+       * src/comp.c (load_comp_unit): Use compilaiton unit 'loaded_once'
+       field.
+       (make_subr, Fcomp__register_lambda): New functions.
+       (Fcomp__register_subr): Make use of 'make_subr'.
+       (Fnative_elisp_load): Indent.
+       (Fnative_elisp_load): Initialize 'lambda_gc_guard'
+       'lambda_c_name_idx_h' fields.
+       (syms_of_comp): Add Scomp__register_lambda.
+
+       * lisp/emacs-lisp/comp.el (comp-ctxt): Change
+       'byte-func-to-func-h' hash key test.
+       (comp-ctxt): Add 'lambda-fixups-h' slot.
+       (comp-emit-lambda-for-top-level): New function.
+       (comp-finalize-relocs): Never emit lambdas in pure space.
+       (comp-finalize-relocs): Fixup relocation indexes.
+
+2020-05-15  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/xref.el: Fix first line syntax
+
+       (xref--find-ignores-arguments): Simplify.
+
+2020-05-15  Simen Heggestøyl  <simenheg@gmail.com>
+
+       Use lexical-binding in autoconf.el and add tests
+
+       * lisp/progmodes/autoconf.el: Use lexical-binding.
+
+       * test/lisp/progmodes/autoconf-tests.el: New file with tests for
+       autoconf.el.
+
+2020-05-15  Mattias Engdegård  <mattiase@acm.org>
+
+       Calc: GCD(0,x)=GCD(x,0)=|x|, not x (bug#41279)
+
+       Reported by David Ongaro.
+
+       * lisp/calc/calc-comb.el (calcFunc-gcd): Fix GCD simplification.
+       * test/lisp/calc/calc-tests.el (calc-gcd, calc-sum-gcd): New tests.
+
+2020-05-15  Stefan Kangas  <stefankangas@gmail.com>
+
+       Delete libraries obsolete since 23.1 and 23.2
+
+       Emacs 23.2 was released 10 years ago.  old-whitespace.el has a
+       replacement in whitespace.el and is no longer relevant.  The other
+       libraries implement compatibility with Lucid Emacs, a modified version
+       of Emacs last released in the 1990s.
+
+       * lisp/obsolete/ledit.el:
+       * lisp/obsolete/lmenu.el:
+       * lisp/obsolete/lucid.el:
+       * lisp/obsolete/old-whitespace.el: Delete files.  These libraries have
+       been obsolete since Emacs 23.1 or 23.2.
+       * etc/NEWS: Announce their deletion.
+
+       * admin/authors.el (authors-ignored-files)
+       (authors-fixed-entries, authors-valid-file-names):
+       * lisp/emulation/viper.el (viper-mode):
+       * lisp/ffap.el (ffap-menu-ask): Remove references to deleted files.
+
+2020-05-15  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Improve detection of Git submodules
+
+       * lisp/progmodes/project.el (project-try-vc):
+       Improve detection of Git submodules
+       (https://lists.gnu.org/archive/html/emacs-devel/2020-05/msg02008.html).
+
+2020-05-14  Andrea Corallo  <akrl@sdf.org>
+
+       Render all immediates as comments at comp-debug > 2
+
+       * src/comp.c (emit_mvar_rval): No reason to emit only fixnums.
+
+2020-05-14  Andrea Corallo  <akrl@sdf.org>
+
+       Dump log and intemediate GCC IRs only at comp-debug 3
+
+       * src/comp.c (Fcomp__init_ctxt): Increase threshold for dumping
+       really everything to 'comp-debug' 3.
+
+2020-05-14  Andrea Corallo  <akrl@sdf.org>
+
+       Prune now unnecessary byte-code objects
+
+       * lisp/emacs-lisp/comp.el (comp-finalize-container): Prune
+       byte-code that was lambdas.
+       (comp-compile-ctxt-to-file): Remove fixme.
+
+2020-05-14  Andrea Corallo  <akrl@sdf.org>
+
+       Rework comp-spill-lap-function
+
+       * lisp/emacs-lisp/comp.el (comp-spill-lap-function): Move code
+       from to comp-intern-func-in-ctxt.
+       (comp-intern-func-in-ctxt): New function, this guard
+       in case byte-to-native-lambda-byte-func is nil.
+
+2020-05-14  Andrea Corallo  <akrl@sdf.org>
+
+       Split emit_const_lisp_obj logic
+
+       * src/comp.c (emit_lisp_obj_reloc_lval): New function.
+       (emit_const_lisp_obj): Rename into 'emit_lisp_obj_rval' and strip
+       logic for 'emit_lisp_obj_reloc_lval'.
+       (emit_NILP, emit_CHECK_CONS, emit_mvar_rval, emit_set_internal)
+       (define_CAR_CDR, define_bool_to_lisp_obj): Update for
+       'emit_const_lisp_obj' being renamed.
+
+2020-05-14  Andrea Corallo  <akrl@sdf.org>
+
+       Rename emit_mvar_access -> emit_mvar_lval
+
+       * src/comp.c (emit_mvar_access): Rename into 'emit_mvar_lval'.
+       (emit_mvar_rval, emit_frame_assignment): Update for
+       'emit_mvar_access' rename.
+
+2020-05-14  Andrea Corallo  <akrl@sdf.org>
+
+       Rename emit_mvar_val -> emit_mvar_rval
+
+       * src/comp.c (emit_mvar_val): Rename into 'emit_mvar_rval'.
+       (emit_set_internal, emit_simple_limple_call, emit_limple_insn)
+       (emit_call_with_type_hint, emit_call2_with_type_hint)
+       (emit_consp, emit_numperp, emit_integerp): Update for
+       'emit_mvar_val' rename.
+
+2020-05-14  Andrea Corallo  <akrl@sdf.org>
+
+       Indentation fix
+
+       * src/comp.c (Fcomp__init_ctxt, Fcomp__release_ctxt)
+       (Fcomp__compile_ctxt_to_file, Fcomp__register_subr): Indentation
+       fix.
+
+2020-05-14  Andrea Corallo  <akrl@sdf.org>
+
+       Update spill LAP machinery and compile anonymous lambdas
+
+       * lisp/emacs-lisp/comp.el (comp-spill-lap-function): Make use of
+       byte-to-native-lambdas-h and update for 'byte-to-native-func-def'.
+       (comp-spill-lap-function): Rework logic to retrieve LAP using
+       'byte-to-native-lambdas-h'.
+       (comp-emit-for-top-level): Update for 'byte-to-native-function'.
+
+       * lisp/emacs-lisp/bytecomp.el: Add commentary on new spill LAP
+       mechanism.
+       (byte-to-native-lambda, byte-to-native-func-def): New structures.
+       (byte-to-native-top-level): Indent.
+       (byte-to-native-lambdas-h): Update doc.
+       (byte-compile-lapcode): Add a 'byte-to-native-lambda' instance
+       into byte-to-native-lambdas-h instead of just LAP.
+       (byte-compile-file-form-defmumble): Store into
+       'byte-to-native-func-def' only the byte compiled function, the LAP
+       will be retrieved through 'byte-to-native-lambdas-h'.
+       (byte-compile-lambda): Return the byte compiled function.
+
+2020-05-14  Tino Calancha  <tino.calancha@gmail.com>
+
+       Combine archive-int-to-mode and tar-grind-file-mode
+
+       Add a new function, file-modes-number-to-symbolic.
+       Make archive-int-to-mode and obsolete alias of it; use it
+       to define tar-grind-file-mode (Bug#27952).
+
+       * lisp/files.el (file-modes-number-to-symbolic): New defun.
+       * lisp/arc-mode.el (archive-int-to-mode): Make it an obsolete alias.
+       * lisp/tar-mode.el (tar-grind-file-mode):
+       Use file-modes-number-to-symbolic.
+
+       * test/lisp/arc-mode-tests.el (arc-mode-test-archive-int-to-mode)
+       * test/lisp/tar-mode-tests.el (tar-mode-test-tar-grind-file-mode):
+       Update test.
+
+       * test/lisp/files-tests.el (files-tests-file-modes-symbolic-to-number)
+       (files-tests-file-modes-number-to-symbolic): New tests.
+
+       * doc/lispref/files.texi (Changing Files): Document the new function.
+       * etc/NEWS (Lisp Changes in Emacs 28.1): Announce it.
+
+2020-05-14  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix customisation of mouse-drag-and-drop-region (bug#41251)
+
+       Reported by David Ponce.
+
+       * lisp/mouse.el (mouse-drag-and-drop-region): Add missing unquote.
+
+2020-05-14  Mattias Engdegård  <mattiase@acm.org>
+
+       Calc: fix LU decomposition for non-numeric matrices (bug#41223)
+
+       Computing determinant and inverse for on some matrices containing
+       non-numeric elements failed or gave the wrong result.
+       Reported by Mauro Aranda.
+
+       * lisp/calc/calc-mtx.el (math-do-matrix-lud): Don't use zero as pivot.
+       * test/lisp/calc/calc-tests.el (calc-matrix-determinant): New test.
+
+2020-05-14  Andrea Corallo  <akrl@sdf.org>
+
+       * test/src/comp-tests.el (comp-tests-bootstrap): Fix test.
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-05-13  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix some oddities, uncovered by Tramp tests
+
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-enabled): Prevent crash for
+       older Emacsen.
+
+       * lisp/net/tramp.el (tramp-process-running-p): Simplify.
+
+       * test/lisp/net/tramp-tests.el (tramp-test28-process-file): Adapt test.
+       (tramp-test33-environment-variables): Unset "INSIDE_EMACS" initially.
+
+2020-05-13  João Távora  <joaotavora@gmail.com>
+
+       Turn Eldoc, Xref and Project into GNU ELPA :core packages
+
+       The new packages state they require Emacs 26.3 to function, but a
+       small part of project.el breaks this "soft" rule: the two functions
+       requiring fileloop.el are incompatible with Emacs 26.3.
+
+       * lisp/jsonrpc.el: Tweak comment near Package-Requires.
+
+       * lisp/emacs-lisp/eldoc.el: Add Version and Package-Requires.
+
+       * lisp/progmodes/flymake.el: Add comment near Package-Requires.
+
+       * lisp/progmodes/project.el: Add Version and Package-Requires.
+
+       * lisp/progmodes/xref.el: Add Version and Package-Requires.
+
+2020-05-13  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in t-mouse.el
+
+       * lisp/t-mouse.el: Use lexical-binding.
+
+2020-05-13  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in animate.el and add tests
+
+       * lisp/play/animate.el: Use lexical-binding.
+       * test/lisp/play/animate-tests.el: New file.
+
+2020-05-13  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in dissociate.el and add tests
+
+       * lisp/play/dissociate.el: Use lexical-binding.
+       * test/lisp/play/dissociate-tests.el: New file.
+
+2020-05-13  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in cal-julian.el and add tests
+
+       * lisp/calendar/cal-julian.el: Use lexical-binding.
+       * test/lisp/calendar/cal-julian-tests.el: New file.
+
+2020-05-13  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Use proper digraphs in Bahá’í month names
+
+       * lisp/calendar/cal-bahai.el (calendar-bahai-month-name-array):
+       There doesn’t seem to be any disagreement in the sources I
+       consulted that “Mas͟híyyat” and “S͟haraf” both need an “s͟h” digraph
+       instead of plain “sh”.
+
+2020-05-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/syntax.el: Fix bug#41195
+
+       Allow use of `syntax-ppss-flush-cache` in `syntax-propertize-function`.
+
+       (syntax-propertize--inhibit-flush): New var.
+       (syntax-propertize): Bind it.
+       (syntax-ppss-flush-cache): Test it.
+
+2020-05-12  Michael Heerdegen  <michael_heerdegen@web.de>
+
+       Revert "Inhibit modification hooks when saving eieio-persistent's"
+
+       This reverts commit c59e878439833d89998e03134ee9060f9c449fd9.
+
+2020-05-12  Stefan Kangas  <stefankangas@gmail.com>
+
+       Support sorting timer-list-mode by column (Bug#40854)
+
+       * lisp/emacs-lisp/timer-list.el (timer-list-mode)
+       (timer-list--idle-predicate, timer-list--next-predicate)
+       (timer-list--repeat-predicate)
+       (timer-list--function-predicate): Add support for sorting by column.
+
+2020-05-12  Stefan Kangas  <stefankangas@gmail.com>
+
+       Base timer-list-mode on tabulated-list-mode (Bug#40854)
+
+       * lisp/emacs-lisp/timer-list.el (list-timers)
+       (timer-list-mode): Inherit from 'tabulated-list-mode' instead of
+       'special-mode' and make the necessary changes to support that.
+
+       * doc/lispref/os.texi (Timers): Update documentation.
+
+2020-05-12  Glenn Morris  <rgm@gnu.org>
+
+       Suppress test failure on hydra.nixos.org
+
+       * test/lisp/net/tramp-tests.el (tramp-test28-process-file):
+       Attempt to suppress hydra oddity.
+
+2020-05-12  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Pacify GCC 10.1.0
+
+       Pacify GCC 10.1.0 so that it does not issue false alarms
+       when Emacs is configured with --enable-gcc-warnings.
+       * src/dispnew.c (clear_glyph_row):
+       * src/fns.c (hash_clear):
+       * src/keyboard.c (append_tab_bar_item):
+       * src/lisp.h (vcopy):
+       * src/xfaces.c (get_lface_attributes_no_remap)
+       (Finternal_copy_lisp_face, realize_default_face):
+       * src/xmenu.c (set_frame_menubar):
+       Work around -Warray-bounds false alarm in GCC 10.1.0.
+       * src/intervals.c (copy_properties):
+       Avoid -Wnull-dereference false alarm in GCC 10.1.0.
+       * src/lisp.h (xvector_contents_addr, xvector_contents):
+       New functions, useful for working around GCC bug 95072.
+
+2020-05-12  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from gnulib
+
+       This incorporates:
+       2020-05-11 careadlinkat: fix GCC 10 workaround
+       2020-05-10 careadlinkat: limit GCC workaround
+       2020-05-10 attribute: clarify list of attributes
+       2020-05-10 string: fix compilation error in C++ mode
+       2020-05-09 manywarnings: port to GCC 10.1
+       2020-05-09 careadlinkat: pacify -Wreturn-local-addr
+       2020-05-09 attribute: remove ATTRIBUTE_DEPRECATED
+       2020-05-09 attribute: Add comments
+       * lib/attribute.h, lib/careadlinkat.c, lib/string.in.h:
+       * lib/warn-on-use.h, m4/manywarnings.m4: Copy from Gnulib.
+
+2020-05-11  Alan Mackenzie  <acm@muc.de>
+
+       Fix bug #40992 whilst still allowing breakpoint highlights in edebug
+
+       Strategy: when an instrumented function gets re-evaluated, save the 
former
+       value of its symbol's `edebug' property in the new propery 
`ghost-edebug'.  If
+       this function is still being edebugged, edebug will then access its 
info from
+       this new property.
+
+       Also fix the bug whereby compile-defun'ing an instrumented function 
prevents
+       the function being re-instrumented by I (edebug-instrument-callee).
+
+       * lisp/emacs-lisp/edebug.el (edebug-get-edebug-or-ghost): New function.
+       (edebug-read-and-maybe-wrap-form1): save value of `edebug' property in
+       'ghost-edebug'.
+       (edebug-make-form-wrapper): Set value of `ghost-edebug' to nil.
+       (edebug-make-form-wrapper, edebug-find-stop-point, 
edebug-next-break-point)
+       (edebug-modify-breakpoint, edebug--overlay-breakpoints, 
edebug-set-breakpoint)
+       (edebug-unset-breakpoints, edebug-toggle-disable-breakpoint)
+       (edebug--backtrace-goto-source, edebug-display-freq-count)
+       (edebug-set-conditional-breakpoint): Use edebug-get-edebug-or-ghost to 
access
+       edebug information.
+       (edebug-instrument-function): Also check a function is a cons before 
declaring
+       it "already instrumented".
+
+2020-05-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/pcase.el (pcase--fgrep): Look inside vectors
+
+2020-05-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/textmodes/bibtex.el: Avoid `eval`
+
+       In the top-level construction of the entry-type commands,
+       use `defalias` instead of (eval `(defun ...)).
+
+       (bibtex-insert-kill): Strength reduce `eval` => `symbol-value`.
+       (bibtex-autokey-before-presentation-function): Avoid nil value.
+
+2020-05-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/subr.el (dolist, dotimes, combine-change-calls): Cosmetic tweaks
+
+       (dolist, dotimes): Adjust comment since testing
+       `lexical-binding` is supposed to be reliable.
+       (combine-change-calls): Add debug and indent specs.
+
+2020-05-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/syntax.el (syntax-propertize): Use run-hook-wrapped
+
+       This way we avoid making assumptions about the content of
+       syntax-propertize-extend-region-functions
+
+2020-05-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/ielm.el: Handle corner case where */**/*** are not yet bound
+
+       Remote redundant :group args.
+
+       (ielm-eval-input): Use bound-and-true-p for */**/***
+
+2020-05-11  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Map "mail/compose" icon to "mail-message-new" in GTK
+
+       * lisp/term/x-win.el (x-gtk-stock-map): One more icon mapping.
+
+2020-05-11  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Use the "modern" toolbars in Gnus again
+
+       * lisp/gnus/gmm-utils.el (gmm-tool-bar-style):
+       Undo the breakage from commit d88118db37dd
+       (https://lists.gnu.org/archive/html/emacs-devel/2020-04/msg02094.html).
+
+2020-05-11  Dmitry Gutov  <dgutov@yandex.ru>
+
+       Use better icons on GTK in message-mode and isearch
+
+       * lisp/gnus/message.el (message-tool-bar-retro):
+       Use non-Gnus-specific icon.
+
+       * lisp/term/x-win.el (x-gtk-stock-map):
+       Use more themed icons (bug#40990).
+
+2020-05-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/pcase.el: Don't bind unused vars in branches
+
+       (pcase--fgrep): Change calling convention to take bindings rather than
+       just variables.
+       (pcase--funcall, pcase--eval): Adjust to this new calling convention.
+       (pcase--expand): Use `pcase--fgrep` to bind only the vars that are used.
+
+2020-05-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/eieio.el (eieio pcase macro): Fix last-minute typo
+
+2020-05-10  Tassilo Horn  <tsdh@gnu.org>
+
+       Prefer function-put over put for setting browse-url-browser-kind.
+
+       * lisp/net/browse-url.el: Prefer `function-put' over `put' for setting
+       `browse-url-browser-kind' symbol property.
+
+2020-05-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/eieio.el (eieio pcase macro): Remove unused var `is`
+
+2020-05-10  Simen Heggestøyl  <simenheg@gmail.com>
+
+       Use lexical-binding in glasses.el and add tests
+
+       * lisp/progmodes/glasses.el: Use lexical-binding.
+       (glasses-separator, glasses-original-separator, glasses-face)
+       (glasses-separate-parentheses-p)
+       (glasses-separate-parentheses-exceptions)
+       (glasses-separate-capital-groups, glasses-uncapitalize-p)
+       (glasses-uncapitalize-regexp, glasses-convert-on-write-p): Remove
+       redundant :group args.
+
+       * test/lisp/progmodes/glasses-tests.el: New file with tests for
+       glasses.el.
+
+2020-05-10  Simen Heggestøyl  <simenheg@gmail.com>
+
+       Allow underscores in CSS variable names
+
+       * lisp/textmodes/css-mode.el (css-nmchar-re): Allow underscores in
+       variable names (and in identifiers in general).
+
+       * test/manual/indent/css-mode.css: Add some examples of variable names
+       with underscores in them.
+
+       * test/manual/indent/less-css-mode.less: Add some examples of variable
+       names with underscores in them.
+
+       * test/manual/indent/scss-mode.scss: Add some examples of variable
+       names with underscores in them.
+
+2020-05-10  Simen Heggestøyl  <simenheg@gmail.com>
+
+       Add containment module to CSS property list
+
+       * lisp/textmodes/css-mode.el (css-property-alist): Add new properties
+       from CSS Containment Module Level 1.
+
+2020-05-10  Simen Heggestøyl  <simenheg@gmail.com>
+
+       Add writing modes module to CSS property list
+
+       * lisp/textmodes/css-mode.el (css-property-alist): Add new properties
+       from the CSS Writing Modes Level 3 module.
+
+2020-05-10  Andrea Corallo  <akrl@sdf.org>
+
+       Fix `comp-deferred-compilation-black-list' effectiveness
+
+       * lisp/emacs-lisp/comp.el (native-compile-async): Fix logic for
+       'comp-deferred-compilation-black-list' effectiveness.
+
+2020-05-10  Andrea Corallo  <akrl@sdf.org>
+
+       * src/comp.c (load_comp_unit): Style fix.
+
+2020-05-09  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-05-09  Andrea Corallo  <akrl@sdf.org>
+
+       Fix --enable-check-lisp-object-type GNU/Linux X86_64 build
+
+       * src/comp.c (emit_mvar_val): Fix missing use of XLP macro.
+       (load_comp_unit): Fix missing use of NILP macro.
+
+2020-05-09  Simen Heggestøyl  <simenheg@gmail.com>
+
+       Use lexical-binding in help-mode.el and add tests
+
+       * lisp/help-mode.el: Use lexical-binding.
+       (help-mode-map, help-mode-menu, help-mode-setup)
+       (help-mode-finish): Make spelling of "Help mode" consistent throughout
+       the doc strings (also making it consistent with the spelling of "Help
+       mode" used in the Elisp manual).
+       (help-do-xref): Re-indent to make the else-branch easier to see.
+
+       * test/lisp/help-mode-tests.el: New file with tests for help-mode.el.
+
+2020-05-09  Glenn Morris  <rgm@gnu.org>
+
+       * src/xdisp.c (Fwindow_text_pixel_size): Fix previous merge.
+
+2020-05-09  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       be0d1cac83 (origin/emacs-27) Small fix for type of 'display-fill-colu...
+       c5e5839776 Fix customization of 'display-fill-column-indicator-charac...
+       d5c184aa3e Refer to fill column indicator Info node in some places.
+       e13300ae50 Merge branch 'emacs-27' of git.sv.gnu.org:/srv/git/emacs i...
+       0bae57033f Fix GTK's Tool Bar menu radio buttons
+       4c98aa7ea5 Minor clarifications in NEWS
+       a1cbd05f38 Improve documentation of 'with-suppressed-warnings'.
+       4a895c1b26 Fix a typo in a comment
+       2caf3e997e Improve documentation of Hi Lock mode
+       7081c1d66f Fix typos in the Emacs user manual
+       0385771e2f Fix references to Speedbar in VHDL mode
+       a76cafea0d Fix handling of FROM = t and TO = t by 'window-text-pixel-...
+
+       # Conflicts:
+       #       etc/NEWS
+       #       src/xdisp.c
+
+2020-05-09  Pieter van Oostrum  <pieter@vanoostrum.org>
+
+       Add new filter command to Package Menu (Bug#39903)
+
+       * lisp/emacs-lisp/package.el
+       (package-menu-filter-marked): New filter command.
+       * test/lisp/emacs-lisp/package-tests.el
+       (package-test-list-filter-marked): New test.
+       (package-menu-mode-menu):
+       (package-menu-mode-map): Update menu to include new filter command.
+
+       * doc/emacs/package.texi (Package Menu): Document the new command.
+       * etc/NEWS: Announce the new command.
+
+2020-05-09  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Improve nonnull checking with GCC in emacs-module
+
+       * src/emacs-module.h.in (EMACS_ATTRIBUTE_NONNULL):
+       Also do the nonnull check with GCC.  (The old code did the
+       check with Clang but not with GCC.)
+
+2020-05-09  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from Gnulib
+
+       This incorporates:
+       2020-05-09 stdio: don't redefine _GL_ATTRIBUTE_FORMAT
+       2020-05-09 dirent, stdlib, string: don't redefine _GL_ATTRIBUTE_PURE
+       2020-05-08 limits-h: define LONG_BIT correctly on Haiku/x86_64
+       2020-05-08 ignore-value tests: use module 'attribute'
+       2020-05-06 attribute: minor style fixes
+       * build-aux/config.sub, doc/misc/texinfo.tex, lib/attribute.h:
+       * lib/dirent.in.h, lib/limits.in.h, lib/stdio.in.h, lib/stdlib.in.h:
+       * lib/string.in.h, m4/gnulib-common.m4:
+       Copy from Gnulib.
+
+2020-05-09  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-05-09  Andrea Corallo  <akrl@sdf.org>
+
+       Add 'comp-deferred-compilation-black-list' customize
+
+       * lisp/emacs-lisp/comp.el (comp-deferred-compilation-black-list):
+       New customize.
+       (native-compile-async): Make use of
+       'comp-deferred-compilation-black-list'.
+
+2020-05-09  Michal Nazarewicz  <mina86@mina86.com>
+
+       cc-mode: extend regexp used by ‘c-or-c++-mode’
+
+       * lisp/progmodes/cc-mode.el (c-or-c++-mode--regexp): Expand the regexp 
to
+       match some more C++-only constructs and recognise a few more standard
+       C++ header files.  Also make sure identifiers start with non-digit.
+       (c-or-c++-mode): Add ‘(interactive)’ declaration.
+
+       * test/lisp/progmodes/cc-mode-tests.el (c-or-c++-mode): Add test case
+       for the newly recognised constructs.
+
+2020-05-09  Michal Nazarewicz  <mina86@mina86.com>
+
+       cc-mode: add ‘c-lineup-ternary-bodies’  (bug#41061)
+
+       Introduce ‘c-lineup-ternary-bodies’ function which, when used as
+       a c lineup function, aligns question mark and colon of a ternary
+       operator.  For example:
+
+           return arg % 2 == 0 ? arg / 2
+                               : (3 * arg + 1);
+
+       * lisp/progmodes/cc-align.el (c-lineup-ternary-bodies): New function.
+       * doc/misc/cc-mode.texi (Operator Line-Up Functions): Document the
+       new function.
+       * test/lisp/progmodes/cc-mode-tests.el (c-lineup-ternary-bodies): New
+       test case.
+
+2020-05-09  Clément Pit-Claudel  <clement.pitclaudel@live.com>
+
+       Only treat display strings as buttons if they have 'button' property
+
+       * lisp/button.el (push-button): Use 'posn-point' instead of
+       'posn-string' if the string doesn't have the 'button'
+       property (Bug#40859).
+
+2020-05-09  Federico Tedin  <federicotedin@gmail.com>
+
+       Prevent hanging in next-single-char-property-change
+
+       * src/textprop.c (Fnext_single_char_property_change): Clarify in
+       the doc string the behavior when LIMIT is past the end of OBJECT.
+       Stop the search when position gets to end of buffer, for when LIMIT
+       is beyond that.  (Bug#40000)
+
+2020-05-08  Tassilo Horn  <tsdh@gnu.org>
+
+       Fix reading kind argument in browse-url-with-browser-kind.
+
+       * lisp/net/browse-url.el (browse-url-with-browser-kind): Convert KIND
+       argument queried from the user to a symbol.
+
+2020-05-08  Tassilo Horn  <tsdh@gnu.org>
+
+       Allow predicates for matching in browse-url-handlers.
+
+       * lisp/net/browse-url.el (browse-url-handlers): Allow predicates for
+       matching in browse-url-handlers.  Adapt docs and customize type.
+       (browse-url-select-handler): Support predicates in addition to
+       regexes.
+       (browse-url--non-html-file-url-p): New defun.
+       (browse-url-default-handlers): Use above predicate entry instead of
+       two entries.
+
+2020-05-08  Zhu Zihao  <all_but_last@163.com>
+
+       Make pcase pattern 'eieio' respect slot access related functions.
+
+       * lisp/emacs-lisp/eieio.el: Make pcase pattern respect slot-missing and
+       slot-unbound
+
+2020-05-07  Tassilo Horn  <tsdh@gnu.org>
+
+       Allow browsing an URL explicitly with an internal or external browser.
+
+       * lisp/net/browse-url.el (browse-url-with-browser-kind): New command.
+
+2020-05-07  Tassilo Horn  <tsdh@gnu.org>
+
+       Categorize browse-url functions into internal and external ones.
+
+       * lisp/net/browse-url.el: Write package documentation explaining
+       browse-url-browser-kind symbol property.  Categorize existing
+       browse-url functions into internal and external ones.
+       (browse-url--browser-kind, browse-url--browser-kind-mailto)
+       (browse-url--browser-kind-man, browse-url--browser-kind-browser): New
+       functions.
+       (browse-url-select-handler): Add KIND argument to restrict selection.
+       * lisp/dnd.el (dnd-handle-one-url): Only select browse-url handler of
+       kind `internal'.
+       * lisp/net/eww.el (eww): Add `browse-url-browser-kind' symbol property
+       with value `internal'.
+
+2020-05-07  Noam Postavsky  <npostavs@gmail.com>
+
+       Don't increment array index in cl-loop twice (Bug#40727)
+
+       * lisp/emacs-lisp/cl-macs.el (cl--parse-loop-clause): Put the temp-idx
+       increment in cl--loop-body, leaving just the side-effect free testing
+       of the index for both cl--loop-body and cl--loop-conditions.
+       * test/lisp/emacs-lisp/cl-macs-tests.el (cl-macs-loop-and-arrays):
+       Extend test to cover this case.
+
+2020-05-07  Noam Postavsky  <npostavs@gmail.com>
+
+       Revert "cl-loop: Calculate the array length just once"
+
+       It fails when using 'and' (parallel bindings) for arrays (Bug#40727).
+       * lisp/emacs-lisp/cl-macs.el (cl--parse-loop-clause): Revert to
+       recomputing array length.
+       * test/lisp/emacs-lisp/cl-macs-tests.el (cl-macs-loop-and-arrays): New
+       test.
+
+2020-05-07  Tassilo Horn  <tsdh@gnu.org>
+
+       Fix browse-url (remove debugging leftover).
+
+       * lisp/net/browse-url.el (browse-url): Fix "No suitable browser for
+       URL" always popping up.
+
+2020-05-07  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-05-07  Andrea Corallo  <akrl@sdf.org>
+
+       Fix bug#41112
+
+       * lisp/emacs-lisp/comp.el (comp-jump-table-optimizable): New
+       function.
+       (comp-emit-switch): Make use of 'comp-jump-table-optimizable'.
+
+2020-05-07  Michael Albinus  <michael.albinus@gmx.de>
+
+       Handle signals in Tramp's process-file
+
+       * lisp/net/tramp-adb.el (tramp-adb-handle-process-file):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-process-file): Handle signals.
+
+       * test/lisp/net/tramp-tests.el (tramp-test28-process-file): Adapt test.
+
+2020-05-07  Tassilo Horn  <tsdh@gnu.org>
+
+       Refactor browse-url handler selection into separate function.
+
+       * lisp/net/browse-url.el (browse-url-select-handler): New function.
+       (browse-url): Use it.
+       * lisp/dnd.el (dnd-handle-one-url): Use it.
+
+2020-05-06  Tassilo Horn  <tsdh@gnu.org>
+
+       Restore HTML rendering behavior of browse-url-of-buffer/file.
+
+       * lisp/net/browse-url.el (browse-url-default-handlers): Add a browser
+       handler for HTML page file:// URLs before the generic file:// handler.
+       (browse-url--browser): New defun.
+
+2020-05-06  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-05-06  Andrea Corallo  <akrl@sdf.org>
+
+       Add native compilation unit black list
+
+       * lisp/emacs-lisp/comp.el (comp-bootstrap-black-list): New customize.
+       (batch-native-compile): Rework to make use of
+       'comp-bootstrap-black-list'.
+       (batch-byte-native-compile-for-bootstrap): Add assertion to make
+       logic assumption explicit.
+
+2020-05-06  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Pacify buggy old GCC with a cast
+
+       * src/bignum.h (bignum_integer): Pacify GCC 4.8.5.
+       Problem reported by Andreas Schwab in:
+       https://lists.gnu.org/r/emacs-devel/2020-05/msg00781.html
+
+2020-05-06  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       76516465bf (origin/emacs-27) * doc/emacs/modes.texi (Major Modes): Fi...
+       f8e6cd11b3 Fix docstring quoting
+
+2020-05-06  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       7be160d800 Improve "Help Summary" section in user manual
+       f6d6ccc984 Clarify message-sendmail-extra-arguments docstring
+       95fde1a851 * src/editfns.c (Fformat): Small documentation fix.
+
+2020-05-06  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       4b419083f9 Honor search-upper-case
+       310112fdc7 Fix eww-follow-link on URLs with #target
+
+       # Conflicts:
+       #       lisp/fileloop.el
+
+2020-05-06  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       f9fa726ced Improve doc strings of makunbound and fmakunbound
+
+2020-05-06  Tassilo Horn  <tsdh@gnu.org>
+
+       Consult browse-url-{default-,}handlers in drag&drop.
+
+       * lisp/dnd.el (dnd-handle-one-url): Consult `browse-url-handlers' and
+       `browse-url-default-handlers' for a matching handler.  Adapt
+       docstring.
+       * doc/lispref/frames.texi (Drag and Drop): Remove the docs for the
+       deprecated alist choice of `browse-url-browser-function' and mention
+       `browse-url-handlers' and `browse-url-default-handlers'.
+
+2020-05-06  Michael Albinus  <michael.albinus@gmx.de>
+
+       process-file in Tramp must return exit code (Bug#41099)
+
+       * lisp/net/tramp-adb.el (tramp-adb-send-command-and-check): Add optional
+       argument EXIT-STATUS.
+       (tramp-adb-handle-process-file): Use it.
+
+       * lisp/net/tramp-sh.el (tramp-send-command-and-check): Add optional
+       argument EXIT-STATUS.
+       (tramp-sh-handle-process-file): Use it.  (Bug#41099)
+
+       * test/lisp/net/tramp-tests.el (tramp-test28-process-file): Adapt test.
+
+2020-05-06  Tassilo Horn  <tsdh@gnu.org>
+
+       Allow for custom URL handlers in browse-url.
+
+       * lisp/net/browse-url.el (browse-url-handlers): New defcustom.
+       (browse-url-default-handlers): New defvar.
+       (browse-url): Use them.  Adapt docstring.  Issue a warning pointing to
+       browse-url-handlers when browse-url-browser-function is an alist.
+       (browse-url--mailto, browse-url--man): New functions.
+       (browse-url--browser-defcustom-type): Add :doc that the alist usage is
+       deprecated.
+       (browse-url-browser-function): Remove documentation referring to the
+       alist usage and mention browse-url-handlers.
+       * doc/emacs/misc.texi: Document browse-url-handlers in Browse-URL
+       node.
+       * etc/NEWS: Mention browse-url-default-handlers and
+       browse-url-handlers.
+
+2020-05-06  Stefan Kangas  <stefankangas@gmail.com>
+
+       Prefer 'strong' and 'em' to 'b' and 'i' in html-mode
+
+       * lisp/textmodes/sgml-mode.el (html-face-tag-alist): Prefer inserting
+       'strong' and 'em' tags to 'b' and 'i' in html-mode.  (Bug#41031)
+       * lisp/textmodes/sgml-mode.el (html-mode): Update docstring to do the
+       same.
+
+2020-05-06  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Don’t assume __has_attribute in emacs-module.c
+
+       Problem reported by Glenn Morris in:
+       https://lists.gnu.org/r/emacs-devel/2020-05/msg00724.html
+       * src/emacs-module.c: Use HAS_ATTRIBUTE instead of assuming
+       the compiler supports __has_attribute.
+
+2020-05-05  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Try and improve the *Help* layout for things like `diff-refine`.
+
+       * lisp/help-fns.el (describe-variable-custom-version-info): Follow the
+       usual format of other `help-fns-describe-variable-functions`.
+
+2020-05-05  Andrea Corallo  <akrl@sdf.org>
+
+       * configure.ac: Fix var usage + better messaging.
+
+2020-05-05  Andrea Corallo  <akrl@sdf.org>
+
+       * configure.ac: Better messaging when libgccjit fails smoke test
+
+       * configure.ac: Fix libgccjit test LDFLAGS plus better messaging
+       in case of its fail.
+
+2020-05-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix typos in recent attribute.h simplification
+
+       Problem reported by Andreas Schwab in:
+       https://lists.gnu.org/r/emacs-devel/2020-05/msg00650.html
+       * src/conf_post.h (HAS_ATTR_no_sanitize): Define to false in case
+       cpp is picky, fixing a longstanding glitch here.
+       (ATTRIBUTE_NO_SANITIZE_ADDRESS, ATTRIBUTE_NO_SANITIZE_UNDEFINED):
+       Use HAS_ATTRIBUTE, not __has_attribute.
+
+2020-05-04  Andrea Corallo  <akrl@sdf.org>
+
+       * configure.ac: Add a better libgccjit test plus some morw err message
+
+       * configure.ac (libgccjit_smoke_test, libgccjit_not_found)
+       (libgccjit_broken): New functions.
+
+2020-05-04  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-05-04  Michael Albinus  <michael.albinus@gmx.de>
+
+       Adapt Tramp tests
+
+       * test/lisp/net/tramp-tests.el (tramp-test33-environment-variables):
+       Adapt test.
+
+2020-05-04  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix setting of INSIDE_EMACS in Tramp
+
+       * lisp/net/tramp-sh.el (tramp-sh-handle-make-process)
+       (tramp-sh-handle-process-file, tramp-open-shell): Set proper
+       INSIDE_EMACS environment variable.
+
+2020-05-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Simplify by using attribute.h macros
+
+       attribute.h is partly designed for C2X forward compatibility,
+       since C2X will add some standard attributes.  Using its macros
+       should help insulate Emacs from C2X teething problems.
+       * src/conf_post.h: Include attribute.h.
+       (HAS_ATTRIBUTE, HAS_FEATURE): Rename from __has_attribute and
+       __has_feature, to avoid polluting the builtin namespace.
+       All uses changed.
+       (ATTRIBUTE_COLD, ATTRIBUTE_FORMAT, FALLTHROUGH, ATTRIBUTE_CONST)
+       (ATTRIBUTE_PURE, ATTRIBUTE_UNUSED, ATTRIBUTE_MAY_ALIAS)
+       (ATTRIBUTE_MALLOC, ATTRIBUTE_ALLOC_SIZE)
+       (ATTRIBUTE_RETURNS_NONNULL): Remove, as attribute.h does this now.
+       (NO_INLINE, EXTERNALLY_VISIBLE, ARG_NONNULL, ATTRIBUTE_UNUSED):
+       Simplify by defining in terms of attribute.h macros.
+       * src/systhread.h (ATTRIBUTE_WARN_UNUSED_RESULT): Remove.
+       All uses replaced by attribute.h’s NODISCARD.
+
+2020-05-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from Gnulib
+
+       This incorporates:
+       2020-05-03 attribute: new module
+       2020-04-13 explicit_bzero: improve code style
+       2020-04-13 explicit_bzero: On native Windows, use SecureZeroMemory
+       2020-04-13 explicit_bzero: use memset_s() when available
+       2020-04-04 maint: remove a stray inter-word space
+       * build-aux/config.guess, build-aux/config.sub:
+       * build-aux/gitlog-to-changelog, build-aux/update-copyright:
+       * doc/misc/texinfo.tex, lib/explicit_bzero.c, lib/ieee754.in.h:
+       * lib/nstrftime.c, m4/explicit_bzero.m4, m4/gnulib-common.m4:
+       Copy from Gnulib.
+       * lib/attribute.h: New file, copied from Gnulib.
+       * lib/gnulib.mk.in, m4/gnulib-comp.m4: Regenerate.
+
+2020-05-04  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/eieio.el (oset, oset-default): Mark as obsolete
+
+2020-05-03  Simen Heggestøyl  <simenheg@gmail.com>
+
+       Use lexical-binding in check-declare.el and add tests
+
+       * lisp/emacs-lisp/check-declare.el: Use lexical-binding.
+       (check-declare-warn): Silence byte compiler warning about unused
+       lexical argument.
+
+       * test/lisp/emacs-lisp/check-declare-tests.el: New file with tests
+       for check-declare.el.
+
+2020-05-03  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix calculator division truncation (bug#40892)
+
+       * lisp/calculator.el (calculator-string-to-number): Convert decimal
+       numbers input to float, fixing a regression introduced in f248292ede.
+       Reported by Aitor Soroa.
+
+2020-05-03  Alan Third  <alan@idiocy.org>
+
+       Fix initial frame resizing issue on NS (bug#40200)
+
+       * src/nsterm.m ([EmacsView viewDidResize:]): Don't try to determine
+       the old size when not drawing to the buffer.
+
+2020-05-03  Michal Nazarewicz  <mina86@mina86.com>
+
+       cc-mode: document Doxygen ‘c-doc-comment-style’  (bug#40877)
+
+       * doc/misc/cc-mode.texi (Documentation Comments): mention Doxygen 
markup.
+
+2020-05-03  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       0a3731feef Make memq etc. examples more like they were
+       ed25282b82 Document effect of 'search-upper-case' on replacement comm...
+       5a5d8a8ec0 * lisp/desktop.el (desktop-save): Doc fix.  (Bug#41007)
+
+2020-05-03  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       1d477a0fec Recommend to avoid unnecessary abbreviations in doc
+       aea1b4db72 Revert "Fix calculator division truncation (bug#40892)"
+
+2020-05-03  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       1f17193e00 Expand file name for remote dirs as well
+       7a12ab5ea2 Fix project.el commands in "transient" projects
+       274ec97e3c Make sure alist-related functions say so in their doc
+
+2020-05-03  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove redundant :groups args missed in last commit
+
+       * lisp/emacs-lisp/cl-indent.el (lisp-lambda-list-keyword-alignment)
+       (lisp-lambda-list-keyword-parameter-indentation)
+       (lisp-lambda-list-keyword-parameter-alignment)
+       (lisp-indent-backquote-substitution-mode): Remove redundant :group args.
+
+2020-05-03  Stefan Kangas  <stefankangas@gmail.com>
+
+       Improve indentation of 'loop' forms
+
+       * lisp/emacs-lisp/cl-indent.el (lisp-loop-keyword-indentation)
+       (lisp-loop-forms-indentation, lisp-simple-loop-indentation): Use a
+       more standard indentation of 'loop' forms.  (Bug#2160)
+
+       (lisp-indent-maximum-backtracking, lisp-tag-indentation)
+       (lisp-tag-body-indentation, lisp-backquote-indentation)
+       (lisp-loop-keyword-indentation, lisp-loop-forms-indentation)
+       (lisp-simple-loop-indentation): Remove redundant :group args.
+
+2020-05-03  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in w32-vars.el
+
+       * lisp/w32-vars.el: Use lexical-binding.
+       (w32-use-w32-font-dialog, w32-allow-system-shell
+       (w32-system-shells, w32-fixed-font-alist): Remove redundant :group
+       args.
+
+2020-05-03  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve accuracy of apropos commands that search doc strings
+
+       It is conceptually wrong for apropos commands that search doc
+       strings to look for matches of several words only on the same
+       line, because division of doc strings between lines is
+       ephemeral.
+       * lisp/apropos.el (apropos-parse-pattern): Accept an optional
+       argument MULTILINE-P, and if that is non-nil, produce regexps that
+       match words in the list even if they are separated by line
+       boundaries.
+       (apropos-value, apropos-local-value, apropos-documentation): Use
+       the new optional argument in apropos commands that search
+       multiline text, such as doc strings.
+
+       * src/search.c (Fposix_looking_at, Fposix_string_match)
+       (Fposix_search_backward, Fposix_search_forward): Make sure Posix
+       appears in the doc strings near REGEXP, for better matches.
+
+2020-05-03  Andrea Corallo  <akrl@sdf.org>
+
+       Add a warning for missing write privilege
+
+       * lisp/emacs-lisp/comp.el (native-compile-async): Check for write
+       privilege and raise a warning in case.
+
+2020-05-03  Andrea Corallo  <akrl@sdf.org>
+
+       Introduce `comp-output-directory'
+
+       * lisp/emacs-lisp/comp.el (comp-output-directory): New function.
+       (comp-output-base-filename): Use `comp-output-directory'.
+
+2020-05-03  Mattias Engdegård  <mattiase@acm.org>
+
+       Regexps cannot infloop; fix manual
+
+       * doc/lispref/searching.texi (Regexp Special): Edit erroneous
+       statements about infinite looping in regexps.
+
+2020-05-03  Michael Albinus  <michael.albinus@gmx.de>
+
+       Do not delete asynchronous Tramp processes due to session timeout
+
+       * lisp/net/tramp-cmds.el (tramp-cleanup-connection): New optional
+       argument KEEP-PROCESSES.
+
+       * lisp/net/tramp-sh.el (tramp-timeout-session): Use it.  (Bug#41042)
+
+2020-05-03  Michael Albinus  <michael.albinus@gmx.de>
+
+       Improve Tramp debug messages
+
+       * lisp/net/tramp-cache.el (tramp-get-file-property)
+       (tramp-get-connection-property): Improve debug messages.
+       Suggested by Marc Herbert <marc.herbert@gmail.com>.
+
+2020-05-02  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding for some term libraries
+
+       This takes care of the most trivial cases, but there are more that
+       could be easily converted.
+
+       * lisp/term/bobcat.el:
+       * lisp/term/cygwin.el:
+       * lisp/term/konsole.el:
+       * lisp/term/linux.el:
+       * lisp/term/vt100.el:
+       * lisp/term/vt200.el: Use lexical-binding.
+
+2020-05-02  Stefan Kangas  <stefankangas@gmail.com>
+
+       Improve Info-mode doc and menu
+
+       * lisp/info.el (Info-mode-menu): Re-arrange to be more logical, move
+       items into submenus, add 'Info-directory' and separators.
+       (Info-mode): Add 'end-of-buffer' to doc string.  (Bug#39042)
+
+2020-05-02  Michael Albinus  <michael.albinus@gmx.de>
+
+       ;; Revert recent change in tramp-cache.el
+
+       * lisp/net/tramp-cache.el (tramp-dump-connection-properties):
+       Remove compatibility code dumping the persistency file.  Use
+       `emacs-lisp-mode' for backward compatibility.
+
+2020-05-02  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix 'count-screen-lines' when lines are truncated
+
+       * lisp/window.el (count-screen-lines): Fix the return value when
+       lines are truncated in the window, and the end of the region is
+       invisible due to this truncation.  (Bug#40849)
+
+2020-05-02  João Távora  <joaotavora@gmail.com>
+
+       Properly fix embarrassing missing paren typo in jsonrpc.el
+
+       Paul Eggert had fixed it in practice, but the missing paren
+       was meant to close a previous with-current-buffer.
+
+       * lisp/jsonrpc.el (initialize-instance): Put parenthesis in right spot.
+       (Version): Bump to 1.0.11
+
+2020-05-01  Michael Heerdegen  <michael_heerdegen@web.de>
+
+       Inhibit modification hooks when saving eieio-persistent's
+
+       * lisp/emacs-lisp/eieio-base.el (eieio-persistent-save): Bind
+       inhibit-modification-hooks -> t.
+
+2020-05-01  Michal Nazarewicz  <mina86@mina86.com>
+
+       cc-mode: add support for Doxygen documentation style
+
+       * lisp/progmodes/cc-fonts.el (doxygen-font-lock-doc-comments,
+         doxygen-font-lock-keywords): New constants defining Doxygen
+         comment style support.
+       * lisp/progmodes/cc-vars.el (c-doc-comment-style): Updated docstring
+         to mention now-supported Doxygen mode.
+
+2020-05-01  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * lisp/jsonrpc.el (initialize-instance): Fix closing-paren typo.
+
+2020-05-01  João Távora  <joaotavora@gmail.com>
+
+       Consolidate lisp/jsonrpc.el logging in single events buffer
+
+       For inferior processes having useful stderr, it is no longer
+       cumbersome to switch between different buffers to correlate error
+       messages with transport-level JSONRPC messages.
+
+       The existing stderr and stdout buffers can still be found hidden away
+       from the normal buffer list.
+
+       An original idea of Tobias Rittweiler <trittweiler@gmail.com>.
+
+       * lisp/jsonrpc.el (initialize-instance jsonrpc-process-connection):
+       Setup after-change functions stderr buffer.  Hide stderr and stdout
+       buffers.
+       (jsonrpc--log-event): Don't output extra newline.  Tweak log format.
+       (Version): Bump to 1.0.10
+
+2020-05-01  Alan Mackenzie  <acm@muc.de>
+
+       Protect non-selected face spec components in custimize-face.  Fixes bug 
#40866
+
+       * lisp/cus-edit.el (custom-face-save): If the current face widget is 
only
+       displaying part of the face spec, temporarily set it to "display" the 
whole
+       spec around the call to custom-face-mark-to-save.
+
+2020-05-01  João Távora  <joaotavora@gmail.com>
+
+       Add lisp-data-mode for editing non-code Lisp data
+
+       (Bug#40573)
+
+       The new mode can be used stand-alone or inherited from by modes
+       intended to edit programs. The existing emacs-lisp-mode and lisp-mode
+       are examples.
+
+       Thanks to Juri Linkov and Basil L. Contovounesios for researching some
+       data files in Emacs that can be automatically set to use the new mode.
+
+       * lisp/files.el (auto-mode-alist): Add entry for ".dir-locals" and
+       ".dir-locals-2"
+
+       * lisp/emacs-lisp/lisp-mode.el: (lisp-data-mode): New major mode.
+       (lisp-mode): Inherit from lisp-data-mode.  Set special lisp-mode
+       stuff here.
+
+       * lisp/progmodes/elisp-mode.el (emacs-lisp-mode): Inherit from
+       lisp-data-mode.
+
+       * lisp/bookmark.el (bookmark-insert-file-format-version-stamp):
+       Use lisp-data-mode.
+
+       * lisp/saveplace.el (save-place-alist-to-file): Use
+       lisp-data-mode.
+
+       * lisp/net/eww.el (eww-write-bookmarks): Use lisp-data-mode.
+
+       * lisp/net/nsm.el (nsm-write-settings): Use lisp-data-mode.
+
+       * lisp/net/tramp-cache.el (tramp-dump-connection-properties): Use
+       lisp-data-mode.
+
+       * etc/NEWS: Mention lisp-data-mode.
+
+       * doc/lispref/modes.texi (Example Major Modes): Update example.
+
+2020-05-01  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in most remaining tests
+
+       * test/lisp/comint-tests.el:
+       * test/lisp/custom-resources/custom--test-theme.el:
+       * test/lisp/dabbrev-tests.el:
+       * test/lisp/emulation/viper-tests.el:
+       * test/lisp/erc/erc-track-tests.el:
+       * test/lisp/gnus/gnus-tests.el:
+       * test/lisp/imenu-tests.el:
+       * test/lisp/info-xref-tests.el:
+       * test/lisp/jit-lock-tests.el:
+       * test/lisp/json-tests.el:
+       * test/lisp/man-tests.el:
+       * test/lisp/replace-tests.el:
+       * test/lisp/shadowfile-tests.el:
+       * test/lisp/subr-tests.el:
+       * test/lisp/thingatpt-tests.el:
+       * test/lisp/xml-tests.el: Use lexical-binding.
+
+       * test/lisp/man-tests.el (man-tests-filter-strings):
+       * test/lisp/shadowfile-tests.el (shadow-test00-clusters)
+       (shadow-test01-sites, shadow-test06-literal-groups)
+       (shadow-test07-regexp-groups, shadow-test09-shadow-copy-files):
+       Silence byte-compiler.
+
+2020-04-30  Michael Heerdegen  <michael_heerdegen@web.de>
+
+       Make `make-local-variable' declare the var locally dynamic
+
+       The only effect of this change is to get rid of some unnecessary
+       "assignment to free variable" warnings.
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-make-local-variable): New
+       function.
+
+2020-04-30  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix calculator division truncation (bug#40892)
+
+       * lisp/calculator.el (calculator-string-to-number): Convert decimal
+       numbers input to float, fixing a regression introduced in f248292ede.
+       Reported by Aitor Soroa.
+
+2020-04-30  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in most remaining emacs-lisp tests
+
+       * test/lisp/emacs-lisp/edebug-resources/edebug-test-code.el:
+       * test/lisp/emacs-lisp/eieio-tests/eieio-test-methodinvoke.el:
+       * test/lisp/emacs-lisp/eieio-tests/eieio-test-persist.el:
+       * test/lisp/emacs-lisp/faceup-resources/faceup-test-mode.el:
+       * 
test/lisp/emacs-lisp/faceup-resources/faceup-test-this-file-directory.el:
+       * test/lisp/emacs-lisp/faceup-tests/faceup-test-basics.el:
+       * test/lisp/emacs-lisp/faceup-tests/faceup-test-files.el:
+       * test/lisp/emacs-lisp/package-resources/newer-versions/new-pkg-1.0.el:
+       * 
test/lisp/emacs-lisp/package-resources/newer-versions/simple-single-1.4.el:
+       * test/lisp/emacs-lisp/package-resources/simple-depend-1.0.el:
+       * test/lisp/emacs-lisp/package-resources/simple-single-1.3.el:
+       * test/lisp/emacs-lisp/package-resources/simple-two-depend-1.1.el:
+       * test/lisp/emacs-lisp/package-tests.el:
+       * test/lisp/emacs-lisp/shadow-resources/p1/foo.el:
+       * test/lisp/emacs-lisp/shadow-resources/p2/FOO.el: Use lexical-binding.
+
+       * test/lisp/emacs-lisp/eieio-tests/eieio-test-methodinvoke.el
+       (eitest-F, eitest-H, eitest-I, constructor, make-instance)
+       (initialize-instance, CNM-M):
+       * test/lisp/emacs-lisp/package-tests.el (with-package-test)
+       (package-test-update-archives, package-test-signed): Silence 
byte-compiler.
+
+2020-04-30  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in qp.el and add tests
+
+       * test/lisp/mail/qp-tests.el: New file.
+       * lisp/mail/qp.el: Use lexical-binding.
+
+2020-04-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add new function dom-remove-attribute
+
+       * doc/lispref/text.texi (Document Object Model): Document it.
+
+       * lisp/dom.el (dom-remove-attribute): Add new function.
+
+2020-04-29  Andrea Corallo  <akrl@sdf.org>
+
+       Fix async compilation non respecting `comp-always-compile' nil value.
+
+       * lisp/emacs-lisp/comp.el (comp-run-async-workers): Fix missing
+       `comp-output-filename' usage.
+
+2020-04-29  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-04-29  Stephen Gildea  <stepheng+emacs@gildea.com>
+
+       Test iso8601-parse-zone vs format-time-string %z
+
+       * test/lisp/calendar/iso8601-tests.el
+       (iso8601-format-time-string-zone-round-trip): New unit test that
+       format-time-string %z and iso8601-parse-zone are inverses.
+       (test-iso8601-format-time-string-zone-round-trip): New helper function.
+
+2020-04-29  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       2f9bfaef21 (origin/emacs-27) ; Fix last change
+       520fd3e728 * lisp/env.el (substitute-env-vars): Doc fix.  (Bug#40948)
+       85544f8ef5 * lisp/isearch.el: Fix lazy-highlighting and lazy-counting...
+       d83cc05a73 Fix error in ERC when 'erc-server-coding-system' is custom...
+       16fed05ba8 Avoid crashes on TTY frames with over-long compositions
+       0278741676 Fix typo in custom.texi
+       9f5ae717fb * test/lisp/simple-tests.el (with-shell-command-dont-erase...
+       1f76a16ed3 * lisp/image-mode.el (image-mode-map): Update menu items.
+       f0e1bf56f0 Fix bugs in tab-bar and tab-line and mention remaining fea...
+       f0b9f18457 Make shell-command tests fit for tcsh.
+       68f4a740a1 Remove doc duplication
+       ac31cd384c * etc/NEWS: Fix inconsistencies.
+
+       # Conflicts:
+       #       etc/NEWS
+
+2020-04-29  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in most eshell tests
+
+       * test/lisp/eshell/em-hist-tests.el:
+       * test/lisp/eshell/em-ls-tests.el:
+       * test/lisp/eshell/esh-opt-tests.el: Use lexical-binding.
+
+2020-04-29  Stefan Kangas  <stefankangas@gmail.com>
+
+       Add new tests to bindat-tests.el
+
+       * test/lisp/emacs-lisp/bindat-tests.el (bindat-test-format-vector)
+       (bindat-test-vector-to-dec, bindat-test-vector-to-hex)
+       (bindat-test-ip-to-string): New tests.
+       * lisp/emacs-lisp/bindat.el (bindat-vector-to-hex): Fix typo.
+
+2020-04-29  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in float-sup.el and add tests
+
+       * lisp/emacs-lisp/float-sup.el: Use lexical-binding.
+       * test/lisp/emacs-lisp/float-sup-tests.el: New file.
+
+2020-04-28  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in rfc2368.el and add tests
+
+       * lisp/mail/rfc2368.el: Use lexical-binding.
+       * test/lisp/mail/rfc2368-tests.el: New file.
+
+2020-04-28  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in version.el and add tests
+
+       * lisp/version.el: Use lexical-binding.
+       * test/lisp/version-tests.el: New file.
+
+2020-04-28  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in puny.el and add more tests
+
+       * lisp/net/puny.el: Use lexical-binding.
+       * test/lisp/net/puny-tests.el (puny-test-encode-domain)
+       (puny-test-decode-domain, puny-highly-restrictive-domain-p): New
+       tests.
+
+2020-04-28  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in hmac-md5.el and add tests
+
+       * lisp/net/hmac-md5.el: Use lexical-binding.
+       * test/lisp/net/hmac-md5-tests.el: New file.
+
+2020-04-28  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in many emacs-lisp tests
+
+       * test/lisp/emacs-lisp/bytecomp-tests.el:
+       * test/lisp/emacs-lisp/ert-x-tests.el:
+       * test/lisp/emacs-lisp/nadvice-tests.el:
+       * test/lisp/emacs-lisp/pcase-tests.el:
+       * test/lisp/emacs-lisp/seq-tests.el:
+       * test/lisp/emacs-lisp/subr-x-tests.el:
+       * test/lisp/emacs-lisp/text-property-search-tests.el: Use
+       lexical-binding.
+
+       * test/lisp/emacs-lisp/seq-tests.el (test-seq-filter)
+       (test-seq-remove, test-seq-count, test-seq-every-p): Silence
+       byte-compiler.
+
+2020-04-28  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in most semantic tests
+
+       * test/lisp/cedet/semantic-utest-fmt.el:
+       * test/lisp/cedet/semantic-utest-ia.el:
+       * test/lisp/cedet/semantic-utest.el:
+       * test/lisp/cedet/srecode-utest-getset.el:
+       * test/lisp/cedet/srecode-utest-template.el: Use lexical-binding.
+
+       * test/lisp/cedet/semantic-utest-fmt.el (semantic-fmt-utest):
+       * test/lisp/cedet/semantic-utest.el (semantic-utest-generic)
+       (semantic-utest-Python, semantic-utest-Javascript)
+       (semantic-utest-Java, semantic-utest-Makefile)
+       (semantic-utest-Scheme, semantic-utest-Html, semantic-utest-PHP)
+       (semantic-utest-Csharp, semantic-utest-last-invalid):
+       * test/lisp/cedet/semantic-utest-ia.el (semantic-ia-utest-buffer)
+       (semantic-symref-test-count-hits-in-tag):
+       * test/lisp/cedet/srecode-utest-getset.el
+       (srecode-insert-getset-fully-automatic-flag): Silence
+       byte-compiler.
+
+2020-04-28  Stefan Kangas  <stefankangas@gmail.com>
+
+       Don't skip test semantic-utest-Python
+
+       * test/lisp/cedet/semantic-utest.el (semantic-utest-Python):
+       Ensure test is not skipped.
+
+2020-04-28  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in most progmodes tests
+
+       * test/lisp/progmodes/etags-tests.el:
+       * test/lisp/progmodes/f90-tests.el:
+       * test/lisp/progmodes/ps-mode-tests.el:
+       * test/lisp/progmodes/python-tests.el:
+       * test/lisp/progmodes/ruby-mode-tests.el:
+       * test/lisp/progmodes/subword-tests.el:
+       * test/lisp/progmodes/tcl-tests.el:
+       * test/lisp/progmodes/xref-tests.el: Use lexical-binding.
+
+       * test/lisp/progmodes/python-tests.el (python-tests-visible-string)
+       (python-tests-look-at-1, python-tests-look-at-2)
+       (python-shell-calculate-process-environment-2): Silence byte-compiler.
+
+2020-04-28  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in most vc tests
+
+       * test/lisp/vc/add-log-tests.el:
+       * test/lisp/vc/diff-mode-tests.el:
+       * test/lisp/vc/ediff-ptch-tests.el:
+       * test/lisp/vc/smerge-mode-tests.el:
+       * test/lisp/vc/vc-hg-tests.el:
+       * test/lisp/vc/vc-tests.el: Use lexical-binding.
+
+       * test/lisp/vc/add-log-tests.el
+       (add-log-current-defun-deftest): Silence byte-compiler.
+
+2020-04-28  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Improve multibyte_length performance
+
+       * src/character.h (multibyte_length):
+       Merge tests so that there are fewer conditional branches.
+       This improved CPU speed of ‘make compile-always’
+       by about 1.5% on my platform.
+
+2020-04-28  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/jit-lock.el: Don't use `make-variable-buffer-local` on hooks.
+
+       (jit-lock-functions): Clarify that it's a hook.
+       (jit-lock-unregister): Adjust accordingly.
+
+2020-04-27  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in calendar tests
+
+       * test/lisp/calendar/icalendar-tests.el:
+       * test/lisp/calendar/parse-time-tests.el: Use lexical-binding.
+
+       * test/lisp/calendar/icalendar-tests.el (icalendar--format-ical-event)
+       (icalendar--decode-isodatetime, icalendar-tests--do-test-import)
+       (icalendar-tests--decode-isodatetime): Silence byte-compiler.
+
+2020-04-27  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Simplify string-to-char
+
+       * src/editfns.c (Fstring_to_char): Simplify.
+
+       * src/editfns.c (Fstring_to_char): Simplify.
+
+       This tweak improved the CPU time performance of
+       ‘make compile-always’ by about 1.8% on my platform.
+
+2020-04-27  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Improve string_char_and_length speed
+
+       This tweak improved the CPU time performance of
+       ‘make compile-always’ by about 1.7% on my platform.
+       * src/character.c (string_char): Remove; no longer used.
+       * src/character.h (string_char_and_length): Redo so that it
+       needn’t call string_char.  This helps the caller, which can now
+       become a leaf function.
+
+2020-04-27  Glenn Morris  <rgm@gnu.org>
+
+       * test/lisp/mail/rfc2045-tests.el: Make it work.
+
+2020-04-26  Andrea Corallo  <akrl@sdf.org>
+
+       Rework spill LAP mechanism in preparation of compiling lambdas.
+
+       * lisp/emacs-lisp/comp.el (comp-spill-lap-function): No need anymore
+       to have `byte-native-compiling' bound to free-func.
+       (comp-spill-lap-function): Make use of `byte-to-native-lap-h' and
+       clean-up.
+       (comp-spill-lap-function): Likewise.
+
+       * lisp/emacs-lisp/bytecomp.el (byte-to-native-function): Add lap slot.
+       (byte-to-native-lap): Rename into byte-to-native-lap-h.
+       (byte-compile-lapcode): Spill lap after having int assembled and
+       store it into `byte-to-native-lap-h'.
+       (byte-compile-not-top-level): Remove.
+       (byte-compile-file-form-defmumble): Fill directly lap slot.
+       (byte-compile-lambda): Remove `byte-compile-not-top-level'.
+       (byte-compile-out-toplevel): Restore original code.
+       (byte-compile-form): Remove `byte-compile-not-top-level'.
+       (byte-compile-function-form): Likewise.
+       (byte-compile-flush-pending): No need anymore to set
+       `byte-compile-current-form' so restore original code.
+
+2020-04-26  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding for themes
+
+       * etc/themes/adwaita-theme.el:
+       * etc/themes/deeper-blue-theme.el:
+       * etc/themes/dichromacy-theme.el:
+       * etc/themes/light-blue-theme.el:
+       * etc/themes/manoj-dark-theme.el:
+       * etc/themes/misterioso-theme.el:
+       * etc/themes/tango-dark-theme.el:
+       * etc/themes/tango-theme.el:
+       * etc/themes/tsdh-dark-theme.el:
+       * etc/themes/tsdh-light-theme.el:
+       * etc/themes/wheatgrass-theme.el:
+       * etc/themes/whiteboard-theme.el:
+       * etc/themes/wombat-theme.el: Use lexical-binding.
+
+2020-04-26  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in dos-vars.el
+
+       * lisp/dos-vars.el: Use lexical-binding.
+       (msdos-shells, dos-codepage-setup-hook): Remove redundant :group
+       args.
+
+2020-04-26  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix tramp-test32-shell-command-dont-erase-buffer
+
+       * test/lisp/net/tramp-tests.el
+       (tramp-test32-shell-command-dont-erase-buffer): Adapt test.
+
+2020-04-26  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-04-26  Andrea Corallo  <akrl@sdf.org>
+
+       Convert before final function doc hash into a vector.
+
+       * lisp/emacs-lisp/comp.el (comp-finalize-relocs): Convert doc hash
+       table into vector before final.
+       (comp-emit-for-top-level): Rename `comp-ctxt-doc-index-h' ->
+       `comp-ctxt-function-docs'.
+       (comp-ctxt): Likewise.
+
+       * src/comp.c (native_function_doc): Update logic for documentation
+       being a vector.
+       (emit_ctxt_code): Update for 'comp-ctxt-doc-index-h' slot rename.
+
+       * src/comp.h (struct Lisp_Native_Comp_Unit): Rename 'data_fdoc_h'
+       into data_fdoc_v.
+
+       * src/pdumper.c (dump_native_comp_unit): Likewise.
+
+2020-04-26  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in spook.el
+
+       * lisp/play/spook.el: Use lexical-binding.
+       (spook-phrases-file, spook-phrase-default-count): Remove redundant
+       :group args.
+
+2020-04-26  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding for rfc2045.el and add tests
+
+       * lisp/mail/rfc2045.el: Use-lexical-binding.
+       * test/lisp/mail/rfc2045-tests.el: New file.
+
+2020-04-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Inline a couple of functions that were macros
+
+       This reclaims a bit of performance when compiling with gcc -Og.
+       These functions were macros until I changed them in
+       2020-04-17T14:57:25Z!eggert@cs.ucla.edu.
+       * src/casefiddle.c (make_char_unibyte):
+       * src/ccl.c (GET_TRANSLATION_TABLE): Now inline.
+
+2020-04-26  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in dig.el and add tests
+
+       * lisp/net/dig.el: Use lexical-binding.
+       (dig-program, dig-dns-server, dig-font-lock-keywords): Remove
+       redundant :group args.
+       * test/lisp/net/dig-tests.el: New file.
+
+2020-04-26  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in misc.el and add tests
+
+       * lisp/misc.el: Use lexical-binding.
+       * test/lisp/misc-tests.el: New file.
+
+2020-04-25  Stefan Kangas  <stefankangas@gmail.com>
+
+       Improve list-dynamic-libraries when alist empty
+
+       * lisp/misc.el (list-dynamic-libraries--refresh): Improve list format
+       and show message when 'dynamic-library-alist' is empty.
+
+2020-04-25  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+       * src/data.c (syms_of_data): Fix #ifdef HAVE_NATIVE_COMP position.
+
+       * src/comp.h (Fnative_elisp_load): Add fake inline for stock build.
+
+       * src/pdumper.c (dump_subr): Clean-up now unnecessary kludge.
+
+2020-04-25  Andrea Corallo  <akrl@sdf.org>
+
+       Lazy load function documentation.
+
+       * src/comp.c (native_function_doc): New function.
+       (load_comp_unit): Do not load function doc during load.
+
+       * src/comp.h: Extern 'native_function_doc'.
+
+       * src/doc.c (Fdocumentation): Call 'native_function_doc' to
+       retrieve function doc.
+
+       * src/pdumper.c (dump_native_comp_unit): Zero 'data_fdoc_h' before
+       dumping.
+
+2020-04-25  Andrea Corallo  <akrl@sdf.org>
+
+       * src/comp.h (load_comp_unit): Fix declaration style.
+
+2020-04-25  Andrea Corallo  <akrl@sdf.org>
+
+       Rename TEXT_OPTIM_QLY into TEXT_OPTIM_QLY_SYM.
+
+       * src/comp.c (TEXT_OPTIM_QLY): Rename into TEXT_OPTIM_QLY_SYM.
+       (emit_ctxt_code): Update TEXT_OPTIM_QLY naming.
+       (load_comp_unit): Likewise.
+
+2020-04-25  Andrea Corallo  <akrl@sdf.org>
+
+       * src/comp.c (declare_function): fix missing NILP.
+
+2020-04-25  Andrea Corallo  <akrl@sdf.org>
+
+       Store function documentations in a hash table.
+
+       * src/pdumper.c (dump_subr): Update Lisp_Subr hash.
+       (dump_subr): Update for new compilation unit layout.
+       (dump_vectorlike): Update pvec_type hash.
+
+       * src/lisp.h (struct Lisp_Subr): Remove 'native_doc' index.
+       (DEFUN): Update macro for new compilation unit
+       layout.
+
+       * src/doc.c (Fdocumentation): Update for new compilation unit
+       layout.
+
+       * src/comp.h (struct Lisp_Native_Comp_Unit):
+       Add 'data_fdoc_h' field.
+
+       * src/comp.c (TEXT_FDOC_SYM): New macro.
+       (emit_ctxt_code): Emit function documentations.
+       (load_comp_unit): Load function documentation.
+       (Fcomp__register_subr): Rename parameter.
+       (Fcomp__register_subr): Update for new compilation unit
+       layout.
+
+       * src/alloc.c (mark_object): Update for new compilation unit
+       layout.
+       (syms_of_alloc): Likewise.
+
+       * lisp/emacs-lisp/comp.el (comp-ctxt): Add doc-index-h slot.
+       (comp-emit-for-top-level): Emit doc index as 'comp--register-subr'
+       doc parameter.
+
+2020-04-25  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (comp-run-async-workers): Use `clrhash'.
+
+2020-04-25  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       45a64c97c7 (origin/emacs-27) Clarify semantics of trace-function CONT...
+       821760fdc4 Don't let a code literal get modified in mml parsing (Bug#...
+       74a92be16d * lisp/simple.el (kill-ring-save): Doc fix.  (Bug#40797)
+       3d0e859692 Minor doc clarification regarding fringe bitmaps
+       4d86c7f822 Fix documentation of fringe bitmaps
+       a76af88dd8 Tweak mutability doc a bit more
+       f7e488d206 Calc: fix autoload errors (bug#40800)
+       369761b36d ; * src/xdisp.c: Improve the introductory commentary.
+       a92ca1f177 Improve indexing of ELisp manual
+       5a25d17760 * lisp/image-mode.el (image-transform-resize): Remove FIXM...
+       37ebec3a95 Improve the default value of 'doc-view-ghostscript-program'.
+       ba6104d1e8 Change doc-view-mode-map prefix key 's' to 'c'.
+       400ff5cd19 Improve wording about constants
+       d2836fe71b Improve the default value of 'doc-view-ghostscript-program'.
+       fc55f65305 Minor improvements in documentation of the last change
+       a64da75961 Add image-auto-resize defcustoms to image-mode.el
+       692ad40539 Improve the documentation of tab-bar and tab-line
+
+       # Conflicts:
+       #       etc/NEWS
+
+2020-04-25  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-04-25  Andrea Corallo  <akrl@sdf.org>
+
+       Fix deferred-compilation for double compilation (bug#40838).
+
+       * lisp/emacs-lisp/comp.el (native-compile-async): Prevent double
+       compilation (bug#40838).
+
+2020-04-25  Andrea Corallo  <akrl@sdf.org>
+
+       Store ongoing compilations processes as hash table.
+
+       * lisp/emacs-lisp/comp.el (comp-async-processes): Rename as
+       `comp-async-compilations'.
+       (comp-async-runnings): Make use as `comp-async-compilations'.
+       (comp-run-async-workers): Likewise.
+
+2020-04-25  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix GDI+ image loading by file name
+
+       Without a call to image_find_image, we can get a file name that
+       is relative to data-directory/images/, or a file name that
+       starts with "~/", in which case w32_load_image would fail.
+       * src/image.c (native_image_load): Call image_find_image_file to
+       resolve and encode the image file name.
+       * src/w32image.c (w32_load_image): No need to encode the file
+       name, as it's already encoded by native_image_load.
+
+2020-04-25  Igor Saprykin  <sheleztt@gmail.com>  (tiny change)
+
+       Remove unused variable from ftfont.c
+
+       * src/ftfont.c (ftfont_lookup_cache): Eliminate unnecessary variable.
+
+2020-04-25  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix two fringe bitmaps
+
+       * src/fringe.c (question_mark_bits, exclamation_mark_bits): Fix
+       the numerical values.  (Bug#40805)
+
+2020-04-25  Simen Heggestøyl  <simenheg@gmail.com>
+
+       Use lexical-binding in po.el and add tests
+
+       * lisp/textmodes/po.el: Use lexical-binding.
+
+       * test/lisp/textmodes/po-tests.el: New file with tests for po.el.
+
+2020-04-25  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in forms.el example files
+
+       * etc/forms/forms-d2.el:
+       * etc/forms/forms-pass.el: Use lexical-binding.
+
+2020-04-24  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding for international tests
+
+       * test/lisp/international/mule-util-tests.el:
+       * test/lisp/international/ccl-tests.el: Use lexical-binding.
+
+2020-04-24  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding for all net tests
+
+       * test/lisp/net/dbus-tests.el:
+       * test/lisp/net/gnutls-tests.el:
+       * test/lisp/net/newsticker-tests.el:
+       * test/lisp/net/puny-tests.el:
+       * test/lisp/net/rfc2104-tests.el: Use lexical-binding.
+
+2020-04-24  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding for textmodes tests
+
+       * test/lisp/textmodes/mhtml-mode-tests.el:
+       * test/lisp/textmodes/sgml-mode-tests.el: Use lexical-binding.
+
+2020-04-24  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in most url tests
+
+       * test/lisp/url/url-auth-tests.el:
+       * test/lisp/url/url-expand-tests.el:
+       * test/lisp/url/url-parse-tests.el:
+       * test/lisp/url/url-tramp-tests.el:
+       * test/lisp/url/url-util-tests.el: Use lexical-binding.
+
+2020-04-24  Stefan Kangas  <stefankangas@gmail.com>
+
+       Use lexical-binding in most src tests
+
+       * test/src/charset-tests.el:
+       * test/src/chartab-tests.el:
+       * test/src/cmds-tests.el:
+       * test/src/coding-tests.el (top-level)
+       (generate-ascii-file, generate-mostly-nonascii-file):
+       * test/src/doc-tests.el:
+       * test/src/floatfns-tests.el:
+       * test/src/font-tests.el:
+       * test/src/keymap-tests.el:
+       * test/src/process-tests.el (top-level)
+       (process-test-sentinel-wait-function-working-p)
+       (process-test-stderr-buffer, process-test-stderr-filter):
+       * test/src/textprop-tests.el:
+       * test/src/thread-tests.el:
+       * test/src/timefns-tests.el:
+       * test/src/undo-tests.el:
+       * test/src/xml-tests.el: Use lexical-binding.
+
+2020-04-24  Alan Mackenzie  <acm@muc.de>
+
+       Fix bug #40766, an error in edebug spec handling
+
+       Also remove some debris.
+
+       * lisp/emacs-lisp/edebug.el (edebug-spec): Move the entry for 
edebug-spec-list
+       to before that for vector in the &or form.  This assures that in a 
dotted list
+       of vectors, that list gets handled correctly by edebug-spec-list rather 
than
+       wrongly by (vector ...).
+       (def-edebug-spec &key): Remove, since it is ill formed and superfluous.
+
+2020-04-24  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+       * lisp/subr.el (called-interactively-p): Fix for native code bug#40694.
+
+       * lisp/subr.el (subr-primitive-p): New inline function.
+
+       * lisp/emacs-lisp/comp.el (comp-run-async-workers): Fix non late load.
+
+2020-04-24  Stefan Kangas  <stefankangas@gmail.com>
+
+       * etc/edt-user.el: Use lexical-binding.
+
+       * lisp/kermit.el: Use lexical-binding.
+
+2020-04-24  Michael Albinus  <michael.albinus@gmx.de>
+
+       * test/lisp/net/tramp-tests.el
+
+       (tramp-test32-shell-command-dont-erase-buffer): Tag it :unstable.
+
+2020-04-23  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix display of composed text with :box face attribute
+
+       * src/xdisp.c (get_next_display_element): For a composition on a
+       display or overlay string, set the end_of_box_run_p flag if the
+       string ends at the last character included in the composition.
+       (fill_gstring_glyph_string): Fix the way the width of a gstring
+       glyph string is calculated: use the values calculated in
+       gui_produce_glyphs, since the latter adjusts the width due to the
+       face's ':box' attribute.
+       * src/xterm.c (x_draw_glyph_string_box):
+       * src/w32term.c (w32_draw_glyph_string_box):
+       * src/nsterm.m (ns_dumpglyphs_box_or_relief): Support automatic
+       compositions, which have the right_box_line_p flag set on the last
+       glyph produced from the composition.  (Bug#40687)
+
+       * src/w32term.c (w32_compute_glyph_string_overhangs): Update to be
+       consistent with xterm.c in its support of automatic composition
+       glyph strings.
+       * src/dispextern.h (enum glyph_type): More accurate commentary.
+       * src/.gdbinit (pgx): Display slice.img members only for image
+       glyphs.
+
+2020-04-23  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-refresh-preloaded): Add 
comp.eln
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-04-23  Paul Eggert  <eggert@cs.ucla.edu>
+
+       text-char-description minor cleanup
+
+       * src/keymap.c (push_text_char_description): Omit useless code.
+       (Ftext_char_description): Minor code cleanup, inspired by
+       seeing an incorrect comment about MAX_MULTIBYTE_LENGTH’s value.
+
+2020-04-23  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Tweak multibyte parsing loops
+
+       * src/character.c (parse_str_as_multibyte, str_as_multibyte):
+       Let the fast loop run a little longer, fixing what appears
+       to be an off-by-1 performance nit.
+
+2020-04-22  Michael Albinus  <michael.albinus@gmx.de>
+
+       Support old SMB1 protocol in Tramp
+
+       * doc/misc/tramp.texi (Frequently Asked Questions):
+       Describe `tramp-smb-options'.
+
+       * lisp/net/tramp-smb.el (tramp-smb-conf): Fix docstring.
+       (tramp-smb-options): New defcustom.
+       (tramp-smb-handle-copy-directory, tramp-smb-handle-file-acl)
+       (tramp-smb-handle-set-file-acl, tramp-smb-maybe-open-connection):
+       Use it.
+
+2020-04-21  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix recently introduced error in `tramp-sh-handle-vc-registered'
+
+       * lisp/net/tramp-sh.el (tramp-sh-handle-vc-registered): Improve test for
+       `vc-handled-backends'.  (Bug#40670)
+
+2020-04-21  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix string-to-multibyte overlong sequence bug
+
+       * src/character.h (MULTIBYTE_LENGTH, MULTIBYTE_LENGTH_NO_CHECK):
+       Remove, replacing with ...
+       (multibyte_length): ... this new function.  All callers changed.
+       The new function rejects overlong multibyte forms.
+       * test/src/buffer-tests.el (buffer-multibyte-overlong-sequences):
+       New test.
+
+2020-04-21  Juri Linkov  <juri@linkov.net>
+
+       * lisp/hi-lock.el (hi-lock--regexps-at-point): Use proper-list-p, not 
consp.
+
+2020-04-20  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Remove unnecessary lambda quoting
+
+       * lisp/gnus/nntp.el (nntp-open-connection): Buffer has lexical-binding
+       turned on.
+
+2020-04-20  Eli Zaretskii  <eliz@gnu.org>
+
+       Remove workaround from w32image.c
+
+       * src/w32image.c (w32_load_image): Remove a workaround for a bug
+       that is not needed anymore.  This error was happening because
+       GDI+ functions were called as CDECL, not as STDCALL.
+
+2020-04-20  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       05089a4d65 (origin/emacs-27) Tweak wording re constant variables
+       a1040861f1 Tweak setcar-related wording
+       751510f865 * lisp/image-mode.el: Add prefix key 's' and reduce depend...
+       9261a219ec * doc/emacs/windows.texi (Window Convenience): Describe 
mor...
+       e1d42da0d6 Fix mutability glitches reported by Drew Adams
+       5805df74f5 Improve mutability doc
+       dca35b31d0 Improve mutability documentation
+       81e7d7f111 Document that quoting yields constants
+       5734339f40 * doc/lispref/keymaps.texi (Extended Menu Items, Easy Menu...
+       14a570afae Remove #' and function quoting from lambda forms in manual
+       d5ec18c66b * src/regex-emacs.c (re_match_2_internal): Rework comment ...
+       4df8a61117 Add new node "Image Mode" to Emacs Manual.
+       d7d5ee6c57 ; Fix a typo in cmdargs.texi (bug#40701)
+       5e9db48fbe * doc/lispref/display.texi (Customizing Bitmaps): Fix typo.
+       eebfb72c90 Document constant vs mutable objects better
+       6c187ed6b0 Improve documentation of 'sort-lines'
+       52288f4b66 Mention 'spam-stat-process-directory-age' in the documenta...
+       067b070598 ; Fix some typos and doc issues (bug#40695)
+
+       # Conflicts:
+       #       etc/NEWS
+
+2020-04-20  Stefan Kangas  <stefankangas@gmail.com>
+
+       * lisp/cdl.el: Use lexical binding.
+
+2020-04-20  Stefan Kangas  <stefankangas@gmail.com>
+
+       Silence byte-compiler after my previous commit
+
+       * lisp/autoarg.el (autoarg-kp-digits): Silence byte-compiler.
+
+2020-04-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Rework how GDI+ functions are loaded dynamically in w32image.c
+
+       * src/w32image.c: Define correct WINGDIPAPI typedefs for GDI+
+       functions.  We cannot use DEF_DLL_FN, since that is for functions
+       with C calling conventions, whereas GDI+ functions are __stdcall.
+       (gdiplus_init): Load functions from DLL manually, not via
+       LOAD_DLL_FN, as the latter is for __cdecl functions.
+       (w32_frame_delay): Initialize delay with a negative value, as zero
+       is a valid delay.
+
+2020-04-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Don't use Gnulib's explicit_bzero on MS-Windows
+
+       This is a preventive change, since Gnulib was recently changed
+       its explicit_bzero to call SecureZeroMemory on MS-Windows,
+       disregarding systems older than XP, which didn't have it.
+
+       * src/w32.c (explicit_bzero): New function.
+
+       * nt/mingw-cfg.site (ac_cv_func_explicit_bzero): Avoid using the
+       Gnulib replacement for explicit_bzero.
+       * nt/inc/ms-w32.h (explicit_bzero): Add prototype.
+
+2020-04-19  Simen Heggestøyl  <simenheg@gmail.com>
+
+       Use lexical-binding in elide-head.el and add tests
+
+       * lisp/elide-head.el: Use lexical-binding.
+       (elide-head-headers-to-hide): Remove redundant :group arg.
+       (elide-head-overlay): Use `defvar-local'.
+       (elide-head-show): Fix docstring.
+
+       * test/lisp/elide-head-tests.el: New file with tests for
+       elide-head.el.
+
+2020-04-19  Stefan Kangas  <stefankangas@gmail.com>
+
+       * lisp/autoarg.el: Use lexical binding.
+
+2020-04-18  Ahmed Khanzada  <lenzuru@gmail.com>
+
+       Fix misnamed variable breaking GNUstep
+
+       * src/nsterm.m (ns_set_offset): Use correct variable.
+
+2020-04-18  Simen Heggestøyl  <simenheg@gmail.com>
+
+       Use lexical-binding in apropos.el and add tests
+
+       * lisp/apropos.el: Use lexical-binding and remove redundant
+       :group args.
+       (apropos-words-to-regexp, apropos): Tweak docstrings.
+       (apropos-value-internal): Replace '(if x (progn y))' with
+       '(when x y)'.
+       (apropos-format-plist): Add docstring and replace '(if x (progn y))'
+       with '(when x y)'.
+
+       * test/lisp/apropos-tests.el: New file with tests for apropos.el.
+
+2020-04-18  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       f3b62b6c62 (origin/emacs-27) Avoid crashes in regex-emacs.c due to GC
+       175c61c18b Fix "C-u M-!" when 'shell-command-dont-erase-buffer' is no...
+       6b297519b5 Fix cl-most-positive-float doc typo
+       c36c5a3ded ; lisp/ldefs-boot.el: Update.
+       3876a60569 Fix a typo in calculator.el
+       9e832ba91b * lisp/erc/erc.el: Add URL to the new ERC page on the Emac...
+
+       # Conflicts:
+       #       etc/NEWS
+
+2020-04-18  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       145a151d62 Correct Fido-mode's backspacing of directories with spaces
+       660b9b8cfb Default completion-flex-nospace to nil
+       fb5f616ae8 Improve an example in w32 FAQ
+
+2020-04-18  Eli Zaretskii  <eliz@gnu.org>
+
+       Safeguard the fix of bug#40632
+
+       * src/xdisp.c (move_it_to): Restrict the recent fix to iteration
+       through buffer text.
+
+2020-04-18  Eli Zaretskii  <eliz@gnu.org>
+
+       Don't abort when using GDI+ for images
+
+       * src/w32image.c (decode_delay): Instead of aborting when the
+       type of delay value is unrecognized, return an invalid negative
+       value.
+
+2020-04-18  Juan José García-Ripoll  <juanjose.garciaripoll@gmail.com>
+
+       Fix loading multi-frame TIFF images via GDI+
+
+       * src/w32image.c (w32_frame_delay): Don't try to compute frame
+       delay if GdipGetPropertyItemSize fails for PropertyTagFrameDelay.
+       (w32_load_image): Don't add 'delay' member to metadata if the
+       delay could not be determined.
+
+2020-04-18  Martin Rudalics  <rudalics@gmx.at>
+
+       Fix handling of child frames in prepare_menu_bars (Bug#40639)
+
+       * src/xdisp.c (prepare_menu_bars): Call gui_consider_frame_title
+       for child frames too (Bug#40639).  Never try to update menu bar
+       of a child frame.  Do not exclude child frames from updating tool
+       or tab bars.
+
+2020-04-17  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Port recent character.h changes to --with-wide-int
+
+       * src/fns.c (mapcar1):
+       * src/keymap.c (Fkey_description):
+       * src/syntax.c (scan_lists):
+       Prefer ptrdiff_t to EMACS_INT where either will do; this fixes
+       newly-introduced type errors on --with-wide-int platforms where
+       ptrdiff_t is narrower than EMACS_INT.
+       * src/keymap.c (Fkey_description): Rework for clarity; remove goto.
+       * src/syntax.c (scan_words, Fforward_comment, scan_lists)):
+       Fix unlikely integer overflow problems that can occur on
+       --with-wide-int platforms, and that were caught by the recent
+       character.h changes.
+
+2020-04-17  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Pacify gcc -Og x86-64
+
+       * src/editfns.c (Ftranslate_region_internal): Add UNINIT
+       to pacify gcc -Og x86-64 (GCC 9.3.1 20200317 (Red Hat 9.3.1-1)).
+
+2020-04-17  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Prefer more inline functions in character.h
+
+       * src/buffer.h (fetch_char_advance, fetch_char_advance_no_check)
+       (buf_next_char_len, next_char_len, buf_prev_char_len)
+       (prev_char_len, inc_both, dec_both): New inline functions,
+       replacing the old character.h macros FETCH_CHAR_ADVANCE,
+       FETCH_CHAR_ADVANCE_NO_CHECK, BUF_INC_POS, INC_POS, BUF_DEC_POS,
+       DEC_POS, INC_BOTH, DEC_BOTH respectively.  All callers changed.
+       These new functions all assume buffer primitives and so need
+       to be here rather than in character.h.
+       * src/casefiddle.c (make_char_unibyte): New static function,
+       replacing the old MAKE_CHAR_UNIBYTE macro.  All callers changed.
+       (do_casify_unibyte_string): Use SINGLE_BYTE_CHAR_P instead
+       of open-coding it.
+       * src/ccl.c (GET_TRANSLATION_TABLE): New static function,
+       replacing the old macro of the same name.
+       * src/character.c (string_char): Omit 2nd arg.  3rd arg can no
+       longer be NULL.  All callers changed.
+       * src/character.h (SINGLE_BYTE_CHAR_P): Move up.
+       (MAKE_CHAR_UNIBYTE, MAKE_CHAR_MULTIBYTE, PREV_CHAR_BOUNDARY)
+       (STRING_CHAR_AND_LENGTH, STRING_CHAR_ADVANCE)
+       (FETCH_STRING_CHAR_ADVANCE)
+       (FETCH_STRING_CHAR_AS_MULTIBYTE_ADVANCE)
+       (FETCH_STRING_CHAR_ADVANCE_NO_CHECK, FETCH_CHAR_ADVANCE)
+       (FETCH_CHAR_ADVANCE_NO_CHECK, INC_POS, DEC_POS, INC_BOTH)
+       (DEC_BOTH, BUF_INC_POS, BUF_DEC_POS): Remove.
+       (make_char_multibyte): New static function, replacing
+       the old macro MAKE_CHAR_MULTIBYTE.  All callers changed.
+       (CHAR_STRING_ADVANCE): Remove; all callers changed to use
+       CHAR_STRING.
+       (NEXT_CHAR_BOUNDARY): Remove; it was unused.
+       (raw_prev_char_len): New inline function, replacing the
+       old PREV_CHAR_BOUNDARY macro.  All callers changed.
+       (string_char_and_length): New inline function, replacing the
+       old STRING_CHAR_AND_LENGTH macro.  All callers changed.
+       (STRING_CHAR): Rewrite in terms of string_char_and_length.
+       (string_char_advance): New inline function, replacing the old
+       STRING_CHAR_ADVANCE macro.  All callers changed.
+       (fetch_string_char_advance): New inline function, replacing the
+       old FETCH_STRING_CHAR_ADVANCE macro.  All callers changed.
+       (fetch_string_char_as_multibyte_advance): New inline function,
+       replacing the old FETCH_STRING_CHAR_AS_MULTIBYTE_ADVANCE macro.
+       All callers changed.
+       (fetch_string_char_advance_no_check): New inline function,
+       replacing the old FETCH_STRING_CHAR_ADVANCE_NO_CHECK macro.  All
+       callers changed.
+       * src/regex-emacs.c (HEAD_ADDR_VSTRING): Remove; no longer used.
+       * src/syntax.c (scan_lists): Use dec_bytepos instead of
+       open-coding it.
+       * src/xdisp.c (string_char_and_length): Rename from
+       string_char_and_length to avoid name conflict with new function in
+       character.h.  All callers changed.
+
+2020-04-17  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Prefer inline functions in character.h
+
+       In character.h, replace macros with inline functions or enums
+       when this is easy.  This improves maintainability and
+       on my platform (Fedora 31 x86-64, gcc -O2) improved CPU
+       performance very slightly (0.3%) on ‘make compile-always’.
+       * src/buffer.h (SANE_TAB_WIDTH, CHARACTER_WIDTH):
+       Move here from character.h, and make them inline functions.
+       Tune CHARACTER_WIDTH so that ASCII_CHAR_WIDTH is no longer needed.
+       (sanitize_tab_width, sanitize_char_width):
+       Move here from character.h.
+       * src/character.h (MAX_CHAR, MAX_UNICODE_CHAR, MAX_1_BYTE_CHAR)
+       (MAX_2_BYTE_CHAR, MAX_3_BYTE_CHAR, MAX_4_BYTE_CHAR)
+       (MAX_5_BYTE_CHAR, MIN_MULTIBYTE_LEADING_CODE)
+       (MAX_MULTIBYTE_LEADING_CODE, MAX_MULTIBYTE_LENGTH):
+       Now enum constants instead of macros.
+       * src/character.h (CHAR_BYTES): Redo to avoid conditional branches.
+       (CHAR_BYTE8_P, BYTE8_TO_CHAR, UNIBYTE_TO_CHAR, CHAR_TO_BYTE8)
+       (CHAR_TO_BYTE_SAFE, CHAR_BYTE8_HEAD_P, CHARACTERP)
+       (CHECK_CHARACTER, CHECK_CHARACTER_CAR, CHECK_CHARACTER_CDR)
+       (CHAR_PRINTABLE_P, CHAR_BYTES, CHAR_LEADING_CODE, BYTE8_STRING)
+       (LEADING_CODE_P, TRAILING_CODE_P, CHAR_HEAD_P)
+       (BYTES_BY_CHAR_HEAD):
+       Now inline functions instead of macros.
+       (ASCII_CHAR_WIDTH): Remove; no longer used.
+       * src/conf_post.h (ATTRIBUTE_PURE): New macro.
+       * src/lisp.h (char_table_ref): Use it, for better inlining.
+       * src/fns.c (base64_decode_1): Add now-necessary casts.
+
+2020-04-17  Basil L. Contovounesios  <contovob@tcd.ie>
+
+       Fix effect-free warning in ob-screen.el while loop
+
+       The warning was introduced and detected by an optimizer addition
+       proposed in the following thread:
+       https://lists.gnu.org/archive/html/emacs-devel/2019-12/msg00711.html
+
+       * lisp/org/ob-screen.el (org-babel-screen-test): Avoid 'value
+       returned from (format "...") is unused' warning by doing something
+       more useful than busy string manipulation while waiting for an
+       asynchronous subprocess to make the temporary file readable.
+
+2020-04-17  Justin Timmons  <justinmtimmons@gmail.com>
+
+       Bind 'n' and 'p' to move between symbols in apropos
+
+       * lisp/apropos.el (apropos-next-symbol)
+       (apropos-previous-symbol): New commands.
+       (apropos-mode-map): Bind above commands to 'n' and 'p'.  (Bug#20694)
+       * etc/NEWS: Announce the new commands.
+
+2020-04-17  Masahiro Nakamura  <tsuucat@icloud.com>
+
+       Fix comparing command names in strokes.el (bug#40600)
+
+       * lisp/strokes.el (strokes-alphabetic-lessp): Simply call string-lessp
+       because the cdr of the argument may be a string.
+
+2020-04-16  Alan Third  <alan@idiocy.org>
+
+       Use native image API for NS
+
+       * configure.ac (NATIVE_IMAGE_API): Move above NS definitions.
+       (HAVE_NATIVE_IMAGE_API): Set for NS.
+       (HAVE_PNG, HAVE_JPEG, HAVE_GIF, HAVE_TIFF): Enable on NS builds.
+       * src/image.c (HAVE_NS): Fix a number of #if's so they no longer rely
+       on HAVE_NS.
+       (PIX_MASK_DRAW): Add for HAVE_NS so libpng support will compile.
+       (image_can_use_native_api):
+       (native_image_load): Add NS support.
+       (png_load):
+       (jpeg_load):
+       (tiff_load):
+       (gif_load): Remove NS specific definitions.
+       * src/nsimage.m (ns_can_use_native_image_api): New function.
+       * src/nsterm.h: (ns_can_use_native_image_api): New function.
+
+2020-04-16  Alan Third  <alan@idiocy.org>
+
+       Allow dynamic choice of drawing path on NS (bug#39883)
+
+       * src/nsterm.h (NS_DRAW_TO_BUFFER): Let this be enabled on versions
+       older than 10.14.
+       * src/nsterm.m (ns_update_begin):
+       (ns_update_end):
+       (ns_focus):
+       (ns_unfocus):
+       ([EmacsView viewDidResize:]):
+       ([EmacsView createDrawingBuffer]):
+       ([EmacsView windowDidChangeBackingProperties:]):
+       ([EmacsView copyRect:to:]):
+       ([EmacsView wantsUpdateLayer]): Dynamically switch between drawing to a
+       buffer and drawing to the screen, depending on the version of AppKit
+       in use.
+       ([EmacsView dealloc]): We can't release the context unless
+       NS_DRAW_TO_BUFFER is defined.
+
+2020-04-16  Alan Third  <alan@idiocy.org>
+
+       Fix NS frame resizing issues (bug#40200, bug#28872)
+
+       * src/nsmenu.m (update_frame_tool_bar): Remove reference to
+       updateFrameSize.
+       * src/nsterm.h: ([EmacsView updateFrameSize]):
+       ([EmacsView setRows:andColumns:]): Remove unused
+       method definitions.
+       (NS_PARENT_WINDOW_LEFT_POS):
+       (NS_PARENT_WINDOW_TOP_POS): Move to nsterm.m.
+       * src/nsterm.m (ns_parent_window_rect): New function.
+       (NS_PARENT_WINDOW_LEFT_POS):
+       (NS_PARENT_WINDOW_TOP_POS): Move to nsterm.m and simplify.
+       (ns_set_offset): Fix strange behaviours when using negative values.
+       (ns_set_window_size):
+       (ns_set_undecorated):
+       ([EmacsView windowDidResize:]):
+       ([EmacsView windowDidExitFullScreen]):
+       (ns_judge_scroll_bars): Remove references to updateFrameSize.
+       ([EmacsView dealloc]): Unset resize notification and release buffer.
+       ([EmacsView updateFrameSize:]): Remove function.
+       ([EmacsView windowWillResize:toSize:]): Move some code to
+       viewDidResize.
+       ([EmacsView viewDidResize]): New function.
+       ([EmacsView initFrameFromEmacs:]): Set up resize notification and move
+       buffer creation until after the prerequisite objects are created.
+       ([EmacsView toggleFullScreen:]): Set frame to the size of the
+       contentview, not the whole window, and remove reference to
+       updateFrameSize.
+       ([EmacsView setRows:andColumns:]): Remove unused method.
+       ([EmacsView windowDidMove:]): Tidy up.
+
+2020-04-16  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (comp-never-optimize-functions): Better doc 
fix
+
+2020-04-16  Mattias Engdegård  <mattiase@acm.org>
+
+       Improve regexp in org-table-finish-edit-field
+
+       * lisp/org/org-table.el (org-table-finish-edit-field):
+       Further improvement of regexp, as suggested by Paul Eggert.
+
+2020-04-16  Michael Albinus  <michael.albinus@gmx.de>
+
+       Ignore D-Bus errors in tramp-gvfs.el (Bug#40655)
+
+       * lisp/net/tramp-gvfs.el (with-tramp-dbus-call-method): Ignore D-Bus
+       errors.  (Bug#40655)
+
+2020-04-16  Alan Mackenzie  <acm@muc.de>
+
+       (forward-comment -n): escaped newline is sometimes NOT end of comment
+
+       * src/syntax.c (Fforward_comment) When comment-end-can-be-escaped is 
non-nil,
+       don't attempt back_comment when point is just after an escaped newline, 
etc.
+
+2020-04-16  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+       * lisp/emacs-lisp/comp.el (comp-never-optimize-functions): Add 
yes-or-no-p
+
+2020-04-16  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix type-checking bug in vertical-motion
+
+       * src/indent.c (Fvertical_motion): Fix bug where the type of lcols
+       was checked too late.
+
+2020-04-16  Glenn Morris  <rgm@gnu.org>
+
+       * src/indent.c (Fvertical_motion): Fix int/Lisp_Object mix up.
+
+2020-04-16  Mattias Engdegård  <mattiase@acm.org>
+
+       Use directory-files-no-dot-files-regexp wherever possible
+
+       Suggested by Paul Eggert.
+
+       * lisp/files.el (directory-files-no-dot-files-regexp):
+       Clarify semantics and purpose.
+       * lisp/dired.el (dired-re-no-dot):
+       Define as obsolete alias of directory-files-no-dot-files-regexp.
+       (dired-delete-file):
+       * lisp/gnus/gnus-util.el (gnus-delete-directory):
+       * lisp/net/ange-ftp.el (ange-ftp-delete-directory):
+       * lisp/obsolete/vc-arch.el (vc-arch-trim-revlib):
+       * lisp/org/ob-core.el (org-babel-remove-temporary-directory):
+       * lisp/vc/vc-rcs.el (vc-rcs-unregister):
+       Use directory-files-no-dot-files-regexp.
+
+2020-04-16  Mattias Engdegård  <mattiase@acm.org>
+
+       Quote semanticdb-ebrowse-default-file-name in regexp
+
+       Noticed by Andreas Schwab.
+
+       * lisp/cedet/semantic/db-ebrowse.el (semanticdb-load-ebrowse-caches):
+       Quote file name in regexp.
+
+2020-04-16  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix bugs, inefficiencies and bad style in regexps
+
+       Found by relint.  See discussion at
+       https://lists.gnu.org/archive/html/emacs-devel/2020-04/msg00265.html
+
+       * lisp/org/org-table.el (org-table-finish-edit-field):
+       * lisp/arc-mode.el (archive-rar-summarize):
+       Avoid wrapped subsumption in repeated sequences.
+       * lisp/erc/erc-dcc.el (erc-dcc-ctcp-query-send-regexp): Replace
+       inefficient repeated empty-matching expression with a plain greedy
+       form.
+       (erc-dcc-handle-ctcp-send): Adjust group numbers.
+       * lisp/net/puny.el (puny-encode-domain): Fix fast-path shortcut
+       pattern so that it actually works as intended.
+       * lisp/progmodes/gdb-mi.el (gdb-control-commands-regexp):
+       * lisp/vc/diff-mode.el (diff-imenu-generic-expression):
+       Remove superfluous backslashes.
+       * lisp/progmodes/scheme.el (scheme-imenu-generic-expression):
+       Correct confused definition-matching pattern which would match more
+       than intended.
+       * lisp/textmodes/sgml-mode.el (sgml-tag-name-re): Avoid inefficient
+       matching by using the fact that the first character cannot match the
+       last char of sgml-name-re.
+
+2020-04-16  Mattias Engdegård  <mattiase@acm.org>
+
+       Regularise some file-matching regexps
+
+       * admin/authors.el (authors-obsolete-files-regexps)
+       (authors-renamed-files-regexps): Replace ^ and $ with \` and \'.
+
+2020-04-16  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid compiler warning in indent.c
+
+       * src/indent.c (Fvertical_motion): Avoid compilation warning.
+       Reported by Juanma Barranquero <lekktu@gmail.com>.
+
+2020-04-16  Eli Zaretskii  <eliz@gnu.org>
+
+       File-handling cleanup in w32image.c
+
+       * src/w32image.c (w32_load_image): Encode the image file name and
+       convert it via 'map_w32_filename'.  No need to do anything special
+       when 'w32_unicode_filenames' is zero, since file names are in
+       UTF-8 internally, and this code will never run on Windows 9X.
+       * src/w32.h (map_w32_filename): Add prototype; removed prototypes
+       from all *.c files.
+
+2020-04-15  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/subr.el (eval-after-load): Make use of load-true-file-name 
bug#40638
+
+2020-04-15  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix retrieval of frame delay when using GDI+
+
+       * src/w32image.c (enum PropertyItem_type): New enumeration.
+       (decode_delay): New function.
+       (w32_frame_delay): Call 'decode_delay' to retrieve the frame delay
+       from image data.
+
+2020-04-15  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       a5f7c26907 (origin/emacs-27) * admin/authors.el: Add an author alias.
+       d87a4d1f4e Limit RLIMIT_NOFILE to FD_SETSIZE on macOS
+       e5ca8e5e73 Fix Elisp manual entry on 'set-window-configuration'
+       485f24223f ; Update ChangeLog.3
+       8f200254fb ; Update etc/AUTHORS
+       c7adc851ad * admin/authors.el: Add missing author aliases.
+       4acdd7fe58 Fix edge case errors in filename-matching regexps
+       5f36e21fe5 Clarify the doc string of 'yank'
+       13301d4266 New function erc-track-switch-buffer-other-window
+       38f7538d8f New function erc-switch-to-buffer-other-window
+
+       # Conflicts:
+       #       etc/NEWS
+
+2020-04-15  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix small glitches in documenting the native image API feature
+
+       * etc/NEWS: Fix wording of the entry for native image API support.
+       Reported by Juanma Barranquero <lekktu@gmail.com>.
+
+       * configure.ac (native-image-api): Fix the "--help" description.
+
+2020-04-15  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid infloop in redisplay when wrap-prefix is too wide
+
+       * src/xdisp.c (move_it_to): Avoid infloop due to wrap-prefix that
+       is wide enough to leave no space to display even the first
+       character of the continuation line.  (Bug#40632)
+
+2020-04-15  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/htmlfontify.el: Use `font-lock-ensure` unconditionally
+
+       Remove redundant `:group`s.
+
+       (hfy-force-fontification): Make it an obsolete alias for 
`font-lock-ensure`.
+       Update all callers.
+       (hfy-init-kludge-hooks, hfy-init-kludge-hook): Remove vars, not used 
any more.
+       (hfy-kludge-cperl-mode): Declare it obsolete.
+
+2020-04-14  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid compiler warning in image.c
+
+       * src/image.c (image_can_use_native_api): Avoid compiler warnings
+       by making this function conditioned on HAVE_NATIVE_IMAGE_API.
+       (initialize_image_type): Call image_can_use_native_api only if
+       HAVE_NATIVE_IMAGE_API is non-zero.  Reported by Basil
+       L. Contovounesios <contovob@tcd.ie>.
+
+2020-04-14  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-04-14  Andrea Corallo  <akrl@sdf.org>
+
+       Always set `load-true-file-name' where `load-file-name' is set too.
+
+       Fix bug#40620.
+
+       * lisp/cus-dep.el (custom-make-dependencies): Set
+       load-true-file-name.
+
+       * lisp/emacs-lisp/package.el (package-quickstart-refresh):
+       Likewise.
+
+       * lisp/international/mule.el (load-with-code-conversion):
+       Likewise.
+
+       * lisp/loadup.el (load-true-file-name): Likewise.
+
+2020-04-14  Eli Zaretskii  <eliz@gnu.org>
+
+       Make use of MS-Windows native image API be selectable at run time
+
+       * configure.ac: Minor cleanup in how w32image.o is added to the
+       build when native image APIs are requested.
+
+       * src/w32gui.h (w32_load_image, w32_can_use_native_image_api)
+       (w32_gdiplus_shutdown): Move prototypes from w32term.h here, since
+       w32.c doesn't include w32term.h.
+       * src/image.c (struct image_type): No need to pass TYPE to the
+       'valid_p' method.  All callers changed.
+       (initialize_image_type) [HAVE_NATIVE_IMAGE_API]: Call
+       'image_can_use_native_api' before trying image-specific methods.
+       (image_can_use_native_api): New function.
+       (image_types): Remove the native_image_type parts.
+       (syms_of_image): New symbol 'native-image'.
+       (parse_image_spec): Accept native-image "type" for any image type.
+       * src/w32term.c (syms_of_w32term): New variable
+       'w32-use-native-image-API'.
+       * src/w32image.c: (w32_can_use_native_image_api): New function.
+       (gdiplus_init): Rename from w32_gdiplus_startup. Simplify code.
+       Move the call to GdiplusStartup to a separate function.  Use
+       ordinal number for SHCreateMemStream if cannot load it by name.
+       (w32_load_image): Ignore Win32Error status from
+       w32_select_active_frame.
+       Move DEFSYMs from here...
+       * src/image.c (syms_of_image) [HAVE_NATIVE_IMAGE_API]: ...to here.
+
+       * etc/NEWS: Update the entry about native image API use.
+
+2020-04-14  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (native-compile-async): Better error message.
+
+2020-04-14  Juan José García-Ripoll  <juanjose.garciaripoll@gmail.com>
+
+       Initial version of native image API support for MS-Windows
+
+       * src/w32image.c: New file.
+       * src/w32term.h: Add prototypes of 'w32_load_image',
+       'w32_gdiplus_startup', 'w32_gdiplus_shutdown', and
+       'w32_query_frame_background_color'.
+       * src/w32term.c (w32_query_frame_background_color): No longer
+       static.
+       * src/w32.c (term_ntproc) [HAVE_GDIPLUS]: Call
+       'w32_gdiplus_shutdown'.
+       * src/image.c (struct image_type) <valid_p>: Accept an additional
+       argument, the image type.  All implementations changed.
+       (init_native_image_functions, native_image_p, native_image_load)
+       [HAVE_NATIVE_IMAGE_API]: New methods for "native image type".
+       (initialize_image_type) [HAVE_NATIVE_IMAGE_API]: Call
+       'init_native_image_functions'.
+       (image_types) [HAVE_NATIVE_IMAGE_API]: Add settings for native
+       image API.
+       (lookup_image_type) [HAVE_NATIVE_IMAGE_API]: Initialize native
+       functions if needed.
+
+       * lisp/term/w32-win.el (dynamic-library-alist): Add gdiplus and
+       shlwapi.
+
+       * etc/NEWS: Announce the new feature.
+
+       * configure.ac (native-image-api): New option, OFF by default.
+       (HAVE_NATIVE_IMAGE_API): If native-image-api is selected, add
+       w32image.o to W32_OBJ.
+
+2020-04-14  Juri Linkov  <juri@linkov.net>
+
+       Fix hi-lock test and add new test for unhighlight (bug#40337)
+
+       * lisp/hi-lock.el (hi-lock-unface-buffer): Use hi-lock--hashcons
+       only on strings, not lists.
+
+       * test/lisp/hi-lock-tests.el (hi-lock-bug26666): Revert previous change,
+       use "a" instead of "b".
+       (hi-lock-unhighlight): New test.
+
+2020-04-14  Juri Linkov  <juri@linkov.net>
+
+       * lisp/vc/vc.el (vc-deduce-fileset): Improve docstring (bug#34949).
+
+2020-04-13  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (comp-finalize-relocs): Better commentary.
+
+2020-04-13  Andrea Corallo  <akrl@sdf.org>
+
+       Fix native-compile-async for bug#40602.
+
+       * lisp/emacs-lisp/comp.el (native-compile-async): Relax coherency 
condition.
+
+2020-04-13  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-04-13  Andrea Corallo  <akrl@sdf.org>
+
+       * src/lread.c (Fload): Clean-up unnecessary sanity check.
+
+       'is_native_elisp' can't be non zero if NATIVE_COMP_FLAG is not set.
+
+2020-04-13  Andrea Corallo  <akrl@sdf.org>
+
+       Fix function find mechanism for installed instance.
+
+       * src/lread.c (parent_directory): New function.
+       (Fload): Make use of 'parent_directory' and fix load-history
+       build-up with relative paths.
+
+2020-04-13  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       f84aed5fd2 (origin/emacs-27) Clarify documentation on inhibit-modific...
+
+2020-04-13  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       1dfc497fac Minor wording change in Introduction to Programming in Ema...
+       ff09b4eeac Fix 'flymake-show-diagnostics-buffer' when line numbers ar...
+       63e8d0ea87 Fix last changes describing mail commands
+       01212a762f Do setup Flymake in file-less Elisp buffers
+       36873ef2b2 Fix error message for ‘cl-struct-unknown-slot’ (bug#39995)
+       3f9310b0fe Fix and improve documentation of mail-related features
+       1482a75efa Fix build failure with Fx_gtk_debug
+       cf57663f2a Mention jit-lock deferred as an alternative to fast-but-im...
+
+       # Conflicts:
+       #       etc/NEWS
+
+2020-04-13  Glenn Morris  <rgm@gnu.org>
+
+       * doc/lispref/processes.texi (Network): Fix xref usage.
+
+       * doc/emacs/msdos.texi (Windows Keyboard): Fix xref.
+
+2020-04-13  Albert  <georgealbert@qq.com>
+
+       Fix previous change in w32fns.c
+
+       * src/w32fns.c (w32_msg_pump): Simplify by not calling
+       ImmGetOpenStatus.
+       (Fw32_get_ime_open_status): Fix a typo.
+
+2020-04-13  Eli Zaretskii  <eliz@gnu.org>
+
+       Document the new 'w32-get/set-ime-open-status' functions
+
+       * doc/emacs/msdos.texi (Windows Keyboard): Document
+       'w32-set-ime-open-status'.
+
+       * etc/NEWS: Announce the new IME-related functions.
+
+2020-04-13  Albert  <georgealbert@qq.com>
+
+       Support toggling native Input Methods on MS-Windows
+
+       * src/w32term.h (WM_EMACS_IME_STATUS): New message code.
+
+       * src/w32fns.c (ImmGetOpenStatus_Proc, ImmSetOpenStatus_Proc): New
+       typedefs.
+       (w32_msg_pump): Handle the WM_EMACS_IME_STATUS message.
+       (Fw32_get_ime_open_status, Fw32_set_ime_open_status): New functions
+       (syms_of_w32fns): Defsubr them.
+       (globals_of_w32fns): Load ImmGetOpenStatus and ImmSetOpenStatus
+       from IMM2.DLL.
+
+2020-04-13  Štěpán Němec  <stepnem@gmail.com>
+
+       gnus-shorten-url: Improve and avoid args-out-of-range error
+
+       'gnus-shorten-url' (used by 'gnus-summary-browse-url') ignored
+       fragment identifiers and didn't check substring bounds, in some cases
+       leading to runtime errors, e.g.:
+
+         (gnus-shorten-url "https://some.url.with/path/and#also_a_long_target"; 
40)
+         ;; => Lisp error: (args-out-of-range "/path/and" -18 nil)
+
+       This commit makes it account for #fragments and fixes faulty string
+       computation, reusing existing helper function.  (bug#39980)
+
+       * lisp/vc/ediff-init.el (ediff-truncate-string-left): Rename to
+       'string-truncate-left' and move...
+       * lisp/emacs-lisp/subr-x.el (string-truncate-left):  ...here.
+       All callers changed.
+       * lisp/gnus/gnus-sum.el (gnus-shorten-url): Fix args-out-of-range
+       error, don't drop #fragments, use 'string-truncate-left'.
+
+2020-04-13  Andrea Corallo  <akrl@sdf.org>
+
+       * src/lread.c (Fload): Add comment.
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-04-13  Andrea Corallo  <akrl@sdf.org>
+
+       Revert "Fix org for eln new compilation folder layout"
+
+       This reverts commit f77f6ca77054ca6122df2742345710b7493ad293.
+
+2020-04-13  Andrea Corallo  <akrl@sdf.org>
+
+       Introduce load-true-file-name
+
+       * src/comp.c (maybe_defer_native_compilation): Use
+       `load-true-file-name' instead of `load-file-name'.
+
+       * src/lread.c (Fload, end_of_file_error, read1, read_list)
+       (init_lread, syms_of_lread): Add new `load-true-file-name' and
+       fake `load-file-name' value when loading .eln files.
+
+2020-04-13  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix last change
+
+       * lisp/mail/rmail.el (rmail-simplified-subject): A prefix can have
+       up to 4 characters, not 3.
+
+2020-04-13  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve support of "Re:" in Rmail
+
+       * lisp/mail/rmail.el (rmail-simplified-subject)
+       (rmail-reply-regexp): Recognize U+FF1A FULLWIDTH COLON as a colon
+       after "Re:"-type prefixes.
+       (rmail-re-abbrevs): New defcustom with localized abbreviations of
+       "Re:".
+       (rmail-reply-regexp): Use 'rmail-re-abbrevs'.  Recognize U+FF1A
+       in addition to the ASCII colon.
+
+       * etc/NEWS: Call out the new defcustom 'rmail-re-abbrevs'.
+
+2020-04-13  Juri Linkov  <juri@linkov.net>
+
+       Fix hi-lock test and add new test for case-fold (bug#40337)
+
+       * lisp/hi-lock.el (hi-lock--regexps-at-point): Handle font-lock faces.
+       (hi-lock-unface-buffer): Simplify default value handling.
+       (hi-lock-set-pattern): Add either lighter or regexp to
+       hi-lock-interactive-lighters.
+       (hi-lock-set-pattern): Put overlay prop hi-lock-overlay-regexp to
+       either lighter or regexp.
+
+       * test/lisp/hi-lock-tests.el (hi-lock-bug26666): Use "b" instead of "a".
+       (hi-lock-case-fold): New test.
+
+2020-04-12  Štěpán Němec  <stepnem@gmail.com>
+
+       Fix bootstrap compiler warnings about `read-library-name'
+
+       Introduced by
+
+       2020-03-28T22:16:28+01:00!stepnem@gmail.com
+       2c45091791 (load-library, locate-library: Use read-library-name)
+
+       Thanks to Juanma Barranquero <lekktu@gmail.com> for reporting.
+
+       * lisp/files.el:
+       * lisp/subr.el: Declare 'read-library-name'.
+
+2020-04-12  Philipp Stephani  <phst@google.com>
+
+       Fix error in 'call-process-region' when START is nil (Bug#40576)
+
+       * src/callproc.c (Fcall_process_region): Fix behavior when START is
+       nil and DELETE is non-nil.
+
+       * test/src/callproc-tests.el
+       (call-process-region-entire-buffer-with-delete): New unit test.
+
+2020-04-12  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-04-12  Andrea Corallo  <akrl@sdf.org>
+
+       * src/pdumper.c (dump_do_dump_relocation): Optimize native dump load.
+
+       Check just once if is a local build or Emacs got installed.
+
+2020-04-12  Andrea Corallo  <akrl@sdf.org>
+
+       Implement working make install for native build.
+
+2020-04-12  Andrea Corallo  <akrl@sdf.org>
+
+       Set invocation variables during dump load.
+
+       Vinvocation_directory must be set during dump load process to support
+       .eln load.
+
+       * src/pdumper.h: (pdumper_load): Add argv0 and original_pwd
+       parameters.
+
+       * src/pdumper.c (pdumper_load): Add argv0 and original_pwd
+       parameter plus call 'set_invocation_vars'.
+
+       * src/lisp.h (set_invocation_vars): New function.
+
+       * src/emacs.c (set_invocation_vars): New function.
+       (init_cmdargs): Move logic into 'set_invocation_vars' and call it.
+       (load_pdump): Add 'original_pwd' parameter and update calls to
+       'pdumper_load'.
+       (main): Set emacs_wd earlier and update call to 'pdumper_load'.
+
+2020-04-12  Andrea Corallo  <akrl@sdf.org>
+
+       Implement position independent dump.
+
+       Set the filename for every compilation unit as realtive to obtain a
+       position independent dump.
+
+       * lisp/loadup.el: Modify filename for every compilation unit as
+       position independent.
+
+       * src/pdumper.c (dump_do_dump_relocation): Update to be invocation
+       directory relative.
+
+2020-04-12  Andrea Corallo  <akrl@sdf.org>
+
+       * src/comp.c (native-comp-unit-set-file): New function.
+
+       * src/comp.c (native-comp-unit-file): Better parameter name.
+
+2020-04-12  Philipp Stephani  <phst@google.com>
+
+       Also use named functions for the ‘gv’ declare forms (Bug#40491)
+
+       * lisp/emacs-lisp/gv.el (gv--expander-defun-declaration)
+       (gv--setter-defun-declaration): New helper functions; use them.
+
+2020-04-12  Philipp Stephani  <phst@google.com>
+
+       Use named functions in {defun,macro}-declarations-alist (Bug#40491)
+
+       * lisp/emacs-lisp/byte-run.el 
(byte-run--set-advertised-calling-convention)
+       (byte-run--set-obsolete, byte-run--set-interactive-only)
+       (byte-run--set-pure, byte-run--set-side-effect-free)
+       (byte-run--set-compiler-macro, byte-run--set-doc-string)
+       (byte-run--set-indent, byte-run--set-debug)
+       (byte-run--set-no-font-lock-keyword): New helper functions.
+       (defun-declarations-alist, macro-declarations-alist): Use them.
+
+2020-04-12  Philipp Stephani  <phst@google.com>
+
+       Fix a bootstrap issue with unescaped character literal detection.
+
+       * src/lread.c (load_warn_unescaped_character_literals): Deal with the
+       case that 'byte-run--unescaped-character-literals-warning' isn't yet
+       defined.
+
+2020-04-12  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Remove UNSIGNED_CMP
+
+       I added this macro in 2011 to fix some signedness comparison bugs.
+       However, it’s a weird macro and the bugs can be fixed in a
+       more-straightforward way.  This helps performance slightly (0.5%) on my
+       platform (Fedora 31 x86-64, GCC 9.3.1 with -O2).
+       * src/casefiddle.c (do_casify_natnum): Use simple comparison
+       instead of UNSIGNED_CMP.
+       * src/character.h (CHAR_VALID_P, SINGLE_BYTE_CHAR_P, CHAR_STRING):
+       * src/composite.h (COMPOSITION_ENCODE_RULE_VALID):
+       * src/lisp.h (ASCII_CHAR_P):
+       Now an inline function, and uses simple comparison instead of
+       UNSIGNED_CMP.
+       * src/dispextern.h (FACE_FROM_ID, FACE_FROM_ID_OR_NULL)
+       (IMAGE_FROM_ID, IMAGE_OPT_FROM_ID): Move these to ...
+       * src/frame.h (FACE_FROM_ID, FACE_FROM_ID_OR_NULL)
+       (IMAGE_FROM_ID, IMAGE_OPT_FROM_ID): ... here, and make them
+       inline functions that no longer use UNSIGNED_CMP.
+       * src/keyboard.c (read_char): UNSIGNED_CMP is not needed here
+       since XFIXNAT always returns a nonnegative value.
+       * src/lisp.h (UNSIGNED_CMP): Remove; no longer used.
+
+2020-04-12  Juri Linkov  <juri@linkov.net>
+
+       * lisp/hi-lock.el (hi-lock-highlight-range): Bump default value 
(bug#40224)
+
+       * lisp/hi-lock.el (hi-lock-highlight-range): Change default value
+       from 200_000 to 2_000_000.
+
+2020-04-12  Juri Linkov  <juri@linkov.net>
+
+       Implement case-insensitivity in hi-lock (bug#40337)
+
+       * lisp/hi-lock.el (hi-lock-interactive-lighters): New buffer-local 
variable.
+       (hi-lock-mode): Set hi-lock-interactive-lighters to nil.
+       (hi-lock-line-face-buffer): Use case-fold-search and search-upper-case.
+       (hi-lock-face-buffer): Add new arg LIGHTER. Use case-fold-search,
+       search-upper-case and search-spaces-regexp.
+       (hi-lock-face-phrase-buffer): Don't call hi-lock-process-phrase.
+       Use case-fold-search, search-upper-case and search-whitespace-regexp.
+       (hi-lock-face-symbol-at-point): Use case-fold-search and 
search-upper-case.
+       (hi-lock-unface-buffer): Use hi-lock-interactive-lighters to get
+       a human-readable string for completion and x-popup-menu.
+       (hi-lock-process-phrase): Remove function.
+       (hi-lock-set-pattern): Add new args LIGHTER, CASE-FOLD, SPACES-REGEXP.
+       Set font-lock pattern to a search function.  Add mapping from
+       lighter or regexp to pattern to hi-lock-interactive-lighters.
+       Let-bind case-fold-search and search-spaces-regexp in search functions.
+
+       * lisp/isearch.el (isearch--highlight-regexp-or-lines): Replace ugly 
code
+       with let-binding of case-fold-search, search-upper-case, 
search-spaces-regexp.
+       (isearch-highlight-regexp, isearch-highlight-lines-matching-regexp):
+       Use lambda.
+
+2020-04-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * etc/NEWS: Mention 'cl-font-lock-built-in-mode'
+
+2020-04-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/cl-font-lock.el: Fix header and make it a minor mode
+
+       Change copyright to FSF and licence to GPLv3+.
+       Tweak Commentary (the code doesn't seem to provide the lambda
+       prettification mentioned).
+
+       (cl-font-lock-add-regexes): Remove macro.
+       (cl-font-lock-built-in-keywords): New variable.
+       (cl-font-lock-built-in-mode): New minor mode.
+
+2020-04-11  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/cl-font-lock.el: New file
+
+       Taken from commit 1a54066611da213626ab69ea426ba3c63ece3438
+       of https://github.com/cl-font-lock/cl-font-lock,
+       but with names reverted to a `cl-font-lock-` prefix.
+
+2020-04-11  Mattias Engdegård  <mattiase@acm.org>
+
+       Allow ENCODE_FILE and DECODE_FILE to use no-copy conversion
+
+       They already did return their argument under some circumstances;
+       this change broadens it to further reduce allocation in common cases
+       (bug#40407).
+
+       * src/coding.c (convert_string_nocopy): New function.
+       (decode_file_name, encode_file_name): Use convert_string_nocopy.
+       * src/coding.h (ENCODE_FILE, DECODE_FILE): Note the nocopy semantics.
+
+2020-04-11  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       fd27685c1e (origin/emacs-27) ; * doc/lispref/keymaps.texi (Extended M...
+       6057d79a4e * doc/lispref/keymaps.texi (Extended Menu Items): Tweak :k...
+       17a1bb5a03 Fix redisplay when scrolling under redisplay-dont-pause
+       90321f595c Fix face extension in pulse.el
+       36c42d2a30 * doc/misc/tramp.texi (Bug Reports): Avoid line breaks in ...
+       d5750af151 Avoid assertion violation in intervals.c
+       18d1bc0a09 Improve documentation of 'jit-lock-contextually'
+       08486f4cae Speed up 'resize-mode' child frames a little
+       f451ef9308 ; * etc/NEWS: Mention 'executing-macro' in removed vars.
+       c49d379f17 Fix some problems with moving and resizing child frames
+
+       # Conflicts:
+       #       etc/NEWS
+
+2020-04-11  Federico Tedin  <federicotedin@gmail.com>
+
+       Reword documentation for eshell-variable-aliases-list
+
+       * lisp/eshell/esh-var.el (eshell-variable-aliases-list): Update
+       documentation string to avoid passive tense.
+
+2020-04-11  Michael Albinus  <michael.albinus@gmx.de>
+
+       * lisp/net/tramp.el (tramp-action-process-alive): Read pending output.
+
+2020-04-09  Mattias Engdegård  <mattiase@acm.org>
+
+       Set last-coding-system-used upon ASCII conversion bypass (bug#40407)
+
+       Spotted by Kazuhiro Ito.
+
+       * src/coding.c (code_convert_string):
+       Set Vlast_coding_system if appropriate.
+       * test/src/coding-tests.el (coding-nocopy-ascii): Add test.
+
+2020-04-09  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix display of boxed header-line
+
+       * src/xdisp.c (init_iterator): Set IT->face_box_p flag for a boxed
+       mode/header/tab line.  (Bug#40521)
+
+2020-04-09  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix ASCII-only conversion logic (bug#40407)
+
+       To sidestep conversion altogether when EOL conversion applies, we must
+       either be encoding a string without NL, or decoding without CR.
+
+       * src/coding.c (string_ascii_p): Revert to a pure predicate.
+       (code_convert_string): Fix logic.  Don't use uninitialised
+       ascii_p (removed).  Use memchr to detect CR or LF in string when needed.
+       * test/src/coding-tests.el (coding-nocopy-ascii):
+       Update tests to include encodings with explicit EOL conversions.
+
+2020-04-09  Mattias Engdegård  <mattiase@acm.org>
+
+       chinese-hz is not ASCII compatible (bug#40407)
+
+       * lisp/language/chinese.el: Disable :ascii-compatible-p for chinese-hz.
+       * test/lisp/international/mule-tests.el (mule-hz): New test.
+
+2020-04-09  Mattias Engdegård  <mattiase@acm.org>
+
+       Don't crash with invalid argument in check-coding-systems-region
+
+       * src/coding.c (Fcheck_coding_systems_region): Don't crash if
+       the third arg contains something that isn't a coding system.
+       * test/src/coding-tests.el (coding-check-coding-systems-region):
+       New test.
+
+2020-04-09  Mattias Engdegård  <mattiase@acm.org>
+
+       Don't rely on copying in {EN,DE}CODE_FILE
+
+       Callers of ENCODE_FILE and DECODE_FILE should not assume that these
+       functions always return a new string (bug#40407).
+
+       * src/w32fns.c (Fw32_shell_execute):
+       * src/w32proc.c (Fw32_application_type):
+       Sink taking the address of a Lisp string past GC points.
+       Copy values returned from ENCODE_FILE before mutating them.
+
+2020-04-09  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix decoding of ASCII strings with embedded CR characters
+
+       * src/coding.c (string_ascii_p): Return a negative value if an
+       all-ASCII string STR includes the CR character, otherwise a
+       positive value.
+       (code_convert_string): If the string is ASCII, but includes CR
+       characters, use the fast path only if EOL doesn't need to be
+       decoded.  (Bug#40519)
+
+       * test/src/coding-tests.el (coding-nocopy-ascii): Add more tests
+       for bug#40519.
+
+2020-04-09  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix decoding ASCII strings with embedded CR characters
+
+       * src/coding.c (string_ascii_p): Return a negative value if an
+       all-ASCII string STR includes the CR character, otherwise a
+       positive value.
+       (code_convert_string): If the string is ASCII, but includes CR
+       characters, use the fast path only if EOL doesn't need to be
+       decoded.  (Bug#40519)
+
+       * test/src/coding-tests.el (coding-nocopy-ascii): Add tests for
+       bug#40519.
+
+2020-04-08  Eli Zaretskii  <eliz@gnu.org>
+
+       Support character composition for Hangul jamo
+
+       * lisp/language/korean.el: Add composition rules for conjoining
+       Hangul jamo.  (Bug#40502)
+
+2020-04-08  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Revert my KEY_OPS_CFLAGS change to src/Makefile.in
+
+       Now that -Og inlining has been improved this is no longer helpful.
+       * src/Makefile.in (KEY_OPS_CFLAGS): Remove.  All uses removed.
+       This improved CPU performance of ‘make compile-always’ by 5% on my
+       platform, which was gcc -Og, GCC 9.3.1 20200317 (Red Hat 9.3.1-1),
+       Fedora 31 x86-64 (AMD Phenom II X4 910e, circa 2010).
+
+2020-04-08  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Improve inlining when compiling with -Og
+
+       * src/conf_post.h (EXTERN_INLINE) [!EMACS_EXTERN_INLINE]:
+       Make it static inline, not merely static.  This is a worthwhile
+       performance improvement on my two platforms A and B (see below).
+       On my platform A this change improves user+system CPU performance of
+       ‘make compile-always’ by 52% on an -Og build, and by 1.4% on the
+       default -O2 build.  On my platform B this improves the same benchmark
+       by 41% on an -Og build, and by -0.8% on the default -O2 build.
+       That "-0.8%" is a small negative for this change, and I recall that
+       it is why I didn't make this change earlier.  However, Platform B uses
+       an older GCC so we needn't worry overmuch about this small negative.
+
+       With this change the performance advantage of -O2 over -Og has dropped
+       on platform A; formerly -O2 was 87% faster than -Og, and now it is
+       only 25% faster.  On platform B the performance advantage of -O2 over
+       -Og has dropped from being 62% faster to being 14% faster.
+
+       Platform A is GCC 9.3.1 20200317 (Red Hat 9.3.1-1) on Fedora 31
+       x86-64 (AMD Phenom II X4 910e, circa 2010).  Platform B is GCC (Ubuntu
+       7.5.0-3ubuntu1~18.04) 7.5.0 on Ubuntu 18.04.4 (Intel Xeon E3-1225 V2,
+       circa 2012).
+
+       This patch was inspired by a suggestion by Andrea Corallo in:
+       https://lists.gnu.org/r/emacs-devel/2020-04/msg00263.html
+
+2020-04-07  Robert Pluim  <rpluim@gmail.com>
+
+       Add :coding support to open-network-stream and open-gnutls-stream
+
+       * doc/lispref/processes.texi (Network): Describe :coding keyword 
support.
+
+       * doc/misc/emacs-gnutls.texi (Help For Developers): Describe :coding
+       keyword support.
+
+       * etc/NEWS: Announce change to open-network-stream and
+       open-gnutls-stream.
+
+       * lisp/net/gnutls.el (open-gnutls-stream): Add support for :coding, 
pass it
+       down to open-network-stream.
+
+       * lisp/net/network-stream.el (open-network-stream)
+       (network-stream-open-plain, network-stream-open-starttls): Add
+       support for :coding, pass it down to make-network-process.
+       (network-stream-open-shell): Add support-for :coding, use
+       set-process-coding-system to set it after process creation.
+
+2020-04-07  Robert Pluim  <rpluim@gmail.com>
+
+       Use length field when dns-query is using TCP
+
+       * net/dns.el (dns-write): Correct spelling in docstring.
+       (dns-read): Add optional tcp-p parameter, skip 2-byte length field
+       if non-nil.
+       (dns-query): Tell dns-read and dns-write if we're using TCP.
+
+2020-04-06  Mattias Engdegård  <mattiase@acm.org>
+
+       utf-7 and utf-7-imap are not ASCII-compatible (bug#40407)
+
+       * lisp/international/mule-conf.el (utf-7, utf-7-imap):
+       Add expedient to disable the :ascii-compatible-p property set
+       automatically by define-coding-system.
+       * test/lisp/international/mule-tests.el (mule-utf-7): New test.
+
+2020-04-06  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Pacify gcc in xpm_scan
+
+       * src/image.c (xpm_scan): Redo a loop for clarity.
+       This also pacifies --enable-gcc-warnings (GCC 9.3.1 x86-64 with -Og).
+
+2020-04-06  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+       * lisp/emacs-lisp/comp.el (comp-c-func-name): Fix for M-x disassemble
+
+       * src/comp.c (emit_FIXNUMP): Don't emit a shift when unnecessary.
+
+2020-04-06  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix case that $PATH is longer than 4096 chars in Tramp
+
+       * lisp/net/tramp-sh.el (tramp-set-remote-path): Use `tramp-send-command'
+       directly.
+
+       * test/lisp/net/tramp-tests.el (tramp-test-vec): New defconst.
+       (tramp--test-enabled, tramp--test-message)
+       (tramp--test-backtrace, tramp-test03-file-name-host-rules)
+       (tramp-test18-file-attributes, tramp-test20-file-modes)
+       (tramp-test26-file-name-completion)
+       (tramp-test33-environment-variables, tramp-test35-remote-path)
+       (tramp-test36-vc-registered, )
+       (tramp-test43-asynchronous-requests): Use it.
+       (tramp-test29-start-file-process, tramp-test30-make-process)
+       (tramp-test33-environment-variables): Remove Hydra specific result.
+       (tramp-test35-remote-path): Rewrite partially.
+
+2020-04-06  Yuan Fu  <casouri@gmail.com>
+
+       Unify and improve gdb-mi source buffer display logic
+
+       Unify the behavior of source buffer display for gdb-mi.  Before this
+       change, stepping and other gdb command handlers use 'gud-display-line',
+       and 'gdb-goto-breakpoint' uses 'gdb-display-source-buffer'.  Now 
whenever
+       gdb-mi code tries to open a source buffer, 'gdb-display-source-buffer'
+       is used.  Also, simplify the logic in 'gdb-display-source-buffer' and
+       add a feature to limit the maximum number of source windows.
+
+       * doc/emacs/building.texi (GDB User Interface Layout): Explain source
+       file display in GDB.
+       * etc/NEWS (gdb-mi): Add news about source display.
+       * lisp/progmodes/gdb-mi.el (gdb-source-window): Remove variable,
+       change to 'gdb-source-window-list'.
+       (gdb-source-window-list): New variable.
+       (gdb-display-source-buffer-action,
+       gdb-max-source-window-count): New options.
+       (gdb-init-1, gdb-setup-windows, gdb-load-window-configuration,
+       gdb-restore-windows): Use 'gdb-source-window' rather than
+       'gdb-source-window-list'.
+       (gdb-save-window-configuration): Use 'gdb-source-window' rather than
+       'gdb-source-window-list'.  And consider any buffer that is not a
+       command or function buffer as a source buffer.
+       (gdb-display-source-buffer): Use new logic.
+       (gdb-goto-breakpoint): Remove 'display-buffer' call
+       and don't set 'gdb-source-buffer' anymore.
+       * lisp/progmodes/gud.el (gud-display-line): If used by gdb-mi, use
+       'gdb-display-source-buffer' rather than 'display-buffer'.  Don't set
+       'gdb-source-buffer' anymore.
+
+2020-04-06  Martin Rudalics  <rudalics@gmx.at>
+
+       Fix problems when dragging frames with the mouse
+
+       Re-implement 'mouse-drag-frame' via two new functions -
+       'mouse-drag-frame-resize' and 'mouse-drag-frame-move'.  This is
+       needed because with some toolkits the notifications for frame
+       movement and resizing arrive asynchronously, breaking any
+       calculations using intermediate frame sizes and positions.
+
+       * lisp/mouse.el (mouse-drag-mode-line, mouse-drag-left-edge)
+       (mouse-drag-top-left-corner, mouse-drag-top-edge)
+       (mouse-drag-top-right-corner, mouse-drag-right-edge)
+       (mouse-drag-bottom-right-corner, mouse-drag-bottom-edge)
+       (mouse-drag-bottom-left-corner): Call 'mouse-drag-frame-resize'
+       instead of 'mouse-drag-frame'.
+       (mouse-drag-frame): Split into two new functions -
+       'mouse-drag-frame-move' and 'mouse-drag-frame-resize'.
+       (mouse-drag-frame-resize, mouse-drag-frame-move): New functions
+       to implement functionality of the removed 'mouse-drag-frame'.
+
+2020-04-05  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+       * src/comp.c (emit_XFIXNUM): Fix for LSB_TAG plus annotate a FIXME.
+
+       * src/comp.c (emit_const_lisp_obj, emit_mvar_val): Fix.
+
+       * src/comp.c (hash_native_abi): Fix assertion.
+
+2020-04-05  Andrea Corallo  <akrl@sdf.org>
+
+       * src/comp.c (emit_binary_op): New function.
+
+       Wrap gcc_jit_context_new_binary_op within emit_binary_op to make sure
+       input type are coherent and save a slew of code.
+
+2020-04-05  Andrea Corallo  <akrl@sdf.org>
+
+       * src/comp.c: Emit cast only when necessary.
+
+       Coerce only when the destination type is different from the current
+       one.
+
+2020-04-05  Andrea Corallo  <akrl@sdf.org>
+
+       * src/comp.c: Add MSB TAG and wide int support.
+
+       * src/comp.c: Clean-up unnecessary field declaration.
+
+       * lisp/emacs-lisp/comp.el (native-compile): Better documentation.
+
+2020-04-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * src/coding.c (code_convert_string): Fix type mismatches.
+
+2020-04-05  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix a recent change in bignum.c
+
+       * src/bignum.c (check_int_nonnegative): Fix a recent change.
+       Reported by Glenn Morris <rgm@gnu.org>.
+
+2020-04-05  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix thinko in tramp-cache.el
+
+       * lisp/net/tramp-cache.el (tramp-set-connection-property)
+       (tramp-flush-connection-property)
+       (tramp-flush-connection-properties): Use `tramp-file-name-p'.
+
+2020-04-05  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       6de20c7eab (origin/emacs-27) Fix syntax error in man page.
+       f8607d3c03 Handle filling of indented ChangeLog function entries
+       7e78f0d1b2 Fix void-variable n-reb in re-builder (Bug#40409)
+       452d776a5d Fix small bug in copy_string_contents.
+       fa823653ff Fix invocations of gpg from Gnus
+       d4f51d0a2e Don't draw GTK's internal border and tab bar on top of eac...
+       38731d504e ; * src/buffer.c (syms_of_buffer) <inhibit-read-only>: Doc...
+       44ac9e48bb Tweak htmlfontify's generated output
+
+2020-04-05  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       ac3da1dd96 Handle project--files-in-directory finding no files better
+       650a664ccd Let imenu to work on the menu bar when its list is a singl...
+
+2020-04-05  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/cl-macs.el (cl-defstruct): Avoid known cl-defsubst 
breakage
+
+2020-04-05  Mattias Engdegård  <mattiase@acm.org>
+
+       Avoid expensive recoding for ASCII identity cases (bug#40407)
+
+       Optimise for the common case of encoding or decoding an ASCII-only
+       string using an ASCII-compatible coding, for file names in particular.
+
+       * src/coding.c (string_ascii_p): New function.
+       (code_convert_string): Return the input string for ASCII-only inputs
+       and ASCII-compatible codings.
+       * test/src/coding-tests.el (coding-nocopy-ascii): New test.
+
+2020-04-05  Mattias Engdegård  <mattiase@acm.org>
+
+       Suppress relint diagnostics in rx-tests.el
+
+       * test/lisp/emacs-lisp/rx-tests.el (rx-char-any, rx-any):
+       Suppress relint complaints; these regexps are intentionally bad.
+
+2020-04-05  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix inverted NOCOPY encode/decode parameter (bug#40407)
+
+       In {encode,decode}-coding-string, the NOCOPY parameter had the
+       opposite effect to what was intended and documented.  This 18 year old
+       bug (introduced in 4031e2bf0a) only affected calls with CODING-SYSTEM
+       being nil.
+
+       * src/coding.c (code_convert_string): Correct use of NOCOPY.
+       * test/src/coding-tests.el (coding-nocopy-trivial): New test.
+
+2020-04-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Improve integer range checking
+
+       * src/bignum.c (check_integer_range, check_uinteger_max)
+       (check_int_nonnegative): New functions.
+       * src/frame.c (check_frame_pixels): New function.
+       (Fset_frame_height, Fset_frame_width, Fset_frame_size): Use it.
+       * src/lisp.h (CHECK_RANGED_INTEGER, CHECK_TYPE_RANGED_INTEGER):
+       Remove these macros.  Unless otherwise specified, all callers
+       replaced by calls to check_integer_range, check_uinteger_range,
+       check_int_nonnegative.
+       * src/frame.c (gui_set_right_divider_width)
+       (gui_set_bottom_divider_width):
+       * src/nsfns.m (ns_set_internal_border_width):
+       * src/xfns.c (x_set_internal_border_width):
+       Using check_int_nonnegative means these functions no longer
+       incorrectly reject negative bignums; they treat them as 0,
+       just like negative fixnums.
+
+2020-04-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * src/lisp.h: Update overly-optimistic comment.
+
+2020-04-05  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/arc-mode.el: Rewrite displaying the summaries
+
+       Completely rewrite the code that displayes the summaries, so all
+       backends share the same code.
+
+       (archive--summarize-descs): New function.
+       (archive-arc-summarize, archive-lzh-summarize, archive-zip-summarize)
+       (archive-zoo-summarize, archive-rar-summarize, archive-7z-summarize)
+       (archive-ar-summarize): Use it.
+       (archive-hidden-columns): New custom.
+       (archive-alternate-hidden-columns): New const.
+       (archive-mode-map): Always enable `archive-alternate-display`.
+       (archive-alternate-display): Set `archive-hidden-columns`.
+       (archive-hideshow-column): New command.
+       (archive--fit, archive--fit2, archive--enabled-p): New aux functions.
+
+2020-04-05  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/arc-mode.el: Remove make-(local-variable|variable-buffer-local)
+
+       (archive-file-list-start, archive-file-list-end)
+       (archive-proper-file-start, archive-file-name-indent, archive-remote)
+       (archive-member-coding-system, archive-alternate-display)
+       (archive-file-name-coding-system, archive-files): Use `defvar-local`.
+       (archive-extract): Use `setq-local`.
+       (archive-get-descr): Use `user-error` when clicking on a directory.
+
+2020-04-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Avoid SAFE_ALLOCA in Fstring, Funibyte_string
+
+       * src/character.c (Fstring, Funibyte_string):
+       Redo to avoid the need for a temporary array allocation
+       and then a copying from that array to the destination.
+
+2020-04-05  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/arc-mode.el (archive--file-desc): Add fields from other structs
+
+       Add fields `size`, `time` (used by all backends) as well as
+       `pos`, `ratio`, `uid`, and `gid` (used only be some backends).
+
+       (archive-arc--file-desc, archive-rar--file-desc, archive-ar--file-desc)
+       (archive-lzh--file-desc, archive-zip--file-desc, archive-7z--file-desc):
+       Remove defstructs.
+       (archive-arc-summarize): Record size and time in the descrs.
+       (archive-lzh-summarize): Record size, time, uid, and gid in the descrs.
+       (archive-zip-summarize): Record size and time in the descrs.
+       (archive-zoo-summarize): Record size and time in the descrs.
+       (archive-rar-summarize): Adjust to use of `archive--file-desc`.
+       (archive-7z-summarize): Adjust to new constructor.
+       (archive-ar-summarize): Adjust to use of `archive--file-desc`.
+
+       (archive-ar-write-file-member): Remove mode-to-int hack.
+       (archive-get-descr): Directory entries aren't regular members.
+
+2020-04-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Revert unneeded part of gcc -Og change
+
+       * configure.ac (DEFINE_KEY_OPS_AS_MACROS):
+       Undo this recent change to configure.ac; it’s not needed.
+
+2020-04-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * lib-src/Makefile.in (LINK_CFLAGS): Remove; unused.
+
+2020-04-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Default gcc -Og to inlining key ops
+
+       Problem reported by Martin Rudalics in:
+       https://lists.gnu.org/r/emacs-devel/2020-04/msg00195.html
+       * configure.ac (DEFINE_KEY_OPS_AS_MACROS): Define if -Og.
+       * src/Makefile.in (KEY_OPS_CFLAGS): New macro.
+       (EMACS_CFLAGS): Use it.
+       * src/lisp.h (DEFINE_KEY_OPS_AS_MACROS): Let the gcc command line
+       specify it.  Remove use of undocumented INLINING macro.
+
+2020-04-04  Eli Zaretskii  <eliz@gnu.org>
+
+       Support the "explore" command in gdb-mi.el
+
+       * lisp/progmodes/gdb-mi.el (gdb-control-commands-regexp): Add
+       support for "explore", "explore value", and "explore type".
+       Allow more than one word after control commands.
+       (gdb-gdb): Decrease gdb-control-level when we get the "(gdb)"
+       prompt, which signals that "explore" exited.  (Bug#40250)
+
+2020-04-04  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix face spec handling for 'default' "terminal class"
+
+       * lisp/faces.el (face-spec-choose): Reverse order of 'defaults'
+       and 'result' when generating attribute list, so that the spec for
+       'default' "terminal class" is indeed overridden by the actual
+       class's spec, per the documentation.  (Bug#40336)
+
+2020-04-04  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/arc-mode.el: Remove unused struct fields
+
+       (archive--file-desc): Remove `case-fiddled`.
+       Change all subtypes's constructors as their callers accordingly.
+       (archive--file-desc-case-fiddled): New function.
+       (archive-int-to-mode): Accept a nil input.
+       Make all callers take advantage of it.
+       (archive-arc-rename-entry): Use `make-string`.
+       (archive-zip--file-desc): Change `pos+len` field into `pos` field.
+       (archive-zip-chmod-entry): Simplify accordingly.
+       (archive-zip-summarize): Don't bother with `lheader` which was not used.
+       (archive-zoo--file-desc): Delete struct; use archive--file-desc instead.
+       (archive-7z--file-desc): Remove `user` and `group` fields.
+       Adjust constructor and its caller.
+       (archive-ar-summarize): Use `archive-int-to-mode`.
+
+2020-04-03  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/arc-mode.el: Use cl-structs rather than vectors
+
+       (archive--file-desc, archive--file-summary, archive-arc--file-desc)
+       (archive-lzh--file-desc, archive-zip--file-desc)
+       (archive-zoo--file-desc, archive-rar--file-desc)
+       (archive-7z--file-desc, archive-ar--file-desc): New structs.
+
+       (archive-get-descr, archive-mode, archive-summarize-files)
+       (archive-maybe-copy, archive-extract, archive-*-write-file-member)
+       (archive-expunge, archive-arc-summarize, archive-arc-rename-entry)
+       (archive-lzh-summarize, archive-lzh-rename-entry, archive-lzh-ogm)
+       (archive-zip-summarize, archive-zip-write-file-member)
+       (archive-zip-chmod-entry, archive-zoo-summarize)
+       (archive-rar-summarize, archive-7z-summarize, archive-ar-summarize)
+       (archive-ar-write-file-member): Use struct constructors and accessors
+       instead of `vector` and `aref`.
+
+       (archive-calc-mode): Remove `error` arg which was always non-nil;
+       adjust all callers.
+       Rewrite using `string-to-number` and `file-modes-symbolic-to-number`.
+
+2020-04-03  Alan Mackenzie  <acm@muc.de>
+
+       C++ Mode: recognize brace blocks without the hitherto required = sign
+
+       * lisp/progmodes/cc-engine.el (c-looking-at-or-maybe-in-bracelist): Add 
code
+       to recognize a literal brace expression following an array declaration 
for
+       C++.
+       (c-looking-at-inexpr-block): Replace c-symbol-chars with 
c-symbol-char-key,
+       fixing a coding error.
+
+2020-04-03  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-04-03  Andrea Corallo  <akrl@sdf.org>
+
+       src/comp.c: Fix i386
+
+       In i386 ABI parameter passing of structs (and unions) is done as
+       pointer + size.  Surprisingly this is done *always* even if the
+       structure is known to be word size.
+
+2020-04-03  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/arc-mode.el (archive-ar-write-file-member): New function
+
+       (archive-ar--name): New function, extracted from `archive-ar-summarize`.
+       (archive-ar-extract): Use it.
+       (archive-ar-summarize): Use it.  Put the extname in the slot 0 of the
+       desc vectors.
+
+2020-04-03  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/arc-mode.el: Remove redundant `:group`s
+
+       (archive-arc, archive-lzh, archive-zip, archive-zoo): Move them
+       to their corresponding defcustom.
+       (archive-7z): New group, that used to be missing.
+
+2020-04-03  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/arc-mode.el: Use lexical-binding
+
+       (arc-insert-unibyte): Simplify.
+       (archive--mode-revert): Rename from `archive-mode-revert` and adjust
+       for use as an :around advice.
+       (archive-mode): Use setq-local.  Use `add-function` to hook into
+       `revert-buffer-function`.
+       (archive-summarize): Don't use `set` on a hook.
+
+2020-04-03  Robert Pluim  <rpluim@gmail.com>
+
+       Check for IPv6 servers in dns.el
+
+       * lisp/net/dns.el (dns-set-servers): Set dns-servers to nil when we
+       don't find any DNS servers with nslookup.  Add support for IPv6
+       servers.  (Bug#40248).
+       (dns-make-network-process): Check for datagram process support before
+       creating a datagram process.
+       (dns-query): Return nil if dns-servers is nil.
+
+2020-04-03  Robert Pluim  <rpluim@gmail.com>
+
+       Make make-{network,serial}-process handle :coding nil consistently
+
+       The handling of :coding nil was different between
+       make-{network,serial}-process and make-{pipe}process.  Now they all
+       handle :coding nil as if :coding had not been specified.
+
+       * src/process.c (Fmake_serial_process)
+       (set_network_socket_coding_system): Use plist-get to check if
+       :coding has been specified instead of plist-member, to ensure that
+       ":coding nil" does not override coding-system-for-{read,write}.
+
+       * test/lisp/net/network-stream-tests.el
+       (check-network-process-coding-system-bind)
+       (check-network-process-coding-system-no-override)
+       (check-network-process-coding-system-override): New tests.
+
+       * etc/NEWS: Describe change in make-network-process and
+       make-serial-process :coding behavior.
+
+2020-04-03  Ernest N. Mamikonyan  <Ernest.Mamikonyan@sig.com>  (tiny change)
+
+       Update texinfo.el following changes in 'tex-start-options-string'
+
+       * lisp/textmodes/texinfo.el (texinfo-texi2dvi-options): New
+       defcustom.
+       (texinfo-tex-buffer): Take 'tex-start-options' from
+       'texinfo-texi2dvi-options'.  (Bug#40001)
+
+       * etc/NEWS: Mention the new option.
+
+2020-04-03  Štěpán Němec  <stepnem@gmail.com>
+
+       load-library, locate-library: Use read-library-name
+
+       * lisp/emacs-lisp/find-func.el (read-library-name): Add autoload
+       cookie.
+       * lisp/files.el (load-library)
+       * lisp/subr.el (locate-library): Use 'read-library-name' when called
+       interactively. (bug#6652 bug#6679)
+
+2020-04-03  Asher Gordon  <AsDaGo@posteo.net>
+
+       Fix movement commands in gomoku
+
+       * lisp/play/gomoku.el (gomoku-mode-map): Bind cursor motion keys
+       to gomoku-specific commands.
+       (gomoku-point-x, gomoku-move-right, gomoku-move-left): New
+       commands.
+       (gomoku--intangible, gomoku-move-ne, gomoku-move-se)
+       (gomoku-move-nw, gomoku-move-sw): Call gomoku-move-left and
+       gomoku-move-right instead of forward-char and backward-char.
+       (Bug#40169)
+
+       * etc/NEWS: Call out the changes.
+
+2020-04-03  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve last change
+
+       * lisp/calendar/time-date.el (date-days-in-month): Improve the
+       error message text and make sure MONTH is a number.  (Bug#40217)
+
+2020-04-03  Alex Branham  <alex.branham@gmail.com>
+
+       Error out if 'date-days-in-month' is given an invalid month
+
+       * lisp/calendar/time-date.el (date-days-in-month): Add test for
+       month validity; signal an error if it isn't.  (Bug#40217)
+       * test/lisp/calendar/time-date-tests.el (test-days-in-month): Add
+       a test for the new error.
+
+2020-04-03  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-04-03  Ashish SHUKLA  <ashish.is@lostca.se>
+
+       configure.ac: switch to POSIX sh behaviour
+
+2020-04-03  Federico Tedin  <federicotedin@gmail.com>
+
+       Copy INSIDE_EMACS env variable to subprocesses in Eshell (Bug#25496)
+
+       * lisp/eshell/em-dirs.el (eshell-dirs-initialize): Add INSIDE_EMACS
+       variable to buffer-local value of eshell-variable-aliases-alist.
+       (eshell-inside-emacs): Add new constant used for INSIDE_EMACS.
+       * lisp/eshell/esh-var.el (eshell-variable-aliases-list): Update doc
+       string; remove mention of eshell-user-aliases-list and explain that
+       variables can optionally be copied to subprocesses' environments.
+       * test/lisp/eshell/eshell-tests.el (eshell-test/inside-emacs-var): Add
+       test for the INSIDE_EMACS variable.
+       * etc/NEWS: Announce changes.
+
+2020-04-03  Juri Linkov  <juri@linkov.net>
+
+       * lisp/vc/vc-dir.el: Commands to mark un/registered files (bug#34949)
+
+       * lisp/vc/vc-dir.el (vc-dir-mark-state-files): New function.
+       (vc-dir-mark-registered-files)
+       (vc-dir-mark-unregistered-files): New commands.
+       (vc-dir-mode-map): Bind vc-dir-mark-registered-files to '* r'.
+       (vc-dir-menu-map): Add menu entries for
+       vc-dir-mark-registered-files and vc-dir-mark-unregistered-files.
+
+2020-04-02  Juri Linkov  <juri@linkov.net>
+
+       * lisp/window.el (display-buffer): Extend doc with body-function 
(bug#39822)
+
+2020-04-02  Alexandre Adolphe  <alexandre.adolphe@gmail.com>
+
+       Allow negative line width for :box face attribute
+
+       Separate values for box line width and height and allow both to be
+       negative which makes the visual width and height of the boxed string
+       unchanged (Bug#13011).
+
+       * doc/lispref/display.texi (Face Attributes): Modify :box attribute
+       description to reflect the new possibilities.
+       * lisp/cus-face.el (custom-face-attributes): Set box attribute to get
+       two integer to set vertical and horizontal width and modify pre-filter
+       to accept dotted list of two int as valid box attribute.
+       * src/dispextern.h (face): Use two int for box horizontal and vertical
+       line width.
+
+       * src/nsfont.m (nsfont_draw): Use new face attributes.
+       * src/nsterm.m (ns_draw_box, ns_draw_relief): Support separated
+       horizontal and vertical box line width.
+       (ns_dumpglyphs_box_or_relief, ns_maybe_dumpglyphs_background)
+       (ns_dumpglyphs_image, ns_draw_glyph_string_foreground)
+       (ns_draw_composite_glyph_string_foreground): Use new face attributes.
+
+       * src/w32term.c (w32_draw_box_rect, w32_draw_relief_rect): Support
+       separated horizontal and vertical box line width.
+       (x_draw_glyph_string_background, x_draw_glyph_string_foreground)
+       (x_draw_composite_glyph_string_foreground)
+       (x_draw_glyphless_glyph_string_foreground, x_draw_glyph_string_box)
+       (x_draw_image_foreground, x_draw_image_relief)
+       (w32_draw_image_foreground_1, x_draw_image_glyph_string): Use new face
+       attributes.
+
+       * src/xfaces.c (Sinternal_set_lisp_face_attribute, realize_x_face):
+       Accept box attribute as a list of two ints.
+
+       * src/xdisp.c (estimate_mode_line_height, produce_image_glyph)
+       (produce_xwidget_glyph, x_produce_glyphs): Use new face attributes.
+       * src/xterm.c (x_draw_box_rect, x_draw_relief_rect): Support separated
+       horizontal and vertical box line width.
+       (x_draw_glyph_string_background, x_draw_glyph_string_foreground)
+       (x_draw_composite_glyph_string_foreground)
+       (x_draw_glyphless_glyph_string_foreground, x_draw_glyph_string_box)
+       (x_draw_image_foreground, x_draw_image_relief, 
x_draw_image_foreground_1)
+       (x_draw_image_glyph_string): Use new face attributes.
+
+2020-04-01  Andreas Schwab  <schwab@linux-m68k.org>
+
+       Fix compilation with CHECK_STRUCTS
+
+       * src/pdumper.c (dump_buffer): Update hash of struct buffer.
+
+2020-04-01  Michael Albinus  <michael.albinus@gmx.de>
+
+       Avoid error messages loading trampver.el
+
+       * lisp/net/trampver.el (tramp-repository-branch)
+       (tramp-repository-version): Bind `debug-on-error' to nil.
+
+2020-04-01  Filipp Gunbin  <fgunbin@fastmail.fm>
+
+       javac support in compilation-parse-errors rules
+
+       * etc/compilation.txt: Add doc and example.
+       * lisp/progmodes/compile.el (compilation-error-regexp-alist-alist):
+       Add javac rule.
+       (compilation-parse-errors): Fix file/line/col test, so that
+       lambda/closure (which are valid values) don't match.
+       * test/lisp/progmodes/compile-tests.el
+       (compile-tests--test-regexps-data, compile-test-error-regexps): Add
+       test.
+
+2020-04-01  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Remove `all_buffers` and the associated `next` field of buffers
+
+       * src/alloc.c (enum mem_type): Remove MEM_TYPE_BUFFER.
+       (allocate_buffer): Allocate like any other pseudovector.
+       Don't register on `all_buffers` any more.
+       (live_buffer_holding, live_buffer_p): Delete functions.
+       (mark_maybe_object, valid_lisp_object_p): Don't pay attention to
+       MEM_TYPE_BUFFER any more.
+       (garbage_collect): Only compact the live buffers.
+       (mark_buffer): Mark the undo_list of dead buffers here.
+       (mark_object): Buffers are normal pseudovectors now.
+       (sweep_buffers): Don't do the actual sweep here, just cleanup the
+       markers and only for live buffers.
+
+       * src/buffer.c (all_buffers): Remove variable.
+       (Fkill_buffer): Don't check indirect dead buffers.
+       Set the undo_list before we remove ourselves from the list of live 
buffers.
+       (Fbuffer_swap_text, Fset_buffer_multibyte): Don't check indirect dead
+       buffers.
+       (init_buffer_once): Don't set `all_buffers`.
+       (init_buffer): Don't map new memory for dead buffers.
+
+       * src/buffer.h (struct buffer): Remove `next` field.
+       (FOR_EACH_BUFFER): Remove macro.
+
+       * src/pdumper.c (dump_buffer): Don't dump the `next` field.
+
+2020-04-01  Noam Postavsky  <npostavs@gmail.com>
+
+       Don't lose point during fileloop replace (Bug#38867)
+
+       Suggested by Eric Michael Timmons <etimmons@mit.edu>.
+       * lisp/fileloop.el (fileloop-initialize-replace): Save the
+       match-beginning position in a variable instead of the buffer's point.
+       The point may be changed by the time perform-replace is called, e.g.,
+       due to switch-to-buffer-preserve-window-point.
+
+2020-03-31  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/dired.el (dired-readin): Improve comment
+
+2020-03-31  Glenn Morris  <rgm@gnu.org>
+
+       Mark recently failing Tramp tests on hydra
+
+       * test/lisp/net/tramp-tests.el (tramp-test29-start-file-process)
+       (tramp-test30-make-process, tramp-test33-environment-variables):
+       Expect failure on hydra.nixos.org, since March 29 Tramp cache changes.
+
+2020-03-31  Juri Linkov  <juri@linkov.net>
+
+       * lisp/minibuffer.el (minibuffer-completion-help): Use mainbuf 
(bug#39822)
+
+       * lisp/minibuffer.el (minibuffer-completion-help): Run
+       display-completion-list in the original buffer mainbuf
+       to allow completion-setup-function set completion-reference-buffer to 
it.
+
+2020-03-30  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/dired.el (dired-readin): Don't bind inhibit-modification-hooks
+
+       Fixes bug#40332
+
+2020-03-30  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       c6e0981b96 (origin/emacs-27) * lisp/image/image-converter.el: Fix cus...
+       461bd9cc20 Fix url-cookie.el for lexical binding
+       f3ccfb1926 ; * src/decompress.c: Fix comment style.
+       1af03e7e92 ; * src/xfaces.c (syms_of_xfaces): Fix wording and typo.
+       93945fcd19 ; * test/lisp/calc/calc-tests.el: Fix mistake in last commit
+       ee47e00f4e Don't suggest setting face-remapping-alist to a literal (B...
+       c2b8ce4439 Calc: don't treat nil as an integer (bug#40155)
+       e1f0e08922 * lisp/files.el (directory-files-recursively): Doc fix.  (...
+       02b3820315 Document how to disable Tramp file archives
+
+2020-03-30  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       8db6b432bb Calc: Declare dynamic variable bound in lexbind code (bug#...
+
+2020-03-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid assertion violation at startup in pdumped Emacs
+
+       * src/buffer.c (init_buffer) [USE_MMAP_FOR_BUFFERS]: Remove the
+       assertion that ensured all buffers in pdumped Emacs have non-NULL
+       pointer to buffer text.  That was false when Emacs was pdumped
+       with killed buffer(s) in the all_buffers linked list.  See
+       https://lists.gnu.org/archive/html/emacs-devel/2020-03/msg00800.html
+       for more details.
+
+2020-03-30  Juri Linkov  <juri@linkov.net>
+
+       Deprecate with-displayed-buffer-window, use body-function instead 
(bug#39822)
+
+       * doc/lispref/display.texi (Temporary Displays):
+       Remove defmac with-displayed-buffer-window.
+
+       * doc/lispref/windows.texi (Buffer Display Action Alists):
+       Add body-function.
+
+       * lisp/window.el (with-displayed-buffer-window): Declare macro obsolete.
+       (window--display-buffer): Call 'body-function' after displaying the 
buffer.
+
+       * lisp/dired.el (dired-mark-pop-up):
+       * lisp/files.el (save-buffers-kill-emacs):
+       * lisp/minibuffer.el (minibuffer-completion-help):
+       Replace with-displayed-buffer-window with with-current-buffer-window
+       and add action alist entry 'body-function' with former macro body.
+
+2020-03-30  Juri Linkov  <juri@linkov.net>
+
+       Support state changing VC operations on directories in Dired (bug#34949)
+
+       * lisp/dired-aux.el (dired-vc-next-action): New command.
+       (dired-vc-deduce-fileset): Rename from vc-dired-deduce-fileset in vc.el.
+
+       * lisp/dired.el (dired-mode-map): Remap vc-next-action to
+       dired-vc-next-action.
+
+       * lisp/vc/vc-dir.el (vc-dir-mark-files): New function.
+       (vc-dir-refresh): Run hook vc-dir-refresh-hook.
+
+       * lisp/vc/vc.el (vc-deduce-fileset): Rename arg 'observer' to
+       'not-state-changing' and document it in docstring.
+       (vc-dired-deduce-fileset): Rename to dired-vc-deduce-fileset in 
dired-aux.el.
+
+       * lisp/cedet/ede.el (ede-turn-on-hook, ede-minor-mode):
+       * lisp/desktop.el (desktop-minor-mode-table): Rename the long ago
+       obsolete vc-dired-mode to vc-dir-mode.
+
+2020-03-29  Eli Zaretskii  <eliz@gnu.org>
+
+       Use hard links to Emacs executable in "make install" on MS-Windows
+
+       * configure.ac (LN_S_FILEONLY): Set to "/bin/ln" for MinGW
+       unconditionally.
+
+2020-03-29  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+       Fix free function compilation
+
+       * lisp/emacs-lisp/comp.el (comp-output-base-filename): Handle src
+       being a symbol.
+
+       Add comp-test-40187 checking function shadowing.
+
+       * test/src/comp-tests.el (comp-tests-doc): Fix
+
+       * test/src/comp-test-funcs.el (comp-test-big-interactive): New test
+
+2020-03-29  Andrea Corallo  <akrl@sdf.org>
+
+       Prevent collisions in C namespace and function shadowing
+
+       This rework make functions being indexed by their unique C symbol name
+       preventing multiple lisp function with the same name colliding.
+
+2020-03-29  Andrea Corallo  <akrl@sdf.org>
+
+       * src/comp.c (maybe_defer_native_compilation): Compile comp 
dependencies.
+
+       Make maybe_defer_native_compilation able to compile comp dependencies
+       breaking circularity.
+
+2020-03-29  Andrea Corallo  <akrl@sdf.org>
+
+       src/comp.c (Fcomp__init_ctxt): Aesthetic
+
+2020-03-29  Andrea Corallo  <akrl@sdf.org>
+
+       * .gitlab-ci.yml (test-native-bootstrap-speed*): Timeout to 8h
+
+       Running in tests in parall takes longer.
+
+2020-03-29  Michael Albinus  <michael.albinus@gmx.de>
+
+       Improve Tramp cache for asynchronous processes
+
+       * lisp/net/tramp-adb.el (tramp-adb-handle-exec-path)
+       (tramp-adb-get-device):
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-handler-askquestion):
+       * lisp/net/tramp-sh.el (tramp-remote-selinux-p, tramp-remote-acl-p)
+       (tramp-open-connection-setup-interactive-shell)
+       (tramp-maybe-open-connection, tramp-get-remote-path)
+       (tramp-get-inline-compress, tramp-get-inline-coding):
+       * lisp/net/tramp-smb.el (tramp-smb-get-cifs-capabilities)
+       (tramp-smb-get-stat-capability):
+       * lisp/net/tramp-sudoedit.el (tramp-sudoedit-remote-acl-p)
+       (tramp-sudoedit-remote-selinux-p): Cache property in main process.
+
+       * lisp/net/tramp-cache.el (tramp-cache-undefined): New defconst.
+       (tramp-get-hash-table, tramp-connection-property-p): Use it.
+       (tramp-set-connection-property, tramp-flush-connection-property)
+       (tramp-flush-connection-properties): Add sanity checks.
+       (tramp-get-file-property, tramp-set-file-property)
+       (tramp-get-connection-property, tramp-set-connection-property)
+       (tramp-dump-connection-properties): Adapt docstring.
+
+       * lisp/net/tramp-cmds.el (tramp-cleanup-connection): Delete all
+       processes.
+
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-unmount):
+       Use `tramp-cleanup-connection'.
+
+       * lisp/net/tramp-sh.el (tramp-sh-handle-vc-registered):
+       Use `bound-and-true-p'.
+
+       * lisp/net/tramp.el (tramp-get-process): New defun.
+
+2020-03-29  Juri Linkov  <juri@linkov.net>
+
+       * lisp/vc/vc-dir.el (vc-dir-root): New command (bug#12492, bug#34949).
+
+       * lisp/vc/vc-hooks.el (vc-menu-map): Change menu command from
+       'vc-dir' to 'vc-dir-root'.
+
+2020-03-29  Juri Linkov  <juri@linkov.net>
+
+       Switch to literal mode with message when regexp is too big in char-fold 
search
+
+       * lisp/char-fold.el (char-fold-to-regexp): Don't use regexp-quote
+       when the length of regexp reaches 5000.  (Bug#40216)
+
+       * lisp/isearch.el (isearch-search): On big regexp in char-fold mode
+       gracefully fall back to literal mode, try to search again and display
+       momentary-message about switching to literal mode.
+       (isearch--momentary-message): Add optional arg SECONDS.
+
+2020-03-28  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Stop using newly-deprecated dosname Gnulib module
+
+       Code is supposed to use the filename module now.
+       * admin/merge-gnulib (GNULIB_MODULES): Replace dosname with filename.
+       * lib/dosname.h: Remove this forwarding stub.
+       * lib/gnulib.mk.in, m4/gnulib-comp.m4: Regenerate.
+       * lib-src/emacsclient.c, src/fileio.c:
+       Include filename.h instead of dosname.h.
+
+2020-03-28  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from Gnulib
+
+       This incorporates:
+       2020-03-28 Use module 'filename' instead of module 'dosname'
+       2020-03-28 dosname: Redirect to 'filename'
+       * lib/at-func.c, lib/canonicalize-lgpl.c, lib/dosname.h:
+       Copy from Gnulib.
+       * lib/gnulib.mk.in, m4/gnulib-comp.m4: Regenerate.
+       * lib/filename.h: New file, copied from Gnulib.
+
+2020-03-28  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/jit-lock.el (jit-lock-mode): Pass `local` to add-hook
+
+       The old code used local=nil knowing that add-hook would affect the
+       local part only anyway.  Remove this hideous assumption.
+       Remove redundant `:group` args while we're at it.
+
+2020-03-28  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/ebrowse.el (ebrowse-tags-loop-call): Rename
+
+       Used to be called `ebrowse-tags-loop-form` and passed to `eval`.
+       Now it's passed to `apply` instead, which is better for karma.
+       (ebrowse-tags-loop-continue, ebrowse-tags-search)
+       (ebrowse-tags-query-replace, ebrowse-tags-search-member-use):
+       Adjust accordingly.
+       (ebrowse-electric-position-mode-map): Move init into declaration.
+       (ebrowse-electric-position-mode): Derive from special.
+
+2020-03-28  Mattias Engdegård  <mattiase@acm.org>
+
+       Turn compilation-error-case-fold-search into a defvar
+
+       See bug#40119, and the discussion at
+       https://lists.gnu.org/archive/html/emacs-devel/2020-03/msg00653.html
+
+       * lisp/progmodes/compile.el (compilation-error-case-fold-search):
+       Turn into a defvar.
+       * etc/NEWS: Update.
+
+2020-03-28  Michael Albinus  <michael.albinus@gmx.de>
+
+       Tramp cache fixes
+
+       * lisp/net/tramp-adb.el (tramp-adb-handle-write-region):
+       * lisp/net/tramp-smb.el (tramp-smb-handle-write-region): Flush the
+       cache after the file has been written.
+
+2020-03-27  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Use ATTRIBUTE_CONST for some bignum functions
+
+       * src/bignum.h (mpz_get_d_rounded):
+       * src/lisp.h (bignum_to_double, bignum_to_intmax)
+       (bignum_to_uintmax, bignum_bufsize):
+       Declare as ATTRIBUTE_CONST.
+
+2020-03-27  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/cl-macs.el (cl-defstruct): Declare the type 
immediately
+
+2020-03-27  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/gnus/gnus-registry.el: Use lexical-binding
+
+       (gnus-registry-install-shortcuts): Use a closure (with dynamic 
:documentation)
+       (gnus-registry-user-format-function-M): Use 
define-obsolete-function-alias.
+       (gnus-registry-article-marks-to-names): η-reduce.
+
+2020-03-27  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/textmodes/tex-mode.el: Replace double-definition hack with an 
advice
+
+       (tex-verbatim-environments): Add "Verbatim".
+       (tex--guess-mode): Rename from tex-guess-mode and return the mode
+       rather than calling it.
+       (tex-mode): Replace second definition with an advice.
+
+2020-03-27  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/ebrowse.el: Prefer hash-tables to obarrays
+
+       Remove redundant :group args.
+       Use `defvar-local` and `setq-local` where possible.
+
+       (ebrowse-some): Use seq-some instead.
+       (ebrowse-every): Use seq-every-p instead.
+       (ebrowse-position): Use seq-position.
+       (ebrowse--tree-table): Rename from `ebrowse--tree-obarray`.
+       Change all users to use a hash-table rather than an obarray.
+       (ebrowse-for-all-trees): Adjust to the table being a hash-table.
+       (ebrowse-tree-table-as-alist): Rename from 
`ebrowse-tree-obarray-as-alist`.
+       (ebrowse-build-tree-obarray): Rename from `ebrowse-build-tree-obarray`.
+       (ebrowse-tree-mode): Remove redundant setting of 
`ebrowse--tree-obarray`.
+       (ebrowse-set-tree-indentation, ebrowse-view-file-other-frame)
+       (ebrowse-last-completion-table): Rename from
+       ebrowse-last-completion-obarray.
+       (ebrowse-position): Make it a proper struct.
+
+2020-03-27  Eli Zaretskii  <eliz@gnu.org>
+
+       Port the 'module/async-pipe' test to MS-Windows
+
+       These changes let the code compile and produce a valid DLL, but the
+       test hangs.  It looks like the hang is in Fdelete_process, when it
+       closes one of the descriptors of the pipe process.
+       In addition, this use of the pipe process cannot currently work
+       on MS-Windows, since make-pipe-process doesn't set up the reader
+       thread to read from the Emacs's side of the pipe, so the select
+       emulation doesn't know there's stuff to read from that pipe.
+       * test/data/emacs-module/mod-test.c [WINDOWSNT]: Include
+       windows.h.
+       (ALIGN_STACK) [!__x86_64__]: Define for 32-bit builds.
+       (sleep_for_half_second): New function.
+       (write_to_pipe): Declare return type differently for WINDOWSNT.
+       Call sleep_for_half_second.
+       (Fmod_test_async_pipe) [WINDOWSNT]: Use _beginthread as substitute
+       for pthread_create.
+       (invalid_finalizer): Replace non_ASCII character in a comment.
+
+       * test/src/emacs-module-tests.el (module/async-pipe): Skip on
+       MS-Windows, as the test fails and then hangs.
+
+2020-03-27  Yuan Fu  <casouri@gmail.com>
+
+       Add manual and NEWS entries for previous gdb-mi changes
+
+       * etc/NEWS: Add entries for saving and restoring GDB window
+       configurations.
+       * doc/emacs/building.texi (GDB User Interface Layout): Add
+       documentation for 'gdb-save-window-configuration',
+       'gdb-load-window-configuration',
+       'gdb-default-window-configuration-file',
+       'gdb-window-configuration-directory',
+       'gdb-restore-window-configuration-after-quit'.  Change 'many-windows
+       layout' to 'default layout'.
+
+2020-03-27  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Treat out-of-range positions consistently
+
+       If a position argument to get-byte etc. is an out-of-range integer,
+       treat it the same regardless of whether it is a fixnum or a bignum.
+       * src/buffer.c (fix_position): New function.
+       * src/buffer.c (validate_region):
+       * src/character.c (Fget_byte):
+       * src/coding.c (Ffind_coding_systems_region_internal)
+       (Fcheck_coding_systems_region):
+       * src/composite.c (Ffind_composition_internal):
+       * src/editfns.c (Fposition_bytes, Fchar_after, Fchar_before)
+       (Finsert_buffer_substring, Fcompare_buffer_substrings)
+       (Fnarrow_to_region):
+       * src/fns.c (Fsecure_hash_algorithms):
+       * src/font.c (Finternal_char_font, Ffont_at):
+       * src/fringe.c (Ffringe_bitmaps_at_pos):
+       * src/search.c (search_command):
+       * src/textprop.c (get_char_property_and_overlay):
+       * src/window.c (Fpos_visible_in_window_p):
+       * src/xdisp.c (Fwindow_text_pixel_size):
+       Use it instead of CHECK_FIXNUM_COERCE_MARKER, so that
+       the code is simpler and treats bignums consistently with fixnums.
+       * src/buffer.h (CHECK_FIXNUM_COERCE_MARKER): Define here
+       rather than in lisp.h, and reimplement in terms of fix_position
+       so that it treats bignums consistently with fixnums.
+       * src/lisp.h (CHECK_FIXNUM_COERCE_MARKER): Move to buffer.h.
+       * src/textprop.c (validate_interval_range): Signal with original
+       bounds rather than modified ones.
+
+2020-03-27  Juri Linkov  <juri@linkov.net>
+
+       Disable enable-local-variables for hunk-only in 
diff-syntax-fontify-props
+
+       * lisp/vc/diff-mode.el (diff-syntax-fontify-props): Let-bind
+       enable-local-variables to nil when hunk-only is non-nil (bug#39190)
+
+2020-03-27  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Refactor and fix typo in CHECK_*_COERCE_MARKER
+
+       * src/data.c (check_integer_coerce_marker)
+       (check_number_coerce_marker): New functions.
+       Also, fix a typo in the former, by having it use
+       Qinteger_or_marker_p not Qnumber_or_marker_p.
+       (arithcompare, floatop_arith_driver, bignum_arith_driver)
+       (arith_driver, Fplus, Fminus, Ftimes, Fquo, Frem, Fmod)
+       (minmax_driver, Flogand, Flogior, Flogxor, Fadd1, Fsub1):
+       Use them in place of the similarly-named macros.
+       * src/lisp.h (CHECK_NUMBER_COERCE_MARKER)
+       (CHECK_INTEGER_COERCE_MARKER): Remove; no longer used.
+
+2020-03-26  Philipp Stephani  <phst@google.com>
+
+       Add a module function to open a file descriptor connected to a pipe.
+
+       A common complaint about the module API is that modules can't
+       communicate asynchronously with Emacs.  While it isn't possible to
+       call arbitrary Emacs functions asynchronously, writing to a pipe
+       should always be fine and is a pretty low-hanging fruit.
+
+       This patch implements a function that adapts an existing pipe
+       process.  That way, users can use familiar tools like process filters
+       or 'accept-process-output'.
+
+       * src/module-env-28.h: Add 'open_channel' module function.
+
+       * src/emacs-module.c (module_open_channel): Provide definition for
+       'open_channel'.
+       (initialize_environment): Use it.
+
+       * src/process.c (open_channel_for_module): New helper function.
+       (syms_of_process): Define necessary symbol.
+
+       * test/src/emacs-module-tests.el (module/async-pipe): New unit test.
+
+       * test/data/emacs-module/mod-test.c (signal_system_error): New helper
+       function.
+       (signal_errno): Use it.
+       (write_to_pipe): New function running in the background.
+       (Fmod_test_async_pipe): New test module function.
+       (emacs_module_init): Export it.
+
+       * doc/lispref/internals.texi (Module Misc): Document new module
+       function.
+
+       * doc/lispref/processes.texi (Asynchronous Processes): New anchor
+       for pipe processes.
+
+       * etc/NEWS: Document 'open_channel' function.
+
+2020-03-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Remove COERCE_MARKER
+
+       * src/xdisp.c (COERCE_MARKER): Remove.  All uses replaced by
+       Fmarker_position; this is simpler as the macro was invoked only on
+       markers.
+
+2020-03-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       line-beginning-position args can be bignums
+
+       * src/editfns.c (Fline_beginning_position, Fline_end_position):
+       Do not restrict integer arguments to fixnums.
+
+2020-03-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix integer overflow in internal_self_insert
+
+       * src/cmds.c (internal_self_insert): Avoid undefined behavior
+       on integer overflow by using saturated add.
+
+2020-03-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix integer overflow in forward-point
+
+       * lisp/subr.el (forward-point): Rewrite in Lisp and move here ...
+       * src/cmds.c (Fforward_point): ... from here.  This fixes an
+       integer overflow bug with (forward-point most-positive-fixnum).
+
+2020-03-25  Mattias Engdegård  <mattiase@acm.org>
+
+       Make compilation-mode regexp matching case-sensitive (bug#40119)
+
+       The number of regexps is large, they are written independently of one
+       another, and they frequently intersect.  Using case-sensitive matching
+       improves separation and performance, and is probably what everyone
+       have being assuming was used by compilation-mode all along.
+
+       * lisp/progmodes/compile.el (compilation-error-case-fold-search): New.
+       (compilation-parse-errors): Bind case-fold-search to
+       compilation-error-case-fold-search during matching.
+       * etc/NEWS: Announce.
+
+2020-03-25  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from gnulib
+
+       This incorporates:
+       2020-03-25 getopt-posix: port __GETOPT_PREFIX to macOS
+       2020-03-22 acl-permissions: Improve autoconf macro
+       * lib/getopt-pfx-core.h, m4/acl.m4: Copy from Gnulib.
+
+2020-03-25  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Pacify --enable-gcc-warnings for lock_file
+
+       * src/filelock.c (lock_file): Pacify gcc -Wmaybe-uninitialized
+       after recent change to this function.
+
+2020-03-25  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/textmodes/conf-mode.el (conf-mode): Fix last change
+
+       `delay-mode-hooks` cannot be tested from within `define-derived-mode`
+       because it's always non-nil in there, so arrange to test it before we
+       enter the body.
+
+2020-03-25  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve the UI of 'list-timers'
+
+       * lisp/emacs-lisp/timer-list.el (list-timers): Display both "Next"
+       and "Repeat" in units of seconds, for consistency.
+       (timer-list-mode): Add help-echo to column headers.
+
+2020-03-24  Juri Linkov  <juri@linkov.net>
+
+       Rename dired-mark-region choices and ignore empty region.
+
+       * lisp/dired.el (dired-mark-region): Rename choices
+       'exclusive' to 'file', and 'inclusive' to 'line'.
+       (dired-mark-if, dired-mark): Check for non-empty region explicitly
+       instead of using use-region-p to ignore non-nil value of
+       use-empty-active-region.  (Bug#39902)
+
+2020-03-24  Robert Pluim  <rpluim@gmail.com>
+
+       Fix gravatar tests
+
+       * lisp/image/gravatar.el (gravatar--service-libravatar): Don't error
+       when failing to parse email address, just return the default URL.
+
+       * test/lisp/image/gravatar-tests.el (gravatar-build-url): Adjust
+       for new default gravatar url.
+
+2020-03-24  Andrea Corallo  <akrl@sdf.org>
+
+       * src/comp.c (emit_mvar_access): Fix speed 1 compilation
+
+       At speed 1 propagate does not run and all mvars are allocated in array
+       0.
+
+2020-03-24  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (native-compile-async): Fix excessive 
messaging
+
+2020-03-24  Philip K  <philip@warpmail.net>
+
+       Add support for multiple Gravatar services
+
+       Now supports Libravatar and Unicornify, next to Gravatar (Bug#39965).
+
+       * lisp/image/gravatar.el (gravatar-base-url): Remove constant.
+       (gravatar-service-alist): List supported services.
+       (gravatar-service): Add user option to specify service, defaults to
+       Libravatar.
+       (gravatar--service-libravatar): New function, libravatar image host
+       resolver implementation.
+       (gravatar-build-url): Use alist gravatar-service-alist instead of
+       gravatar-base-url.
+       * etc/NEWS: Mention new gravatar service option.
+
+2020-03-24  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-03-24  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix sending signals and EOF to the inferior process in gdb-mi.el
+
+       * lisp/progmodes/gdb-mi.el (gdb-io-interrupt, gdb-io-quit)
+       (gdb-io-stop, gdb-io-eof): Send signal/EOF to the inferior
+       process, not to GDB.  (Bug#40210)
+
+2020-03-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't add repeated xlmns:xlink declarations in svg-create
+
+       * lisp/svg.el (svg-create): Fix previous unconditional addition of
+       the xmlns:xlink declaration -- callers may already add one, and
+       having it twice is something most svg libraries doesn't like.
+
+2020-03-23  Noam Postavsky  <npostavs@gmail.com>
+
+       Make cl-concatenate an alias of seq-concatenate
+
+       * lisp/emacs-lisp/cl-extra.el (cl-concatenate): Use defalias instead
+       of apply.  This is simpler and more efficient.
+
+2020-03-23  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el : Fix typo introduced by f8b07ff4f3
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+       Guard against function redefinition during deferred load
+
+2020-03-23  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       d66331aea4 (origin/emacs-27) Don't build the Gnulib 'utimens' module ...
+       f2351a689b Add Harfbuzz dependency
+       8944310d7c Don't signal during backtrace unrewind (Bug#40088)
+       8709aaddd8 Fix a couple of problems in changelog generating functions
+       9ab85f087f Fix cl-concatenate (Bug#40180)
+       561e9fb91b Improve documentation of project.el commands
+       b28a9a6cc3 Make svg images with links valid
+       7515252cce * lisp/tab-line.el (tab-line-new-button-show): New defcustom.
+
+       # Conflicts:
+       #       etc/NEWS
+       #       nt/gnulib-cfg.mk
+
+2020-03-23  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       bed04c502c Use correct registry name for windows-1251 charset
+       1aa1529301 ERC: Update maintainer address
+
+2020-03-23  Noam Postavsky  <npostavs@gmail.com>
+
+       Avoid extra "changed on disk" prompt in save-buffer (Bug#18336)
+
+       * src/filelock.c (lock_file): Don't query the user if the current
+       session already owns the lock.
+
+2020-03-23  Juri Linkov  <juri@linkov.net>
+
+       * lisp/dired.el (dired-mark-region): New defcustom (bug#39902)
+
+       * lisp/dired.el (dired-mark-if): Use dired-mark-region.
+       (dired-mark): Use dired-mark-region.  Fix docstring.
+       (dired-mark-files-regexp, dired-mark-files-containing-regexp)
+       (dired-mark-symlinks, dired-mark-directories)
+       (dired-mark-executables, dired-flag-auto-save-files)
+       (dired-flag-backup-files): Mention dired-mark-region in docstring.
+
+       * lisp/dired-aux.el (dired-compare-directories):
+       * lisp/dired-x.el (dired-mark-unmarked-files, dired-mark-sexp):
+       Mention dired-mark-region in docstring.
+
+2020-03-22  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-03-22  Andrea Corallo  <akrl@sdf.org>
+
+       * src/comp.c (maybe_defer_native_compilation): Fix
+
+       Prevent recursive compilation while deferring compilation.
+
+2020-03-22  Andrea Corallo  <akrl@sdf.org>
+
+       * src/comp.c (maybe_defer_native_compilation): Add some debug code
+
+       * lisp/emacs-lisp/comp.el: Add missing require
+
+2020-03-22  Andrea Corallo  <akrl@sdf.org>
+
+       * .gitlab-ci.yml: CI test native bootstrap speed1 and speed2
+
+       Do just a fast bootstrap for these two.
+
+2020-03-22  Andrea Corallo  <akrl@sdf.org>
+
+       Have a fast build option triggered by env var NATIVE_FAST_BOOT
+
+2020-03-22  Stefan Kangas  <stefankangas@gmail.com>
+
+       Revert "Signal user-error on duplicate package refresh" (Bug#39187)
+
+       This reverts commit a6d87ea045d9df73f70765bedfb02522043efd9b.
+
+2020-03-21  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix Bug#40156 in Tramp
+
+       * lisp/net/tramp-sh.el (tramp-sh-handle-write-region): Copy to temp file
+       only if FILENAME exists.  (Bug#40156)
+
+       * test/lisp/net/tramp-tests.el (tramp-test10-write-region): Extend test.
+
+2020-03-21  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove more XEmacs compat code from ediff*.el
+
+       * lisp/vc/ediff-init.el (ediff-H-glyph):
+       * lisp/vc/ediff-util.el (ediff-inferior-compare-regions)
+       (ediff-setup-keymap):
+       * lisp/vc/ediff-wind.el (ediff-control-frame-parameters)
+       (ediff-prefer-iconified-control-frame)
+       (ediff-setup-control-frame, ediff-xemacs-select-frame-hook): Remove
+       XEmacs compat code and declare compatibility functions obsolete.
+
+       * lisp/vc/ediff-init.el (ediff-temp-file-prefix): Redefine as
+       obsolete variable alias for 'temporary-file-directory'.
+       * lisp/vc/ediff-util.el (ediff-make-temp-file): Don't use obsolete
+       variable name.
+
+2020-03-21  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove obsolete XEmacs comment
+
+       * lisp/emacs-lisp/edebug.el (edebug--display-1): Remove comment
+       regarding an XEmacs exclusive variable.
+
+2020-03-21  Stefan Kangas  <stefankangas@gmail.com>
+
+       Declare some <package>-version variables obsolete
+
+       These are not used for anything these days and can therefore be
+       removed.  Package developers should check the Emacs version instead.
+       Ref: https://lists.gnu.org/r/emacs-devel/2020-03/msg00080.html
+
+       * lisp/calendar/icalendar.el (icalendar-version):
+       * lisp/dframe.el (dframe-version):
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-version):
+       * lisp/emulation/edt.el (edt-version):
+       * lisp/international/mule.el (mule-version)
+       (mule-version-date):
+       * lisp/linum.el (linum-version):
+       * lisp/play/bubbles.el (bubbles-version):
+       * lisp/speedbar.el (speedbar-version):
+       * lisp/textmodes/remember.el (remember-version):
+       * lisp/url/url-vars.el (url-version):
+       * lisp/woman.el (woman-version): Declare obsolete.
+
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-start-section):
+       * lisp/speedbar.el (speedbar-mode):
+       * lisp/url/url-about.el (url-about-protocols):
+       * lisp/url/url-http.el (url-http--user-agent-default-string):
+       * lisp/url/url-news.el (url-news-fetch-message-id):
+       * lisp/woman.el (woman-menu, woman-mode): Stop using variables
+       declared obsolete above.
+
+2020-03-21  Stefan Kangas  <stefankangas@gmail.com>
+
+       Add "Old-" prefix to "Version" header in some cases
+
+       These version numbers are historical accidents and not relevant today.
+       Ref: https://lists.gnu.org/r/emacs-devel/2020-03/msg00080.html
+
+       * lisp/calendar/icalendar.el:
+       * lisp/emacs-lisp/checkdoc.el:
+       * lisp/hippie-exp.el:
+       * lisp/linum.el:
+       * lisp/master.el:
+       * lisp/progmodes/cwarn.el:
+       * lisp/repeat.el:
+       * lisp/ruler-mode.el:
+       * lisp/textmodes/remember.el:
+       * lisp/wdired.el:
+       * lisp/woman.el: Change "Version" header to "Old-Version".
+
+2020-03-20  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Remove the Date header from message-draft-headers
+
+       * lisp/gnus/message.el (message-draft-headers): The Date header should
+       reflect when the message is sent, not when it was saved or delayed.
+
+2020-03-19  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el (comp-async-jobs-number): Fix customize type.
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+       * lisp/emacs-lisp/comp.el (comp-run-async-workers): Load only if 
compilation succeed
+
+2020-03-19  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't have exif bugging out on short strings
+
+       * lisp/image/exif.el (exif--direct-ascii-value): New function
+       (bug#40127).
+       (exif--parse-directory): Use it to get the correct values for
+       in-directory (i.e., shorter than 4 octets) strings.
+
+2020-03-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix display of :box face when overlay strings are around
+
+       * src/xdisp.c (reset_box_start_end_flags): New function.
+       (handle_face_prop): Only set the start_of_box_run_p flag, don't
+       reset it.
+       (pop_it): Set the face_box_p flag, if the popped face requires
+       that, when continuing iteration over buffer text.
+       (get_next_display_element, next_element_from_display_vector): Only
+       set the end_of_box_run_p flag, never reset it here.
+       (set_iterator_to_next): Don't reset the start_of_box_run_p and
+       end_of_box_run_p flags here.  They are now reset as side effect of
+       PRODUCE_GLYPHS.
+       (append_space_for_newline): Restore the end_of_box_run_p flag
+       after PRODUCE_GLYPHS where we previously didn't reset it.
+       * src/dispextern.h (PRODUCE_GLYPHS): Call
+       reset_box_start_end_flags after producing glyphs.
+       (Bug#40124)
+
+2020-03-19  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Tiny simplification of frac_to_double
+
+       * src/timefns.c (frac_to_double): Remove unnecessary runtime check,
+       since the denominator is always positive.
+
+2020-03-19  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Omit timestamp optimization invalid on 387 FPU
+
+       * src/timefns.c (frac_to_double): Omit optimization that is
+       invalid on machines with excess precision (e.g., gcc x86 with 387
+       FPU), because it double-rounds.  Found via ‘gcc -m32’ on x86-64.
+
+2020-03-18  Andrea Corallo  <akrl@sdf.org>
+
+       * src/comp.c (native-elisp-load): Guard against missing file.
+
+2020-03-19  Andrea Corallo  <akrl@sdf.org>
+
+       Command late load when deferring compilation
+
+       * lisp/emacs-lisp/comp.el: Extend `native-compile-async' for load and 
late-load
+
+       Extend low level code for late load
+
+       * lisp/emacs-lisp/comp.el: late-load support optional as 
`native-compile' parameter
+
+       * lisp/emacs-lisp/comp.el: Have the compiler generates 
'late_top_level_run'
+
+2020-03-18  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       e92b8e535a (origin/emacs-27) Remove raw carriage return characters fr...
+       5747a59a88 Recalculate default font when switching font backend
+       a2dd8c4234 * lisp/tab-line.el: Fix tab-line-format and tab-line-forma...
+       a7b8291b6c * etc/NEWS: Make the `--eval` example slightly more precise
+       f8254aad14 * lisp/image/image-converter.el: Support more ImageMagick ...
+       5beb269505 Support Unicode 13.0
+       3a671ad7ed Fix regression in wisent-total-conflicts
+
+       # Conflicts:
+       #       etc/NEWS
+
+2020-03-18  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       3a8a231810 * lisp/textmodes/fill.el (fill-nobreak-predicate): Fix doc...
+       cbe643104d Improve Package Menu hiding docstrings
+       8d28c98ae0 Fix display of Big5 characters when using Fontconfig
+
+2020-03-18  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/vc/smerge-mode.el (smerge-start-session): Don't re-enable
+
+       Don't do anything if smerge-mode is already enabled.
+
+2020-03-17  Mattias Engdegård  <mattiase@acm.org>
+
+       Don't generate useless range table entries for ASCII chars
+
+       In multibyte regexps, each ASCII char or range in a character
+       alternative produces a nonsense range table entry in addition to the
+       correct bits in the ASCII bitmap.  Those entries do not match anything
+       but waste space and time.
+
+       * src/regex-emacs.c (regex_compile): Don't generate reversed intervals.
+
+2020-03-17  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-03-17  Andrea Corallo  <akrl@sdf.org>
+
+       Trigger native compilation when loading bytecode
+
+       Introduce a first mechanism to trigger compilation when lex elc files
+       are loaded.  This is off by default and has to be better tested.
+
+2020-03-16  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el: (native-compile-async) do not duplicate 
queue entries
+
+2020-03-16  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el: Estimate async worker number using system 
CPU number
+
+       This only when `comp-async-jobs-number' is 0 (default).
+
+2020-03-16  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el: Make compilation logic to be dynamically 
controllable
+
+       Introduce `comp-async-jobs-number' to control async job number, this
+       can be now adjusted dynamically.
+
+       Also make `native-compile-async' able to dynamically queue new
+       compilations.
+
+2020-03-15  Yuan Fu  <casouri@gmail.com>
+
+       Add store/restore window configuration feature for gdb-mi
+
+       Add a feature that allows a user to save a gdb window
+       configuration (window layout) to a file with
+       'gdb-save-window-configuration' and load it back with
+       'gdb-load-window-configuration'.  Set a default window configuration
+       by setting 'gdb-default-window-configuration-file'.
+       Add an option to make gdb preserve the window configuration
+       that the user had before starting gdb.  In window.el, add
+       'with-window-non-dedicated'.
+
+       * lisp/progmodes/gdb-mi.el (top/level): Require 'pcase' and 'cl-seq'.
+       (gdb--window-configuration-before): New variable.
+       (gdb-restore-window-configuration-after-quit): New option.
+       (gdb-window-configuration-directory,
+       gdb-default-window-configuration-file): New variables.
+       (gdb): Save configuration on startup.
+       (gud-menu-map): Add "Load Layout" and "Save Layout" to menu.  Add
+       "Restore Layout After Quit" button to menu.  Rename "Restore Window
+       Layout" to "Restore Default Layout", add some help echo, and move it
+       from "GDB-MI" menu to "GDB-WINDOWs" menu.
+       (gdb-toggle-restore-window-configuration): New function.
+       (gdb-get-source-buffer): New function, extracted out of
+       'gdb-restore-window'.
+       (gdb-setup-windows): Add a condition branch that loads default window
+       configuration when available.  Fix docstring.
+       (gdb-buffer-p, gdb-function-buffer-p, gdb--buffer-type,
+       gdb-save-window-configuration, gdb-load-window-configuration): New
+       functions.
+       (gdb-restore-windows): Edit docstring to mention
+       'gdb-default-window-configuration-file'.
+       (gdb-reset): Restore window configuration after quit.
+       * lisp/window.el (with-window-non-dedicated): New macro.
+
+2020-03-15  Eli Zaretskii  <eliz@gnu.org>
+
+       Reverse the meaning of 2nd arg to 'live_buffer_holding'
+
+       * src/alloc.c (live_buffer_holding): Rename ALL_BUFFERS ti
+       IGNORE_KILLED, and reverse the condition for returning killed
+       buffers.
+       (live_buffer_p): Add commentary.
+       (live_buffer_p, mark_maybe_object, mark_maybe_pointer): Reverse
+       the 2nd argument to live_buffer_holding.  (Bug#39962)
+
+2020-03-15  Pip Cet  <pipcet@gmail.com>
+
+       Make sure we mark reachable killed buffers during GC
+
+       * src/alloc.c (live_buffer_holding): Add ALL_BUFFERS argument for
+       returning killed buffers.
+       (mark_maybe_object, mark_maybe_pointer): Use the additional
+       argument.  (Bug#39962)
+
+2020-03-15  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-03-15  Andrea Corallo  <akrl@sdf.org>
+
+       * .gitlab-ci.yml: Always run test-filenotify-gio
+
+       test-filenotify-gio is run always to keep stock bootstrap tested.
+
+2020-03-15  Andrea Corallo  <akrl@sdf.org>
+
+       * lisp/emacs-lisp/comp.el: Fix missing rx require
+
+2020-03-15  Adam Porter  <adam@alphapapa.net>
+
+       comp.el: Minor improvements
+
+       Change: (comp-start-async-worker) Refactor slightly
+
+       Change: (comp-start-async-worker) Inline (comp-to-file-p)
+
+       Change: (comp-source-files) Rename from comp-src-pool
+
+       Add: (comp-start-async-worker) Assertion
+
+       Change: (comp-async-processes) Rename from comp-prc-pool
+
+       Tidy: (native-compile)
+
+       Rename variables, improve docstring, adjust log message, simplify
+       filename code.
+
+       Tidy: (batch-native-compile) Docstring
+
+       Tidy: whitespace-cleanup
+
+       Tidy: (comp-start-async-worker) Use () instead of nil
+
+       Tidy: (comp-files-queue) Rename from comp-source-files
+
+       Change: (native-compile-async) Improve paths support
+
+       Tidy: Comment
+
+       Save a line for one word.  :)
+
+       Change: (comp-log) Rewrite without macro, follow tail
+
+       Change: (native-compile-async) Use end-of-string in filename regexps
+
+       Change: (native-compile-async) Use cl-loop instead of dotimes
+
+       Add/Change: (comp-log-to-buffer) And use in comp-log
+
+       Comment: Tidy comment
+
+       Fix: (configure.ac) Option description
+
+       Fix: (comp-log) Argument
+
+       Fix: (comp-start-async-worker) Variable name
+
+       Change: Undo whitespace changes
+
+       Some of them included incorrect indentation because the
+       macros' (declare (indent)) forms were not loaded.  The
+       whitespace-cleanup should be run from Emacs 27+ with the file loaded.
+
+2020-03-14  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/sql.el: Try and avoid `eval`; use define-derived-mode
+
+       Remove redundant `:group` args.
+
+       (sql-interactive-mode-map): `set-keymap-parent` is always fboundp.
+       (sql-get-product-feature): Prefer `symbol-value` over `eval`.
+       (sql--adjust-interactive-setup): New function, extracted from
+       `sql-interactive-mode`.
+       (sql-interactive-mode): Use it and `define-derived-mode`.
+       (sql-connect, sql-connection-menu-filter): Prefer `cl-progv` over 
`eval`.
+
+2020-03-14  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/textmodes/conf-mode.el (conf-mode): Use define-derived-mode
+
+       (conf--guess-mode): Extract from conf-mode.
+       (defcustoms): Remove redundant `:group` args.
+       (conf-mode, conf-mode-initialize, conf-javaprop-mode)
+       (conf-space-mode, conf-space-keywords, conf-space-mode-internal)
+       (conf-colon-mode): Use `setq-local`.
+
+2020-03-14  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/package.el (package-activate-1): Avoid duplicates
+
+       in `Info-directory-list`.
+
+2020-03-14  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-03-14  Andrea Corallo  <akrl@sdf.org>
+
+       Fix make bootstrap for native compilation
+
+       Add Makefile target native-compile-clean removing all eln output
+       folders.
+
+       This is also triggered by make bootstrap to perform a clean bootstrap.
+
+       Also revert some modification of the build system against master not
+       effective anymore with the new directory layout.
+
+2020-03-14  Alan Mackenzie  <acm@muc.de>
+
+       * lisp/progmodes/cc-defs.el (c-version): update to 5.34.2 for master 
branch
+
+2020-03-14  Jeremy Compostella  <jeremy.compostella@gmail.com>
+
+       Make previous mml-expand-html-into-multipart-related fix more general
+
+       * lisp/gnus/mml.el (mml-expand-html-into-multipart-related): This is
+       function is now called by a recursive
+       engine (mml-expand-all-html-into-multipart-related).  The structure of
+       the returned value should be identical between an untouched part and a
+       expanded multipart (bug#39230).
+
+2020-03-14  Eli Zaretskii  <eliz@gnu.org>
+
+       Add charsets to 'w32-charset-info-alist'
+
+       * lisp/w32-fns.el: Add a few more charsets to
+       w32-charset-info-alist.
+
+2020-03-14  Mattias Engdegård  <mattiase@acm.org>
+
+       Avoid regexp stack overflow in GDB string matching (bug#22149)
+
+       * lisp/progmodes/gdb-mi.el (gdb--string-regexp):
+       Swap the or-clauses so that the rarely matching one comes first.
+       This avoids a build-up of backtrack points on the regexp stack.
+
+2020-03-13  Andrea Corallo  <akrl@sdf.org>
+
+       Prefix native compilation folders with "eln-"
+
+2020-03-13  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       a2b07f9f11 (origin/emacs-27) ; * etc/NEWS: Explain how to get back ol...
+       b468b3d1ff Fix a recent documentation change
+       1ab766fd58 Fix last change
+       ecfe633993 * lisp/tab-bar.el: Last-minute changes.
+       c1ce9fa7f2 * lisp/subr.el (cancel-change-group): Fix bug#39680
+       ef5744a988 Improve docs for horizontal scrolling with mouse and touch...
+       1bc3fa0bd0 * lisp/emacs-lisp/package.el (package-install): Fix typo i...
+       4537976afd Port .gdbinit to clang with -gdwarf-4
+       0883c800a0 Simplify rx example in manual
+       a695189248 ; * etc/NEWS: Fix typo.
+
+       # Conflicts:
+       #       etc/NEWS
+
+2020-03-13  Michael Albinus  <michael.albinus@gmx.de>
+
+       * lisp/net/tramp.el (tramp-accept-process-output): Propagate `quit' 
signal.
+
+2020-03-13  Pieter van Oostrum  <pieter@vanoostrum.org>
+
+       * lisp/emacs-lisp/package.el (package-menu--generate): Fix doc string.
+
+       Add REMEMBER-POS to docstring (bug#39861).
+
+2020-03-13  Andrea Corallo  <akrl@sdf.org>
+
+       Do not produce .eln files when a byte compilation error happen
+
+       Have the byte compiler signal an error when compilation fails to stop
+       native compilation too.
+
+2020-03-13  Noam Postavsky  <npostavs@gmail.com>
+
+       Make cl-equalp a bit more efficient at comparing strings
+
+       * lisp/emacs-lisp/cl-extra.el (cl-equalp): Use compare-strings with
+       the IGNORE-CASE argument, rather than creating downcased copies of the
+       strings to be compared.
+
+2020-03-13  Noam Postavsky  <npostavs@gmail.com>
+
+       rcirc: Match NickServ messages case-insensitively (Bug#39345)
+
+       Reported by Jake Nelson <jake.nelson@gmail.com>.
+       * lisp/net/rcirc.el (rcirc-check-auth-status): NickServ will response
+       will show the nick in the same case used during registration, but
+       it allows case-insensitive matches when logging in.  Therefore, we
+       should accept response messages regardless of case.
+
+2020-03-13  Andrii Kolomoiets  <andreyk.mad@gmail.com>
+
+       Fix NS child frame in native fullscreen (bug#36672)
+
+       * lisp/frame.el (toggle-frame-fullscreen): Don't sleep on cocoa.
+       Fullscreen animation waiting is moved to src/nsterm.m.
+       * src/nsterm.h (EmacsView): Add in_fullscreen_transition,
+       inFullScreenTransition, waitFullScreenTransition.
+       (NSWindowCollectionBehaviorFullScreenAuxiliary): New define.
+       * src/nsterm.m (ns_make_frame_visible): Wait for fullscreen animation.
+       (ns_set_parent_frame): Set frame collection behavior; make child frames
+       non-fullscreen; make non-child frames fullscreen if parent was 
fullscreen.
+       ([EmacsView initFrameFromEmacs]): Set in_fullscreen_transition; set 
frame
+       collection behavior according to parent frame.
+       ([EmacsView windowDidMove]): Remove code by commenting with "fixme".
+       ([EmacsView windowWillEnterFullScreen], [EmacsView 
windowDidEnterFullScreen])
+       ([EmacsView windowWillExitFullScreen], [EmacsView 
windowDidExitFullScreen]):
+       Set in_fullscreen_transition.
+       ([EmacsView inFullScreenTransition], [EmacsView 
waitFullScreenTransition]):
+       New methods.
+       ([EmacsView updateCollectionBehavior]): Set collection behavior 
according to
+       parent frame.
+       ([EmacsView toggleFullScreen]): Wait for fullscreen animation.
+
+2020-03-12  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-03-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/eldoc.el: Remove redundant `:group` arguments
+
+       * lisp/emacs-lisp/eldoc.el (eldoc--supported-p): Understand the "old" 
API
+
+       * lisp/subr.el (cancel-change-group): Undo accidental change
+
+2020-03-12  Michael Albinus  <michael.albinus@gmx.de>
+
+       * lisp/net/tramp-sh.el (tramp-find-shell): Skip for asynchronous 
processes.
+
+2020-03-11  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove XEmacs exclusive face from themes
+
+       * etc/themes/deeper-blue-theme.el (class):
+       * etc/themes/leuven-theme.el (class):
+       * etc/themes/manoj-dark-theme.el (manoj-dark):
+       * etc/themes/whiteboard-theme.el (class): Don't set XEmacs exclusive
+       face 'font-lock-doc-string-face'.
+
+2020-03-11  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove more XEmacs compat code from eshell
+
+       * lisp/eshell/em-glob.el (eshell-extended-glob):
+       * lisp/eshell/em-ls.el (eshell-do-ls):
+       * lisp/eshell/em-unix.el (eshell/du, eshell-mvcpln-template):
+       * lisp/eshell/esh-util.el (eshell-file-attributes): Remove more XEmacs
+       compat code; no longer let-bind the unused variable ange-cache.
+
+2020-03-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/cl-macs.el: More care with `eval` and with `cl-typep`
+
+       (cl-eval-when, cl--compile-time-too, cl-load-time-value):
+       Obey lexical-binding.
+       (cl-check-type): Prefer the predicate rather than the type in the
+       error signal when it's easy to do (as is done outside of CL).
+       (cl-deftype-satisfies): Add definitions for standard types.
+
+2020-03-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/cl-macs.el (cl--transform-lambda): Simplify result
+
+       It used to return a pair (EXP . LAMBDA-CDR) but EXP was always nil, so
+       just return the LAMBDA-CDR instead.
+
+       (cl-defun, cl-iter-defun, cl-defmacro, cl-function, cl-macrolet):
+       Adjust callers accordingly.
+
+2020-03-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/window.el: Avoid `called-interactively-p`.
+
+       (other-window, delete-other-windows, next-buffer, previous-buffer):
+       Use an `interactive` arg instead.
+
+2020-03-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/ido.el: Remove redundant `:group`s
+
+2020-03-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/subr.el (dlet): New macro
+
+       * lisp/calendar/calendar.el (calendar-dlet*): Use it.
+
+2020-03-10  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-03-10  AndreaCorallo  <akrl@sdf.org>
+
+       * Improve load_comp_unit
+
+       Fix uninitialized ephemeral data relocation for the case when a dumped
+       compilation unit is manually reloaded.
+
+       Guard also data_ephemeral_vec against compiler optimizations.
+
+2020-03-10  AndreaCorallo  <akrl@sdf.org>
+
+       * Fix store_function_docstring for for native functions
+
+       Do not Nil native_doc fields.  This will be naturally dumped by
+       pdumper.  This was affecting dumped functions.
+
+2020-03-10  Andrea Corallo  <akrl@sdf.org>
+
+       Fix GC mark for native compiled functions
+
+       native_intspec and native_doc fields has to be reached by the subr
+       cause are not anymore in the CU.
+
+2020-03-10  AndreaCorallo  <akrl@sdf.org>
+
+       * Set relocation class as ephemeral in `comp-limplify-top-level'
+
+2020-03-10  Juri Linkov  <juri@linkov.net>
+
+       Improve new-frame logic of windmove-display-in-direction (bug#39875)
+
+       * lisp/windmove.el (windmove-display-in-direction):
+       For frame-based logic use code similar to display-buffer-pop-up-frame.
+
+2020-03-10  Juri Linkov  <juri@linkov.net>
+
+       In vc-print-branch-log use root instead of the default directory 
(bug#39704)
+
+       * lisp/vc/vc.el (vc-print-branch-log): Use rootdir instead of
+       default-directory for the second arg of vc-print-log-internal.
+
+2020-03-09  Michael Albinus  <michael.albinus@gmx.de>
+
+       Finish implementation of set-file-times FLAG arg in Tramp
+
+       * lisp/net/tramp-adb.el (tramp-adb-handle-set-file-times):
+       Implement FLAG.
+       (tramp-adb-handle-copy-file): Adapt `set-file-times' call.
+
+       * lisp/net/tramp-compat.el (tramp-compat-set-file-times): New defalias.
+
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-handle-set-file-modes)
+       (tramp-gvfs-handle-set-file-times, tramp-gvfs-set-file-uid-gid):
+       Simplify `tramp-gvfs-url-file-name' call.
+
+       * lisp/net/tramp-sh.el (tramp-sh-handle-set-file-times): Implement FLAG.
+       (tramp-do-copy-or-rename-file-via-buffer)
+       (tramp-do-copy-or-rename-file-out-of-band): Add optional argument
+       OK-IF-ALREADY-EXISTS.  Adapt callees.
+       (tramp-do-copy-or-rename-file-via-buffer)
+       (tramp-do-copy-or-rename-file-directly)
+       (tramp-do-copy-or-rename-file-out-of-band): Adapt `set-file-times' call.
+
+       * lisp/net/tramp-smb.el (tramp-smb-handle-copy-directory)
+       (tramp-smb-handle-copy-file): Adapt `set-file-times' call.
+
+       * lisp/net/tramp-sudoedit.el (tramp-sudoedit-do-copy-or-rename-file):
+       Adapt `set-file-times' call.
+       (tramp-sudoedit-handle-set-file-times): Implement FLAG.
+
+       * test/lisp/net/tramp-tests.el (tramp-test22-file-times): Extend test.
+
+2020-03-09  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+       * Fix regexp instroduced by f055f52321
+
+2020-03-09  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Merge from origin/emacs-27
+
+       cf223dc928 ; * src/timefns.c: Fix typo in previous change.
+       20d3d3a950 * src/timefns.c: Add comments.
+
+2020-03-08  Andrea Corallo  <akrl@sdf.org>
+
+       Fix typo into pdumper integration
+
+2020-03-08  Andrea Corallo  <akrl@sdf.org>
+
+       New native-comp CI setup
+
+       - Disable 'test-all' till is known to be broken in this branch.
+
+       - Run 'test-native-bootstrap' always (not only when scheduled).
+
+       - Set 'test-native-bootstrap' timeout to 3 hours.
+
+2020-03-08  Andrea Corallo  <akrl@sdf.org>
+
+       Fix two find function functions for native compilation
+
+       `find-function-library' and `find-library-name' gets fixed for new eln
+       compilation directory layout.
+
+2020-03-08  Daniel Gröber  <dxld@darkboxed.org>
+
+       * lisp/term/rxvt.el: Enable backeted paste and window title
+
+       rxvt-unicode uses the same escape sequences as xterm so just re-use
+       the xterm functions to enable them.  The `xterm-rxvt-function-map`
+       keymap already has
+
+           (define-key map "\e[200~" [xterm-paste])
+
+       so we're already handling the paste sequence and only need to enable it.
+       Tested on rxvt-unicode version 9.22.
+
+       (rxvt-set-window-title): New var.
+       (terminal-init-rxvt): Use it; enable bracketed paste mode;
+       run terminal-init-rxvt-hook.
+
+2020-03-08  Alan Mackenzie  <acm@muc.de>
+
+       CC Mode: allow specified directives (e.g. pragma) to be indented as 
statements
+
+       * lisp/progmodes/cc-cmds.el (c-align-cpp-indent-to-body)
+       (c-cpp-indent-to-body-flag, c-electric-pragma)
+       (c-add-indent-to-body-to-abbrev-table, 
c-clear-stale-indent-to-body-abbrevs)
+       (c-toggle-cpp-indent-to-body): New functions and variables.
+
+       * lisp/progmodes/cc-langs.el (c-std-abbrev-keywords): New lang 
const/var.
+
+       * lisp/progmodes/cc-mode.el (c-populate-abbrev-table): New function.
+       (c-basic-common-init): call the c-populate-abbrev-table.
+       (c-mode, c++-mode, objc-mode, java-mode, idl-mode, pike-mode, awk-mode):
+       Remove the setting of MODE-abbrev-table.
+
+       * lisp/progmodes/cc-vars.el (c-cpp-indent-to-body-directives): New 
defcustom.
+
+       * doc/misc/cc-mode.texi (Custom Macros): Introduce and refer to ....
+       (Indenting Directives): New page documenting the new mechanism.
+
+2020-03-08  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix the MinGW build as followup to recent "nofollow" changes
+
+       * src/w32.c (fdutimens): Call utimensat instead of utime.
+       (set_file_times): Function deleted.
+       (convert_from_timespec): Renamed from convert_from_time_t and
+       modified to accept 'struct timespec' argument instead of 'time_t'.
+       (utimensat): Renamed from utime and modified to accept 'struct
+       timespec [2]' argument and an additional argument FLAG.  Emulate
+       Posix 'utimensat'.  Call 'convert_from_timespec'.
+       (w32_copy_file): Call 'utimensat' instead of 'set_file_times'.
+       * src/fileio.c (Fcopy_file) [WINDOWSNT]: Make the error message be
+       identical to that on Posix platforms.
+
+       * nt/inc/sys/stat.h (utimensat): Provide prototype.
+       * nt/mingw-cfg.site (ac_cv_func_futimens)
+       (gl_cv_func_futimens_works, ac_cv_func_utimensat)
+       (gl_cv_func_utimensat_works): Override Gnulib tests.
+       * nt/gnulib-cfg.mk (OMIT_GNULIB_MODULE_futimens)
+       (OMIT_GNULIB_MODULE_utimensat): Disable these Gnulib modules.
+
+2020-03-08  Andrea Corallo  <akrl@sdf.org>
+
+       * test-native-bootstrap CI test configured for speed 0
+
+       Run for now only speed 0 to limit memory usage and compilation time.
+
+2020-03-08  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Simplify run-at-time
+
+       * lisp/emacs-lisp/timer.el (run-at-time):
+       Remove unnecessary test (Bug#39944).
+
+2020-03-08  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Merge from origin/emacs-27
+
+       0a3682a566 * src/timefns.c: Add comments.
+       b16ba4041d ; lisp/emacs-lisp/seq.el: Explain why we don't use cl-lib ...
+       3cbf4cb796 Eliminate use of cl-concatenate in 'seq' package
+       363d927086 Fix bug with JIT stealth timers
+       818333c85a * doc/lispref/os.texi (time-subtract): Doc fix.
+
+2020-03-08  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/bytecomp.el: Drop warning for loading into Emacs<23
+
+       Stash the major version of the compiling Emacs such that the loading
+       Emacs can later detect when loading a file compiled by a too-new Emacs.
+
+       (byte-compile-fix-header): Remove.
+       (byte-compile-from-buffer): Don't call it any more.
+       (byte-compile-insert-header): Stash the emacs-major-version in it.
+       Don't leave space for `byte-compile-fix-header`.
+
+2020-03-07  Glenn Morris  <rgm@gnu.org>
+
+       Skip filenotify tests on hydra.nixos.org
+
+       They frequently hang for hours.
+       * test/lisp/filenotify-tests.el
+       (file-notify--test-remote-enabled-checked): Default to off on hydra.
+
+2020-03-07  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Add ‘nofollow’ flag to set-file-times
+
+       This is a companion to the recent set-file-modes patch.
+       It adds support for a ‘nofollow’ flag to set-file-times (Bug#39773).
+       Like the set-file-modes patch, it needs work in the w32 port.
+       * admin/merge-gnulib (GNULIB_MODULES): Add futimens, utimensat.
+       Remove utimens.
+       * doc/lispref/files.texi (Changing Files):
+       * etc/NEWS: Mention the change.
+       * lib/gnulib.mk.in, m4/gnulib-comp.m4: Regenerate.
+       * lisp/files.el (copy-directory):
+       * lisp/gnus/gnus-cloud.el (gnus-cloud-replace-file):
+       * lisp/net/tramp-adb.el (tramp-adb-handle-copy-file):
+       * lisp/net/tramp-smb.el (tramp-smb-handle-copy-file):
+       * lisp/tar-mode.el (tar-copy):
+       * test/lisp/filenotify-tests.el (file-notify-test03-events):
+       * test/lisp/files-tests.el:
+       (files-tests-file-name-non-special-set-file-times):
+       * test/lisp/net/tramp-tests.el (tramp-test22-file-times):
+       When setting file times, avoid following symbolic links
+       when the file is not supposed to be a symbolic link.
+       * lib/futimens.c, lib/utimensat.c, m4/futimens.m4, m4/utimensat.m4:
+       New files, copied from Gnulib.
+       * lisp/gnus/gnus-cloud.el (gnus-cloud-replace-file):
+       When creating a file that is not supposed to exist already,
+       use the excl flag to check this.
+       * lisp/net/tramp-adb.el (tramp-adb-handle-set-file-times):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-set-file-times):
+       * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-set-file-times):
+       Accept an optional FLAG arg that is currently ignored,
+       and add a FIXME comment for it.
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-handle-set-file-times):
+       * src/fileio.c (Fset_file_times):
+       Support an optional FLAG arg.
+       * src/fileio.c (Fcopy_file): Use futimens instead of set_file_times,
+       as it’s simpler and is a POSIX API.
+       * src/sysdep.c (set_file_times): Move from here ...
+       * src/w32.c (set_file_times): ... to here, and make it static,
+       since it is now used only in w32.c.  Presumably w32.c should also
+       add support for futimens and utimensat (the POSIX APIs, which
+       Emacs now uses) and it can remove fdutimens (the Gnulib API,
+       which Emacs no longer uses).
+
+2020-03-07  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from Gnulib
+
+       This incorporates:
+       2020-03-07 open, openat: port to (O_RDWR | O_RDONLY) != 0
+       * lib/open.c: Copy from Gnulib.
+
+2020-03-07  Andrea Corallo  <akrl@sdf.org>
+
+       Raise timeout for test-native-bootstrap CI test and build with -j2
+
+2020-03-07  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       72f87f8873 (origin/emacs-27) NS port documentation updates
+       5b19db98ad ; * etc/NEWS: correctly describe what fido-mode is
+       fc47e3ad99 Let fido-mode users force a minibuffer-exit
+       e734961d4c icomplete-fido-exit: New command for the M-j binding
+       335a9bd215 minibuffer-force-complete-and-exit: Allow input with no ma...
+       34132d4bf6 ; * etc/NEWS: Mark 2 entries as fully documented.
+       d28b73841b ; * etc/NEWS: Fix the 'mml-secure-openpgp-sign-with-sender...
+       d1d56a9fd9 ; * etc/NEWS: 'thunk-let' and 'thunk-let*' are fully docum...
+       fc4f4efabf ; * etc/NEWS: No need to document vc-hg and mergebase chan...
+       9e8456cf0f ; * etc/NEWS: No need to document changes in Octave mode.
+       25b4d6fa28 ; * etc/NEWS: No need to document changes in map.el and se...
+       fc4d0f86da ; * etc/NEWS: No need to document Ido news.
+       d4ac478cb3 ; * etc/NEWS: No need to document news of doc-view.el.
+       08c042bd26 Document that 'byte-compile-dynamic' is obsolete
+       512b66abd7 ; * etc/NEWS: No need to document 'goto-address-uri-scheme...
+       3103c01c3e ; * etc/NEWS: Formatting fixes.
+       98306fdfb8 ; * etc/NEWS: No need to document deprecation of 'cl'.
+       6281ed58be ; * etc/NEWS: No need to document the change in 'list-proc...
+       e252341e11 ; * etc/NEWS: 'backup-by-copying-when-privileged-mismatch'...
+       ec5a267ddc ; * etc/NEWS: Mark 'byte-count-to-string-function' as undo...
+       89307ebccd ; * etc/NEWS: Mark 'completion-common-part' face entry as ...
+       fdbe7cacfb Document the changes in 'read-answer'
+       10c58356e4 Document changes in lexical-binding
+       5cb312b5b9 Update ERC mailing list address
+       cb1877321b Use regexp-opt to define bibtex-autokey-transcriptions.  (...
+       3f9c340de0 Improve documentation of 'table-generate-source'
+       33b31dc314 Attempt to avoid rare segfaults in show_mouse_face
+       88c6db9196 Avoid crashes when a fontset has strange entries
+       1814c7e158 Fix rx error with ? and ??
+       40fb20061e * lisp/emacs-lisp/rx.el (rx--string-to-intervals): Fix err...
+       08d7d28d35 Fix args in 'window-text-pixel-size' call in 'fit-window-t...
+       cb1e30910e Have pulse.el preserve existing overlay priorities
+
+       # Conflicts:
+       #       etc/NEWS
+
+2020-03-07  Andrea Corallo  <akrl@sdf.org>
+
+       Add test-native-bootstrap as CI test
+
+2020-03-06  Glenn Morris  <rgm@gnu.org>
+
+       Remove ancient OS X process-connection-type handling
+
+       * src/process.c (init_process_emacs) [DARWIN_OS]:
+       Remove process-connection-type special-casing
+       for OS X < 10.3 (ie pre-2003).
+       Ref https://lists.gnu.org/r/emacs-devel/2005-01/msg00741.html
+
+2020-03-06  Juri Linkov  <juri@linkov.net>
+
+       Fix handling of empty input in describe-variable and describe-symbol
+
+       * lisp/help-fns.el (describe-variable): Use 'user-error' like in
+       'describe-function'.
+       (describe-symbol): Use empty string for arg SYMBOL when input is empty
+       and there is no default value.
+       This allows to signal the error "You didn't specify a function or 
variable"
+       instead of displaying help about the symbol 'nil' on empty input.
+       OTOH, still allows to see help about 'nil' when the input is "nil".
+
+2020-03-06  Juri Linkov  <juri@linkov.net>
+
+       New command make-frame-on-current-monitor to use in windmove (bug#39875)
+
+       * lisp/frame.el (make-frame-on-current-monitor): New command.
+
+       * lisp/windmove.el (windmove-display-in-direction):
+       Use make-frame-on-current-monitor for 'new-frame'.
+       (windmove-display-new-frame): New command.
+       (windmove-display-default-keybindings): Bind
+       windmove-display-new-frame to 'f' key.
+
+       * lisp/window.el (display-buffer-in-direction): Fix quotes in docstring.
+
+2020-03-04  Andrea Corallo  <akrl@sdf.org>
+
+       Fix build for stock configuration
+
+       Vcomp_native_path_postfix is declared only in native configuration.
+
+2020-03-04  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       a3c2d186eb (origin/emacs-27) CC Mode: Fix the handling of two adjacen...
+       a1abf73c76 Fix combine-change-calls-1 for when buffer-undo-list is t
+       db37dd2e84 Don't misinterpret doc string as initial value
+       40b217c2bf Bump checkdoc-version to match library header
+       60418a1ab2 Explain how to unset mode bindings (Bug#39802)
+       7cafbbe964 Fix describe-variable on values with circular syntax (Bug#...
+       592b1cfee9 Improve documentation of next-error-highlight-no-select (b...
+
+2020-03-04  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       a4e4510ccd Fix handling MS-Windows keyboard input above the BMP
+       a38bebb0c1 * etc/NEWS: More complete description of rx 'not' changes.
+       d373647e8f ; * doc/emacs/mini.texi (Yes or No Prompts): Fix last change.
+       1ca6d15656 * doc/emacs/mini.texi (Yes or No Prompts): 'y-or-n-p' now ...
+       fe1a447d52 Don't attempt to cache glyph metrics for FONT_INVALID_CODE
+       b42b894d1d Fix fit-frame-to-buffer for multi-monitor setup
+       366fd4fd07 (emacs-27) ; * etc/NEWS: Fix typo.
+       49d3cd90bd rx: Improve 'or' compositionality (bug#37659)
+       6b48aedb6b * lisp/tab-line.el: Fix auto-hscrolling (bug#39649)
+       c5f255d681 (tag: emacs-27.0.90) ; Update lisp/ldefs-boot.el
+       60c84ad992 ; * etc/TODO: Fix last change.
+       5af9e5baad ; Add an entry to TODO
+       d424195905 Fix rx charset generation
+       9908b5a614 Merge branch 'emacs-27' of git.savannah.gnu.org:/srv/git/e...
+       6dc2ebe00e Fix overquoting in mule.el
+       5cca73dd82 * src/timefns.c (time_arith): Omit incorrect comment.
+       d767c357ca Merge branch 'emacs-27' of git.savannah.gnu.org:/srv/git/e...
+       4dec693f70 * lisp/vc/vc-cvs.el (vc-cvs-ignore): Copy-edit doc string
+       ff729e3f97 ; bug#39779: Fix some typos in documentation.
+       696ee02c3a checkdoc: Don't mistake "cf." for sentence end
+
+       # Conflicts:
+       #       etc/NEWS
+
+2020-03-04  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       5b7d226779 * etc/AUTHORS: Update.
+       4aa758e53d ; ChangeLog.3 update
+       9261b1ed49 * admin/authors.el (authors-ignored-files): Fix entries.
+       86e4da6eaf ; ChangeLog.3 update
+       009c6a1767 ; ChangeLog.3 fixes
+       f9e53947c7 Fix documented slot name of eieio-instance-tracker class
+       999d75c0c1 Range-check width passed to define-fringe-bitmap
+       29e415d6b0 ; ChangeLog.3 fixes
+       4653baa6a5 ; ChangeLog.3 update & fixes.
+       a95ec6e060 * admin/authors.el: Add missing entries
+       af519a6348 Define libgnutls-version properly
+       9ec6eb1065 vc-dir-ignore: More accurately choose base directory
+       e74fb4688b * lisp/emacs-lisp/cursor-sensor.el (cursor-sensor--detect)...
+       3bce7ec382 CC Mode: Protect against consecutive calls to before-chang...
+
+2020-03-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Pacify GCC 9.2.1 20190927 -O3
+
+       Original problem report by N. Jackson in:
+       https://lists.gnu.org/r/emacs-devel/2020-03/msg00047.html
+       I found some other warnings when I used gcc, and fixed them
+       with this patch.
+       * lib-src/etags.c: Include verify.h.
+       (xnmalloc, xnrealloc): Tell the compiler that NITEMS is
+       nononnegative and ITEM_SIZE is positive.
+       * src/conf_post.h (__has_attribute_returns_nonnull)
+       (ATTRIBUTE_RETURNS_NONNULL): New macros.
+       * src/editfns.c (Fuser_full_name): Don’t assume Fuser_login_name
+       returns non-nil.
+       * src/intervals.c (rotate_right, rotate_left, update_interval):
+       * src/intervals.h (LENGTH, LEFT_TOTAL_LENGTH, RIGHT_TOTAL_LENGTH):
+       Use TOTAL_LENGTH0 or equivalent on intervals that might be null.
+       * src/intervals.h (TOTAL_LENGTH): Assume arg is nonnull.
+       (TOTAL_LENGTH0): New macro, with the old TOTAL_LENGTH meaning.
+       (make_interval, split_interval_right): Add ATTRIBUTE_RETURNS_NONNULL.
+       * src/pdumper.c (dump_check_dump_off): Now returns void, since
+       no caller uses the return value.  Redo assert to pacify GCC.
+       (decode_emacs_reloc): Add a seemingly-random eassume to pacify GCC.
+       Ugly, and I suspect due to a bug in GCC.
+
+2020-03-04  Alan Third  <alan@idiocy.org>
+
+       Fix more NS_DRAW_TO_BUFFER #ifdefs (bug#39883)
+
+       * src/nsterm.m (ns_update_end): Make sure the frame is updated after
+       drawing.
+       (ns_focus):
+       (ns_unfocus): Should be checking on NS_DRAW_TO_BUFFER rather than if
+       it's Cocoa or GNUstep.
+
+2020-03-04  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-03-04  Stefan Kangas  <stefankangas@gmail.com>
+
+       Declare speedbar-incompatible-version obsolete
+
+       This variable refers to a now ancient version of speedbar, and is no
+       longer useful.
+
+       * lisp/speedbar.el (speedbar-incompatible-version): Declare obsolete.
+
+2020-03-04  Daniel Colascione  <dancol@dancol.org>
+
+       Ignore spurious focus events
+
+       * src/xterm.c (x_detect_focus_change): Ignore FocusIn and FocusOut
+       events from grabs
+
+2020-03-04  Stéphane Boucher  <Stephane.Boucher@acceo.com>  (tiny change)
+
+       Update default-directory in occur buffer (bug#39608)
+
+       * lisp/replace.el (occur-1): Update default-directory in occur buffer.
+
+2020-03-04  AndreaCorallo  <akrl@sdf.org>
+
+       * Do not crash if the output directory is created in the meanwhile
+
+2020-03-03  AndreaCorallo  <akrl@sdf.org>
+
+       Hash eln ABI once and add it to the output compilation path
+
+       Fix org for eln new compilation folder layout
+
+2020-03-03  AndreaCorallo  <akrl@sdf.org>
+
+       Rework `find-lisp-object-file-name'
+
+       Rework it for eln new compilation folder layout.
+
+2020-03-03  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Time division speedups
+
+       * src/timefns.c (frac_to_double) [FASTER_TIMEFNS]: Prefer intmax_t
+       division or double division to mpz division if they also yield the
+       correctly rounded result.
+
+2020-03-03  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix rounding errors in time conversion
+
+       * src/timefns.c (frac_to_double): Pass FLT_RADIX to mpz_sizeinbase
+       instead of doing the radix calculation ourselves, not always
+       correctly.  Fix off-by-one error in scale, which caused
+       double-rounding.
+       (decode_time_components): Use frac_to_double (via decode_ticks_hz)
+       to fix double-rounding error that can occur even though
+       intermediate results are long double.
+       * test/src/timefns-tests.el (float-time-precision):
+       Test the above fixes.
+
+2020-03-03  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * etc/NEWS: Add entry missed in previous commit
+
+2020-03-03  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/elisp-mode.el (elisp-enable-lexical-binding): New 
command
+
+       (emacs-lisp-mode): Indicate lex/dyn binding mode in the mode line.
+       (elisp--dynlex-modeline-map): New var.
+
+2020-03-03  Štěpán Němec  <stepnem@gmail.com>
+
+       Use help-fns-short-filename in other describe- commands
+
+       The commit
+
+       2015-01-16T22:52:15-05:00!monnier@iro.umontreal.ca
+       24b7f77581
+       (Improve handling of doc-strings and describe-function for cl-generic)
+
+       added 'help-fns-short-filename', which provides file name shortening
+       smarter than a simple 'file-name-nondirectory' call, but besides the
+       generic/eieio functions ('cl--generic-describe', 'cl--describe-class',
+       'eieio-help-constructor'), it is currently only used by
+       'describe-function' (via 'help-fns-function-description-header').
+
+       Make the other help commands use it, too.
+
+       (Other than the obvious consistency/maintenance argument, my immediate
+       motivation for this change is the possibility to customize the file
+       name abbreviation by advising the function.)
+
+       * lisp/help.el (describe-mode): Move to help-fns.el.  The command was
+       already depending on 'find-lisp-object-file-name' defined there.
+       * lisp/help-fns.el (describe-variable) (describe-face) (describe-keymap)
+       (describe-mode): Use 'help-fns-short-filename'.
+
+2020-03-02  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Tweak GMP usage for (HI LO US PS) timestamps
+
+       * src/timefns.c (decode_time_components): Cut down on the number
+       of calls to GMP functions when generating old-style (HI LO US PS)
+       timestamps.
+
+2020-03-02  Alan Third  <alan@idiocy.org>
+
+       Fix macOS/GNUstep compilation warnings
+
+       * src/nsfns.m (handlePanelKeys): Unused function.
+       * src/nsterm.m (ns_set_appearance):
+       ([EmacsView initFrameFromEmacs:]): Use EmacsWindow type instead of
+       NSWindow.
+       (ns_clip_to_row): Unused function.
+       (ns_dumpglyphs_stretch): Remove unused variable.
+       (ns_term_init):
+       ([EmacsWindow setAppearance]): Only compile on macOS.
+       (ns_mouse_position): Make sure f is initialised on GNUstep.
+       * src/emacs.c (main): Move allocation of autorelease pool to before
+       first use.
+
+2020-03-02  Alan Third  <alan@idiocy.org>
+
+       Fix #defines controlling when NS port draws to offscreen buffer
+
+       * src/nsterm.h (NS_DRAW_TO_BUFFER): New definition.
+       * src/nsterm.m (ns_update_begin):
+       (ns_update_end):
+       (ns_focus):
+       ([EmacsView updateFrameSize:]):
+       ([EmacsView initFrameFromEmacs:]):
+       ([EmacsView copyRect:to:]): Use new #define.
+
+2020-03-02  Štěpán Němec  <stepnem@gmail.com>
+
+       whitespace: Turn long lines regexp into a function (bug#36837)
+
+       * lisp/whitespace.el (whitespace-color-on): Turn long lines regexp
+       into a function to ensure it uses current 'whitespace-line-column'
+       and 'fill-column' values.  (Bug#36837)
+       (whitespace-lines-regexp): New function.
+
+2020-03-01  AndreaCorallo  <akrl@sdf.org>
+
+       * ; Clean-up out of date comment
+
+2020-03-01  Stefan Kangas  <stefankangas@gmail.com>
+
+       * lisp/progmodes/cperl-mode.el: Clarify comment.
+
+2020-03-01  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove more XEmacs compat code from viper
+
+       * lisp/emulation/viper-mous.el (viper-multiclick-timeout)
+       (viper-current-click-count, viper-last-click-event-timestamp)
+       (viper-mouse-click-insert-word)
+       (viper-mouse-click-search-word): Remove XEmacs compat code.
+       (viper-event-click-count): Redefine as obsolete function alias
+       for 'event-click-count'.
+       * lisp/emulation/viper-util.el (viper-check-version): Declare
+       obsolete.
+
+2020-03-01  Stefan Kangas  <stefankangas@gmail.com>
+
+       Make 'load-dangerous-libraries' obsolete (Bug#37819)
+
+       When 'load-dangerous-libraries' was t, Emacs allowed loading .elc
+       files compiled by XEmacs.  This patch removes the support for that use
+       case, and declares the variable obsolete.
+
+       * lisp/subr.el (load-dangerous-libraries): Declare obsolete.
+       * src/lread.c (Fload): Ignore its value, and thereby refuse to load
+       files byte compiled by XEmacs.
+       (syms_of_lread): Update doc string of 'bytecomp-version-regexp' to not
+       refer to it.
+       * doc/emacs/building.texi (Lisp Libraries): Remove its documentation.
+
+2020-02-29  Noah Friedman  <friedman@splode.com>
+
+       Fix XEmacs-specific clause in definition of pascal-outline-map.
+
+       * lisp/progmodes/pascal.el (pascal-outline-map): Call set-keymap-name
+       on map, not pascal-outline-map, as the latter is not yet defined.
+
+2020-02-29  Philipp Stephani  <phst@google.com>
+
+       Unbreak build with CHECK_STRUCTS
+
+       * src/pdumper.c (dump_object): Fix hash for Lisp_Type after commit
+       202c3319a28c029d6971dccea92f92425c5e8067.
+
+2020-02-29  AndreaCorallo  <akrl@sdf.org>
+
+       Introduce 'effective_load_path'
+
+2020-02-29  AndreaCorallo  <akrl@sdf.org>
+
+       * Keep comp-subr-list into pure space
+
+       Sad pure space is not effective nowadays but anyway... should go there.
+
+2020-02-28  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Port timestamp tests to odd timezones, (TICKS . HZ)
+
+       * test/src/timefns-tests.el:
+       (format-time-string-padding-minimal-deletes-unneeded-zeros)
+       (format-time-string-padding-minimal-retains-needed-zeros)
+       (format-time-string-padding-spaces)
+       (format-time-string-padding-zeros-adds-on-insignificant-side):
+       Don't assume local time can represent 2000-02-15 00:00:00,
+       as there might be a DST jump over midnight.
+       Work even when timestamps are of (TICKS . HZ) form.
+       Simplify by avoiding need to call time-add.
+
+2020-02-27  Mattias Engdegård  <mattiase@acm.org>
+
+       Revert "Signal an error for the regexp "[:alnum:]""
+
+       This reverts commit 8d5e8cddab732ac90e9ae930c63f7830f9dab24f.
+
+2020-02-27  Mattias Engdegård  <mattiase@acm.org>
+
+       Revert "Don't complain about the regexp "[:-:]""
+
+       This reverts commit 3766bf728a43933083f4525970bcf9fdace3838d.
+
+2020-02-27  Robert Pluim  <rpluim@gmail.com>
+
+       * src/nsterm.m ([EmacsView toolbarClicked:]): Fix last change
+
+2020-02-27  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/gtkutil.c, src/nsterm.m: Fix bug#39808
+
+       Complete 3b4bd4be1d where I apparently failed to grep properly and
+       missed two more places where the dummy events were generated.
+
+       * src/nsterm.m ([EmacsView toolbarClicked:]):
+       * src/gtkutil.c (xg_tool_bar_callback): Don't emit dummy "prefix" 
events.
+
+2020-02-27  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/emacs-lisp/eldoc.el (eldoc-documentation-function): No nil value
+
+       (eldoc--supported-p): Move after the vars it uses.  Simplify.
+       (eldoc-print-current-symbol-info): Revert to previous code which
+       assumed a non-nil value of eldoc-documentation-function.
+
+2020-02-27  Paul Eggert  <eggert@cs.ucla.edu>
+
+       nnmail-cache-close should not use nofollow
+
+       nnmail-cache-close did not work when ~/.nnmail-cache was a symlink
+       to some other directory.  Reported by Michael Albinus (Bug#39793).
+       * lisp/gnus/nnbabyl.el (nnbabyl-create-mbox):
+       * lisp/gnus/nndiary.el (nndiary-generate-nov-file):
+       * lisp/gnus/nnfolder.el (nnfolder-possibly-change-group):
+       * lisp/gnus/nnmbox.el (nnmbox-create-mbox):
+       * lisp/gnus/nnml.el (nnml-generate-nov-file):
+       Pass ‘excl’ to nnmail-write-region when creating a file, for safety.
+       * lisp/gnus/nnmail.el (nnmail-write-region):
+       Add optional MUSTBENEW arg, to stay consistent with write-region.
+       Past ‘nofollow’ to set-file-modes only when MUSTBENEW is ‘excl’.
+
+2020-02-26  Mattias Engdegård  <mattiase@acm.org>
+
+       Don't complain about the regexp "[:-:]"
+
+       Suggested by Clément Pit-Claudel.
+
+       * src/regex-emacs.c (regex_compile):
+       * test/src/regex-emacs-tests.el (regexp-invalid): Tolerate ranges.
+
+2020-02-26  Mattias Engdegård  <mattiase@acm.org>
+
+       Signal an error for the regexp "[:alnum:]"
+
+       Omitting the extra brackets is a common mistake; see discussion at
+       https://lists.gnu.org/archive/html/emacs-devel/2020-02/msg00215.html
+
+       * src/regex-emacs.c (reg_errcode_t, re_error_msgid): Add REG_ECLASSBR.
+       (regex_compile): Check for the mistake.
+       * test/src/regex-emacs-tests.el (regexp-invalid): Test.
+       * etc/NEWS: Announce.
+
+2020-02-26  Michael Albinus  <michael.albinus@gmx.de>
+
+       Finish Tramp's implementation of 'nofollow
+
+       * lisp/net/tramp-adb.el (tramp-adb-handle-file-local-copy):
+       Do not use 'nofollow.
+       (tramp-adb-handle-set-file-modes):
+       * lisp/net/tramp-smb.el (tramp-smb-handle-set-file-modes):
+       * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-set-file-modes):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-set-file-modes):
+       Handle FLAG properly.
+       (tramp-get-remote-chmod-h): Adapt implementation.
+
+       * test/lisp/net/tramp-tests.el (tramp-get-remote-chmod-h): Declare.
+       (tramp--test-ignore-make-symbolic-link-error): Revert last change.
+       (tramp-test20-file-modes): Adapt test.
+
+2020-02-26  Ryan Olson  <ryanolsonx@gmail.com>  (tiny change)
+
+       Show friendly message after package install
+
+       * lisp/emacs-lisp/package.el (package-install): Once we know the
+       package has successfully been installed using the `package-install`
+       command, instead of relying on the compile "Done" message, give a
+       message that tells the user that the package has been
+       installed.  (Bug#21857)
+
+2020-02-26  Mark Oteiza  <mvoteiza@udel.edu>
+
+       Expose ElDoc functions in a hook (Bug#28257)
+
+       * lisp/emacs-lisp/eldoc.el: Update commentary.
+       (eldoc--eval-expression-setup): Use new hook.
+       (eldoc--supported-p): Accommodate new hook.
+       (eldoc-documentation-functions): New hook.
+       (eldoc-documentation-default, eldoc-documentation-compose): New
+       functions.
+       (eldoc-documentation-function): Use 'eldoc-documentation-default' as new
+       default value.  Update documentation and custom attributes.
+       (eldoc-print-current-symbol-info): Accommodate possible null value for
+       'eldoc-documentation-function'.
+       * etc/NEWS: Mention them.
+       * doc/emacs/programs.texi (Emacs Lisp Documentation Lookup): Mention
+       new hook and changes to 'eldoc-documentation-function'.
+       * lisp/hexl.el (hexl-mode, hexl-revert-buffer-function):
+       * lisp/ielm.el (inferior-emacs-lisp-mode):
+       * lisp/progmodes/cfengine.el (cfengine3-mode):
+       * lisp/progmodes/elisp-mode.el (emacs-lisp-mode):
+       * lisp/progmodes/octave.el (octave-mode):
+       * lisp/progmodes/python.el (python-mode): Use new hook.
+
+2020-02-25  Mattias Engdegård  <mattiase@acm.org>
+
+       Generate 'substring' byte op (bug#39709)
+
+       The 'substring' byte op was not emitted, apparently by mistake.  Fix.
+       Suggested by Mark Oteiza <mvoteiza@udel.edu>.
+
+       * lisp/emacs-lisp/bytecomp.el (byte-defop-compiler): Add '1-3' clause.
+       (byte-compile-one-to-three-args): New.
+       * lisp/emacs-lisp/byte-opt.el (byte-compile-side-effect-free-ops):
+       Add 'byte-substring'.
+       * test/lisp/emacs-lisp/bytecomp-tests.el
+       (byte-opt-testsuite-arith-data): Test 'substring'.
+
+2020-02-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       Finish implementation of {set-}file-modes FLAG arg in Tramp
+
+       * lisp/net/tramp-adb.el (tramp-adb-handle-file-local-copy): Do not use
+       'nofollow for temporary files.  Use `tramp-compat-set-file-modes'.
+       (tramp-adb-handle-write-region): Do not use 'nofollow for
+       temporary files.
+       (tramp-adb-handle-set-file-modes): Implement FLAG.
+
+       * lisp/net/tramp-compat.el (tramp-compat-file-modes)
+       (tramp-compat-set-file-modes): New defaliases.
+
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-handle-set-file-modes):
+       Make explicit check (eq flag 'nofollow).
+
+       * lisp/net/tramp-sh.el (tramp-sh-handle-set-file-modes): Implement FLAG.
+       (tramp-do-copy-or-rename-file-directly)
+       (tramp-sh-handle-file-local-copy, tramp-sh-handle-write-region):
+       Do not use 'nofollow for temporary files.
+       (tramp-get-remote-chmod-h): New defun.
+
+       * lisp/net/tramp-smb.el (tramp-smb-handle-set-file-modes):
+       Implement FLAG.
+
+       * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-set-file-modes):
+       Implement FLAG.
+       (tramp-sudoedit-handle-write-region): Use `tramp-compat-set-file-modes'.
+
+       * lisp/net/tramp.el (tramp-default-file-modes): Optional argument FLAG.
+       (tramp-handle-file-modes): Use `file-truename' instead of
+       `file-chase-links'.  The latter function does not work for remote
+       file names.
+       (tramp-handle-write-region): Call `tramp-default-file-modes' with
+       'nofollow if needed.  Do not use 'nofollow for temporary files.
+
+       * test/lisp/net/tramp-tests.el
+       (tramp--test-ignore-make-symbolic-link-error): Check also for
+       "Cannot chmod .* with nofollow flag" error.
+       (tramp-test20-file-modes): Extend test.
+       (tramp--test-emacs28-p): New defun.
+
+2020-02-25  Mattias Engdegård  <mattiase@acm.org>
+
+       Fix mistake in regexp cleanup
+
+       This error was introduced in 770f76f050.
+
+       * lisp/org/org.el (org-ts-regexp-inactive): Match up to the first ']'.
+
+2020-02-25  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from Gnulib
+
+       This incorporates:
+       2020-02-24 getloadavg: don't use /usr/local when cross-compiling on AIX
+       2020-02-24 fcntl: add witness of gnulib override
+       * lib/fcntl.in.h, m4/getloadavg.m4: Copy from Gnulib.
+
+2020-02-25  Juri Linkov  <juri@linkov.net>
+
+       * lisp/textmodes/nroff-mode.el (nroff-mode-map): Remove key 'M-s' 
(bug#39706)
+
+       * lisp/comint.el (comint-redirect-setup): Guard mode-line-process 
(bug#39705)
+
+2020-02-24  Eli Zaretskii  <eliz@gnu.org>
+
+       Adapt the MS-Windows build to 'nofollow' changes
+
+       * nt/gnulib-cfg.mk (OMIT_GNULIB_MODULE_fchmodat)
+       (OMIT_GNULIB_MODULE_lchmod): Set to true to omit building these
+       modules on MS-Windows.
+       * nt/mingw-cfg.site (ac_cv_func_fchmodat)
+       (gl_cv_func_fchmodat_works, ac_cv_func_lchmod): Disable tests on
+       MS-Windows.
+
+       * src/w32.c (chmod_worker, lchmod, fchmodat): New functions.
+       (sys_chmod): Move most of the code to chmod_worker.
+       * src/w32.h (fchmodat, lchmod): Add prototypes.
+
+2020-02-24  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Add 'nofollow' flag to set-file-modes etc.
+
+       This avoids some race conditions (Bug#39683).  E.g., if some other
+       program changes a file to a symlink between the time Emacs creates
+       the file and the time it changes the file’s permissions, using the
+       new flag prevents Emacs from inadvertently changing the
+       permissions of a victim in some completely unrelated directory.
+       * admin/merge-gnulib (GNULIB_MODULES): Add fchmodat.
+       * doc/lispref/files.texi (Testing Accessibility, Changing Files):
+       * doc/lispref/os.texi (File Notifications):
+       * etc/NEWS:
+       Adjust documentation accordingly.
+       * lib/fchmodat.c, lib/lchmod.c, m4/fchmodat.m4:
+       * m4/lchmod.m4: New files, copied from Gnulib.
+       * lib/gnulib.mk.in: Regenerate.
+       * lisp/dired-aux.el (dired-do-chmod):
+       * lisp/doc-view.el (doc-view-make-safe-dir):
+       * lisp/emacs-lisp/autoload.el (autoload--save-buffer):
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-file):
+       * lisp/eshell/em-pred.el (eshell-pred-file-mode):
+       * lisp/files.el (backup-buffer-copy, copy-directory):
+       * lisp/gnus/mail-source.el (mail-source-movemail):
+       * lisp/gnus/mm-decode.el (mm-display-external):
+       * lisp/gnus/nnmail.el (nnmail-write-region):
+       * lisp/net/tramp-adb.el (tramp-adb-handle-file-local-copy)
+       (tramp-adb-handle-write-region):
+       * lisp/net/tramp-sh.el (tramp-do-copy-or-rename-file-directly):
+       * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-write-region):
+       * lisp/net/tramp.el (tramp-handle-write-region)
+       (tramp-make-tramp-temp-file):
+       * lisp/server.el (server-ensure-safe-dir):
+       * lisp/url/url-util.el (url-make-private-file):
+       When getting or setting file modes, avoid following symbolic links
+       when the file is not supposed to be a symbolic link.
+       * lisp/doc-view.el (doc-view-make-safe-dir):
+       Omit no-longer-needed separate symlink test.
+       * lisp/gnus/gnus-util.el (gnus-set-file-modes):
+       * lisp/net/tramp.el (tramp-handle-file-modes):
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-handle-set-file-modes):
+       * src/fileio.c (symlink_nofollow_flag): New function.
+       (Ffile_modes, Fset_file_modes):
+       Support an optional FLAG arg.  All C callers changed.
+       * lisp/net/ange-ftp.el (ange-ftp-set-file-modes):
+       * lisp/net/tramp-adb.el (tramp-adb-handle-set-file-modes):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-set-file-modes):
+       * lisp/net/tramp-smb.el (tramp-smb-handle-set-file-modes):
+       * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-set-file-modes):
+       Accept an optional FLAG arg that is currently ignored,
+       and add a FIXME comment for it.
+       * m4/gnulib-comp.m4: Regenerate.
+
+2020-02-24  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from Gnulib
+
+       This incorporates:
+       2020-02-23 use 'restrict'
+       * lib/careadlinkat.h, lib/md5.h, lib/sha1.h, lib/sha256.h:
+       * lib/sha512.h, lib/strftime.h, lib/string.in.h, m4/nstrftime.m4:
+       Copy from Gnulib.
+       * m4/gnulib-comp.m4: Regenerate.
+
+2020-02-23  Wilson Snyder  <wsnyder@wsnyder.org>
+
+       Add `verilog-auto-inst-template-required'.
+
+       * lisp/progmodes/verilog-mode.el (verilog-auto-inst-template-required)
+       (verilog-auto-inst): Add `verilog-auto-inst-template-required' to only
+       insert AUTOINST ports inside an AUTO_TEMPLATE, msg3170. Reported by Ted
+       Huang, Brian Magnuson.
+
+2020-02-23  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       ba7004b2a7 (origin/emacs-27) Shorten some ppss struct field names
+       693749c60f Java Mode: Fix fontification of variable decl inside `for'
+       884b68ca2c CC Mode: Fontify foo in "const auto foo :" correctly
+
+       # Conflicts:
+       #       etc/NEWS
+
+2020-02-23  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       dd5756436c Move more logic to vc-ignore from vc-default-ignore
+       2aed279be1 Warn about the likes of "[:alnum:]" in regexps
+       0273f261a7 Don't write absolute filenames and duplicate strings to CV...
+       d7c22338d2 Fix cursor-sensor--detect when current buf != selected win...
+       2e39fc83bb * doc/emacs/sending.texi (Mail Sending): Fix index entries.
+       b410f902d5 Document 'message-send-mail-function' in the Emacs manual
+       ac0546612d Fix reference to 'message-send-and-exit' in Emacs manual
+       cd6a9b8f65 Skip shell prompt on current line in Eshell even if it's p...
+
+2020-02-23  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from Gnulib
+
+       This incorporates:
+       2020-02-22 fchmodat, lchmod: simplify
+       2020-02-22 lchmod: fix link error on Solaris 10
+       2020-02-22 use 'restrict' in all POSIX function declarations
+       2020-02-22 chmodat, chownat: new modules
+       * lib/gnulib.mk.in: Regenerate.
+       * lib/inttypes.in.h, lib/openat.h, lib/signal.in.h:
+       * lib/stdio.in.h, lib/stdlib.in.h, lib/string.in.h:
+       * lib/sys_stat.in.h, lib/time.in.h, lib/unistd.in.h, m4/inttypes.m4:
+       * m4/signal_h.m4, m4/stdio_h.m4, m4/stdlib_h.m4, m4/string_h.m4:
+       * m4/sys_socket_h.m4, m4/sys_stat_h.m4, m4/time_h.m4:
+       * m4/unistd_h.m4: Copy from Gnulib.
+
+2020-02-23  Juri Linkov  <juri@linkov.net>
+
+       * lisp/font-lock.el (font-lock-ensure): Use font-lock-specified-p 
(bug#39597)
+
+2020-02-22  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from Gnulib
+
+       This incorporates:
+       2020-02-21 largefile: remove _DARWIN_USE_64_BIT_INODE
+       2020-02-21 Add ‘extern "C"’ to count-one-bits.h etc.
+       * lib/count-leading-zeros.h, lib/count-one-bits.h:
+       * lib/count-trailing-zeros.h, m4/largefile.m4: Copy from Gnulib.
+
+2020-02-22  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Restore runtime check for invalid tag
+
+       * src/data.c (wrong_type_argument): Restore check that the
+       object’s tag is valid, since invalid tags exist again.
+       * src/lisp.h (Lisp_Type_Unused0): New constant.
+
+2020-02-21  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/keyboard.c: Copy last tool-bar change to tab-bar.
+
+       (make_lispy_event) <TAB_BAR_EVENT>: Make event with proper location 
info.
+
+       * src/xdisp.c (handle_tab_bar_click, tty_handle_tab_bar_click): Don't
+       emit dummy "prefix" event.
+
+2020-02-21  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/keyboard.c (make_lispy_event): Generate proper tool-bar events.
+
+       Generate events which carry the location info.
+
+       * src/xdisp.c (handle_tool_bar_click): Don't emit dummy "prefix" events.
+
+2020-02-21  Federico Tedin  <federicotedin@gmail.com>
+
+       Allow tempo-define-template to reassign tags to new templates
+
+       * lisp/tempo.el (tempo-define-template): Update documentation string
+       to mention that existing tags can be reassigned new templates.
+       (tempo-add-tag): Allow reassigning tags to new templates.
+       Additionally, invalidate tag collections in all buffers if the global
+       tags list is being modified.
+       (tempo-invalidate-collection): Allow invalidating tag collections in
+       all buffers at the same time.
+       * test/lisp/tempo-tests.el (tempo-define-tag-globally-test): Add a
+       test to check that new templates plus tags can be defined from any
+       buffer and then immediately used in other buffers.
+       (tempo-overwrite-tag-test): Add a test to check that tags can be
+       reassigned templates.
+       * etc/NEWS: Announce changes in tempo.el.
+
+       (Bug#39555)
+
+2020-02-20  Mattias Engdegård  <mattiase@acm.org>
+
+       Less bad permutation generator in regexp-opt test
+
+       * test/lisp/emacs-lisp/regexp-opt-tests.el
+       (regexp-opt-test--permutation, regexp-opt-test--factorial): Remove.
+       (regexp-opt-test--permutations): Rewrite.
+
+2020-02-20  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       9f08524748 (origin/emacs-27) Fix broken regexps
+       1d10885763 ; spelling and comment fix
+       614203bc80 ; make change-history-commit
+       28399e585e * Makefile.in (PREFERRED_BRANCH): Now emacs-27.
+       62afbc513a Fix bug when visiting euc-jp-encoded directories
+       a2c4eeeecd Clarify when fixnums are used.
+       4e5ac4b0c6 Reorder discussion of integer basics
+       f765aad28b Make OMake support slightly less expensive (bug#39595)
+       39410cfc5a Speed up 'msft' and 'watcom' compilation error regexps
+       96a269d045 Speed up 'maven' compilation error message regexp
+       efc9d4fe3e Amend c-backward-sws better to handle multiline block comm...
+
+2020-02-20  Mattias Engdegård  <mattiase@acm.org>
+
+       Remove subsumed repetitions in regexps
+
+       Make regexps smaller and faster by removing terms that are superfluous
+       by virtue of standing next to another term that matches more.  See
+       https://lists.gnu.org/archive/html/emacs-devel/2020-01/msg00949.html
+       for details.
+
+       * lisp/bs.el (bs--make-header-match-string):
+       * lisp/gnus/deuglify.el (gnus-outlook-repair-attribution-block):
+       * lisp/gnus/message.el (message-subject-trailing-was-ask-regexp)
+       (message-subject-trailing-was-regexp):
+       * lisp/informat.el (Info-validate):
+       * lisp/net/browse-url.el (browse-url-button-regexp):
+       * lisp/net/rcirc.el (rcirc-url-regexp):
+       * lisp/org/ob-core.el (org-babel-remove-result):
+       * lisp/org/ob-fortran.el (org-babel-fortran-ensure-main-wrap):
+       * lisp/org/org-capture.el (org-capture-set-target-location):
+       * lisp/org/org-table.el (org-table-expand-lhs-ranges):
+       * lisp/org/org.el (org-maybe-keyword-time-regexp, org-ts-regexp)
+       (org-ts-regexp-inactive, org-ts-regexp-both):
+       * lisp/play/gametree.el (gametree-hack-file-layout):
+       * lisp/progmodes/cc-mode.el (c-Java-defun-prompt-regexp):
+       * lisp/progmodes/idlw-shell.el (idlwave-shell-halting-error):
+       * lisp/progmodes/ruby-mode.el (ruby-mode-set-encoding):
+       * lisp/progmodes/verilog-mode.el (verilog-error-font-lock-keywords)
+       (verilog-verilint-off, verilog-case-indent-level)
+       (verilog-within-translate-off, verilog-start-translate-off)
+       (verilog-back-to-start-translate-off, verilog-end-translate-off)
+       (verilog-expand-dirnames):
+       * lisp/term.el (term-control-seq-regexp):
+       * lisp/textmodes/reftex-vars.el (featurep):
+       * lisp/url/url-gw.el (url-open-telnet):
+       * lisp/vc/ediff-ptch.el (ediff-context-diff-label-regexp):
+       * lisp/vc/pcvs-parse.el (cvs-parse-status):
+       * test/src/regex-emacs-tests.el (regex-tests-PCRE):
+       Remove subsumed repetitions.
+       * lisp/progmodes/sh-script.el (sh-syntax-propertize-function):
+       Simplify repetition of a repetition.
+
+2020-02-20  Mattias Engdegård  <mattiase@acm.org>
+
+       Add and remove backslashes in regexps
+
+       These irregularities were found by relint; see
+       https://lists.gnu.org/archive/html/emacs-devel/2020-01/msg00949.html .
+
+       * doc/lispref/modes.texi (Example Major Modes):
+       * etc/srecode/el.srt:
+       * lisp/cedet/data-debug.el (data-debug-mode):
+       * lisp/cedet/semantic/grammar.el (semantic-grammar-mode):
+       * lisp/cedet/srecode/srt-mode.el (srecode-template-mode):
+       * lisp/comint.el (comint--unquote&requote-argument):
+       * lisp/emacs-lisp/lisp-mode.el (lisp-mode):
+       * lisp/gnus/mm-uu.el (mm-uu-type-alist):
+       * lisp/progmodes/cc-awk.el (c-awk-harmless-pattern-characters*):
+       * lisp/progmodes/cfengine.el (cfengine-common-settings):
+       * lisp/progmodes/cperl-mode.el (cperl-after-sub-regexp, 
cperl-init-faces):
+       * lisp/shell.el (shell-chdrive-regexp, shell--unquote&requote-argument):
+       * lisp/textmodes/tex-mode.el (tex-common-initialization):
+       Remove duplicated backslashes in character alternatives.
+
+       * lisp/emacs-lisp/lisp-mode.el (lisp-el-font-lock-keywords-2):
+       * lisp/progmodes/opascal.el (opascal--syntax-propertize):
+       * lisp/progmodes/pascal.el (pascal--syntax-propertize):
+       Remove backslashes escaping non-special characters.
+
+       * lisp/progmodes/fortran.el (fortran-font-lock-keywords-3): Escape '*'.
+       * lisp/progmodes/perl-mode.el (perl-syntax-propertize-function):
+       Escape '^'.
+
+2020-02-20  Mattias Engdegård  <mattiase@acm.org>
+
+       Remove Emacs 20 bug workaround in ebnf2ps (bug#39663)
+
+       * lisp/progmodes/ebnf2ps.el (ebnf-range-regexp): Remove.  All calls
+       replaced with a string equivalent to the returned value.
+
+2020-02-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       shr comment typo fix
+
+       * lisp/net/shr.el (shr-parse-base): Comment typo fix.
+
+2020-02-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix problem with degenerate <html base="."> specs in shr
+
+       * lisp/url/url-expand.el (url-expand-file-name): Don't bug out on
+       degenerate base/expander pairs (bug#39235).
+
+2020-02-20  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix <button>...</button> submit button rendering in eww
+
+       * lisp/net/eww.el (eww-form-submit): Use the contents of the
+       <button>...</button> for the string if there is no value
+       (bug#39326).
+
+2020-02-20  Kévin Le Gouguec  <kevin.legouguec@gmail.com>
+
+       Introduce face for <code> elements in shr
+
+       * lisp/net/shr.el (shr-tag-code): Don't use the `default' font,
+       because it has properties that will override surrounding elements
+       (like <a...>) (bug#39504).
+
+2020-02-19  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix some file-modes races
+
+       * lisp/gnus/gnus-start.el (gnus-save-newsrc-file)
+       (gnus-slave-save-newsrc):
+       * lisp/gnus/gnus-uu.el (gnus-uu-initialize):
+       * lisp/gnus/mm-archive.el (mm-dissect-archive):
+       * lisp/gnus/mm-decode.el (mm-temp-files-delete)
+       (mm-display-external):
+       * lisp/image-dired.el (image-dired-create-thumb-1):
+       Use with-file-modes rather than setting the file modes later.
+       This fixes some race conditions where the file temporarily
+       has the wrong permissions.
+
+2020-02-19  Johan Bockgård  <bojohan@gnu.org>
+
+       Fix search for ~/.Xdefaults-HOSTNAME (again)
+
+       * src/xrdb.c (get_environ_db): Fix typo when handling
+       ~/.Xdefaults-HOSTNAME.
+
+2020-02-19  Jeremy Compostella  <jeremy.compostella@gmail.com>
+
+       Fix conversion of text/html->multipart/related
+
+       * lisp/gnus/mml.el (mml-expand-all-html-into-multipart-related):
+       New function (bug#39230).
+       (mml-generate-mime): Use it to expand all HTML parts, no matter
+       where in the MIME tree.
+
+2020-02-19  Masahiro Nakamura  <tsuucat@icloud.com>
+
+       Fix working text related issues on NS (Bug#38851)
+
+       * src/keyboard.c (read_char): Prevent redsiplay right after
+       ns-unput-working-text event.
+       * src/nsterm.m ([EmacsView insertText:]): Partially revert commit
+       ba04217.
+       ([EmacsView firstRectForCharacterRange:]): Fix candidate window
+       position when cursor is on echoarea.
+       ([EmacsView mouseDown:])
+       ([EmacsView windowDidResignKey:]): Don't delete working text.
+
+2020-02-19  Alan Third  <alan@idiocy.org>
+
+       Fix horizontal bit shifting
+
+       * src/nsterm.m ([EmacsView copyRect:to:]): Calculate the horizontal
+       difference instead of just the vertical.
+       ([EmacsView updateLayer]): Fix NSTRACE message.
+
+2020-02-19  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * doc/misc/texinfo.tex: Update from Gnulib.
+
+2020-02-19  Juri Linkov  <juri@linkov.net>
+
+       Support state changing VC operations in dired-mode on files (bug#34949)
+
+       * lisp/vc/vc.el (vc-deduce-fileset): Don't error out when observer is 
nil.
+       (vc-dired-deduce-fileset): Add optional args 'state-model-only-files'
+       and 'observer'.  Check that all files are in a consistent state
+       when state-model-only-files is non-nil.  Error out on directories.
+
+       * lisp/vc/vc-dispatcher.el (vc-dispatcher-browsing): Check dired-mode
+       for derived-mode-p.
+
+2020-02-18  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/wdired.el (wdired-next-line, wdired-previous-line): Preserve 
column
+
+2020-02-17  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Avoid unlikely load-average bug
+
+       * src/fns.c (Fload_average): Do not crash or return nonsense
+       if the load average exceeds most-positive-fixnum/100 (Bug#39577).
+
+2020-02-16  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Improve C-h C-h bug fix
+
+       * src/lread.c (read1): Guard against two 'struct Lisp_Vector *'
+       pointers differing only in their most significant bit.  Problem
+       reported by Pip Cet (Bug#39529#22).
+
+2020-02-16  Glenn Morris  <rgm@gnu.org>
+
+       * src/lread.c (read1): Fix int/Lisp_Object mix up.
+
+       Found by --enable-check-lisp-object-type.
+
+2020-02-16  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       7ceb45f61f (origin/emacs-27) Reformulate c-end-of-macro, handling mul...
+       888ffd960c Fix unexec failure on macOS 10.15.4
+       b392c9f365 Fix 'reverse-region' when less than one line is in region
+       7448834f73 Correct default regexp in 'package-menu-hide-package'
+       faada7ca42 Remove obsolete menu entry "Redisplay buffer"
+       78d76cd93c Remove redundant 'msft' compilation error rule (bug#39595)
+       75a9eee8b8 ; * src/editfns.c (Fbuffer_size): Tiny clarification.
+       4d8d25d641 * doc/lispref/variables.texi (special-variable-p): Clarify...
+       9f6a4bbcc9 Remove the optional KEEP-ORDER argument to regexp-opt
+       d1e8ce8bb6 Make after-change-functions called from call-process get t...
+
+       # Conflicts:
+       #       etc/NEWS
+
+2020-02-16  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix C-h C-h bug due to mutating a hash key
+
+       Problem reported by Federico Tedin (Bug#39529).
+       The problem was that dumping uses a hash table based on 'equal'
+       when purecopying compiled objects, but then modifies the compiled
+       objects while they are keys in the table.  This no-no was uncovered
+       by the sxhash fixes in 2020-01-07T19:23:11Z!eggert@cs.ucla.edu.
+       Eli Zaretski pinpointed the patch that triggered the bug.
+       * src/lread.c (read1): When reading a compiled object, replace
+       its docstring with a unique negative integer instead of with 0,
+       so that purecopy doesn’t unify it with some other compiled object
+       that happens to have the same Lisp code.
+
+2020-02-15  Glenn Morris  <rgm@gnu.org>
+
+       Remove another test for deleted lread feature
+
+       * test/lisp/emacs-lisp/bytecomp-tests.el
+       (bytecomp-tests--old-style-backquotes): Remove.
+
+2020-02-15  Mark Oteiza  <mvoteiza@udel.edu>
+
+       Fix typos
+
+       * src/lcms.c (lcms-xyz->jch, lcms-jch->xyz): Swap first line of 
docstrings.
+
+2020-02-14  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * etc/NEWS: Improve last change
+
+2020-02-14  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       When searching a topic in Gnus, search all topic's groups
+
+       Bug#39515
+
+       * lisp/gnus/nnir.el (gnus-group-make-nnir-group): Bring the code in
+       line with the documentation, which says that all topic groups will be
+       searched, even if they're not visible.
+
+2020-02-14  Glenn Morris  <rgm@gnu.org>
+
+       Remove lread tests for a feature that was deleted
+
+       * test/src/lread-tests.el (lread-tests--old-style-backquotes)
+       (lread-tests--force-new-style-backquotes): Remove.
+
+2020-02-14  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/lread.c: Remove old-style backquotes support
+
+       (new_backquote_flag): Delete variable.
+       (load_error_old_style_backquotes): Delete function.
+       (force_new_style_backquotes): Delete variable.
+       (read_internal_start): Don't obey it any more.
+
+2020-02-14  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/gnus/nnmaildir.el: Fix O(n^2) problem when leaving a group
+
+       Use lexical-binding.
+
+       (nnmaildir-close-group): Use a hash-table rather than a list to keep
+       track of the files we have seen.
+
+       * lisp/gnus/nnheader.el (nnheader-parse-naked-head):
+       Use make-full-mail-header.
+
+2020-02-14  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/simple.el (undo): Use undo--last-change-was-undo-p
+
+2020-02-14  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix Tramp tests for MS Windows
+
+       * test/lisp/net/tramp-tests.el (tramp-test29-start-file-process)
+       (tramp-test30-make-process): Improve for MS-Windows.
+
+2020-02-14  Mark Oteiza  <mvoteiza@udel.edu>
+
+       Add an appropriate error for reading bad JSON arrays
+
+       * lisp/json.el (json-array-format): New error.
+       (json-read-array): Use it.
+
+2020-02-13  Alan Third  <alan@idiocy.org>
+
+       Use CGImage instead of NSBitmapImageRep (bug#32932)
+
+       * src/nsterm.m (ns_update_end):
+       (ns_clear_frame): Remove forced draws.
+       (ns_draw_fringe_bitmap):
+       (ns_dumpglyphs_image): No longer need to invert images as the context
+       is already flipped.
+       ([EmacsView updateFrameSize:]):
+       ([EmacsView initFrameFromEmacs:]): Use new function.
+       ([EmacsView createDrawingBuffer]): Replaces 
createDrawingBufferWithRect:.
+       ([EmacsView focusOnDrawingBuffer]): Set CGImage context.
+       ([EmacsView windowDidChangeBackingProperties:]): Use new function.
+       ([EmacsView copyRect:to:]): Copy using CGImages.
+       ([EmacsView wantsUpdateLayer]):
+       ([EmacsView updateLayer]): New Functions.
+       ([EmacsView drawRect:]): We no longer do anything special here for
+       Cocoa.
+       ([EmacsView windowDidChangeBackingProperties:]): Fix indentation and
+       add NSTRACE.
+
+2020-02-13  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       0304f53076 (origin/emacs-27) doc/misc/org.texi: Fix @dircategory
+       027da652a4 Fix display of minibuffer prompt in ido.el
+       5a21aaff46 rx: Use longest match for all-string 'or' forms (bug#37659)
+       2b12c2b6f2 Make sure not to mark directories
+       ff4ed4a0ff ; Add a TODO
+       3a5129a1c9 vc-hg-dir-status-files: Fix when DIR is not repository root
+
+       # Conflicts:
+       #       etc/NEWS
+
+2020-02-13  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       ad5e350ab7 c-end-of-macro: Handle block comment lines with unescaped 
N...
+       06c302d425 Fix set-fontset-font with ADD arg non-nil
+       530067463b Correct "different than" to "different from" where appropr...
+       56b8768b32 More accurate documentation of 'package-menu-hide-package'
+
+2020-02-13  Michael Albinus  <michael.albinus@gmx.de>
+
+       Simplify Tramp caching
+
+       * lisp/net/tramp-cache.el (tramp-flush-file-upper-properties)
+       (tramp-flush-directory-properties)
+       (tramp-flush-connection-properties, tramp-list-connections)
+       (tramp-parse-connection-properties):
+       * lisp/net/tramp-gvfs.el (tramp-parse-goa-accounts)
+       (tramp-parse-media-names): Simplify cache handling.
+
+2020-02-13  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix `tramp-interrupt-process'
+
+       * lisp/net/tramp.el (tramp-interrupt-process): Improve command.
+
+       * test/lisp/net/tramp-tests.el (tramp-test06-directory-file-name)
+       (tramp-test26-file-name-completion): Simplify.
+       (tramp-test31-interrupt-process): Remove :unstable tag.
+
+2020-02-12  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix Tramp tests towards *BSD
+
+       * test/lisp/net/tramp-tests.el (tramp-get-remote-gid): Declare.
+       (tramp-test18-file-attributes): Check `file-ownership-preserved-p'
+       only if possible.
+       (tramp-test30-make-process): Modify test due to *BSD.
+
+2020-02-11  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix problem with auth-source.el in Tramp
+
+       * lisp/net/tramp.el (tramp-read-passwd):
+       Use `tramp-compat-temporary-file-directory'.  (Bug#39389, Bug#39489)
+
+2020-02-10  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix window position in Tramp's shell-command
+
+       * lisp/net/tramp.el (tramp-handle-shell-command): Fix `window-start'
+       in output buffer.  (Bug#39171)
+
+2020-02-10  Juri Linkov  <juri@linkov.net>
+
+       Use quit-restore-window to close tab (bug#39446)
+
+       * lisp/tab-bar.el (display-buffer-in-new-tab): New function with code
+       from display-buffer-in-tab.
+       (display-buffer-in-tab): Call display-buffer-in-new-tab.
+       (switch-to-buffer-other-tab): Instead of 'display-buffer-same-window'
+       use '(reusable-frames . t)'.
+
+       * lisp/windmove.el (windmove-display-in-direction): Set arg 'type'
+       to 'tab' for window--display-buffer when creating a new tab.
+
+       * lisp/window.el (quit-restore-window): Call tab-bar-close-tab
+       when quit-restore type is 'tab'.
+       (display-buffer-record-window): Set window-parameter 'quit-restore'
+       to 'tab' for type 'tab'.
+       (window--display-buffer): Set window-prev-buffers to nil for tab too.
+
+2020-02-09  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from Gnulib
+
+       This incorporates:
+       2020-02-08 lchmod: ensure declaration on HP-UX
+       2020-02-08 fchmodat: fix endless recursion on Cygwin
+       2020-02-08 Fix compilation errors in a testdir
+       2020-02-07 fchmodat: AT_SYMLINK_NOFOLLOW fix for non-symlinks
+       2020-02-04 Port _Noreturn to older Clang
+       2020-02-03 libc-config: port to Apple’s Clang variant
+       * lib/_Noreturn.h, lib/c++defs.h, lib/libc-config.h, lib/sys_stat.in.h:
+       * m4/gnulib-common.m4, m4/sys_stat_h.m4: Copy from Gnulib.
+       * lib/gnulib.mk.in: Regenerate.
+
+2020-02-09  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/simple.el (undo-redo): New command
+
+       (undo--last-change-was-undo-p): New function.
+
+       * test/lisp/simple-tests.el (simple-tests--exec): New function.
+       (simple-tests--undo): New test.
+
+2020-02-08  Eli Zaretskii  <eliz@gnu.org>
+
+       Allow composition of pure-ASCII strings in the mode line
+
+       * src/composite.c (Fcomposition_get_gstring): Allow unibyte
+       strings if they are pure ASCII, by copying text into a
+       multibyte string.
+
+2020-02-08  Kyle Hubert  <khubert@gmail.com>  (tiny change)
+
+       Improve prefix arg support in 'ediff-scroll-horizontally'
+
+       * lisp/vc/ediff-util.el (ediff-scroll-horizontally): Use
+       'current-prefix-arg' to pass the value of prefix argument to
+       scrolling commands.  (Bug#39353)
+
+2020-02-08  Yuan Fu  <casouri@gmail.com>
+
+       Enhance memory address evaluation in gdb-mi
+
+       Before, the memory buffer evaluated the expression as address and used
+       the fixed result in each stop.  This change store the expression
+       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
+       evaluating the address, and we display the last successfully displayed
+       memory page.
+       * lisp/progmodes/gdb-mi.el (gdb-memory-address-expression)
+       (gdb--memory-display-warning): New variables.
+       (gdb-memory-address): Change default value to nil; add docstring.
+       (def-gdb-trigger-and-handler, gdb-invalidate-memory)
+       (gdb-memory-set-address): Replace 'gdb-memory-address' with
+       'gdb-memory-address-expression'.
+       (gdb-memory-header): Add code to display
+       'gdb-memory-address-expression' on header line.  Move the mouse event
+       from address to expression.  Add code to display the warning.
+       (gdb-memory-header): Fix the error from
+       'propertize' when 'gdb-memory-address-expression' or
+       'gdb-memory-address' is nil.
+       (gdb-read-memory-custom): Change 'error' to 'user-error'.  Add code to
+       display the warning.  (Bug#39180)
+
+2020-02-07  Michael Albinus  <michael.albinus@gmx.de>
+
+       Some Tramp fixes
+
+       * lisp/net/tramp.el (tramp-connectable-p):
+       * lisp/net/tramp-cache.el (tramp-list-connections):
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-enabled):
+       Bind `tramp-verbose' to 0.
+
+       * lisp/net/tramp-sh.el (tramp-remote-path, tramp-find-executable):
+       Fix docstring.
+       (tramp-open-shell): Read prompt when moving "~/.editrc".
+
+2020-02-07  Eli Zaretskii  <eliz@gnu.org>
+
+       Minor fixes of the last commit
+
+       * src/xdisp.c (get_window_cursor_type): Fix indentation and
+       line-filling.
+       * doc/lispref/frames.texi (Cursor Parameters):
+       * doc/emacs/display.texi (Cursor Display):
+       * etc/NEWS: Fix wording and capitalization of the last change.
+
+2020-02-07  Zajcev Evgeny  <zevlg@yandex.ru>
+
+       Support for (box . SIZE) 'cursor-type'
+
+       This allows control of the minimum size of a masked image under
+       which the box cursor becomes hollow.
+       * src/buffer.c (cursor-type): Add commentary about (box . SIZE)
+       'cursor-type'.
+       * src/xdisp.c (get_specified_cursor_type): Check for 'cursor-type'
+       of the form (box . SIZE).
+       (get_window_cursor_type): Check masked image size for
+       (box . SIZE) 'cursor-type'.
+
+       * doc/emacs/display.texi (Cursor Display):
+       * doc/emacs/display.texi (Cursor Parameters): Add description
+       of (box . SIZE) 'cursor-type'.
+
+       * etc/NEWS: Mention the new (box . SIZE) 'cursor-type'.
+
+2020-02-07  Richard Stallman  <rms@gnu.org>
+
+       Merge
+
+2020-02-07  Richard Stallman  <rms@gnu.org>
+
+       Lispref: Explain avoiding lambdas on hooks.
+
+       (lispref/modes.texi): Explain avoiding lambdas on hooks.
+
+2020-02-06  AndreaCorallo  <akrl@sdf.org>
+
+       Add system-configuration in the compilation output path
+
+       Change parameter name into comp--compile-ctxt-to-file
+
+2020-03-01  Andrea Corallo  <akrl@sdf.org>
+
+       Reorganize passes
+
+       - Make propagate responsible for keeping SSA up to date.
+
+       - Run propagate-alloc as very last before final not to risk bothering
+         with mvar array allocation during previous transformations.
+
+       - Fix SSA if TCO modify the CFG.
+
+2020-03-01  Andrea Corallo  <akrl@sdf.org>
+
+       Allow for multiple SSA runs
+
+       Add function ssa-status as `comp-func' slot and have `comp-clean-ssa'
+       to run when necessary.
+
+2020-03-01  AndreaCorallo  <akrl@sdf.org>
+
+       Remove relocation index form LIMPLE setimm
+
+       Given that every object identify a relocation class simplify setimm too.
+
+2020-03-01  Andrea Corallo  <akrl@sdf.org>
+
+       Optimize relocation classes for object duplication
+
+       Merge duplicated  objects during final. Precedence is:
+       1 d-default
+       2 d-impure
+       3 d-ephemeral
+
+       Now every object identify uniquely a relocation class.  Because of
+       this there's no need to keep the reloc class into m-var.
+
+2020-03-01  Andrea Corallo  <akrl@sdf.org>
+
+       Rename comp-emit-set-const -> comp-emit-setimm
+
+       * Reduce stack depth while marking native compiled subrs
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-02-26  AndreaCorallo  <akrl@sdf.org>
+
+       * ; Add a TODO for a future optimization
+
+2020-02-26  AndreaCorallo  <akrl@sdf.org>
+
+       Store optimize qualities into .eln files
+
+       For now just comp-speed and comp-debug are stored.
+
+2020-02-26  AndreaCorallo  <akrl@sdf.org>
+
+       Rename d-base allocation classe into d-default
+
+2020-02-26  AndreaCorallo  <akrl@sdf.org>
+
+       Add ephemeral relocation data class
+
+       Add a new class of relocated objects that is in use just during load
+       process.  This in order to avoid having to maintain them in the heap
+       and traverse them at every GC.
+
+2020-02-26  Andrea Corallo  <akrl@sdf.org>
+
+       Two grammar fixes into async hooks doc
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-02-23  Andrea Corallo  <akrl@sdf.org>
+
+       Add two hooks for async native compilation
+
+2020-02-23  Andrea Corallo  <akrl@sdf.org>
+
+       Make build process robust against interruptions
+
+       During boo-strap we produce both the .eln and the .elc together.
+       Because the make target is the later this has to be produced as last
+       to be resilient to build interruptions.
+
+2020-02-23  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-02-22  Andrea Corallo  <akrl@sdf.org>
+
+       Fix `comp-tests-free-fun'
+
+       Address the case were comp-tests.el is byte-compiled.
+
+2020-02-21  Andrea Corallo  <akrl@sdf.org>
+
+       Test 'comp-eq' should not assume any string hashing policy
+
+2020-02-21  AndreaCorallo  <akrl@sdf.org>
+
+       Emit 'top_level_run' objects as impure
+
+2020-02-21  Andrea Corallo  <akrl@sdf.org>
+
+       Verify '--with-nativecomp' has also '--with-dumping=pdumper'
+
+2020-02-21  AndreaCorallo  <akrl@sdf.org>
+
+       Reorder m-var slots
+
+2020-02-21  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-02-16  Andrea Corallo  <akrl@sdf.org>
+
+       Update copyright years plus two style nits
+
+       Add a simple pass for self TCO
+
+       Introduce comp-dry-run
+
+       Use `sxhash-eq' to generate mvar SSA ids
+
+2020-02-15  AndreaCorallo  <akrl@sdf.org>
+
+       Speed 2 goes default
+
+       Backward propagate only once
+
+2020-02-15  Andrea Corallo  <akrl@sdf.org>
+
+       Rework frame layout
+
+       Every function call by reference gets use one unique array of
+       arguments.
+
+2020-02-14  AndreaCorallo  <akrl@sdf.org>
+
+       Clean-up old gc disable refuse in comp-tests-non-locals
+
+2020-02-14  Andrea Corallo  <akrl@sdf.org>
+
+       Better function naming for comp-function-call-maybe-remove
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-02-06  Andrea Corallo  <akrl@sdf.org>
+
+       Clean-up unused variable into load_comp_unit
+
+2020-02-06  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       09eed01afb Wrap some set-auto-mode calls with delay-mode-hooks (bug#3...
+       4a0a114505 Support ido-vertical-mode better
+       ef5fba9f40 Fix faces tab-bar and tab-line.
+       831508422e Cater for 3-argument version of pthread_setname_np
+       f27187f963 Clarify lexvar restrictions for add-to-ordered-list, add-t...
+       32763dac46 Replace add-to-list to lexical variable with push (bug#39373)
+       d07f177382 Clarify add-to-list documentation (bug#39373)
+       d3d2ea927c MH-E: alter content in mh-display-msg, not mh-show-mode
+       db7fa2546f Update documentation for mh-show-mode-hook
+       d10be6bf28 Example goto-addr hook: MH-E already uses goto-address
+
+       # Conflicts:
+       #       etc/NEWS
+
+2020-02-06  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/battery.el: Use lexical-binding.  Drop Redundant `:group`s.
+
+2020-02-06  Zajcev Evgeny  <zevlg@yandex.ru>
+
+       Make 'M-x battery RET' work out-of-box for UPower users.
+
+       * lisp/battery.el (battery-upower-prop): Removed in favor for
+       'battery-upower-device-property'.
+       (battery-upower-device): Can be nil, meaning autodetect the battery
+       device.
+       (battery-upower-line-power-device): New.  line-power device.  Can be
+       nil, meaning autodetect line-power device.
+       (battery-status-function): Check UPower service is available to use
+       'battery-upower' as status function.
+       (battery-upower): Speedup.  Request D-Bus only once, fetching all
+       the properties at once.  Provide string for "%b" format spec.
+       (battery-upower-device-list, battery-upower-device-all-properties)
+       (battery-upower-device-property): New functions to work with UPower
+       devices.
+       (battery-upower-dbus-service, battery-upower-dbus-interface)
+       (battery-upower-dbus-path, battery-upower-dbus-device-interface)
+       (battery-upower-dbus-device-path): New constants describing UPower
+       D-Bus service.
+
+2020-02-05  Juri Linkov  <juri@linkov.net>
+
+       * lisp/wid-edit.el (widget-choose): Use read-char-from-minibuffer 
(bug#17272)
+
+2020-02-05  Tino Calancha  <tino.calancha@gmail.com>
+
+       Eval macro arg just once
+
+       * lisp/emacs-lisp/cl-macs.el (cl--push-clause-loop-body):
+       Use `macroexp-let2' (Bug#39428).
+
+2020-02-05  Tassilo Horn  <tsdh@gnu.org>
+
+       Add ':extend t' to mm-uu-extract face
+
+       * lisp/gnus/mm-uu.el (mm-uu-extract): Add ':extend t' to mm-uu-extract
+       face.
+
+2020-02-05  Stefan Kangas  <stefankangas@gmail.com>
+
+       Silence byte-compiler warning
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-insert-header): Silence
+       byte-compiler warning about "Unused lexical variable".
+
+2020-02-05  Stefan Kangas  <stefankangas@gmail.com>
+
+       Don't use obsolete function in package-tests.el
+
+       * test/lisp/emacs-lisp/package-tests.el
+       (package-test-update-archives, package-test-signed): Use
+       'revert-buffer' instead of obsolete 'package-menu-refresh'.
+
+2020-02-05  Stefan Kangas  <stefankangas@gmail.com>
+
+       Add new filter commands to Package Menu (Bug#38424)
+
+       * lisp/emacs-lisp/package.el (package-menu-filter-by-version)
+       (package-menu-filter-by-status, package-menu-filter-by-archive):
+       New filter commands.
+       (package-menu--filter-by): New helper function.
+       (package-menu-filter-by-keyword, package-menu-filter-by-name): Use
+       the above helper function.
+       (package-menu-mode-menu):
+       (package-menu-mode-map): Update menu to include new filter commands.
+       * doc/emacs/package.texi (Package Menu): Document the new commands and
+       re-arrange the sort order of commands to be closer to the one in
+       describe-major-mode.
+       * etc/NEWS: Announce the new commands.
+
+       * lisp/emacs-lisp/package.el (package-menu--display): New function
+       extracted from....
+       (package-menu--generate): ...here.
+
+       * test/lisp/emacs-lisp/package-tests.el (with-package-menu-test):
+       New macro.
+       (package-test-update-listing, package-test-list-filter-by-name)
+       (package-test-list-filter-clear): Use above macro.
+       (package-test-list-filter-by-archive)
+       (package-test-list-filter-by-keyword)
+       (package-test-list-filter-by-status)
+       (package-test-list-filter-by-version-=)
+       (package-test-list-filter-by-version-<)
+       (package-test-list-filter-by-version->): New tests.
+       (package-test-filter-by-version): New helper function.
+
+2020-02-05  Michael Albinus  <michael.albinus@gmx.de>
+
+       Minor fix in tramp-test32-shell-command
+
+       * test/lisp/net/tramp-tests.el (tramp-test32-shell-command):
+       Set `default-directory'.
+
+2020-02-05  Michael Albinus  <michael.albinus@gmx.de>
+
+       Handle problem with *BSD libedit in Tramp
+
+       * lisp/net/tramp-sh.el (tramp-sh-extra-args): Add "-noediting" as
+       bash arg.
+       (tramp-open-shell):  Provide proper "~/.editrc" if needed.  (Bug#39399)
+
+2020-02-05  Michael Albinus  <michael.albinus@gmx.de>
+
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-handle-file-system-info): Fix 
error.
+
+2020-02-05  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/gnus/gnus-sum.el (gnus-read-move-group-name): Use user-error
+
+2020-02-04  Adam Porter  <adam@alphapapa.net>
+
+       * lisp/emacs-lisp/map.el: Add keyword-only pattern abbreviation
+
+       * lisp/emacs-lisp/map.el: Update version to 2.1.
+       ((pcase-defmacro map)): Update docstring.
+       (map--make-pcase-bindings): Match keyword pattern.
+
+       * test/lisp/emacs-lisp/map-tests.el (test-map-plist-pcase): Add test.
+
+2020-02-04  Andrea Corallo  <akrl@sdf.org>
+
+       Merge remote-tracking branch 'savannah/master' into HEAD
+
+2020-02-04  Andrea Corallo  <akrl@sdf.org>
+
+       Add assertion in load_comp_unit
+
+       While resurrecting from an image dump loading more than once the
+       same compilation unit does not make any sense.
+
+2020-02-04  Stefan Kangas  <stefankangas@gmail.com>
+
+       Silence byte-compiler warning
+
+       * lisp/dired.el (grep-read-files-function): Add defvar to silence
+       byte-compiler warning.
+
+2020-02-04  Stefan Kangas  <stefankangas@gmail.com>
+
+       Provide default for describe-keymap prompt
+
+       * lisp/help-fns.el (describe-keymap): Provide a reasonable
+       default for prompt.  (Bug#30660)
+       (help-fns-find-keymap-name)
+       (help-fns--most-relevant-active-keymap): New functions.
+
+       * test/lisp/help-fns-tests.el
+       (help-fns-test-find-keymap-name): New test.
+
+2020-02-04  Stefan Kangas  <stefankangas@gmail.com>
+           Drew Adams  <drew.adams@oracle.com>
+
+       Add new help command describe-keymap
+
+       * lisp/help-fns.el (describe-keymap): New command to show key bindings
+       for a given keymap.  (Bug#30660)
+       * doc/emacs/help.texi (Misc Help): Document the new command.
+       * doc/lispref/keymaps.texi (Scanning Keymaps): Add a cross-reference
+       to the above documentation.
+       * etc/NEWS: Announce the new command.
+
+       * test/lisp/help-fns-tests.el (help-fns-test-describe-keymap/symbol)
+       (help-fns-test-describe-keymap/value)
+       (help-fns-test-describe-keymap/not-keymap)
+       (help-fns-test-describe-keymap/let-bound)
+       (help-fns-test-describe-keymap/dynamically-bound-no-file): New tests.
+
+2020-02-03  Andrea Corallo  <akrl@sdf.org>
+
+       Rework load mechanism to make Vcomp_loaded_handles unnecessary
+
+2020-02-03  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/sh-script.el: Remove old non-SMIE indentation code
+
+       (sh-learn-basic-offset, sh-blink, sh-use-smie): Remove config vars.
+       (sh-kw-alist, sh-learned-buffer-hook): Remove var.
+       (sh-must-support-indent, sh-mark-init, sh-mark-line): Remove function.
+       (sh-kw, sh-special-keywords): Remove constant.
+       (sh-help-string-for-variable, sh-read-variable, sh-goto-matching-if)
+       (sh-handle-prev-if, sh-handle-this-else, sh-handle-prev-else)
+       (sh-handle-this-fi, sh-handle-prev-fi, sh-handle-this-then)
+       (sh-handle-prev-then, sh-handle-prev-open, sh-handle-this-close)
+       (sh-goto-matching-case, sh-handle-prev-case, sh-handle-this-esac)
+       (sh-handle-prev-esac, sh-handle-after-case-label)
+       (sh-handle-prev-case-alt-end, sh-safe-forward-sexp)
+       (sh-goto-match-for-done, sh-handle-this-done, sh-handle-prev-done)
+       (sh-handle-this-do, sh-handle-prev-do, sh-find-prev-switch)
+       (sh-handle-this-rc-case, sh-handle-prev-rc-case, sh-check-rule)
+       (sh-get-indent-info, sh-get-indent-var-for-line, sh-prev-line)
+       (sh-prev-stmt, sh-get-word, sh-prev-thing, sh-this-is-a-continuation)
+       (sh-get-kw, sh-find-prev-matching, sh-set-var-value)
+       (sh-calculate-indent, sh-indent-line, sh-blink, sh-guess-basic-offset):
+       Remove functions.
+       (sh-show-indent, sh-set-indent, sh-learn-line-indent)
+       (sh-learn-buffer-indent): Redefine as obsolete aliases.
+
+2020-02-03  Andrea Corallo  <akrl@sdf.org>
+
+       Always define subr-native-elisp-p also without native compiler
+
+2020-02-03  AndreaCorallo  <akrl@sdf.com>
+
+       Fix load_comp_unit for non zero speeds
+
+       'dlopen' returns the same handle when trying to load two times
+       the same shared.
+
+       Touching 'd_reloc' etc leads to fails in case a frame with a reference
+       to it in a register is active. (comp-speed >= 0)
+
+2020-02-01  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       cdf8c31844 Extend workaround for Cygwin O_PATH bug
+
+2020-02-01  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       5bf2ef3871 Add more blackboard bold characters to TeX input method
+       c362a624d8 ; * lisp/progmodes/gdb-mi.el (gdb-handle-reply): Fix comme...
+       2b1e18ae85 Protect against errors in gdb-mi.el handlers
+       baceb8e84d Allow exiting the Python interpreter of a GDB session
+       2e66013dcf Ensure minibuffer input is added to history in read_minibuf
+       de41161534 Tab-bar related fixes.
+       247f2cfa02 ; ChangeLog.3 fixes.
+       e1a712bb3f * admin/authors.el: Add missing entries.
+
+2020-02-01  Michael Albinus  <michael.albinus@gmx.de>
+
+       Implement `shell-command-dont-erase-buffer' in Tramp.  (Bug#39067)
+
+       * lisp/net/tramp.el (tramp-handle-shell-command):
+       Handle `shell-command-dont-erase-buffer'.  (Bug#39067)
+
+       * test/lisp/net/tramp-tests.el (shell-command-dont-erase-buffer):
+       Declare.
+       (tramp-test10-write-region, tramp-test21-file-links): Use function
+       symbols.
+       (tramp--test-async-shell-command): Don't assume that
+       `async-shell-command' returns the process object.
+       (tramp-test32-shell-command): Rework `async-shell-command-width' test.
+       (tramp-test32-shell-command-dont-erase-buffer): New test.
+
+2020-01-31  Michael Albinus  <michael.albinus@gmx.de>
+
+       Remove compatibility hack in Tramp
+
+       * lisp/net/tramp-compat.el (tramp-compat-process-running-p): Remove.
+
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-enabled):
+       Use `tramp-process-running-p'.
+
+       * lisp/net/tramp.el (with-tramp-progress-reporter): Simplify.
+       (tramp-process-running-p): New defun.
+
+2020-01-31  Juri Linkov  <juri@linkov.net>
+
+       * etc/NEWS: Move M-x suggest-key-bindings to "Editing Changes" section.
+
+       * doc/emacs/m-x.texi (M-x): Mention effect of suggest-key-bindings
+       on the completion list of M-x (bug#39035).
+
+2020-01-30  Sam Steingold  <sds@gnu.org>
+
+       prune the overly cavalier "kill all gnus buffers exit"
+
+       * lisp/gnus/mail-source.el (mail-source-call-script): Require gnus for
+        `gnus-get-buffer-create', following the pattern in the file.
+       * lisp/gnus/message.el: Autoload `gnus-get-buffer-create'.
+       * lisp/gnus/mm-archive.el: Likewise.
+       * lisp/gnus/mml2015.el: Likewise (the file autoloads other gnus 
functions).
+       * lisp/gnus/nnheader.el: Likewise.
+       * lisp/gnus/mml1991.el (mml1991-mailcrypt-sign, 
mml1991-mailcrypt-encrypt):
+       Revert the patch, use `get-buffer-create' instead of 
`gnus-get-buffer-create'.
+       * lisp/gnus/smime.el (smime-new-details-buffer, smime):
+        smime-certificate-info): Likewise.
+       * lisp/gnus/spam-stat.el (spam-stat-store-current-buffer): Likewise.
+
+2020-01-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Give fuller support for obsolete ---12 dates in iso8601
+
+       * lisp/calendar/iso8601.el
+       (iso8601--outdated-reduced-precision-date-match): New constant.
+       (iso8601--date-match): Use it.
+
+2020-01-30  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make iso8601.el understand two obsolete forms
+
+       * lisp/calendar/iso8601.el (iso8601-parse-date): Understand some
+       obsolete formats to provide compatibility with the vCard RFC
+       (bug#39347).
+
+2020-01-30  Juri Linkov  <juri@linkov.net>
+
+       Show key bindings on M-x completion (bug#39035)
+
+       * lisp/simple.el (read-extended-command--annotation): New function.
+       (read-extended-command): Use annotation-function to show key-bindings.
+
+2020-01-29  Sam Steingold  <sds@gnu.org>
+
+       fix bug#39344
+
+       * lisp/gnus/gnus.el (gnus-add-buffer): Use 'cl-pushnew' instead of
+       'push' to avoid duplicate entries.
+
+2020-01-28  Eli Zaretskii  <eliz@gnu.org>
+
+       Revert "Fix MS-Windows build broken by "Install C source code""
+
+       This reverts commit 31efd1cea8d692a0b77101ec161a8cf290471ade,
+       since the commit a02b179242a55aba20158aa245e5643a04d07576,
+       which triggered the former commit, has been reverted.
+
+2020-01-28  Alan Third  <alan@idiocy.org>
+
+       Merge branch 'scratch/ns/draw-to-bitmap'
+
+2020-01-28  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       1bcac29b2f (origin/emacs-27) dns-mode-soa-auto-increment-serial: safe...
+       abf0f8666d * lisp/wdired.el: Clean out isearch-filter-predicate (bug#...
+       c31c31e57f ; Spelling and URL fixes
+       066aad7b9d Finish the documentation for c-noise-macro-{,with-parens-}...
+       c8fcabf245 Correct regexp for flags in `format' doc string
+       2e9a153b26 Moderate recommendation to escape '(' in doc strings
+       d7cd4ab7d9 Objective C Mode: Make c-forward-type work with "unsigned ...
+       1705e32ebc Fix help text about configure module support
+       baca81e641 * doc/lispref/streams.texi (Output Functions): Improve ind...
+       568a560fce Improve doc string of 'newline'
+       7f50698505 Improve doc of eq on bignums etc.
+       e5327a569c Do not refer to obsolete alias
+       fd09196781 ; Clarify what time-stamp-active enables
+
+       # Conflicts:
+       #       etc/NEWS
+
+2020-01-28  Sam Steingold  <sds@gnu.org>
+
+       Make sure that all gnus buffers are killed on exit
+
+       * lisp/gnus/gnus-agent.el (gnus-agent-synchronize-flags-server):
+       Use `gnus-get-buffer-create' instead of `get-buffer-create'
+       * lisp/gnus/gnus-bookmark.el (gnus-bookmark-write-file): Likewise.
+       (gnus-bookmark-bmenu-list): Likewise.
+       (gnus-bookmark-show-details): Likewise.
+       * lisp/gnus/gnus-draft.el (gnus-draft-setup): Likewise.
+       * lisp/gnus/gnus-icalendar.el (gnus-icalendar-reply): Likewise.
+       * lisp/gnus/gnus-int.el (gnus-backend-trace): Likewise.
+       * lisp/gnus/gnus-srvr.el (gnus-enter-server-buffer): Likewise.
+       * lisp/gnus/gnus-sum.el (gnus-summary-pipe-output): Likewise.
+       * lisp/gnus/gnus-util.el (gnus-output-to-rmail): Likewise.
+       (gnus-output-to-mail): Likewise.
+       (gnus-multiple-choice): Likewise.
+       * lisp/gnus/mail-source.el (mail-source-call-script): Likewise.
+       * lisp/gnus/message.el (message-cancel-news): Likewise.
+       (message-resend): Likewise.
+       * lisp/gnus/mm-archive.el (mm-dissect-archive): Likewise.
+       * lisp/gnus/mml1991.el (mml1991-mailcrypt-sign): Likewise.
+       (mml1991-mailcrypt-encrypt): Likewise.
+       * lisp/gnus/mml2015.el (mml2015-mailcrypt-verify): Likewise.
+       (mml2015-mailcrypt-clear-verify): Likewise.
+       * lisp/gnus/nnbabyl.el (nnbabyl-request-move-article): Likewise.
+       * lisp/gnus/nndiary.el (nndiary-request-move-article): Likewise.
+       (nndiary-find-group-number): Likewise.
+       (nndiary-open-nov): Likewise.
+       (nndiary-generate-nov-file): Likewise.
+       * lisp/gnus/nndoc.el (nndoc-possibly-change-buffer): Likewise.
+       * lisp/gnus/nndraft.el (nndraft-request-move-article): Likewise.
+       (nndraft-auto-save-file-name): Likewise.
+       * lisp/gnus/nneething.el (nneething-get-head): Likewise.
+       * lisp/gnus/nnfolder.el (nnfolder-request-move-article): Likewise.
+       (nnfolder-open-nov): Likewise.
+       * lisp/gnus/nnheader.el (nnheader-init-server-buffer): Likewise.
+       (nnheader-set-temp-buffer): Likewise.
+       * lisp/gnus/nnimap.el (nnimap-log-buffer): Likewise.
+       * lisp/gnus/nnir.el (nnir-run-swish++): Likewise.
+       (nnir-run-swish-e): Likewise.
+       (nnir-run-hyrex): Likewise.
+       (nnir-run-namazu): Likewise.
+       (nnir-run-notmuch): Likewise.
+       (nnir-run-find-grep): Likewise.
+       * lisp/gnus/nnmail.el (nnmail-split-incoming): Likewise.
+       (nnmail-cache-open): Likewise.
+       (nnmail-log-split): Likewise.
+       * lisp/gnus/nnmaildir.el (nnmaildir--with-work-buffer): Likewise.
+       (nnmaildir--with-nov-buffer): Likewise.
+       (nnmaildir--with-move-buffer): Likewise.
+       * lisp/gnus/nnmairix.el (nnmairix-call-mairix-binary): Likewise.
+       (nnmairix-call-mairix-binary-raw): Likewise.
+       (nnmairix-replace-group-and-numbers): Likewise.
+       * lisp/gnus/nnmbox.el (nnmbox-request-move-article): Likewise.
+       * lisp/gnus/nnmh.el (nnmh-request-move-article): Likewise.
+       * lisp/gnus/nnml.el (nnml-request-move-article): Likewise.
+       (nnml-find-group-number): Likewise.
+       (nnml-get-nov-buffer): Likewise.
+       (nnml-generate-nov-file): Likewise.
+       * lisp/gnus/nnrss.el (nnrss-opml-export): Likewise.
+       * lisp/gnus/nntp.el (nntp-record-command): Likewise.
+       * lisp/gnus/nnvirtual.el (nnvirtual-retrieve-headers): Likewise.
+       * lisp/gnus/smime.el (smime-new-details-buffer): Likewise.
+       (smime-certificate-info): Likewise.
+       (smime): Likewise.
+       * lisp/gnus/spam-stat.el (spam-stat-store-current-buffer): Likewise.
+
+2020-01-28  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from Gnulib
+
+       This incorporates:
+       2020-01-27 regex: port to non-GCC pre-IEC-60559
+       2020-01-24 regex: port to Gawk on nonstandard platforms
+       2020-01-21 regex: fix bug with >=16 subexpressions
+       2020-01-21 regex: simplify definition of BITSET_WORD_BITS
+       * lib/regex.c, lib/regex_internal.h: Copy from Gnulib.
+
+2020-01-28  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Revert the --with-install-srcdir patch
+
+       Also, update description of debuginfo and sources to match
+       Debian and Red Hat more accurately, and move this sad tale
+       from INSTALL to etc/PROBLEMS which is a better home for it.
+       * Makefile.in (emacs_srcdir, install-c-src):
+       * configure.ac (emacs_srcdir, --with-install-srcdir):
+       * src/epaths.in (PATH_EMACS_SOURCE):
+       * src/lread.c (emacs-source-directory):
+       Remove.  All uses removed.
+       * lisp/emacs-lisp/find-func.el (find-function-C-source):
+       Do not worry about compressed C sources.
+       * src/lread.c: Do not include <dosname.h>.
+
+2020-01-27  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix Bug#39253
+
+       * lisp/net/tramp.el (tramp-handle-shell-command): Set 
`default-directory'.
+
+2020-01-27  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix problems in Tramp's async-shell-command
+
+       * lisp/net/tramp-adb.el (tramp-adb-handle-make-process):
+       * lisp/net/tramp-cache.el (top):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-make-process):
+       Use `insert-file-contents-literally'.
+
+       * lisp/net/tramp.el (tramp-parse-file):
+       Use `insert-file-contents-literally'.
+       (tramp-handle-shell-command): Reorganize error-buffer handling.
+       (tramp-handle-start-file-process): Use `consp' instead of `listp'.
+
+       * test/lisp/net/tramp-tests.el (tramp-test31-interrupt-process):
+       Bind `delete-exited-processes'.
+       (tramp--test-async-shell-command): Bind `delete-exited-processes'.
+       Add additional `accept-process-output'.  Move cleanup of output
+       buffer ...
+       (tramp-test32-shell-command): ... here.  Test error buffer also
+       for `async-shell-command'.
+
+2020-01-27  Paul Pogonyshev  <pogonyshev@gmail.com>
+
+       * lisp/emacs-lisp/debug.el (debug): Merge the non-interactive cases
+
+       bug#38927
+
+2020-01-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * src/mini-gmp.c: Fix comment typos.
+
+2020-01-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update mini-gmp
+
+       * src/mini-gmp.c, src/mini-gmp.h: Copy from GMP 6.2.0.
+       This incorporates:
+       2019-12-05 remove some sizeof(mp_limb_t)
+       2019-12-04 (mpn_invert_3by2): Remove special code for limb sizes
+       2019-12-04 (mpn_invert_3by2): Limit size of an intermediate
+       2019-11-20 (mpn_invert_3by2): Use xor instead of negation
+       2019-11-19 (mpn_invert_3by2): Move an assert earlier
+       2019-11-19 (mpn_invert_3by2): Add a new shortcut
+       2019-11-17 Prepend "unsigned" to MINI_GMP_LIMB_TYPE
+       2019-11-17 Enable testing with different limb sizes (types)
+       2019-11-20 Use already defined constants
+       2019-11-09 Avoid undefined behaviour with small limb sizes
+
+2020-01-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Improve doc for emacs-source-directory (Bug#36527).
+
+2020-01-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Propagate NSLocale into Emacs better
+
+       * src/emacs.c (main): Call ns_init_locale before using the
+       environment variable that ns_init_locale sets up (Bug#39248).
+
+2020-01-26  Stefan Kangas  <stefankangas@gmail.com>
+
+       Add more tests for bookmark-bmenu-list
+
+       * test/lisp/bookmark-tests.el (cl-lib): Require.
+       (bookmark-test-bmenu-toggle-filenames)
+       (bookmark-test-bmenu-toggle-filenames/show)
+       (bookmark-test-bmenu-show-filenames)
+       (bookmark-test-bmenu-hide-filenames)
+       (bookmark-test-bmenu-bookmark, bookmark-test-bmenu-mark)
+       (bookmark-test-bmenu-any-marks, bookmark-test-bmenu-unmark)
+       (bookmark-test-bmenu-delete, bookmark-test-bmenu-locate): New
+       tests.
+
+       (bookmark-test-bmenu-edit-annotation/show-annotation): Rename from
+       'bookmark-bmenu-edit-annotation/show-annotation'.
+       (bookmark-test-bmenu-send-edited-annotation): Rename from
+       'bookmark-bmenu-send-edited-annotation'.
+       (bookmark-test-bmenu-send-edited-annotation/restore-focus): Rename
+       from 'bookmark-bmenu-send-edited-annotation/restore-focus'.
+
+2020-01-25  Michael Albinus  <michael.albinus@gmx.de>
+
+       Fix Bug#39279
+
+       * lisp/net/tramp.el (tramp-completion-file-name-handler):
+       Fix thinko.  (Bug#39279)
+
+2020-01-25  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix MS-Windows build broken by "Install C source code"
+
+       * nt/epaths.nt (PATH_EMACS_SOURCE): Add definition.
+
+2020-01-25  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Install C source code for C-h f etc.
+
+       Without this change, on typical GNU/Linux distributions
+       like Debian, the first button of ‘C-h f car RET’ does not work
+       because the source code for ‘car’ is not installed (Bug#37527).
+       Fix this by installing the (compressed) C source code alongside
+       the (compressed) Lisp source code that is already installed.
+       This adds about 3 MB (about 2%) to the size of the installed files
+       on my platform.
+       * Makefile.in (emacs_srcdir): New macro.
+       (epaths-force): Substitute PATH_EMACS_SOURCE.
+       (install-c-src): New rule, that installs a copy of the C source
+       code if emacs_srcdir says to.
+       (install-arch-indep): Depend on it.
+       * configure.ac (emacs_srcdir): New var.
+       Add support for --disable-install-srcdir.
+       * lisp/emacs-lisp/find-func.el (find-function-C-source-directory):
+       Look in emacs-source-directory first.
+       (find-function-C-source): Also look for gzipped source files.
+       * lisp/startup.el (normal-top-level):
+       Also recode emacs-source-directory.
+       * src/epaths.in (PATH_EMACS_SOURCE): New macro.
+       * src/lread.c: Include dosname.h, for IS_ABSOLUTE_FILE_NAME.
+       (syms_of_lread): New var emacs-source-directory.
+
+2020-01-24  Mattias Engdegård  <mattiase@acm.org>
+
+       Remove (or double) redundant backslashes in string literals
+
+       See discussion at
+       https://lists.gnu.org/archive/html/emacs-devel/2020-01/msg00749.html .
+
+       * lisp/obsolete/iswitchb.el (iswitchb-summaries-to-end):
+       * test/src/regex-emacs-tests.el (regex-tests-BOOST-frob-escapes):
+       * test/lisp/help-fns-tests.el (help-fns-test-lisp-macro)
+       (help-fns-test-lisp-defun, help-fns-test-lisp-defsubst)
+       (help-fns-test-alias-to-defun, help-fns-test-bug23887):
+       Double backslashes for desired effect.
+       * lisp/org/ol.el (org-link-escape):
+       * lisp/net/nsm.el (nsm-protocol-check--rsa-kx)
+       (nsm-protocol-check--anon-kx, nsm-protocol-check--sha1-sig):
+       * lisp/obsolete/old-whitespace.el (whitespace-buffer):
+       * lisp/obsolete/rcompile.el (remote-compile-run-before):
+       * lisp/obsolete/vi.el (vi-end-of-blank-delimited-word):
+       * lisp/obsolete/vip.el (vip-current-major-mode)
+       (vip-paren-match, vip-switch-to-buffer)
+       (vip-switch-to-buffer-other-window, vip-kill-buffer)
+       (vip-get-ex-token, ex-edit):
+       * lisp/org/org-element.el (org-element--cache-sync-requests):
+       * lisp/org/org.el (org-sparse-tree):
+       * lisp/textmodes/reftex.el (reftex-report-bug):
+       * test/lisp/ibuffer-tests.el (ibuffer-save-filters):
+       * test/lisp/international/ucs-normalize-tests.el
+       (ucs-normalize-tests--insert-failing-lines):
+       * test/lisp/simple-tests.el (undo-test-kill-c-a-then-undo):
+       * test/lisp/textmodes/conf-mode-tests.el (conf-test-toml-mode):
+       * test/src/regex-emacs-tests.el (regex-tests-compare):
+       Remove redundant backslashes.
+
+2020-01-24  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix iso8601-parse so unknown DST is -1, not nil
+
+       The convention in a decoded time’s dst flag is that t means DST,
+       nil means standard time, and -1 means unknown.  This differs from
+       the convention for other components of a decoded time, where nil
+       means unknown.  Fix some places where iso8601-parse mistakenly
+       treated nil as meaning that the dst flag was unknown.
+       * doc/lispref/os.texi (Time Parsing):
+       Adjust to match parse-time-string’s doc string.
+       * lisp/calendar/iso8601.el (iso8601-parse):
+       Set dst flag to nil if a numeric time zone or "Z" is given.
+       (iso8601--decoded-time): Default dst flag to -1 if no dst
+       flag or zone is given.
+       * lisp/calendar/time-date.el (decoded-time-set-defaults):
+       When we don’t have a time zone, set the dst flag consistently
+       with DEFAULT-ZONE.
+       * test/lisp/calendar/iso8601-tests.el (test-iso8601-date-years)
+       (test-iso8601-date-dates, test-iso8601-date-obsolete)
+       (test-iso8601-date-weeks, test-iso8601-date-ordinals)
+       (test-iso8601-time, test-iso8601-combined)
+       (test-iso8601-duration, test-iso8601-intervals)
+       (standard-test-dates, standard-test-time-of-day-local-time)
+       (standard-test-time-of-day-fractions)
+       (nonstandard-test-time-of-day-decimals)
+       (standard-test-time-of-day-beginning-of-day)
+       (standard-test-date-and-time-of-day, standard-test-interval):
+       Adjust tests to match fixed behavior.
+
+2020-01-24  Bastien  <bzg@gnu.org>
+
+       Fix parse-time-string bug with ISO 8601 defaults
+
+       * lisp/calendar/parse-time.el (parse-time-string):
+       Do not use decoded-time-set-defaults; just let iso8601-parse
+       do its thing.
+
+2020-01-24  Stefan Kangas  <stefankangas@gmail.com>
+
+       Add tests for version comparison predicates
+
+       * test/lisp/subr-tests.el (subr-test-version-list-<)
+       (subr-test-version-list-=, subr-test-version-list-<=): New tests.
+
+2020-01-24  Alan Third  <address@hidden>
+
+       Draw to offscreen buffer on macOS
+
+       * src/nsfns.m (x_set_background_color): Clear the frame after changing
+       the background color, not before.
+       * src/nsterm.h (drawingBuffer): New variable.
+       ([EmacsView focusOnDrawingBuffer]):
+       ([EmacsView copyRect:to:]):
+       ([EmacsView createDrawingBufferWithRect:]): New methods.
+       * src/nsterm.m (ns_update_begin):
+       (ns_update_end):
+       (ns_focus):
+       (ns_unfocus): Handle drawing to offscreen buffer.
+       (ns_clip_to_row): Use ns_row_rect.
+       (ns_copy_bits): Remove unused function.
+       (ns_scroll_run):
+       (ns_shift_glyphs_for_insert): Use new scrolling method.
+       (ns_draw_fringe_bitmap):
+       (ns_dumpglyphs_image): When drawing to the offscreen buffer, flip
+       images so they appear the right way up.
+       (ns_dumpglyphs_stretch): Remove unnecessary code.
+       (ns_draw_window_cursor): Don't disable screen updates.
+       ([EmacsView updateFrameSize:]): Update the size of the offscreen
+       buffer.
+       ([EmacsView initFrameFromEmacs:]): Create offscreen buffer.
+       ([EmacsView windowDidChangeBackingProperties:]):
+       ([EmacsView createDrawingBufferWithRect:]):
+       ([EmacsView focusOnDrawingBuffer]):
+       ([EmacsView copyRect]): New methods.
+       ([EmacsView viewWillDraw]): Remove method as it no longer does
+       anything useful.
+       ([EmacsView drawRect:]): Handle drawing from offscreen buffer.
+
+2020-01-24  Alan Third  <alan@idiocy.org>
+
+       Revert "Make all NS drawing be done from drawRect"
+
+       This reverts commit 7946445962372c4255180af45cb7c857f1b0b5fa.
+
+2020-01-24  Alan Third  <alan@idiocy.org>
+
+       Revert "Ensure NS frame is redrawn correctly  after scroll"
+
+       This reverts commit a6ab8db3a3dc5ec107ef023c6659620584309c97.
+
+2020-01-24  Alan Third  <alan@idiocy.org>
+
+       Revert "Fix some NS drawing issues (bug#32932)"
+
+       This reverts commit 7e8eee60a9dbb0c59cf26f237b21efe7fd1043c9.
+
+2020-01-24  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       0bed550e21 (origin/emacs-27) Remove EmacsOpenPanel and EmacsSavePanel...
+       a0336029db * doc/emacs/files.texi (Auto Save Files): Improve indexing...
+       57fb8b10c1 Fix inaccurate wording in the Emacs manual
+       1c487747ab Update ERC module URLs
+       7d1e9c943f Minor doc string clarification in use-hard-newlines
+
+2020-01-24  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       92f080dda8 Tab-bar related finishing touches.
+       224e8d1464 Make call_process call signal_after_change.  This fixes bu...
+       d02f2a793e * lisp/simple.el: Minor fixes to commentary.
+       196c42b8bf Fix a few typos
+       4f2b967795 Fix doc strings for image-dired rotation commands
+
+       # Conflicts:
+       #       etc/NEWS
+
+2020-01-24  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Make links in shr use separate mouse highlight regions
+
+       * lisp/net/shr.el (shr-urlify): Make adjacent links have separate
+       mouse highlights (bug#39115).
+
+2020-01-24  Michael Albinus  <michael.albinus@gmx.de>
+
+       Adapt tramp-test32-shell-command
+
+       * test/lisp/net/tramp-tests.el (tramp-test32-shell-command):
+       Test error buffer for synchronous `shell-command' only.
+
+2020-01-24  Michael Albinus  <michael.albinus@gmx.de>
+
+       Minor code cleanup in Tramp
+
+2020-01-24  Michael Albinus  <michael.albinus@gmx.de>
+
+       Support (un)mount of Tramp media devices
+
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-gio-mapping): Add "gvfs-rename".
+       (tramp-gvfs-do-copy-or-rename-file): Use it.
+       (tramp-gvfs-activation-uri): Handle "media" method.
+       (tramp-gvfs-url-host): New defun.
+       (tramp-gvfs-handler-mounted-unmounted)
+       (tramp-gvfs-connection-mounted-p)
+       (tramp-gvfs-handler-volumeadded-volumeremoved)
+       (tramp-get-media-devices): Use it.
+
+2020-01-24  Robert Pluim  <rpluim@gmail.com>
+
+       Expand Cairo and HarfBuzz descriptions
+
+       * etc/NEWS:
+       * configure.ac: Expand description of Cairo and Harfbuzz
+
+2020-01-24  Robert Pluim  <rpluim@gmail.com>
+
+       Warn about XFT and about Cairo without HarfBuzz
+
+       * configure.ac: Warn about libXFT usage.  Warn about using Cairo
+       without HarfBuzz.
+
+       * etc/NEWS: Announce XFT and HarfBuzz warnings.
+
+2020-01-24  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Simplify locale setup
+
+       Stop exporting Vprevious_system_time_locale and
+       Vprevious_system_messages_locale to Elisp.  I did that export by
+       mistake in 1999, and the Elisp variables have never been used.
+       Simplifying this cruft should make it easier to fix Bug#39248.
+       * etc/NEWS: Mention this.
+       * src/emacs.c (main): Simplify locale initialization.
+       (synchronize_locale): Simplify.
+       (Vprevious_system_time_locale, Vprevious_system_messages_locale):
+       Now static variables not visible to Lisp, and defined only if
+       HAVE_SETLOCALE.
+       (Vprevious_system_messages_locale): Define only if LC_MESSAGES.
+
+2020-01-24  Glenn Morris  <rgm@gnu.org>
+
+       Make so-long test pass following lisp-mnt change
+
+       * lisp/so-long.el (so-long-commentary): Update for lisp-mnt change.
+
+2020-01-23  Bruno Félix Rezende Ribeiro  <oitofelix@gnu.org>
+
+       Globally sanitize single-file package long descriptions (Bug#37548)
+
+       Consistent with multi-file package descriptions which don’t have
+       commentary sections nor double semicolon prefixes.
+       * lisp/emacs-lisp/lisp-mnt.el (lm-commentary): Remove commentary
+       header, double semicolon prefixes of each line, trailing new-lines and
+       trailing white-space from commentary.
+       * lisp/emacs-lisp/package.el (package--get-description)
+       (describe-package-1):
+       * lisp/finder.el (finder-commentary):
+       * lisp/info.el (Info-finder-find-node): Remove ad-hoc sanitation.
+
+2020-01-23  Glenn Morris  <rgm@gnu.org>
+
+       Unbreak byte compilation
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-fix-header):
+       Update for recent header changes.
+       (byte-compile-insert-header): Add more padding.
+
+2020-01-23  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove irrelevant info from .elc headers
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-insert-header): Don't
+       insert information on ancient Emacs in bytecode headers.  (Bug#39233)
+
+2020-01-23  Stefan Kangas  <stefankangas@gmail.com>
+
+       Prefer saying "Info manual" to "info page" in docs
+
+       Pointed out by Eli Zaretskii in:
+       https://debbugs.gnu.org/cgi/bugreport.cgi?bug=39215#14
+       * doc/emacs/Makefile.in:
+       * doc/lispintro/Makefile.in:
+       * doc/lispref/Makefile.in:
+       * doc/misc/Makefile.in:
+       * lisp/dired-x.el (top-level):
+       * lisp/gnus/gnus-sum.el (gnus-summary-mode):
+       * lisp/progmodes/cperl-mode.el (cperl-info-page): Doc fix; prefer
+       saying "Info manual" over "info page".
+
+2020-01-23  Michael Albinus  <michael.albinus@gmx.de>
+
+       Implement "/media::" default host name in Tramp
+
+       * doc/misc/tramp.texi (GVFS-based methods): Describe default
+       /media:: file name.
+
+       * lisp/net/tramp-cache.el (tramp-get-file-property)
+       (tramp-set-file-property): Check, whether
+       `tramp-cache-{g,s}et-count-*' objects are numbers.
+
+       * lisp/net/tramp-gvfs.el (top): Don't set global default for
+       "media" in `tramp-default-host-alist'.
+       (tramp-gvfs-handler-volumeadded-volumeremoved): New defun.
+       (top): Register "org.gtk.Private.RemoteVolumeMonitor.VolumeAdded"
+       and "org.gtk.Private.RemoteVolumeMonitor.VolumeRemoved" signals.
+       (tramp-get-media-devices): Set defaults for "media" in
+       `tramp-default-host-alist'.
+
+2020-01-23  Tino Calancha  <tino.calancha@gmail.com>
+
+       Fix bug 39218
+
+       * lisp/simple.el (shell-command):
+       Ensure a shell command ending with `&' is run asynchronously.
+
+2020-01-23  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix crash when sending Gnus message (Bug#39207)
+
+       * src/alloc.c (resize_string_data): The string must be multibyte.
+       When not bothering to reallocate, do bother to change the byte count.
+       * test/src/alloc-tests.el (aset-nbytes-change) New test.
+
+2020-01-22  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       3b0938c042 (origin/emacs-27) Render Ido suggestions using an overlay
+       d5d90dc412 * doc/misc/tramp.texi (Bug Reports): Encourage use of "ema...
+       ac09e8e121 * lisp/vc/smerge-mode.el (smerge-match-conflict): Fix bug#...
+       7e37e61f4b Correct statement about ftcr and recommend HarfBuzz
+       4aec94da37 Avoid leaving artifacts when the system caret is used on w32
+       5abd8d73b0 Improve display of temporary echo messages
+
+2020-01-22  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       3ba0db41e3 Allow optional truncation of tab names in tab-bar and tab-...
+       7dd065fc7b Small fixes in documentation.
+       06166aa719 Improve explanation of available font backends under X
+       2eb834ead4 Clear output data pointer on NS
+
+2020-01-22  Michael Albinus  <michael.albinus@gmx.de>
+
+       Add new Tramp method "media"
+
+       * doc/misc/tramp.texi (Quick Start Guide, GVFS-based methods):
+       Add media devices.
+
+       * etc/NEWS: Mention new Tramp method "media".
+
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-methods): Add "media" method.
+       (tramp-goa-methods): Add tramp-autoload cookie.
+       (tramp-media-methods): New defvar.
+       (tramp-gvfs-service-volumemonitor): New defsubst.
+       (top): Remove media methods if not supported.  Add defaults for
+       `tramp-default-host-alist'.
+       (tramp-goa-account): Rename from `tramp-goa-name'.  Adapt all callees.
+       (tramp-gvfs-service-afc-volumemonitor)
+       (tramp-gvfs-service-goa-volumemonitor)
+       (tramp-gvfs-service-gphoto2-volumemonitor)
+       (tramp-gvfs-service-mtp-volumemonitor)
+       (tramp-gvfs-path-remotevolumemonitor)
+       (tramp-gvfs-interface-remotevolumemonitor): New defconsts.
+       (tramp-media-device): New defstruct.
+       (tramp-gvfs-activation-uri): New defun.
+       (tramp-gvfs-url-file-name): Use it.
+       (tramp-gvfs-handler-mounted-unmounted)
+       (tramp-gvfs-connection-mounted-p, tramp-gvfs-mount-spec):
+       Handle "media" method.
+       (tramp-get-goa-account): Rename from `tramp-make-goa-name'.  Adapt
+       all callees.
+       (tramp-get-goa-accounts): Adapt docstring.  Cache with nil key.
+       (tramp-parse-goa-accounts, tramp-get-media-device)
+       (tramp-get-media-devices)
+       (tramp-parse-media-names): New defuns.
+       (top): Rework completion function registration.
+
+       * lisp/net/tramp.el (tramp-dns-sd-service-regexp): New defconst.
+       (tramp-set-completion-function): Use it.
+
+2020-01-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add \sqrt[4] as Latex input method, too
+
+       * lisp/leim/quail/latin-ltx.el: Add \sqrt[4] as input method
+       (bug#25594).
+
+2020-01-22  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Add \sqrt and \sqrt[3] as Latex input methods
+
+       * lisp/leim/quail/latin-ltx.el: Add \sqrt and \sqrt[3] as input
+       methods (bug#25594).
+
+2020-01-22  Nicholas Strauss  <nicholas.strauss@gmail.com>
+
+       Support solar and lunar eclipses in Calendar
+
+       * lisp/calendar/lunar.el (eclipse-check): New function to display
+       solar and lunar eclipses (bug#20414).
+       (lunar-phase): Use it.
+       (calendar-lunar-phases): Ditto.
+
+2020-01-22  Helmut Eller  <eller.helmut@gmail.com>
+
+       Default lisp-mode to use Common Lisp indentation
+
+       * lisp/emacs-lisp/lisp-mode.el (lisp-mode): Use
+       common-lisp-indent-function instead of lisp-indent-function as
+       Common Lisp is the most common non-Emacs Lisp today (bug#10097).
+
+2020-01-22  Marco Wahl  <marcowahlsoft@gmail.com>
+
+       Make find-file-at-point respect port numbers in Tramp file name
+
+       * lisp/ffap.el (ffap-string-at-point-mode-alist): Respect port
+       numbers in files names like /ssh:root@127.0.0.1#2222:/root/ (bug#20412).
+
+2020-01-22  Michael Albinus  <michael.albinus@gmx.de>
+
+       Minor cleanup in {autorevert,filenotify,shadowfile}-tests.el
+
+       * test/lisp/autorevert-tests.el (tramp-message-show-message):
+       * test/lisp/shadowfile-tests.el (tramp-message-show-message):
+       * test/lisp/filenotify-tests.el (tramp-message-show-message)
+       Do Not set.
+       (file-notify-test04-autorevert): Inhibit messages.
+
+2020-01-22  Damien Cassou  <damien@cassou.me>
+
+       * test/lisp/auth-source-pass-tests.el: Test for multiple ports.
+
+2020-01-21  Andrea Corallo  <akrl@sdf.org>
+
+       Extend propagation to a wider set of (non pure) functions
+
+2020-01-21  Robert Pluim  <rpluim@gmail.com>
+
+       Recommend use of HarfBuzz
+
+       * etc/NEWS: Add recommendation to use HarfBuzz.
+
+2020-01-21  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/grep.el (grep-read-files-function): New var.
+
+       Also remove redundant :groups while we're here.
+
+       (grep-read-files): Use it instead of a major-mode symbol property.
+       (grep-read-files--default): New function.
+
+       * lisp/dired.el (dired-mode): Use `grep-read-files-function`.
+
+2020-01-21  Robert Pluim  <rpluim@gmail.com>
+
+       Add Cairo font backend info
+
+       * etc/NEWS: Add info about which font backends are available under 
Cairo.
+
+2020-01-20  Andrea Corallo  <akrl@sdf.org>
+
+       Clean-up unnecessary member usage
+
+       Do no force speed while running the testsuite
+
+2020-01-20  Andrea Corallo  <akrl@sdf.org>
+
+       Always force debug 0 for bootstrap test
+
+       Debug symbols would make it fail otherwise.
+
+2020-01-20  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/international/mule-cmds.el (mule-cmds--prefixed-command-pch): 
Fix typo
+
+2020-01-20  Eli Zaretskii  <eliz@gnu.org>
+
+       Unbreak the MS-Windows build
+
+       * src/w32.c (openat): New function.
+       * src/w32.h (openat): Add prototype.
+
+2020-01-20  Robert Pluim  <rpluim@gmail.com>
+
+       Document cairo-related fallout to font-backend settings
+
+       * etc/NEWS: Document some of the possible adjustments required to
+       font settings when using Cairo.
+
+2020-01-20  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       154cd116be (origin/emacs-27) * admin/release-process: Adapt bug numbe...
+       fd19282134 Fix shell-tests failures
+       891f7de8ed * test/lisp/simple-tests.el: Full path to Emacs binary (bu...
+       92f30d62c0 * lisp/tab-line.el (tab-line-auto-hscroll): Fix for long t...
+       dde313151d * lisp/menu-bar.el (menu-bar-options-menu): Add desktop-sa...
+       3543b9fad9 ; Fix a test (Bug#39067)
+       83f9fe44fa ; * etc/NEWS: Fix typo.
+       2eb0b7835d Fix shell-command-dont-erase-buffer feature
+       c134978a76 Remove reference to Emacs 19 from FAQ
+       fabf0065c5 Doc fixes in package.el
+
+       # Conflicts:
+       #       etc/NEWS
+
+2020-01-20  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       f3d30b5303 Remove some doc references to old Emacs versions
+       4217bc229b Fix infloop in shell.el
+       74b151195d Fix erc-notifications-notify for non-PRIVMSGs, broken in l...
+       db4436eaf9 Fix the notification action for PRIVMSG in erc-notificatio...
+       36a4068105 ERC: New maintainer.
+       2391d3f45d ; spelling fixes
+       e898442be3 Honor tags-case-fold-search during xref identifier completion
+
+       # Conflicts:
+       #       etc/NEWS
+
+2020-01-20  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/progmodes/cc-cmds.el: Don't use local vars as symbols
+
+       (c--call-post-self-insert-hook-more-safely-1): Avoid `add-hook` and
+       `run-hooks` on local vars.  Avoid O(n^2) while we're at it.
+
+2020-01-20  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Work better if stat etc. are interrupted
+
+       Quit or retry if fstat, lstat, stat or openat fail with EINTR.
+       This should fix some bugs on platforms where accessing files via
+       NFS can fail that way (Bug#9256).
+       * src/dired.c (file_attributes):
+       * src/fileio.c (file_directory_p) [O_PATH]:
+       Use emacs_openat instead of openat.
+       * src/dired.c (file_attributes): Use emacs_fstatat instead of fstatat.
+       * src/fileio.c (barf_or_query_if_file_exists, Frename_file):
+       * src/filelock.c (rename_lock_file):
+       Use emacs_fstatat instead of lstat.
+       * src/fileio.c (file_directory_p, Ffile_regular_p, Ffile_modes)
+       (Ffile_newer_than_file_p, Fverify_visited_file_modtime)
+       (Fset_visited_file_modtime, auto_save_1):
+       * src/lread.c (Fload):
+       * src/sysdep.c (get_current_dir_name_or_unreachable):
+       Use emacs_fstatat instead of stat.
+       * src/sysdep.c (emacs_fstatat, emacs_openat): New functions.
+       (emacs_open): Redo in terms of emacs_open.
+
+2020-01-20  Paul Eggert  <eggert@cs.ucla.edu>  (tiny change)
+
+       Fix drag and drop from some Qt versions
+
+       * lisp/x-dnd.el (x-dnd-handle-xdnd): Fix XdndDrop time stamp bug.
+       Problem and tiny change reported by Urs Fleisch (Bug#20804).
+
+2020-01-19  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/international/mule-cmds.el (universal-coding-system-argument): 
Rewrite
+
+       Use the new `prefix-command-*` hooks and functions so it interacts
+       better with other prefix commands (and with itself), and so the
+       pre/post-command-hook and other command-loop operations are performed
+       "normally".
+
+       (mule-cmds--prefixed-command-next-coding-system)
+       (mule-cmds--prefixed-command-last-coding-system): New vars.
+       (mule-cmds--prefixed-command-pch, mule-cmds--prefixed-command-echo)
+       (mule-cmds--prefixed-command-preserve): New functions.
+
+2020-01-19  Stefan Kangas  <stefankangas@gmail.com>
+
+       Improve error handling in dired-change-marks
+
+       * lisp/dired.el (dired-change-marks): Signal user-error if mark
+       character is invalid.  Catch more invalid characters.  (Bug#29842)
+
+2020-01-19  Stefan Kangas  <stefankangas@gmail.com>
+
+       Make arguments to dired-chage-marks non-optional
+
+       * lisp/dired.el (dired-change-marks): Make arguments
+       non-optional.  (Bug#29842)
+
+2020-01-19  Michael Albinus  <michael.albinus@gmx.de>
+
+       Sync with Tramp 2.5.0-pre
+
+       * doc/misc/tramp.texi:  Protect Tramp x.y and Emacs x.y by @w{}.
+       (GVFS-based methods): Move "GNOME Online Accounts" index.
+       (Customizing Methods, Android shell setup, File name completion)
+       (Frequently Asked Questions): Fix typos.
+
+       * doc/misc/trampver.texi: Change version to "2.5.0-pre".
+
+       * lisp/net/trampver.el: Change version to "2.5.0-pre".
+       (inhibit-message): Don't declare.
+
+       * lisp/net/tramp.el: Bump version to 2.5.0-pre.  Require Emacs 25.1.
+       (tramp-debug-message): Simplify.
+       (tramp-message): Don't use `tramp-message-show-message'.
+       (tramp-with-demoted-errors, with-parsed-tramp-file-name)
+       (with-tramp-file-property, with-tramp-connection-property):
+       Adapt `declare' form.
+       (with-tramp-progress-reporter): Suppress progress reporter when
+       noninteractive.
+       (tramp-completion-mode, tramp-completion-mode-p): Remove.
+
+       * lisp/net/tramp-compat.el (tramp-compat-process-running-p)
+       (format-message): Remove compatibility code.
+       (tramp-compat-directory-name-p)
+       (tramp-compat-tramp-file-name-slots): Remove.
+
+       * lisp/net/tramp.el (tramp-debug-message, tramp-message)
+       (tramp-backtrace, tramp-error, tramp-error-with-buffer)
+       (tramp-user-error, tramp-with-demoted-errors)
+       (tramp-signal-hook-function):
+       * lisp/net/tramp-compat.el (tramp-compat-funcall)
+       * lisp/net/tramp-gvfs.el (tramp-dbus-function):
+       Add `tramp-suppress-trace' property.
+
+       * lisp/net/tramp.el (tramp-get-method-parameter)
+       (tramp-dissect-file-name, tramp-error, tramp-error-with-buffer)
+       (tramp-user-error, with-parsed-tramp-file-name)
+       (with-tramp-progress-reporter, tramp-file-name-handler)
+       (tramp-completion-file-name-handler, tramp-autoload-file-name-handler)
+       (tramp-register-file-name-handlers, tramp-connectable-p)
+       (tramp-handle-file-modes, tramp-handle-file-regular-p)
+       (tramp-handle-file-truename, tramp-handle-insert-directory)
+       (tramp-handle-load, tramp-set-file-uid-gid):
+       * lisp/net/tramp-adb.el (tramp-adb-file-name-handler)
+       (tramp-adb-handle-file-truename, tramp-adb-handle-copy-file)
+       (tramp-adb-handle-rename-file):
+       * lisp/net/tramp-archive.el (with-parsed-tramp-archive-file-name):
+       * lisp/net/tramp-cache.el (tramp-get-file-property, tramp-cache-print):
+       * lisp/net/tramp-compat.el (tramp-compat-process-running-p)
+       (tramp-compat-exec-path):
+       * lisp/net/tramp-gvfs.el (tramp-gvfs-file-name-handler)
+       (tramp-gvfs-dbus-byte-array-to-string)
+       (tramp-gvfs-do-copy-or-rename-file):
+       * lisp/net/tramp-rclone.el (tramp-rclone-file-name-handler)
+       (tramp-rclone-do-copy-or-rename-file):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-file-truename)
+       (tramp-sh-handle-copy-directory, tramp-do-copy-or-rename-file)
+       (tramp-sh-handle-insert-directory, tramp-sh-file-name-handler)
+       (tramp-maybe-open-connection):
+       * lisp/net/tramp-smb.el (tramp-smb-file-name-handler)
+       (tramp-smb-handle-copy-file, tramp-smb-handle-copy-directory)
+       (tramp-smb-handle-copy-file, tramp-smb-handle-insert-directory)
+       (tramp-smb-handle-rename-file, tramp-smb-maybe-open-connection):
+       * lisp/net/tramp-sudoedit.el (tramp-sudoedit-file-name-handler)
+       (tramp-sudoedit-do-copy-or-rename-file)
+       (tramp-sudoedit-handle-file-truename):
+       Use `if-let', `when-let', `directory-name-p', `inhibit-message',
+       `non-essential and `cl-struct-slot-info'.  Don't use `seconds-to-time'.
+
+       * test/lisp/net/tramp-archive-tests.el (tramp-message-show-message):
+       Don't set.
+
+       * test/lisp/net/tramp-tests.el (inhibit-message): Don't declare.
+       (tramp-message-show-message): Don't set.
+       (tramp-test06-directory-file-name): Use `non-essential'.
+       (tramp-test10-write-region): Use `inhibit-message'.
+       (tramp-test36-vc-registered): No special handling for old Emacsen.
+       (tramp--test-emacs25-p): Remove.
+       (tramp-test45-unload): Special case of `tramp-completion-mode'.
+
+2020-01-19  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Remove Gnulib putenv code
+
+       It’s not needed, since Emacs always uses the system putenv and all
+       platforms have putenv.  This improves on the fix for Bug#19874.
+       Suggested by Bruno Haible.
+       * admin/merge-gnulib (GNULIB_MODULES): Remove putenv.
+       * configure.ac: Remove workarounds for Gnulib putenv module.
+       * lib/gnulib.mk.in, m4/gnulib-comp.m4: Regenerate.
+       * lib/putenv.c, m4/putenv.m4: Remove.
+
+2020-01-19  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from Gnulib
+
+       This incorporates:
+       2020-01-18 Rename ~~gnulib.m4 to zzgnulib.m4
+       2020-01-18 Fix "m4_require: circular dependency of AC_LANG_COMPILER(C)"
+       2020-01-18 Ensure Automake does not drop ~~gnulib.m4
+       2020-01-18 Fix major regression from 2020-01-10
+       * m4/00gnulib.m4, m4/gnulib-common.m4: Copy from Gnulib.
+       * m4/gnulib-comp.m4: Regenerate.
+       * m4/zzgnulib.m4: New file, from Gnulib.
+
+2020-01-19  Rüdiger Sonderfeld  <ruediger@c-plusplus.de>
+
+       Add space before message in byte compiler warnings
+
+       According to the GNU coding standards (info "(standards) Errors"):
+       > If you want to mention the column number, use one of these formats:
+       >      SOURCE-FILE-NAME:LINENO:COLUMN: MESSAGE
+       >      SOURCE-FILE-NAME:LINENO.COLUMN: MESSAGE
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-warning-prefix): Add space
+       before message in byte compiler warnings to comply with the GNU coding
+       standards.  (Bug#18969)
+
+2020-01-18  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Don’t assume sizeof (size_t) == 4 in allocators
+
+       This removes some old 32-bit assumptions in Emacs allocator tuning,
+       and improves performance of ‘make compile-always’ by about 7% on a
+       couple of 64-bit GNU/Linux platforms I tried it on.  It should not
+       affect performance on 32-bit platforms.
+       * src/alloc.c (MALLOC_SIZE_NEAR): New macro.
+       (MALLOC_ALIGNMENT): New constant.
+       (INTERVAL_BLOCK_SIZE, SBLOCK_SIZE, STRING_BLOCK_SIZE): Use the new
+       macro.  Make these enum constants since they need not be macros.
+
+2020-01-18  Eric Abrahamsen  <eric@ericabrahamsen.net>
+
+       Ensure that gnus-summary-attach-article finds the right articles
+
+       * lisp/gnus/gnus-msg.el (gnus-summary-attach-article): Before
+       iterating over the articles to attach, first close any open
+       article. Using `set-buffer' required `gnus-summary-select-article' to
+       re-set the buffer every time, meaning we never got off the original
+       article.
+
+2020-01-18  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/fns.c (sxhash_obj): Fix crash on sub-char-tables
+
+       Also, look inside overlays, like `internal_equal`.
+
+       (internal_equal): Cosmetic tweak.
+
+2020-01-18  Alan Third  <alan@idiocy.org>
+
+       Add ability to find ObjC method names
+
+       * lisp/progmodes/cc-cmds.el (c-defun-name-1): Add Objective-C method
+       name ability.
+
+2020-01-18  Alan Third  <alan@idiocy.org>
+
+       Don't error on non-toolkit NS scrollbars (bug#37042)
+
+       * configure.ac (HAVE_NS): Don't error, but warn, on non-toolkit
+       scrollbars.
+
+2020-01-18  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove XEmacs and old Emacs compat code from ebnf2ps.el
+
+       * lisp/progmodes/ebnf2ps.el (ebnf-color-p)
+       (ebnf-style-database): Remove XEmacs and old Emacs compat code.
+
+2020-01-18  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Make Faset nonrecursive
+
+       * src/data.c (Faset): Refactor Faset so that it’s not recursive.
+       This helps the compiler and makes the code a bit clearer.
+
+2020-01-18  Paul Eggert  <eggert@Penguin.CS.UCLA.EDU>
+
+       Improve performance when a string's byte count changes
+
+       * src/alloc.c (allocate_string_data): Now static.
+       Remove code for when Faset calls this function when S
+       already has data assigned, as that can no longer happen.
+       (resize_string_data): New function, which avoids relocation in
+       more cases than the old code did, by not bothering to relocate
+       when the size changes falls within the alignment slop.
+       * src/data.c (Faset): Use resize_string_data.
+       Change a while to a do-while since it must iterate at least once.
+
+2020-01-18  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove XEmacs compat code from allout.el
+
+       * lisp/allout.el (allout-overlay-preparations)
+       (allout-overlay-interior-modification-handler)
+       (allout-before-change-handler, allout-beginning-of-line)
+       (allout-solicit-alternate-bullet, allout-annotate-hidden)
+       (allout-hide-by-annotation, allout-yank-processing)
+       (allout-flag-region, allout-toggle-subtree-encryption)
+       (allout-mark-marker, allout-substring-no-properties)
+       (allout-select-safe-coding-system)
+       (allout-previous-single-char-property-change)
+       (allout-next-single-char-property-change)
+       (top-level): Remove XEmacs compat code.
+
+2020-01-17  Alan Mackenzie  <acm@muc.de>
+
+       Introduce element &error into edebug specification lists for macros
+
+       This fixes bug #37540.
+
+       * lisp/emacs-lisp/edebug.el (top level): New entry for &error in alist 
used to
+       associate elements with their handling functions.
+       (edebug-match-&error): New function.
+       (nested-backquote-form): Use the new element &error to abort 
instrumentation
+       on encountering a three deep nesting of backquotes (without intervening
+       commas).
+
+       * doc/lispref/edebug.texi (Specification List): Add an entry for &error.
+
+       * etc/NEWS: Add an entry for &error.
+
+2020-01-17  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       4df0c1c6c4 (origin/emacs-27) ; * src/lread.c (force_new_style_backquo...
+       069741b2f7 ; * etc/NEWS: Mention latest changes in checkdoc.  (Bug#38...
+       a785be29bf Fix wording and punctuation of a recent commit
+       0d3d3be35c Merge branch 'emacs-27' of git.savannah.gnu.org:/srv/git/e...
+       5da372e17e ; Minor edit in anti.texi
+
+       # Conflicts:
+       #       etc/NEWS
+
+2020-01-17  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       5da372e17e ; Minor edit in anti.texi
+
+2020-01-17  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       8d091f7fc2 ; Fix recent markup change
+       b78426526c ; * lisp/obsolete/vc-arch.el: Add missing "Obsolete-since"...
+       3fb37dc9a4 ; * lisp/ezimage.el: Fix typo.
+       778923afe5 Document feature requests in the Emacs manual
+
+2020-01-17  Glenn Morris  <rgm@gnu.org>
+
+       * lisp/progmodes/vhdl-mode.el (speedbar-load-hook): Silence compiler.
+
+2020-01-17  Glenn Morris  <rgm@gnu.org>
+
+       Make more load-hooks obsolete
+
+       * lisp/align.el (align-load-hook):
+       * lisp/autorevert.el (auto-revert-load-hook):
+       * lisp/bookmark.el (bookmark-load-hook):
+       * lisp/cmuscheme.el (cmuscheme-load-hook):
+       * lisp/dired.el (dired-load-hook):
+       * lisp/expand.el (expand-load-hook):
+       * lisp/ibuffer.el (ibuffer-load-hook):
+       * lisp/msb.el (msb-after-load-hook):
+       * lisp/recentf.el (recentf-load-hook):
+       * lisp/speedbar.el (speedbar-load-hook):
+       * lisp/strokes.el (strokes-load-hook):
+       * lisp/calc/calc.el (calc-load-hook):
+       * lisp/calendar/timeclock.el (timeclock-load-hook):
+       * lisp/emulation/viper-init.el (viper-load-hook):
+       * lisp/progmodes/cwarn.el (cwarn-load-hook):
+       * lisp/progmodes/idlwave.el (idlwave-load-hook):
+       * lisp/progmodes/inf-lisp.el (inferior-lisp-load-hook):
+       * lisp/progmodes/meta-mode.el (meta-mode-load-hook):
+       * lisp/textmodes/reftex-vars.el (reftex-load-hook):
+       * lisp/textmodes/table.el (table-load-hook):
+       * lisp/url/url-vars.el (url-load-hook):
+       * lisp/vc/ediff-init.el (ediff-load-hook):
+       Obsolete for with-eval-after-load.
+
+2020-01-17  Stefan Kangas  <stefankangas@gmail.com>
+
+       Make sb-image.el obsolete (Bug#37837)
+
+       * lisp/sb-image.el: Move from here...
+       * lisp/obsolete/sb-image.el: ...to here.
+
+       * lisp/speedbar.el (ezimage): Require instead of 'sb-image'.
+       (speedbar-use-images, speedbar-expand-image-button-alist)
+       (speedbar-insert-image-button-maybe, speedbar-image-dump): Move
+       here from 'sb-image.el'.
+
+2020-01-17  Glenn Morris  <rgm@gnu.org>
+
+       * doc/misc/ido.texi (Ignoring): Reword per Texinfo warning.
+
+2020-01-17  Glenn Morris  <rgm@gnu.org>
+
+       Replace doc references to load-hooks
+
+       with-eval-after-load is a cleaner, standard feature that works
+       for every file
+       * doc/misc/calc.texi (Hooks):
+       * doc/misc/dired-x.texi (Installation)
+       (Optional Installation File At Point, Omitting Files in Dired)
+       (Omitting Examples, Find File At Point):
+       * doc/misc/ediff.texi (Hooks, Selective Browsing)
+       (Highlighting Difference Regions):
+       * doc/misc/efaq.texi (Disabling backups):
+       * doc/misc/gnus.texi (Startup Variables):
+       * doc/misc/idlwave.texi (Structure Tag Completion, Misc Options):
+       * doc/misc/org.texi (Handling Links):
+       * doc/misc/reftex.texi (Key Bindings, Keymaps and Hooks):
+       * doc/misc/sem-user.texi (Speedbar):
+       * doc/misc/speedbar.texi (Hooks, Minor Display Modes):
+       * doc/misc/viper.texi (Rudimentary Changes):
+       Replace load-hooks with with-eval-after-load
+
+2020-01-17  Glenn Morris  <rgm@gnu.org>
+
+       Replace add-hook load-hook with with-eval-after-load
+
+       * lisp/info.el (Info-install-speedbar-variables):
+       * lisp/cedet/ede.el (speedbar):
+       * lisp/cedet/semantic/imenu.el (speedbar):
+       * lisp/emacs-lisp/eieio-opt.el (eieio-class-speedbar-key-map):
+       * lisp/emacs-lisp/eieio-speedbar.el (eieio-speedbar-create):
+       * lisp/erc/erc-speedbar.el (erc-install-speedbar-variables):
+       * lisp/mail/rmail.el (rmail-install-speedbar-variables):
+       * lisp/progmodes/gud.el (gud-install-speedbar-variables):
+       Use with-eval-after-load.
+
+2020-01-17  Glenn Morris  <rgm@gnu.org>
+
+       * lisp/obsolete/cust-print.el (print-circle): Doc tweak.
+
+2020-01-17  Glenn Morris  <rgm@gnu.org>
+
+       edebug: remove ancient code for ancient XEmacs support libs
+
+       * lisp/emacs-lisp/edebug.el (edebug--require-cl-read): Remove.
+       (edebug-setup-hook, cl-read-load-hooks): Don't modify.
+       (edebug-unload-function): Don't modify cl-read-load-hooks.
+
+2020-01-17  Lin Sun  <lin.sun@zoom.us>
+
+       Fix the error message from makefile-move-to-macro
+
+       * lisp/cedet/ede/makefile-edit.el (makefile-macro-file-list):
+       regexp-quote the param in makefile-move-to-macro (Bug#39094).
+
+2020-01-17  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove a FIXME from package.el
+
+       * lisp/emacs-lisp/package.el (package-unpack): Remove FIXME about
+       maybe deleting the package directory.  It was decided that this was
+       undesirable.  (Bug#7756)
+
+2020-01-17  Stefan Kangas  <stefankangas@gmail.com>
+
+       Add index entry "syntax highlighting" to the elisp manual
+
+       * doc/lispref/modes.texi (Font Lock Mode): Add an index entry for
+       "syntax highlighting".  (Bug#24827)
+
+2020-01-16  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix hexl jumping to end of file
+
+       Plus some other small fixes nearby.
+       * lisp/hexl.el (hexl-end-of-line): Simplify to match next fix.
+       (hexl-end-of-1k-page, hexl-end-of-512b-page): Use min instead
+       of max.  Tiny change by Vladimir Nikishkin (Bug#39131).
+       (hexl-insert-char): Use = instead of eq to compare integers.
+
+2020-01-16  Damien Cassou  <damien@cassou.me>
+
+       Add unattended spell-checking to checkdoc
+
+       This commit makes checkdoc capable of spell-checking even when the
+       user isn't using it interactively. When TAKE-NOTES is non-nil,
+       checkdoc will run spell-checking (with ispell) and report spelling
+       mistakes.
+
+       Fixes: (bug#38583).
+
+       * lisp/textmodes/ispell.el (ispell-word): Extract part of it to
+       `ispell--run-on-word`.
+       (ispell--run-on-word): New function, extracted from `ispell-word`.
+       (ispell-error-checking-word): New function.
+       (ispell-correct-p): New function.  Use `ispell--run-on-word` and
+       `ispell-error-checking-word`.
+       * lisp/emacs-lisp/checkdoc.el (checkdoc-current-buffer): Pass
+       TAKE-NOTES to `checkdoc-start`.
+       (checkdoc-continue): Pass TAKE-NOTES to `checkdoc-this-string-valid`.
+       (checkdoc-this-string-valid): Add optional argument TAKE-NOTES and
+       pass it to `checkdoc-this-string-valid-engine`.
+       (checkdoc-this-string-valid-engine): Add optional argument TAKE-NOTES
+       and pass it to `checkdoc-ispell-docstring-engine`.
+       (checkdoc-ispell-init): Call `ispell-set-spellchecker-params` and
+       `ispell-accept-buffer-local-defs`.  These calls are required to
+       properly use ispell.  The problem went unnoticed until now because
+       checkdoc was only using ispell through the high-level command
+       `ispell-word` which takes care of all the initialization for the user.
+       (checkdoc-ispell-docstring-engine): Add optional argument TAKE-NOTES
+       to force reporting of spell-checking errors.  Throw error
+       when (checkdoc-ispell-init) fails configuring ispell.  Replace a
+       few (if cond nil body) with (unless cond body). Replace (let ((var
+       nil))) with (let (var)). Replace (if (not (eq checkdoc-autofix-flag
+       'never)) body) with just body because `checkdoc-autofix-flag` is
+       checked at the beginning of the function.
+
+2020-01-16  Stefan Kangas  <stefankangas@gmail.com>
+
+       * admin/notes/font-backend: Remove outdated file. (Bug#34663)
+
+       (cherry picked from commit 2be48605c0e31566401853a405dc7ea1892b3ef7)
+
+2020-01-16  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       52080b5778 (origin/emacs-27) * lisp/minibuffer.el (read-file-name-def...
+       e4cec1fd10 ; * etc/NEWS: Fix some file name quotations.
+       13995f31a2 Make emacs prefer an existing ~/.emacs.d to an existing XD...
+       91cac24952 ; etc/NEWS minor edits
+       5505babc07 Describe --with-cairo non-support for bitmapped fonts.
+       caf00066ee Mention GTK font chooser changes in NEWS
+       23b87db628 ; Unmaintain fortran elisp
+       3b0d1a50aa f90: handle F2008 module function
+       55803cc189 Move shell-related menu items to "Shell Commands" submenu ...
+       2be48605c0 * admin/notes/font-backend: Remove outdated file. (Bug#34663)
+       f07a470124 Declare the ftx font backend driver obsolete
+       6c08a430fb ; Fix wording of a comment.
+
+       # Conflicts:
+       #       admin/notes/font-backend
+       #       etc/NEWS
+
+2020-01-16  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove references to obsolete libraries
+
+       * doc/emacs/cmdargs.texi (General Variables):
+       * doc/lispintro/emacs-lisp-intro.texi (Lisp History):
+       * doc/lispref/processes.texi (Network):
+       * doc/misc/gnus-coding.texi (Gnus Coding Style):
+       * doc/misc/gnus.texi (Oort Gnus):
+       * doc/misc/smtpmail.texi (Encryption): Remove references to obsolete
+       libraries.  (Bug#37964)
+
+2020-01-16  Simon Josefsson  <simon@josefsson.org>
+
+       Add SASL SCRAM-SHA-256 support.
+
+       * lisp/net/sasl.el (sasl-mechanisms): Add SCRAM-SHA-256.
+       (sasl-mechanism-alist): Ditto.
+       * lisp/net/sasl-scram-sha256.el: New file.
+       * test/lisp/net/sasl-scram-rfc-tests.el (sasl-scram-sha-256-test):
+       New function.
+
+2020-01-16  Paul Eggert  <eggert@cs.ucla.edu>
+
+       dns-query now represents SOA integers as integers (Bug#38937)
+
+       * lisp/net/dns.el (dns-read-int32): Declare obsolete.
+       Assume bignums.
+       (dns-read-type): Represent SOA integers as integers, not strings.
+
+2020-01-16  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Refactor parse-time-string
+
+       * lisp/calendar/parse-time.el (parse-time--rfc-822ish):
+       Remove, and fold its body into its only caller.
+
+2020-01-16  Paul Eggert  <eggert@cs.ucla.edu>
+
+       parse-time-string now parses ISO 8601 format strings
+
+       * lisp/calendar/parse-time.el (parse-time-string):
+       Parse strings in ISO 8601 format too (Bug#39001).
+       (parse-time--rfc-822ish): New internal function,
+       containing most of the old parse-time-string implementation.
+       (parse-iso8601-time-string): Simplify, now that
+       parse-time-string groks ISO 8601.
+
+2020-01-15  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * admin/unidata/unidata-gen.el: Use lexical-binding
+
+       (unidata-prop): Use defstruct to define the 6 accessor functions.
+       (unidata-gen-table-character, unidata-gen-table, unidata-gen-table-name)
+       (unidata-check): Move common code out of `if`.
+       (unidata-word-list-diff, unidata-split-decomposition):
+       Move common code out of `if`; use `push`.
+
+2020-01-15  Stefan Kangas  <stefankangas@gmail.com>
+
+       Remove unused ftx font backend driver
+
+       * src/ftxfont.c: Remove file.
+       * admin/notes/font-backend:
+       * configure.ac:
+       * src/Makefile.in:
+       * src/deps.mk (ftxfont.o):
+       * src/font.c (syms_of_font):
+       * src/font.h (top-level, font_property_index):
+       * src/xfns.c (Fx_create_frame, x_create_tip_frame): Remove unused ftx
+       font backend driver.  Thanks to Glenn Morris for pointing out that it
+       can be removed.  (Bug#34663)
+
+2020-01-15  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       0e936f18f8 (origin/emacs-27) Fix build failure with --with-cairo --wi...
+       c34f7e884b Add new node "Package Statuses" to manual
+       fdee034ac8 * lisp/isearch.el: Fix corner cases of isearch-lazy-count.
+       7b14329d86 ; * lisp/simple.el (messages-buffer): Doc fix.  (Bug#39124)
+       7ec66a59e3 Document spacing issues with Xft for some fonts
+       08cd247fbd ; * etc/NEWS: Fix typo.
+       d645628e3c Always use lexical-binding in lisp-interaction-mode (bug#3...
+       c42198f78c ; *etc/NEWS: Fix typo.
+       0ed9cfa7dc vc-dir: ensure we don't use a pager with git
+       37e0d00c14 Improve ERC's matching of nicks and URLs (bug#38257)
+       d47b157969 Handle tab-bar clicks on a GPM-capable console.
+       e4791f3f8e ;* etc/TODO: Update.
+
+       # Conflicts:
+       #       etc/NEWS
+
+2020-01-15  Andreas Schwab  <schwab@linux-m68k.org>
+
+       Fix implicit declaration of getenv and atol
+
+       * src/gtkutil.c: Include <stdlib.h>.
+
+2020-01-14  Michael Albinus  <michael.albinus@gmx.de>
+
+       Refactor Tramp async process code
+
+       * lisp/net/tramp-adb.el (tramp-adb-handle-make-process):
+       * lisp/net/tramp-sh.el (tramp-sh-handle-make-process):
+       Update stderr buffer when process has finished.  Do not call
+       `auto-revert'.
+
+       * test/lisp/net/tramp-tests.el (tramp-test31-interrupt-process):
+       Tag it :unstable.  Change `accept-process-output' arguments.
+       (tramp--test-async-shell-command): New defun.
+       (tramp--test-shell-command-to-string-asynchronously): Use it.
+       (tramp-test32-shell-command): Refactor code.
+
+2020-01-14  Robert Pluim  <rpluim@gmail.com>
+
+       Default cairo to enabled
+
+       * configure.ac (USE_CAIRO): Default cairo to enabled.
+
+       * etc/NEWS: Announce the change to use cairo if found.
+
+2020-01-14  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from gnulib
+
+       This incorporates:
+       2020-01-10 fix major regression from 2020-01-04
+       2020-01-05 tests: avoid GCC over-optimization
+       2020-01-04 fix AC_CHECK_DECL so it deactivates clang's built-ins
+       2020-01-03 getopt-posix: fix compilation failure in testdirs
+       2020-01-03 doc: mention the 64-bit inode number problem
+       2020-01-02 wchar: make the HP-UX workaround work on HP-UX 11.31
+       * build-aux/config.guess, build-aux/config.sub, lib/inttypes.in.h:
+       * lib/stdlib.in.h, lib/unistd.in.h, m4/00gnulib.m4, m4/largefile.m4:
+       * m4/unistd_h.m4: Copy from Gnulib
+       * lib/gnulib.mk.in, m4/gnulib-comp.m4: Regenerate.
+
+2020-01-14  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Port configure.ac to future Gnulib
+
+       Rewrite an ancient Alpha ELF check to port to a future Gnulib
+       version that may require AC_CHECK_DECL to be set up properly as
+       per the ‘Expanded Before Required’ section of the Autoconf manual
+       Autoconf doesn’t guarantee that AC_CHECK_DECL will work properly
+       if called conditionally (e.g., inside a shell ‘case’ statement)
+       and the condition is false.  Problem reported by Bruno Haible in:
+       https://lists.gnu.org/r/bug-gnulib/2020-01/msg00088.html
+       * configure.ac (LD_SWITCH_MACHINE): Migrate ELF check later,
+       when AC_CHECK_DECL is properly set up.
+
+2020-01-13  Philipp Stephani  <phst@google.com>
+
+       * src/pdumper.c (dump_vectorlike): Unbreak build after 724af7671590c
+
+2020-01-13  Philipp Stephani  <phst@google.com>
+
+       Use decode_string_utf_8 in emacs-module.c.
+
+       Now that decode_string_utf_8 is available, we can use it to signal
+       errors on invalid input.
+
+       * src/coding.c (syms_of_coding): Move Qutf_8_string_p from json.c
+       since it’s now used outside json.c.
+
+       * src/emacs-module.c (module_decode_utf_8): New helper function.
+       (module_make_function, module_copy_string_contents): Use it.
+
+2020-01-12  Andrea Corallo  <akrl@sdf.org>
+
+       Split relocated data into two separate arrays
+
+       Rework the functionality of the previous commit to be more efficient.
+
+2020-01-11  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       f0ebd919c1 (origin/emacs-27) ; * doc/lispref/anti.texi (Antinews): Fi...
+       6f059159ee Update Acknowledgments sections
+       e1262d45f9 Update Antinews in ELisp manual
+       fd8128f0c1 ; Move the description of define-inline to a different nod...
+       524441d6b3 Improve wording in the ELisp manual
+       8addfa91c8 Reset to the standard value when reverting session's custo...
+       d6f9b09777 Fix saving multiple themes
+       c556aabde8 Calc: fix interval entry (bug#39040)
+       91cd3c1372 Fix horizontal line display in Custom buffers
+       15c8e984ae ; * etc/NEWS: Fix a typo.
+       ff8996a337 flymake: fix typo in variable binding (bug#38752)
+       16eaaa07e6 ; Minor spelling fixes
+       5efe795659 Update Antinews in the Emacs manual
+       5841240295 Use NSNumber instead of BOOL (bug#39047)
+       beec9f64a5 Add comment on fido-mode's file-sorting semantics
+       eb3c6ad325 Consider non-string minibuffer-default in icomplete
+
+       # Conflicts:
+       #       etc/NEWS
+
+2020-01-11  Andrea Corallo  <akrl@sdf.org>
+
+       Move function reloc data into pure space during bootstrap
+
+2020-01-09  Michael Albinus  <michael.albinus@gmx.de>
+
+       Add hexdump/awk file encoding to Tramp.  (Bug#35639)
+
+       * lisp/net/tramp-sh.el (tramp-hexdump-encode, tramp-hexdump-awk-encode)
+       (tramp-od-encode, tramp-od-awk-encode): New defconst.
+       (tramp-awk-encode, tramp-awk-decode): Adapt.
+       (tramp-awk-coding-test): Remove.
+       (tramp-remote-coding-commands): Add hexdump/awk encoding.  (Bug#35639)
+       (tramp-find-inline-encoding): Adapt handling of awk, hexdump and od.
+       (tramp-get-remote-busybox, tramp-get-remote-awk)
+       (tramp-get-remote-hexdump, tramp-get-remote-od): New defuns.
+
+2020-01-09  Michael Albinus  <michael.albinus@gmx.de>
+
+       Remove obsolete thread-alive-p
+
+       * etc/NEWS (thread-alive-p):
+       * lisp/thread.el (thread-alive-p):
+       * src/thread.c (thread-alive-p): Remove.
+
+2020-01-08  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       1fe596d89f (origin/emacs-27) Fix another compilation problem in a bui...
+
+2020-01-08  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       50dc615095 (origin/emacs-27) Fix build without threads
+
+2020-01-08  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       6cd9ccb0a2 (origin/emacs-27) Fix compression of directories in Dired
+       42329e6d3b ; * etc/NEWS: Review of the whole text.
+       af5709f16b Further enhancement on `tramp-file-local-name'
+       fb432446f5 Objective C Mode imenu: cease recognizing "functions" with...
+       a18373a999 ; * etc/NEWS: Update the text about the XDG_CONFIG_HOME/em...
+       73fd8a4b53 Fix BSD and macOS builds w.r.t. pthread_setname_np (bug#38...
+       f54b24304d Scale top-left coordinates in display-monitor-attributes-list
+       b46c75b16c xref-matches-in-files: Big Tramp speed-up
+       883b3490d8 * lisp/net/tramp.el (tramp-file-local-name): Remove `save-...
+       c01f55f126 Fix rendering bug due to unsynchronized cairo surface size...
+       075f21c0e3 Avoid crash by access to cleared img->pixmap->data/img->ma...
+       16c6dfb4f1 Avoid assertion violations in very small-height windows
+       9063124b91 Use pthread_setname_np to set thread name
+
+       # Conflicts:
+       #       etc/NEWS
+       #       lisp/net/tramp.el
+
+2020-01-07  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix sxhash-equal on bytecodes, markers, etc.
+
+       Problem reported by Pip Cet (Bug#38912#14).
+       * doc/lispref/objects.texi (Equality Predicates):
+       Document better when ‘equal’ looks inside objects.
+       * doc/lispref/windows.texi (Window Configurations):
+       Don’t say that ‘equal’ looks inside window configurations.
+       * etc/NEWS: Mention the change.
+       * src/fns.c (internal_equal):
+       Do not look inside window configurations.
+       (sxhash_obj): Hash markers, byte-code function objects,
+       char-tables, and font objects consistently with Fequal.
+       * src/window.c (compare_window_configurations):
+       Now static.  Remove last argument.  Caller changed.
+       * test/lisp/ffap-tests.el (ffap-other-window--bug-25352):
+       Use compare-window-configurations, not ‘equal’.
+       * test/src/fns-tests.el (test-sxhash-equal): New test.
+
+2020-01-07  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Help the compiler inline sxhash
+
+       * src/fns.c (sxhash_obj): Rename from sxhash and make
+       it static, so that the compiler can inline it better.
+       (sxhash): New function that does not take a depth arg.
+       All callers changed.
+
+2020-01-07  Alan Third  <alan@idiocy.org>
+
+       Fix NS frame parameters (bug#39000)
+
+       * src/frame.c (make_frame): Use new system default setting.
+       * src/frame.h (enum ns_appearance_type): Add new system default
+       setting.
+       * src/nsfns.m (Fx_create_frame): Correctly handle Qunbound and support
+       system default appearance.
+       (syms_of_nsfns): Add Qlight.
+       * src/nsterm.h: New method definition.
+       * src/nsterm.m (ns_set_appearance): Correctly handle Qlight and use new
+       setAppearance method.
+       ([EmacsView initFrameFromEmacs:]): Use new setAppearance method.
+       ([EmacsWindow setAppearance]): New method.
+       * doc/lispref/frames.texi (Management Parameters): Document 'light'.
+
+2020-01-07  Michael Albinus  <michael.albinus@gmx.de>
+
+       Implement stderr in tramp-adb-handle-make-process
+
+       * lisp/net/tramp-adb.el (tramp-adb-handle-make-process):
+       Implement `stderr'.
+
+       * lisp/net/tramp-sh.el (tramp-sh-handle-make-process):
+       Flush connection properties in time.
+
+       * test/lisp/net/tramp-tests.el (tramp-test30-make-process)
+       (tramp-test32-shell-command): Test asynchronous stderr for tramp-adb.
+
+2020-01-05  Mattias Engdegård  <mattiase@acm.org>
+
+       Mark 'catch' and 'condition-case' bytecodes as obsolete
+
+       They have not been generated by the byte-compiler since Emacs 25.
+
+       * lisp/emacs-lisp/bytecomp.el (byte-catch, byte-condition-case):
+       * src/bytecode.c (BYTE_CODES, exec_byte_code):
+       Mark as obsolete (since Emacs 25; they were still generated in 24.4).
+
+2020-01-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Go back to iso-2022-7bit for titdic-cnv.el again
+
+       * admin/notes/unicode: Mention this.
+       * lisp/international/titdic-cnv.el:
+       Go back to iso-2022-7bit for this file, since utf-8-emacs unified
+       characters that tsanq-quick-converter did not want unified.
+       Problem reported by Eli Zaretskii in:
+       https://lists.gnu.org/r/emacs-devel/2020-01/msg00156.html
+
+2020-01-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Merge from origin/emacs-27
+
+       448df8fec7 Improve doc-strings of 'quit-window' and 'quit-restore-win...
+       7f01dfca56 Fix MH-E bug #470: Show buffer discards text properties
+       f95a2b8301 Fix some broken conditional forms
+       28727444f1 Fix a scoping error in tramp-sudoedit.el
+       6cbdd048bd * lisp/autorevert.el (auto-revert-notify-handler): Fix bra...
+       076dd1f69a Fix typo in 'window_box_height'
+
+2020-01-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Merge from origin/emacs-27
+
+       05c5bf4d38 * lisp/net/tramp.el: Fix typos.
+
+2020-01-05  Philipp Stephani  <phst@google.com>
+
+       Shorten pointer printing code using a small helper function.
+
+       * src/print.c (print_pointer): New helper function.
+       (print_vectorlike): Use it.
+
+2020-01-05  Philipp Stephani  <phst@google.com>
+
+       Also print function data when printing module functions.
+
+       This is especially useful in cases where modules only use a single
+       entry point and use the data to dispatch to the actual function.  Such
+       a design is common for languages such as Go and C++.
+
+       * src/emacs-module.c (module_function_data): New function.
+
+       * src/print.c (print_vectorlike): Use it to print module function data
+       if not NULL.
+       (print_object): Adapt size of buffer.
+
+       * test/data/emacs-module/mod-test.c (emacs_module_init): Pass some
+       non-NULL data to ‘mod-test-sum’.
+       (Fmod_test_sum): Check that correct data is passed through.
+
+       * test/src/emacs-module-tests.el (mod-test-sum-test)
+       (module-function-object): Adapt unit tests.
+
+2020-01-05  Mattias Engdegård  <mattiase@acm.org>
+
+       Remove generation of old bytecodes for catch/unwind
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile--use-old-handlers)
+       (byte-compile-condition-case, byte-compile-condition-case--old):
+       Remove.
+       (byte-compile-condition-case--new):
+       Rename to byte-compile-condition-case.
+       (byte-compile-catch, byte-compile-unwind-protect):
+       * lisp/emacs-lisp/cconv.el (cconv-convert, cconv-analyze-form):
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker):
+       Simplify.
+
+2020-01-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * lisp/emacs-lisp/bindat.el: Remove obsolete comment.
+
+       * lisp/arc-mode.el (archive-zip-summarize): Remove unused local.
+
+2020-01-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Simplify x-dnd.el due to bignums
+
+       * lisp/x-dnd.el (x-dnd-get-drop-x-y, x-dnd-version-from-flags)
+       (x-dnd-more-than-3-from-flags, x-dnd-get-motif-value)
+       (x-dnd-motif-value-to-list): Do not worry about pairs of
+       16-bit numbers, as the C code no longer generates them;
+       it generates bignums now, when needed on 32-bit platforms.
+
+2020-01-05  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * lisp/gnus/gnus-start.el (gnus-group-change-level): Simplify
+
+       * lisp/gnus/gnus-group.el (gnus-group-unsubscribe-group): Simplify.
+
+2020-01-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix bug in recent allocate_string_data patch
+
+       Reported by Glenn Morris in:
+       https://lists.gnu.org/r/emacs-devel/2020-01/msg00098.html
+       * src/alloc.c (allocate_string_data): If the string is small and
+       there is not enough room in the current block, clear the string if
+       CLEARIT.
+
+2020-01-04  Philipp Stephani  <phst@google.com>
+
+       Improve 'noexcept' support in C++17.
+
+       In C++17, 'noexcept' is part of a function type and may be used in
+       typedef declarations, see
+       https://en.cppreference.com/w/cpp/language/noexcept_spec.
+
+       * src/emacs-module.h.in: Mark function pointer type aliases as
+       'noexcept' in C++17.
+
+2020-01-04  Mattias Engdegård  <mattiase@acm.org>
+
+       Generate fewer useless conditionals in cl-loop
+
+       * lisp/emacs-lisp/cl-macs.el (cl--parse-loop-clause):
+       Don't generate a condition if both branches are the same, which
+       is the common case.
+
+2020-01-04  Philipp Stephani  <phst@google.com>
+
+       Make module function finalizer test less brittle.
+
+       * test/src/emacs-module-tests.el (module/function-finalizer): Create
+       100 leaked functions to increase the probability that at least one
+       gets garbage-collected.
+
+2020-01-04  Philipp Stephani  <phst@google.com>
+
+       emacs-module.h: Don't generate invalid C++11 code.
+
+       * src/emacs-module.h.in: Remove 'noexcept' from function pointer type
+       aliases.  It is illegal there in C++11, see
+       https://en.cppreference.com/w/cpp/language/noexcept_spec.
+
+2020-01-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Let the OS clear new large strings of NUL
+
+       On my platform, this sped up (make-string 4000000000 0) from 2.5
+       to 0.015 seconds (not that people should want to do this much :-).
+       * src/alloc.c (allocate_string_data): New arg CLEARIT.
+       Callers changed.
+       (Fmake_string): Prefer calloc to malloc+memset when allocating a
+       large string of NUL bytes.
+       (make_clear_string): New function.
+       (make_uninit_string): Use it.
+       (make_clear_multibyte_string): New function.
+       (make_uninit_multibyte_string): Use it.
+
+2020-01-03  Glenn Morris  <rgm@gnu.org>
+
+       * src/alloc.c (cleanup_vector): Fix --without-modules builds.
+
+2020-01-03  Philipp Stephani  <phst@google.com>
+
+       Implement finalizers for module functions (Bug#30373)
+
+       * src/module-env-28.h: Add new module environment functions to
+       module environment for Emacs 28.
+
+       * src/emacs-module.h.in: Document that 'emacs_finalizer' also works
+       for function finalizers.
+
+       * src/emacs-module.c (CHECK_MODULE_FUNCTION): New function.
+       (struct Lisp_Module_Function): Add finalizer data member.
+       (module_make_function): Initialize finalizer.
+       (module_get_function_finalizer)
+       (module_set_function_finalizer): New module environment functions.
+       (module_finalize_function): New function.
+       (initialize_environment): Initialize new environment functions.
+
+       * src/alloc.c (cleanup_vector): Call potential module function
+       finalizer during garbage collection.
+
+       * test/data/emacs-module/mod-test.c (signal_error): New helper
+       function.
+       (memory_full): Use it.
+       (finalizer): New example function finalizer.
+       (Fmod_test_make_function_with_finalizer)
+       (Fmod_test_function_finalizer_calls): New test module functions.
+       (emacs_module_init): Define them.
+
+       * test/src/emacs-module-tests.el (module/function-finalizer): New unit
+       test.
+
+       * doc/lispref/internals.texi (Module Functions): Document new
+       functionality.
+       (Module Misc): Move description of 'emacs_finalizer' type to 'Module
+       Functions' node, and add a reference to it.
+
+       * etc/NEWS: Mention new functionality.
+
+2020-01-03  Andrea Corallo  <akrl@sdf.org>
+
+       Simplify configure.ac removing unnecessary empty parameters
+
+       Prevent false warning emission
+
+2020-01-03  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix the MS-Windows build broken by "Let the OS clear large new objects"
+
+       * src/w32heap.c (sys_calloc): New function, implements calloc
+       in terms of our private implementations of malloc.
+
+       * nt/inc/ms-w32.h (calloc): Redirect to sys_calloc.
+
+2020-01-03  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       06364316e0 (origin/emacs-27) * lisp/net/tramp.el (tramp-file-local-na...
+       d3884f50e0 Adapt commentary in Tramp persistency file
+       2d82f5a44e Change Tramp version to 2.4.3.27.1
+       09b65707cc ; * src/dispnew.c (adjust_glyph_matrix): Fix last change.
+       37f9182b68 Fix redisplay when mode-line-format changes mode-line's he...
+       1420906b81 * src/fileio.c (Fwrite_region): Improve the doc string.
+       01dfcb7c87 Fix removal of frame decorations on Windows (Bug#38705)
+
+2020-01-03  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       071483b6f5 Fix reverting customizations
+       43203d5068 * lisp/loadup.el: Set max-specpdl-size to 1800 when 
loading...
+       fab3674b36 Revert "Raise default max-specpdl-size value"
+       42f66aa502 ; Fix NEWS.24
+       bb9402e6e9 Raise default max-specpdl-size value
+
+2020-01-03  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       138e9051c7 Update distribution documentation
+
+2020-01-03  Mattias Engdegård  <mattiase@acm.org>
+
+       * .gitlab-ci.yml (before_script): Install g++ for CEDET tests.
+
+2020-01-03  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Let the OS clear large new objects
+
+       Prefer calloc to malloc+memset when allocating large zeroed objects.
+       This avoids page thrashing when (make-vector 1000000000 nil)
+       allocates a large nil vector, as Emacs need not touch the
+       vector’s pages.  This wins on platforms like GNU/Linux where
+       calloc can fiddle with page tables to create a block of memory
+       that is lazily zeroed.
+       * src/alloc.c (lisp_malloc, lmalloc, allocate_vectorlike):
+       New arg CLEARIT to tell callee whether to use malloc or calloc.
+       All callers changed.
+       (allocate_clear_vector, allocate_nil_vector): New functions.
+       * src/alloc.c (xzalloc, make_vector):
+       * src/lisp.h (make_nil_vector):
+       Prefer calloc to malloc + memset(...,0,...).
+
+2020-01-02  Andrea Corallo  <akrl@sdf.org>
+
+       Extend find-library-suffixes and find-library-name for eln support
+
+       Fix bytecomp message when native compiling
+
+       Do not block sw interrupts in batch mode (don't ignore C-c)
+
+       Better compile-clean and bootstrap-clean target definition
+
+2020-01-01  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix compilation with GTK versions older than 3
+
+       * src/xfns.c (x_get_net_workarea): Change a recently moved #ifndef
+       so that GTK builds which need this function will compile it.
+       Reported by John <jpff@codemist.co.uk>.
+
+2020-01-01  Andrea Corallo  <akrl@sdf.org>
+
+       Revert "Pacify gcc -Wunused-function on Ubuntu 18.04.3"
+
+       This reverts commit 186152ba400b58d2d278c52d2e3d896decae767e.
+
+2020-01-01  Andrea Corallo  <akrl@sdf.org>
+
+       set nativecomp configure option off by default
+
+       make standard emacs compilable again
+
+       check for libgccjit lib to be reachable in configure.ac
+
+       make build system configurable again
+
+       compile each eln to a temporary one and rename it as last
+
+       rework predicates to be homogeneous
+
+       do not crash compilation trying to optimize wrong code
+
+       fix aliased function names trampoline removal
+
+       disable propagation when non locals are present
+
+       rework build system for one pass
+
+       fix nit
+
+       add batch-byte-native-compile-for-bootstrap
+
+       add customize comp-never-optimize-functions
+
+       fix non local propagation handling
+
+       move LATE_RELOCS just before VERY_LATE_RELOCS
+
+       sign and check function link table
+
+       some rework to please --enable-check-lisp-object-type
+
+       rename IMPORTED_FUNC_LINK_TABLE -> FUNC_LINK_TABLE_SYM
+
+       do not force function inlining
+
+       set disassemble buffer in read only
+
+       fix naming for predicate SUBR_NATIVE_COMPILEDP
+
+       adjust max_specpdl_size to sustain bootstrap
+
+       add native support to the build system
+
+       always fill freloc before compiling too
+
+       move late relocs after emacs relocations
+
+       never load a compilation unit without filling the func link table
+
+       add elns to the gitignore
+
+       add batch-native-compile
+
+       mitigate ifdef proliferation
+
+       some style fixes
+
+       add native elisp subr pdumper support
+
+       add native compilation unit pdumper support
+
+       add pdump relocation phases
+
+       some more pdumper integration support
+
+2020-01-01  Andrea Corallo  <akrl@sdf.org>
+
+       Revert "split out copy_file_fd"
+
+       This reverts commit 41203ad6abceb6dca39b2dab0adbd8fa711e1f89.
+
+2020-01-01  Andrea Corallo  <akrl@sdf.org>
+
+       Revert "use memory mapped file for loading elns"
+
+       This reverts commit 5e07231151ef60a5066617ef6cec7c0077825b1c.
+
+2020-01-01  Andrea Corallo  <akrl@sdf.org>
+
+       add initial native compiler pdumper support
+
+       add disassemble support for native compiled functions
+
+       add native-comp-unit-file primitive
+
+       better printing for native compilation unit
+
+       add subr-native-compilation-unit primitive
+
+       fix invalid read in fill_freloc
+
+       add support for native comp unit to type-of
+
+       rationalize load functions
+
+       clean-up unnecessary function prevent_gc
+
+       remove load_handle_stack and use the implementation one
+
+       better compilation unit definition
+
+       some rename on compilation unit struct
+
+       initial gc support
+
+       use memory mapped file for loading elns
+
+       split out copy_file_fd
+
+       introduce SUBRP_NATIVE_COMPILEDP
+
+       make dynlib_close active code
+
+       initial compilation unit as object add
+
+       add basic compilation unit into structure
+
+       better scratch slot support
+
+       fix some nits
+
+       make use of ARRAYELTS macro where possible
+
+2020-01-01  Andrea Corallo  <akrl@sdf.org>
+
+       malloc instead of static alloc into emit_ctxt_code
+
+       make it good to be reentrant
+
+2020-01-01  Andrea Corallo  <akrl@sdf.org>
+
+       fix comp--register-subr
+
+       remove advice dependency
+
+       clean-up old function relocation code
+
+       reworking relocation mechanism to use one single table
+
+       remove ifdef where unnecessary and add where they are
+
+       stringify within macro ADD_IMPORTED
+
+       use safe alloca in declare_imported_func
+
+       style nit
+
+       single function native compilation doc + interactive support + tests
+
+       add native interactive support test
+
+       add native documentation support test
+
+       native compile interactive functions support
+
+       add int-spec to comp-func
+
+       spill also interactive functions
+
+       renaming comp-decrypt-lambda-list -> comp-decrypt-arg-list
+
+       add native compiled function docstring support
+
+       let intern_c_string works creating with non-pure strings
+
+       better naming variable
+
+       documentation nit
+
+       do not emit elc file while native compiling
+
+       native-compile-async accept list as input
+
+       insert compilation end message at the bottom of the buffer
+
+       fix comp-propagate-insn type propagation
+
+       remove unnecessary return when printing blocks
+
+       gate propagate to comp-speed > 1
+
+       update limple example
+
+       fix wrong enum usage into declare_function
+
+       fix comp-log-edges
+
+       adjust print verbosity according to the doc
+
+       revert unnecessary modifications
+
+       make buffer names constant
+
+       rename native-compile-log-buffer -> comp-log-buffer-name
+
+       do not use thread for async compilation
+
+       update limple comments
+
+       better comp-byte-frame-size
+
+       fix single function top level generation
+
+       add comp-tests-free-fun
+
+       review two slot names in comp-func
+
+       better style into comp-tests-bootstrap
+
+       fix single function compilation
+
+       style fixes into comp.c
+
+       homogeneous setf style
+
+       better loop style into comp-compute-edges
+
+       sanityze orthography in comp.el
+
+       better ert usage into tests
+
+       fix type hints error kind
+
+       error handling rework
+
+       define internal-native-compiler-error as error
+
+       better error handling while loading eln files
+
+       fix symbol_subr + better naming
+
+       comment nit
+
+       fix missing goto into load_comp_unit
+
+       remove unsigned in favor of ptrdiff_t
+
+       remove native-load-history
+
+       fix comp-tests-bootstrap
+
+       fix comp-propagate*
+
+       better comp-function-call-remove
+
+       improve dead assignment
+
+       allow for pure function call removal optimization
+
+       fix jump table emission when test fn is not eq
+
+       some style nits
+
+       add comp-tests-jump-table-2-f
+
+       add comp-tests-signal
+
+       require advice when compiling or loading
+
+       make compilation too robust against advices
+
+       better error signaling while loading
+
+       Vnative_units_loaded -> Vnative_load_history
+
+       remove old eln before creating a new one to prevent crashes
+
+       message when finished compiling
+
+       style nit into load_comp_unit
+
+       add native-units-loaded
+
+       always name the compilation unit responsible for the error
+
+       do not force compiler settings within the testsuite
+
+       fix configure.ac
+
+       emit_limple_push_handler style fix
+
+       rework comp-callref lambda list
+
+       fix emit_limple_call_ref for 0 args case
+
+       add comp-tests-trampoline-removal
+
+       add comp-tests-bootstrap
+
+       fix max depth compilation
+
+       improve subr-native-elisp-p
+
+       do not compile if there's nothing to
+
+       make load mechanism robust against primitives advises
+
+       better error handling into load_comp_unit
+
+       temporary fix subr doc field to zero
+
+2020-01-01  Andrea Corallo  <akrl@sdf.org>
+
+       better configure
+
+       check for libgccjit.h file instead of the shared lib in configure
+
+2020-01-01  Andrea Corallo  <akrl@sdf.org>
+
+       fix compilation when native compiler is not enabled
+
+       do not compile automatically autoloads
+
+       cleanup unnecessary symbol definition
+
+       propagate load-path into async workers + better messaging
+
+       set intspec to NULL when creating subrs
+
+       make sure to invoke the right emacs when spawning the compiler job
+
+       chasing GNU style
+
+       better FUNCALL1 name
+
+       XFIXNUM return EMACS_INT
+
+       minimal error handling in load_comp_unit
+
+       propagate compiler settings to the async workers
+
+       add native-compile-async
+
+       remove unused variable
+
+       better doc
+
+       compile tests with debug 1
+
+       fix non local mechanism
+
+       better comp-debug customize
+
+       move speed definition into lisp code
+
+       fix two nits
+
+       fix again comp-copy-insn
+
+       fix SIGIO hang after compilation
+
+       fix comp-copy-insn for dotted pairs
+
+       simplify non local exit handler mechanism
+
+       sanity check during eln load
+
+       add pure addr relocation mechanism
+
+       add current thread missing reloc mechanism
+
+       comment unused functions
+
+       two doc nits
+
+       rework log mechanism and trim down verbosity
+
+       have propagate run the correct number of times
+
+       fix ref propagation
+
+       fix missing byte-save-restriction op
+
+       fix ref ssa propagation
+
+       add comp-tests-string-trim
+
+       do not native compile interactive functions
+
+       allow nested loadings
+
+       fix top level macro generation
+
+       add test for macro definition
+
+       test provide
+
+       fix function top_level_run generation
+
+       rework top level environment modification mechanism
+
+       rework comp-spill-lap-functions-file
+
+       add doc slot into comp-func struct
+
+       add top-level-forms slot into comp-ctxt (replace old specific defvar 
one)
+
+       limplify top level at last
+
+       rework bytecomp spill code
+
+       some code massage
+
+       native compile return the filename of the compilation unit
+
+       fix limplification for functions with more than 8 args
+
+       add a test for functions with more than 8 arguments
+
+       rework limplify to prevent block duplication
+
+       sanity check against block duplication.
+
+       fix comp-emit-narg-prologue
+
+2020-01-01  Andrea Corallo  <akrl@sdf.org>
+
+       Revert "simplify comp-limplify-block"
+
+       This reverts commit 31861f63a4b57e69cdcd247e48567242a05bd58e.
+
+2020-01-01  Andrea Corallo  <akrl@sdf.org>
+
+       fix invalid write into emit_limple_insn
+
+       fix subr name within comp-limplify-lap-inst
+
+       simplify comp-limplify-block
+
+2020-01-01  Andrea Corallo  <akrl@sdf.org>
+
+       better comp-limplify-block
+
+       do not non fall through blocks
+
+2020-01-01  Andrea Corallo  <akrl@sdf.org>
+
+       promote a couple of small functions tu subst
+
+       emit TAG number as comment
+
+       make more robust comp-emit-uncond-jump
+
+       fix comp-limplify-block for wrong cl func usage
+
+       fix compilation when modules are enabled
+
+       make non local handler bb generation robust for all order of creation
+
+       some clean-up
+
+       rework emit_limple_insn arg parsing
+
+       add fetch-handler operator
+
+       add autoload
+
+       fix limplification when TAG follow fall through eob
+
+       fix ice logging message
+
+       do not check label stack depth when this is not provided
+
+       fix missing jump into comp-emit-narg-prologue
+
+       fix comp-limplify-block when falling through a return
+
+       log a page break when start compiling
+
+       update emit-handler + rework comp-emit-cond-jump
+
+       fix initial sp value
+
+       remove comp-stack-adjust
+
+       re enable switch support
+
+       reworking comp-limplify-block
+
+       mega loop refactor
+
+       make stack depth computation robust in limplify
+
+       fix initial stack depth
+
+       add stack sanity check
+
+       fix missing fall through handling
+
+       fix label to addr computation
+
+       reworking limplify
+
+       doc fix
+
+       remove unnecessary macros into limplify pass
+
+       fix comp.el compilation warning
+
+       remove nasty nested macro usage in limplify pass
+
+       add comp-test-silly-frame2 to test funcs
+
+       clean-up commented code
+
+       fix frame size computation
+
+       add comp-test-silly-frame to tests
+
+       fix compilation of devar defconst with doc string
+
+       alist-get instead of assoc cdr
+
+       better immediate type propagation
+
+       ignore anonymous forms (they are not functions)
+
+       remove INLINE hints from comp.c
+
+       fix missing direct parameter forwarding into emit_limple_call_ref
+
+       remove unnecessary autostirng usage
+
+       regulate verbosity with comp-verbose
+
+       remove comp-debug
+
+       remove defvar that is not anymore necessary
+
+       don't crash when trying to format a very long string
+
+       always expand file name when bytecompiling
+
+       fix subr-native-elisp-p predicate name
+
+       do not force inlining for func involving ipa-pro
+
+       fix comp.el compilation
+
+       add comp-native-compiling flag
+
+       better description
+
+       initial add for compiler hits
+
+       rework comp-call-optim-form-call
+
+       add type hint to setcar setcdr
+
+       add type hint to car and cdr
+
+       add some call optimizer doc
+
+       use type propagation into add1 sub1 negate
+
+       move gcc_jit_context_dump_reproducer_to_file
+
+       fix missing direct call parsing in comp back-end
+
+       fix push handler propagation
+
+       optimize nil emission
+
+       print object in comment when emitting with emit_const_lisp_obj
+
+       clean ref slot for mvars optimized by comp-call-optim-form-call
+
+       add dead code removal pass
+
+       better note
+
+       repropagate after call-optim
+
+       floating frame in place
+
+       fix nomenclature into declare_function
+
+       clean-up pass mechanism
+
+       rework basic block entry sp emission
+
+       fix comp-new-block-sym
+
+       better comp-func doc
+
+       remove unused field into comp-func
+
+       better doc for comp-func struct
+
+       strengthening comp-compute-edges
+
+       verify to never emit insns into a closed block
+
+       better logging
+
+       rework lap spilling
+
+       better log output
+
+       add missing arguments if missing in comp-call-optim-form-call
+
+       better error signaling when compilation fails
+
+       cleanup unnecessary code and allow inlining at speed 3
+
+       add direct-call direct-callref support into the backend
+
+       extend emit_call to perform direct calls
+
+       split declaration and compilation
+
+       add direct-call direct-callref into frontend
+
+       better naming func_hash -> imported_func_h
+
+       dead code removal
+
+       guard comp-call-optim-form-call for byte compiled callee
+
+       fix compilation for comp.el
+
+       adding comp-call-optim pass
+
+       add native_elisp field into Lisp_Subr
+
+       remove comp-emit-funcall
+
+       add comp-call-optim pass
+
+       add pushhandler to clobber operators
+
+       keep on fixing ssa
+
+       rewriting ssa rename
+
+       give back basic block a C like name
+
+       fix callref parsing into C back-end
+
+       fix comp-compute-edges handling all kind of branches
+
+       add some notes
+
+       fix switch emission due to missing const prop
+
+       modify callref format to explicitate mvars
+
+       adding propagation
+
+       fix again ssa renaming
+
+       add ssa param to comp-new-frame
+
+       clean-up limplify
+
+       fix ssa renaming
+
+       remove incomplete propagation during limplification pass
+
+       add phi finalizer
+
+       add ssa renaming
+
+       core reorder
+
+       add comp-dominator-tree-walker
+
+       place phis
+
+       some code massage + doc into the SSA pass
+
+       add dominator frontiers computation
+
+       compute dominator tree
+
+       ssa and endge number generation with generator
+
+       add edge computation
+
+       rename comp-ctxt-funcs comp-ctxt-exp-funcs
+
+       rework comp-new-frame
+
+       rework basic block creation
+
+       fix missing cl- prefix in comp.el
+
+       style nit
+
+       add test for recursive calls
+
+       fix broken selfcall optimization
+
+       crank optimizations while running native compiler test suite
+
+       pacify gcc and improve sanaity checks
+
+       do not override existing basic blocks when branching backwards!
+
+       add verbosity parameter
+
+       rework log mechanism to work non interactively too
+
+       add sanity check into compile_function
+
+       some error handling in compile_function
+
+       nit into comp-log
+
+       fix pretty printing in native compilation buffer
+
+       add assertion for missing op support
+
+       fix missing specbind import
+
+       add defconst support
+
+       get right dependency during top level form evaluantion
+
+       rename comp-slot-next -> comp-slot+1
+
+       fix varset and add a test
+
+       fix single function compilation
+
+       uncomment back all tests
+
+       fix lambda handling and add a test for that
+
+       rename HAVE_LIBGCCJIT -> HAVE_NATIVE_COMP
+
+       fix build system for native compiler option
+
+       initial top level support (defvar working)
+
+       test separate compile unit
+
+       basic file compilation working
+
+       split final pass + some code rework
+
+       generalize code into comp.el for compile multiple functions
+
+2020-01-01  Andrea Corallo  <andrea_corallo@yahoo.it>
+
+       prepare for file compilation
+
+       remove unused helper functions
+
+       use nrevese where necessary
+
+       some order into special vars
+
+       emit fixnum constants as immediates
+
+       fix relocs for all inliners
+
+       update inline emitters
+
+       fix last test broken by reload
+
+       simplify condition in emit_ctxt_code
+
+       need to temporary add a load path
+
+       rename a function test to avoid name clashing
+
+       disable part of comp-tests-ffuncall
+
+       rework static object serialization
+
+       let emit_literal_string_func emit a dbg friendly friendly
+
+       add helper_unwind_protect as runtime imported
+
+       long string literal workaround
+
+       add set_internal as runtime imported
+
+       typo fixes
+
+       add record_unwind_current_buffer as imported
+
+       fix relocation emission into comp.el
+
+       add more runtime helpers
+
+       fix func reloc order emission
+
+       ignore inliners while relocating
+
+       adding runtime relocs
+
+       style fix in emit_limple_push_handler
+
+       always release context even in case of failure
+
+       better messaging when load native elisp
+
+       emit relocs for callref too
+
+       add authorship
+
+       clean-up unnecessary includes
+
+       add NATIVE_ELISP_SUFFIX def into congure.ac
+
+2020-01-01  Andrea Corallo  <andrea_corallo@yahoo.it>
+
+       Revert "Make block_atimers unblock_atimers extern"
+
+       This reverts commit 4266794ceb30ba8c3465fb8568695f53b676247d.
+
+2020-01-01  Andrea Corallo  <andrea_corallo@yahoo.it>
+
+       Revert "Move native C code into shared library"
+
+       This reverts commit 613f4156880bc6c3d56ebe0297e59f805d2a69ab.
+
+2020-01-01  Andrea Corallo  <andrea_corallo@yahoo.it>
+
+       Revert "Create bytecode.h"
+
+       This reverts commit c91954e5bb6365b72ad5654e932bc374a66fb4af.
+
+2020-01-01  Andrea Corallo  <andrea_corallo@yahoo.it>
+
+       improve reloc mechanism
+
+       reloc emission mechanism seems ok
+
+       emit function relocation into structure
+
+       some renaming
+
+       seems to emit all relocs
+
+       reloc fist simple func
+
+       emit function relocation name from comp.el
+
+       some clean-up into comp.el
+
+       add and call comp-add-subr-to-relocs
+
+       have subr name in limple
+
+       make use of data relocations
+
+       emit reloc index
+
+       prevent garbage collection
+
+       move away from modules
+
+       basic reload almost working
+
+       add funcs into comp-ctxt
+
+       remove function list form the C compiler ctxt
+
+       fixup data relocs at load time
+
+       emit relocs as text into c code
+
+       improve relocation collection
+
+       rename a bunch o f functions as private
+
+       declare comp-ctxt Vcomp_ctxt
+
+       disable const vect per function
+
+       no need to quote types into structs
+
+       render data_relocs vector
+
+       export native_compiled_emacs_lisp symbol and make it loadable.
+
+       add comp-compile-ctxt-to-file
+
+       some other renaming
+
+       optimize self calls
+
+       some renaming
+
+       code clean-up
+
+       inline setcar setcdr
+
+       fix indent_to
+
+       inline integerp
+
+       inline numberp
+
+       fix preceding-char
+
+       remove duplicate code
+
+       inline negate
+
+       inline car cdr
+
+       inline consp
+
+       inline sub1
+
+       inline add1
+
+       some renaming
+
+       some minors
+
+       improve comp-tests-ffuncall
+
+       C support for new prologue mechanism
+
+       add comp-emit-narg-prologue
+
+       fix &optional args
+
+       rework args structures
+
+       mark todos
+
+       add save-restriction support
+
+       add narrow-to-region + widen support
+
+       add record_unwind_protect_excursion support
+
+       implement log-buffer
+
+       add a test about buffer manipulation
+
+       fix bug for not blanking func_hash after context release
+
+       dipatcher support for helper_unwind_protect record_unwind_current_buffer
+
+       some fixes to unbind_n
+
+       some renaming
+
+       block hash use symbol as key
+
+       save C pointers as mint_ptr type to avoid corruption
+
+       improve routine dispatcher
+
+       change emit_limple_call_ref arg convention
+
+       add routine dispatcher
+
+       fix hash table weakness
+
+       add record_unwind_current_buffer helper_unwind_protect support
+
+       pthread_sigmask instead of unblock_atimers
+
+       clean-up unnecessary declarations
+
+       rework tests
+
+       fix gcc interruption
+
+       fix max_args
+
+       add tromeys tests
+
+       insert page breaks
+
+       add incoming &rest arg support
+
+       add incoming &optional args support
+
+       fix comp-limplify-listn
+
+       add limple switch support
+
+       better make-comp-mvar
+
+       catch works
+
+       pushconditioncase working
+
+       separate basic blocks
+
+       separate code
+
+       rework arg parsing on the C side
+
+       adding non locals
+
+       bubble sort works again
+
+       fix comp-emit-cond-jump
+
+       fix goto
+
+       stackset
+
+       uncomment test
+
+       ops
+
+       uncommenting some test
+
+       Add other ops
+
+       adding ops
+
+       improve comp-op-case again
+
+       add a bunch of ops
+
+       improve comp-op-case
+
+       uncommenting some tests
+
+       better generated code
+
+       adding some ops
+
+       rework comp.el
+
+       fix goto
+
+       add comp-emit-set-call-subr macro
+
+       byte-varbind byte-unbind
+
+       improve comp-c-func-name
+
+       some code massage
+
+       conditionals working
+
+       rename comp-limple-frame comp-limplify
+
+       block to hash
+
+       adding conditionals
+
+       basic funcall
+
+       concat support
+
+       comp-op-case in place plus other rework
+
+       reworking comp.el
+
+       symbol-value +1 test
+
+       add discard aref aset
+
+       let limple support calls with no assignment
+
+       varset support 5 test passing
+
+       some consistency rework one test +
+
+       simplify limple instruction set
+
+       call ref works
+
+       improve function name translation
+
+       fix list
+
+       function name as annotation
+
+       two test passing
+
+       parameter passing works again
+
+       rename entry block
+
+       rework hashtable usage
+
+       proper return in place
+
+       simple call support
+
+       fix function name
+
+       update tests
+
+       wipe out propagation info every new basic block
+
+       introduce FUNCALL1 macro
+
+       first functional function
+
+       basic blocks into C
+
+       block list in limple
+
+       start compilation C side
+
+       comment out unused functions
+
+       add comp-c-func-name
+
+       calling C
+
+       purge C side
+
+       working on
+
+       move out comp-limplify-listn
+
+       clean all crazy macrology in favor of some special var
+
+       add SSA
+
+       some code for const propagation
+
+       add lists car and cdr
+
+       working on
+
+       first limple
+
+       working on comp.el
+
+       spill lap
+
+       add comp.el
+
+       fix jump table
+
+       jump table support
+
+       optimize outgoing native manyarg calls
+
+       rework COMP_DEBUG strategy
+
+       basic &rest working
+
+       add emit_ptr_arithmetic
+
+       extend cast capabilities
+
+       add &rest description
+
+       introduce parsearg
+
+       introduce MAX_POP
+
+       add comp-tests-ffuncall-lambda-f test
+
+       fix native call to MANY func
+
+       fix missing bubble sort test
+
+       add primitive call test
+
+       add emit_assign_to_stack_slot
+
+       optimize primitive native call
+
+       propagate contant types and optimize self calls
+
+       introduce stack_el_t
+
+       pass orig lisp f name into compile_f
+
+       rework emit_cond_jump
+
+       inline setcdr support
+
+       fix setcar
+
+       reworking blocks
+
+       emit comments for inlined functions
+
+       add setcar
+
+       homogeneous emit names
+
+       add define_CHECK_IMPURE
+
+       make use of gcc_jit_context_get_int_type
+
+       adding more types
+
+       rework emit_call_n_ref
+
+       add uintptr_type
+
+       add define_check_type
+
+       inline cdr
+
+       split XCAR
+
+       add car cdr tests
+
+       full inline car
+
+       fix XUNTAG
+
+       add emit_EQ
+
+       add emit_NILP
+
+       add emit_rval_XCONS
+
+       better emit_cast
+
+       define cast union into dedicated function
+
+       reindent define_thread_state_struct
+
+       add XUNTAG
+
+       add char * type support
+
+       better options
+
+       add cons definition
+
+       CASE_CALL_NARGS -> CASE_CALL_N
+
+       remove scratch call mechanism
+
+       locals to array
+
+       bblock -> block
+
+       add format_string
+
+       postfix struct with _s
+
+       add discard macro
+
+       set target stacks for safety
+
+       fix struct thread_state definition
+
+       fix awful pad hack in define_handler_struct
+
+       add non locals tests
+
+       jmp_buf as struct + offset workaround
+
+       fix pushhandler
+
+       dump all ops as comments
+
+       pushhandler
+
+       better emit_lisp_obj_from_ptr
+
+       better logging into emit_scratch_callN
+
+       imrpve macros
+
+       rework debug dump
+
+       name basic blocks
+
+       adding Bpushconditioncase Bpushcatch
+
+       more type definitions
+
+       better macro usage
+
+       use emacs_int
+
+       some renaming convention
+
+       Bcar_safe Bcdr_safe support
+
+       Bstack_set2 support
+
+       Binsert support
+
+       BdiscardN support
+
+       Bnumberp support
+
+       fix consp
+
+       Bintegerp support
+
+       add emit_INTEGERP
+
+       add emit_BIGNUMP
+
+       emit_call funcs return now rval
+
+       helper_PSEUDOVECTOR_TYPEP -> helper_PSEUDOVECTOR_TYPEP_XUNTAG
+
+       fix intern_c_string_1
+
+       better naming ocnvention
+
+       add declare_PSEUDOVECTORP
+
+       XLP XLI l and r values
+
+       rename comp_lisp_obj_from_ptr
+
+       reset compiler context for everi run
+
+       make some order into debug facilities
+
+       add comp_VECTORLIKEP
+
+       adding other ops
+
+       inline consp
+
+       add comp_TAGGEDP
+
+       add bubble sort into to tests
+
+       fix prologue strategy
+
+       improve comp_lisp_obj_as_ptr_from_ptr generated var naming
+
+       add Bstack_set
+
+       add setcar setcdr
+
+       add arithmetic comparisons
+
+       add Bnegate support
+
+       code cleanup
+
+       add Badd1 support
+
+       allow + in lisp functions to be compiled
+
+       add speed parameter
+
+       add sub1
+
+       generate reproducer if needed
+
+       add comp_xfixnum + comp_make_fixnum
+
+       fix uninitialized read
+
+       adding sub1
+
+       remame compiler functions
+
+       move to lispobj as union
+
+       add some new constant
+
+       better errors
+
+       add relative branch ops
+
+       adding conditionals
+
+       add bb computation
+
+       generalize bblocks
+
+       add stuffs
+
+       naming change
+
+       adding more stuffs
+
+       better error msg
+
+       adding stuffs
+
+       precompute nil
+
+       some more ops
+
+       move return into the right place
+
+       replace printfs with proper errors for non supported ops
+
+       add some more ops
+
+       add concat
+
+       store ffuncall with all other functions
+
+       add jit_emit_callN
+
+       rationalize jit_emit_Ffuncall
+
+       some more ops
+
+2020-01-01  Andrea Corallo  <andrea_corallo@yahoo.it>
+
+       introduce CASE_CALL_NARGS macro and add various ops
+
+       symbol_function set fset fget fget Bsubstring
+
+2020-01-01  Andrea Corallo  <andrea_corallo@yahoo.it>
+
+       add symbol-value
+
+       add aset
+
+       add discard and dup
+
+       Baref
+
+       add Blength
+
+       add void ptr
+
+       generalize lisp call ret type
+
+       add Bunbind
+
+       rename type
+
+       add funcall
+
+       add varbind support
+
+       Add native compiler comp.c
+
+       Make block_atimers unblock_atimers extern
+
+2020-01-01  Tom Tromey  <tom@tromey.com>
+
+       Create bytecode.h
+
+       * src/bytecode.h: New file.
+       * src/bytecode.c: Move bytecode definitions to bytecode.h.
+
+2020-01-01  Andrea Corallo  <andrea_corallo@yahoo.it>
+
+       Add nativecomp option to configure
+
+       Move native C code into shared library
+
+2020-01-01  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Assume C99-style ‘long long’
+
+       Now that Gnulib assumes ‘long long’, it is a good time to clean
+       out old cruft porting to pre-C99 compilers that lack it.
+       * src/data.c (ULL_WIDTH, ULL_MAX): Remove.
+       All uses replaced by ULLONG_WIDTH, ULLONG_MAX.
+       (bits_word_to_host_endian): Assume ‘unsigned long long’.
+       By the way, the old code had a performance typo: it used
+       HAVE_UNSIGNED_LONG_LONG where it should have used
+       HAVE_UNSIGNED_LONG_LONG_INT.
+       * src/sysdep.c (ULLONG_MAX): Remove, as lib/limits.h does this now.
+       (time_from_jiffies) [GNU_LINUX]: Assume ‘long long’.
+
+2020-01-01  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Remove files no longer needed from Gnulib
+
+       * m4/count-leading-zeros.m4, m4/count-one-bits.m4:
+       * m4/count-trailing-zeros.m4, m4/longlong.m4:
+       Remove.
+
+2020-01-01  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * etc/NEWS: Update copyright year.
+
+2020-01-01  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Update from gnulib
+
+       This incorporates:
+       2019-12-23 mktime, nstrftime: tweak division performance
+       2019-12-22 count-leading-zeros: assume 'long long'
+       2019-12-22 count-one-bits: assume 'long long'
+       2019-12-22 count-trailing-zeros: assume 'long long'
+       2019-12-12 inttypes-incomplete: assume 'long long'
+       2019-12-22 malloca: assume 'long long'
+       2019-12-22 stdint: assume 'long long'
+       2019-12-22 strtoll, strtoimax, strtoumax: assume 'long long'
+       2019-12-22 prefer lib_SOURCES to unconditional AC_LIBOBJ
+       2019-12-19 nstrftime: avoid a shadowing warning
+       2019-12-18 improve port of AC_C_RESTRICT to Oracle C++
+       2019-12-12 stdalign: port to xlclang 16.01
+       2019-12-11 stddef, unistd: fix compilation error in C++ mode on MSVC
+       2019-12-08 fix compilation errors in C++ mode on Haiku
+       2019-12-08 fix compilation errors in 32-bit C++ mode on HP-UX 11/ia64
+       2019-12-08 fix compilation error in C++ mode on OpenBSD
+       * build-aux/config.guess, doc/misc/texinfo.tex:
+       * lib/count-leading-zeros.h, lib/count-one-bits.h:
+       * lib/count-trailing-zeros.h, lib/inttypes.in.h, lib/malloca.h:
+       * lib/mktime.c, lib/nstrftime.c, lib/signal.in.h, lib/stdalign.in.h:
+       * lib/stddef.in.h, lib/stdint.in.h, lib/stdio.in.h, lib/stdlib.in.h:
+       * lib/strtoimax.c, lib/unistd.in.h, m4/gnulib-common.m4:
+       * m4/inttypes.m4, m4/largefile.m4, m4/malloca.m4, m4/strtoimax.m4:
+       * m4/strtoll.m4:
+       Copy from Gnulib.  Also, change copyright notices in some other
+       Gnulib-copied files to exactly match Gnulib, as Gnulib updated
+       them in a trivially different way.
+       * lib/gnulib.mk.in, m4/gnulib-comp.m4: Regenerate.
+
+2020-01-01  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Merge from origin/emacs-27
+
+       186152ba40 Pacify gcc -Wunused-function on Ubuntu 18.04.3
+       4cd143aded Fix copyright years by hand
+       365e01cc9f Update copyright year to 2020
+       cd2c156163 ; * etc/NEWS: Make the description of XDG fallback more ac...
+
+       # Conflicts:
+       #       etc/NEWS
+       #       etc/refcards/ru-refcard.tex
+
+2019-12-31  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       9b6872b4e4 ; * test/lisp/calc/calc-tests.el: Fix warnings
+       957cdca6f0 Make minibuffer-tests work in out-of-tree builds (bug#38816)
+       2065316749 Make comint-tests more robust (bug#38813)
+
+2019-12-31  Glenn Morris  <rgm@gnu.org>
+
+       * admin/gitmerge.el (gitmerge-skip-regexp): Be more restrictive.
+
+2019-12-30  Michael Albinus  <michael.albinus@gmx.de>
+
+       Sync with Tramp 2.4.3
+
+       * doc/misc/trampver.texi:
+       * lisp/net/trampver.el: Change version to "2.4.3".
+
+       * lisp/net/tramp.el: Bump version.
+       (tramp-handle-shell-command): The temp file for error-buffer is remote.
+
+       * test/lisp/net/tramp-tests.el (tramp-test30-make-process):
+       Simplify buffer generation.
+       (tramp-test32-shell-command): Extend test.
+
+       (cherry picked from commit d6922db49dea33ac2bca8b33d24763cc7b2e4cd7)
+
+2019-12-30  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       59f71d20ea (origin/emacs-27) Fix tar-mode reading the oldgnu Tar format
+       e3ec84fd7d Ensure mini-window is resized to show active minibuffer co...
+       450633f85a Fix mini-window resizing under resize-mini-windows = t
+       219d47893a (emacs-27) Fixes for makeinfo 4.13
+       4bbfd2b42f ; fix previous NEWS entry
+       81b697d106 Fix crash under -nw on macOS properly this time
+       9ce4207969 Revert "Check for GUI frame in ns_color_index_to_rgba"
+       732dcfc850 Ignore all color fonts when using XFT
+       aa0c679f48 Avoid unbounded growth of cl-random-state components (bug#...
+
+       # Conflicts:
+       #       etc/NEWS
+       #       src/nsterm.m
+
+2019-12-30  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       70fe552c61 ; xref-references-in-directory: Autoload as well
+       181f571651 Fix up requires
+       43f66c3368 Extract xref-matches-in-files from project--find-regexp-in...
+       65af18d86e Rename xref-collect-references and xref-collect-matches
+       98788bf976 ; Improve the docstring some more
+       c190e91a1e Improve docstrings
+       012c12a05e Fix when expose draws partially visible first glyph (bug#3...
+       d915b8c3f1 Don't require semantic/fw
+       50a0126402 Do some renames for clarity
+       74261ff301 Rearrange NEWS, add missing documentation
+       6c9571379e Fix interactive spec in netrc-parse
+       32222fb34c Fix documentation of define-obsolete-* functions
+
+       # Conflicts:
+       #       etc/NEWS
+
+2019-12-30  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       8224ed7d40 (xref--find-buffer-visiting): Speed up by using get-file-b...
+
+2019-12-28  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix recent gnus-start.el breakage
+
+       * lisp/gnus/gnus-start.el (gnus-group-change-level): Fix previous
+       patch that made info nil when adding new groups (thereby making
+       gnus-newsrc-alist invalid).
+
+       (cherry picked from commit 3434ac67b9ec6b1d19f1c5ebb7d23b0b62dadac9)
+
+2019-12-27  Richard Stallman  <rms@gnu.org>
+
+       Display a help text when listing EPA keys
+
+       * lisp/epa.el (epa--list-keys, epa-list-keys): Display a help text
+       that explains what the letters mean.
+
+2019-12-27  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       3f2788d4ac (origin/emacs-27) project--vc-list-files: Recurse into sub...
+       f0da3aa83e Merge branch 'emacs-27' of git.savannah.gnu.org:/srv/git/e...
+       3b199614cc Minor improvements of buffer documentation
+       e1e0a7a751 xref--collect-matches: Speed up on remote
+       219b91eb2c ; project--find-regexp-in-files: Avoid prepending remote-i...
+
+2019-12-27  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       8aad80d661 Fix installer build
+       47a73e3e14 Update Windows build documentation
+       cd55984153 Calc: add missing dynamic variable declarations
+       e8aa6f19e9 * doc/emacs/buffers.texi (Kill Buffer): Improve indexing.
+       ccd7cd2c51 Speed up dired-do-find-regexp
+       7edb1f0773 ; Remove outdated declarations
+       6ab40c1a51 ; Clarify the assumption
+       be38e39fcc project--find-regexp-in-files: Support remote files
+       21c3020fce Document some restrictions for module functions.
+       e1ce9f3423 Don't recommend using 'module-load' for loading modules.
+       03f962a486 Port x_get_monitor_attributes_fallback to !HAVE_GTK3
+       0b32f59764 Fix compilation warning in gnus-start.el
+
+2019-12-27  Mattias Engdegård  <mattiase@acm.org>
+
+       Deduplicate non-fixnum numeric constants in byte-compilation
+
+       * lisp/emacs-lisp/bytecomp.el (byte-compile-get-constant):
+       Use eql for looking up constants instead of eq, allowing
+       for bignum and flonum deduplication (bug#38708).
+
+2019-12-27  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix error message about recursive use of minibuffer
+
+       * src/minibuf.c (read_minibuf): Fix formatting of an error
+       message.  Reported by martin rudalics <rudalics@gmx.at>.
+
+2019-12-26  Phillip Lord  <phillip.lord@russet.org.uk>
+
+       Update for Emacs-28
+
+       * admin/nt/dist-build/build-dep-zips.py: Emacs major version number.
+
+2019-12-26  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Fix bogus test in body of a while loop
+
+       * lisp/gnus/nnheader.el (nnheader-find-nov-line): Fix return value
+       from while loop.
+
+2019-12-26  Mattias Engdegård  <mattiase@acm.org>
+
+       * lisp/net/ldap.el (ldap-search-internal): Add missing setq.
+
+2019-12-26  Mattias Engdegård  <mattiase@acm.org>
+
+       Optimise 'while' bodies for effect
+
+       * lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker):
+       Treat all expressions in the body of 'while' as for-effect,
+       since their values are discarded.  This also finds some errors.
+
+2019-12-26  Mattias Engdegård  <mattiase@acm.org>
+
+       Use regexp type for regexps in defcustom declarations
+
+       * lisp/calendar/diary-lib.el (diary-face-attrs):
+       * lisp/cedet/semantic/db-ebrowse.el (semanticdb-ebrowse-file-match):
+       * lisp/cedet/srecode/document.el
+       (srecode-document-autocomment-common-nouns-abbrevs)
+       (srecode-document-autocomment-function-alist)
+       (srecode-document-autocomment-return-first-alist)
+       (srecode-document-autocomment-return-last-alist)
+       (srecode-document-autocomment-param-alist)
+       (srecode-document-autocomment-param-type-alist):
+       * lisp/desktop.el (desktop-clear-preserve-buffers):
+       * lisp/elide-head.el (elide-head-headers-to-hide):
+       * lisp/erc/erc-backend.el (erc-encoding-coding-alist):
+       * lisp/erc/erc-ezbounce.el (erc-ezb-regexp):
+       * lisp/files.el (auto-save-file-name-transforms):
+       * lisp/gnus/deuglify.el (gnus-outlook-deuglify-attrib-cut-regexp)
+       (gnus-outlook-deuglify-attrib-verb-regexp)
+       (gnus-outlook-deuglify-attrib-end-regexp):
+       * lisp/gnus/gnus-fun.el (gnus-x-face-omit-files, gnus-face-omit-files):
+       * lisp/gnus/spam.el (spam-spamassassin-positive-spam-flag-header):
+       * lisp/htmlfontify.el (hfy-src-doc-link-unstyle):
+       * lisp/info-look.el (info-lookup-file-name-alist):
+       * lisp/international/rfc1843.el (rfc1843-newsgroups-regexp):
+       * lisp/mail/feedmail.el (feedmail-queue-slug-suspect-regexp):
+       * lisp/mail/rmail-spam-filter.el (rsf-white-list, 
rsf-definitions-alist):
+       * lisp/man.el (Man-name-local-regexp):
+       * lisp/net/ange-ftp.el (ange-ftp-dumb-unix-host-regexp):
+       * lisp/net/newst-backend.el (newsticker-auto-mark-filter-list):
+       * lisp/net/rcirc.el (rcirc-authinfo, rcirc-coding-system-alist):
+       * lisp/net/tramp-adb.el (tramp-adb-prompt):
+       * lisp/org/org-agenda.el (org-agenda-hide-tags-regexp)
+       (org-agenda-category-icon-alist):
+       * lisp/org/org-protocol.el (org-protocol-data-separator):
+       * lisp/org/org-table.el (org-table-number-regexp):
+       * lisp/org/ox-latex.el (org-latex-known-warnings):
+       * lisp/progmodes/bug-reference.el (bug-reference-bug-regexp):
+       * lisp/progmodes/hideif.el (hide-ifdef-header-regexp):
+       * lisp/progmodes/idlw-help.el (idlwave-help-doclib-name)
+       (idlwave-help-doclib-keyword):
+       * lisp/progmodes/idlwave.el (idlwave-no-change-comment):
+       * lisp/progmodes/python.el (python-shell-prompt-input-regexps)
+       (python-shell-prompt-output-regexps, python-shell-prompt-regexp)
+       (python-shell-prompt-block-regexp, python-shell-prompt-output-regexp)
+       (python-shell-prompt-pdb-regexp, python-shell-compilation-regexp-alist)
+       (python-pdbtrack-stacktrace-info-regexp):
+       * lisp/progmodes/sql.el (sql-send-terminator, 
sql-ansi-statement-starters):
+       * lisp/speedbar.el (speedbar-directory-unshown-regexp)
+       (speedbar-file-unshown-regexp):
+       * lisp/textmodes/flyspell.el (flyspell-mark-duplications-exceptions)
+       (flyspell-tex-command-regexp):
+       * lisp/textmodes/paragraphs.el (sentence-end-base):
+       * lisp/textmodes/tildify.el (tildify-pattern, tildify-space-pattern):
+       * lisp/vc/ediff-init.el (ediff-metachars):
+       * lisp/vc/vc-git.el (vc-git-root-log-format):
+       * lisp/vc/vc-hg.el (vc-hg-root-log-format):
+       * lisp/whitespace.el (whitespace-indentation-regexp)
+       (whitespace-space-after-tab-regexp):
+       * lisp/woman.el (woman-manpath-man-regexp)
+       (woman-imenu-generic-expression):
+       Use 'regexp' instead of 'string' as type for values that are regexps
+       in defcustom declarations.
+
+2019-12-26  Philipp Stephani  <phst@google.com>
+
+       Simplify an example in the modules manual
+
+       * doc/lispref/internals.texi (Module Misc): Simplify example for how
+       to call 'intern'.  There's no need to pass the optional argument
+       explicitly.
+
+2019-12-26  Philipp Stephani  <phst@google.com>
+
+       Promote function type aliases to the public module API.
+
+       Previously module authors had to define type aliases for module
+       functions and finalizers themselves.  This commit adds and documents
+       aliases so that this is no longer necessary.
+
+       * src/emacs-module.h.in: Add 'emacs_function' and 'emacs_finalizer'
+       type aliases.
+
+       * src/emacs-module.c: Remove old 'emacs_subr' and 'emacs_finalizer'
+       type aliases.
+       (struct Lisp_Module_Function, module_make_function): Switch from
+       'emacs_subr' to 'emacs_function'.
+
+       * doc/lispref/internals.texi (Module Functions): Document and use
+       'emacs_function' type alias.
+       (Module Values): Document 'emacs_finalizer' type alias.
+
+       * etc/NEWS: Mention change.
+
+2019-12-25  João Távora  <joaotavora@gmail.com>
+
+       Don't always resort in recently introduced icomplete--sorted-completions
+
+       Doing so breaks icomplete-forward-completions and
+       icomplete-backward-completions.
+
+       * lisp/icomplete.el (icomplete--sorted-completions): Don't always
+       resort.
+
+2019-12-25  João Távora  <joaotavora@gmail.com>
+
+       Don't force completion recalculation in icomplete-fido-ret
+
+       Besides the adverse effect of delaying completions, it tripped up the
+       useful logic of icomplete-force-complete-and-exit in the case where a
+       default was available, but no completions calculated yet.
+
+       * lisp/icomplete.el (icomplete-fido-ret): Don't force calculation
+       of completions.
+
+2019-12-25  João Távora  <joaotavora@gmail.com>
+
+       Correctly cache sorted completions in icomplete--sorted-completions
+
+       * lisp/icomplete.el (icomplete--sorted-completions): Use
+       completion--cache-all-sorted-completions.
+
+2019-12-25  Philipp Stephani  <phst@google.com>
+
+       * .gitignore: Ignore .dylib files (shared libraries on macOS)
+
+2019-12-25  Philipp Stephani  <phst@google.com>
+
+       Add some documentation for support of .dylib suffix on macOS
+
+       * doc/lispref/loading.texi (Dynamic Modules):
+       * etc/NEWS: Document that dynamic module files on macOS can now have
+       the suffix .dylib.
+
+2019-12-25  Lars Ingebrigtsen  <larsi@gnus.org>
+
+       Don't bind XEmacs-only variable in edebug
+
+       * lisp/emacs-lisp/edebug.el (edebug-safe-prin1-to-string): Remove
+       binding of XEmacs-only variable print-readably.
+
+2019-12-25  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       91c16acbe2 (origin/emacs-27) Improve doc string of 'files--message'
+       c3be58a8f5 (emacs-27) Improve vc--add-line, vc--remove-regexp
+       9ea9ac9a61 Apply the 'xref-group' property properly
+
+2019-12-25  Glenn Morris  <rgm@gnu.org>
+
+       Merge from origin/emacs-27
+
+       ca6a53d3bc Don't default to showing X-Faces externally in Gnus
+       dbf4b5b2d0 Fix manual typo in Special Read Syntax
+       a9fe6dfa90 Fix problem with emacs -nw / eww / svg
+       0de63092c8 Clarify base64 requirements and say what {en,de}code_codin...
+       6184aa003f ; * etc/NEWS: Fix boring oddities.
+       51ea32dd12 * src/emacs-module.h.in: Add reference to manual.
+       75d0cef20d Trivial docstring fixes
+       ee12c421b6 imagemagick-types needs to initialize ImageMagick
+
+       # Conflicts:
+       #       etc/NEWS
+
+2019-12-25  Philipp Stephani  <phst@google.com>
+
+       Support .dylib suffix for modules on macOS (Bug#36226).
+
+       On macOS, shared libraries typically have the suffix .dylib.  This
+       commit switches the module suffix to .dylib on Darwin to account for
+       that.  To also support the .so suffix, introduce the concept of a
+       secondary module suffix.
+
+       * configure.ac: Switch MODULES_SUFFIX to .dylib for Darwin, introduce
+       MODULES_SECONDARY_SUFFIX.
+
+       * src/lread.c (Fload, syms_of_lread): Also use
+       MODULES_SECONDARY_SUFFIX if defined.
+
+       * test/src/emacs-module-tests.el (module-darwin-secondary-suffix): New
+       unit test.
+
+2019-12-24  Federico Tedin  <federicotedin@gmail.com>
+
+       Make goto-line keep a separate input history per buffer
+
+       * lisp/simple.el (goto-line-history): New history variable.
+       (goto-line): Use new (buffer-local) variable as input
+       history (Bug#38282).
+       * lisp/subr.el (read-number-history): New history variable.
+       (read-number): Use the new variable as default input history.
+       * doc/lispref/minibuf.texi (Minibuffer History): Document
+       read-number-history and goto-line-history variables.
+       * etc/NEWS: Announce changes.
+
+2019-12-24  João Távora  <joaotavora@gmail.com>
+
+       Move flex style's minibuffer-default-aware sorting to lisp/icomplete.el
+
+       This moves the logic from the series of commits starting in the commit 
named:
+
+         Improve sorting of flex completion style with non-nil 
minibuffer-default
+
+       to lisp/icomplete.el, so far the only confirmed beneficiary of that
+       functionality.
+
+       * lisp/icomplete.el (icomplete--sorted-completions): Consider
+       minibuffer-default here.
+
+       * lisp/minibuffer.el (completion--flex-adjust-metadata): Simplify.
+
+2019-12-24  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * src/minibuf.c (read_minibuf): Use `user-error`
+
+2019-12-24  Juanma Barranquero  <lekktu@gmail.com>
+
+       Don't use `let*' with just one binding
+
+       * lisp/registry.el (registry-reindex):
+       * lisp/emacs-lisp/generator.el (cps--add-state):
+       Use `let', not `let*'.
+
+2019-12-24  Philipp Stephani  <phst@google.com>
+
+       Prepare module header generation for Emacs 28.
+
+       * configure.ac: Substitute environment function snippet for Emacs 28.
+
+       * src/module-env-28.h: New file, with dummy contents for now.
+
+       * src/emacs-module.h.in: Provide emacs_env_28 structure.
+
+2019-12-24  Philipp Stephani  <phst@google.com>
+
+       * src/emacs-module.h.in: Use @emacs_major_version@ for current env.
+
+2019-12-24  João Távora  <joaotavora@gmail.com>
+
+       Make fido-mode behave more like ido-mode when finding directories
+
+       Notably C-x d (M-x dired) and C-x v d (M-x vc-dir) behaved quite
+       differently, having regular files as the default instead of ido's
+       usual "./".
+
+       * lisp/icomplete.el (icomplete--sorted-completions): New helper.
+       (icomplete-completions): Use it.
+
+2019-12-24  João Távora  <joaotavora@gmail.com>
+
+       Slightly simplify lisp/icomplete.el with new icomplete--category helper
+
+       * lisp/icomplete.el (icomplete-fido-kill)
+       (icomplete-fido-delete-char, icomplete-fido-ret)
+       (icomplete-fido-backward-updir, icomplete-exhibit): Use
+       icomplete--category.
+       (icomplete--category): New helper.
+
+2019-12-24  João Távora  <joaotavora@gmail.com>
+
+       Another adjustment to flex completion style's sorting function
+
+       * lisp/minibuffer.el (completion--flex-adjust-metadata): Adjust
+       case when minibuffer-default is non-nil.
+
+2019-12-23  Philipp Stephani  <phst@google.com>
+
+       * src/pdumper.c (Fdump_emacs_portable): Reword error message.
+
+2019-12-23  Philipp Stephani  <phst@google.com>
+
+       Remove some undefined behavior related to left shifts.
+
+       Found by UBSan.
+
+       * src/nsfns.m (ns_set_foreground_color, ns_set_background_color):
+       * src/nsimage.m (getPixelAtX:Y:):
+       * src/nsterm.m (ns_color_index_to_rgba): Add explicit casts to avoid
+       undefined behavior when left-shifting beyond the bounds of the int
+       type.
+
+       * src/macfont.m (METRICS_VALUE): Add explicit casts to avoid undefined
+       behavior when left-shifting a negative value.
+
+2019-12-23  Stephen Gildea  <stepheng+emacs@gildea.com>
+
+       Further expand coverage of unit tests for time-stamp
+
+       * test/lisp/time-stamp-tests.el (time-stamp-custom-format-tabs-expand,
+       time-stamp-custom-end, time-stamp-helper-string-defaults): New tests.
+       (time-stamp-custom-count): Test 0 case.
+       (time-stamp-format-non-date-conversions): Test different system values.
+
+       Development of these new tests was guided by the "testcover" library.
+
+2019-12-23  Philipp Stephani  <phst@google.com>
+
+       Don’t allow portable dumping in interactive mode (Bug#38453).
+
+       * src/pdumper.c (Fdump_emacs_portable): Don’t allow dumping in
+       interactive mode.
+
+2019-12-23  Philipp Stephani  <phst@google.com>
+
+       Make argument names in module interface more consistent.
+
+       Previously, the names of arguments and other details were needlessly
+       inconsistent between the documentation, the declarations, and the
+       definitions, as well as between each other.  This commit makes them
+       more consistent, in most cases by applying the names from the
+       documentation everywhere.
+
+       * src/module-env-27.h:
+       * src/module-env-25.h:
+       * src/emacs-module.h.in:
+       * src/emacs-module.c (module_get_environment)
+       (module_make_global_ref, module_free_global_ref)
+       (module_non_local_exit_get, module_non_local_exit_signal)
+       (module_make_function, module_funcall, module_type_of)
+       (module_is_not_nil, module_extract_integer)
+       (module_extract_float, module_copy_string_contents)
+       (module_make_string, module_vec_set, module_vec_get)
+       (module_vec_size, module_extract_time)
+       (module_assert_runtime):
+       * doc/lispref/internals.texi (Module Initialization)
+       (Module Functions, Module Values): Make argument names and some other
+       details consistent.  No functional changes.
+
+2019-12-23  Eli Zaretskii  <eliz@gnu.org>
+
+       Bump Emacs version to 28.0.50
+
+       * README:
+       * configure.ac:
+       * nt/README.W32:
+       * msdos/sed2v2.inp:
+       * src/msdos.c (internal_terminal_init):
+       * etc/refcards/ru-refcard.tex: Bump Emacs version to 28.0.50.
+
+       * lisp/cus-edit.el (customize-changed-options-previous-release):
+       Bump up the value to 26.3.
+
+       * etc/NEWS.27: Renamed from NEWS.
+       * etc/NEWS: New file for Emacs 28.
+
 2021-03-25  Eli Zaretskii  <eliz@gnu.org>
 
        * Version 27.2 released.
@@ -392,10 +89626,10 @@
 
        Bump Emacs version to 27.1.91
 
-               * README:
-               * configure.ac:
-               * nt/README.W32:
-               * msdos/sed2v2.inp: Bump Emacs version to 27.1.91.
+       * README:
+       * configure.ac:
+       * nt/README.W32:
+       * msdos/sed2v2.inp: Bump Emacs version to 27.1.91.
 
 2021-02-03  Eli Zaretskii  <eliz@gnu.org>
 
@@ -1691,13 +90925,11 @@
 
 2021-02-03  Michael R. Mauger  <michael@mauger.com>
 
-       2020-03-29  Michael R. Mauger  <michael@mauger.com>
-
-              * lisp/progmodes/sql.el (sql-add-product): Re-correct argument
-              spec.  Previous change was due to my mistake; I have
-              resolved back to the prior behavior (Bug#39960).
-              * test/lisp/progmodes/sql-tests.el (sql-test-add-product): Added
-              test to insure I don't make the same mistake again.
+       * lisp/progmodes/sql.el (sql-add-product): Re-correct argument
+       spec.  Previous change was due to my mistake; I have
+       resolved back to the prior behavior (Bug#39960).
+       * test/lisp/progmodes/sql-tests.el (sql-test-add-product): Added
+       test to insure I don't make the same mistake again.
 
 2021-02-03  Lars Ingebrigtsen  <larsi@gnus.org>
 
@@ -9902,8 +99134,6 @@
 
 2019-11-26  Martin Rudalics  <rudalics@gmx.at>
 
-       2019-11-26  Martin Rudalics  <rudalics@gmx.at>
-
        * lisp/window.el (switch-to-visible-buffer): Declare obsolete.
        (switch-to-prev-buffer-skip): New option.
        (switch-to-prev-buffer, switch-to-next-buffer): Obey
@@ -31144,10 +120374,10 @@
        * lisp/textmodes/table.el (table-source-languages): Add support
        for wiki and mediawiki tables (bug#13287).
 
-       2019-06-27  Lars Ingebrigtsen  <larsi@gnus.org>
+2019-06-27  Lars Ingebrigtsen  <larsi@gnus.org>
 
-               * doc/emacs/text.texi (Table Misc): Mention the new wiki and
-               mediawiki formats.
+       * doc/emacs/text.texi (Table Misc): Mention the new wiki and
+       mediawiki formats.
 
 2019-06-27  Wilfred Hughes  <me@wilfred.me.uk>
 
@@ -31633,16 +120863,16 @@
 
        Add a new command to report the number and size of the marked files
 
-       2019-06-25  Constantino Calancha  <f92capac@gmail.com>
+2019-06-25  Constantino Calancha  <f92capac@gmail.com>
 
-               * lisp/dired.el (dired-mode-map): New keystroke and menu binding
-               (bug#22829).
+       * lisp/dired.el (dired-mode-map): New keystroke and menu binding
+       (bug#22829).
 
-       2019-06-25  Lars Ingebrigtsen  <larsi@gnus.org>
+2019-06-25  Lars Ingebrigtsen  <larsi@gnus.org>
 
-               * doc/emacs/dired.texi (Marks vs Flags): Document it.
+       * doc/emacs/dired.texi (Marks vs Flags): Document it.
 
-               * lisp/dired.el (dired-number-of-marked-files): New command.
+       * lisp/dired.el (dired-number-of-marked-files): New command.
 
 2019-06-25  Phil Sainty  <psainty@orcon.net.nz>
 
@@ -36913,7 +126143,7 @@
        Copy from Gnulib
        * m4/gnulib-comp.m4: Regenerate.
 
-       2019-05-26  Paul Eggert  <eggert@cs.ucla.edu>
+2019-05-26  Paul Eggert  <eggert@cs.ucla.edu>
 
        Update author/maintainer info
        This mostly updates email addresses and fixes spellings of
@@ -41572,6 +130802,7 @@
        to pacify LeakSanitizer.
 
 2019-04-20  Michael R. Mauger  <michael@mauger.com>
+
        Fix Bug#35307.
 
        * lisp/progmodes/sql.el(sql-product-alist): Added
@@ -41581,6 +130812,7 @@
        adjustments needed for Emacs to support it.
 
 2019-04-20  Michael R. Mauger  <michael@mauger.com>
+
        Fix  Bug#24483.
 
        * lisp/progmodes/sql.el
@@ -45625,7 +134857,8 @@
 
        * lisp/auth-source-pass.el (auth-source-pass-entries):
        * lisp/textmodes/artist.el (artist-figlet-get-font-list-windows):
-       * lisp/org/ob-abc.el (org-babel-expand-body:abc, org-babel-execute:abc):
+       * lisp/org/ob-abc.el (org-babel-expand-body:abc)
+       (org-babel-execute:abc):
        * lisp/org/ob-forth.el (org-babel-forth-session-execute):
        * lisp/vc/vc-git.el (vc-git--program-version):
        Add backslash in regexp for correctness.
@@ -47056,8 +136289,6 @@
 
        Replace NUL characters when calling into libxml
 
-       2019-02-27  Robert Pluim  <rpluim@gmail.com>
-
        * lisp/net/eww.el (eww-display-html): Replace NUL characters with
        "\0", as libxml can't handle embedded NULLs.  (Bug#34469)
 
@@ -55144,23 +144375,23 @@
        Bad assumptions in the `vc-hg-find-file-hook' prevented it from
        working. This correctly them.  (Bug#33129).
 
-       2018-10-23  Daniel Pittman  <slippycheeze@google.com>
+2018-10-23  Daniel Pittman  <slippycheeze@google.com>
 
-               * lisp/vc/vc-hg.el (vc-hg-find-file-hook): This function made 
two
-               assumptions about conflicted files that were not accurate,
-               preventing conflicts in files ever being detected.
+       * lisp/vc/vc-hg.el (vc-hg-find-file-hook): This function made two
+       assumptions about conflicted files that were not accurate,
+       preventing conflicts in files ever being detected.
 
-               The first was that the `vc-state' was cache by the time this was
-               invoked, which it is not - at least when visiting the file, or
-               using `vc-refresh-state'.
+       The first was that the `vc-state' was cache by the time this was
+       invoked, which it is not - at least when visiting the file, or
+       using `vc-refresh-state'.
 
-               The second was that a file with the ".orig" extension would be
-               present, next to the file being visited.  This is the default
-               behavior of Mercurial, but can be overridden by the user.
+       The second was that a file with the ".orig" extension would be
+       present, next to the file being visited.  This is the default
+       behavior of Mercurial, but can be overridden by the user.
 
-               Since the VC mode-line code will shortly calculate the state for
-               display, the optimization of testing for the ".orig" file only
-               delayed this work by a few moments.
+       Since the VC mode-line code will shortly calculate the state for
+       display, the optimization of testing for the ".orig" file only
+       delayed this work by a few moments.
 
 2018-11-02  Stefan Monnier  <monnier@iro.umontreal.ca>
 
@@ -57168,7 +146399,7 @@
        * lisp/gnus/nnmaildir.el (nnmaildir-request-accept-article):
        Omit leading 0s after "M" in file name.
        Problem reported by Glenn Morris in:
-               https://lists.gnu.org/r/emacs-devel/2018-09/msg00660.html
+       https://lists.gnu.org/r/emacs-devel/2018-09/msg00660.html
 
 2018-09-15  Paul Eggert  <eggert@cs.ucla.edu>
 
@@ -59682,7 +148913,7 @@
        (cleanup_vector): Use it.  Use if-then-else systematically;
        this lets GCC do a bit better job.
 
-       2018-08-08  Paul Eggert  <eggert@cs.ucla.edu>
+2018-08-08  Paul Eggert  <eggert@cs.ucla.edu>
 
        * src/alloc.c (VBLOCK_BYTES_MAX): Use vroundup_ct, not
        vroundup, so that can be used in static assertions.
@@ -73750,7 +162981,7 @@
        1dfc27576a Make pixel-wise scrolling less laggy
        f92264fc2a Fix child frame placement issues (bug#29953)
        a5f718c4c5 ; * doc/lispref/text.texi (Change Hooks): Fix last change.
-       e876f5f9fb Describe the precise interaction of complex primitives wit...
+       e876f5f9fb Describe the precise interaction of complex primitives 
with...
        3a22097cf6 Fix valgrind report in call-interactively
        d5f1c87bfe * src/editfns.c (Fsave_excursion): Doc fix.  (Bug#30001)
        b8d74c4578 Fix mark-defun when there's no spaces between successive d...
@@ -74251,7 +163482,7 @@
        13c59d0a83 More improvements for text.texi
        7850b7620e Adjudicate review comments for the "Text" chapter of user ...
        d7d3b14a99 * lisp/url/url-http.el (url-http-wait-for-headers-change-f...
-       f3819ad13e In C-h k <mouse-n>, alert user to existence of any matchin...
+       f3819ad13e In C-h k <mouse-n>, alert user to existence of any 
matching...
        99054fbef9 * net/eww.el (eww): Handle URLs without host part.
        de89c0b641 Make C-h c/k S-mouse-1 display message for mouse-appearanc...
        720ed0b533 Avoid crashes when ':eval' deletes our frame
@@ -76625,7 +165856,7 @@
        completion-all-completions do its work.
 
        (file-cache-minibuffer-complete): Skip `completion-hilit-commonality`
-       since `completion-all-completions' already hilighted its output.
+       since `completion-all-completions' already highlighted its output.
        Call our setup function directly rather than via 
`completion-setup-hook`.
        (file-cache-buffer): Remove variable.
        (file-cache-buffer-default-regexp): Make it a defvar.
@@ -117018,9 +206249,9 @@
 
        auth-source-user-and-password: add forgotten user parameter
 
-               * lisp/auth-source.el (auth-source-user-and-password): Use
-                 accidentally unused "user" parameter.
-                 Reported by Oscar Najera <najera.oscar@gmail.com>.
+       * lisp/auth-source.el (auth-source-user-and-password): Use
+       accidentally unused "user" parameter.
+       Reported by Oscar Najera <najera.oscar@gmail.com>.
 
 2017-01-31  Simen Heggestøyl  <simenheg@gmail.com>
 
@@ -125358,8 +214589,6 @@
        Signal file-already-exists if appropriate.
        * src/fileio.c (syms_of_fileio): Define file-missing.
 
-       2016-10-18  Paul Eggert  <eggert@cs.ucla.edu>
-
 2016-10-21  Mark Oteiza  <mvoteiza@udel.edu>
 
        Teach browse-url to open man page urls
@@ -128926,7 +218155,7 @@
        a6ae479 Post AppDefined events from the main thread ONLY (bug#23934)
        d35d398 Update to the AUTHORS file for Bob Weiner
        4d2f4df Revert "Fix local printer set to left aligned string formatter."
-       cd1b4d6 Revert "Fix ses-delete-blanks to delete only blanks + documen...
+       cd1b4d6 Revert "Fix ses-delete-blanks to delete only blanks + 
document...
        f7ceb8e Revert "Fix English."
        baa7abd Improve doc strings of 'gud-gdb' and 'gdb'
        aa4271a Fix doc string of 'minibuffer-message-timeout'
@@ -144836,16 +234065,14 @@
 
 This file records repository revisions from
 commit 9d56a21e6a696ad19ac65c4b405aeca44785884a (exclusive) to
-2021-03-18bd67a4f40a733cb139ace3af4616bc2702282 (inclusive).
-2021-02-03d9244f7cbef9f91e697ad5fc0ce49ec97 (inclusive).
-commit 1ca4da054be7eb340c511d817f3ec89c8b819db7 (inclusive).
+commit e7aa3ece52d26cc7e4d3f3990aff56127389779f (inclusive).
 See ChangeLog.2 for earlier changes.
 
 ;; Local Variables:
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2015-2021 Free Software Foundation, Inc.
+  Copyright (C) 2015-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/GNUmakefile b/GNUmakefile
index 76fd77ba1b..8eb61dc0ad 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -1,6 +1,6 @@
 # Build Emacs from a fresh tarball or version-control checkout.
 
-# Copyright (C) 2011-2021 Free Software Foundation, Inc.
+# Copyright (C) 2011-2022 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
@@ -36,31 +36,31 @@
 
 ifeq (help,$(filter help,$(MAKECMDGOALS)))
 help:
-       @echo "NOTE:  This is a brief summary of some common make targets."
-       @echo "For more detailed information, please read the files INSTALL,"
-       @echo "INSTALL.REPO, Makefile or visit this URL:"
-       @echo 
"https://www.gnu.org/prep/standards/html_node/Standard-Targets.html";
-       @echo ""
-       @echo "make all              -- compile and build Emacs"
-       @echo "make install          -- install Emacs"
-       @echo "make TAGS             -- update tags tables"
-       @echo "make clean            -- delete built files but preserve 
configuration"
-       @echo "make mostlyclean      -- like 'make clean', but leave those 
files that"
-       @echo "                         usually do not need to be recompiled"
-       @echo "make distclean        -- delete all build and configuration 
files,"
-       @echo "                         leave only files included in source 
distribution"
-       @echo "make maintainer-clean -- delete almost everything that can be 
regenerated"
-       @echo "make extraclean       -- like maintainer-clean, and also delete"
-       @echo "                         backup and autosave files"
-       @echo "make bootstrap        -- delete all compiled files to force a 
new bootstrap"
-       @echo "                         from a clean slate, then build in the 
normal way"
-       @echo "make uninstall        -- remove files installed by 'make 
install'"
-       @echo "make check            -- run the Emacs test suite"
-       @echo "make docs             -- generate Emacs documentation in info 
format"
-       @echo "make html             -- generate documentation in html format"
-       @echo "make ps               -- generate documentation in ps format"
-       @echo "make pdf              -- generate documentation in pdf format "
-       @exit
+       $(info $ NOTE:  This is a brief summary of some common make targets.)
+       $(info $ For more detailed information, please read the files INSTALL,)
+       $(info $ INSTALL.REPO, Makefile or visit this URL:)
+       $(info $ 
https://www.gnu.org/prep/standards/html_node/Standard-Targets.html)
+       $(info $ )
+       $(info $ make all              -- compile and build Emacs)
+       $(info $ make install          -- install Emacs)
+       $(info $ make TAGS             -- update tags tables)
+       $(info $ make clean            -- delete built files but preserve 
configuration)
+       $(info $ make mostlyclean      -- like 'make clean', but leave those 
files that)
+       $(info $                          usually do not need to be recompiled)
+       $(info $ make distclean        -- delete all build and configuration 
files,)
+       $(info $                          leave only files included in source 
distribution)
+       $(info $ make maintainer-clean -- delete almost everything that can be 
regenerated)
+       $(info $ make extraclean       -- like maintainer-clean, and also 
delete)
+       $(info $                          backup and autosave files)
+       $(info $ make bootstrap        -- delete all compiled files to force a 
new bootstrap)
+       $(info $                          from a clean slate, then build in the 
normal way)
+       $(info $ make uninstall        -- remove files installed by 'make 
install')
+       $(info $ make check            -- run the Emacs test suite)
+       $(info $ make docs             -- generate Emacs documentation in info 
format)
+       $(info $ make html             -- generate documentation in html format)
+       $(info $ make ps               -- generate documentation in ps format)
+       $(info $ make pdf              -- generate documentation in pdf format )
+       @:
 
 .PHONY: help
 
@@ -79,7 +79,7 @@ else
 ifeq ($(filter-out %clean,$(or $(MAKECMDGOALS),default)),)
 
 $(MAKECMDGOALS):
-       @echo >&2 'No Makefile; skipping $@.'
+       $(warning No Makefile; skipping $@.)
 
 else
 
@@ -97,18 +97,18 @@ default $(ORDINARY_GOALS): Makefile
 .NOTPARALLEL:
 
 configure:
-       @echo >&2 'There seems to be no "configure" file in this directory.'
-       @echo >&2 Running ./autogen.sh ...
+       $(warning There seems to be no "configure" file in this directory.)
+       $(warning Running ./autogen.sh ...)
        ./autogen.sh
        @echo >&2 '"configure" file built.'
 
 Makefile: configure
-       @echo >&2 'There seems to be no Makefile in this directory.'
+       $(warning There seems to be no Makefile in this directory.)
 ifeq ($(configure),default)
-       @echo >&2 'Running ./configure ...'
+       $(warning Running ./configure ...)
        ./configure
 else
-       @echo >&2 'Running ./configure '$(configure)'...'
+       $(warning Running ./configure $(configure)...)
        ./configure $(configure)
 endif
        @echo >&2 'Makefile built.'
diff --git a/INSTALL b/INSTALL
index 21298422af..02d5a09d63 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,5 +1,5 @@
 GNU Emacs Installation Guide
-Copyright (C) 1992, 1994, 1996-1997, 2000-2021 Free Software Foundation,
+Copyright (C) 1992, 1994, 1996-1997, 2000-2022 Free Software Foundation,
 Inc.
 See the end of the file for license conditions.
 
@@ -324,6 +324,10 @@ Use --without-toolkit-scroll-bars to disable Motif or 
Xaw3d scroll bars.
 Use --without-xim to inhibit the default use of X Input Methods.
 In this case, the X resource useXIM can be used to turn on use of XIM.
 
+Use --with-xinput2 to enable the use of version 2 of the X Input
+Extension.  This enables support for touchscreens, pinch gestures, and
+scroll wheels that report scroll deltas at pixel-level precision.
+
 Use --disable-largefile to omit support for files larger than 2GB, and
 --disable-year2038 to omit support for timestamps past the year 2038,
 on systems which allow omitting such support.  This may help when
diff --git a/INSTALL.REPO b/INSTALL.REPO
index 182c2e9534..ef488f3fd9 100644
--- a/INSTALL.REPO
+++ b/INSTALL.REPO
@@ -98,7 +98,7 @@ never platform-specific.
 
 
 
-Copyright (C) 2002-2021 Free Software Foundation, Inc.
+Copyright (C) 2002-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/Makefile.in b/Makefile.in
index 4b40d8741d..b72127dde6 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 1992-2021 Free Software Foundation, Inc.
+# Copyright (C) 1992-2022 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
@@ -104,6 +104,9 @@ USE_STARTUP_NOTIFICATION = @USE_STARTUP_NOTIFICATION@
 
 HAVE_BE_APP = @HAVE_BE_APP@
 
+HAVE_PGTK = @HAVE_PGTK@
+HAVE_GSETTINGS = @HAVE_GSETTINGS@
+
 # ==================== Where To Install Things ====================
 
 # Location to install Emacs.app under GNUstep / macOS.
@@ -212,6 +215,9 @@ icondir=$(datarootdir)/icons
 # The source directory for the icon files.
 iconsrcdir=$(srcdir)/etc/images/icons
 
+# Where to install the gsettings schema file.
+gsettingsschemadir = $(datadir)/glib-2.0/schemas
+
 # ==================== Emacs-specific directories ====================
 
 # These variables hold the values Emacs will actually use.  They are
@@ -306,6 +312,8 @@ LN_S_FILEONLY = @LN_S_FILEONLY@
 # We use gzip to compress installed .el and some .txt files.
 GZIP_PROG = @GZIP_PROG@
 
+GLIB_COMPILE_SCHEMAS = glib-compile-schemas
+
 # ============================= Targets ==============================
 
 # Program name transformation.
@@ -345,7 +353,9 @@ BIN_DESTDIR='${ns_appbindir}/'
 ELN_DESTDIR = ${ns_applibdir}/
 endif
 
-all: ${SUBDIR} info
+gsettings_SCHEMAS = etc/org.gnu.emacs.defaults.gschema.xml
+
+all: ${SUBDIR} info $(gsettings_SCHEMAS:.xml=.valid)
 
 .PHONY: all ${SUBDIR} blessmail epaths-force epaths-force-w32 
epaths-force-ns-self-contained etc-emacsver
 
@@ -427,6 +437,10 @@ epaths-force-ns-self-contained: epaths-force
          -e 's;${ns_appdir}/;;') &&                    \
        ${srcdir}/build-aux/move-if-change epaths.h.$$$$ src/epaths.h
 
+ifneq ($(NTDIR),)
+$(NTDIR): lib
+endif
+
 lib-src src: $(NTDIR) lib
 
 src: lib-src
@@ -497,7 +511,7 @@ $(srcdir)/configure: $(srcdir)/configure.ac 
$(srcdir)/m4/*.m4
 ## don't have to duplicate the list of utilities to install in
 ## this Makefile as well.
 
-install: all install-arch-indep install-etcdoc install-arch-dep 
install-$(NTDIR) blessmail install-eln
+install: all install-arch-indep install-etcdoc install-arch-dep 
install-$(NTDIR) blessmail install-eln install-gsettings-schemas
        @true
 
 ## Ensure that $subdir contains a subdirs.el file.
@@ -817,7 +831,7 @@ install-strip:
 ### create (but not the noninstalled files such as 'make all' would create).
 ###
 ### Don't delete the lisp and etc directories if they're in the source tree.
-uninstall: uninstall-$(NTDIR) uninstall-doc
+uninstall: uninstall-$(NTDIR) uninstall-doc uninstall-gsettings-schemas
        rm -f "$(DESTDIR)$(includedir)/emacs-module.h"
        $(MAKE) -C lib-src uninstall
        -unset CDPATH; \
@@ -913,7 +927,7 @@ clean_dirs = $(mostlyclean_dirs) nextstep admin/charsets 
admin/unidata
 
 $(foreach dir,$(clean_dirs),$(eval $(call submake_template,$(dir),clean)))
 
-clean: $(clean_dirs:=_clean)
+clean: $(clean_dirs:=_clean) clean-gsettings-schemas
        -rm -f ./*.tmp etc/*.tmp*
        -rm -rf info-dir.*
        -rm -rf native-lisp
@@ -938,7 +952,7 @@ distclean_dirs = $(clean_dirs) leim lisp admin/grammars
 
 $(foreach dir,$(distclean_dirs),$(eval $(call 
submake_template,$(dir),distclean)))
 
-distclean: $(distclean_dirs:=_distclean)
+distclean: $(distclean_dirs:=_distclean) clean-gsettings-schemas
        ${top_distclean}
 
 ### 'bootstrap-clean'
@@ -1063,8 +1077,8 @@ info_dir_deps = \
 ## but then we would need to depend on ${INFOS}, which would
 ## slow down parallelization.
 ${srcdir}/info/dir: ${info_dir_deps}
-       $(AM_V_at)${MKDIR_P} ${srcdir}/info
-       $(AM_V_GEN)(cd ${srcdir}/doc && \
+       $(AM_V_GEN)${MKDIR_P} ${srcdir}/info
+       $(AM_V_at)(cd ${srcdir}/doc && \
         AWK='${AWK}' ../build-aux/make-info-dir ${info_dir_inputs} \
        ) >$@.tmp && mv $@.tmp $@
 
@@ -1233,3 +1247,31 @@ gitmerge:
        ${GITMERGE_EMACS} -batch --no-site-file --no-site-lisp \
          -l ${srcdir}/admin/gitmerge.el \
          --eval '(setq gitmerge-minimum-missing ${GITMERGE_NMIN})' -f gitmerge
+
+install-gsettings-schemas:
+ifeq ($(HAVE_PGTK)$(HAVE_GSETTINGS),yesyes)
+       $(MKDIR_P) "$(DESTDIR)$(gsettingsschemadir)"
+       $(INSTALL_DATA) $(srcdir)/$(gsettings_SCHEMAS) 
"$(DESTDIR)$(gsettingsschemadir)"
+       if [ -z "$(DESTDIR)" ]; then $(GLIB_COMPILE_SCHEMAS) 
$(gsettingsschemadir); fi
+endif
+
+uninstall-gsettings-schemas:
+ifeq ($(HAVE_PGTK)$(HAVE_GSETTINGS),yesyes)
+       for x in $(gsettings_SCHEMAS); do \
+         xx=`echo $$x | sed -e 's|.*/||'`; \
+         rm -f "$(DESTDIR)$(gsettingsschemadir)/$${xx}"; \
+       done
+       if [ -z "$(DESTDIR)" ]; then $(GLIB_COMPILE_SCHEMAS) 
$(gsettingsschemadir); fi
+endif
+
+clean-gsettings-schemas:
+ifeq ($(HAVE_PGTK)$(HAVE_GSETTINGS),yesyes)
+       rm -f $(gsettings_SCHEMAS:.xml=.valid)
+endif
+
+$(gsettings_SCHEMAS:.xml=.valid): $(srcdir)/$(gsettings_SCHEMAS)
+ifeq ($(HAVE_PGTK)$(HAVE_GSETTINGS),yesyes)
+       $(GLIB_COMPILE_SCHEMAS) --strict --dry-run 
--schema-file=$(srcdir)/$(gsettings_SCHEMAS)
+       $(MKDIR_P) $(@D)
+       touch $@
+endif
diff --git a/README b/README
index 6329a7775e..80c04e20fe 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2021 Free Software Foundation, Inc.
+Copyright (C) 2001-2022 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/admin/CPP-DEFINES b/admin/CPP-DEFINES
index 634d6f3f3b..620ab0bed0 100644
--- a/admin/CPP-DEFINES
+++ b/admin/CPP-DEFINES
@@ -288,6 +288,7 @@ HAVE_UTMP_H
 HAVE_VFORK
 HAVE_VFORK_H
 HAVE_WEBP
+HAVE_SQLITE3
 HAVE_WCHAR_H
 HAVE_WCHAR_T
 HAVE_WINDOW_SYSTEM
diff --git a/admin/ChangeLog.1 b/admin/ChangeLog.1
index f3de691325..9409a608cc 100644
--- a/admin/ChangeLog.1
+++ b/admin/ChangeLog.1
@@ -2577,7 +2577,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2001-2021 Free Software Foundation, Inc.
+  Copyright (C) 2001-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/admin/MAINTAINERS b/admin/MAINTAINERS
index 33aeb52865..092978f6d2 100644
--- a/admin/MAINTAINERS
+++ b/admin/MAINTAINERS
@@ -58,10 +58,7 @@ Artur Malabarba
 
 Michael Albinus
         Tramp
-            lisp/net/tramp*.el
             lisp/url/url-tramp.el
-            doc/misc/tramp*.texi
-            test/lisp/net/tramp*-tests.el
             test/lisp/url/url-tramp-tests.el
 
         D-Bus
@@ -141,6 +138,27 @@ Andrea Corallo
 Stefan Kangas
         admin/automerge
 
+Po Lu
+       The Haiku port:
+           src/haikuterm.c
+           src/haikufns.c
+           src/haikuimage.c
+           src/haikuselect.c
+           src/haiku_io.c
+           src/haiku.c
+           src/haiku_select.cc
+           src/haiku_support.cc
+           src/haiku_font_support.cc
+           src/haiku_draw_support.cc
+           src/haikugui.h
+           src/haikuterm.h
+           src/haikuselect.h
+           src/haiku_support.h
+           lisp/term/haiku-win.el
+           doc/emacs/haiku.texi
+
+       Haiku battery support in lisp/battery.el
+
 ==============================================================================
 2. Areas that someone is willing to maintain, although he would not
 necessarily mind if someone else was the official maintainer.
@@ -270,6 +288,53 @@ Amin Bandali
            lisp/eshell/*
            doc/misc/eshell.texi
 
+Po Lu
+       The X port
+             src/xterm.c
+             src/xfns.c
+       X11 and GTK xwidget support in src/xwidget.c
+       Precision pixel scrolling in lisp/pixel-scroll.el
+
+==============================================================================
+3. Externally maintained packages.
+==============================================================================
+
+Tramp
+       Maintainer: Michael Albinus
+       Repository: git://git.savannah.gnu.org/tramp.git
+       Mailing List: tramp-devel@gnu.org
+       Bug Reports: M-x tramp-bug
+       Notes: For backward compatibility requirements, see
+         lisp/net/trampver.el.
+
+        lisp/net/tramp*.el
+        doc/misc/tramp*.texi
+        test/lisp/net/tramp*-tests.el
+
+Modus themes
+        Maintainer: Protesilaos Stavrou
+        Repository and issue tracker: 
https://gitlab.com/protesilaos/modus-themes
+
+        doc/misc/modus-themes.org
+        etc/themes/modus*.el
+
+Org Mode
+       Home Page: https://orgmode.org/
+       Maintainer: Org Mode developers
+       Repository: git://git.sv.gnu.org/emacs/org-mode.git
+       Mailing list: emacs-orgmode@gnu.org
+       Bug Reports: M-x org-submit-bug-report
+       Notes: Org Mode is maintained as a separate project that is
+          periodically merged into Emacs.  To view or participate in
+          Org Mode development, please go to https://orgmode.org/ and
+          follow the instructions there.
+
+       lisp/org/*.el
+       etc/org/*
+       etc/refcards/orgcard.tex
+       doc/misc/org.org
+       doc/misc/org-setup.org
+
 
 ;;; Local Variables:
 ;;;   coding: utf-8
diff --git a/admin/README b/admin/README
index b0336f91ff..89cdbbbfaf 100644
--- a/admin/README
+++ b/admin/README
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2021 Free Software Foundation, Inc.
+Copyright (C) 2001-2022 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/admin/admin.el b/admin/admin.el
index ad4208beef..5f02ea8ce4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -88,6 +88,9 @@ Optional argument DATE is the release date, default today."
     (kill-buffer)
     (message "No need to update `%s'" file)))
 
+(defvar admin-git-command (executable-find "git")
+  "The `git' program to use.")
+
 (defun set-version (root version)
   "Set Emacs version to VERSION in relevant files under ROOT.
 Root must be the root of an Emacs source tree."
@@ -96,6 +99,8 @@ Root must be the root of an Emacs source tree."
                (read-string "Version number: " emacs-version)))
   (unless (file-exists-p (expand-file-name "src/emacs.c" root))
     (user-error "%s doesn't seem to be the root of an Emacs source tree" root))
+  (unless admin-git-command
+    (user-error "Could not find git; please install git and move NEWS 
manually"))
   (message "Setting version numbers...")
   ;; There's also a "version 3" (standing for GPLv3) at the end of
   ;; `README', but since `set-version-in-file' only replaces the first
@@ -157,7 +162,13 @@ Root must be the root of an Emacs source tree."
 Documentation changes might not have been completed!"))))
     (when (and majorbump
                (not (file-exists-p oldnewsfile)))
-      (rename-file newsfile oldnewsfile)
+      (call-process admin-git-command nil nil nil
+                    "mv" newsfile oldnewsfile)
+      (when (y-or-n-p "Commit move of NEWS file?")
+        (call-process admin-git-command nil nil nil
+                      "commit" "-m" (format "; Move etc/%s to etc/%s"
+                                            (file-name-nondirectory newsfile)
+                                            (file-name-nondirectory 
oldnewsfile))))
       (find-file oldnewsfile)           ; to prompt you to commit it
       (copy-file oldnewsfile newsfile)
       (with-temp-buffer
diff --git a/admin/alloc-colors.c b/admin/alloc-colors.c
index ea5b750236..4db447332b 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/admin/authors.el b/admin/authors.el
index 1e8bf0364d..342f2718c8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
 
 ;; Author: Gerd Moellmann <gerd@gnu.org>
 ;; Maintainer: emacs-devel@gnu.org
@@ -41,11 +41,16 @@ files.")
 (defconst authors-aliases
   '(
     (nil "A\\. N\\. Other")  ; unknown author 2014-12-03, later removed
+    (nil "Anticrisis")
+    (nil "akater")
     ("Aaron S. Hawley" "Aaron Hawley")
     ("Alan Third" "Alan J Third")
+    ("Alexander Gramiak" "Alex Gramiak")
     ("Alexandru Harsanyi" "Alex Harsanyi")
     ("Álvar Jesús Ibeas Martín" "Álvar Ibeas")
+    ("Andrea Corallo" "AndreaCorallo")
     ("Andrew Csillag" "Drew Csillag")
+    ("Andrew G Cohen" "Andrew Cohen")
     ("Anna M. Bigatti" "Anna Bigatti")
     ("Aurélien Aptel" "Aurelien Aptel")
     ("Barry A. Warsaw" "Barry A. Warsaw, Century Computing, Inc."
@@ -55,12 +60,14 @@ files.")
     ("Bill Mann" "William F. Mann")
     ("Bill Rozas" "Guillermo J. Rozas")
     (nil "binjo.cn@gmail.com")
+    (nil "bug-gnu-emacs@gnu.org")  ; mistake
     ("Björn Torkelsson" "Bjorn Torkelsson")
     ("Brian Fox" "Brian J. Fox")
     ("Brian P Templeton" "BT Templeton")
     ("Brian Sniffen" "Brian T. Sniffen")
     (nil "castor@my-dejanews")
     (nil "chengang31@gmail.com")
+    (nil "chuntaro")
     ("David Abrahams" "Dave Abrahams")
     ("David J. Biesack" "David Biesack")
     ("David De La Harpe Golden" "David Golden")
@@ -70,13 +77,16 @@ files.")
     ("David M. Koppelman" "David Koppelman")
     ("David M. Smith" "David Smith" "David M Smith")
     ("David O'Toole" "David T. O'Toole")
+    (nil "dalanicolai")
     (nil "deech@deech")
     ("Deepak Goel" "D. Goel")
+    ("Earl Hyatt" "Earl" "ej32u@protonmail.com")
     ("Ed L. Cashin" "Ed L Cashin")
     ("Edward M. Reingold" "Ed\\(ward\\( M\\)?\\)? Reingold" "Reingold Edward 
M")
     ("Emilio C. Lopes" "Emilio Lopes")
     ("Eric M. Ludlam" "Eric Ludlam")
     ("Eric S. Raymond" "Eric Raymond")
+    ("Etienne Prud’Homme" "Etienne Prud'Homme")
     ("Fabián Ezequiel Gallina" "Fabian Ezequiel Gallina" "Fabi.n E\\. Gallina")
     (nil "felix.*EmacsWiki")
     (nil "foudfou")
@@ -89,26 +99,37 @@ files.")
     ("Gerd Möllmann" "Gerd Moellmann")
     ("Hallvard B. Furuseth" "Hallvard B Furuseth" "Hallvard Furuseth")
     ("Hrvoje Nikšić" "Hrvoje Niksic")
+    ("Ian Dunn" "^Ian D\\>")
     ;; lisp/org/ChangeLog.1 2010-11-11.
     (nil "immerrr")
     (nil "aaa bbb")
     (nil "Code Extracted") ; lisp/newcomment.el's "Author:" header
+    (nil "jakanakaevangeli")
+    ("J. Alexander Branham" "Alex Branham")
     ("Jaeyoun Chung" "Jae-youn Chung" "Jae-you Chung" "Chung Jae-youn")
-    ("Jan Djärv" "Jan D." "Jan Djarv")
+    ("Jan Djärv" "Jan D\\>" "Jan Djarv")
+    ("João Távora" "João Tãvora")
     ("Jay K. Adams" "Jay Adams")
+    ("J.D. Smith" "Jd Smith")
     ("Jérôme Marant" "Jérôme Marant" "Jerome Marant")
+    ("Jens Lechtenbörger" "Jens Lechtenboerger")
     ("Jens-Ulrik Holger Petersen" "Jens-Ulrik Petersen")
+    ("Jérémie Courrèges-Anglas" "Jeremie Courreges-Anglas")
     ("Jeremy Bertram Maitin-Shepard" "Jeremy Maitin-Shepard")
+    ("Jérémy Compostella" "Jeremy Compostella")
+    ("Jimmy Aguilar Mena" "Ergus")
     ("Johan Bockgård" "Johan Bockgard")
     ("John F. Carr" "John F Carr")
     ("John J Foerch" "John Foerch")
     ("John W. Eaton" "John Eaton")
     ("Jonathan I. Kamens" "Jonathan Kamens")
     ("Jorgen Schäfer" "Jorgen Schaefer")
+    ("Jose A. Ortega Ruiz" "Jose A Ortega Ruiz")
     ("Joseph Arceneaux" "Joe Arceneaux")
     ("Joseph M. Kelsey" "Joe Kelsey")  ; FIXME ?
     ("Juan León Lahoz García" "Juan-Leon Lahoz Garcia")
     ("Jürgen Hötzel" "Juergen Hoetzel")
+    (nil "k3tu0isui")
     ("K. Shane Hartman" "Shane Hartman")
     ("Kai Großjohann" "Kai Grossjohann")
     ("Karl Berry" "K. Berry")
@@ -126,9 +147,12 @@ files.")
     ("Mark D. Baushke" "Mark D Baushke")
     ("Mark E. Shoulson" "Mark Shoulson")
     ("Marko Kohtala" "Kohtala Marko")
+    ("Maxim Nikulin" "Max Nikulin")
     ("Agustín Martín" "Agustin Martin" "Agustín Martín Domingo")
     ("Martin Lorentzon" "Martin Lorentzson")
     ("Matt Swift" "Matthew Swift")
+    ("Mattias Engdegård" "Mattias Engdegard")
+    (nil "^Madhu")
     (nil "mu@magi.net.ru")
     ("Maxime Edouard Robert Froumentin" "Max Froumentin")
     ("Michael R. Mauger" "Michael Mauger")
@@ -137,11 +161,13 @@ files.")
     ("Michael I. Bushnell" "Michael I Bushnell" "Michael I. Bushnell, p/BSG")
     ("Michael R. Cook" "Michael Cook")
     ("Michael Sperber" "Mike Sperber" "Michael Sperber \\[Mr. Preprocessor\\]")
+    ("Michalis V" "^mvar")
     ("Mikio Nakajima" "Nakajima Mikio")
     ("Nelson Jose dos Santos Ferreira" "Nelson Ferreira")
     ("Noorul Islam" "Noorul Islam K M")
 ;;;    ("Tetsurou Okazaki" "OKAZAKI Tetsurou") ; FIXME?
     ("Óscar Fuentes" "Oscar Fuentes")
+    (nil "pillule")
     (nil "psyberbits@gmail.com")
     ("Paul Eggert" "Paul R\\. Eggert")
     ("Pavel Janík" "Pavel Janík Ml." "Pavel Janik Ml." "Pavel Janik")
@@ -151,8 +177,10 @@ files.")
     ("Peter J. Weisberg" "PJ Weisberg")
     ("Peter S. Galbraith" "Peter S Galbraith" "Peter Galbraith")
     ("Peter Runestig" "Peter 'luna' Runestig")
+    ("Philip Kaludercic" "Philip K\\." "Philip K")
     ("Philipp Stephani" "Philipp .*phst@google")
     ("Piotr Zieliński" "Piotr Zielinski")
+    ("Po Lu" "Po Lu Via")               ; looks like a mistake
     ("Przemysław Wojnowski" "Przemyslaw Wojnowski")
     ("R. Bernstein" "rb@dustyfeet.com")
     ("Rainer Schöpf" "Rainer Schoepf")
@@ -187,6 +215,7 @@ files.")
     ("Takaaki Ota" "Tak Ota")
     ("Takahashi Naoto" "Naoto Takahashi")
     ("Teodor Zlatanov" "Ted Zlatanov")
+    (nil "^TEC")
     (nil "The PCL-CVS Trust")
     ("Thomas Dye" "Tom Dye")
     ("Thomas Horsley" "Tom Horsley")   ; FIXME ?
@@ -328,7 +357,7 @@ Changes to files matching one of the regexps in this list 
are not listed.")
     "install.sh" "install-sh" "missing" "mkinstalldirs"
     "termcap.dat" "termcap.src" "termcap.ucb" "termcap"
     "ChangeLog.nextstep" "Emacs.clr" "spec.txt"
-    "gfdl.1"
+    "gfdl.1" "ledit.l"
     "texi/Makefile.in"
     "autodeps.mk"
     "lwlib/autodeps.mk"
@@ -350,6 +379,8 @@ Changes to files matching one of the regexps in this list 
are not listed.")
     "cedet/tests/test.py"
     "cedet/tests/teststruct.cpp"
     "subdirs.el"
+    "etc/facemenu-removal.txt"
+    "src/bytecode.h"
     "*.el"
     ;; Autogen:
     "cus-load.el" "finder-inf.el" "ldefs-boot.el" "loaddefs-boot.el"
@@ -365,6 +396,14 @@ Changes to files matching one of the regexps in this list 
are not listed.")
     ;; Only existed briefly, then renamed:
     "images/icons/allout-widgets-dark-bg"
     "images/icons/allout-widgets-light-bg"
+    "lisp/shorthand.el"
+    "test/lisp/shorthand-tests.el"
+    "lisp/shorthands.el"
+    "test/src/comp-test-funcs.el"
+    "lisp/net/link.el"
+    "lisp/net/connection.el"
+    "lisp/net/dictionary-link.el"
+    "test/src/comp-test-funcs-dyn.el"
     ;; Never had any meaningful changes logged, now deleted:
     "lib/stdarg.in.h" "lib/stdbool.in.h"
     "unidata/bidimirror.awk" "unidata/biditype.awk"
@@ -424,6 +463,10 @@ Changes to files matching one of the regexps in this list 
are not listed.")
     "info/dir"
     ;; Not in gnulib anymore
     "lib/qset-acl.c" "lib/qcopy-acl.c" "lib/file-has-acl.c" 
"lib/secure_getenv.c"
+    "lib/malloca.c" "lib/malloca.h"
+    ;; Briefly added to repository from gnulib, but not used
+    "lib/localtime-buffer.c"
+    "lib/localtime-buffer.h"
     ;; files from old MS Windows build procedures
     "nt/gnulib-modules-to-delete.cfg"
     "makefile.w32-in"
@@ -468,6 +511,9 @@ Changes to files matching one of the regexps in this list 
are not listed.")
     "WHY-FREE"
     "MORE.STUFF"
     "notes/font-backend"
+    "src/ftxfont.c"
+    "src/ptr-bounds.h"
+    "obsolete/options.el"
     ;; ada-mode has been deleted, now in GNU ELPA
     "ada-mode.texi"
     "doc/misc/ada-mode.texi"
@@ -485,6 +531,18 @@ Changes to files matching one of the regexps in this list 
are not listed.")
     "src/mini-gmp-emacs.c"
     "lib/dosname.h"
     "lib/putenv.c"
+    ;; Moved to the org-contrib repo
+    "ob-asymptote.el"
+    "ob-shen.el"
+    "ob-picolisp.el"
+    "ob-io.el"
+    "ob-mscgen.el"
+    "ob-ledger.el"
+    "lisp/org/ob-abc.el"
+    "lisp/org/ob-ebnf.el"
+    "lisp/org/ob-J.el"
+    ;; Removed -- for now.
+    "test/src/doc-tests.el"
     )
   "List of files and directories to ignore.
 Changes to files in this list are not listed.")
@@ -947,6 +1005,7 @@ in the repository.")
     ("DIFF" . "OTHER.EMACSES")
     ("CCADIFF" . "OTHER.EMACSES")
     ("GOSDIFF" . "OTHER.EMACSES")
+    ("emacs.appdata.xml" . "emacs.metainfo.xml")
     ;; Nextstep
     ("nextstep/Cocoa/Emacs.base/Contents/Info.plist" . 
"nextstep/templates/Info.plist.in")
     ;; Moved from lisp/tpu-doc.el to etc/tpu-edt.doc in Emacs 19.29.
@@ -1001,6 +1060,12 @@ in the repository.")
     ("lisp/gnus/messcompat.el" . "messcompat.el")
     ("html2text.el" . "html2text.el")
     ("lisp/net/html2text.el" . "html2text.el")
+    ;; Obsolete in 28.1.
+    ("inversion.el" . "inversion.el")
+    ("test/lisp/cedet/inversion-tests.el" . "inversion-tests.el")
+    ("test/lisp/mail/rfc2368-tests.el" . "rfc2368-tests.el")
+    ;; This file was briefly obsolete:
+    ("lisp/obsolete/erc-compat.el" . "erc-compat.el")
     ;; From lisp to etc/forms.
     ("forms-d2.el" . "forms-d2.el")
     ("forms-pass.el" . "forms-pass.el")
@@ -1140,6 +1205,15 @@ in the repository.")
     ("src/mini-gmp.c" . "lib/mini-gmp.c")
     ("src/mini-gmp.h" . "lib/mini-gmp.h")
     ("sysdep.c" . "src/sysdep.c")
+    ("lisp/gnus/nnir.el" . "nnir.el")
+    ("src/regex.c" . "emacs-regex.c")
+    ("src/regex.h" . "emacs-regex.h")
+    ("test/manual/rmailmm.el" . "rmailmm-tests.el")
+    ("test/lisp/cedet/semantic-utest-fmt.el" . "format-tests.el")
+    ("test/lisp/emacs-lisp/tabulated-list-test.el" . "tabulated-list-tests.el")
+    ("test/lisp/url/url-handlers-test.el" . "url-handlers-tests.el")
+    ("test/src/dired-tests.el" . "dired-tests.el")
+    (".dir-locals.el" . ".dir-locals.el")
     )
   "Alist of files which have been renamed during their lifetime.
 Elements are (OLDNAME . NEWNAME).")
diff --git a/admin/automerge b/admin/automerge
index 81082f7dc6..415d717a99 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-2021 Free Software Foundation, Inc.
+## Copyright (C) 2018-2022 Free Software Foundation, Inc.
 
 ## Author: Glenn Morris <rgm@gnu.org>
 ## Maintainer: Stefan Kangas <stefan@marxist.se>
diff --git a/admin/build-configs b/admin/build-configs
index 2e04e0008e..05e70786b3 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 2001-2022 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/admin/charsets/Makefile.in b/admin/charsets/Makefile.in
index f043077e31..572e352f4a 100644
--- a/admin/charsets/Makefile.in
+++ b/admin/charsets/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 2015-2021 Free Software Foundation, Inc.
+# Copyright (C) 2015-2022 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 f933c34ffc..9898d36e74 100755
--- a/admin/charsets/mapconv
+++ b/admin/charsets/mapconv
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-# Copyright (C) 2015-2021 Free Software Foundation, Inc.
+# Copyright (C) 2015-2022 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 fb078269d6..0380df9ad7 100644
--- a/admin/charsets/mapfiles/README
+++ b/admin/charsets/mapfiles/README
@@ -1,4 +1,4 @@
-Copyright (C) 2009-2021 Free Software Foundation, Inc.
+Copyright (C) 2009-2022 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/cus-test.el b/admin/cus-test.el
index 30b5f65561..8f0914ff69 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2000, 2002-2022 Free Software Foundation, Inc.
 
 ;; Author: Markus Rost <rost@math.uni-bielefeld.de>
 ;; Created: 13 Sep 1998
diff --git a/admin/diff-tar-files b/admin/diff-tar-files
index cdcc512ae6..6ab39eab2f 100755
--- a/admin/diff-tar-files
+++ b/admin/diff-tar-files
@@ -1,6 +1,6 @@
 #! /bin/sh
 
-# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+# Copyright (C) 2001-2022 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
@@ -35,7 +35,7 @@ old_tmp=/tmp/old.$$
 new_tmp=/tmp/new.$$
 trap "rm -f $old_tmp $new_tmp; exit 1" 1 2 15
 
-tar tzf "$old_tar" | sed -e 's,^[^/]*,,' | sort > $old_tmp
-tar tzf "$new_tar" | sed -e 's,^[^/]*,,' | sort > $new_tmp
+tar tf "$old_tar" | sed -e 's,^[^/]*,,' | sort > $old_tmp
+tar tf "$new_tar" | sed -e 's,^[^/]*,,' | sort > $new_tmp
 diff -u $old_tmp $new_tmp
 rm -f $new_tmp $old_tmp
diff --git a/admin/find-gc.el b/admin/find-gc.el
index 1cce54ef14..1c3c419c56 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 2001-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 
diff --git a/admin/gitmerge.el b/admin/gitmerge.el
index 658ceb77f4..5da70a4028 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 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 aaf95c0897..83ac2ef46e 100644
--- a/admin/grammars/Makefile.in
+++ b/admin/grammars/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-## Copyright (C) 2013-2021 Free Software Foundation, Inc.
+## Copyright (C) 2013-2022 Free Software Foundation, Inc.
 
 ## This file is part of GNU Emacs.
 
diff --git a/admin/grammars/c.by b/admin/grammars/c.by
index 289081e3ce..2395e747fd 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 35fb7e832e..1180dc28eb 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 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 486924b799..138adb2082 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 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 e85db1572c..2357153ccb 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2022 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 f66585e70e..193ad77fa9 100644
--- a/admin/grammars/make.by
+++ b/admin/grammars/make.by
@@ -1,6 +1,6 @@
 ;;; make.by -- BY notation for Makefiles.
 
-;; Copyright (C) 1999-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 2539d1bec8..17d87e711a 100644
--- a/admin/grammars/python.wy
+++ b/admin/grammars/python.wy
@@ -1,6 +1,6 @@
 ;;; python.wy -- LALR grammar for Python
 
-;; Copyright (C) 2002-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 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 c3abb5a28e..fcf3007ae7 100644
--- a/admin/grammars/scheme.by
+++ b/admin/grammars/scheme.by
@@ -1,6 +1,6 @@
 ;;; scheme.by -- Scheme BNF language specification
 
-;; Copyright (C) 2001-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 868a81cf18..c3531ebd54 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2022 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 e8021129e3..30d6a25a28 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 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 fa7880b566..06d5608092 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 2001-2022 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/admin/make-manuals b/admin/make-manuals
index f133949520..8085412cc8 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-2021 Free Software Foundation, Inc.
+## Copyright 2018-2022 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 22276080c5..872cb00ca2 100644
--- a/admin/make-tarball.txt
+++ b/admin/make-tarball.txt
@@ -5,7 +5,7 @@ Instructions to create pretest or release tarballs. -*- coding: 
utf-8 -*-
 
 Steps to take before starting on the first pretest in any release sequence:
 
-0.  The release branch (e.g. emacs-26) should already have been made
+0.  The release branch (e.g. emacs-28) should already have been made
     and you should use it for all that follows.  Diffs from this
     branch should be going to the emacs-diffs mailing list.
 
@@ -14,12 +14,13 @@ Steps to take before starting on the first pretest in any 
release sequence:
 
 2.  Consider increasing the value of the variable
     'customize-changed-options-previous-release' in cus-edit.el to
-    refer to a newer version of Emacs.  (This is probably needed only
-    when preparing the first pretest for a major Emacs release.)
+    refer to a newer version of Emacs.  (This is now done when cutting
+    the release branch, see admin/release-branch.txt.)
     Commit cus-edit.el if changed.
 
 3.  Remove any old pretests from https://alpha.gnu.org/gnu/emacs/pretest.
     You can use 'gnupload --delete' (see below for more gnupload details).
+    (We currently don't bother with this.)
 
 General steps (for each step, check for possible errors):
 
@@ -89,7 +90,7 @@ General steps (for each step, check for possible errors):
     admin/release-process must be completed.
 
     Set the version number to that of the actual release (commit in
-    one, as described above). Pick a date about a week from now when
+    one, as described above).  Pick a date about a week from now when
     you intend to make the release.  Use M-x add-release-logs to add
     entries to etc/HISTORY and the ChangeLog file.  It's best not to
     commit these files until the release is actually made.  Merge the
@@ -163,8 +164,15 @@ General steps (for each step, check for possible errors):
 
     If this is the first pretest of a major release, just comparing
     with the previous release may overlook many new files.  You can try
-    something like 'find . | sort' in a clean repository, and compare the
-    results against the new tar contents.
+    something like 'find . | sort' in a clean repository, and
+    compare the results against the new tar contents.  Another
+    alternative is using something like:
+
+     tar cf - emacs-NEW | tar t -C /tmp | grep -Ev "\.(o|d)$" | sort
+
+    Where emacs-NEW is the directory containing your clean repository.
+    The output of this command might be easier to compare to the
+    tarball than the one you get from find.
 
 7.   tar -xf emacs-NEW.tar; cd emacs-NEW
      ./configure --prefix=/tmp/emacs && make check && make install
@@ -194,6 +202,14 @@ General steps (for each step, check for possible errors):
      git tag -a TAG -m "Emacs TAG" SHA1
      git push --tags
 
+    In the past, we were not always consistent with the annotation
+    (i.e. -m "Emacs TAG").  The preferred format is like this for a
+    pretest, release candidate and final release:
+
+     git tag -a emacs-28.0.90  -m "Emacs 28.0.90 pretest"
+     git tag -a emacs-28.1-rc1 -m "Emacs 28.1 RC1"
+     git tag -a emacs-28.1     -m "Emacs 28.1 release"
+
 9. Decide what compression schemes to offer.
     For a release, at least gz and xz:
       gzip --best --no-name -c emacs-NEW.tar > emacs-NEW.tar.gz
@@ -256,6 +272,11 @@ General steps (for each step, check for possible errors):
     because replies that invariably are not announcements also get
     sent out as if they were.)
 
+    To create the included SHA1 and SHA256 checksums, run:
+
+     sha1sum emacs-NEW.tar.xz
+     sha256sum emacs-NEW.tar.xz
+
 12. After a release, update the Emacs pages as described below.
 
 13. Bump the Emacs version on the release branch.
diff --git a/admin/merge-gnulib b/admin/merge-gnulib
index c9fe3b2f95..73b3d39049 100755
--- a/admin/merge-gnulib
+++ b/admin/merge-gnulib
@@ -4,7 +4,7 @@
 #
 #      admin/merge-gnulib
 
-# Copyright 2012-2021 Free Software Foundation, Inc.
+# Copyright 2012-2022 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/admin/merge-pkg-config b/admin/merge-pkg-config
index 1136a304dd..2f785729a6 100755
--- a/admin/merge-pkg-config
+++ b/admin/merge-pkg-config
@@ -4,7 +4,7 @@
 #
 #      admin/merge-pkg-config
 
-# Copyright 2014-2021 Free Software Foundation, Inc.
+# Copyright 2014-2022 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/admin/notes/copyright b/admin/notes/copyright
index 5b00c82ce9..6f7cb15334 100644
--- a/admin/notes/copyright
+++ b/admin/notes/copyright
@@ -1,4 +1,4 @@
-Copyright (C) 2007-2021 Free Software Foundation, Inc.
+Copyright (C) 2007-2022 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/admin/notes/emba b/admin/notes/emba
index f1b52b2cde..99237ea5f6 100644
--- a/admin/notes/emba
+++ b/admin/notes/emba
@@ -1,6 +1,6 @@
 -*- mode: outline; coding: utf-8 -*-
 
-Copyright (C) 2019-2021 Free Software Foundation, Inc.
+Copyright (C) 2019-2022 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 NOTES FOR EMACS CONTINUOUS BUILD ON EMBA
@@ -63,6 +63,10 @@ They can be downloaded from the server, visiting the URL
 <https://emba.gnu.org/emacs/emacs/-/pipelines>, and selecting the job
 in question.
 
+Every pipeline generates a JUnit test report for the respective test
+jobs, which can be inspected on the pipeline web page.  This test
+report counts completed ERT tests, aborted tests are not counted.
+
 * Emba configuration
 
 The emba configuration files are hosted on
diff --git a/admin/notes/hydra b/admin/notes/hydra
index 62ad7ebf9c..0987e7be82 100644
--- a/admin/notes/hydra
+++ b/admin/notes/hydra
@@ -1,6 +1,6 @@
 -*- mode: outline; coding: utf-8 -*-
 
-Copyright (C) 2013-2021 Free Software Foundation, Inc.
+Copyright (C) 2013-2022 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 fa4df820ae..9b3f1606a1 100644
--- a/admin/notes/multi-tty
+++ b/admin/notes/multi-tty
@@ -1,6 +1,6 @@
 -*- coding: utf-8; mode: text; -*-
 
-Copyright (C) 2007-2021 Free Software Foundation, Inc.
+Copyright (C) 2007-2022 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/unicode b/admin/notes/unicode
index be51d09d37..2c4b5e0106 100644
--- a/admin/notes/unicode
+++ b/admin/notes/unicode
@@ -1,6 +1,6 @@
                                             -*-mode: text; coding: utf-8;-*-
 
-Copyright (C) 2002-2021 Free Software Foundation, Inc.
+Copyright (C) 2002-2022 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 524b908d0e..61a80e3d19 100644
--- a/admin/notes/www
+++ b/admin/notes/www
@@ -1,6 +1,6 @@
 -*- outline -*-
 
-Copyright (C) 2013-2021 Free Software Foundation, Inc.
+Copyright (C) 2013-2022 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 19c72c3918..3df8139f9b 100644
--- a/admin/notes/years
+++ b/admin/notes/years
@@ -3,7 +3,31 @@ HOW TO MAINTAIN COPYRIGHT YEARS FOR GNU EMACS
 Maintaining copyright years is now very simple: every time a new year
 rolls around, add that year to every FSF (and AIST) copyright notice.
 Do this by running the 'admin/update-copyright' script on a fresh repo
-checkout.  Inspect the results for plausibility, then commit them.
+checkout, redirecting its output to a file, so that you could later
+examine the files that don't have copyright notices.  Inspect the
+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
+  . 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
+    output into PDF and PS, in etc/refcards/ru-refcard.tex
+  . it doesn't update etc/refcards/gnus-refcard.tex and
+    doc/misc/org.org because their Copyright statements have a
+    non-standard format
+  . several README and XPM files under etc/images/, and also
+    etc/refcards/README, msdos/README, and nt/icons/README aren't
+    updated either
+
+These files need to be updated by hand.
+
+Next, run "M-x set-copyright" from admin.el, which updates several
+copyright notices in the Emacs sources.
 
 You should also run the etags test suite in test/manual/etags/.  It
 will most probably fail because the contents of the test files changes
diff --git a/admin/nt/README-UNDUMP.W32 b/admin/nt/README-UNDUMP.W32
index aaaea3b91f..c42b7b6494 100644
--- a/admin/nt/README-UNDUMP.W32
+++ b/admin/nt/README-UNDUMP.W32
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2021 Free Software Foundation, Inc.
+Copyright (C) 2001-2022 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 b6f6e55d8c..475612ac80 100644
--- a/admin/nt/dist-build/README-windows-binaries
+++ b/admin/nt/dist-build/README-windows-binaries
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2021 Free Software Foundation, Inc.
+Copyright (C) 2001-2022 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 dfff493b64..a1d9afa517 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-2021 Free Software Foundation, Inc.
+## Copyright (C) 2017-2022 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 4c3a52af6a..77d20a5a7b 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-2021 Free Software Foundation, Inc.
+## Copyright (C) 2017-2022 Free Software Foundation, Inc.
 
 ## This file is part of GNU Emacs.
 
diff --git a/admin/quick-install-emacs b/admin/quick-install-emacs
index 475658ae93..9a73cf5a40 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-2021 Free Software Foundation, Inc.
+## Copyright (C) 2001-2022 Free Software Foundation, Inc.
 
 ## Author: Miles Bader <miles@gnu.org>
 
diff --git a/admin/unidata/Makefile.in b/admin/unidata/Makefile.in
index 701fb92b81..45bba85213 100644
--- a/admin/unidata/Makefile.in
+++ b/admin/unidata/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 2012-2021 Free Software Foundation, Inc.
+# Copyright (C) 2012-2022 Free Software Foundation, Inc.
 
 # Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
 #   National Institute of Advanced Industrial Science and Technology (AIST)
@@ -63,21 +63,21 @@ unidata.txt: ${srcdir}/UnicodeData.txt
 ## pretend that it does since other Makefiles assume that if charprop
 ## is up-to-date, the unifiles are too.
 ${unidir}/charprop.el: ${unifiles} ${srcdir}/unidata-gen.el | 
${srcdir}/unidata-gen.elc
-       $(AM_V_at)[ ! -f $@ ] || chmod +w $@
-       $(AM_V_GEN)${emacs} -L ${srcdir} -l unidata-gen \
+       $(AM_V_GEN)[ ! -f $@ ] || chmod +w $@
+       $(AM_V_at)${emacs} -L ${srcdir} -l unidata-gen \
          -f unidata-gen-charprop $@
 
 ${unifiles}: ${srcdir}/unidata-gen.el \
   ${srcdir}/UnicodeData.txt ${srcdir}/BidiMirroring.txt \
   ${srcdir}/BidiBrackets.txt | \
   ${srcdir}/unidata-gen.elc unidata.txt
-       $(AM_V_at)[ ! -f $@ ] || chmod +w $@
+       $(AM_V_GEN)[ ! -f $@ ] || chmod +w $@
        $(AM_V_at)${emacs} -L ${srcdir} -l unidata-gen \
          -f unidata-gen-file $@ ${srcdir}
 
 ${unidir}/emoji-labels.el: ${unidir}/../international/emoji.el \
          ${srcdir}/emoji-test.txt
-       $(AM_V_at)${emacs} -l emoji.el -f emoji--generate-file $@
+       $(AM_V_GEN)${emacs} -l emoji.el -f emoji--generate-file $@
 
 .PHONY: charscript.el
 charscript.el: ${unidir}/charscript.el
@@ -120,4 +120,3 @@ gen-clean:
 ## ref: https://lists.gnu.org/r/emacs-devel/2013-11/msg01029.html
 
 maintainer-clean: gen-clean distclean
-
diff --git a/admin/unidata/blocks.awk b/admin/unidata/blocks.awk
index 314ac3e939..48d8c873c7 100755
--- a/admin/unidata/blocks.awk
+++ b/admin/unidata/blocks.awk
@@ -1,6 +1,6 @@
 #!/usr/bin/awk -f
 
-## Copyright (C) 2015-2021 Free Software Foundation, Inc.
+## Copyright (C) 2015-2022 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 e704cb4526..3d605d5d64 100644
--- a/admin/unidata/emoji-zwj.awk
+++ b/admin/unidata/emoji-zwj.awk
@@ -1,6 +1,6 @@
 #!/usr/bin/awk -f
 
-## Copyright (C) 2020 Free Software Foundation, Inc.
+## Copyright (C) 2020, 2022 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 abd41e34a4..d6b5a476bb 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 0141b638fb..5a4b8e71a2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2022 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 86953838bd..5a04847a66 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-2021 Free Software Foundation, Inc.
+# Copyright 2013-2022 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/admin/update_autogen b/admin/update_autogen
index a54c5ace1d..bfbf9d15c2 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-2021 Free Software Foundation, Inc.
+## Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
 ## Author: Glenn Morris <rgm@gnu.org>
 ## Maintainer: emacs-devel@gnu.org
@@ -44,7 +44,7 @@ PD=${0%/*}
 [ "$PD" = "$0" ] && PD=.        # if PATH includes PWD
 
 ## This should be the admin directory.
-cd $PD
+cd $PD || exit
 cd ../
 [ -d admin ] || die "Could not locate admin directory"
 
@@ -53,7 +53,7 @@ cd ../
 usage ()
 {
     cat 1>&2 <<EOF
-Usage: ${PN} [-f] [-c] [-q] [-A dir] [-I] [-L] [-C] [-- make-flags]
+Usage: ${PN} [-f] [-c] [-q] [-A dir] [-L] [-C] [-- make-flags]
 Update some auto-generated files in the Emacs tree.
 By default, only does the versioned loaddefs-like files in lisp/.
 This requires a build.  Passes any non-option args to make (eg -- -j2).
@@ -63,8 +63,6 @@ Options:
     commit them (caution).
 -q: be quiet; only give error messages, not status messages.
 -A: only update autotools files, copying into specified dir.
--H: also update ChangeLog.${changelog_n}
--I: also update info/dir.
 -L: also update ldefs-boot.el.
 -C: start from a clean state.  Slower, but more correct.
 EOF
@@ -81,14 +79,10 @@ clean=
 autogendir=                     # was "autogen"
 ldefs_flag=1
 lboot_flag=
-info_flag=
-changelog_flag=
 
 ## Parameters.
 ldefs_in=lisp/loaddefs.el
 ldefs_out=lisp/ldefs-boot.el
-changelog_n=$(sed -n 's/CHANGELOG_HISTORY_INDEX_MAX *= *//p' Makefile.in)
-changelog_files="ChangeLog.$changelog_n"
 sources="configure.ac lib/Makefile.am"
 ## Files to copy into autogendir.
 ## Everything:
@@ -108,10 +102,10 @@ done
 
 tempfile=/tmp/$PN.$$
 
-trap "rm -f $tempfile 2> /dev/null" EXIT
+trap 'rm -f $tempfile 2> /dev/null' EXIT
 
 
-while getopts ":hcfqA:HCIL" option ; do
+while getopts ":hcfqA:CL" option ; do
     case $option in
         (h) usage ;;
 
@@ -127,10 +121,6 @@ while getopts ":hcfqA:HCIL" option ; do
 
         (C) clean=1 ;;
 
-        (H) changelog_flag=1 ;;
-
-        (I) info_flag=1 ;;
-
         (L) lboot_flag=1 ;;
 
         (\?) die "Bad option -$OPTARG" ;;
@@ -172,7 +162,7 @@ status ()
 echo "Checking input file status..."
 
 ## The lisp portion could be more permissive, eg only care about .el files.
-modified=$(status ${autogendir:+$sources} ${ldefs_flag:+lisp} 
${info_flag:+doc}) || die
+modified=$(status ${autogendir:+$sources} ${ldefs_flag:+lisp}) || die
 
 [ "$modified" ] && {
     echo "Locally modified: $modified"
@@ -235,61 +225,6 @@ commit ()
 }                               # function commit
 
 
-## No longer used since info/dir is now generated at install time if needed,
-## and is not in the repository any more.
-info_dir ()
-{
-    local basefile=build-aux/dir_top outfile=info/dir
-
-    echo "Regenerating info/dir..."
-
-    ## Header contains non-printing characters, so this is more
-    ## reliable than using echo.
-    rm -f $outfile
-    cp $basefile $outfile
-
-    local topic file dircat
-
-    ## FIXME inefficient looping.
-    for topic in "Texinfo documentation system" "Emacs" "GNU Emacs Lisp" \
-        "Emacs editing modes" "Emacs network features" "Emacs misc features" \
-        "Emacs lisp libraries"; do
-
-        cat - <<EOF >> $outfile
-
-$topic
-EOF
-        ## Bit faster than doc/*/*.texi.
-        for file in doc/emacs/emacs.texi doc/lispintro/*.texi \
-            doc/lispref/elisp.texi doc/misc/*.texi; do
-
-            ## FIXME do not ignore w32 if OS is w32.
-            case $file in
-                *-xtra.texi|*efaq-w32.texi) continue ;;
-            esac
-
-            dircat=$(sed -n -e 's/@value{emacsname}/Emacs/' -e 
's/^@dircategory //p' $file)
-
-            ## TODO warn about unknown topics (check-info in top-level
-            ## Makefile does this).
-            [ "$dircat" = "$topic" ] || continue
-
-            sed -n -e 's/@value{emacsname}/Emacs/' \
-                -e 's/@acronym{\([A-Z]*\)}/\1/' \
-                -e '/^@direntry/,/^@end direntry/ s/^\([^@]\)/\1/p' \
-                $file >> $outfile
-
-        done
-    done
-
-    local modified
-
-    modified=$(status $outfile) || die
-
-    commit "info/dir" $modified || die "commit error"
-}                               # function info_dir
-
-
 [ "$autogendir" ] && {
 
     cp $genfiles $autogendir/
@@ -306,9 +241,6 @@ EOF
 }                               # $autogendir
 
 
-[ "$info_flag" ] && info_dir
-
-
 [ "$ldefs_flag" ] || exit 0
 
 
@@ -383,14 +315,6 @@ modified=$(status $genfiles $ldefs_out $grammar_out) || die
 commit "loaddefs" $modified || die "commit error"
 
 
-## Less important than the other stuff, so do it last.
-[ ! "$changelog_flag" ] || {
-    make change-history-nocommit || die "make change-history error"
-    modified=$(status $changelog_files) || die
-    commit "ChangeLog" $modified || die "commit error"
-}
-
-
 exit 0
 
 ### update_autogen ends here
diff --git a/admin/upload-manuals b/admin/upload-manuals
index 52999c2997..1fa9865e65 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-2021 Free Software Foundation, Inc.
+## Copyright 2018-2022 Free Software Foundation, Inc.
 
 ## Author: Glenn Morris <rgm@gnu.org>
 ## Maintainer: emacs-devel@gnu.org
diff --git a/autogen.sh b/autogen.sh
index 531e5775f9..03f647e576 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-2021 Free Software Foundation, Inc.
+## Copyright (C) 2011-2022 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 e81d3ae7c2..1105a74983 100755
--- a/build-aux/config.guess
+++ b/build-aux/config.guess
@@ -4,7 +4,7 @@
 
 # shellcheck disable=SC2006,SC2268 # see below for rationale
 
-timestamp='2021-06-03'
+timestamp='2021-11-30'
 
 # 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
@@ -437,7 +437,7 @@ case 
$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in
        # This test works for both compilers.
        if test "$CC_FOR_BUILD" != no_compiler_found; then
            if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
-               (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+               (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \
                grep IS_64BIT_ARCH >/dev/null
            then
                SUN_ARCH=x86_64
@@ -1522,6 +1522,9 @@ EOF
     i*86:rdos:*:*)
        GUESS=$UNAME_MACHINE-pc-rdos
        ;;
+    i*86:Fiwix:*:*)
+       GUESS=$UNAME_MACHINE-pc-fiwix
+       ;;
     *:AROS:*:*)
        GUESS=$UNAME_MACHINE-unknown-aros
        ;;
diff --git a/build-aux/config.sub b/build-aux/config.sub
index d74fb6deac..5ba9a97d2c 100755
--- a/build-aux/config.sub
+++ b/build-aux/config.sub
@@ -4,7 +4,7 @@
 
 # shellcheck disable=SC2006,SC2268 # see below for rationale
 
-timestamp='2021-08-14'
+timestamp='2021-12-25'
 
 # 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
@@ -1020,6 +1020,11 @@ case $cpu-$vendor in
                ;;
 
        # Here we normalize CPU types with a missing or matching vendor
+       armh-unknown | armh-alt)
+               cpu=armv7l
+               vendor=alt
+               basic_os=${basic_os:-linux-gnueabihf}
+               ;;
        dpx20-unknown | dpx20-bull)
                cpu=rs6000
                vendor=bull
@@ -1121,7 +1126,7 @@ case $cpu-$vendor in
        xscale-* | xscalee[bl]-*)
                cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
                ;;
-       arm64-*)
+       arm64-* | aarch64le-*)
                cpu=aarch64
                ;;
 
@@ -1304,7 +1309,7 @@ esac
 if test x$basic_os != x
 then
 
-# First recognize some ad-hoc caes, or perhaps split kernel-os, or else just
+# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just
 # set os.
 case $basic_os in
        gnu/linux*)
@@ -1748,7 +1753,8 @@ case $os in
             | skyos* | haiku* | rdos* | toppers* | drops* | es* \
             | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
             | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
-            | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr*)
+            | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \
+            | fiwix* )
                ;;
        # This one is extra strict with allowed versions
        sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
diff --git a/build-aux/git-hooks/commit-msg b/build-aux/git-hooks/commit-msg
index cf0f74c644..bb4f358c5e 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-2021 Free Software Foundation, Inc.
+# Copyright 2014-2022 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 719bfefc50..a55004680f 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-2021 Free Software Foundation, Inc.
+# Copyright 2014-2022 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 dd8434479d..7dc36f2219 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-2021 Free Software Foundation, Inc.
+# Copyright 2019-2022 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 9ff15f6019..1c6847ae3b 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 2008-2022 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 30b2d78659..2ea2026171 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 2014-2022 Free Software Foundation, Inc.
 
 # Author: Paul Eggert
 
diff --git a/build-aux/make-info-dir b/build-aux/make-info-dir
index 256c9f025c..c29ea5088b 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-2021 Free Software Foundation, Inc.
+## Copyright (C) 2013-2022 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 e85e90af50..9f7379a603 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 2002-2022 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 e4e5e08641..2e5df8252d 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 2013-2022 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 fae3a5fb33..51b25dd0a5 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 2009-2022 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 e56eea44de..95cf06bb5c 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-2021 Free Software
+# Copyright (C) 1994-1995, 1997, 1999, 2001-2022 Free Software
 # Foundation, Inc.
 
 # This file is part of GNU Emacs.
diff --git a/config.bat b/config.bat
index cba7336099..29742eec52 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-2021 Free Software Foundation, Inc.
+rem   Copyright (C) 1994-1999, 2001-2022 Free Software Foundation, Inc.
 
 rem   This file is part of GNU Emacs.
 
@@ -283,6 +283,7 @@ If Exist execinfo.in.h update execinfo.in.h execinfo.in-h
 If Exist fcntl.in.h update fcntl.in.h fcntl.in-h
 If Exist getopt.in.h update getopt.in.h getopt.in-h
 If Exist getopt-cdefs.in.h update getopt-cdefs.in.h getopt-cdefs.in-h
+If Exist ieee754.in.h update ieee754.in.h ieee754.in-h
 If Exist inttypes.in.h update inttypes.in.h inttypes.in-h
 If Exist limits.in.h update limits.in.h limits.in-h
 If Exist signal.in.h update signal.in.h signal.in-h
@@ -293,6 +294,7 @@ If Exist stdint.in.h update stdint.in.h  stdint.in-h
 If Exist stdio.in.h update stdio.in.h stdio.in-h
 If Exist stdlib.in.h update stdlib.in.h stdlib.in-h
 If Exist string.in.h update string.in.h string.in-h
+If Exist sys_random.in.h update sys_random.in.h sys_random.in-h
 If Exist sys_select.in.h update sys_select.in.h sys_select.in-h
 If Exist sys_stat.in.h update sys_stat.in.h sys_stat.in-h
 If Exist sys_time.in.h update sys_time.in.h sys_time.in-h
@@ -308,10 +310,13 @@ rm -f makefile.tmp
 sed -f ../msdos/sedlibcf.inp < gnulib.mk-in > gnulib.tmp
 sed -f ../msdos/sedlibmk.inp < gnulib.tmp > gnulib.mk
 rm -f gnulib.tmp
-Rem Create .d files for new files in lib/
+Rem Create .d files for new files in lib/ and lib/malloc/
 If Not Exist deps\stamp mkdir deps
 for %%f in (*.c) do @call ..\msdos\depfiles.bat %%f
 echo deps-stamp > deps\stamp
+If Not Exist deps\malloc\stamp mkdir deps\malloc
+for %%f in (malloc\*.c) do @call ..\msdos\depfiles.bat %%f
+echo deps-stamp > deps\malloc\stamp
 cd ..
 rem   ----------------------------------------------------------------------
 Echo Configuring the lisp directory...
diff --git a/configure.ac b/configure.ac
index 9cf192d4ba..baf8c8018e 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-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 1994-1996, 1999-2022 Free Software Foundation, Inc.
 dnl
 dnl  This file is part of GNU Emacs.
 dnl
@@ -410,18 +410,19 @@ dnl This should be the last --with option, because 
--with-x is
 dnl added later on when we find the file name of X, and it's best to
 dnl keep them together visually.
 AC_ARG_WITH([x-toolkit],[AS_HELP_STRING([--with-x-toolkit=KIT],
- [use an X toolkit (KIT one of: yes or gtk, gtk2, gtk3, lucid or athena, 
no)])],
+ [use an X toolkit (KIT one of: yes or gtk, gtk2, gtk3, lucid or athena, 
motif, no)])],
 [        case "${withval}" in
            y | ye | yes )      val=gtk ;;
            n | no )            val=no  ;;
            l | lu | luc | luci | lucid )       val=lucid ;;
            a | at | ath | athe | athen | athena )      val=athena ;;
+           m | mo | mot | moti | motif )       val=motif ;;
            g | gt | gtk  )     val=gtk ;;
            gtk2  )     val=gtk2 ;;
            gtk3  )     val=gtk3 ;;
            * )
 AC_MSG_ERROR(['--with-x-toolkit=$withval' is invalid;
-this option's value should be 'yes', 'no', 'lucid', 'athena', 'gtk',
+this option's value should be 'yes', 'no', 'lucid', 'athena', 'motif', 'gtk',
 'gtk2' or 'gtk3'.  'yes' and 'gtk' are synonyms.
 'athena' and 'lucid' are synonyms.])
            ;;
@@ -448,6 +449,7 @@ OPTION_DEFAULT_ON([gif],[don't compile with GIF image 
support])
 OPTION_DEFAULT_ON([png],[don't compile with PNG image support])
 OPTION_DEFAULT_ON([rsvg],[don't compile with SVG image support])
 OPTION_DEFAULT_ON([webp],[don't compile with WebP image support])
+OPTION_DEFAULT_ON([sqlite3],[don't compile with sqlite3 support])
 OPTION_DEFAULT_ON([lcms2],[don't compile with Little CMS support])
 OPTION_DEFAULT_ON([libsystemd],[don't compile with libsystemd support])
 OPTION_DEFAULT_ON([cairo],[don't compile with Cairo drawing])
@@ -461,7 +463,7 @@ OPTION_DEFAULT_ON([harfbuzz],[don't use HarfBuzz for text 
shaping])
 OPTION_DEFAULT_ON([libotf],[don't use libotf for OpenType font support])
 OPTION_DEFAULT_ON([m17n-flt],[don't use m17n-flt for text shaping])
 
-OPTION_DEFAULT_ON([toolkit-scroll-bars],[don't use Xaw3d/GTK toolkit scroll 
bars])
+OPTION_DEFAULT_ON([toolkit-scroll-bars],[don't use Motif/Xaw3d/GTK toolkit 
scroll bars])
 OPTION_DEFAULT_ON([xaw3d],[don't use Xaw3d])
 OPTION_DEFAULT_ON([xim],[at runtime, default X11 XIM to off])
 OPTION_DEFAULT_ON([xdbe],[don't use X11 double buffering support])
@@ -469,6 +471,7 @@ AC_ARG_WITH([ns],[AS_HELP_STRING([--with-ns],
 [use Nextstep (macOS Cocoa or GNUstep) windowing system.
 On by default on macOS.])],[],[with_ns=maybe])
 OPTION_DEFAULT_OFF([w32], [use native MS Windows GUI in a Cygwin build])
+OPTION_DEFAULT_OFF([pgtk], [use pure GTK build without reliance on X libs 
(Wayland support) (requires cairo) - Experimental])
 
 OPTION_DEFAULT_ON([gpm],[don't use -lgpm for mouse support on a GNU/Linux 
console])
 OPTION_DEFAULT_ON([dbus],[don't compile with D-Bus support])
@@ -487,7 +490,7 @@ OPTION_DEFAULT_ON([modules],[don't compile with dynamic 
modules support])
 OPTION_DEFAULT_ON([threads],[don't compile with elisp threading support])
 OPTION_DEFAULT_OFF([native-compilation],[compile with Emacs Lisp native 
compiler support])
 OPTION_DEFAULT_OFF([cygwin32-native-compilation],[use native compilation on 
32-bit Cygwin])
-OPTION_DEFAULT_OFF([xinput2],[use version 2.0 the X Input Extension for input])
+OPTION_DEFAULT_OFF([xinput2],[use version 2 of the X Input Extension for 
input])
 
 AC_ARG_WITH([file-notification],[AS_HELP_STRING([--with-file-notification=LIB],
  [use a file notification library (LIB one of: yes, inotify, kqueue, gfile, 
w32, no)])],
@@ -1196,8 +1199,8 @@ fi)
 
 dnl Automake replacements.
 AC_DEFUN([AM_CONDITIONAL],
-  [$2 && $1=1 || $1=
-   AC_SUBST([$1])])
+  [$2 && $1_CONDITION=1 || $1_CONDITION=
+   AC_SUBST([$1_CONDITION])])
 
 dnl Prefer silent make output.  For verbose output, use
 dnl 'configure --disable-silent-rules' or 'make V=1' .
@@ -1839,8 +1842,14 @@ AC_SUBST(AUTO_DEPEND)
 ## window-system-specific substs.
 
 window_system=none
+
+if test "${with_pgtk}" = "yes"; then
+  window_system=pgtk
+fi
+
+
 AC_PATH_X
-if test "$no_x" != yes; then
+if test "$no_x" != yes && test "${with_pgtk}" != "yes"; then
   window_system=x11
 fi
 
@@ -2271,6 +2280,7 @@ term_header=
 HAVE_X_WINDOWS=no
 HAVE_X11=no
 USE_X_TOOLKIT=none
+HAVE_PGTK=no
 
 case "${window_system}" in
   x11 )
@@ -2303,10 +2313,18 @@ dnl use the toolkit if we have gtk, or X11R5 or newer.
   w32 )
     term_header=w32term.h
   ;;
+  pgtk )
+    term_header=pgtkterm.h
+    with_gtk3=yes
+    USE_X_TOOLKIT=none
+    HAVE_PGTK=yes
+    AC_DEFINE([HAVE_PGTK], 1, [Define to 1 if you have pure Gtk+-3.])
+  ;;
   haiku )
     term_header=haikuterm.h
   ;;
 esac
+AC_SUBST(HAVE_PGTK)
 
 if test "$window_system" = none && test "X$with_x" != "Xno"; then
    AC_CHECK_PROG(HAVE_XSERVER, X, true, false)
@@ -2319,7 +2337,7 @@ if test "$window_system" = none && test "X$with_x" != 
"Xno"; then
    then
         AC_MSG_ERROR([You seem to be running X, but no X development libraries
 were found.  You should install the relevant development files for X
-and for the toolkit you want, such as Gtk+.  Also make
+and for the toolkit you want, such as Gtk+ or Motif.  Also make
 sure you have development files for image handling, i.e.
 tiff, gif, jpeg, png and xpm.
 If you are sure you want Emacs compiled without X window support, pass
@@ -2638,7 +2656,8 @@ fi
 ### Use -lrsvg-2 if available, unless '--with-rsvg=no' is specified.
 HAVE_RSVG=no
 if test "${HAVE_X11}" = "yes" || test "${HAVE_NS}" = "yes" \
-   || test "${opsys}" = "mingw32" || test "${HAVE_BE_APP}" = "yes"; then
+   || test "${opsys}" = "mingw32" || test "${HAVE_BE_APP}" = "yes" \
+   || test "${window_system}" = "pgtk"; then
   if test "${with_rsvg}" != "no"; then
     RSVG_REQUIRED=2.14.0
     RSVG_MODULE="librsvg-2.0 >= $RSVG_REQUIRED"
@@ -2663,7 +2682,7 @@ HAVE_WEBP=no
 if test "${with_webp}" != "no"; then
    if test "${HAVE_X11}" = "yes" || test "${opsys}" = "mingw32" \
    || test "${HAVE_W32}" = "yes" || test "${HAVE_NS}" = "yes" \
-   || test "${HAVE_BE_APP}" = "yes"; then
+   || test "${HAVE_BE_APP}" = "yes" || test "${HAVE_PGTK}" = "yes"; then
       WEBP_REQUIRED=0.6.0
       WEBP_MODULE="libwebp >= $WEBP_REQUIRED"
 
@@ -2681,9 +2700,30 @@ if test "${with_webp}" != "no"; then
    fi
 fi
 
+### Use -lsqlite3 if available, unless '--with-sqlite3=no'
+HAVE_SQLITE3=no
+if test "${with_sqlite3}" != "no"; then
+   AC_CHECK_LIB(sqlite3, sqlite3_open_v2, HAVE_SQLITE3=yes, HAVE_SQLITE3=no)
+   if test "$HAVE_SQLITE3" = "yes"; then
+     SQLITE3_LIBS=-lsqlite3
+     AC_SUBST(SQLITE3_LIBS)
+     LIBS="$SQLITE3_LIBS $LIBS"
+     AC_DEFINE(HAVE_SQLITE3, 1, [Define to 1 if you have the libsqlite3 
library (-lsqlite).])
+     # Windows loads libsqlite dynamically
+     if test "${opsys}" = "mingw32"; then
+        SQLITE3_LIBS=
+     fi
+     AC_CHECK_LIB(sqlite3, sqlite3_load_extension,
+         HAVE_SQLITE3_LOAD_EXTENSION=yes, HAVE_SQLITE3_LOAD_EXTENSION=no)
+     if test "$HAVE_SQLITE3_LOAD_EXTENSION" = "yes"; then
+       AC_DEFINE(HAVE_SQLITE3_LOAD_EXTENSION, 1, [Define to 1 if sqlite3 
supports loading extensions.])
+     fi
+   fi
+fi
+
 HAVE_IMAGEMAGICK=no
 if test "${HAVE_X11}" = "yes" || test "${HAVE_NS}" = "yes" || test 
"${HAVE_W32}" = "yes" || \
-   test "${HAVE_BE_APP}" = "yes"; then
+   test "${HAVE_BE_APP}" = "yes" || test "${window_system}" = "pgtk"; then
   if test "${with_imagemagick}" != "no"; then
     if test -n "$BREW"; then
       # Homebrew doesn't link ImageMagick 6 by default, so make sure
@@ -2766,6 +2806,9 @@ if test "${opsys}" != "mingw32"; then
         AC_DEFINE([GLIB_DISABLE_DEPRECATION_WARNINGS], [1],
           [Define to 1 to disable Glib deprecation warnings.])
        fi
+       if test "$window_system" = pgtk; then
+         GLIB_GSETTINGS
+       fi
     else
        check_gtk2=yes
        gtk3_pkg_errors="$GTK_PKG_ERRORS "
@@ -2907,6 +2950,15 @@ AC_SUBST(XWIDGETS_OBJ)
 CFLAGS=$OLD_CFLAGS
 LIBS=$OLD_LIBS
 
+PGTK_OBJ=
+PGTK_LIBS=
+if test "$window_system" = "pgtk"; then
+  PGTK_OBJ="pgtkfns.o pgtkterm.o pgtkselect.o pgtkmenu.o pgtkim.o xsettings.o"
+  PGTK_LIBS="$GTK_LIBS"
+fi
+AC_SUBST(PGTK_OBJ)
+AC_SUBST(PGTK_LIBS)
+
 dnl D-Bus has been tested under GNU/Linux only.  Must be adapted for
 dnl other platforms.
 HAVE_DBUS=no
@@ -2936,7 +2988,7 @@ AC_SUBST(DBUS_OBJ)
 
 dnl GSettings has been tested under GNU/Linux only.
 HAVE_GSETTINGS=no
-if test "${HAVE_X11}" = "yes" && test "${with_gsettings}" = "yes"; then
+if test "${HAVE_X11}" = "yes" -o "${window_system}" = "pgtk" && test 
"${with_gsettings}" = "yes"; then
    EMACS_CHECK_MODULES([GSETTINGS], [gio-2.0 >= 2.26])
    if test "$HAVE_GSETTINGS" = "yes"; then
       old_CFLAGS=$CFLAGS
@@ -2966,11 +3018,12 @@ if test "${HAVE_X11}" = "yes" && test 
"${with_gsettings}" = "yes"; then
       LIBS=$old_LIBS
    fi
 fi
+AC_SUBST(HAVE_GSETTINGS)
 
 dnl GConf has been tested under GNU/Linux only.
 dnl The version is really arbitrary, it is about the same age as Gtk+ 2.6.
 HAVE_GCONF=no
-if test "${HAVE_X11}" = "yes" && test "${with_gconf}" != "no"; then
+if test "${HAVE_X11}" = "yes" -o "${window_system}" = "pgtk" && test 
"${with_gconf}" != "no"; then
    EMACS_CHECK_MODULES([GCONF], [gconf-2.0 >= 2.13])
    if test "$HAVE_GCONF" = yes; then
       AC_DEFINE(HAVE_GCONF, 1, [Define to 1 if using GConf.])
@@ -3369,7 +3422,7 @@ if test "${HAVE_XIM}" != "no"; then
 XrmDatabase db;
 char *res_name;
 char *res_class;
-XIMProc  callback;
+XIDProc *callback;
 XPointer *client_data;
 #ifndef __GNUC__
 /* If we're not using GCC, it's probably not XFree86, and this is
@@ -3425,6 +3478,23 @@ if test "${HAVE_X11}" = "yes"; then
     fi
   fi
 fi
+
+if test "$window_system" = "pgtk"; then
+  CAIRO_REQUIRED=1.12.0
+  CAIRO_MODULE="cairo >= $CAIRO_REQUIRED"
+  EMACS_CHECK_MODULES(CAIRO, $CAIRO_MODULE)
+  if test $HAVE_CAIRO = yes; then
+    AC_DEFINE(USE_CAIRO, 1, [Define to 1 if using cairo.])
+  else
+    AC_MSG_ERROR([cairo required but not found.])
+  fi
+
+  CFLAGS="$CFLAGS $CAIRO_CFLAGS"
+  LIBS="$LIBS $CAIRO_LIBS"
+  AC_SUBST(CAIRO_CFLAGS)
+  AC_SUBST(CAIRO_LIBS)
+fi
+
 if test "${HAVE_BE_APP}" = "yes"; then
   if test "${with_be_cairo}" != "no"; then
     CAIRO_REQUIRED=1.8.0
@@ -3561,10 +3631,34 @@ if test "${HAVE_X11}" = "yes"; then
     fi
   fi
 else # "${HAVE_X11}" != "yes"
-  HAVE_XFT=no
-  HAVE_FREETYPE=no
-  HAVE_LIBOTF=no
-  HAVE_M17N_FLT=no
+  if test $window_system = pgtk; then
+    EMACS_CHECK_MODULES([FONTCONFIG], [fontconfig >= 2.2.0])
+    EMACS_CHECK_MODULES([FREETYPE], [freetype2])
+    if test "$HAVE_FONTCONFIG" != yes -o "$HAVE_FREETYPE" != yes; then
+      AC_MSG_ERROR(fontconfig and freetype is required.)
+    fi
+    HAVE_LIBOTF=no
+    AC_DEFINE(HAVE_FREETYPE, 1,
+             [Define to 1 if using the freetype and fontconfig libraries.])
+    if test "${with_libotf}" != "no"; then
+      EMACS_CHECK_MODULES([LIBOTF], [libotf])
+      if test "$HAVE_LIBOTF" = "yes"; then
+       AC_DEFINE(HAVE_LIBOTF, 1, [Define to 1 if using libotf.])
+       AC_CHECK_LIB(otf, OTF_get_variation_glyphs,
+                    HAVE_OTF_GET_VARIATION_GLYPHS=yes,
+                    HAVE_OTF_GET_VARIATION_GLYPHS=no)
+       if test "${HAVE_OTF_GET_VARIATION_GLYPHS}" = "yes"; then
+         AC_DEFINE(HAVE_OTF_GET_VARIATION_GLYPHS, 1,
+                   [Define to 1 if libotf has OTF_get_variation_glyphs.])
+       fi
+      fi
+    fi
+  else
+    HAVE_XFT=no
+    HAVE_FREETYPE=no
+    HAVE_LIBOTF=no
+    HAVE_M17N_FLT=no
+  fi
 fi   # "${HAVE_X11}" != "yes"
 
 HAVE_HARFBUZZ=no
@@ -3576,6 +3670,7 @@ else
   harfbuzz_required_ver=0.9.42
 fi
 if test "${HAVE_X11}" = "yes" && test "${HAVE_FREETYPE}" = "yes" \
+        || test "$window_system" = "pgtk" \
         || test "${HAVE_W32}" = "yes"; then
   if test "${with_harfbuzz}" != "no"; then
     EMACS_CHECK_MODULES([HARFBUZZ], [harfbuzz >= $harfbuzz_required_ver])
@@ -3763,7 +3858,8 @@ AC_SUBST(LIBXPM)
 HAVE_JPEG=no
 LIBJPEG=
 if test "${HAVE_X11}" = "yes" || test "${HAVE_W32}" = "yes" \
-   || test "${HAVE_NS}" = "yes" || test "${HAVE_BE_APP}" = "yes"; then
+   || test "${HAVE_NS}" = "yes" || test "${HAVE_BE_APP}" = "yes" \
+   || test "$window_system" = "pgtk"; then
   if test "${with_jpeg}" != "no"; then
     AC_CACHE_CHECK([for jpeglib 6b or later],
       [emacs_cv_jpeglib],
@@ -4081,7 +4177,8 @@ if test "${with_png}" != no; then
   if test "$opsys" = mingw32; then
     AC_CHECK_HEADER([png.h], [HAVE_PNG=yes])
   elif test "${HAVE_X11}" = "yes" || test "${HAVE_W32}" = "yes" \
-       || test "${HAVE_NS}" = "yes" || test "${HAVE_BE_APP}" = "yes"; then
+       || test "${HAVE_NS}" = "yes" || test "${HAVE_BE_APP}" = "yes" \
+       || test "$window_system" = "pgtk"; then
     EMACS_CHECK_MODULES([PNG], [libpng >= 1.0.0])
     if test $HAVE_PNG = yes; then
       LIBPNG=$PNG_LIBS
@@ -4156,7 +4253,8 @@ if test "${opsys}" = "mingw32"; then
     AC_DEFINE(HAVE_TIFF, 1, [Define to 1 if you have the tiff library 
(-ltiff).])
   fi
 elif test "${HAVE_X11}" = "yes" || test "${HAVE_W32}" = "yes" \
-     || test "${HAVE_NS}" = "yes" || test "${HAVE_BE_APP}" = "yes"; then
+     || test "${HAVE_NS}" = "yes" || test "${HAVE_BE_APP}" = "yes" \
+     || test "$window_system" = "pgtk"; then
   if test "${with_tiff}" != "no"; then
     AC_CHECK_HEADER(tiffio.h,
       [tifflibs="-lz -lm"
@@ -4186,7 +4284,7 @@ if test "${opsys}" = "mingw32"; then
   fi
 elif test "${HAVE_X11}" = "yes" && test "${with_gif}" != "no" \
         || test "${HAVE_W32}" = "yes" || test "${HAVE_NS}" = "yes" \
-       || test "${HAVE_BE_APP}" = "yes"; then
+       || test "${HAVE_BE_APP}" = "yes" || test "$window_system" = "pgtk"; then
   AC_CHECK_HEADER(gif_lib.h,
 # EGifPutExtensionLast only exists from version libungif-4.1.0b1.
 # Earlier versions can crash Emacs, but version 5.0 removes 
EGifPutExtensionLast.
@@ -4389,11 +4487,18 @@ if test "${HAVE_X11}" = "yes" && test "${with_xinput2}" 
!= "no"; then
        [AC_CHECK_LIB(Xi, XIGrabButton, HAVE_XINPUT2=yes)])
    fi
    if test $HAVE_XINPUT2 = yes; then
-     AC_DEFINE(HAVE_XINPUT2, 1, [Define to 1 if the X Input Extension version 
2.0 is present.])
+     AC_DEFINE(HAVE_XINPUT2, 1, [Define to 1 if the X Input Extension version 
2.0 or later is present.])
      if test "$USE_GTK_TOOLKIT" = "GTK2"; then
        AC_MSG_WARN([You are building Emacs with GTK+ 2 and the X Input 
Extension version 2.
 This might lead to problems if your version of GTK+ is not built with support 
for XInput 2.])
      fi
+     # Detect both faulty installations of libXi where gesture event
+     # types are defined but gesture event structures are not, and
+     # also where gesture event structures are empty.
+     AC_CHECK_MEMBERS([XIGesturePinchEvent.delta_unaccel_y],
+       [AC_DEFINE(HAVE_USABLE_XI_GESTURE_PINCH_EVENT, 1,
+         [Define to 1 if XInput headers define gesture structures 
correctly.])],
+       [], [[#include <X11/extensions/XInput2.h>]])
    fi
 fi
 AC_SUBST(XINPUT_CFLAGS)
@@ -5426,6 +5531,7 @@ case $opsys in
 #if defined __i386__ || defined __sparc__ || defined __mc68000__ \
   || defined __alpha__ || defined __mips__ || defined __s390__ \
   || defined __arm__ || defined __powerpc__ || defined __amd64__ \
+  || defined __x86_64__ \
   || defined __ia64__ || defined __sh__
 /* ok */
 #else
@@ -5674,7 +5780,7 @@ fi
 
 version=$PACKAGE_VERSION
 
-copyright="Copyright (C) 2021 Free Software Foundation, Inc."
+copyright="Copyright (C) 2022 Free Software Foundation, Inc."
 AC_DEFINE_UNQUOTED(COPYRIGHT, ["$copyright"],
   [Short copyright string for this version of Emacs.])
 AC_SUBST(copyright)
@@ -5690,6 +5796,7 @@ AC_SUBST(prefix)
 AC_SUBST(exec_prefix)
 AC_SUBST(bindir)
 AC_SUBST(datadir)
+AC_SUBST(gsettingsschemadir)
 AC_SUBST(sharedstatedir)
 AC_SUBST(libexecdir)
 AC_SUBST(mandir)
@@ -5753,13 +5860,13 @@ if test "${HAVE_X_WINDOWS}" = "yes" ; then
   fi
 fi
 
+if test "${window_system}" = "pgtk"; then
+   FONT_OBJ="ftfont.o ftcrfont.o"
+fi
+
 if test "${HAVE_BE_APP}" = "yes" ; then
-  if test "${HAVE_FREETYPE}" = "yes" || \
-     test "${HAVE_CAIRO}" = "yes"; then
-     FONT_OBJ="$FONT_OBJ ftfont.o"
-  fi
   if test "${HAVE_CAIRO}" = "yes"; then
-    FONT_OBJ="$FONT_OBJ ftcrfont.o"
+    FONT_OBJ="$FONT_OBJ ftfont.o ftcrfont.o"
   fi
 fi
 
@@ -6153,8 +6260,8 @@ optsep=
 emacs_config_features=
 for opt in ACL BE_APP CAIRO DBUS FREETYPE GCONF GIF GLIB GMP GNUTLS GPM 
GSETTINGS \
  HARFBUZZ IMAGEMAGICK JPEG JSON LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 \
- M17N_FLT MODULES NATIVE_COMP NOTIFY NS OLDXMENU PDUMPER PNG RSVG SECCOMP \
- SOUND THREADS TIFF TOOLKIT_SCROLL_BARS \
+ M17N_FLT MODULES NATIVE_COMP NOTIFY NS OLDXMENU PDUMPER PGTK PNG RSVG SECCOMP 
\
+ SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS \
  UNEXEC WEBP X11 XAW3D XDBE XFT XIM XINPUT2 XPM XWIDGETS X_TOOLKIT \
  ZLIB; do
 
@@ -6201,6 +6308,7 @@ AS_ECHO(["  Does Emacs use -lXaw3d?                       
          ${HAVE_XAW3D
   Does Emacs use a png library?                           ${HAVE_PNG} $LIBPNG
   Does Emacs use -lrsvg-2?                                ${HAVE_RSVG}
   Does Emacs use -lwebp?                                  ${HAVE_WEBP}
+  Does Emacs use -lsqlite3?                               ${HAVE_SQLITE3}
   Does Emacs use cairo?                                   ${HAVE_CAIRO}
   Does Emacs use -llcms2?                                 ${HAVE_LCMS2}
   Does Emacs use imagemagick?                             ${HAVE_IMAGEMAGICK}
diff --git a/doc/emacs/ChangeLog.1 b/doc/emacs/ChangeLog.1
index bc4dbd4705..c1c5f5407d 100644
--- a/doc/emacs/ChangeLog.1
+++ b/doc/emacs/ChangeLog.1
@@ -10919,7 +10919,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1993-1999, 2001-2021 Free Software Foundation, Inc.
+  Copyright (C) 1993-1999, 2001-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/doc/emacs/Makefile.in b/doc/emacs/Makefile.in
index dde3ae83c1..a24c03ead3 100644
--- a/doc/emacs/Makefile.in
+++ b/doc/emacs/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 1994, 1996-2021 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1996-2022 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/doc/emacs/abbrevs.texi b/doc/emacs/abbrevs.texi
index c83da8aaec..9f339a0357 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2022 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Abbrevs
@@ -274,7 +274,7 @@ Edit a list of abbrevs; you can add, alter or remove 
definitions.
 @example
 @var{various other tables@dots{}}
 (lisp-mode-abbrev-table)
-"dk"          0    "define-key"
+"ks"          0    "keymap-set"
 (global-abbrev-table)
 "dfn"         0    "definition"
 @end example
diff --git a/doc/emacs/ack.texi b/doc/emacs/ack.texi
index d771393ffa..d0f2cc343b 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--2021 Free Software Foundation, Inc.
+@c Copyright (C) 1994--1997, 1999--2022 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 3b02187b5c..bb88fddc04 100644
--- a/doc/emacs/anti.texi
+++ b/doc/emacs/anti.texi
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8 -*-
 @c This is part of the Emacs manual.
-@c Copyright (C) 2005--2021 Free Software Foundation, Inc.
+@c Copyright (C) 2005--2022 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 
 @node Antinews
diff --git a/doc/emacs/arevert-xtra.texi b/doc/emacs/arevert-xtra.texi
index 5dede6246c..a384e562e8 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--2021 Free Software Foundation, Inc.
+@c Copyright (C) 2004--2022 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 dc4e218d37..85d79913af 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2022 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 c4fa0d64ed..196a28be5a 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 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 c4e5bc32b7..8a8584689f 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 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 f9ea1b390f..5b68b1ef9f 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 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 aec2e6cc5a..7c41adf029 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--2021 Free Software Foundation, Inc.
+@c Copyright (C) 2004--2022 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 18de721e28..0ba8b2cbd0 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 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 86c04c84a2..5c444fc648 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2022 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Emacs Invocation
@@ -756,6 +756,10 @@ On MS-Windows, if you set this variable, Emacs will load 
and initialize
 the network library at startup, instead of waiting until the first
 time it is required.
 
+@item WAYLAND_DISPLAY
+Pgtk Emacs (built with @option{--with-pgtk}) can run on Wayland natively.
+@env{WAYLAND_DISPLAY} specifies the connection to the compositor.
+
 @item emacs_dir
 On MS-Windows, @env{emacs_dir} is a special environment variable, which
 indicates the full path of the directory in which Emacs is installed.
diff --git a/doc/emacs/commands.texi b/doc/emacs/commands.texi
index f56f820b39..431cc2e5ce 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2022 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 917f6f4921..b2dd5eb698 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Customization
@@ -1707,7 +1707,6 @@ circumstances.
 @vindex minibuffer-local-completion-map
 @vindex minibuffer-local-must-match-map
 @vindex minibuffer-local-filename-completion-map
-@vindex minibuffer-local-filename-must-match-map
   The minibuffer has its own set of local keymaps; they contain various
 completion and exit commands.
 
@@ -1723,10 +1722,9 @@ just like @key{RET}.
 @code{minibuffer-local-must-match-map} is for strict completion and
 for cautious completion.
 @item
-@code{minibuffer-local-filename-completion-map} and
-@code{minibuffer-local-filename-must-match-map} are like the two
-previous ones, but they are specifically for file name completion.
-They do not bind @key{SPC}.
+@code{minibuffer-local-filename-completion-map} is like the two
+previous ones, but specifically for file name completion.
+It does not bind @key{SPC}.
 @end itemize
 
 By default, @key{TAB}, @key{SPC} and @key{?} do completion in
@@ -2567,10 +2565,9 @@ Do the same thing for Lisp mode only.
 Redefine all keys which now run @code{next-line} in Fundamental mode
 so that they run @code{forward-line} instead.
 
-@findex substitute-key-definition
+@findex keymap-substitute
 @example
-(substitute-key-definition 'next-line 'forward-line
-                           global-map)
+(keymap-substitute global-map 'next-line 'forward-line)
 @end example
 
 @item
diff --git a/doc/emacs/dired-xtra.texi b/doc/emacs/dired-xtra.texi
index fc8130d8e6..454abcae4c 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--2021 Free Software Foundation, Inc.
+@c Copyright (C) 2004--2022 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 704850e584..700b3f2191 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Dired
@@ -742,6 +742,15 @@ never creates such missing directories;  the value 
@code{always},
 means Dired automatically creates them; the value @code{ask}
 means Dired asks you for confirmation before creating them.
 
+@vindex dired-create-destination-dirs-on-trailing-dirsep
+If the option @code{dired-create-destination-dirs-on-trailing-dirsep}
+is non-@code{nil} in addition to @code{dired-create-destination-dirs},
+a trailing directory separator at the destination directory is treated
+specially.  In that case, when copying to @samp{test/} and no
+directory @samp{test} exists already, it will be created and the
+specified source files or directories are copied into the newly
+created directory.
+
 @vindex dired-copy-preserve-time
 If @code{dired-copy-preserve-time} is non-@code{nil}, then copying
 with this command preserves the modification time of the old file in
@@ -784,6 +793,14 @@ which to move the files (this is like the shell command 
@command{mv}).
 The option @code{dired-create-destination-dirs} controls whether Dired
 should create non-existent directories in @var{new}.
 
+The option @code{dired-create-destination-dirs-on-trailing-dirsep},
+when set in addition to @code{dired-create-destination-dirs}, controls
+wether a trailing directory separator at the destination is treated
+specially.  In that case, when renaming a directory @samp{old} to
+@samp{new/} and no directory @samp{new} exists already, it will be
+created and @samp{old} is moved into the newly created directory.
+Otherwise, @samp{old} is renamed to @samp{new}.
+
 Dired automatically changes the visited file name of buffers associated
 with renamed files so that they refer to the new names.
 
@@ -1567,6 +1584,14 @@ rotation is lossless, and uses an external utility called
 @node Misc Dired Features
 @section Other Dired Features
 
+@vindex dired-free-space
+  By default, Dired will display the available space on the disk in
+the first line.  This is the @code{first} value of the
+@code{dired-free-space} variable.  If you set this to
+@code{separate} instead, Dired will display this on a separate line
+(including the space the files in the current directory takes).  If
+you set this to @code{nil}, the free space isn't displayed at all.
+
 @kindex + @r{(Dired)}
 @findex dired-create-directory
   The command @kbd{+} (@code{dired-create-directory}) reads a
diff --git a/doc/emacs/display.texi b/doc/emacs/display.texi
index 90044b1d4b..4fcd2a3f7d 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 Free Software
 @c Foundation, Inc.
 
 @c See file emacs.texi for copying conditions.
@@ -642,24 +642,41 @@ apply them to specific text when you want the effects 
they produce.
 @item default
 This face is used for ordinary text that doesn't specify any face.
 Its background color is used as the frame's background color.
+
 @item bold
 This face uses a bold variant of the default font.
+
 @item italic
 This face uses an italic variant of the default font.
+
 @item bold-italic
 This face uses a bold italic variant of the default font.
+
 @item underline
 This face underlines text.
+
 @item fixed-pitch
 This face forces use of a fixed-width font.  It's reasonable to
 customize this face to use a different fixed-width font, if you like,
 but you should not make it a variable-width font.
+
 @item fixed-pitch-serif
 This face is like @code{fixed-pitch}, except the font has serifs and
 looks more like traditional typewriting.
+
 @cindex @code{variable-pitch} face
 @item variable-pitch
-This face forces use of a variable-width font.
+This face forces use of a variable-width (i.e., proportional) font.
+The font size picked for this face matches the font picked for the
+default (usually fixed-width) font.
+
+@item variable-pitch-text
+This is like the @code{variable-pitch} face (from which it inherits),
+but is slightly larger.  A proportional font of the same height as a
+monospace font usually appears visually smaller, and can therefore be
+harder to read.  When displaying longer texts, this face can be a good
+choice over the (slightly smaller) @code{variable-pitch} face.
+
 @cindex @code{shadow} face
 @item shadow
 This face is used for making the text less noticeable than the surrounding
@@ -886,6 +903,20 @@ prefix argument.
 @code{text-scale-mode} if the current font scaling is other than 1,
 and disable it otherwise.
 
+@cindex pinch to scale
+@findex text-scale-pinch
+  The command @code{text-scale-pinch} increases or decreases the text
+scale based on the distance between fingers on a touchpad when a pinch
+gesture is performed by placing two fingers on a touchpad and moving
+them towards or apart from each other.  This is only available on some
+systems with supported hardware.
+
+@findex mouse-wheel-text-scale
+  The command @code{mouse-wheel-text-scale} also changes the text
+scale.  Normally, it is run when you press @key{Ctrl} while moving the
+mouse wheel.  The text scale is increased when the wheel is moved
+downwards, and it is decreased when the wheel is moved upwards.
+
 @node Font Lock
 @section Font Lock mode
 @cindex Font Lock mode
@@ -1673,6 +1704,12 @@ characters more prominent on display.  @xref{Glyphless 
Chars,,
 Glyphless Character Display, elisp, The Emacs Lisp Reference Manual},
 for details.
 
+@findex glyphless-display-mode
+  The @code{glyphless-display-mode} minor mode can be used to toggle
+the display of glyphless characters in the current buffer.  The
+glyphless characters will be displayed as boxes with acronyms of their
+names inside.
+
 @cindex curly quotes, and terminal capabilities
 @cindex curved quotes, and terminal capabilities
 @cindex @code{homoglyph} face
diff --git a/doc/emacs/emacs-xtra.texi b/doc/emacs/emacs-xtra.texi
index 2d511bffbc..fbc1e1228e 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--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 2004--2022 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 ce92435ae7..ad0fa5f0cd 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--2021 Free Software Foundation,
+Copyright @copyright{} 1985--1987, 1993--2022 Free Software Foundation,
 Inc.
 
 @quotation
@@ -345,14 +345,14 @@ Cut and Paste Operations on Graphical Displays
 
 Registers
 
-* Position Registers::       Saving positions in registers.
-* Text Registers::           Saving text in registers.
-* Rectangle Registers::      Saving rectangles in registers.
-* Configuration Registers::  Saving window configurations in registers.
-* Number Registers::         Numbers in registers.
-* File Registers::           File names in registers.
-* Keyboard Macro Registers:: Keyboard macros in registers.
-* Bookmarks::                Bookmarks are like registers, but persistent.
+* Position Registers::        Saving positions in registers.
+* Text Registers::            Saving text in registers.
+* Rectangle Registers::       Saving rectangles in registers.
+* Configuration Registers::   Saving window configurations in registers.
+* Number Registers::          Numbers in registers.
+* File and Buffer Registers:: File and buffer names in registers.
+* Keyboard Macro Registers::  Keyboard macros in registers.
+* Bookmarks::                 Bookmarks are like registers, but persistent.
 
 Controlling the Display
 
diff --git a/doc/emacs/emerge-xtra.texi b/doc/emacs/emerge-xtra.texi
index 7bf24151e5..d7d94c8b84 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--2021 Free Software Foundation, Inc.
+@c Copyright (C) 2004--2022 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 0476466da5..6069da0380 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 2001--2022 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 b7016b0057..84eb7275da 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 1999--2022 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 7feebddee8..d2704e25d6 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2022 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 c8efd56c37..fc20d8ea35 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--2021 Free Software Foundation, Inc.
+@c Copyright (C) 2004--2022 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 c14ada2957..ce43408101 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 1999--2022 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 9c06bcc4af..7e0c84d723 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2022 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 4d48dcdb8e..58cc6bb664 100644
--- a/doc/emacs/gnu.texi
+++ b/doc/emacs/gnu.texi
@@ -1,4 +1,4 @@
-@c Copyright (C) 1985--1987, 1993, 1995, 2001--2021 Free Software
+@c Copyright (C) 1985--1987, 1993, 1995, 2001--2022 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 a41804b233..eeae379e06 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 Free Software Foundation, Inc.
+@c Copyright (C) 2021--2022 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Haiku
 @appendix Emacs and Haiku
@@ -32,7 +32,7 @@ Haiku-specific application metadata, with the name 
@code{Emacs}.
 @cindex tty Emacs in haiku
   If you are launching Emacs from the Tracker, or want to make the
 Tracker open files using Emacs, you should use the binary named
-@code{Emacs}; ff you are going to use Emacs in the terminal, or wish
+@code{Emacs}; if you are going to use Emacs in the terminal, or wish
 to launch separate instances of Emacs, or do not care for the
 aforementioned system integration features, use the binary named
 @code{emacs} instead.
@@ -96,6 +96,18 @@ the nil value, and Emacs will use its own implementation of 
tooltips.
 the menu bar, so help text in the menu bar will display in the echo
 area instead.
 
+@cindex X resources on Haiku
+  Unlike the X window system, Haiku does not have a system-wide
+resource database.  Since many important options are specified via
+X resources (@pxref{X Resources}), an emulation is provided: upon
+startup, Emacs will load a file named @file{GNU Emacs} inside the user
+configuration directory (normally @file{/boot/home/config/settings}),
+which should be a flattened system message where keys and values are
+both strings, and correspond to attributes and their values
+respectively.
+
+You can create such a file with the @command{xmlbmessage} tool.
+
 @subsection What to do when Emacs crashes
 @cindex crashes, Haiku
 @cindex haiku debugger
diff --git a/doc/emacs/help.texi b/doc/emacs/help.texi
index 20a9d8be13..5a458209d2 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 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 d989f34556..058d313c2d 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2022 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 375ac970d7..e3de2bc2fa 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 
@@ -929,6 +929,11 @@ so in a rectangular fashion, and killing and yanking 
operate on the
 rectangle.  @xref{Killing}.  The mode persists only as long as the
 region is active.
 
+The region-rectangle works only when the mark is active.  In
+particular, when Transient Mark mode is off (@pxref{Disabled Transient
+Mark}), in addition to typing @kbd{C-x @key{SPC}} you will need to
+activate the mark.
+
 Unlike the standard region, the region-rectangle can have its corners
 extended past the end of buffer, or inside stretches of white space
 that point normally cannot enter, like in the middle of a TAB
@@ -937,11 +942,12 @@ character.
 @findex rectangle-exchange-point-and-mark
 @findex exchange-point-and-mark@r{, in rectangle-mark-mode}
 @kindex C-x C-x@r{, in rectangle-mark-mode}
-When the region is in rectangle-mark-mode, @kbd{C-x C-x} runs the
-command @code{rectangle-exchange-point-and-mark}, which cycles between
-the four corners of the region-rectangle.  This comes in handy if you
-want to modify the dimensions of the region-rectangle before invoking
-an operation on the marked text.
+When the region is active (@pxref{Mark}) and in rectangle-mark-mode,
+@kbd{C-x C-x} runs the command
+@code{rectangle-exchange-point-and-mark}, which cycles between the
+four corners of the region-rectangle.  This comes in handy if you want
+to modify the dimensions of the region-rectangle before invoking an
+operation on the marked text.
 
 @node CUA Bindings
 @section CUA Bindings
diff --git a/doc/emacs/kmacro.texi b/doc/emacs/kmacro.texi
index e0533f049e..60880941db 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 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 7b9b40388c..a98b879c88 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2022 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node M-x
@@ -60,6 +60,7 @@ the option @code{read-extended-command-predicate} to exclude 
those
 irrelevant commands from completion results.
 
 @kindex M-S-x
+@kindex M-X
   Conversely, Emacs can exclude all commands except those that are
 particularly relevant to the current buffer.  The @kbd{M-S-x} (that's
 ``meta shift x'') command works just like @kbd{M-x}, but instead of
diff --git a/doc/emacs/macos.texi b/doc/emacs/macos.texi
index 99c67ed09e..ab143707fd 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--2021 Free Software Foundation, Inc.
+@c Copyright (C) 2000--2022 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Mac OS / GNUstep
 @appendix Emacs and macOS / GNUstep
diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi
index ebd72fa2a0..9a23f23e0e 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 1999--2022 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Maintaining
diff --git a/doc/emacs/mark.texi b/doc/emacs/mark.texi
index 2461cb0f6a..91c44d527b 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2022 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 b0f6e424a7..979be34fac 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Minibuffer
@@ -497,7 +497,10 @@ falls back on the next style.
 @vindex completion-styles
   The list variable @code{completion-styles} specifies the completion
 styles to use.  Each list element is the name of a completion style (a
-Lisp symbol).  The default completion styles are (in order):
+Lisp symbol).  The available style symbols are stored in the variable
+@code{completion-styles-alist} (@pxref{Completion Variables,,, elisp,
+The Emacs Lisp Reference Manual}).  The default completion styles are
+(in order):
 
 @table @code
 @item basic
diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi
index 1f2c852fac..df1e5ef238 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--1987, 1993--1995, 1997, 2000--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @iftex
diff --git a/doc/emacs/modes.texi b/doc/emacs/modes.texi
index 9014221edf..c348130807 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 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 fce6ae46f8..57e1ac90a5 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--2021 Free Software Foundation, Inc.
+@c Copyright (C) 2004--2022 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
@@ -105,7 +105,7 @@ following line into your @file{_emacs} file:
 
 @smallexample
 ;; @r{Make the @key{ENTER} key from the numeric keypad act as @kbd{C-j}.}
-(define-key function-key-map [kp-enter] [?\C-j])
+(keymap-set function-key-map "<kp-enter>" "C-j")
 @end smallexample
 
 @node MS-DOS Mouse
diff --git a/doc/emacs/msdos.texi b/doc/emacs/msdos.texi
index 20eaa0bcb6..e30d623a77 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 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 83c775df0e..5f30341838 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--2021 Free Software Foundation, Inc.
+@c Copyright (C) 1997, 1999--2022 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node International
 @chapter International Character Set Support
@@ -50,13 +50,14 @@ others.
 
 @item
 You can insert non-@acronym{ASCII} characters or search for them.  To do that,
-you can specify an input method (@pxref{Select Input Method}) suitable
+you can specify an Emacs input method (@pxref{Select Input Method}) suitable
 for your language, or use the default input method set up when you choose
 your language environment.  If
 your keyboard can produce non-@acronym{ASCII} characters, you can select an
 appropriate keyboard coding system (@pxref{Terminal Coding}), and Emacs
-will accept those characters.  Latin-1 characters can also be input by
-using the @kbd{C-x 8} prefix, see @ref{Unibyte Mode}.
+will accept those characters.  On graphical displays, modern systems
+typically provide their native input methods, and Latin-1 characters
+can also be input by using the @kbd{C-x 8} prefix, see @ref{Unibyte Mode}.
 
 With the X Window System, your locale should be set to an appropriate
 value to make sure Emacs interprets keyboard input correctly; see
@@ -449,10 +450,13 @@ for that key.
 
 @cindex input methods
   An @dfn{input method} is a kind of character conversion designed
-specifically for interactive input.  In Emacs, typically each language
-has its own input method; sometimes several languages that use the same
-characters can share one input method.  A few languages support several
-input methods.
+specifically for interactive input.  This section describes input
+methods that come with Emacs; for native input methods provided by the
+underlying OS, @pxref{Unibyte Mode}.
+
+  In Emacs, typically each language has its own input method;
+sometimes several languages that use the same characters can share one
+input method.  A few languages support several input methods.
 
   The simplest kind of input method works by mapping @acronym{ASCII} letters
 into another alphabet; this allows you to use one other alphabet
@@ -1798,12 +1802,38 @@ as @code{xterm}, you can arrange for Meta to be 
converted to @key{ESC}
 and still be able to type 8-bit characters present directly on the
 keyboard or using @key{Compose} or @key{AltGr} keys.  @xref{User Input}.
 
+@cindex input methods, native
+@cindex XIM, X Input Methods
+@cindex GTK input methods
+Many modern systems provide @dfn{native input methods} for many
+languages whose characters don't have keyboard keys assigned to them.
+If Emacs was built with support for these native input methods, you
+can activate such an input method and type the characters they
+support.  How to activate and use these input methods depends on the
+system and the input method, and will not be described here; see your
+system documentation.  Here we describe some Emacs facilities to
+control the use of the native input methods.
+
+@vindex x-gtk-use-native-input
+In Emacs built with the GTK toolkit, the variable
+@code{x-gtk-use-native-input} controls whether Emacs should receive
+characters produced by GTK input methods.  If the value is @code{nil},
+the default, Emacs uses the X input methods (@acronym{XIM}), otherwise
+it uses the GTK input methods.  The @code{useXIM} X resource controls
+whether to use @acronym{XIM}, and @code{inputStyle} X resource
+controls the display on X of preview text generated by the native
+input methods; @pxref{Table of Resources}.
+
+On MS-Windows, Emacs supports native inputs methods provided by
+@acronym{IMM}, the Input Method Manager, but that can be turned off if
+needed; @pxref{Windows Keyboard}.
+
 @cindex @code{iso-transl} library
 @cindex compose character
 @cindex dead character
 @item
 You can use the key @kbd{C-x 8} as a compose-character prefix for
-entry of non-@acronym{ASCII} Latin-1 and a few other printing
+entry of non-@acronym{ASCII} Latin-1 and other printing
 characters.  @kbd{C-x 8} is good for insertion (in the minibuffer as
 well as other buffers), for searching, and in any other context where
 a key sequence is allowed.
@@ -1992,3 +2022,16 @@ or right of the current screen position, moving to the 
next or
 previous screen line as appropriate.  Note that this might potentially
 move point many buffer positions away, depending on the surrounding
 bidirectional context.
+
+@cindex bidi formatting control characters
+  Bidirectional text sometimes uses special formatting characters to
+affect the reordering of text for display.  The @sc{lrm} and @sc{rlm}
+characters, mentioned above, are two such characters, but there are
+more of them.  They are by default displayed as thin space glyphs on
+GUI frames, and as simple spaces on text-mode frames.  If you want to
+be aware of these special control characters, so that their effect on
+display does not come as a surprise, you can turn on the
+@code{glyphless-display-mode} (@pxref{Text Display}).  This minor mode
+will cause these formatting characters to be displayed as acronyms
+inside a small box, so that they stand out on display, and make their
+effect easier to understand.
diff --git a/doc/emacs/package.texi b/doc/emacs/package.texi
index 570afd5be2..caa65bf33b 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 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 a04b72d38d..f5c827ea17 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--2021 Free Software Foundation, Inc.
+@c Copyright (C) 2004--2022 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 0056906e1f..ff4405f1fb 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 1999--2022 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Programs
@@ -1827,7 +1827,7 @@ sure the keymap is loaded before we try to change it.
 
 @example
 (defun my-bind-clb ()
-  (define-key c-mode-base-map "\C-m"
+  (keymap-set c-mode-base-map "RET"
               'c-context-line-break))
 (add-hook 'c-initialization-hook 'my-bind-clb)
 @end example
diff --git a/doc/emacs/regs.texi b/doc/emacs/regs.texi
index 59fa0ff0a1..fb93601879 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2022 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Registers
@@ -47,14 +47,14 @@ are similar in spirit to registers, so they are also 
documented in
 this chapter.
 
 @menu
-* Position Registers::       Saving positions in registers.
-* Text Registers::           Saving text in registers.
-* Rectangle Registers::      Saving rectangles in registers.
-* Configuration Registers::  Saving window configurations in registers.
-* Number Registers::         Numbers in registers.
-* File Registers::           File names in registers.
-* Keyboard Macro Registers:: Keyboard macros in registers.
-* Bookmarks::                Bookmarks are like registers, but persistent.
+* Position Registers::        Saving positions in registers.
+* Text Registers::            Saving text in registers.
+* Rectangle Registers::       Saving rectangles in registers.
+* Configuration Registers::   Saving window configurations in registers.
+* Number Registers::          Numbers in registers.
+* File and Buffer Registers:: File and buffer names in registers.
+* Keyboard Macro Registers::  Keyboard macros in registers.
+* Bookmarks::                 Bookmarks are like registers, but persistent.
 @end menu
 
 @node Position Registers
@@ -238,9 +238,10 @@ register contents into the buffer.  @kbd{C-x r +} with no 
numeric
 argument increments the register value by 1; @kbd{C-x r n} with no
 numeric argument stores zero in the register.
 
-@node File Registers
-@section Keeping File Names in Registers
+@node File and Buffer Registers
+@section Keeping File and Buffer Names in Registers
 @cindex saving file name in a register
+@cindex saving buffer name in a register
 
   If you visit certain file names frequently, you can visit them more
 conveniently if you put their names in registers.  Here's the Lisp code
@@ -265,6 +266,15 @@ puts the file name shown in register @samp{z}.
 @var{r}}.  (This is the same command used to jump to a position or
 restore a frame configuration.)
 
+  Similarly, if there's certain buffers you visit frequently, you
+can put their names in registers.  For instance, if you visit the
+@samp{*Messages*} buffer often, you can use the following snippet to
+put that buffer into the @samp{m} register:
+
+@smallexample
+(set-register ?m '(buffer . "*Messages*"))
+@end smallexample
+
 @node Keyboard Macro Registers
 @section Keyboard Macro Registers
 @cindex saving keyboard macro in a register
diff --git a/doc/emacs/rmail.texi b/doc/emacs/rmail.texi
index e7ca2ae48b..e38bde036a 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2022 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 2ff808e040..954d7a1c83 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2022 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 fbbb1f6e68..c12992c239 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Search
@@ -1448,9 +1448,13 @@ letter @code{a} as well as all the other variants like 
@code{@'a}.
 
 @vindex char-fold-include
 @vindex char-fold-exclude
+@vindex char-fold-override
   You can add new foldings using the customizable variable
 @code{char-fold-include}, or remove the existing ones using the
-customizable variable @code{char-fold-exclude}.
+customizable variable @code{char-fold-exclude}.  You can also
+customize @code{char-fold-override} to @code{t} to disable all the
+character equivalences except those you add yourself using
+@code{char-fold-include}.
 
 @node Replace
 @section Replacement Commands
diff --git a/doc/emacs/sending.texi b/doc/emacs/sending.texi
index 174e52ac9a..ea87e0a77b 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 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 ead0f699bb..c5b54777a8 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Text
@@ -474,8 +474,8 @@ insert a curved quote even when Electric Quote is disabled 
or
 inactive, you can type @kbd{C-x 8 [} for @t{‘}, @kbd{C-x 8 ]} for
 @t{’}, @kbd{C-x 8 @{} for @t{“}, and @kbd{C-x 8 @}} for @t{”}.
 @xref{Inserting Text}.  Note that the value of
-@code{electric-quote-chars} does not affect these keybindings, they
-are not keybindings of @code{electric-quote-mode} but bound in
+@code{electric-quote-chars} does not affect these key bindings, they
+are not key bindings of @code{electric-quote-mode} but bound in
 @code{global-map}.
 
 @node Filling
diff --git a/doc/emacs/trouble.texi b/doc/emacs/trouble.texi
index 027086cab5..e966565f00 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2022 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 51b9d66778..1ed2d62566 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--2021 Free Software Foundation, Inc.
+@c Copyright (C) 2004--2022 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 4cd00cba6c..2d984f4b92 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--2021 Free Software Foundation, Inc.
+@c Copyright (C) 2004--2022 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 27c754133f..4a3862562c 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--2021 Free Software
+@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2022 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Windows
@@ -605,7 +605,7 @@ selects the window immediately to the right of the 
currently selected
 one, and similarly for the left, up, and down counterparts.
 @code{windmove-default-keybindings} binds these commands to
 @kbd{S-right} etc.; doing so disables shift selection for those keys
-(@pxref{Shift Selection}).  In the same way as keybindings can be
+(@pxref{Shift Selection}).  In the same way as key bindings can be
 defined for commands that select windows directionally, you can use
 @code{windmove-display-default-keybindings} to define keybindings for
 commands that specify in what direction to display the window for the
@@ -613,7 +613,7 @@ buffer that the next command is going to display.  Also 
there is
 @code{windmove-delete-default-keybindings} to define keybindings for
 commands that delete windows directionally, and
 @code{windmove-swap-states-default-keybindings} that defines
-keybindings for commands that swap the window contents of the selected
+key bindings for commands that swap the window contents of the selected
 window with the window in the specified direction.
 
   The command @kbd{M-x compare-windows} lets you compare the text
diff --git a/doc/emacs/xresources.texi b/doc/emacs/xresources.texi
index a7bd006df4..ccf7e35eee 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--2021 Free Software
+@c Copyright (C) 1987, 1993--1995, 1997, 2001--2022 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node X Resources
@@ -332,6 +332,38 @@ Disable use of X input methods (XIM) if @samp{false} or 
@samp{off}.
 This is only relevant if your Emacs is built with XIM support.  It
 might be useful to turn off XIM on slow X client/server links.
 
+@item @code{inputStyle} (class @code{InputStyle})
+@cindex inputStyle (X resource)
+@cindex input method style, X
+This resource controls how preview text generated by X input methods
+is displayed.  Its value can be on of the following:
+
+@table @samp
+@item callback
+Display the contents of the preview text in the current buffer.
+
+@item offthespot
+Display the preview text inside a separate area of the display
+provided by Emacs.
+
+@item overthespot
+Display the preview text inside a popup window at the location of
+point in the current window.
+
+@item none
+Let the input method decide how to display itself.  This is usually
+equivalent to @samp{overthespot}, but it might work with more input
+methods.
+
+@item native
+Use the toolkit for handling input methods.  This is currently
+implemented only on GTK.
+
+@item root
+Use some location on display specific to the input method for
+displaying the preview text.
+@end table
+
 @item @code{verticalScrollBars} (class @code{ScrollBars})
 Give frames scroll bars on the left if @samp{left}, on the right if
 @samp{right}; don't have scroll bars if @samp{off} (@pxref{Scroll Bars}).
@@ -557,7 +589,7 @@ those are governed by normal X resources 
(@pxref{Resources}).
 
   The following sections describe how to customize GTK+ resources for
 Emacs.  For details about GTK+ resources, see the GTK+ API document at
-@uref{https://developer.gnome.org/gtk2/stable/gtk2-Resource-Files.html}.
+@uref{https://developer-old.gnome.org/gtk2/stable/gtk2-Resource-Files.html}.
 
   In GTK+ version 3, GTK+ resources have been replaced by a completely
 different system.  The appearance of GTK+ widgets is now determined by
@@ -567,7 +599,7 @@ style settings (where @var{theme} is the name of the 
current GTK+
 theme).  Therefore, the description of GTK+ resources in this section
 does not apply to GTK+ 3.  For details about the GTK+ 3 styling
 system, see
-@uref{https://developer.gnome.org/gtk3/3.0/GtkCssProvider.html}.
+@uref{https://developer-old.gnome.org/gtk3/3.0/GtkCssProvider.html}.
 
 @menu
 * GTK Resource Basics::   Basic usage of GTK+ resources.
diff --git a/doc/lispintro/ChangeLog.1 b/doc/lispintro/ChangeLog.1
index bb4323a773..a581faa73b 100644
--- a/doc/lispintro/ChangeLog.1
+++ b/doc/lispintro/ChangeLog.1
@@ -782,7 +782,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2001-2021 Free Software Foundation, Inc.
+  Copyright (C) 2001-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/doc/lispintro/Makefile.in b/doc/lispintro/Makefile.in
index 294b310d67..d554f3d7a6 100644
--- a/doc/lispintro/Makefile.in
+++ b/doc/lispintro/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 1994-1999, 2001-2021 Free Software Foundation, Inc.
+# Copyright (C) 1994-1999, 2001-2022 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/doc/lispintro/README b/doc/lispintro/README
index eca19c76a4..b6dc23bb90 100644
--- a/doc/lispintro/README
+++ b/doc/lispintro/README
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2021 Free Software Foundation, Inc.
+Copyright (C) 2001-2022 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 4877df7135..f2e445b851 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-2021 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2022 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 48fdc7e876..fd607021e7 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-2021 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2022 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 81053d3f26..23051ef7fc 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-2021 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2022 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 e6a80f1c8b..24fb0e1100 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-2021 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2022 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 c1aac9c09b..70a82103f5 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-2021 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2022 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 a0918a92c5..03391127b0 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-2021 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2022 Free Software Foundation, Inc.
 %
 % This file is part of GNU Emacs.
 %
diff --git a/doc/lispintro/drawers.eps b/doc/lispintro/drawers.eps
index 725bd9723c..7e3c83deb6 100644
--- a/doc/lispintro/drawers.eps
+++ b/doc/lispintro/drawers.eps
@@ -9,7 +9,7 @@
 %%EndComments
 %%BeginProlog
 
-% Copyright (C) 2001-2021 Free Software Foundation, Inc.
+% Copyright (C) 2001-2022 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 6ddc3bfb5c..9d4520b040 100644
--- a/doc/lispintro/emacs-lisp-intro.texi
+++ b/doc/lispintro/emacs-lisp-intro.texi
@@ -117,7 +117,7 @@ Edition @value{edition-number}, @value{update-date}
 @sp 1
 Distributed with Emacs version @value{EMACSVER}.
 @sp 1
-Copyright @copyright{} 1990--1995, 1997, 2001--2021 Free Software
+Copyright @copyright{} 1990--1995, 1997, 2001--2022 Free Software
 Foundation, Inc.
 @sp 1
 
@@ -688,7 +688,7 @@ Your @file{.emacs} File
 * Text and Auto-fill::          Automatically wrap lines.
 * Mail Aliases::                Use abbreviations for email addresses.
 * Indent Tabs Mode::            Don't use tabs with @TeX{}
-* Keybindings::                 Create some personal keybindings.
+* Key Bindings::                Create some personal key bindings.
 * Keymaps::                     More about key binding.
 * Loading Files::               Load (i.e., evaluate) files automatically.
 * Autoload::                    Make functions available.
@@ -2146,9 +2146,10 @@ number---the number of characters the location is from 
the beginning
 of the buffer.)  In Emacs Lisp, @code{+} can be used to add the
 numeric value of marker positions as numbers.
 
+@cindex @samp{predicate} defined
 The @samp{p} of @code{number-or-marker-p} is the embodiment of a
 practice started in the early days of Lisp programming.  The @samp{p}
-stands for ``predicate''.  In the jargon used by the early Lisp
+stands for @dfn{predicate}.  In the jargon used by the early Lisp
 researchers, a predicate refers to a function to determine whether some
 property is true or false.  So the @samp{p} tells us that
 @code{number-or-marker-p} is the name of a function that determines
@@ -3357,7 +3358,7 @@ Both the examples just mentioned work identically to move 
point forward
 three sentences.  (Since @code{multiply-by-seven} is not bound to a key,
 it could not be used as an example of key binding.)
 
-(@xref{Keybindings, , Some Keybindings}, to learn how to bind a command
+(@xref{Key Bindings, , Some Key Bindings}, to learn how to bind a command
 to a key.)
 
 A @dfn{prefix argument} is passed to an interactive function by typing the
@@ -4895,25 +4896,6 @@ result of this, point is placed at the beginning of the 
buffer and mark
 is set at the end of the buffer.  The whole buffer is, therefore, the
 region.
 
-@c FIXME: the definition of append-to-buffer has been changed (in
-@c 2010-03-30).
-@c In Bug#8275, Stefan Monner <monnier@iro.umontreal.ca> writes:
-@c >> Do you want to fix this, or shall I try?  The problem is that
-@c >> append-to-buffer now uses let* and with-current-buffer, so this might
-@c >> break the flow of the text.  At this point in the book, let* and
-@c >> with-current-buffer are not yet introduced.
-@c >
-@c > Here are some thoughts:
-@c > - I don't think it's of any importance that the example code be
-@c >   identical to the currently used code.
-@c > - append-to-buffer might not be the best example since AFAICT copying
-@c >   text from one buffer to another is not a common operation and in most
-@c >   cases this is done via buffer-substring + insert (often with some
-@c >   processing on the string between the two) rather than with
-@c >   insert-buffer-substring which is a rarely used function.
-@c > - yes, I think the text would benefit from some rethink to try and present
-@c >   with-current-buffer in preference to set-buffer, but it's not
-@c >   a simple fix.
 @node append-to-buffer
 @section The Definition of @code{append-to-buffer}
 @findex append-to-buffer
@@ -4948,8 +4930,9 @@ buffer to which the text will go, the window it comes 
from and goes
 to, and the region that will be copied.
 
 @need 1250
-Here is the complete text of the function:
+Here is a possible implementation of the function:
 
+@c GNU Emacs 22
 @smallexample
 @group
 (defun append-to-buffer (buffer start end)
@@ -5016,7 +4999,9 @@ name.  (The function can handle either.)
 Since the @code{append-to-buffer} function will be used interactively,
 the function must have an @code{interactive} expression.  (For a
 review of @code{interactive}, see @ref{Interactive, , Making a
-Function Interactive}.)  The expression reads as follows:
+Function Interactive}.)
+
+The expression reads as follows:
 
 @smallexample
 @group
@@ -5045,7 +5030,7 @@ for true.
 
 The first argument to @code{other-buffer}, the exception, is yet
 another function, @code{current-buffer}.  That is not going to be
-returned.  The second argument is the symbol for true, @code{t}. that
+returned.  The second argument is the symbol for true, @code{t}.  That
 tells @code{other-buffer} that it may show visible buffers (except in
 this case, it will not show the current buffer, which makes sense).
 
@@ -5081,33 +5066,6 @@ point and mark.  That argument worked fine.)
 @node append-to-buffer body
 @subsection The Body of @code{append-to-buffer}
 
-@ignore
-in GNU Emacs 22   in    /usr/local/src/emacs/lisp/simple.el
-
-(defun append-to-buffer (buffer start end)
-  "Append to specified buffer the text of the region.
-It is inserted into that buffer before its point.
-
-When calling from a program, give three arguments:
-BUFFER (or buffer name), START and END.
-START and END specify the portion of the current buffer to be copied."
-  (interactive
-   (list (read-buffer "Append to buffer: " (other-buffer (current-buffer) t))
-         (region-beginning) (region-end)))
-  (let ((oldbuf (current-buffer)))
-    (save-excursion
-      (let* ((append-to (get-buffer-create buffer))
-             (windows (get-buffer-window-list append-to t t))
-             point)
-        (set-buffer append-to)
-        (setq point (point))
-        (barf-if-buffer-read-only)
-        (insert-buffer-substring oldbuf start end)
-        (dolist (window windows)
-          (when (= (window-point window) point)
-            (set-window-point window (point))))))))
-@end ignore
-
 The body of the @code{append-to-buffer} function begins with @code{let}.
 
 As we have seen before (@pxref{let, , @code{let}}), the purpose of a
@@ -5126,7 +5084,7 @@ whole by showing a template for @code{append-to-buffer} 
with the
   "@var{documentation}@dots{}"
   (interactive @dots{})
   (let ((@var{variable} @var{value}))
-        @var{body}@dots{})
+        @var{body}@dots{}))
 @end group
 @end smallexample
 
@@ -5246,19 +5204,39 @@ of filling in the slots of a template:
 
 @need 1200
 @noindent
+@anchor{let* introduced}
+@findex let*
 In this function, the body of the @code{save-excursion} contains only
 one expression, the @code{let*} expression.  You know about a
-@code{let} function.  The @code{let*} function is different.  It has a
-@samp{*} in its name.  It enables Emacs to set each variable in its
-varlist in sequence, one after another.
+@code{let} function.  The @code{let*} function is different.  It
+enables Emacs to set each variable in its varlist in sequence, one
+after another; such that variables in the latter part of the varlist
+can make use of the values to which Emacs set variables earlier in the
+varlist.
 
-Its critical feature is that variables later in the varlist can make
-use of the values to which Emacs set variables earlier in the varlist.
-@xref{fwd-para let, , The @code{let*} expression}.
+Looking at the @code{let*} expression in @code{append-to-buffer}:
 
-We will skip functions like @code{let*} and focus on two: the
-@code{set-buffer} function and the @code{insert-buffer-substring}
-function.
+@smallexample
+@group
+(let* ((append-to (get-buffer-create buffer))
+       (windows (get-buffer-window-list append-to t t))
+       point)
+  BODY...)
+@end group
+@end smallexample
+
+@noindent
+we see that @code{append-to} is bound to the value returned by the
+@w{@code{(get-buffer-create buffer)}}. On the next line,
+@code{append-to} is used as an argument to
+@code{get-buffer-window-list}; this would not be possible with the
+@code{let} expression.  Note that @code{point} is automatically bound
+to @code{nil}, the same way as it would be done in the @code{let}
+statement.
+
+Now let's focus on the functions @code{set-buffer} and
+@code{insert-buffer-substring} in the body of the @code{let*}
+expression.
 
 @need 1250
 In the old days, the @code{set-buffer} expression was simply
@@ -5276,27 +5254,8 @@ but now it is
 @end smallexample
 
 @noindent
-@code{append-to} is bound to @code{(get-buffer-create buffer)} earlier
-on in the @code{let*} expression.  That extra binding would not be
-necessary except for that @code{append-to} is used later in the
-varlist as an argument to @code{get-buffer-window-list}.
-
-@ignore
-in GNU Emacs 22
-
-  (let ((oldbuf (current-buffer)))
-    (save-excursion
-      (let* ((append-to (get-buffer-create buffer))
-             (windows (get-buffer-window-list append-to t t))
-             point)
-        (set-buffer append-to)
-        (setq point (point))
-        (barf-if-buffer-read-only)
-        (insert-buffer-substring oldbuf start end)
-        (dolist (window windows)
-          (when (= (window-point window) point)
-            (set-window-point window (point))))))))
-@end ignore
+This is because @code{append-to} was bound to @code{(get-buffer-create
+buffer)} earlier on in the @code{let*} expression.
 
 The @code{append-to-buffer} function definition inserts text from the
 buffer in which you are currently to a named buffer.  It happens that
@@ -5393,6 +5352,12 @@ an argument and insert the region into the current 
buffer.
 @item mark-whole-buffer
 Mark the whole buffer as a region.  Normally bound to @kbd{C-x h}.
 
+@item let*
+Declare a list of variables and give them an initial value; then
+evaluate the rest of the expressions in the body of @code{let*}.  The
+values of the variables can be used to bind ensuing variables in the
+list.
+
 @item set-buffer
 Switch the attention of Emacs to another buffer, but do not change the
 window being displayed.  Used when the program rather than a human is
@@ -12895,25 +12860,12 @@ familiar part of this function.
 @node fwd-para let
 @unnumberedsubsec The @code{let*} expression
 
-The next line of the @code{forward-paragraph} function begins a
-@code{let*} expression.  This is different from @code{let}.  The
-symbol is @code{let*} not @code{let}.
-
 @findex let*
-The @code{let*} special form is like @code{let} except that Emacs sets
-each variable in sequence, one after another, and variables in the
-latter part of the varlist can make use of the values to which Emacs
-set variables in the earlier part of the varlist.
-
-@ignore
-( refappend save-excursion, , code save-excursion in code append-to-buffer .)
-@end ignore
-
-(@ref{append save-excursion, , @code{save-excursion} in 
@code{append-to-buffer}}.)
-
-In the @code{let*} expression in this function, Emacs binds a total of
-seven variables:  @code{opoint}, @code{fill-prefix-regexp},
-@code{parstart}, @code{parsep}, @code{sp-parstart}, @code{start}, and
+The next line of the @code{forward-paragraph} function begins a
+@code{let*} expression (@pxref{let* introduced,,@code{let*}
+introduced}), in which Emacs binds a total of seven variables:
+@code{opoint}, @code{fill-prefix-regexp}, @code{parstart},
+@code{parsep}, @code{sp-parstart}, @code{start}, and
 @code{found-start}.
 
 The variable @code{parsep} appears twice, first, to remove instances
@@ -13710,7 +13662,7 @@ syntax table determines which characters these are."
 @end ifinfo
 
 @need 1000
-If you wish, you can also install this keybinding by evaluating it:
+If you wish, you can also install this key binding by evaluating it:
 
 @smallexample
 (global-set-key "\C-c=" '@value{COUNT-WORDS})
@@ -14662,7 +14614,7 @@ almost the same code as for the recursive version of
 
 @need 800
 @noindent
-Let's re-use @kbd{C-c =} as a convenient keybinding:
+Let's re-use @kbd{C-c =} as a convenient key binding:
 
 @smallexample
 (global-set-key "\C-c=" 'count-words-defun)
@@ -14670,7 +14622,7 @@ Let's re-use @kbd{C-c =} as a convenient keybinding:
 
 Now we can try out @code{count-words-defun}: install both
 @code{count-words-in-defun} and @code{count-words-defun}, and set the
-keybinding.  Then copy the following to an Emacs Lisp buffer (like,
+key binding.  Then copy the following to an Emacs Lisp buffer (like,
 for instance, @file{*scratch*}), place the cursor within the
 definition, and use the @kbd{C-c =} command.
 
@@ -16012,7 +15964,7 @@ placing point somewhere in the buffer, typing 
@kbd{M-:}, typing the
 and then typing @key{RET}.  This causes Emacs to evaluate the
 expression in the minibuffer, but to use as the value of point the
 position of point in the @file{*scratch*} buffer.  (@kbd{M-:}  is the
-keybinding for @code{eval-expression}. Also, @code{nil} does not
+key binding for @code{eval-expression}. Also, @code{nil} does not
 appear in the @file{*scratch*} buffer since the expression is
 evaluated in the minibuffer.)
 
@@ -16579,7 +16531,7 @@ expressions in Emacs Lisp you can change or extend 
Emacs.
 * Text and Auto-fill::          Automatically wrap lines.
 * Mail Aliases::                Use abbreviations for email addresses.
 * Indent Tabs Mode::            Don't use tabs with @TeX{}
-* Keybindings::                 Create some personal keybindings.
+* Key Bindings::                Create some personal key bindings.
 * Keymaps::                     More about key binding.
 * Loading Files::               Load (i.e., evaluate) files automatically.
 * Autoload::                    Make functions available.
@@ -17123,10 +17075,10 @@ Files'' in @cite{The GNU Emacs Manual}.
 @end iftex
 
 @need 1700
-@node Keybindings
-@section Some Keybindings
+@node Key Bindings
+@section Some Key Bindings
 
-Now for some personal keybindings:
+Now for some personal key bindings:
 
 @smallexample
 @group
@@ -17148,10 +17100,10 @@ This also shows how to set a key globally, for all 
modes.
 @cindex Key setting globally
 @findex global-set-key
 The command is @code{global-set-key}.  It is followed by the
-keybinding.  In a @file{.emacs} file, the keybinding is written as
+key binding.  In a @file{.emacs} file, the keybinding is written as
 shown: @code{\C-c} stands for Control-C, which means to press the
 control key and the @kbd{c} key at the same time.  The @code{w} means
-to press the @kbd{w} key.  The keybinding is surrounded by double
+to press the @kbd{w} key.  The key binding is surrounded by double
 quotation marks.  In documentation, you would write this as
 @w{@kbd{C-c w}}.  (If you were binding a @key{META} key, such as
 @kbd{M-c}, rather than a @key{CTRL} key, you would write
@@ -17165,26 +17117,26 @@ would first try to evaluate the symbol to determine 
its value.
 
 These three things, the double quotation marks, the backslash before
 the @samp{C}, and the single-quote are necessary parts of
-keybinding that I tend to forget.  Fortunately, I have come to
+key binding that I tend to forget.  Fortunately, I have come to
 remember that I should look at my existing @file{.emacs} file, and
 adapt what is there.
 
-As for the keybinding itself: @kbd{C-c w}.  This combines the prefix
+As for the key binding itself: @kbd{C-c w}.  This combines the prefix
 key, @kbd{C-c}, with a single character, in this case, @kbd{w}.  This
 set of keys, @kbd{C-c} followed by a single character, is strictly
 reserved for individuals' own use.  (I call these @dfn{own} keys, since
 these are for my own use.)  You should always be able to create such a
-keybinding for your own use without stomping on someone else's
-keybinding.  If you ever write an extension to Emacs, please avoid
+key binding for your own use without stomping on someone else's
+key binding.  If you ever write an extension to Emacs, please avoid
 taking any of these keys for public use.  Create a key like @kbd{C-c
 C-w} instead.  Otherwise, we will run out of own keys.
 
 @need 1250
-Here is another keybinding, with a comment:
+Here is another key binding, with a comment:
 
 @smallexample
 @group
-;;; Keybinding for 'occur'
+;;; Key binding for 'occur'
 ; I use occur a lot, so let's bind it to a key:
 (global-set-key "\C-co" 'occur)
 @end group
@@ -17244,8 +17196,8 @@ but moves point into that window.
 @cindex Rebinding keys
 
 Emacs uses @dfn{keymaps} to record which keys call which commands.
-When you use @code{global-set-key} to set the keybinding for a single
-command in all parts of Emacs, you are specifying the keybinding in
+When you use @code{global-set-key} to set the key binding for a single
+command in all parts of Emacs, you are specifying the key binding in
 @code{current-global-map}.
 
 Specific modes, such as C mode or Text mode, have their own keymaps;
@@ -17500,7 +17452,7 @@ Here is the definition:
 @end smallexample
 
 @need 1250
-Now for the keybinding.
+Now for the key binding.
 
 Function keys as well as mouse button events and non-@sc{ascii}
 characters are written within square brackets, without quotation
@@ -17805,7 +17757,7 @@ Some systems bind keys unpleasantly.  Sometimes, for 
example, the
 @key{CTRL} key appears in an awkward spot rather than at the far left
 of the home row.
 
-Usually, when people fix these sorts of keybindings, they do not
+Usually, when people fix these sorts of key bindings, they do not
 change their @file{~/.emacs} file.  Instead, they bind the proper keys
 on their consoles with the @code{loadkeys} or @code{install-keymap}
 commands in their boot script and then include @code{xmodmap} commands
diff --git a/doc/lispintro/lambda-1.eps b/doc/lispintro/lambda-1.eps
index 43b2d08aed..a9adeae357 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-2021 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2022 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 c6c71f2b77..05cf437b1e 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-2021 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2022 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 ae939d537f..8ff4c7c4fc 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-2021 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2022 Free Software Foundation, Inc.
 %
 % This file is part of GNU Emacs.
 %
diff --git a/doc/lispref/ChangeLog.1 b/doc/lispref/ChangeLog.1
index bd7a9c4e79..7c7d49967c 100644
--- a/doc/lispref/ChangeLog.1
+++ b/doc/lispref/ChangeLog.1
@@ -13989,7 +13989,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1998-2021 Free Software Foundation, Inc.
+  Copyright (C) 1998-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/doc/lispref/Makefile.in b/doc/lispref/Makefile.in
index a7701c5f98..8a61adf232 100644
--- a/doc/lispref/Makefile.in
+++ b/doc/lispref/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 1990-1996, 1998-2021 Free Software Foundation, Inc.
+# Copyright (C) 1990-1996, 1998-2022 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/doc/lispref/README b/doc/lispref/README
index 9b99837130..70c0242123 100644
--- a/doc/lispref/README
+++ b/doc/lispref/README
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2021 Free Software Foundation, Inc.  -*- outline -*-
+Copyright (C) 2001-2022 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 71fac1ae3b..a366e9c7bc 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--2021 Free Software Foundation,
+@c Copyright (C) 1990--1994, 1999, 2001--2022 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 45cbff61e0..09103cbeab 100644
--- a/doc/lispref/anti.texi
+++ b/doc/lispref/anti.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1999, 2002--2021 Free Software Foundation, Inc.
+@c Copyright (C) 1999, 2002--2022 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 
 @c This node must have no pointers.
diff --git a/doc/lispref/back.texi b/doc/lispref/back.texi
index c238863833..d0f56f49bc 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--2021 Free Software Foundation, Inc.
+@c Copyright (C) 2001--2022 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 85a4f9e0ac..d99487368b 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--2021 Free Software Foundation,
+@c Copyright (C) 1990--1995, 1999, 2001--2022 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 6a0095dca9..1fe5a60b35 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--2021 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Buffers
diff --git a/doc/lispref/commands.texi b/doc/lispref/commands.texi
index c12a97cc7d..01aa1e1fa4 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--2021 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Command Loop
@@ -455,7 +455,7 @@ This kind of input is used by commands such as 
@code{describe-key} and
 
 @item K
 A key sequence on a form that can be used as input to functions like
-@code{define-key}.  This works like @samp{k}, except that it
+@code{keymap-set}.  This works like @samp{k}, except that it
 suppresses, for the last input event in the key sequence, the
 conversions that are normally used (when necessary) to convert an
 undefined key into a defined one (@pxref{Key Sequence Input}), so this
@@ -630,17 +630,26 @@ any modes that are derived from @code{dired-mode}).  Any 
number of
 modes can be added to the @code{interactive} form.
 
 @vindex read-extended-command-predicate
-Specifying modes may affect completion in @kbd{M-x}, depending on the
+Specifying modes affects command completion in @kbd{M-S-x}
+(@code{execute-extended-command-for-buffer}, @pxref{Interactive
+Call}).  It may also affect completion in @kbd{M-x}, depending on the
 value of @code{read-extended-command-predicate}.
 
 For instance, when using the
-@code{command-completion-default-include-p} predicate, @kbd{M-x} won't
-list commands that have been marked as being applicable to a specific
-mode (unless you are in a buffer that uses that mode, of course).
-This goes for both major and minor modes.
+@code{command-completion-default-include-p} predicate as the value of
+@code{read-extended-command-predicate}, @kbd{M-x} won't list commands
+that have been marked as being applicable to a specific mode (unless
+you are in a buffer that uses that mode, of course).  This goes for
+both major and minor modes.  (By contrast, @kbd{M-S-x} always omits
+inapplicable commands from the completion candidates.)
 
-Marking commands this way will also make @kbd{C-h m} list these
-commands (if they aren't bound to any keys).
+By default, @code{read-extended-command-predicate} is @code{nil}, and
+completion in @kbd{M-x} lists all the commands that match what the
+user has typed, whether those commands are or aren't marked as
+applicable to the current buffer's mode.
+
+Marking commands to be applicable to a mode will also make @kbd{C-h m}
+list these commands (if they aren't bound to any keys).
 
 If using this extended @code{interactive} form isn't convenient
 (because the code is supposed to work in older versions of Emacs that
@@ -857,13 +866,16 @@ non-@code{nil} if the command is to be included when 
completing in
 that buffer.
 @end deffn
 
+@kindex @kbd{M-X}
+@kindex @kbd{M-S-x}
 @deffn Command execute-extended-command-for-buffer prefix-argument
 This is like @code{execute-extended-command}, but limits the commands
 offered for completion to those commands that are of particular
 relevance to the current major mode (and enabled minor modes).  This
 includes commands that are tagged with the modes (@pxref{Using
 Interactive}), and also commands that are bound to locally active
-keymaps.
+keymaps.  This command is the normal definition of @kbd{M-S-x}
+(that's ``meta shift x'').
 @end deffn
 
 @node Distinguish Interactive
@@ -1175,6 +1187,7 @@ intended by Lisp code to be used as an event.
 * Button-Down Events::          A button was pushed and not yet released.
 * Repeat Events::               Double and triple click (or drag, or down).
 * Motion Events::               Just moving the mouse, not pushing a button.
+* Touchscreen Events::          Tapping and moving fingers on a touchscreen.
 * Focus Events::                Moving the mouse between frames.
 * Xwidget Events::              Events generated by xwidgets.
 * Misc Events::                 Other events the system can generate.
@@ -1315,12 +1328,9 @@ actually treated as the meta key, not this.)
   It is best to avoid mentioning specific bit numbers in your program.
 To test the modifier bits of a character, use the function
 @code{event-modifiers} (@pxref{Classifying Events}).  When making key
-bindings, you can use the read syntax for characters with modifier bits
-(@samp{\C-}, @samp{\M-}, and so on).  For making key bindings with
-@code{define-key}, you can use lists such as @code{(control hyper ?x)} to
-specify the characters (@pxref{Changing Key Bindings}).  The function
-@code{event-convert-list} converts such a list into an event type
-(@pxref{Classifying Events}).
+bindings with @code{keymap-set}, you specify these events using
+strings like @samp{C-H-x} instead (for ``control hyper x'')
+(@pxref{Changing Key Bindings}).
 
 @node Function Keys
 @subsection Function Keys
@@ -1559,8 +1569,10 @@ corner of @var{object}, which is @code{(0 . 0)}.  If 
@var{object} is
 the top left corner of the character glyph clicked on.
 
 @item @var{width}, @var{height}
-These are the pixel width and height of @var{object} or, if this is
-@code{nil}, those of the character glyph clicked on.
+If the click is on a character, either from buffer text or from
+overlay or display string, these are the pixel width and height of
+that character's glyph; otherwise they are dimensions of @var{object}
+clicked on.
 @end table
 
 For clicks on a scroll bar, @var{position} has this form:
@@ -1836,6 +1848,59 @@ small movements.  Otherwise, motion events are not 
generated as long
 as the mouse cursor remains pointing to the same glyph in the text.
 @end defvar
 
+@node Touchscreen Events
+@subsection Touchscreen Events
+@cindex touchscreen events
+@cindex support for touchscreens
+
+Some window systems provide support for input devices that react to
+the user's touching the screen and moving fingers while touching the
+screen.  These input devices are known as touchscreens, and Emacs
+reports the events they generate as @dfn{touchscreen events}.
+
+Most individual events generated by a touchscreen only have meaning as
+part of a larger sequence of other events: for instance, the simple
+operation of tapping the touchscreen involves the user placing and
+raising a finger on the touchscreen, and swiping the display to
+scroll it involves placing a finger, moving it many times upwards or
+downwards, and then raising the finger.
+
+@cindex touch point, in touchscreen events
+While a simplistic model consisting of one finger is adequate for taps
+and scrolling, more complicated gestures require support for keeping
+track of multiple fingers, where the position of each finger is
+represented by a @dfn{touch point}.  For example, a ``pinch to zoom''
+gesture might consist of the user placing two fingers and moving them
+individually in opposite directions, where the distance between the
+positions of their individual points determine the amount by which to
+zoom the display, and the center of an imaginary line between those
+positions determines where to pan the display after zooming.
+
+The low-level touchscreen events described below can be used to
+implement all the touch sequences described above.  In those events,
+each point is represented by a cons of an arbitrary number identifying
+the point and a mouse position list (@pxref{Click Events}) specifying
+the position of the finger when the event occurred.
+
+@table @code
+@cindex @code{touchscreen-begin} event
+@item (touchscreen-begin @var{point})
+This event is sent when @var{point} is created by the user pressing a
+finger against the touchscreen.
+
+@cindex @code{touchscreen-update} event
+@item (touchscreen-update @var{points})
+This event is sent when a point on the touchscreen has changed
+position.  @var{points} is a list of touch points containing the
+up-to-date positions of each touch point currently on the touchscreen.
+
+@cindex @code{touchscreen-end} event
+@item (touchscreen-end @var{point})
+This event is sent when @var{point} is no longer present on the
+display, because another program took the grab, or because the user
+raised the finger from the touchscreen.
+@end table
+
 @node Focus Events
 @subsection Focus Events
 @cindex focus event
@@ -1993,24 +2058,35 @@ This kind of event indicates that the user deiconified 
@var{frame} using
 the window manager.  Its standard definition is @code{ignore}; since the
 frame has already been made visible, Emacs has no work to do.
 
+@cindex @code{touch-end} event
+@item (touch-end (@var{position}))
+This kind of event indicates that the user's finger moved off the
+mouse wheel or the touchpad.  The @var{position} element is a mouse
+position list (@pxref{Click Events}), specifying the position of the
+mouse cursor when the finger moved off the mouse wheel.
+
 @cindex @code{wheel-up} event
 @cindex @code{wheel-down} event
-@item (wheel-up @var{position})
-@itemx (wheel-down @var{position})
+@item (wheel-up @var{position} @var{clicks} @var{lines} @var{pixel-delta})
+@itemx (wheel-down @var{position} @var{clicks} @var{lines} @var{pixel-delta})
 These kinds of event are generated by moving a mouse wheel.  The
 @var{position} element is a mouse position list (@pxref{Click
 Events}), specifying the position of the mouse cursor when the event
-occurred.  The event may have additional arguments after
-@var{position}.  The third argument after @var{position}, if present,
-is a pair of the form @w{@code{(@var{x} . @var{y})}}, where @var{x}
-and @var{y} are the number of pixels to scroll by in each axis.
+occurred.
 
-@cindex pixel-resolution wheel events
-You can use @var{x} and @var{y} to determine how much the mouse wheel
-has actually moved at pixel resolution.
+@var{clicks}, if present, is the number of times that the wheel was
+moved in quick succession.  @xref{Repeat Events}.  @var{lines}, if
+present and not @code{nil}, is the number of screen lines that should
+be scrolled.  @var{pixel-delta}, if present, is a cons cell of the
+form @w{@code{(@var{x} . @var{y})}}, where @var{x} and @var{y} are the
+numbers of pixels by which to scroll in each axis, a.k.a.@:
+@dfn{pixelwise deltas}.
 
-For example, the pixelwise deltas could be used to scroll the display
-at pixel resolution, exactly according to the user's turning the mouse
+@cindex pixel-resolution wheel events
+You can use these @var{x} and @var{y} pixelwise deltas to determine
+how much the mouse wheel has actually moved at pixel resolution.  For
+example, the pixelwise deltas could be used to scroll the display at
+pixel resolution, exactly according to the user's turning the mouse
 wheel.
 
 @vindex mouse-wheel-up-event
@@ -2021,6 +2097,77 @@ portable code, use the variables 
@code{mouse-wheel-up-event} and
 @code{mouse-wheel-down-event} defined in @file{mwheel.el} to determine
 what event types to expect for the mouse wheel.
 
+@cindex @code{pinch} event
+@item (pinch @var{position} @var{dx} @var{dy} @var{scale} @var{angle})
+This kind of event is generated by the user performing a ``pinch''
+gesture by placing two fingers on a touchpad and moving them towards
+or away from each other.  @var{position} is a mouse position list
+(@pxref{Click Events}) that provides the position of the mouse pointer
+when the event occurred, @var{dx} is the change in the horizontal
+distance between the fingers since the last event in the same sequence,
+@var{dy} is the vertical movement of the fingers since the last event
+in the same sequence, @var{scale} is the ratio of the current distance
+between the fingers to that distance at the start of the sequence, and
+@var{angle} is the angular difference in degrees between the direction
+of the line connecting the fingers in this event and the direction of
+that line in the last event of the same sequence.
+
+As pinch events are only sent at the beginning or during a pinch
+sequence, they do not report gestures where the user moves two fingers
+on a touchpad in a rotating fashion without pinching the fingers.
+
+All arguments after @var{position} are floating point numbers.
+
+This event is usually sent as part of a sequence, which begins with
+the user placing two fingers on the touchpad, and ends with the user
+removing those fingers.  @var{dx}, @var{dy}, and @var{angle} will be
+@code{0.0} in the first event of a sequence; subsequent events will
+report non-zero values for these members of the event structure.
+
+@var{dx} and @var{dy} are reported in imaginary relative units, in
+which @code{1.0} is the width and height of the touchpad
+respectively.  They are usually interpreted as being relative to the
+size of the object beneath the gesture: image, window, etc.
+
+@cindex @code{preedit-text} event
+@item (preedit-text @var{arg})
+This event is sent when a system input method tells Emacs to display
+some text to indicate to the user what will be inserted.  The contents
+of @var{arg} are dependent on the window system being used.
+
+On X, @var{arg} is a string describing some text to place behind the
+cursor.  It can be @code{nil}, which means to remove any text
+previously displayed.
+
+On PGTK frames (@pxref{Frames}), @var{arg} is a list of strings with
+information about their color and underline attributes.  It has the
+following form:
+
+@example
+@group
+   ((@var{string1}
+     (ul . @var{underline-color})
+     (bg . @var{background-color})
+     (fg . @var{foreground-color}))
+    (@var{string2}
+     (ul . @var{underline-color})
+     (bg . @var{background-color})
+     (fg . @var{foreground-color}))
+    @dots{}
+   )
+@end group
+@end example
+
+Color information can be omitted, leaving just the text of the
+strings.  @var{underline-color} can be @code{t}, meaning underlined
+text with default underline color, or it can be a string, the name of
+the color to draw the underline.
+
+This is a special event (@pxref{Special Events}), which normally
+should not be bound by the user to any command.  Emacs will typically
+display the text contained in the event in an overlay behind point
+when it is received.
+
 @cindex @code{drag-n-drop} event
 @item (drag-n-drop @var{position} @var{files})
 This kind of event is generated when a group of files is
@@ -2072,7 +2219,7 @@ example:
   (interactive)
   (message "Caught signal %S" last-input-event))
 
-(define-key special-event-map [sigusr1] 'sigusr-handler)
+(keymap-set special-event-map "<sigusr1>" 'sigusr-handler)
 @end smallexample
 
 To test the signal handler, you can make Emacs send a signal to itself:
@@ -2278,21 +2425,6 @@ This function returns non-@code{nil} if @var{object} is 
a mouse movement
 event.  @xref{Motion Events}.
 @end defun
 
-@defun event-convert-list list
-This function converts a list of modifier names and a basic event type
-to an event type which specifies all of them.  The basic event type
-must be the last element of the list.  For example,
-
-@example
-(event-convert-list '(control ?a))
-     @result{} 1
-(event-convert-list '(control meta ?a))
-     @result{} -134217727
-(event-convert-list '(control super f1))
-     @result{} C-s-f1
-@end example
-@end defun
-
 @node Accessing Mouse
 @subsection Accessing Mouse Events
 @cindex mouse events, data in
@@ -2512,25 +2644,14 @@ characters in a string is a complex matter, for reasons 
of historical
 compatibility, and it is not always possible.
 
   We recommend that new programs avoid dealing with these complexities
-by not storing keyboard events in strings.  Here is how to do that:
+by not storing keyboard events in strings containing control
+characters or the like, but instead store them in the common Emacs
+format as understood by @code{key-valid-p}.
 
-@itemize @bullet
-@item
-Use vectors instead of strings for key sequences, when you plan to use
-them for anything other than as arguments to @code{lookup-key} and
-@code{define-key}.  For example, you can use
-@code{read-key-sequence-vector} instead of @code{read-key-sequence}, and
-@code{this-command-keys-vector} instead of @code{this-command-keys}.
-
-@item
-Use vectors to write key sequence constants containing meta characters,
-even when passing them directly to @code{define-key}.
-
-@item
-When you have to look at the contents of a key sequence that might be a
-string, use @code{listify-key-sequence} (@pxref{Event Input Misc})
-first, to convert it to a list.
-@end itemize
+  If you read a key sequence with @code{read-key-sequence-vector} (or
+@code{read-key-sequence}), or access a key sequence with
+@code{this-command-keys-vector} (or @code{this-command-keys}), you can
+transform this to the recommended format by using @code{key-description}.
 
   The complexities stem from the modifier bits that keyboard input
 characters can include.  Aside from the Meta modifier, none of these
@@ -2962,7 +3083,7 @@ causes it to evaluate @code{help-form} and display the 
result.  It
 then continues to wait for a valid input character, or keyboard-quit.
 @end defun
 
-@defun read-multiple-choice prompt choices
+@defun read-multiple-choice prompt choices &optional help-string show-help
 Ask user a multiple choice question.  @var{prompt} should be a string
 that will be displayed as the prompt.
 
@@ -2972,6 +3093,15 @@ entry to be displayed while prompting (if there's room, 
it might be
 shortened), and the third, optional entry is a longer explanation that
 will be displayed in a help buffer if the user requests more help.
 
+If optional argument @var{help-string} is non-@code{nil}, it should be
+a string with a more detailed description of all choices.  It will be
+displayed in a help buffer instead of the default auto-generated
+description when the user types @kbd{?}.
+
+If optional argument @var{show-help} is non-@code{nil}, the help
+buffer will be displayed immediately, before any user input.  If it is
+a string, use it as the name of the help buffer.
+
 The return value is the matching value from @var{choices}.
 
 @lisp
diff --git a/doc/lispref/compile.texi b/doc/lispref/compile.texi
index 523758c10f..2b6ec849d2 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--2021 Free Software Foundation, Inc.
+@c Copyright (C) 1990--1994, 2001--2022 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Byte Compilation
 @chapter Byte Compilation
@@ -924,7 +924,11 @@ of the main Emacs process.  This leaves the main Emacs 
process free to
 use while the compilation runs in the background.  This is the method
 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.
+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
+@code{native-comp-async-report-warnings-errors} in @pxref{Native-Compilation
+Variables} for more details.
 
 @defun native-compile-async files &optional recursively load selector
 This function compiles the named @var{files} asynchronously.  The
@@ -1038,6 +1042,12 @@ Emacs session in a buffer named @file{*Warnings*}.  The 
default value
 @code{t} means display the resulting buffer.  To log warnings without
 popping up the @file{*Warnings*} buffer, set this variable to
 @code{silent}.
+
+  A common cause for asynchronous native-compilation to produce
+warnings is compiling a file that is missing some @code{require} of a
+necessary feature.  The feature may be loaded into the main emacs, but
+because native compilation always starts from a subprocess with a
+pristine environment, that may not be true for the subprocess.
 @end defopt
 
 @defopt native-comp-async-query-on-exit
diff --git a/doc/lispref/control.texi b/doc/lispref/control.texi
index 06da102518..634d46a785 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--2021 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 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 00287a7212..54059d7b6e 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--2021 Free Software Foundation, Inc.
+@c Copyright (C) 1997--2022 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Customization
 @chapter Customization Settings
@@ -654,10 +654,14 @@ you can specify that the value must be @code{nil} or 
@code{t}, but also
 specify the text to describe each value in a way that fits the specific
 meaning of the alternative.
 
+@item key
+The value is a valid key according to @kbd{key-valid-p}, and suitable
+for use with, for example @code{keymap-set}.
+
 @item key-sequence
 The value is a key sequence.  The customization buffer shows the key
 sequence using the same syntax as the @kbd{kbd} function.  @xref{Key
-Sequences}.
+Sequences}.  This is a legacy type; use @code{key} instead.
 
 @item coding-system
 The value must be a coding-system name, and you can do completion with
diff --git a/doc/lispref/debugging.texi b/doc/lispref/debugging.texi
index 6548437817..469ff2d943 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--2021 Free Software
+@c Copyright (C) 1990--1994, 1998--1999, 2001--2022 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 0bdbc06013..12e19efab0 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--2021 Free Software Foundation, Inc.
+@c Copyright (C) 1990--1995, 1998--2022 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Display
 @chapter Emacs Display
@@ -2086,23 +2086,33 @@ displayed in a given window.  This function is used by
 (@pxref{Resizing Windows}) to make a window exactly as large as the text
 it contains.
 
-@defun window-text-pixel-size &optional window from to x-limit y-limit 
mode-lines
+@defun window-text-pixel-size &optional window from to x-limit y-limit 
mode-lines ignore-line-at-end
 This function returns the size of the text of @var{window}'s buffer in
 pixels.  @var{window} must be a live window and defaults to the
 selected one.  The return value is a cons of the maximum pixel-width
 of any text line and the maximum pixel-height of all text lines.  This
 function exists to allow Lisp programs to adjust the dimensions of
-@var{window} to the buffer text it needs to display.
+@var{window} to the buffer text it needs to display, and for other
+similar situations.
+
+The return value can also optionally (see below) include the buffer
+position of the first line whose dimensions were measured.
 
 The optional argument @var{from}, if non-@code{nil}, specifies the
 first text position to consider, and defaults to the minimum
 accessible position of the buffer.  If @var{from} is @code{t}, it
 stands for the minimum accessible position that is not a newline
-character.  The optional argument @var{to}, if non-@code{nil},
-specifies the last text position to consider, and defaults to the
-maximum accessible position of the buffer.  If @var{to} is @code{t},
-it stands for the maximum accessible position that is not a newline
-character.
+character.  If @var{from} is a cons, its @code{car} specifies a buffer
+position, and its @code{cdr} specifies the vertical offset in pixels
+from that position to the first screen line whose text is to be
+measured.  (The measurement will start from the visual beginning of
+that screen line.)  In that case, the return value will instead be a
+list of the pixel-width, pixel-height, and the buffer position of the
+first line that was measured.  The optional argument @var{to}, if
+non-@code{nil}, specifies the last text position to consider, and
+defaults to the maximum accessible position of the buffer.  If
+@var{to} is @code{t}, it stands for the maximum accessible position
+that is not a newline character.
 
 The optional argument @var{x-limit}, if non-@code{nil}, specifies the
 maximum X coordinate beyond which text should be ignored; it is
@@ -2136,6 +2146,12 @@ line, if present, in the return value.  If it is 
@code{t}, include the
 height of all of these lines, if present, in the return value.
 @end defun
 
+The optional argument @var{ignore-line-at-end} controls whether or
+not to count the height of text in @var{to}'s screen line as part of
+the returned pixel-height.  This is useful if your Lisp program is
+only interested in the dimensions of text up to and excluding the
+visual beginning of @var{to}'s screen line.
+
 @code{window-text-pixel-size} treats the text displayed in a window as a
 whole and does not care about the size of individual lines.  The
 following function does.
@@ -2469,8 +2485,9 @@ GNU Emacs Manual}.
 @item :width
 Relative character width.  This should be one of the symbols
 @code{ultra-condensed}, @code{extra-condensed}, @code{condensed},
-@code{semi-condensed}, @code{normal}, @code{semi-expanded},
-@code{expanded}, @code{extra-expanded}, or @code{ultra-expanded}.
+@code{semi-condensed}, @code{normal}, @code{regular}, @code{medium},
+@code{semi-expanded}, @code{expanded}, @code{extra-expanded}, or
+@code{ultra-expanded}.
 
 @item :height
 The height of the font.  In the simplest case, this is an integer in
@@ -2538,13 +2555,16 @@ Underline with the foreground color of the face.
 @item @var{color}
 Underline in color @var{color}, a string specifying a color.
 
-@item @code{(:color @var{color} :style @var{style})}
+@item @code{(:color @var{color} :style @var{style} :position @var{position})}
 @var{color} is either a string, or the symbol @code{foreground-color},
 meaning the foreground color of the face.  Omitting the attribute
 @code{:color} means to use the foreground color of the face.
 @var{style} should be a symbol @code{line} or @code{wave}, meaning to
 use a straight or wavy line.  Omitting the attribute @code{:style}
-means to use a straight line.
+means to use a straight line.  @var{position}, if non-nil, means to
+display the underline at the descent of the text, instead of at the
+baseline level.  If it is a number, then it specifies the amount of
+pixels above the descent to display the underline.
 @end table
 
 @cindex overlined text
@@ -2785,8 +2805,8 @@ apply to.  Here are the possible values of 
@var{characteristic}:
 The kind of window system the terminal uses---either @code{graphic}
 (any graphics-capable display), @code{x}, @code{pc} (for the MS-DOS
 console), @code{w32} (for MS Windows 9X/NT/2K/XP), @code{haiku} (for
-Haiku), or @code{tty} (a non-graphics-capable display).
-@xref{Window Systems, window-system}.
+Haiku), @code{pgtk} (for pure GTK), or @code{tty} (a non-graphics-capable
+display).  @xref{Window Systems, window-system}.
 
 @item class
 What kinds of colors the terminal supports---either @code{color},
@@ -7777,16 +7797,14 @@ The string is formatted #RRGGBB (hash followed by six 
hex digits)."
   (kill-buffer nil))
 
 (setq colorcomp-mode-map
-      (let ((m (make-sparse-keymap)))
-        (suppress-keymap m)
-        (define-key m "i" 'colorcomp-R-less)
-        (define-key m "o" 'colorcomp-R-more)
-        (define-key m "k" 'colorcomp-G-less)
-        (define-key m "l" 'colorcomp-G-more)
-        (define-key m "," 'colorcomp-B-less)
-        (define-key m "." 'colorcomp-B-more)
-        (define-key m " " 'colorcomp-copy-as-kill-and-exit)
-        m))
+      (define-keymap :suppress t
+        "i" 'colorcomp-R-less
+        "o" 'colorcomp-R-more
+        "k" 'colorcomp-G-less
+        "l" 'colorcomp-G-more
+        "," 'colorcomp-B-less
+        "." 'colorcomp-B-more
+        "SPC" 'colorcomp-copy-as-kill-and-exit))
 @end smallexample
 
 Note that we never modify the data in each node, which is fixed when the
@@ -8195,7 +8213,14 @@ there is no available font (on a graphical display), and 
characters
 which cannot be encoded by the terminal's coding system (on a text
 terminal).
 
+@vindex glyphless-display-mode
+The @code{glyphless-display-mode} minor mode can be used to toggle
+displaying glyphless characters in a convenient manner in the current
+buffer.  If this mode is enabled, all the glyphless characters are
+displayed as boxes that display acronyms of their character names.
+
 @defvar glyphless-char-display
+For more fine-grained (and global) control, this variable can be used.
 The value of this variable is a char-table which defines glyphless
 characters and how they are displayed.  Each entry must be one of the
 following display methods:
@@ -8275,6 +8300,16 @@ Characters of Unicode General Category [Cf], such as 
U+200E
 @sc{left-to-right mark}, but excluding characters that have graphic
 images, such as U+00AD @sc{soft hyphen}.
 
+@item bidi-control
+This is a subset of @code{format-control}, but only includes
+characters that are related to bidirectional formatting control, like
+U+2069 @sc{pop directional isolate} and U+202A @sc{left-to-right
+embedding}.  @xref{Bidirectional Display}.
+
+Characters of Unicode General Category [Cf], such as U+200E
+@sc{left-to-right mark}, but excluding characters that have graphic
+images, such as U+00AD @sc{soft hyphen}.
+
 @item variation-selectors
 Unicode VS-1 through VS-16 (U+FE00 through U+FE0F), which are used to
 select between different glyphs for the same codepoints (typically
@@ -8354,6 +8389,8 @@ GNUstep and macOS).
 Emacs is displaying the frame using MS-DOS direct screen writes.
 @item haiku
 Emacs is displaying the frame using the Application Kit on Haiku.
+@item pgtk
+Emacs is displaying the frame using pure GTK facilities.
 @item nil
 Emacs is displaying the frame on a character-based terminal.
 @end table
diff --git a/doc/lispref/edebug.texi b/doc/lispref/edebug.texi
index 0db77255a6..eff9621628 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--2021 Free Software
+@c Copyright (C) 1992--1994, 1998--1999, 2001--2022 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 
diff --git a/doc/lispref/elisp.texi b/doc/lispref/elisp.texi
index 4f47a1d1bb..3254a4dba8 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--2021 Free Software Foundation,
+Copyright @copyright{} 1990--1996, 1998--2022 Free Software Foundation,
 Inc.
 
 @quotation
@@ -526,6 +526,7 @@ Variables
 * Variables with Restricted Values::  Non-constant variables whose value can
                                         @emph{not} be an arbitrary Lisp object.
 * Generalized Variables::   Extending the concept of variables.
+* Multisession Variables::  Variables that survive restarting Emacs.
 
 Scoping Rules for Variable Bindings
 
@@ -547,6 +548,10 @@ Generalized Variables
 * Setting Generalized Variables::   The @code{setf} macro.
 * Adding Generalized Variables::    Defining new @code{setf} forms.
 
+Multisession Variables
+
+* Multisession Variables::      Variables that survive restarting Emacs.
+
 Functions
 
 * What Is a Function::      Lisp functions vs. primitives; terminology.
@@ -1224,6 +1229,7 @@ Text
 * Base 64::                 Conversion to or from base 64 encoding.
 * Checksum/Hash::           Computing cryptographic hashes.
 * GnuTLS Cryptography::     Cryptographic algorithms imported from GnuTLS.
+* Database::                Interacting with an SQL database.
 * Parsing HTML/XML::        Parsing HTML and XML.
 * Atomic Changes::          Installing several buffer changes atomically.
 * Change Hooks::            Supplying functions to be run when text is changed.
diff --git a/doc/lispref/errors.texi b/doc/lispref/errors.texi
index f848218e26..44a62dcebc 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--2021 Free Software Foundation,
+@c Copyright (C) 1990--1993, 1999, 2001--2022 Free Software Foundation,
 @c Inc.
 @c See the file elisp.texi for copying conditions.
 @node Standard Errors
@@ -98,6 +98,10 @@ Lisp reader, not to file I/O@.  @xref{Input Functions}.
 @item file-already-exists
 This is a subcategory of @code{file-error}.  @xref{Writing to Files}.
 
+@item permission-denied
+This is a subcategory of @code{file-error}, which occurs when the OS
+doesn't allow Emacs to access a file or a directory for some reason.
+
 @item file-date-error
 This is a subcategory of @code{file-error}.  It occurs when
 @code{copy-file} tries and fails to set the last-modification time of
diff --git a/doc/lispref/eval.texi b/doc/lispref/eval.texi
index e1998842cf..e94e222e6a 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--2021 Free Software Foundation,
+@c Copyright (C) 1990--1994, 1998, 2001--2022 Free Software Foundation,
 @c Inc.
 @c See the file elisp.texi for copying conditions.
 @node Evaluation
diff --git a/doc/lispref/files.texi b/doc/lispref/files.texi
index 4b114ba111..6e59e87d28 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--2021 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Files
diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi
index 923ff19997..ca7d9ada0b 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--2021 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Frames
@@ -60,6 +60,8 @@ The frame is displayed on a GNUstep or Macintosh Cocoa 
graphical
 terminal.
 @item pc
 The frame is displayed on an MS-DOS terminal.
+@item pgtk
+The frame is displayed using pure GTK facilities.
 @end table
 @end defun
 
@@ -171,7 +173,9 @@ usually not run for the initial frame, since Emacs reads 
the initial
 file only after creating that frame.  However, if the initial frame is
 specified to use a separate minibuffer frame (@pxref{Minibuffers and
 Frames}), the functions will be run for both, the minibuffer-less and
-the minibuffer frame.
+the minibuffer frame.  Alternatively, you can add functions to these
+hooks in your ``early init file'' (@pxref{Init File}), in which case
+they will be in effect for the initial frame as well.
 
 @defvar frame-inherited-parameters
 This variable specifies the list of frame parameters that a newly
@@ -214,7 +218,7 @@ The terminal and keyboard coding systems used on the 
terminal.
 @item
 The kind of display associated with the terminal.  This is the symbol
 returned by the function @code{terminal-live-p} (i.e., @code{x},
-@code{t}, @code{w32}, @code{ns}, @code{pc}, or @code{haiku}).
+@code{t}, @code{w32}, @code{ns}, @code{pc}, @code{haiku}, or @code{pgtk}).
 @xref{Frames}.
 
 @item
@@ -3163,8 +3167,7 @@ that if both frames are visible and their display areas 
overlap,
 third argument @var{above} is non-@code{nil}, this function restacks
 @var{frame1} above @var{frame2}.  This means that if both frames are
 visible and their display areas overlap, @var{frame1} will (partially)
-obscure @var{frame2}.@footnote{Restacking frames is not supported on
-Haiku, due to limitations imposed by the system.}
+obscure @var{frame2}.
 
 Technically, this function may be thought of as an atomic action
 performed in two steps: The first step removes @var{frame1}'s
@@ -3360,20 +3363,22 @@ are handy (@pxref{Window Parameters}).  These allow to 
remove an
 unwanted mode line (when @code{drag-with-header-line} is chosen) and to
 remove mouse-sensitive areas which might interfere with frame dragging.
 
-  To avoid that dragging moves a frame completely out of its parent's
-native frame, something which might happen when the mouse cursor
-overshoots and makes the frame difficult to retrieve once the mouse
-button has been released, it is advisable to set the frame's
-@code{top-visible} or @code{bottom-visible} parameter correspondingly.
-
-  The @code{top-visible} parameter specifies the number of pixels at the
-top of the frame that always remain visible within the parent's native
-frame during dragging and should be set when specifying a non-@code{nil}
-@code{drag-with-header-line} parameter.  The @code{bottom-visible}
-parameter specifies the number of pixels at the bottom of the frame that
-always remain visible within the parent's native frame during dragging
-and should be preferred when specifying a non-@code{nil}
-@code{drag-with-mode-line} parameter.
+  When the user drags a frame with a mouse and overshoots, it's easy
+to drag a frame out of the screen area of its parent.  Retrieving such
+a frame can be hairy once the mouse button has been released.  To
+prevent such a situation, it is advisable to set the frame's
+@code{top-visible} or @code{bottom-visible} parameter (@pxref{Mouse
+Dragging Parameters}).
+
+  Set the @code{top-visible} parameter of a child frame to a number
+when you intend to allow the user dragging that frame by its header
+line.  Setting @code{top-visible} to a number inhibits dragging the
+top edge of the child frame above the top edge of its parent.  Set the
+@code{bottom-visible} parameter to a number when you intend to drag
+that frame via its mode line; this inhibits dragging the bottom edge
+of the child frame beneath the bottom edge of its parent.  In either
+case, that number also specifies width and height (in pixels) of the
+area of the child frame that remains visible during dragging.
 
   When a child frame is used for displaying a buffer via
 @code{display-buffer-in-child-frame} (@pxref{Buffer Display Action
diff --git a/doc/lispref/functions.texi b/doc/lispref/functions.texi
index 9c1fde06b5..96fecc8c89 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--2021 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Functions
@@ -1647,9 +1647,10 @@ function will be interactive and will use the 
interactive spec of
 @var{function}.  One exception: if the interactive spec of @var{function}
 is a function (i.e., a @code{lambda} expression or an @code{fbound}
 symbol rather than an expression or a string), then the interactive
-spec of the combined function will be a call to that function with as sole
-argument the interactive spec of the original function.  To interpret the spec
-received as argument, use @code{advice-eval-interactive-spec}.
+spec of the combined function will be a call to that function with
+the interactive spec of the original function as sole argument.  To
+interpret the spec received as argument, use
+@code{advice-eval-interactive-spec}.
 
 Note: The interactive spec of @var{function} will apply to the combined
 function and should hence obey the calling convention of the combined function
diff --git a/doc/lispref/hash.texi b/doc/lispref/hash.texi
index 12c6a65907..a566d89824 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--2021 Free Software Foundation, Inc.
+@c Copyright (C) 1999, 2001--2022 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 1a9eb30fde..10a12940a1 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--2021 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Documentation
@@ -379,11 +379,15 @@ quotes.  You can customize it freely according to your 
personal
 preference.
 @end defopt
 
-@defun substitute-command-keys string
+@defun substitute-command-keys string &optional no-face
+@vindex help-key-binding@r{ (face)}
 This function scans @var{string} for the above special sequences and
 replaces them by what they stand for, returning the result as a string.
 This permits display of documentation that refers accurately to the
-user's own customized key bindings.
+user's own customized key bindings.  By default, the key bindings are
+given a special face @code{help-key-binding}, but if the optional
+argument @var{no-face} is non-@code{nil}, the function doesn't add
+this face to the produced string.
 
 @cindex advertised binding
 If a command has multiple bindings, this function normally uses the
@@ -647,7 +651,7 @@ follows:
 
 @smallexample
 @group
-(define-key global-map (string help-char) 'help-command)
+(keymap-set global-map (key-description (string help-char)) 'help-command)
 (fset 'help-command help-map)
 @end group
 @end smallexample
diff --git a/doc/lispref/hooks.texi b/doc/lispref/hooks.texi
index e9d1e270d8..107d036202 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--2021 Free Software Foundation,
+@c Copyright (C) 1990--1993, 1998, 2001--2022 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 7718712b9b..bc73ff28a6 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--2021 Free Software
+@c Copyright (C) 1990--1993, 1998--1999, 2001--2022 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node GNU Emacs Internals
diff --git a/doc/lispref/intro.texi b/doc/lispref/intro.texi
index c2ed96472b..5afd2f4ecf 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--2021 Free Software Foundation, Inc.
+@c Copyright (C) 1990--1994, 2001--2022 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 d893e22b8b..9d3dc8fe42 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--2021 Free Software Foundation, Inc.
+@c Copyright (C) 1990--1994, 1998--2022 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Keymaps
 @chapter Keymaps
@@ -357,6 +357,103 @@ A full keymap is more efficient than a sparse keymap when 
it holds
 lots of bindings; for just a few, the sparse keymap is better.
 @end defun
 
+@defun define-keymap &key options... &rest pairs...
+You can create a keymap with the functions described above, and then
+use @code{keymap-set} (@pxref{Changing Key Bindings}) to specify key
+bindings in that map.  When writing modes, however, you frequently
+have to bind a large number of keys at once, and using
+@code{keymap-set} on them all can be tedious and error-prone.  Instead
+you can use @code{define-keymap}, which creates a keymap and binds a
+number of keys.  Here's a very basic example:
+
+@lisp
+(define-keymap
+  "n" #'forward-line
+  "f" #'previous-line
+  "C-c C-c" #'quit-window)
+@end lisp
+
+This function creates a new sparse keymap, defines the keystrokes in
+@var{pairs}, and returns the new keymap.
+
+@var{pairs} is a list of alternating key bindings and key definitions,
+as accepted by @code{keymap-set}.  In addition, the key can be the
+special symbol @code{:menu}, in which case the definition should be a
+menu definition as accepted by @code{easy-menu-define} (@pxref{Easy
+Menu}).  Here's a brief example of this usage:
+
+@lisp
+(define-keymap :full t
+  "g" #'eww-reload
+  :menu '("Eww"
+          ["Exit" quit-window t]
+          ["Reload" eww-reload t]))
+@end lisp
+
+A number of keywords can be used before the key/definition pairs to
+change features of the new keymap.  If any of the feature keywords is
+missing from the @code{define-keymap} call, the default value for that
+feature is @code{nil}.  Here's a list of the available feature
+keywords:
+
+@table @code
+@item :full
+If non-@code{nil}, create a char-table keymap (as from
+@code{make-keymap}) instead of a sparse keymap (as from
+@code{make-sparse-keymap} (@pxref{Creating Keymaps}).  A sparse keymap
+is the default.
+
+@item :parent
+If non-@code{nil}, the value should be a keymap to use as the parent
+(@pxref{Inheritance and Keymaps}).
+
+@item :keymap
+If non-@code{nil}, the value should be a keymap.  Instead of creating
+a new keymap, the specified keymap is modified instead.
+
+@item :suppress
+If non-@code{nil}, the keymap will be suppressed with
+@code{suppress-keymap} (@pxref{Changing Key Bindings}).  By default,
+digits and the minus sign are exempt from suppressing, but if the
+value is @code{nodigits}, this suppresses digits and minus-sign like
+it does with other characters.
+
+@item :name
+If non-@code{nil}, the value should be a string to use as the menu for
+the keymap if you use it as a menu with @code{x-popup-menu}
+(@pxref{Pop-Up Menus}).
+
+@item :prefix
+If non-@code{nil}, the value should be a symbol to be used as a prefix
+command (@pxref{Prefix Keys}).  If this is the case, this symbol is
+returned by @code{define-keymap} instead of the map itself.
+@end table
+
+@end defun
+
+@defmac defvar-keymap name &key options... &rest pairs...
+By far, the most common thing to do with a keymap is to bind it to a
+variable.  This is what virtually all modes do---a mode called
+@code{foo} almost always has a variable called @code{foo-mode-map}.
+
+This macro defines @var{name} as a variable, passes @var{options}
+and @var{pairs} to @code{define-keymap}, and uses the result as the
+default value for the variable.
+
+@var{options} is like the keywords in @code{define-keymap}, but
+there's an additional @code{:doc} keyword that provides the doc
+string for the defined variable.
+
+Here's an example:
+
+@lisp
+(defvar-keymap eww-textarea-map
+  :parent text-mode-map
+  "RET" #'forward-line
+  "TAB" #'shr-next-link)
+@end lisp
+@end defmac
+
 @defun copy-keymap keymap
 This function returns a copy of @var{keymap}.  This is almost never
 needed.  If you want a keymap that's like another yet with a few
@@ -367,7 +464,7 @@ I.e., something like:
 @group
 (let ((map (make-sparse-keymap)))
   (set-keymap-parent map <theirmap>)
-  (define-key map ...)
+  (keymap-set map ...)
   ...)
 @end group
 @end example
@@ -420,10 +517,10 @@ The effect is that this keymap inherits all the bindings 
of
 but can add to them or override them with @var{elements}.
 
 If you change the bindings in @var{parent-keymap} using
-@code{define-key} or other key-binding functions, these changed
+@code{keymap-set} or other key-binding functions, these changed
 bindings are visible in the inheriting keymap, unless shadowed by the
 bindings made by @var{elements}.  The converse is not true: if you use
-@code{define-key} to change bindings in the inheriting keymap, these
+@code{keymap-set} to change bindings in the inheriting keymap, these
 changes are recorded in @var{elements}, but have no effect on
 @var{parent-keymap}.
 
@@ -706,7 +803,7 @@ active keymaps, except for the global keymap.  Secondly, the
 terminal-local variable @code{overriding-terminal-local-map} specifies
 a keymap that takes precedence over @emph{all} other keymaps
 (including @code{overriding-local-map}); this is normally used for
-modal/transient keybindings (the function @code{set-transient-map}
+modal/transient key bindings (the function @code{set-transient-map}
 provides a convenient interface for this).  @xref{Controlling Active
 Maps}, for details.
 
@@ -797,7 +894,7 @@ out with.
 This function returns the current global keymap.  This is the same as
 the value of @code{global-map} unless you change one or the other.
 The return value is a reference, not a copy; if you use
-@code{define-key} or other functions on it you will alter global
+@code{keymap-set} or other functions on it you will alter global
 bindings.
 
 @example
@@ -833,7 +930,7 @@ keymap.
 @end defun
 
 @code{current-local-map} returns a reference to the local keymap, not
-a copy of it; if you use @code{define-key} or other functions on it
+a copy of it; if you use @code{keymap-set} or other functions on it
 you will alter local bindings.
 
 @defun current-minor-mode-maps
@@ -1089,22 +1186,18 @@ macro, a symbol that leads to one of them, or 
@code{nil}.
 
   Here are the functions and variables pertaining to key lookup.
 
-@defun lookup-key keymap key &optional accept-defaults
+@defun keymap-lookup keymap key &optional accept-defaults no-remap position
 This function returns the definition of @var{key} in @var{keymap}.  All
 the other functions described in this chapter that look up keys use
-@code{lookup-key}.  Here are examples:
+@code{keymap-lookup}.  Here are examples:
 
 @example
 @group
-(lookup-key (current-global-map) "\C-x\C-f")
+(keymap-lookup (current-global-map) "C-x C-f")
     @result{} find-file
 @end group
 @group
-(lookup-key (current-global-map) (kbd "C-x C-f"))
-    @result{} find-file
-@end group
-@group
-(lookup-key (current-global-map) "\C-x\C-f12345")
+(keymap-lookup (current-global-map) "C-x C-f 1 2 3 4 5")
     @result{} 2
 @end group
 @end example
@@ -1115,9 +1208,9 @@ and have extra events at the end that do not fit into a 
single key
 sequence.  Then the value is a number, the number of events at the front
 of @var{key} that compose a complete key.
 
-If @var{accept-defaults} is non-@code{nil}, then @code{lookup-key}
+If @var{accept-defaults} is non-@code{nil}, then @code{keymap-lookup}
 considers default bindings as well as bindings for the specific events
-in @var{key}.  Otherwise, @code{lookup-key} reports only bindings for
+in @var{key}.  Otherwise, @code{keymap-lookup} reports only bindings for
 the specific sequence @var{key}, ignoring default bindings except when
 you explicitly ask about them.  (To do this, supply @code{t} as an
 element of @var{key}; see @ref{Format of Keymaps}.)
@@ -1130,11 +1223,11 @@ the second example.
 
 @example
 @group
-(lookup-key (current-global-map) "\M-f")
+(keymap-lookup (current-global-map) "M-f")
     @result{} forward-word
 @end group
 @group
-(lookup-key (current-global-map) "\ef")
+(keymap-lookup (current-global-map) "ESC f")
     @result{} forward-word
 @end group
 @end example
@@ -1145,6 +1238,20 @@ Unlike @code{read-key-sequence}, this function does not 
modify the
 specified events in ways that discard information (@pxref{Key Sequence
 Input}).  In particular, it does not convert letters to lower case and
 it does not change drag events to clicks.
+
+Like the normal command loop, @code{keymap-lookup} will remap the
+command resulting from looking up @var{key} by looking up the command
+in the current keymaps.  However, if the optional third argument
+@var{no-remap} is non-@code{nil}, @code{keymap-lookup} returns the
+command without remapping.
+
+If the optional argument @var{position} is non-@code{nil}, it
+specifies a mouse position as returned by @code{event-start} and
+@code{event-end}, and the lookup occurs in the keymaps associated with
+that position, instead of in @var{keymap}.  @var{position} can also be
+a number or a marker, in which case it is interpreted as a buffer
+position, and the function uses the keymap properties at that position
+instead of at point.
 @end defun
 
 @deffn Command undefined
@@ -1157,7 +1264,7 @@ This function returns the binding for @var{key} in the 
current
 local keymap, or @code{nil} if it is undefined there.
 
 The argument @var{accept-defaults} controls checking for default bindings,
-as in @code{lookup-key} (above).
+as in @code{keymap-lookup} (above).
 @end defun
 
 @defun keymap-global-binding key &optional accept-defaults
@@ -1165,7 +1272,7 @@ This function returns the binding for command @var{key} 
in the
 current global keymap, or @code{nil} if it is undefined there.
 
 The argument @var{accept-defaults} controls checking for default bindings,
-as in @code{lookup-key} (above).
+as in @code{keymap-lookup} (above).
 @end defun
 
 @defun minor-mode-key-binding key &optional accept-defaults
@@ -1182,7 +1289,7 @@ modes are omitted, since they would be completely 
shadowed.  Similarly,
 the list omits non-prefix bindings that follow prefix bindings.
 
 The argument @var{accept-defaults} controls checking for default
-bindings, as in @code{lookup-key} (above).
+bindings, as in @code{keymap-lookup} (above).
 @end defun
 
 @defopt meta-prefix-char
@@ -1297,7 +1404,7 @@ This function sets the binding for @var{key} in 
@var{keymap}.  (If
 in another keymap reached from @var{keymap}.)  The argument
 @var{binding} can be any Lisp object, but only certain types are
 meaningful.  (For a list of meaningful types, see @ref{Key Lookup}.)
-The value returned by @code{define-key} is @var{binding}.
+The value returned by @code{keymap-set} is @var{binding}.
 
 If @var{key} is @kbd{<t>}, this sets the default binding in
 @var{keymap}.  When an event has no binding of its own, the Emacs
@@ -1374,100 +1481,14 @@ changing an entry in @code{ctl-x-map}, and this has 
the effect of
 changing the bindings of both @kbd{C-p C-f} and @kbd{C-x C-f} in the
 default global map.
 
-@defun define-keymap &key options... &rest pairs...
 @code{keymap-set} is the general work horse for defining a key in a
 keymap.  When writing modes, however, you frequently have to bind a
 large number of keys at once, and using @code{keymap-set} on them all
 can be tedious and error-prone.  Instead you can use
-@code{define-keymap}, which creates a keymaps and binds a number of
-keys.  Here's a very basic example:
-
-@lisp
-(define-keymap
-  "n" #'forward-line
-  "f" #'previous-line
-  "C-c C-c" #'quit-window)
-@end lisp
-
-This function creates a new sparse keymap, defines the two keystrokes
-in @var{pairs}, and returns the new keymap.
-
-@var{pairs} is a list of alternating key bindings and key definitions,
-as accepted by @code{keymap-set}.  In addition the key can be the
-special symbol @code{:menu}, in which case the definition should be a
-menu definition as accepted by @code{easy-menu-define} (@pxref{Easy
-Menu}).  Here's a brief example:
-
-@lisp
-(define-keymap :full t
-  "g" #'eww-reload
-  :menu '("Eww"
-          ["Exit" quit-window t]
-          ["Reload" eww-reload t]))
-@end lisp
-
-A number of keywords can be used before the key/definition pairs to
-changes features of the new keymap.  If the keyword is missing, the
-default value for the feature is @code{nil}.  Here's a list of the
-available keywords:
-
-@table @code
-@item :full
-If non-@code{nil}, create a chartable keymap (as from
-@code{make-keymap}) instead of a sparse keymap (as from
-@code{make-sparse-keymap} (@pxref{Creating Keymaps}).  A sparse keymap
-is the default.
-
-@item :parent
-If non-@code{nil}, this should be a keymap to use as the parent
-(@pxref{Inheritance and Keymaps}).
-
-@item :keymap
-If non-@code{nil}, this should be a keymap.  Instead of creating a new
-keymap, this keymap is modified instead.
+@code{define-keymap}, which creates a keymap and binds a number of
+keys.  @xref{Creating Keymaps}, for details.
 
-@item :suppress
-If non-@code{nil}, the keymap will be suppressed with
-@code{suppress-keymap} (@pxref{Changing Key Bindings}).  If
-@code{nodigits}, treat digits like other chars.
-
-@item :name
-If non-@code{nil}, this should be a string to use as the menu for the
-keymap if you use it as a menu with @code{x-popup-menu} (@pxref{Pop-Up
-Menus}).
-
-@item :prefix
-If non-@code{nil}, this should be a symbol to be used as a prefix
-command (@pxref{Prefix Keys}).  If this is the case, this symbol is
-returned by @code{define-keymap} instead of the map itself.
-@end table
-
-@end defun
-
-@defmac defvar-keymap name &key options... &rest pairs...
-By far, the most common thing to do with a keymap is to bind it to a
-variable.  This is what virtually all modes do---a mode called
-@code{foo} almost always has a variable called @code{foo-mode-map}.
-
-This macro defines @var{name} as a variable, and passes @var{options}
-and @var{pars} to @code{define-keymap}, and uses the result as the
-default value for the variable.
-
-@var{options} is like the keywords in @code{define-keymap}, but adds a
-@code{:doc} keyword that says what the doc string for the @var{name}
-variable should be.
-
-Here's an example:
-
-@lisp
-(defvar-keymap eww-textarea-map
-  :parent text-mode-map
-  "RET" #'forward-line
-  "TAB" #'shr-next-link)
-@end lisp
-@end defmac
-
-  The function @code{substitute-key-definition} scans a keymap for
+The function @code{substitute-key-definition} scans a keymap for
 keys that have a certain binding and rebinds them with a different
 binding.  Another feature which is cleaner and can often produce the
 same results is to remap one command into another (@pxref{Remapping
@@ -1726,6 +1747,21 @@ The argument @var{accept-defaults} controls checking for 
default bindings,
 as in @code{lookup-key} (above).
 @end defun
 
+@defun event-convert-list list
+This function converts a list of modifier names and a basic event type
+to an event type which specifies all of them.  The basic event type
+must be the last element of the list.  For example,
+
+@example
+(event-convert-list '(control ?a))
+     @result{} 1
+(event-convert-list '(control meta ?a))
+     @result{} -134217727
+(event-convert-list '(control super f1))
+     @result{} C-s-f1
+@end example
+@end defun
+
 @node Remapping Commands
 @section Remapping Commands
 @cindex remapping commands
@@ -1744,7 +1780,7 @@ definition for a key binding).
 the following remapping:
 
 @smallexample
-(define-key my-mode-map [remap kill-line] 'my-kill-line)
+(keymap-set my-mode-map "<remap> <kill-line>" 'my-kill-line)
 @end smallexample
 
 @noindent
@@ -1759,8 +1795,8 @@ In addition, remapping only works through a single level; 
in the
 following example,
 
 @smallexample
-(define-key my-mode-map [remap kill-line] 'my-kill-line)
-(define-key my-mode-map [remap my-kill-line] 'my-other-kill-line)
+(keymap-set my-mode-map "<remap> <kill-line>" 'my-kill-line)
+(keymap-set my-mode-map "<remap> <my-kill-line>" 'my-other-kill-line)
 @end smallexample
 
 @noindent
@@ -1772,7 +1808,7 @@ remapped to @code{my-kill-line}; if an ordinary binding 
specifies
 To undo the remapping of a command, remap it to @code{nil}; e.g.,
 
 @smallexample
-(define-key my-mode-map [remap kill-line] nil)
+(keymap-set my-mode-map "<remap> <kill-line>" nil)
 @end smallexample
 
 @defun command-remapping command &optional position keymaps
@@ -1904,7 +1940,7 @@ to turn the character that follows into a Hyper character:
         symbol
       (cons symbol (cdr e)))))
 
-(define-key local-function-key-map "\C-ch" 'hyperify)
+(keymap-set local-function-key-map "C-c h" 'hyperify)
 @end group
 @end example
 
@@ -1934,7 +1970,7 @@ problematic suffixes/prefixes are @kbd{@key{ESC}}, 
@kbd{M-O} (which is really
 @section Commands for Binding Keys
 
   This section describes some convenient interactive interfaces for
-changing key bindings.  They work by calling @code{define-key}.
+changing key bindings.  They work by calling @code{keymap-set}.
 
   People often use @code{keymap-global-set} in their init files
 (@pxref{Init File}) for simple customization.  For example,
@@ -1954,7 +1990,7 @@ redefines @kbd{C-x C-\} to move down a line.
 redefines the first (leftmost) mouse button, entered with the Meta key, to
 set point where you click.
 
-@cindex non-@acronym{ASCII} text in keybindings
+@cindex non-@acronym{ASCII} text in key bindings
   Be careful when using non-@acronym{ASCII} text characters in Lisp
 specifications of keys to bind.  If these are read as multibyte text, as
 they usually will be in a Lisp file (@pxref{Loading Non-ASCII}), you
@@ -2259,7 +2295,7 @@ the keymap.  Since @code{define-key} puts new bindings at 
the front, you
 should define the menu items starting at the bottom of the menu and
 moving to the top, if you care about the order.  When you add an item to
 an existing menu, you can specify its position in the menu using
-@code{define-key-after} (@pxref{Modifying Menus}).
+@code{keymap-set-after} (@pxref{Modifying Menus}).
 
 @menu
 * Simple Menu Items::       A simple kind of menu key binding.
@@ -3013,9 +3049,9 @@ To force recalculation of the tool bar, call
   When you insert a new item in an existing menu, you probably want to
 put it in a particular place among the menu's existing items.  If you
 use @code{define-key} to add the item, it normally goes at the front of
-the menu.  To put it elsewhere in the menu, use @code{define-key-after}:
+the menu.  To put it elsewhere in the menu, use @code{keymap-set-after}:
 
-@defun define-key-after map key binding &optional after
+@defun keymap-set-after map key binding &optional after
 Define a binding in @var{map} for @var{key}, with value @var{binding},
 just like @code{define-key}, but position the binding in @var{map} after
 the binding for the event @var{after}.  The argument @var{key} should be
@@ -3029,7 +3065,7 @@ inherited keymap.
 Here is an example:
 
 @example
-(define-key-after my-menu [drink]
+(keymap-set-after my-menu "<drink>"
   '("Drink" . drink-command) 'eat)
 @end example
 
@@ -3041,7 +3077,7 @@ Here is how to insert an item called @samp{Work} in the 
@samp{Signals}
 menu of Shell mode, after the item @code{break}:
 
 @example
-(define-key-after shell-mode-map [menu-bar signals work]
+(keymap-set-after shell-mode-map "<menu-bar> <signals> <work>"
   '("Work" . work-command) 'break)
 @end example
 @end defun
diff --git a/doc/lispref/lay-flat.texi b/doc/lispref/lay-flat.texi
index 4ea58e6172..77820ed68e 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--2021 Free Software Foundation, Inc.
+@c Copyright (C) 2001--2022 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 f98ae76da9..4a862ab0de 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--2021 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 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 4d683da1ad..5957b8ac38 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--2021 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Loading
@@ -291,29 +291,35 @@ a directory) or @code{nil} (which stands for the current 
working
 directory).
 @end defvar
 
-  When Emacs starts up, it sets up the value of @code{load-path}
-in several steps.  First, it initializes @code{load-path} using
-default locations set when Emacs was compiled.  Normally, this
-is a directory something like
+  When Emacs starts up, it sets up the value of @code{load-path} in
+several steps.  First, it looks for the directory containing its own
+Lisp files, using default locations set when Emacs was compiled.  It
+saves this directory in @code{lisp-directory}.  Normally, this is a
+directory where the @file{*.elc} files are installed, something like
 
 @example
 "/usr/local/share/emacs/@var{version}/lisp"
 @end example
 
-(In this and the following examples, replace @file{/usr/local} with
-the installation prefix appropriate for your Emacs.)
-These directories contain the standard Lisp files that come with
-Emacs.  If Emacs cannot find them, it will not start correctly.
+@noindent
+where @var{version} is the Emacs version.  (In this and the following
+examples, replace @file{/usr/local} with the prefix appropriate for
+your Emacs installation.)  This directory and its subdirectories
+contain the standard Lisp files that come with Emacs.  If Emacs cannot
+find its own Lisp files, it will not start correctly.
 
 If you run Emacs from the directory where it was built---that is, an
-executable that has not been formally installed---Emacs instead
-initializes @code{load-path} using the @file{lisp}
-directory in the directory containing the sources from which it
-was built.
+executable that has not been installed yet---Emacs instead initializes
+@code{lisp-directory} using the @file{lisp} subdirectory of the
+directory containing the sources from which it was built.
+
+Emacs then initializes @code{load-path} with this @code{lisp-directory}.
 @c Though there should be no *.el files in builddir/lisp, so it's pointless.
 If you built Emacs in a separate directory from the
-sources, it also adds the lisp directories from the build directory.
-(In all cases, elements are represented as absolute file names.)
+sources, it also adds the @file{lisp} subdirectory of the build directory.
+
+All of these directories are stored in the above two variables as
+absolute file names.
 
 @cindex site-lisp directories
 Unless you start Emacs with the @option{--no-site-lisp} option,
@@ -333,12 +339,12 @@ and
 @end example
 
 @noindent
-The first one is for locally installed files for a specific Emacs
-version; the second is for locally installed files meant for use
-with all installed Emacs versions.  (If Emacs is running uninstalled,
-it also adds @file{site-lisp} directories from the source and build
-directories, if they exist.  Normally these directories do not contain
-@file{site-lisp} directories.)
+The first one is for locally installed files for the current Emacs
+@var{version}; the second is for locally installed files meant for use
+with any installed Emacs version.  (If Emacs is running uninstalled,
+it also adds @file{site-lisp} subdirectories from the source and build
+directories, if they exist.  However, normally the source and build
+directories do not contain @file{site-lisp} subdirectories.)
 
 @cindex @env{EMACSLOADPATH} environment variable
 If the environment variable @env{EMACSLOADPATH} is set, it modifies
@@ -360,9 +366,10 @@ export EMACSLOADPATH=/home/foo/.emacs.d/lisp:
 @end example
 
 An empty element in the value of the environment variable, whether
-trailing (as in the above example), leading, or embedded, is replaced
-by the default value of @code{load-path} as determined by the standard
-initialization procedure.  If there are no such empty elements, then
+trailing (as in the above example, note the trailing @samp{:}),
+leading, or embedded, is replaced by the default value of
+@code{load-path} as determined by the standard initialization
+procedure.  If there are no such empty elements, then
 @env{EMACSLOADPATH} specifies the entire @code{load-path}.  You must
 include either an empty element, or the explicit path to the directory
 containing the standard Lisp files, else Emacs will not function.
@@ -391,11 +398,23 @@ add one or more directories to @code{load-path}.  For 
example:
 (push "~/.emacs.d/lisp" load-path)
 @end example
 
+@noindent
+@xref{List Variables, push}, for the description of @code{push}.
+
   Dumping Emacs uses a special value of @code{load-path}.  If you use
 a @file{site-load.el} or @file{site-init.el} file to customize the
 dumped Emacs (@pxref{Building Emacs}), any changes to @code{load-path}
 that these files make will be lost after dumping.
 
+@defvar lisp-directory
+This variable holds a string naming the directory which holds
+Emacs's own @file{*.el} and @file{*.elc} files.  This is usually the
+place where those files are located in the Emacs installation tree,
+unless Emacs is run from its build directory in which case it points
+to the @file{lisp} subdirectory in the source directory from which
+Emacs was built.
+@end defvar
+
 @deffn Command locate-library library &optional nosuffix path interactive-call
 This command finds the precise file name for library @var{library}.  It
 searches for the library in the same way @code{load} does, and the
@@ -482,7 +501,7 @@ automatically.  However, if this does make a difference, 
you can force
 a particular Lisp file to be interpreted as unibyte by writing
 @samp{coding: raw-text} in a local variables section.  With
 that designator, the file will unconditionally be interpreted as
-unibyte.  This can matter when making keybindings to
+unibyte.  This can matter when making key bindings to
 non-@acronym{ASCII} characters written as @code{?v@var{literal}}.
 
 @node Autoload
@@ -552,7 +571,7 @@ An autoloaded keymap loads automatically during key lookup 
when a prefix
 key's binding is the symbol @var{function}.  Autoloading does not occur
 for other kinds of access to the keymap.  In particular, it does not
 happen when a Lisp program gets the keymap from the value of a variable
-and calls @code{define-key}; not even if the variable name is the same
+and calls @code{keymap-set}; not even if the variable name is the same
 symbol @var{function}.
 
 @cindex function cell in autoload
@@ -1156,7 +1175,7 @@ You don't need to give a directory or extension in the 
file name
 @var{library}.  Normally, you just give a bare file name, like this:
 
 @example
-(with-eval-after-load "js" (define-key js-mode-map "\C-c\C-c" 'js-eval))
+(with-eval-after-load "js" (keymap-set js-mode-map "C-c C-c" 'js-eval))
 @end example
 
 To restrict which files can trigger the evaluation, include a
diff --git a/doc/lispref/macros.texi b/doc/lispref/macros.texi
index cf23ecb9d4..26a611613c 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--2021 Free Software Foundation,
+@c Copyright (C) 1990--1995, 1998, 2001--2022 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 59c6e6f57a..90497728a1 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--2021 Free Software Foundation,
+@c Copyright (C) 1990--1993, 1999, 2001--2022 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 80f79b67e5..8362799b62 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--2021 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 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 281e987e7f..f05f087ba7 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--2021 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 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 bc5c08c687..5fc831536e 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--2021 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Modes
@@ -916,10 +916,8 @@ which in turn may have been changed in a mode hook.
 Here is a hypothetical example:
 
 @example
-(defvar hypertext-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [down-mouse-3] 'do-hyper-link)
-    map))
+(defvar-keymap hypertext-mode-map
+  "<down-mouse-3>" #'do-hyper-link)
 
 (define-derived-mode hypertext-mode
   text-mode "Hypertext"
@@ -1344,11 +1342,9 @@ the conventions listed above:
 
 ;; @r{Create the keymap for this mode.}
 @group
-(defvar text-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map "\e\t" 'ispell-complete-word)
-    @dots{}
-    map)
+(defvar-keymap text-mode-map
+  "C-M-i" #'ispell-complete-word
+  @dots{})
   "Keymap for `text-mode'.
 Many other modes, such as `mail-mode', `outline-mode' and
 `indented-text-mode', inherit all the commands defined in this map.")
@@ -1421,13 +1417,11 @@ common.  The following code sets up the common commands:
 
 @smallexample
 @group
-(defvar lisp-mode-shared-map
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map prog-mode-map)
-    (define-key map "\e\C-q" 'indent-sexp)
-    (define-key map "\177" 'backward-delete-char-untabify)
-    map)
-  "Keymap for commands shared by all sorts of Lisp modes.")
+(defvar-keymap lisp-mode-shared-map
+  :parent prog-mode-map
+  :doc "Keymap for commands shared by all sorts of Lisp modes."
+  "C-M-q" #'indent-sexp
+  "DEL" #'backward-delete-char-untabify)
 @end group
 @end smallexample
 
@@ -1436,16 +1430,12 @@ And here is the code to set up the keymap for Lisp mode:
 
 @smallexample
 @group
-(defvar lisp-mode-map
-  (let ((map (make-sparse-keymap))
-        (menu-map (make-sparse-keymap "Lisp")))
-    (set-keymap-parent map lisp-mode-shared-map)
-    (define-key map "\e\C-x" 'lisp-eval-defun)
-    (define-key map "\C-c\C-z" 'run-lisp)
-    @dots{}
-    map)
-  "Keymap for ordinary Lisp mode.
-All commands in `lisp-mode-shared-map' are inherited by this map.")
+(defvar-keymap lisp-mode-map
+  :doc "Keymap for ordinary Lisp mode.
+All commands in `lisp-mode-shared-map' are inherited by this map."
+  :parent lisp-mode-shared-map
+  "C-M-x" #'lisp-eval-defun
+  "C-c C-z" #'run-lisp)
 @end group
 @end smallexample
 
diff --git a/doc/lispref/nonascii.texi b/doc/lispref/nonascii.texi
index 24117b5001..f495910fcd 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--2021 Free Software Foundation, Inc.
+@c Copyright (C) 1998--1999, 2001--2022 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 d28e15869a..fdcda328d8 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--2021 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 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 bbd3973f61..07caaa2a07 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--2021 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 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 fb0f25fa3d..3750abc4e8 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--2021 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node System Interface
@@ -1352,7 +1352,7 @@ may change as higher-resolution clocks become available.
 
 @cindex time value
   Function arguments, e.g., the @var{time} argument to
-@code{current-time-string}, accept a more-general @dfn{time value}
+@code{format-time-string}, accept a more-general @dfn{time value}
 format, which can be a Lisp timestamp, @code{nil} for the current
 time, a single floating-point number for seconds, or a list
 @code{(@var{high} @var{low} @var{micro})} or @code{(@var{high}
@@ -1507,10 +1507,7 @@ The optional @var{form} argument specifies the timestamp 
form to be
 returned.  If @var{form} is the symbol @code{integer}, this function
 returns an integer count of seconds.  If @var{form} is a positive
 integer, it specifies a clock frequency and this function returns an
-integer-pair timestamp @code{(@var{ticks}
-. @var{form})}.@footnote{Currently a positive integer @var{form}
-should be at least 65536 if the returned value is intended to be given
-to standard functions expecting Lisp timestamps.}  If @var{form} is
+integer-pair timestamp @code{(@var{ticks} . @var{form})}.  If @var{form} is
 @code{t}, this function treats it as a positive integer suitable for
 representing the timestamp; for example, it is treated as 1000000000
 if @var{time} is nil and the platform timestamp has nanosecond
@@ -1724,7 +1721,8 @@ This function parses the time-string @var{string} and 
returns the
 corresponding Lisp timestamp.  The argument @var{string} should represent
 a date-time, and should be in one of the forms recognized by
 @code{parse-time-string} (see below).  This function assumes Universal
-Time if @var{string} lacks explicit time zone information.
+Time if @var{string} lacks explicit time zone information,
+and assumes earliest values if @var{string} lacks month, day, or time.
 The operating system limits the range of time and zone values.
 @end defun
 
@@ -1796,9 +1794,16 @@ This stands for the ISO 8601 date format, which is like
 @samp{%+4Y-%m-%d} except that any flags or field width override the
 @samp{+} and (after subtracting 6) the @samp{4}.
 @item %g
-This stands for the year corresponding to the ISO week within the century.
+@cindex ISO week, in time formatting
+This stands for the year without century (00--99) corresponding to the
+current @dfn{ISO week} number.  ISO weeks start on Monday and end on
+Sunday.  If an ISO week begins in one year and ends in another, the
+rules regarding which year @samp{%g} will produce are complex and will
+not be described here; however, in general, if most of the week's days
+are in the ending year, @samp{%g} will produce that year.
 @item %G
-This stands for the year corresponding to the ISO week.
+This stands for the year with century corresponding to the current ISO
+week number.
 @item %h
 This is a synonym for @samp{%b}.
 @item %H
@@ -2183,7 +2188,13 @@ In most cases, @var{repeat} has no effect on when 
@emph{first} call
 takes place---@var{time} alone specifies that.  There is one exception:
 if @var{time} is @code{t}, then the timer runs whenever the time is a
 multiple of @var{repeat} seconds after the epoch.  This is useful for
-functions like @code{display-time}.
+functions like @code{display-time}.  For instance, the following will
+make @var{function} run at every ``whole'' minute (e.g.,
+@samp{11:03:00}, @samp{11:04:00}, etc):
+
+@example
+(run-at-time t 60 @var{function})
+@end example
 
 If Emacs didn't get any CPU time when the timer would have run (for
 example if the system was busy running another process or if the
diff --git a/doc/lispref/package.texi b/doc/lispref/package.texi
index aeb455bb25..a503a7edde 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--2021 Free Software Foundation, Inc.
+@c Copyright (C) 2010--2022 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Packaging
 @chapter Preparing Lisp code for distribution
diff --git a/doc/lispref/positions.texi b/doc/lispref/positions.texi
index 769aeed75f..ca1166caac 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--2021 Free Software Foundation, Inc.
+@c Copyright (C) 1990--1995, 1998--2022 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Positions
 @chapter Positions
diff --git a/doc/lispref/processes.texi b/doc/lispref/processes.texi
index 8a9cb2a8f8..a38a84e22b 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--2021 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Processes
@@ -966,6 +966,15 @@ use the function @code{process-tty-name} (@pxref{Process
 Information}).
 @end defvar
 
+@defvar process-error-pause-time
+If a process sentinel/filter function has an error, Emacs will (by
+default) pause Emacs for @code{process-error-pause-time} seconds after
+displaying this error, so that users will see the error in question.
+However, this can lead to situations where Emacs becomes unresponsive
+(if there's a lot of these errors happening), so this can be disabled
+by setting @code{process-error-pause-time} to 0.
+@end defvar
+
 @node Deleting Processes
 @section Deleting Processes
 @cindex deleting processes
diff --git a/doc/lispref/records.texi b/doc/lispref/records.texi
index 573caf1672..1408485100 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--2021 Free Software Foundation, Inc.
+@c Copyright (C) 2017--2022 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 296ce20169..c9828f9c86 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--2021 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Searching and Matching
@@ -2854,7 +2854,7 @@ Display some help, then ask again.
 
 @defvar multi-query-replace-map
 This variable holds a keymap that extends @code{query-replace-map} by
-providing additional keybindings that are useful in multi-buffer
+providing additional key bindings that are useful in multi-buffer
 replacements.  The additional bindings are:
 
 @table @code
diff --git a/doc/lispref/sequences.texi b/doc/lispref/sequences.texi
index 4a48d62f6d..c3f4cff301 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--2021 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Sequences Arrays Vectors
diff --git a/doc/lispref/streams.texi b/doc/lispref/streams.texi
index 535fc958f2..c6b3397ae1 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--2021 Free Software
+@c Copyright (C) 1990--1994, 1998--1999, 2001--2022 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 0914f20411..d31807ad2a 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--2021 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 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 b30a16927e..a951e9be8a 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--2021 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 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 87ade73c2a..9120e63727 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--2021 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 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 863b318c20..b9df66dbdb 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--2021 Free Software Foundation, Inc.
+@c Copyright (C) 1990--1995, 1998--2022 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Text
 @chapter Text
@@ -60,6 +60,7 @@ the character after point.
 * Base 64::          Conversion to or from base 64 encoding.
 * Checksum/Hash::    Computing cryptographic hashes.
 * GnuTLS Cryptography:: Cryptographic algorithms imported from GnuTLS.
+* Database::         Interacting with an SQL database.
 * Parsing HTML/XML:: Parsing HTML and XML.
 * Parsing JSON::     Parsing and generating JSON values.
 * JSONRPC::          JSON Remote Procedure Call protocol
@@ -1651,6 +1652,47 @@ The variable @code{paragraph-separate} controls how to 
distinguish
 paragraphs.  @xref{Standard Regexps}.
 @end deffn
 
+@defun pixel-fill-region start end pixel-width
+Most Emacs buffers use monospaced text, so all the filling functions
+(like @code{fill-region}) work based on the number of characters and
+@code{char-width}.  However, Emacs can render other types of things,
+like text that contains images and using proportional fonts, and the
+@code{pixel-fill-region} exists to handle that.  It fills the region
+of text between @var{start} and @var{end} at pixel granularity, so
+text using variable-pitch fonts or several different fonts looks
+filled regardless of different character sizes.  The argument
+@var{pixel-width} specifies the maximum pixel width a line is allowed
+to have after filling; it is the pixel-resolution equivalent of the
+@code{fill-column} in @code{fill-region}.  For instance, this Lisp
+snippet will insert text using a proportional font, and then fill this
+to be no wider than 300 pixels:
+
+@lisp
+(insert (propertize
+        "This is a sentence that's ends here."
+        'face 'variable-pitch))
+(pixel-fill-region (point) (point-max) 300)
+@end lisp
+
+If @var{start} isn't at the start of a line, the horizontal position
+of @var{start}, converted to pixel units, will be used as the
+indentation prefix on subsequent lines.
+
+@findex pixel-fill-width
+The @code{pixel-fill-width} helper function can be used to compute the
+pixel width to use.  If given no arguments, it'll return a value
+slightly less than the width of the current window.  The first
+optional value, @var{columns}, specifies the number of columns using
+the standard, monospaced fonts, e.g. @code{fill-column}.  The second
+optional value is the window to use.  You'd typically use it like
+this:
+
+@lisp
+(pixel-fill-region
+  start end (pixel-fill-width fill-column))
+@end lisp
+@end defun
+
 @deffn Command fill-individual-paragraphs start end &optional justify 
citation-regexp
 This command fills each paragraph in the region according to its
 individual fill prefix.  Thus, if the lines of a paragraph were indented
@@ -3681,14 +3723,14 @@ Consecutive characters with the same @code{field} 
property constitute a
 @kindex cursor @r{(text property)}
 Normally, the cursor is displayed at the beginning or the end of any
 overlay and text property strings present at the current buffer
-position.  You can place the cursor on any desired character of these
-strings by giving that character a non-@code{nil} @code{cursor} text
-property.  In addition, if the value of the @code{cursor} property is
-an integer, it specifies the number of buffer's character
-positions, starting with the position where the overlay or the
-@code{display} property begins, for which the cursor should be
-displayed on that character.  Specifically, if the value of the
-@code{cursor} property of a character is the number @var{n}, the
+position.  You can instead tell Emacs to place the cursor on any
+desired character of these strings by giving that character a
+non-@code{nil} @code{cursor} text property.  In addition, if the value
+of the @code{cursor} property is an integer, it specifies the number
+of buffer's character positions, starting with the position where the
+overlay or the @code{display} property begins, for which the cursor
+should be displayed on that character.  Specifically, if the value of
+the @code{cursor} property of a character is the number @var{n}, the
 cursor will be displayed on this character for any buffer position in
 the range @code{[@var{ovpos}..@var{ovpos}+@var{n})}, where @var{ovpos}
 is the overlay's starting position given by @code{overlay-start}
@@ -3697,14 +3739,23 @@ text property begins in the buffer.
 
 In other words, the string character with the @code{cursor} property
 of any non-@code{nil} value is the character where to display the
-cursor.  The value of the property says for which buffer positions to
-display the cursor there.  If the value is an integer @var{n},
-the cursor is displayed there when point is anywhere between the
-beginning of the overlay or @code{display} property and @var{n}
-positions after that.  If the value is anything else and
-non-@code{nil}, the cursor is displayed there only when point is at
-the beginning of the @code{display} property or at
-@code{overlay-start}.
+cursor when the overlay or display string make point not visible on
+display.  The value of the property says for which buffer positions to
+display the cursor there.  If the value is an integer @var{n}, the
+cursor is displayed there when point is anywhere between the beginning
+of the overlay or @code{display} property and @var{n} positions after
+that.  If the value is anything else and non-@code{nil}, the cursor is
+displayed there only when point is at the buffer position that is the
+beginning of the @code{display} property, or at @code{overlay-start}
+if that position is not visible on display.  Note that an integer
+value of the @code{cursor} property could mean that the cursor is
+displayed on that character even when point is visible on display.
+
+One subtlety of this property is that it doesn't work to put this
+property on a newline character that is part of a display or overlay
+string.  That's because the newline doesn't have a graphic
+representation on the screen for Emacs to find when it looks for a
+character on display with that @code{cursor} property.
 
 @cindex cursor position for @code{display} properties and overlays
 When the buffer has many overlay strings (e.g., @pxref{Overlay
@@ -4195,7 +4246,7 @@ position.  The action code is always @code{t}.
 For example, here is how Info mode handles @key{mouse-1}:
 
 @smallexample
-(define-key Info-mode-map [follow-link] 'mouse-face)
+(keymap-set Info-mode-map "<follow-link>" 'mouse-face)
 @end smallexample
 
 @item a function
@@ -4208,9 +4259,9 @@ For example, here is how pcvs enables @kbd{mouse-1} to 
follow links on
 file names only:
 
 @smallexample
-(define-key map [follow-link]
-  (lambda (pos)
-    (eq (get-char-property pos 'face) 'cvs-filename-face)))
+(keymap-set map "<follow-link>"
+            (lambda (pos)
+              (eq (get-char-property pos 'face) 'cvs-filename-face)))
 @end smallexample
 
 @item anything else
@@ -4742,9 +4793,8 @@ converting to and from this code.
 This function converts the region from @var{beg} to @var{end} into base
 64 code.  It returns the length of the encoded text.  An error is
 signaled if a character in the region is multibyte, i.e., in a
-multibyte buffer the region must contain only characters from the
-charsets @code{ascii}, @code{eight-bit-control} and
-@code{eight-bit-graphic}.
+multibyte buffer the region must contain only ASCII characters or raw
+bytes.
 
 Normally, this function inserts newline characters into the encoded
 text, to avoid overlong lines.  However, if the optional argument
@@ -5085,6 +5135,177 @@ On success, it returns a list of a binary string (the 
output) and the
 IV used.
 @end defun
 
+@node Database
+@section Database
+@cindex database access, SQLite
+
+  Emacs can be compiled with built-in support for accessing SQLite
+databases.  This section describes the facilities available for
+accessing SQLite databases from Lisp programs.
+
+@defun sqlite-available-p
+The function returns non-@code{nil} if built-in SQLite support is
+available in this Emacs session.
+@end defun
+
+When SQLite support is available, the following functions can be used.
+
+@cindex database object
+@defun sqlite-open &optional file
+This function opens @var{file} as an SQLite database file.  If
+@var{file} doesn't exist, a new database will be created and stored in
+that file.  If @var{file} is omitted or @code{nil}, a new in-memory
+database is created instead.
+
+The return value is a @dfn{database object} that can be used as the
+argument to most of the subsequent functions described below.
+@end defun
+
+@defun sqlitep object
+This predicate returns non-@code{nil} if @var{object} is an SQLite
+database object.  The database object returned by the
+@code{sqlite-open} function satisfies this predicate.
+@end defun
+
+@defun sqlite-close db
+Close the database @var{db}.  It's usually not necessary to call this
+function explicitly---the database will automatically be closed if
+Emacs shuts down or the database object is garbage collected.
+@end defun
+
+@defun sqlite-execute db statement &optional values
+Execute the @acronym{SQL} @var{statement}.  For instance:
+
+@lisp
+(sqlite-execute db "insert into foo values ('bar', 2)")
+@end lisp
+
+If the optional @var{values} parameter is present, it should be either
+a list or a vector of values to bind while executing the statement.
+For instance:
+
+@lisp
+(sqlite-execute db "insert into foo values (?, ?)" '("bar" 2))
+@end lisp
+
+This has exactly the same effect as the previous example, but is more
+efficient and safer (because it doesn't involve any string parsing or
+interpolation).
+
+@code{sqlite-execute} returns the number of affected rows.  For
+instance, an @samp{insert} statement will return @samp{1}, whereas an
+@samp{update} statement may return zero or a higher number.
+@end defun
+
+@defun sqlite-select db query &optional values result-type
+Select some data from @var{db} and return them.  For instance:
+
+@lisp
+(sqlite-select db "select * from foo where key = 2")
+  @result{} (("bar" 2))
+@end lisp
+
+As with the @code{sqlite-execute}, you can optionally pass in a list
+or a vector of values that will be bound before executing the select:
+
+@lisp
+(sqlite-select db "select * from foo where key = ?" [2])
+  @result{} (("bar" 2))
+@end lisp
+
+This is usually more efficient and safer than the method used by the
+previous example.
+
+By default, this function returns a list of matching rows, where each
+row is a list of column values.  If @var{return-type} is @code{full},
+the names of the columns (as a list of strings) will be returned as
+the first element in the return value.
+
+@cindex statement object
+If @var{return-type} is @code{set}, this function will return a
+@dfn{statement object} instead.  This object can be examined by using
+the @code{sqlite-next}, @code{sqlite-columns} and @code{sqlite-more-p}
+functions.  If the result set is small, it's often more convenient to
+just return the data directly, but if the result set is large (or if
+you won't be using all the data from the set), using the @code{set}
+method will allocate a lot less memory, and is therefore more
+memory-efficient.
+@end defun
+
+@defun sqlite-next statement
+This function returns the next row in the result set @var{statement},
+typically an object returned by @code{sqlite-select}.
+
+@lisp
+(sqlite-next stmt)
+    @result{} ("bar" 2)
+@end lisp
+@end defun
+
+@defun sqlite-columns statement
+This function returns the column names of the result set
+@var{statement}, typically an object returned by @code{sqlite-select}.
+
+@lisp
+(sqlite-columns stmt)
+    @result{} ("name" "issue")
+@end lisp
+@end defun
+
+@defun sqlite-more-p statement
+This predicate says whether there is more data to be fetched from the
+result set @var{statement}, typically an object returned by
+@code{sqlite-select}.
+@end defun
+
+@defun sqlite-finalize statement
+If @var{statement} is not going to be used any more, calling this
+function will free the resources used by @var{statement}.  This is
+usually not necessary---when the @var{statement} object is
+garbage-collected, Emacs will automatically free its resources.
+@end defun
+
+@defun sqlite-transaction db
+Start a transaction in @var{db}.  When in a transaction, other readers
+of the database won't access the results until the transaction has
+been committed by @code{sqlite-commit}.
+@end defun
+
+@defun sqlite-commit db
+End a transaction in @var{db} and write the data out to its file.
+@end defun
+
+@defun sqlite-rollback db
+End a transaction in @var{db} and discard any changes that have been
+made by the transaction.
+@end defun
+
+@defmac with-sqlite-transaction db body@dots{}
+Like @code{progn} (@pxref{Sequencing}), but executes @var{body} with a
+transaction held, and commits the transaction at the end.
+@end defmac
+
+@defun sqlite-pragma db pragma
+Execute @var{pragma} in @var{db}.  A @dfn{pragma} is usually a command
+that affects the database overall, instead of any particular table.
+For instance, to make SQLite automatically garbage collect data that's
+no longer needed, you can say:
+
+@lisp
+(sqlite-pragma db "auto_vacuum = FULL")
+@end lisp
+
+This function returns non-@code{nil} on success and @code{nil} if the
+pragma failed.  Many pragmas can only be issued when the database is
+brand new and empty.
+@end defun
+
+@defun sqlite-load-extension db module
+Load the named extension @var{module} into the database @var{db}.
+Extensions are usually shared-library files; on GNU and Unix systems,
+they have the @file{.so} file-name extension.
+@end defun
+
 @node Parsing HTML/XML
 @section Parsing HTML and XML
 @cindex parsing html
diff --git a/doc/lispref/threads.texi b/doc/lispref/threads.texi
index a06bd3e801..35513f7262 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--2021 Free Software Foundation, Inc.
+@c Copyright (C) 2012--2022 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 cbfcbd8d14..061a5d672e 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--2021 Free Software
+@c Copyright (C) 1990--1993, 1995, 1998--1999, 2001--2022 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Tips
diff --git a/doc/lispref/two-volume-cross-refs.txt 
b/doc/lispref/two-volume-cross-refs.txt
index ad13d98dd9..e7bd4706c6 100644
--- a/doc/lispref/two-volume-cross-refs.txt
+++ b/doc/lispref/two-volume-cross-refs.txt
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2021 Free Software Foundation, Inc.
+Copyright (C) 2001-2022 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 cf612b1257..f401d4a1f2 100644
--- a/doc/lispref/two-volume.make
+++ b/doc/lispref/two-volume.make
@@ -1,4 +1,4 @@
-# Copyright (C) 2007-2021 Free Software Foundation, Inc.
+# Copyright (C) 2007-2022 Free Software Foundation, Inc.
 # See end for copying conditions.
 
 # although it would be nice to use tex rather than pdftex to avoid
@@ -35,7 +35,7 @@ vol1.pdf: elisp1med-fns-ready elisp1med-aux-ready 
elisp1med-toc-ready
        $(tex1)
 #
 vol2.pdf: elisp2med-fns-ready elisp2med-aux-ready elisp2med-toc-ready
-       @echo "Final TeX run for volume 2..."
+       $(info Final TeX run for volume 2...)
        cp elisp2med-toc-ready elisp2-toc-ready.toc
        cp elisp2med-fns-ready vol2.fns
        cp elisp2med-aux-ready vol2.aux
@@ -123,7 +123,7 @@ elisp1med-init: elisp1-fns-ready elisp1-aux-ready 
elisp1init-toc-ready $(texinfo
        mv vol1.toc elisp1med-toc
 #
 elisp2med-init: elisp2-fns-ready elisp2-aux-ready elisp2init-toc-ready 
$(texinfodir)/texinfo.tex
-       @echo "Final TeX run for volume 2..."
+       $(info Final TeX run for volume 2...)
        cp elisp2init-toc-ready elisp2-toc-ready.toc
        cp elisp2-fns-ready vol2.fns
        cp elisp2-aux-ready vol2.aux
@@ -211,7 +211,7 @@ elisp1-init: elisp.texi
        touch $@
 #
 elisp2-init: elisp.texi
-       @echo "Initial TeX run for volume 2..."
+       $(info Initial TeX run for volume 2...)
        rm -f vol2.aux vol2.toc
        $(tex2)
        texindex vol2.??
diff --git a/doc/lispref/variables.texi b/doc/lispref/variables.texi
index 1ae0e5e5ee..34c73e70b7 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--2021 Free Software Foundation, Inc.
+@c Copyright (C) 1990--1995, 1998--2022 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Variables
 @chapter Variables
@@ -44,6 +44,7 @@ representing the variable.
 * Variables with Restricted Values::  Non-constant variables whose value can
                                         @emph{not} be an arbitrary Lisp object.
 * Generalized Variables::       Extending the concept of variables.
+* Multisession Variables::      Variables that survive restarting Emacs.
 @end menu
 
 @node Global Variables
@@ -686,7 +687,7 @@ entire computation of the value into the @code{defvar}, 
like this:
 @example
 (defvar my-mode-map
   (let ((map (make-sparse-keymap)))
-    (define-key map "\C-c\C-a" 'my-command)
+    (keymap-set map "C-c C-a" 'my-command)
     @dots{}
     map)
   @var{docstring})
@@ -702,25 +703,6 @@ important if the user has run hooks to alter part of the 
contents
 (such as, to rebind keys).  Third, evaluating the @code{defvar} form
 with @kbd{C-M-x} will reinitialize the map completely.
 
-  Putting so much code in the @code{defvar} form has one disadvantage:
-it puts the documentation string far away from the line which names the
-variable.  Here's a safe way to avoid that:
-
-@example
-(defvar my-mode-map nil
-  @var{docstring})
-(unless my-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map "\C-c\C-a" 'my-command)
-    @dots{}
-    (setq my-mode-map map)))
-@end example
-
-@noindent
-This has all the same advantages as putting the initialization inside
-the @code{defvar}, except that you must type @kbd{C-M-x} twice, once on
-each form, if you do want to reinitialize the variable.
-
 @node Accessing Variables
 @section Accessing Variable Values
 
@@ -2771,3 +2753,157 @@ form that has not already had an appropriate expansion 
defined.  In
 Common Lisp, this is not an error since the function @code{(setf
 @var{func})} might be defined later.
 @end quotation
+
+@node Multisession Variables
+@section Multisession Variables
+
+@cindex multisession variable
+  When you set a variable to a value and then close Emacs and restart
+it, that value won't be automatically restored.  Users usually set
+normal variables in their startup files, or use Customize
+(@pxref{Customization}) to set user options permanently, and various
+packages have various files wher they store the data (e.g., Gnus
+stores this in @file{.newsrc.eld} and the URL library stores cookies
+in @file{~/.emacs.d/url/cookies}).
+
+For things in between these two extremes (i.e., configuration which
+goes in the startup file, and massive application state that goes into
+separate files), Emacs provides a facility to replicate data between
+sessions called @dfn{multisession variables}.  (This facility may not
+be available on all systems.)  To give you an idea of how these are
+meant to be used, here's a small example:
+
+@lisp
+@group
+(define-multisession-variable foo-var 0)
+(defun my-adder (num)
+  (interactive "nAdd number: ")
+  (setf (multisession-value foo)
+        (+ (multisession-value foo) num))
+  (message "The new number is: %s" (multisession-value foo)))
+@end group
+@end lisp
+
+@noindent
+This defines the variable @code{foo-var} and binds it to a special
+multisession object which is initialized with the value @samp{0} (if
+the variable doesn't already exist from a previous session).  The
+@code{my-adder} command queries the user for a number, adds this to
+the old (possibly saved value), and then saves the new value.
+
+This facility isn't meant to be used for huge data structures, but
+should be performant for most values.
+
+@defmac define-multisession-variable name initial-value &optional doc &rest 
args
+This macro defines @var{name} as a multisession variable, and gives it
+the @var{initial-value} if this variable hasn't been assigned a value
+earlier.  @var{doc} is the doc string, and several keyword arguments can
+be used in @var{args}:
+
+@table @code
+@item :package @var{package-symbol}
+This keyword says that a multisession variable belongs to the package
+specified by @var{package-symbol}.  The combination of
+@var{package-symbol} and @var{name} has to be unique.  If
+@var{package-symbol} isn't given, this will default to the first
+``segment'' of the @var{name} symbol's name, which is the part of its
+name up to and excluding the first @samp{-}.  For instance, if
+@var{name} is @code{foo-var} and @var{package-symbol} isn't given,
+@var{package-symbol} will default to @code{foo}.
+
+@cindex synchronized multisession variables
+@item :synchronized @var{bool}
+Multisession variables can be @dfn{synchronized} if @var{bool} is
+non-@code{nil}.  This means that if there're two concurrent Emacs
+instances running, and the other Emacs changes the multisession
+variable @code{foo-var}, the current Emacs instance will retrieve that
+modified data when accessing the value.  If @var{synchronized} is
+@code{nil} or missing, this won't happen, and the values in all
+Emacs sessions using the variable will be independent of each other.
+
+@item :storage @var{storage}
+Use the specified @var{storage} method.  This can be either
+@code{sqlite} (in Emacs compiled with SQLite support) or @code{files}.
+If not given, this defaults to the value of the
+@code{multisession-storage} variable, described below.
+@end table
+@end defmac
+
+@defun multisession-value variable
+This function returns the current value of @var{variable}.  If this
+variable hasn't been accessed before in this Emacs session, or if it's
+changed externally, it will be read in from external storage.  If not,
+the current value in this session is returned as is.  It is an error
+to call this function for a @var{variable} that is not a multisession
+variable.
+
+Values retrieved via @code{multisession-value} may or may not be
+@code{eq} to each other, but they will always be @code{equal}.
+
+This is a generalized variable (@pxref{Generalized Variables}), so the
+way to update such a variable is to say, for instance:
+
+@lisp
+(setf (multisession-value foo-bar) 'zot)
+@end lisp
+
+Only Emacs Lisp values that have a readable print syntax
+(@pxref{Printed Representation}) can be saved this way.
+
+If the multisession variable is synchronized, setting it may update
+the value first.  For instance:
+
+@lisp
+(cl-incf (multisession-value foo-bar))
+@end lisp
+
+This first checks whether the value has changed in a different
+Emacs instance, retrieves that value, and then adds 1 to that value and
+stores it.  But note that this is done without locking, so if many
+instances are updating the value at the same time, it's unpredictable
+which instance ``wins''.
+@end defun
+
+@defun multisession-delete object
+This function deletes @var{object} and its value from its persistent
+storage.
+@end defun
+
+@c FIXME: this lacks the documentation of the form of the arguments.
+@defun make-multisession
+You can also make persistent values that aren't tied to a specific
+variable, but are tied to an explicit package and key.
+
+@example
+(setq foo (make-multisession :package "mail"
+                             :key "friends"))
+(setf (multisession-value foo) 'everybody)
+@end example
+
+This supports the same keywords as
+@code{define-multisession-variable}, but also supports a
+@code{:initial-value} keyword, which specifies the default value.
+@end defun
+
+@defopt multisession-storage
+This variable controls how the multisession variables are stored.  It
+value defaults to @code{files}, which means that the values are stored
+in a one-file-per-variable structure inside the directory specified by
+@code{multisession-directory}.  If this value is @code{sqlite}
+instead, the values are stored in an SQLite database; this is only
+available if Emacs was built with SQLite support.
+@end defopt
+
+@defopt multisession-directory
+The multisession variables are stored under this directory, which
+defaults to @file{multisession/} subdirectory of the
+@code{user-emacs-directory}, which is typically
+@file{~/.emacs.d/multisession/}.
+@end defopt
+
+@findex multisession-edit-mode
+@deffn Command list-multisession-values
+This command pops up a buffer listing all the multisession variables,
+and enters a special mode @code{multisession-edit-mode} which allows
+you to delete them and edit their values.
+@end deffn
diff --git a/doc/lispref/windows.texi b/doc/lispref/windows.texi
index f8dcca72cc..56b4bc5183 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--2021 Free Software
+@c Copyright (C) 1990--1995, 1998--1999, 2001--2022 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Windows
@@ -4229,97 +4229,48 @@ action alist entry (@pxref{Buffer Display Action 
Alists}).
 
 @node Quitting Windows
 @section Quitting Windows
-
-When you want to get rid of a window used for displaying a buffer, you
-can call @code{delete-window} or @code{delete-windows-on}
-(@pxref{Deleting Windows}) to remove that window from its frame.  If the
-buffer is shown on a separate frame, you might want to call
-@code{delete-frame} (@pxref{Deleting Frames}) instead.  If, on the other
-hand, a window has been reused for displaying the buffer, you might
-prefer showing the buffer previously shown in that window, by calling the
-function @code{switch-to-prev-buffer} (@pxref{Window History}).
-Finally, you might want to either bury (@pxref{Buffer List}) or kill
-(@pxref{Killing Buffers}) the window's buffer.
-
-   The following command uses information on how the window for
-displaying the buffer was obtained in the first place, thus attempting
-to automate the above decisions for you.
+@cindex quitting windows
+
+After a command uses @code{display-buffer} to put a buffer on the
+screen, the user may decide to hide it and return to the previous
+configuration of the Emacs display.  We call that @dfn{quitting the
+window}.  The way to do this is to call @code{quit-window} while the
+window used by @code{display-buffer} is the selected window.
+
+The right way to restore the previous configuration of the display
+depends on what was done to the window where the buffer now appears.
+It might be right to delete that window, or delete its frame, or just
+display another buffer in that window.  One complication is that the
+user may have changed the window configuration since the act of
+displaying that buffer, and it would be undesirable to undo the user's
+explicitly requested changes.
+
+To enable @code{quit-window} to do the right thing,
+@code{display-buffer} saves information about what it did in the
+window's @code{quit-restore} parameter (@pxref{Window Parameters}).
 
 @deffn Command quit-window &optional kill window
 This command quits @var{window} and buries its buffer.  The argument
 @var{window} must be a live window and defaults to the selected one.
 With prefix argument @var{kill} non-@code{nil}, it kills the buffer
-instead of burying it.  It calls the function @code{quit-restore-window}
-described next to deal with the window and its buffer.
+instead of burying it.
 
 @vindex quit-window-hook
-The functions in @code{quit-window-hook} are run before doing anything
-else.
+The function @code{quit-window} first runs @code{quit-window-hook}.
+Then it calls the function @code{quit-restore-window}, described next,
+which does the hard work.
 @end deffn
 
+You can get more control by calling @code{quit-restore-window} instead.
+
 @defun quit-restore-window &optional window bury-or-kill
 This function handles @var{window} and its buffer after quitting.  The
 optional argument @var{window} must be a live window and defaults to
-the selected one. The function's behavior is determined by the four
-elements of the list specified by @var{window}'s @code{quit-restore}
-parameter (@pxref{Window Parameters}).
-
-The first element of the @code{quit-restore} parameter is one of the
-symbols @code{window}, meaning that the window has been specially
-created by @code{display-buffer}; @code{frame}, a separate frame has
-been created; @code{same}, the window has only ever displayed this
-buffer; or @code{other}, the window showed another buffer before.
-@code{frame} and @code{window} affect how the window is quit, while
-@code{same} and @code{other} affect the redisplay of buffers
-previously shown in @var{window}.
-
-The parameter's second element is either one of the symbols
-@code{window} or @code{frame}, or a list whose elements are the buffer
-shown in @var{window} before, that buffer's window start and window
-point positions, and @var{window}'s height at that time.  If that
-buffer is still live when @var{window} is quit, then this function may
-reuse @var{window} to display it.
-
-The third element is the window selected at the time the parameter was
-created.  If this function deletes @var{window}, it subsequently tries
-to reselect the window named by that element.
-
-The fourth element is the buffer whose display caused the creation of
-this parameter.  This function may delete @var{window} if and only if
-it still shows that buffer.
-
-This function will try to delete @var{window} if and only if (1) the
-first element of its @code{quit-restore} parameter is either
-@code{window} or @code{frame}, (2) the window has no history of
-previously-displayed buffers and (3) the fourth element of the
-@code{quit-restore} parameter specifies the buffer currently displayed
-in @var{window}.  If @var{window} is part of an atomic window
-(@pxref{Atomic Windows}), it will try to delete the root of that
-atomic window instead.  In either case, it tries to avoid signaling an
-error when @var{window} cannot be deleted.
-
-If @var{window} shall be deleted, is the only window on its frame and
-there are other frames on that frame's terminal, the value of the
-optional argument @var{bury-or-kill} determines how to proceed with
-the window.  If @var{bury-or-kill} equals @code{kill}, the frame is
-deleted unconditionally.  Otherwise, the fate of the frame is
-determined by calling @code{frame-auto-hide-function} (see below) with
-that frame as sole argument.
-
-If the third element of the @code{quit-restore} parameter is a list of
-buffer, window start (@pxref{Window Start and End}), and point
-(@pxref{Window Point}), and that buffer is still live, the buffer will
-be displayed, and start and point set accordingly.  If, in addition,
-@var{window}'s buffer was temporarily resized, this function will also
-try to restore the original height of @var{window}.
-
-Otherwise, if @var{window} was previously used for displaying other
-buffers (@pxref{Window History}), the most recent buffer in that
-history will be displayed.  In either case, if @var{window} is not
-deleted, its @code{quit-restore} parameter is reset to @code{nil}.
+the selected one.  The function takes account of the @var{window}'s
+@code{quit-restore} parameter.
 
 The optional argument @var{bury-or-kill} specifies how to deal with
-@var{window}'s buffer.  The following values are handled:
+@var{window}'s buffer.  The following values are meaningful:
 
 @table @code
 @item nil
@@ -4329,25 +4280,106 @@ consequence, if @var{window} is not deleted, invoking
 
 @item append
 This means that if @var{window} is not deleted, its buffer is moved to
-the end of @var{window}'s list of previous buffers, so it's less likely
-that a future invocation of @code{switch-to-prev-buffer} will switch to
-it.  Also, it moves the buffer to the end of the frame's buffer list.
+the end of @var{window}'s list of previous buffers (@pxref{Window
+History}), so it's less likely that future invocations of
+@code{switch-to-prev-buffer} will switch to it.  Also, it moves the
+buffer to the end of the frame's buffer list (@pxref{Buffer List}).
 
 @item bury
 This means that if @var{window} is not deleted, its buffer is removed
-from @var{window}'s list of previous buffers.  Also, it moves the buffer
-to the end of the frame's buffer list.  This value provides the most
-reliable remedy to not have @code{switch-to-prev-buffer} switch to this
-buffer again without killing the buffer.
+from @var{window}'s list of previous buffers.  Also, it moves the
+buffer to the end of the frame's buffer list.  This is the most
+reliable way to prevent @code{switch-to-prev-buffer} from switching to
+this buffer again, short of killing the buffer.
 
 @item kill
 This means to kill @var{window}'s buffer.
 @end table
 
+The argument @var{bury-or-kill} also specifies what to do with
+@var{window}'s frame when @var{window} should be deleted, if it is the
+only window on its frame, and there are other frames on that frame's
+terminal.  If @var{bury-or-kill} equals @code{kill}, it means to
+delete the frame.  Otherwise, the fate of the frame is determined by
+calling @code{frame-auto-hide-function} (see below) with that frame as
+sole argument.
+
+This function always sets @var{window}'s @code{quit-restore} parameter
+to @code{nil} unless it deletes the window.
+@end defun
+
+The window @var{window}'s @code{quit-restore} parameter (@pxref{Window
+Parameters}) should be @code{nil} or a list of four elements:
+@c FIXME: describe what quit-restore-window does if this is nil.
+
+@lisp
+(@var{method} @var{obuffer} @var{owindow} @var{this-buffer})
+@end lisp
+
+The first element, @var{method}, is one of the four symbols
+@code{window}, @code{frame}, @code{same} and @code{other}.
+@code{frame} and @code{window} control how to delete @var{window},
+while @code{same} and @code{other} control displaying some other
+buffer in it.
+
+Specifically, @code{window} means that the window has been specially
+created by @code{display-buffer}; @code{frame} means that a separate
+frame has been created; @code{same}, that the window has only ever
+displayed this buffer; @code{other}, that the window showed another
+buffer before.
+
+The second element, @var{obuffer}, is either one of the symbols
+@code{window} or @code{frame}, or a list of the form
+
+@lisp
+(@var{prev-buffer} @var{prev-window-start} @var{prev-window-point} 
@var{height})
+@end lisp
+
+@noindent
+which says which buffer was shown in @var{window} before, that
+buffer's window start (@pxref{Window Start and End}) and window point
+(@pxref{Window Point}) positions at that time, and
+@var{window}'s height at that time.  If @var{prev-buffer} is still
+live when quitting @var{window}, quitting the window may reuse
+@var{window} to display @var{prev-buffer}.
+
+The third element, @var{owindow}, is the window that was selected
+just before the displaying was done.  If quitting deletes
+@var{window}, it tries to select @var{owindow}.
+
+The fourth element, @var{this-buffer}, is the buffer whose displaying
+set the @code{quit-restore} parameter.  Quitting @var{window} may delete
+that window only if it still shows that buffer.
+
+Quitting @var{window} tries to delete it if and only if (1)
+@var{method} is either @code{window} or @code{frame}, (2) the window
+has no history of previously-displayed buffers and (3)
+@var{this-buffer} equals the buffer currently displayed in
+@var{window}.  If @var{window} is part of an atomic window
+(@pxref{Atomic Windows}), quitting will try to delete the root of that
+atomic window instead.  In either case, it tries to avoid signaling an
+error when @var{window} cannot be deleted.
+
+If @var{obuffer} is a list, and @var{prev-buffer} is still live,
+quitting displays @var{prev-buffer} in @var{window} according to the
+rest of the elements of @var{obuffer}.  This includes resizing the
+window to @var{height} if it was temporarily resized to display
+@var{this-buffer}.
+
+Otherwise, if @var{window} was previously used for displaying other
+buffers (@pxref{Window History}), the most recent buffer in that
+history will be displayed.
+
+@ignore
+@c FIXME: Should we document display-buffer-reuse-window?
+If we document display-buffer-record-window, it should be with @defun.
+And maybe not here.
+
+
 Typically, the display routines run by @code{display-buffer} will set
-the @code{quit-restore} window parameter correctly.  It's also
-possible to set it manually, using the following code for displaying
-@var{buffer} in @var{window}:
+the @code{quit-restore} window parameter correctly.  You can also set
+it manually, using the following code for displaying @var{buffer} in
+@var{window}:
 
 @example
 @group
@@ -4361,11 +4393,10 @@ possible to set it manually, using the following code 
for displaying
 
 Setting the window history to @code{nil} ensures that a future call to
 @code{quit-window} can delete the window altogether.
+@end ignore
 
-@end defun
-
-The following option specifies how to deal with a frame containing just
-one window that should be either quit, or whose buffer should be buried.
+The following option specifies a function to do the right thing with a
+frame containing one window when quitting that window.
 
 @defopt frame-auto-hide-function
 The function specified by this option is called to automatically hide
@@ -4394,7 +4425,6 @@ that frame's @code{auto-hide-function} frame parameter 
(@pxref{Frame
 Interaction Parameters}).
 @end defopt
 
-
 @node Side Windows
 @section Side Windows
 @cindex side windows
diff --git a/doc/man/ChangeLog.1 b/doc/man/ChangeLog.1
index 9ad144a457..ff675d8947 100644
--- a/doc/man/ChangeLog.1
+++ b/doc/man/ChangeLog.1
@@ -176,7 +176,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2007-2021 Free Software Foundation, Inc.
+  Copyright (C) 2007-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/doc/man/ebrowse.1 b/doc/man/ebrowse.1
index 7bb32b80d4..7bacdbd93e 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-2021 Free Software Foundation, Inc.
+Copyright 2008-2022 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 b2be8bb07b..9fdf65e0ff 100644
--- a/doc/man/emacs.1.in
+++ b/doc/man/emacs.1.in
@@ -660,7 +660,7 @@ For detailed credits and acknowledgments, see the GNU Emacs 
manual.
 .
 .
 .SH COPYING
-Copyright 1995, 1999-2021 Free Software Foundation, Inc.
+Copyright 1995, 1999-2022 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 cbd3c1a646..d345b8bd73 100644
--- a/doc/man/etags.1
+++ b/doc/man/etags.1
@@ -288,7 +288,7 @@ Stallman.
 .BR vi ( 1 ).
 
 .SH COPYING
-Copyright 1992, 1999, 2001-2021 Free Software Foundation, Inc.
+Copyright 1992, 1999, 2001-2022 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 be2a7cad1b..1ee3c14fb9 100644
--- a/doc/misc/ChangeLog.1
+++ b/doc/misc/ChangeLog.1
@@ -12116,7 +12116,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1993-1999, 2001-2021 Free Software Foundation, Inc.
+  Copyright (C) 1993-1999, 2001-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/doc/misc/Makefile.in b/doc/misc/Makefile.in
index 7982c0dc5a..6c1e9cbc91 100644
--- a/doc/misc/Makefile.in
+++ b/doc/misc/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 1994, 1996-2021 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1996-2022 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
@@ -130,12 +130,12 @@ info: $(INFO_TARGETS)
 
 ## Used by top-level Makefile.
 ## Base file names of output info files.
+INFO_BASES = $(patsubst %.info,%,$(notdir $(INFO_INSTALL)))
 echo-info:
-       @echo "$(INFO_INSTALL) " | \
-         sed -e 's|[^ ]*/||g' -e 's/\.info//g' -e "s/  */.info /g"
+       @: $(info $(addsuffix .info,$(INFO_BASES)))
 
 echo-sources:
-       @echo ${SOURCES}
+       @: $(info $(SOURCES))
 
 dvi: $(DVI_TARGETS)
 
@@ -185,7 +185,8 @@ $(foreach ifile,$(filter-out 
info.info,$(INFO_TARGETS)),$(eval $(call info_templ
 
 ## Extra dependencies.
 
-need_emacsver = calc cl dired-x efaq efaq-w32 erc ido reftex woman
+## 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_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 034004d1df..c2a9aa4437 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--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 2008--2022 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -305,7 +305,8 @@ The @dfn{Secret Service API} is a standard from
 to securely store passwords and other confidential information.  This
 API is implemented by system daemons such as the GNOME Keyring and the
 KDE Wallet (these are GNOME and KDE packages respectively and should
-be available on most modern GNU/Linux systems).
+be available on most modern GNU/Linux systems).  It has been tested
+also with KeePassXC.
 
 The auth-source library uses the @file{secrets.el} library to connect
 through the Secret Service API@.  You can also use that library in
@@ -360,15 +361,19 @@ Collections can be created and deleted by the functions
 Usually, this is not done from within Emacs.  Do not delete standard
 collections such as @code{"login"}.
 
-The special collection @code{"session"} exists for the lifetime of the
-corresponding client session (in our case, Emacs's lifetime).  It is
-created automatically when Emacs uses the Secret Service interface and
-it is deleted when Emacs is killed.  Therefore, it can be used to
-store and retrieve secret items temporarily.  The @code{"session"}
-collection is better than a persistent collection when the secret
-items should not live longer than Emacs.  The session collection can
-be specified either by the string @code{"session"}, or by @code{nil},
-whenever a collection parameter is needed in the following functions.
+With GNOME Keyring, there exists a special collection called
+@code{"session"}, which has the lifetime of the user being logged in.
+Its data are not stored on disk and go away when the user logs out.
+Therefore, it can be used to store and retrieve secret items
+temporarily.  The @code{"session"} collection is better than a
+persistent collection when the secret items should not live
+permanently.  The @code{"session"} collection can be addressed either
+by the string @code{"session"}, or by @code{nil}, whenever a
+collection parameter is needed.
+
+However, other Secret Service provider don't create this temporary
+@code{"session"} collection.  You shall check first that this
+collection exists, before you use it.
 
 @defun secrets-list-items collection
 Returns all the item labels of @var{collection} as a list.
@@ -382,7 +387,7 @@ pairs set for the created item.  The keys are keyword 
symbols,
 starting with a colon.  Example:
 
 @example
-;;; The session is "session", the label is "my item"
+;;; The collection is "session", the label is "my item"
 ;;; and the secret (password) is "geheim".
 (secrets-create-item "session" "my item" "geheim"
  :method "sudo" :user "joe" :host "remote-host")
@@ -574,10 +579,7 @@ from Gnus's @code{nnimap.el}.
                                            :create t))))
     (if found
         (list (plist-get found :user)
-              (let ((secret (plist-get found :secret)))
-                (if (functionp secret)
-                    (funcall secret)
-                  secret))
+              (auth-info-password found)
               (plist-get found :save-function))
       nil)))
 @end example
@@ -597,7 +599,7 @@ Later, after a successful login, @code{nnimap.el} calls the
 
 @example
 (when (functionp (nth 2 credentials))
-   (funcall (nth 2 credentials)))
+  (funcall (nth 2 credentials)))
 @end example
 
 This will work whether the @code{:save-function} was provided or not.
@@ -632,6 +634,16 @@ This function forgets any cached data matching @var{spec}.
 It returns the number of items forgotten.
 @end defun
 
+@defun auth-source-pick-first-password &rest spec
+This function returns the password of the first record found by
+applying @code{auth-source-search} to @var{spec}.
+@end defun
+
+@defun auth-info-password auth-info
+This function extracts the password string from the @var{auth-info}
+record.
+@end defun
+
 @node GnuPG and EasyPG Assistant Configuration
 @appendix GnuPG and EasyPG Assistant Configuration
 
diff --git a/doc/misc/autotype.texi b/doc/misc/autotype.texi
index 5f9dc01d33..a3b0f16df9 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--2021 Free Software
+Copyright @copyright{} 1994--1995, 1999, 2001--2022 Free Software
 Foundation, Inc.
 
 @quotation
diff --git a/doc/misc/bovine.texi b/doc/misc/bovine.texi
index 9bfb117d1a..9d9aa48488 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--2021 Free Software Foundation,
+Copyright @copyright{} 1999--2004, 2012--2022 Free Software Foundation,
 Inc.
 
 @quotation
diff --git a/doc/misc/calc.texi b/doc/misc/calc.texi
index c77ccf766f..d83edc15f3 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--2021 Free Software Foundation,
+Copyright @copyright{} 1990--1991, 2001--2022 Free Software Foundation,
 Inc.
 
 @quotation
diff --git a/doc/misc/cc-mode.texi b/doc/misc/cc-mode.texi
index a2ff572a3f..8b36d1afd7 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--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 1995--2022 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -284,7 +284,6 @@ Font Locking
 * Faces::
 * Doc Comments::
 * Wrong Comment Style::
-* Found Types::
 * Misc Font Locking::
 * AWK Mode Font Locking::
 
@@ -1857,7 +1856,6 @@ sections apply to the other languages.
 * Faces::
 * Doc Comments::
 * Wrong Comment Style::
-* Found Types::
 * Misc Font Locking::
 * AWK Mode Font Locking::
 @end menu
@@ -2164,60 +2162,6 @@ which aren't of the default style will be fontified with
 @code{font-lock-warning-face}.
 @end defvar
 
-@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-@node    Found Types
-@comment  node-name,  next,  previous,  up
-@section ``Found Type'' handling.
-@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-In most languages handled by CC Mode, @dfn{found types} are recognized
-as types by their context in the source code.  These contrast with
-types which are basic to a language or are declared as types (e.g. by
-@code{typedef} in C).
-
-In earlier versions of @ccmode{}, when @code{jit-lock-mode} was
-enabled in Emacs (which it is by default), found types would
-frequently fail to get fontified properly.  This happened when the
-fontification functions scanned a use of the found type before
-scanning the code which caused it to be recognized.
-
-From @ccmode{} version 5.36, a timer mechanism scans the entire buffer
-for found types in the seconds immediately after starting the major
-mode.  When a found type gets recognized, all its occurrences in the
-buffer get marked for (re)fontification.  This scanning happens in
-short time slices interleaved with other processing, such as keyboard
-handling, so that the responsiveness of Emacs should be barely
-affected.  This mechanism can be disabled (see below).  It is only
-active when @code{jit-lock-mode} is also active.
-
-@defvar c-type-finder-time-slot
-@vindex type-finder-time-slot (c-)
-The approximate time in seconds that CC Mode spends in scanning source
-code before relinquishing control to other Emacs activities.  The
-default value is 0.05.  To disable the scanning mechanism, set this
-variable to @code{nil}.
-@end defvar
-
-@defvar c-type-finder-repeat-time
-@vindex type-finder-repeat-time (c-)
-The approximate frequency (in seconds) with which the scanning
-mechanism is triggered.  This time must be greater than
-@code{c-type-finder-time-slot}.  Its default value is 0.1.  If a less
-powerful machine becomes sluggish due to the scanning, increase the
-value of @code{c-type-finder-repeat-time} to compensate.
-@end defvar
-
-@defvar c-type-finder-chunk-size
-@vindex type-finder-chunk-size (c-)
-The approximate size (in characters) of the buffer chunk processed as
-a unit before the scanning mechanism checks whether
-@code{c-type-finder-time-slot} seconds have passed.  The default value
-is 1000.  A too small value here will cause inefficiencies due to the
-initialization which happens for each chunk, whereas a too large value
-will cause the processing to consume an excessive proportion of the
-@code{c-type-finder-repeat-time}.
-@end defvar
-
 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 @node    Misc Font Locking
 @comment  node-name,  next,  previous,  up
diff --git a/doc/misc/cl.texi b/doc/misc/cl.texi
index 55b112cb24..a6fe29e102 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--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 1993, 2001--2022 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 6463687793..0b4f53ba13 100644
--- a/doc/misc/dbus.texi
+++ b/doc/misc/dbus.texi
@@ -10,7 +10,7 @@
 @syncodeindex fn cp
 
 @copying
-Copyright @copyright{} 2007--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 2007--2022 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 87a127c4f3..754ccf4065 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--2021 Free Software
+Copyright @copyright{} 1994--1995, 1999, 2001--2022 Free Software
 Foundation, Inc.
 
 @quotation
diff --git a/doc/misc/ebrowse.texi b/doc/misc/ebrowse.texi
index 8962f7c8cf..a2be0aedbc 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--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 2000--2022 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 5e9c3d7eef..af8e2153dd 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--2021 Free Software
+Copyright @copyright{} 1998--2001, 2004--2005, 2008--2022 Free Software
 Foundation, Inc.
 
 @quotation
@@ -99,7 +99,7 @@ learn and adopt GNU ways of doing things.
 @chapter @ede{} Project Concepts
 
 @ede{} is a generic interface for managing projects.  It specifies a
-single set of menus and keybindings, while supporting multiple ways to
+single set of menus and key bindings, while supporting multiple ways to
 express a project via a build system.
 
 In the subsequent chapters, we will describe the different project
@@ -144,7 +144,7 @@ init file:
 
 Activating @ede{} adds a menu named @samp{Development} to the menu
 bar.  This menu provides several menu items for high-level @ede{}
-commands.  These menu items, and their corresponding keybindings, are
+commands.  These menu items, and their corresponding key bindings, are
 independent of the type of project you are actually working on.
 
 @node Quick Start
@@ -271,7 +271,7 @@ Projects.  You can create targets either from a buffer, or 
from a
 @code{dired} directory buffer.
 
 Note: If for some reason a directory list buffer, or file does not have the
-@samp{Project} menu item, or if @ede{} keybindings don't work, just
+@samp{Project} menu item, or if @ede{} key bindings don't work, just
 use @kbd{M-x revert-buffer @key{RET}} to force a refresh.  Sometimes
 creating a new project doesn't restart buffers correctly.
 
@@ -958,7 +958,7 @@ The example for Makefiles looks like this:
   ((buildfile :initform "Makefile"))
   "Generic Project for makefiles.")
 
-(defmethod ede-generic-setup-configuration ((proj 
ede-generic-makefile-project) config)
+(cl-defmethod ede-generic-setup-configuration ((proj 
ede-generic-makefile-project) config)
   "Set up a configuration for Make."
   (oset config build-command "make -k")
   (oset config debug-command "gdb "))
@@ -1059,7 +1059,7 @@ examples.
 @menu
 * Development Overview::
 * Detecting a Project::
-* User interface methods::      Methods associated with keybindings
+* User interface methods::      Methods associated with key bindings
 * Base project methods::        The most basic methods on @ede{} objects.
 * Sourcecode objects::          Defining new sourcecode classes.
 * Compiler and Linker objects::  Defining new compilers and linkers.
diff --git a/doc/misc/ediff.texi b/doc/misc/ediff.texi
index 8162a84f61..d81ba158a1 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--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 1995--2022 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 b4dabdb938..8b4ac0da5d 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--2021 Free Software
+Copyright @copyright{} 1986, 1992, 1994--1995, 1999--2022 Free Software
 Foundation, Inc.
 
 @quotation
diff --git a/doc/misc/efaq-w32.texi b/doc/misc/efaq-w32.texi
index a5b5251d6e..8dcdb121ab 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--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 2008, 2010--2022 Free Software Foundation, Inc.
 
 @quotation
 This list of frequently asked questions about GNU Emacs on MS Windows
@@ -687,9 +687,9 @@ question also.
 @node CUA
 @subsection Standard Windows key bindings
 @findex cua-mode
-@cindex CUA keybindings
+@cindex CUA key bindings
 @cindex shift key, selecting with
-@cindex standard Windows keybindings
+@cindex standard Windows key bindings
 @cindex paste with C-v
 @cindex cut with C-x
 @cindex copy with C-c
@@ -697,7 +697,7 @@ question also.
 @cindex C-x to cut
 @cindex C-v to paste
 
-The keybindings of Emacs predate modern GUIs, and the keys that were
+The key bindings of Emacs predate modern GUIs, and the keys that were
 chosen by later GUIs for cut and copy were given important functions
 as extended keymaps in Emacs.  CUA mode attempts to let both bindings
 co-exist by defining C-x and C-c as @code{kill-region} and
diff --git a/doc/misc/efaq.texi b/doc/misc/efaq.texi
index 757418a67c..ed8a919ac7 100644
--- a/doc/misc/efaq.texi
+++ b/doc/misc/efaq.texi
@@ -8,7 +8,7 @@
 @include emacsver.texi
 
 @copying
-Copyright @copyright{} 2001--2021 Free Software Foundation, Inc.@*
+Copyright @copyright{} 2001--2022 Free Software Foundation, Inc.@*
 Copyright @copyright{} 1994, 1995, 1996, 1997, 1998, 1999, 2000
 Reuven M. Lerner@*
 Copyright @copyright{} 1992, 1993 Steven Byrnes@*
@@ -849,6 +849,7 @@ in the Emacs development repository (@pxref{Latest version 
of Emacs}).
 @menu
 * Origin of the term Emacs::
 * Latest version of Emacs::
+* New in Emacs 28::
 * New in Emacs 27::
 * New in Emacs 26::
 * New in Emacs 25::
@@ -898,9 +899,9 @@ conventions}).
 @cindex Repository, Emacs
 
 Emacs @value{EMACSVER} is the current version as of this writing.  A version
-number with two components (e.g., @samp{24.5}) indicates a released
+number with two components (e.g., @samp{28.1}) indicates a released
 version; three components indicate a development
-version (e.g., @samp{28.0.50} is what will eventually become @samp{28.1}).
+version (e.g., @samp{29.0.50} is what will eventually become @samp{29.1}).
 
 Emacs is under active development, hosted at
 @uref{https://savannah.gnu.org/projects/emacs/, Savannah}.
@@ -919,6 +920,97 @@ Emacs, type @kbd{C-h C-n} (@kbd{M-x view-emacs-news}).  
You can give
 this command a prefix argument to read about which features were new
 in older versions.
 
+@node New in Emacs 28
+@section What is different about Emacs 28?
+@cindex Differences between Emacs 27 and Emacs 28
+@cindex Emacs 28, new features in
+
+Emacs 28 has too many new features and changes to list all of them
+here.  We list below a small selection; consult the Emacs @file{NEWS}
+file (@kbd{C-h n}) for the full list of changes in Emacs 28.
+
+@itemize
+@cindex native compilation of Lisp files
+@item
+Emacs now optionally supports native compilation of Lisp files.  This
+can improves performance significantly in some cases.  To enable this,
+configure Emacs with the @option{--with-native-compilation} option.
+
+@item
+The new NonGNU ELPA archive is enabled by default alongside GNU ELPA.
+Thus, packages on NonGNU ELPA will appear by default in the list shown
+by the @code{list-packages} command.
+
+@item
+The Cairo graphics library is now used by default if present.
+
+@item
+On GNU/Linux, Emacs now supports loading Secure Computing filters.  To
+use this feature, invoke Emacs with the @option{--seccomp=@var{file}}
+command-line switch, where @var{file} names a binary file that defines
+the filtering.  See the manual page of the @code{seccomp} system call
+for more details.
+
+@item
+The new themes @samp{modus-vivendi} and @samp{modus-operandi} have
+been added.  They are designed to conform with the highest standard
+for color-contrast accessibility (WCAG AAA).
+
+@item
+On capable systems, Emacs now correctly displays Emoji and Emoji
+sequences by default, provided that a suitable font is available.
+
+@item
+New system for displaying documentation for groups of functions
+(@kbd{M-x shortdoc-display-group RET}).
+
+@item
+Emacs can now support 24-bit color text-mode terminals even if their
+terminfo database doesn't state this support in a standard way.  Set
+the @env{COLORTERM} environment variable to the value @samp{truecolor}
+to activate this.
+
+@item
+The @code{strike-through} face attribute is now supported on capable
+text-mode terminals.
+
+@item
+@code{xterm-mouse-mode} supports TTY menus.
+
+@item
+A new minor mode @code{context-menu-mode} causes @code{mouse-3}
+(a.k.a.@: ``right-clicks'') of the mouse to pop up context-dependent
+menus.
+
+@item
+Prefix commands to control the display of the results of the next
+command.  @kbd{C-x 4 4 @var{command}} displays the result of
+@var{command} in a new window.  @kbd{C-x 5 5 @var{command}} displays
+the results of @var{command} in a new frame.
+
+@item
+Emacs now supports ``transient'' input methods.  A transient input
+method is enabled for inserting a single character, and is then
+automatically disabled.  Select a transient input method with @kbd{C-u
+C-x \}; enable it (for inserting a single character) with @kbd{C-x \}.
+New input methods @code{compose} (based on X Window System Multi_key
+sequences) and @code{iso-transl} are especially convenient with this
+feature, when you need to insert a single special character.
+
+@item
+@kbd{M-y}, when invoked after a command that is not a yank command,
+allows selection of one of the previous kills.
+
+@item
+New minor mode @code{repeat-mode} allows to repeat commands with fewer
+keystrokes.
+
+@item
+Among the many internal changes in this release, we would like to
+highlight that all files in the tree now use @code{lexical-binding}.
+@end itemize
+
+
 @node New in Emacs 27
 @section What is different about Emacs 27?
 @cindex Differences between Emacs 26 and Emacs 27
@@ -973,8 +1065,8 @@ Built-in support for tabs (tab bar and tab line).
 Support for resizing and rotating of images without ImageMagick.
 @end itemize
 
-Consult the Emacs @file{NEWS} file (@kbd{C-h n}) for the full list of
-changes in Emacs 27.
+Consult the Emacs @file{NEWS.27} file for the full list of changes in
+Emacs 27.
 
 @node New in Emacs 26
 @section What is different about Emacs 26?
@@ -1052,8 +1144,8 @@ Emacs 26.2 comes with data files imported from the latest 
Unicode
 Standard version 11.0.0.
 @end itemize
 
-Consult the Emacs @file{NEWS} file (@kbd{C-h n}) for the full list of
-changes in Emacs 26.
+Consult the Emacs @file{NEWS.26} file for the full list of changes in
+Emacs 26.
 
 @node New in Emacs 25
 @section What is different about Emacs 25?
@@ -1152,8 +1244,8 @@ provide toolkit scroll bars, namely Gtk+, Lucid, Motif 
and Windows.
 
 @end itemize
 
-Consult the Emacs @file{NEWS} file (@kbd{C-h n}) for the full list of
-changes in Emacs 25.
+Consult the Emacs @file{NEWS.25} file for the full list of changes in
+Emacs 25.
 
 @node New in Emacs 24
 @section What is different about Emacs 24?
@@ -1226,7 +1318,8 @@ Much more flexibility in the handling of windows and 
buffer display.
 
 @end itemize
 
-As always, consult the @file{NEWS} file for more information.
+Consult the Emacs @file{NEWS.24} file for the full list of changes in
+Emacs 24.
 
 
 @node New in Emacs 23
@@ -1285,6 +1378,9 @@ new Visual Line mode for line-motion; improved 
completion; a new mode
 mode (for editing XML documents) is included; VC has been updated for
 newer version control systems; etc.
 
+Consult the Emacs @file{NEWS.23} file for the full list of changes in
+Emacs 23.
+
 
 @node New in Emacs 22
 @section What is different about Emacs 22?
@@ -1381,6 +1477,9 @@ In addition, Emacs 22 now includes the Emacs Lisp 
Reference Manual
 (@pxref{Emacs Lisp documentation}) and the Emacs Lisp Intro.
 @end itemize
 
+Consult the Emacs @file{NEWS.22} file for the full list of changes in
+Emacs 22.
+
 
 @node New in Emacs 21
 @section What is different about Emacs 21?
@@ -1403,6 +1502,9 @@ In addition, Emacs 21 supports faces on text-only 
terminals.  This means
 that you can now have colors when you run Emacs on a GNU/Linux console
 and on @code{xterm} with @kbd{emacs -nw}.
 
+Consult the Emacs @file{NEWS.21} file for the full list of changes in
+Emacs 21.
+
 
 @node New in Emacs 20
 @section What is different about Emacs 20?
@@ -1420,6 +1522,10 @@ several languages in the same document; the 
``Customize'' facility for
 modifying variables without having to use Lisp; and automatic conversion
 of files from Macintosh, Microsoft, and Unix platforms.
 
+Consult the Emacs @file{NEWS.20} file for the full list of changes in
+Emacs 20.
+
+
 @node What was XEmacs?
 @section What was XEmacs?
 @cindex XEmacs
diff --git a/doc/misc/eieio.texi b/doc/misc/eieio.texi
index 2b0b1f7fd6..18a2b74033 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--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 2007--2022 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -703,8 +703,7 @@ This function retrieves the value of @var{slot} from 
@var{object}.
 It can also be used on objects defined by @code{cl-defstruct}.
 
 This is a generalized variable that can be used with @code{setf} to
-modify the value stored in @var{slot}, tho not for objects defined by
-@code{cl-defstruct}.
+modify the value stored in @var{slot}.
 @xref{Generalized Variables,,,elisp,GNU Emacs Lisp Reference Manual}.
 @end defun
 
@@ -857,11 +856,12 @@ You can also create a generic method with 
@code{cl-defmethod}
 (@pxref{Methods}).  When a method is created and there is no generic
 method in place with that name, then a new generic will be created,
 and the new method will use it.
-@end defmac
 
-In CLOS, a generic call also be used to provide an argument list and
-dispatch precedence for all the arguments.  In @eieio{}, dispatching
-only occurs for the first argument, so the @var{arglist} is not used.
+In CLOS, a generic method can also be used to provide an argument list
+and dispatch precedence for all the arguments.  In @eieio{},
+dispatching only occurs for the first argument, so the @var{arglist}
+is not used.
+@end defmac
 
 @node Methods
 @section Methods
diff --git a/doc/misc/emacs-gnutls.texi b/doc/misc/emacs-gnutls.texi
index fbc4443c0a..1b9f5e1040 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--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 2012--2022 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 96a4ad556f..640712edf3 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--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 1998--2022 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 e777771cf7..70bfc0462b 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--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 2007--2022 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 3b8e231d3a..b9297738ea 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--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 2005--2022 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -72,7 +72,7 @@ and modified without restriction.
 
 Getting Started
 
-* Sample Session::              Example of connecting to the #emacs channel
+* Sample Session::              Example of connecting to the @samp{#emacs} 
channel
 * Special Features::            Differences from standalone IRC clients
 
 Advanced Usage
@@ -90,7 +90,28 @@ Advanced Usage
 ERC is a powerful, modular, and extensible IRC client for Emacs.
 It is distributed with Emacs since version 22.1.
 
-It comes with the following capabilities enabled by default.
+IRC is short for Internet Relay Chat.  When using IRC, you can
+communicate with other users on the same IRC network.  There are many
+different networks---if you search for ``IRC networks'' in your
+favorite search engine, you will find up-to-date lists of IRC networks
+catering to various interests and topics.
+
+To use IRC, you need an IRC client such as ERC.  Using the client, you
+connect to an IRC server.  Once you've done that, you will have access
+to all available channels on that server's network.  A channel is
+basically a chat room, and what you type in a channel will be shown to
+all other users in that channel.  You can be in several channels at
+the same time---ERC will show each channel in its own buffer.
+
+IRC channel names always begin with a @samp{#} character.  For
+example, the Emacs channel on Libera.Chat is @samp{#emacs}, and the
+ERC channel is @samp{#erc}.  Do not confuse them with the hashtags
+used on many social media platforms.
+
+You can also send private messages to other IRC users on the same
+network, even if they are not in the same channels as you.
+
+ERC comes with the following capabilities enabled by default.
 
 @itemize @bullet
 @item Flood control
@@ -114,7 +135,11 @@ It comes with the following capabilities enabled by 
default.
 @cindex settings
 
 The command @kbd{M-x erc} will start ERC and prompt for the server to
-connect to.
+connect to.  If you're unsure of which server or network to connect
+to, we suggest starting with ``irc.libera.chat''.  There you will find
+the @samp{#emacs} channels where you can chat with other Emacs users,
+and if you're having trouble with ERC, you can join the @samp{#erc}
+channel and ask for help there.
 
 If you want to place ERC settings in their own file, you can place them
 in @file{~/.emacs.d/.ercrc.el}, creating it if necessary.
@@ -134,14 +159,15 @@ customize-variable @key{RET} erc-modules @key{RET}}.
 @section Sample Session
 
 This is an example ERC session which shows how to connect to the
-#emacs channel on Libera.Chat.  Another IRC channel on Libera.Chat
-that may be of interest is #erc, which is a channel where ERC users
-and developers hang out.  These channels used to live on the Freenode
-IRC network until June 2021, when they---along with the official IRC
-channels of the GNU Project, the Free Software Foundation, and many
-other free software communities---relocated to the Libera.Chat network
-in the aftermath of changes in governance and policies of Freenode in
-May and June 2021.  GNU and FSF's announcements about this are at
+@samp{#emacs} channel on Libera.Chat.  Another IRC channel on
+Libera.Chat that may be of interest is @samp{#erc}, which is a channel
+where ERC users and developers hang out.  These channels used to live
+on the Freenode IRC network until June 2021, when they---along with
+the official IRC channels of the GNU Project, the Free Software
+Foundation, and many other free software communities---relocated to
+the Libera.Chat network in the aftermath of changes in governance and
+policies of Freenode in May and June 2021.  GNU and FSF's
+announcements about this are at
 @uref{https://lists.gnu.org/archive/html/info-gnu/2021-06/msg00005.html},
 @uref{https://lists.gnu.org/archive/html/info-gnu/2021-06/msg00007.html},
 and
@@ -151,7 +177,7 @@ and
 
 @item Connect to Libera.Chat
 
-Run @kbd{M-x erc}.  Use ``irc.libera.chat as the IRC server, ``6667''
+Run @kbd{M-x erc}.  Use ``irc.libera.chat'' as the IRC server, ``6667''
 as the port, and choose a nickname.
 
 @item Get used to the interface
@@ -266,7 +292,7 @@ new command in capital letters.
 If the connection goes away at some point, ERC will try to reconnect
 automatically.  If it fails to reconnect, and you want to try to
 manually reestablish the connection at some later point, switch to an
-ERC  buffer and run the @code{/RECONNECT} command.
+ERC buffer and run the @code{/RECONNECT} command.
 
 @end itemize
 
@@ -285,7 +311,7 @@ Go to beginning of line or end of prompt.
 @item @key{RET} (@code{erc-send-current-line})
 Send the current line
 
-@item @key{TAB} (@code{erc-complete-word})
+@item @key{TAB} (@code{completion-at-point} or @code{erc-button-next})
 If at prompt, complete the current word.
 Otherwise, move to the next link or button.
 
@@ -933,7 +959,7 @@ over the project entirely.''
 So we happily hacked away on ERC, and soon after (September 2001)
 released the next "stable" version, 2.1.
 
-Most of the development of the new ERC happened on #emacs on
+Most of the development of the new ERC happened on @samp{#emacs} on
 irc.openprojects.net.  Over time, many people contributed code, ideas,
 bugfixes, and a lot of alpha/beta/gamma testing.
 
diff --git a/doc/misc/ert.texi b/doc/misc/ert.texi
index af215482f4..0d01efb035 100644
--- a/doc/misc/ert.texi
+++ b/doc/misc/ert.texi
@@ -15,7 +15,7 @@
 @end direntry
 
 @copying
-Copyright @copyright{} 2008, 2010--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 2008, 2010--2022 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -109,6 +109,7 @@ Appendix
 @end menu
 @end ifnottex
 
+
 @node Introduction
 @chapter Introduction
 @cindex introduction to ERT
@@ -123,7 +124,7 @@ commands to run them to verify whether the definitions that 
are
 currently loaded in Emacs pass the tests.
 
 Some Lisp files have comments like the following (adapted from the
-package @code{pp.el}):
+package @file{pp.el}):
 
 @lisp
 ;; (pp-to-string '(quote quote))          ; expected: "'quote"
@@ -358,6 +359,7 @@ Prompt for a test and then show its documentation.
 
 @end table
 
+
 @node Running Tests in Batch Mode
 @section Running Tests in Batch Mode
 @cindex running tests in batch mode
@@ -375,7 +377,7 @@ emacs -batch -l ert -l my-tests.el -f 
ert-run-tests-batch-and-exit
 @end example
 
 This command will start up Emacs in batch mode, load ERT, load
-@code{my-tests.el}, and run all tests defined in it.  It will exit
+@file{my-tests.el}, and run all tests defined in it.  It will exit
 with a zero exit status if all tests passed, or nonzero if any tests
 failed or if anything else went wrong.  It will also print progress
 messages and error diagnostics to standard output.
@@ -439,10 +441,21 @@ emacs -batch -l ert -l my-tests.el \
       -eval '(ert-run-tests-batch-and-exit "to-match")'
 @end example
 
+@vindex EMACS_TEST_VERBOSE@r{, environment variable}
 By default, ERT test failure summaries are quite brief in batch
 mode---only the names of the failed tests are listed.  If the
-EMACS_TEST_VERBOSE environment variable is set, the failure summaries
-will also include the data from the failing test.
+@env{EMACS_TEST_VERBOSE} environment variable is set, the failure
+summaries will also include the data from the failing test.
+
+@vindex EMACS_TEST_JUNIT_REPORT@r{, environment variable}
+ERT can produce JUnit test reports in batch mode.  If the environment
+variable @env{EMACS_TEST_JUNIT_REPORT} is set, ERT will produce for
+every test package @file{my-tests.el} a corresponding JUnit test
+report @file{my-tests.xml}.  The function
+@code{ert-summarize-tests-batch-and-exit} collects all these package
+test reports into a new JUnit test report, with the respective name of
+that environment variable.
+
 
 @node Test Selectors
 @section Test Selectors
@@ -514,6 +527,7 @@ to find where a test was defined if the test was loaded 
from a file.
 * erts files::                  Files containing many buffer tests.
 @end menu
 
+
 @node The @code{should} Macro
 @section The @code{should} Macro
 
@@ -793,6 +807,7 @@ code is to restructure the code slightly to provide better 
interfaces
 for testing.  Usually, this makes the interfaces easier to use as
 well.
 
+
 @node erts files
 @section erts files
 
@@ -907,6 +922,7 @@ non-@code{nil} value, the test will be skipped.
 If you need to use the literal line single line @samp{=-=} in a test
 section, you can quote it with a @samp{\} character.
 
+
 @node How to Debug Tests
 @chapter How to Debug Tests
 
@@ -1108,6 +1124,7 @@ For information on mocks, stubs, fixtures, or test 
suites, see below.
 * Fixtures and Test Suites::  How ERT differs from tools for other languages.
 @end menu
 
+
 @node Mocks and Stubs
 @section Other Tools for Emacs Lisp
 @cindex mocks and stubs
@@ -1182,11 +1199,13 @@ e.g., to run quick tests during interactive development 
and slow tests less
 often.  This can be achieved with the @code{:tag} argument to
 @code{ert-deftest} and @code{tag} test selectors.
 
+
 @node Index
 @unnumbered Index
 
 @printindex cp
 
+
 @node GNU Free Documentation License
 @appendix GNU Free Documentation License
 @include doclicense.texi
diff --git a/doc/misc/eshell.texi b/doc/misc/eshell.texi
index c01ceb5fb9..83d324c7e1 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--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 1999--2022 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -271,8 +271,30 @@ Some of the built-in commands have different behavior from 
their
 external counterparts, and some have no external counterpart.  Most of
 these will print a usage message when given the @code{--help} option.
 
+In some cases, a built-in command's behavior can be configured via
+user settings, some of which are mentioned below.  For example,
+certain commands have two user settings to allow them to overwrite
+files without warning and to ensure that they always prompt before
+overwriting files.  If both settings are non-@code{nil}, the commands
+always prompt.  If both settings are @code{nil} (the default), the
+commands signal an error.
+
+Several commands observe the value of
+@code{eshell-default-target-is-dot}.  If non-@code{nil}, then the
+default target for the commands @command{cp}, @command{mv}, and
+@command{ln} is the current directory.
+
+A few commands are wrappers for more niche Emacs features, and can be
+loaded as part of the eshell-xtra module.  @xref{Extension modules}.
+
 @table @code
 
+@item .
+@cmindex .
+Source an Eshell file in the current environment.  This is not to be
+confused with the command @command{source}, which sources a file in a
+subshell environment.
+
 @item addpath
 @cmindex addpath
 Adds a given path or set of paths to the PATH environment variable, or,
@@ -282,26 +304,137 @@ with no arguments, prints the current paths in this 
variable.
 @cmindex alias
 Define an alias (@pxref{Aliases}).  This adds it to the aliases file.
 
+@item basename
+@cmindex basename
+Return a file name without its directory.
+
+@item cat
+@cmindex cat
+Concatenate file contents into standard output.  If in a pipeline, or
+if the file is not a regular file, directory, or symlink, then this
+command reverts to the system's definition of @command{cat}.
+
+@item cd
+@cmindex cd
+This command changes the current working directory.  Usually, it is
+invoked as @kbd{cd @var{dir}} where @file{@var{dir}} is the new
+working directory.  But @command{cd} knows about a few special
+arguments:
+
+@itemize @minus{}
+@item
+When it receives no argument at all, it changes to the home directory.
+
+@item
+Giving the command @kbd{cd -} changes back to the previous working
+directory (this is the same as @kbd{cd $-}).
+
+@item
+The command @kbd{cd =} shows the directory stack.  Each line is
+numbered.
+
+@item
+With @kbd{cd =foo}, Eshell searches the directory stack for a directory
+matching the regular expression @samp{foo}, and changes to that
+directory.
+
+@item
+With @kbd{cd -42}, you can access the directory stack slots by number.
+
+@item
+If @code{eshell-cd-shows-directory} is non-@code{nil}, @command{cd}
+will report the directory it changes to.  If
+@code{eshell-list-files-after-cd} is non-@code{nil}, then @command{ls}
+is called with any remaining arguments after changing directories.
+@end itemize
+
 @item clear
 @cmindex clear
-Scrolls the contents of the eshell window out of sight, leaving a blank window.
-If provided with an optional non-nil argument, the scrollback contents are
-cleared instead.
+Scrolls the contents of the Eshell window out of sight, leaving a
+blank window.  If provided with an optional non-@code{nil} argument,
+the scrollback contents are cleared instead.
+
+@item clear-scrollback
+@cmindex clear-scrollback
+Clear the scrollback contents of the Eshell window.  Unlike the
+command @command{clear}, this command deletes content in the Eshell
+buffer.
+
+@item cp
+@cmindex cp
+Copy a file to a new location or copy multiple files to the same
+directory.
+
+If @code{eshell-cp-overwrite-files} is non-@code{nil}, then
+@command{cp} will overwrite files without warning.  If
+@code{eshell-cp-interactive-query} is non-@code{nil}, then
+@command{cp} will ask before overwriting anything.
 
 @item date
 @cmindex date
-Similar to, but slightly different from, the GNU Coreutils
+Print the current local time as a human-readable string.  This command
+is similar to, but slightly different from, the GNU Coreutils
 @command{date} command.
 
 @item define
 @cmindex define
-Define a varalias.
+Define a variable alias.
 @xref{Variable Aliases, , , elisp, The Emacs Lisp Reference Manual}.
 
 @item diff
 @cmindex diff
-Use Emacs's internal @code{diff} (not to be confused with
-@code{ediff}).  @xref{Comparing Files, , , emacs, The GNU Emacs Manual}.
+Compare files using Emacs's internal @code{diff} (not to be confused
+with @code{ediff}).  @xref{Comparing Files, , , emacs, The GNU Emacs
+Manual}.
+
+If @code{eshell-plain-diff-behavior} is non-@code{nil}, then this
+command does not use Emacs's internal @code{diff}.  This is the same
+as using @samp{alias diff '*diff $*'}.
+
+@item dirname
+@cmindex dirname
+Return the directory component of a file name.
+
+@item dirs
+@cmindex dirs
+Prints the directory stack.  Directories can be added or removed from
+the stack using the commands @command{pushd} and @command{popd},
+respectively.
+
+@item du
+@cmindex du
+Summarize disk usage for each file.
+
+@item echo
+@cmindex echo
+Echoes its input.  If @code{eshell-plain-echo-behavior} is
+non-@code{nil}, @command{echo} will try to behave more like a plain
+shell's @command{echo}.
+
+@item env
+@cmindex env
+Prints the current environment variables.  Unlike in Bash, this
+command does not yet support running commands with a modified
+environment.
+
+@item exit
+@cmindex exit
+Exit Eshell and save the history.  By default, this command kills the
+Eshell buffer, but if @code{eshell-kill-on-exit} is @code{nil}, then
+the buffer is merely buried instead.
+
+@item export
+@cmindex export
+Set environment variables using input like Bash's @command{export}, as
+in @samp{export @var{var1}=@var{val1} @var{var2}=@var{val2} @dots{}}.
+
+@item expr
+@cmindex expr
+An implementation of @command{expr} using the Calc package.
+@xref{Top,,, calc, The GNU Emacs Calculator}.
+
+This command can be loaded as part of the eshell-xtra module, which is
+disabled by default.
 
 @item grep
 @cmindex grep
@@ -313,13 +446,36 @@ Use Emacs's internal @code{diff} (not to be confused with
 @cmindex fgrep
 @itemx glimpse
 @cmindex glimpse
-The @command{grep} commands are compatible with GNU @command{grep}, but
-use Emacs's internal @code{grep} instead.
+The @command{grep} commands are compatible with GNU @command{grep},
+but use Emacs's internal @code{grep} instead.
+@xref{Grep Searching, , , emacs, The GNU Emacs Manual}.
+
+If @code{eshell-plain-grep-behavior} is non-@code{nil}, then these
+commands do not use Emacs's internal @code{grep}.  This is the same as
+using @samp{alias grep '*grep $*'}, though this setting applies to all
+of the built-in commands for which you would need to create a separate
+alias.
+
+@item history
+@cmindex history
+Prints Eshell's input history.  With a numeric argument @var{N}, this
+command prints the @var{N} most recent items in the history.
 
 @item info
 @cmindex info
-Same as the external @command{info} command, but uses Emacs's internal
-Info reader.
+Browse the available Info documentation.  This command is the same as
+the external @command{info} command, but uses Emacs's internal Info
+reader.
+@xref{Misc Help, , , emacs, The GNU Emacs Manual}.
+
+@item intersection
+@cmindex intersection
+A wrapper around the function @code{cl-intersection} (@pxref{Lists as
+Sets,,, cl, GNU Emacs Common Lisp Emulation}).  This command
+can be used for comparing lists of strings.
+
+This command can be loaded as part of the eshell-xtra module, which is
+disabled by default.
 
 @item jobs
 @cmindex jobs
@@ -337,46 +493,152 @@ Eshell version of @code{list}.  Allows you to create a 
list using Eshell
 syntax, rather than Elisp syntax.  For example, @samp{listify foo bar}
 and @code{("foo" "bar")} both evaluate to @code{("foo" "bar")}.
 
+@item ln
+@cmindex ln
+Create links to files.
+
+If @code{eshell-ln-overwrite-files} is non-@code{nil}, @command{ln}
+will overwrite files without warning.  If
+@code{eshell-ln-interactive-query} is non-@code{nil}, then
+@command{ln} will ask before overwriting files.
+
 @item locate
 @cmindex locate
 Alias to Emacs's @code{locate} function, which simply runs the external
 @command{locate} command and parses the results.
 @xref{Dired and Find, , , emacs, The GNU Emacs Manual}.
 
+If @code{eshell-plain-locate-behavior} is non-@code{nil}, then Emacs's
+internal @code{locate} is not used.  This is the same as using
+@samp{alias locate '*locate $*'}.
+
+@item ls
+@cmindex ls
+Lists the contents of directories.
+
+If @code{eshell-ls-use-colors} is non-@code{nil}, the contents of a
+directory is color-coded according to file type and status.  These
+colors and the regexps used to identify their corresponding files can
+be customized via @w{@kbd{M-x customize-group @key{RET} eshell-ls @key{RET}}}.
+
+The user option @code{eshell-ls-date-format} determines how the date
+is displayed when using the @option{-l} option.  The date is produced
+using the function @code{format-time-string} (@pxref{Time Parsing,,,
+elisp, GNU Emacs Lisp Reference Manual}).
+
+The user option @code{eshell-ls-initial-args} contains a list of
+arguments to include with any call to @command{ls}.  For example, you
+can include the option @option{-h} to always use a more human-readable
+format.
+
+The user option @code{eshell-ls-default-blocksize} determines the
+default blocksize used when displaying file sizes with the option
+@option{-s}.
+
 @item make
 @cmindex make
 Run @command{make} through @code{compile} when run asynchronously
 (e.g., @samp{make &}).  @xref{Compilation, , , emacs, The GNU Emacs
 Manual}.  Otherwise call the external @command{make} command.
 
+@item man
+@cmindex man
+Display Man pages using the Emacs @code{man} command.
+@xref{Man Page, , , emacs, The GNU Emacs Manual}.
+
+@item mismatch
+@cmindex mismatch
+A wrapper around the function @code{cl-mismatch} (@pxref{Searching
+Sequences,,, cl, GNU Emacs Common Lisp Emulation}).  This command can
+be used for comparing lists of strings.
+
+This command can be loaded as part of the eshell-xtra module, which is
+disabled by default.
+
+@item mkdir
+@cmindex mkdir
+Make new directories.
+
+@item mv
+@cmindex mv
+Move or rename files.
+
+If @code{eshell-mv-overwrite-files} is non-@code{nil}, @command{mv}
+will overwrite files without warning.  If
+@code{eshell-mv-interactive-query} is non-@code{nil}, @command{mv}
+will prompt before overwriting anything.
+
 @item occur
 @cmindex occur
 Alias to Emacs's @code{occur}.
 @xref{Other Repeating Search, , , emacs, The GNU Emacs Manual}.
 
+@item popd
+@cmindex popd
+Pop a directory from the directory stack and switch to a another place
+in the stack.
+
 @item printnl
 @cmindex printnl
 Print the arguments separated by newlines.
 
-@item cd
-@cmindex cd
-This command changes the current working directory.  Usually, it is
-invoked as @samp{cd foo} where @file{foo} is the new working directory.
-But @command{cd} knows about a few special arguments:
-
-When it receives no argument at all, it changes to the home directory.
-
-Giving the command @samp{cd -} changes back to the previous working
-directory (this is the same as @samp{cd $-}).
-
-The command @samp{cd =} shows the directory stack.  Each line is
-numbered.
-
-With @samp{cd =foo}, Eshell searches the directory stack for a directory
-matching the regular expression @samp{foo} and changes to that
-directory.
-
-With @samp{cd -42}, you can access the directory stack by number.
+@item pushd
+@cmindex pushd
+Push the current directory onto the directory stack, then change to
+another directory.
+
+If @code{eshell-pushd-dunique} is non-@code{nil}, then only unique
+directories will be added to the stack.  If
+@code{eshell-pushd-dextract} is non-@code{nil}, then @samp{pushd
++@var{n}} will pop the @var{n}th directory to the top of the stack.
+
+@item pwd
+@cmindex pwd
+Prints the current working directory.
+
+@item rm
+@cmindex rm
+Removes files, buffers, processes, or Emacs Lisp symbols, depending on
+the argument.
+
+If @code{eshell-rm-interactive-query} is non-@code{nil}, @command{rm}
+will prompt before removing anything.  If
+@code{eshell-rm-removes-directories} is non-@code{nil}, then
+@command{rm} can also remove directories.  Otherwise, @command{rmdir}
+is required.
+
+@item rmdir
+@cmindex rmdir
+Removes directories if they are empty.
+
+@item set-difference
+@cmindex set-difference
+A wrapper around the function @code{cl-set-difference} (@pxref{Lists as
+Sets,,, cl, GNU Emacs Common Lisp Emulation}).  This command
+can be used for comparing lists of strings.
+
+This command can be loaded as part of the eshell-xtra module, which is
+disabled by default.
+
+@item set-exclusive-or
+@cmindex set-exclusive-or
+A wrapper around the function @code{cl-set-exclusive-or} (@pxref{Lists
+as Sets,,, cl, GNU Emacs Common Lisp Emulation}).  This command can be
+used for comparing lists of strings.
+
+This command can be loaded as part of the eshell-xtra module, which is
+disabled by default.
+
+@item setq
+@cmindex setq
+Set variable values, using the function @code{setq} like a command.
+@xref{Setting Variables,,, elisp, GNU Emacs Lisp Reference Manual}.
+
+@item source
+@cmindex source
+Source an Eshell file in a subshell environment.  This is not to be
+confused with the command @command{.}, which sources a file in the
+current environment.
 
 @item su
 @cmindex su
@@ -386,6 +648,50 @@ Uses TRAMP's @command{su} or @command{sudo} method 
@pxref{Inline methods, , , tr
 to run a command via @command{su} or @command{sudo}.  These commands
 are in the eshell-tramp module, which is disabled by default.
 
+
+@item substitute
+@cmindex substitute
+A wrapper around the function @code{cl-substitute} (@pxref{Sequence
+Functions,,, cl, GNU Emacs Common Lisp Emulation}).  This command can
+be used for comparing lists of strings.
+
+This command can be loaded as part of the eshell-xtra module, which is
+disabled by default.
+
+@item time
+@cmindex time
+Show the time elapsed during a command's execution.
+
+@item umask
+@cmindex umask
+Set or view the default file permissions for newly created files and
+directories.
+
+@item union
+@cmindex union
+A wrapper around the function @code{cl-union} (@pxref{Lists as Sets,,,
+cl, GNU Emacs Common Lisp Emulation}).  This command can be used for
+comparing lists of strings.
+
+This command can be loaded as part of the eshell-xtra module, which is
+disabled by default.
+
+@item unset
+@cmindex unset
+Unset an environment variable.
+
+@item wait
+@cmindex wait
+Wait until a process has successfully completed.
+
+@item which
+@cmindex which
+Identify a command and its location.
+
+@item whoami
+@cmindex whoami
+Print the current user.  This Eshell version of @command{whoami}
+supports Tramp.
 @end table
 
 @subsection Built-in variables
diff --git a/doc/misc/eudc.texi b/doc/misc/eudc.texi
index b40277003c..e9cf4cfade 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--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 1998, 2000--2022 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 ebfdaf546e..6d1ba3962f 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--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 2014--2022 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -305,6 +305,7 @@ state the directionality.
 
 @vindex shr-max-image-proportion
 @vindex shr-blocked-images
+@vindex shr-allowed-images
 @cindex Image Display
   Loading random images from the web can be problematic due to their
 size or content.  By customizing @code{shr-max-image-proportion} you
@@ -312,7 +313,9 @@ can set the maximal image proportion in relation to the 
window they
 are displayed in.  E.g., 0.7 means an image is allowed to take up 70%
 of the width and height.  If Emacs supports image scaling (ImageMagick
 support required) then larger images are scaled down.  You can block
-specific images completely by customizing @code{shr-blocked-images}.
+specific images completely by customizing @code{shr-blocked-images},
+or, if you want to only allow some specific images, customize
+@code{shr-allowed-images}.
 
 @vindex shr-inhibit-images
   You can control image display by customizing
diff --git a/doc/misc/flymake.texi b/doc/misc/flymake.texi
index ca464aff66..0db02608dd 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--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 2004--2022 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/forms.texi b/doc/misc/forms.texi
index 15fcd97c5b..8c814b9c85 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--2021 Free Software Foundation,
+Copyright @copyright{} 1989, 1997, 2001--2022 Free Software Foundation,
 Inc.
 
 @quotation
diff --git a/doc/misc/gnus-coding.texi b/doc/misc/gnus-coding.texi
index 94d952b423..0858432acf 100644
--- a/doc/misc/gnus-coding.texi
+++ b/doc/misc/gnus-coding.texi
@@ -8,7 +8,7 @@
 @syncodeindex pg cp
 
 @copying
-Copyright @copyright{} 2004--2005, 2007--2021 Free Software Foundation,
+Copyright @copyright{} 2004--2005, 2007--2022 Free Software Foundation,
 Inc.
 
 @quotation
diff --git a/doc/misc/gnus-faq.texi b/doc/misc/gnus-faq.texi
index 36c402ab35..14a8c4c12d 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, 2001--2021 Free Software Foundation, Inc.
+@c Copyright (C) 1995, 2001--2022 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 a18afec02e..61870311ed 100644
--- a/doc/misc/gnus.texi
+++ b/doc/misc/gnus.texi
@@ -8,7 +8,7 @@
 @syncodeindex pg cp
 
 @copying
-Copyright @copyright{} 1995--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 1995--2022 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -4499,7 +4499,7 @@ command or better use it as a prefix key.  For example:
     (gnus-group-jump-to-group "nndraft:drafts")))
 @end lisp
 
-On keys reserved for users in Emacs and on keybindings in general
+On keys reserved for users in Emacs and on key bindings in general
 @xref{Keymaps, Keymaps, , emacs, The Emacs Editor}.
 
 @item ^
@@ -13477,7 +13477,7 @@ Also @pxref{Formatting Variables}.
 @subsection Server Commands
 @cindex server commands
 
-The following keybinding are available in the server buffer.  Be aware
+The following key bindings are available in the server buffer.  Be aware
 that some of the commands will only work on servers that you've added
 through this interface (with @kbd{a}), not with servers you've defined
 in your init files.
@@ -15447,10 +15447,6 @@ If non-@code{nil}, ask for confirmation before 
deleting old incoming
 files.  This variable only applies when
 @code{mail-source-delete-incoming} is a positive number.
 
-@item mail-source-ignore-errors
-@vindex mail-source-ignore-errors
-If non-@code{nil}, ignore errors when reading mail from a mail source.
-
 @item mail-source-directory
 @vindex mail-source-directory
 Directory where incoming mail source files (if any) will be stored.  The
@@ -18052,7 +18048,7 @@ find all messages that have been received recently from 
certain groups:
          (list
           (cons 'query
                 (format-time-string "SENTSINCE %d-%b-%Y"
-                                    (time-subtract (current-time)
+                                    (time-subtract nil
                                                    (days-to-time (car args)))))
           (cons 'criteria "")))
         (group-spec (cadr args)))
diff --git a/doc/misc/htmlfontify.texi b/doc/misc/htmlfontify.texi
index b2216924e2..0ab000b70f 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--2003, 2013--2021 Free Software Foundation,
+Copyright @copyright{} 2002--2003, 2013--2022 Free Software Foundation,
 Inc.
 
 @quotation
diff --git a/doc/misc/idlwave.texi b/doc/misc/idlwave.texi
index 3cd53c71da..26a6e6c7a3 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--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 1999--2022 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -2670,7 +2670,7 @@ As a special case, any error message in the output will 
be displayed
 @node Debugging IDL Programs
 @section Debugging IDL Programs
 @cindex Debugging
-@cindex Keybindings for debugging
+@cindex Key bindings for debugging
 @cindex Toolbar
 
 Programs can be compiled, run, and debugged directly from the source
diff --git a/doc/misc/ido.texi b/doc/misc/ido.texi
index 1c960940a0..c8f9762b55 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--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 2013--2022 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -476,13 +476,13 @@ M-x customize-variable @key{RET} ido-xxxxx @key{RET}
 @end example
 
 @vindex ido-setup-hook
-To modify the keybindings, use the @code{ido-setup-hook}.  For example:
+To modify the key bindings, use the @code{ido-setup-hook}.  For example:
 
 @example
 (add-hook 'ido-setup-hook 'ido-my-keys)
 
 (defun ido-my-keys ()
- "Add my keybindings for Ido."
+ "Add my key bindings for Ido."
  (define-key ido-completion-map " " 'ido-next-match))
 @end example
 
diff --git a/doc/misc/info.texi b/doc/misc/info.texi
index 27c00f3925..98e0dceb5a 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--2021 Free Software Foundation,
+Copyright @copyright{} 1989, 1992, 1996--2022 Free Software Foundation,
 Inc.
 
 @quotation
diff --git a/doc/misc/mairix-el.texi b/doc/misc/mairix-el.texi
index e57b5ed542..3632c64bd4 100644
--- a/doc/misc/mairix-el.texi
+++ b/doc/misc/mairix-el.texi
@@ -5,7 +5,7 @@
 @include docstyle.texi
 
 @copying
-Copyright @copyright{} 2008--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 2008--2022 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 4136ad859f..29fbdfe178 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--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 1996--2022 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -2553,6 +2553,22 @@ if @code{nil} let the mailer mail back a message to 
report errors.
 When non-@code{nil}, Gnus will ask for confirmation when sending a
 message.
 
+@item message-server-alist
+@vindex message-server-alist
+An alist describing the rules for generating the
+@code{X-Message-SMTP-Method} header to insert before sending out a new
+message, if the message doesn't yet have such a header.  Each element
+of the alist should be of the form
+@w{@code{(@var{cond} . @var{method})}}.  If @var{cond} is a string, it
+will be compared with the @code{From} header, and if they compare
+equal, the corresponding @var{method} will be inserted as a string
+into the message headers as the SMTP Method.  If @var{cond} is a
+function, it will be called in the message buffer without any
+arguments, and the corresponding @var{method} will be inserted into
+the message headers as the SMTP Method if the function returns a
+non-@code{nil} value; if @var{method} is nil, the value returned by
+the function @code{cond} is used instead.
+
 @end table
 
 
diff --git a/doc/misc/mh-e.texi b/doc/misc/mh-e.texi
index d96c243f52..c1cf44a027 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--2021 Free Software
+Copyright @copyright{} 1995, 2001--2003, 2005--2022 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 f3c2e37b7d..35bc8853fd 100644
--- a/doc/misc/modus-themes.org
+++ b/doc/misc/modus-themes.org
@@ -5,9 +5,9 @@
 #+options: ':t toc:nil author:t email:t num:t
 #+startup: content
 
-#+macro: stable-version 1.7.0
-#+macro: release-date 2021-11-18
-#+macro: development-version 1.8.0-dev
+#+macro: stable-version 2.0.0
+#+macro: release-date 2021-12-24
+#+macro: development-version 2.1.0-dev
 #+macro: file @@texinfo:@file{@@$1@@texinfo:}@@
 #+macro: space @@texinfo:@: @@
 #+macro: kbd @@texinfo:@kbd{@@$1@@texinfo:}@@
@@ -42,7 +42,7 @@ Current development target is {{{development-version}}}.
 :custom_id: h:b14c3fcb-13dd-4144-9d92-2c58b3ed16d3
 :end:
 
-Copyright (C) 2020-2021  Free Software Foundation, Inc.
+Copyright (C) 2020-2022 Free Software Foundation, Inc.
 
 #+begin_quote
 Permission is granted to copy, distribute and/or modify this document
@@ -82,9 +82,22 @@ themes strive to achieve as close to full face coverage as 
possible
 ([[#h:a9c8f29d-7f72-4b54-b74b-ddefe15d6a19][Face coverage]]).
 
 Furthermore, the themes are designed to empower users with red-green
-color deficiency (deuteranopia).  This is achieved through customization
-options which have the effect of replacing all relevant instances of
-green with a variant of blue 
([[#h:bf1c82f2-46c7-4eb2-ad00-dd11fdd8b53f][Customization Options]]).
+color deficiency (deuteranopia).  This is achieved in three ways:
+
+1. The conformance with the highest legibility standard means that text
+   is always readable no matter the perception of its hue.
+
+2. Most contexts use colors on the blue-cyan-magenta-purple side of the
+   spectrum.  Put differently, green and/or red are seldom used, thus
+   minimizing the potential for confusion.
+
+   [[#h:0b26cb47-9733-4cb1-87d9-50850cb0386e][Why are colors mostly variants 
of blue, magenta, cyan?]].
+
+3. In contexts where a red/green color-coding is unavoidable, we provide
+   a universal toggle to customize the themes so that a red/blue scheme
+   is used instead.
+
+   [[#h:3ed03a48-20d8-4ce7-b214-0eb7e4c79abe][Option for red-green color 
deficiency or deuteranopia]].
 
 Starting with version 0.12.0 and onwards, the themes are built into GNU
 Emacs.
@@ -279,9 +292,9 @@ With those granted, bear in mind a couple of technical 
points on
 
 2. The functions will run the ~modus-themes-after-load-theme-hook~ as
    their final step.  This can be employed for bespoke configurations
-   ([[#h:f4651d55-8c07-46aa-b52b-bed1e53463bb][Advanced customization 
(do-it-yourself)]]).  Experienced users may not
-   wish to rely on such a hook and the functions that run it: they may
-   prefer a custom solution ([[#h:86f6906b-f090-46cc-9816-1fe8aeb38776][A 
theme-agnostic hook for theme loading]]).
+   ([[#h:f4651d55-8c07-46aa-b52b-bed1e53463bb][Advanced customization]]).  
Experienced users may not wish to rely on
+   such a hook and the functions that run it: they may prefer a custom
+   solution ([[#h:86f6906b-f090-46cc-9816-1fe8aeb38776][A theme-agnostic hook 
for theme loading]]).
 
 ** Sample configuration with and without use-package
 :properties:
@@ -404,8 +417,9 @@ this manual.
       modus-themes-mixed-fonts nil
       modus-themes-subtle-line-numbers nil
       modus-themes-intense-markup t
-      modus-themes-success-deuteranopia t
+      modus-themes-deuteranopia t
       modus-themes-tabs-accented t
+      modus-themes-variable-pitch-ui nil
       modus-themes-inhibit-reload t ; only applies to `customize-set-variable' 
and related
 
       modus-themes-fringes nil ; {nil,'subtle,'intense}
@@ -418,12 +432,8 @@ this manual.
 
       ;; Options for `modus-themes-mode-line' are either nil, or a list
       ;; that can combine any of `3d' OR `moody', `borderless',
-      ;; `accented', `padded'.
-      modus-themes-mode-line '(padded accented borderless)
-
-      ;; This one only works when `modus-themes-mode-line' (above) has
-      ;; the `padded' property.  It takes a positive integer.
-      modus-themes-mode-line-padding 3
+      ;; `accented', and a natural number for extra padding
+      modus-themes-mode-line '(4 accented borderless)
 
       ;; Options for `modus-themes-syntax' are either nil (the default),
       ;; or a list of properties that may include any of those symbols:
@@ -460,32 +470,22 @@ this manual.
       ;; `no-extend', `bg-only', `accented'
       modus-themes-region '(bg-only no-extend)
 
-      ;; Options for `modus-themes-diffs': nil, 'desaturated,
-      ;; 'bg-only, 'deuteranopia, 'fg-only-deuteranopia
-      modus-themes-diffs 'fg-only-deuteranopia
+      ;; Options for `modus-themes-diffs': nil, 'desaturated, 'bg-only
+      modus-themes-diffs 'desaturated
 
       modus-themes-org-blocks 'gray-background ; 
{nil,'gray-background,'tinted-background}
 
       modus-themes-org-agenda ; this is an alist: read the manual or its doc 
string
-      '((header-block . (variable-pitch scale-title))
-        (header-date . (grayscale workaholic bold-today))
-        (event . (accented scale-small))
+      '((header-block . (variable-pitch 1.3))
+        (header-date . (grayscale workaholic bold-today 1.1))
+        (event . (accented varied))
         (scheduled . uniform)
-        (habit . traffic-light-deuteranopia))
+        (habit . traffic-light))
 
       modus-themes-headings ; this is an alist: read the manual or its doc 
string
-      '((1 . (overline background))
-        (2 . (rainbow overline))
-        (t . (semibold)))
-
-      modus-themes-variable-pitch-ui nil
-      modus-themes-variable-pitch-headings t
-      modus-themes-scale-headings t
-      modus-themes-scale-1 1.1
-      modus-themes-scale-2 1.15
-      modus-themes-scale-3 1.21
-      modus-themes-scale-4 1.27
-      modus-themes-scale-title 1.33)
+      '((1 . (overline background variable-pitch 1.3))
+        (2 . (rainbow overline 1.1))
+        (t . (semibold))))
 #+end_src
 
 ** Option for inhibiting theme reload
@@ -515,37 +515,40 @@ Enable this behaviour by setting this variable to ~nil~.
 Regardless of this option, the active theme must be reloaded for changes
 to user options to take effect 
([[#h:3f3c3728-1b34-437d-9d0c-b110f5b161a9][Enable and load]]).
 
-** Option for color-coding success state (deuteranopia)
+** Option for red-green color deficiency or deuteranopia
 :properties:
-:alt_title: Success' color-code
-:description: Toggle blue color for success or done states
+:alt_title: Deuteranopia style
+:description: Toggle red/blue color-coding instead of red/green
 :custom_id: h:3ed03a48-20d8-4ce7-b214-0eb7e4c79abe
 :end:
-#+vindex: modus-themes-success-deuteranopia
+#+vindex: modus-themes-deuteranopia
 
-Brief: Toggle the use of blue instead of green in places which
-color-code green as "success" and red as "failure".
+Brief: When non-nil use red/blue color-coding instead of red/green,
+where appropriate.
 
-Symbol: ~modus-themes-success-deuteranopia~ (=boolean= type)
+Symbol: ~modus-themes-deuteranopia~ (=boolean= type)
 
 Possible values:
 
 1. ~nil~ (default)
 2. ~t~
 
-The default is to colorise a passing state in a green hue.  This affects
-all faces that denote "success", "done", marking a selection as opposed
-to marking for deletion, the current search match in contrast to lazily
-highlighted ones, and the like.
-
-With a non-nil value (~t~), use variants of blue instead of green.  This
-is meant to empower users with red-green color deficiency.
+This is to account for red-green color deficiency, also know as
+deuteranopia and variants.  It applies to all contexts where there can
+be a color-coded distinction between failure or success, a to-do or done
+state, a mark for deletion versus a mark for selection (e.g. in Dired),
+current and lazily highlighted search matches, removed lines in diffs as
+opposed to added ones, and so on.
 
-Diffs, which rely on a red/green dichotomy by default, can also be
-configured to meet the needs of users with deuteranopia via the option
-~modus-themes-diffs~.
+Note that this does not change all colors throughout the active theme,
+but only applies to cases that have color-coding significance.  For
+example, regular code syntax highlighting is not affected.  There is no
+such need because of the themes' overarching commitment to the highest
+legibility standard, which ensures that text is readable regardless of
+hue, as well as the predominance of colors on the
+blue-cyan-magenta-purple side of the spectrum.
 
-[[#h:ea7ac54f-5827-49bd-b09f-62424b3b6427][Option for diff buffer looks]].
+[[#h:0b26cb47-9733-4cb1-87d9-50850cb0386e][Why are colors mostly variants of 
blue, magenta, cyan?]].
 
 ** Option for more bold constructs
 :properties:
@@ -856,45 +859,44 @@ effect, color, and border visibility:
   - ~moody~
 + ~accented~
 + ~borderless~
-+ ~padded~
++ A natural number > 1 for extra padding
 
 The default (a nil value or an empty list) is a two-dimensional
-rectangle with a border around it.  The active and the inactive
-mode lines use different shades of grayscale values for the
-background, foreground, border.
-
-The ~3d~ property applies a three-dimensional effect to the
-active mode line.  The inactive mode lines remain two-dimensional
-and are toned down a bit, relative to the default style.
-
-The ~moody~ property optimizes the mode line for use with the
-library of the same name (hereinafter referred to as 'Moody').
-In practice, it removes the box effect and replaces it with
-underline and overline properties.  It also tones down the
-inactive mode lines.  Despite its intended purpose, this option
-can also be used without the Moody library (please consult the
-themes' manual on this point for more details).  If both ~3d~ and
-~moody~ properties are set, the latter takes precedence.
-
-The ~borderless~ property removes the color of the borders.  It
-does not actually remove the borders, but only makes their color
-the same as the background, effectively creating some padding.
-
-The ~accented~ property ensures that the active mode line uses a
-colored background instead of the standard shade of gray.
-
-The ~padded~ property increases the apparent height of the mode line.
-This is done by applying box effects and combining them with an
-underline and overline.  To ensure that the underline is placed at the
-bottom, set ~x-underline-at-descent-line~ to non-nil.  The ~padded~ property
-has no effect when the ~moody~ property is also used, because Moody
-already applies its own padding.  The exact value of the padding is
-controlled by the variable ~modus-themes-mode-line-padding~.
-
-[[#h:a12b4d3c-e66b-42ed-99ab-4ea039b69e2e][Option for mode line padding]].
+rectangle with a border around it.  The active and the inactive mode
+lines use different shades of grayscale values for the background,
+foreground, border.
+
+The ~3d~ property applies a three-dimensional effect to the active mode
+line.  The inactive mode lines remain two-dimensional and are toned down
+a bit, relative to the default style.
+
+The ~moody~ property optimizes the mode line for use with the library of
+the same name (hereinafter referred to as 'Moody').  In practice, it
+removes the box effect and replaces it with underline and overline
+properties.  It also tones down the inactive mode lines.  Despite its
+intended purpose, this option can also be used without the Moody library
+(please consult the themes' manual on this point for more details).  If
+both ~3d~ and ~moody~ properties are set, the latter takes precedence.
+
+The ~borderless~ property removes the color of the borders.  It does not
+actually remove the borders, but only makes their color the same as the
+background, effectively creating some padding.
+
+The ~accented~ property ensures that the active mode line uses a colored
+background instead of the standard shade of gray.
+
+A positive integer (natural number or natnum) applies a padding effect
+of NATNUM pixels at the boundaries of the mode lines.  The default value
+is 1 and does not need to be specified explicitly.  The padding has no
+effect when the ~moody~ property is also used, because Moody already
+applies its own tweaks.  To ensure that the underline is placed at the
+bottom of the mode line, set ~x-underline-at-descent-line~ to non-nil
+(this is not needed when the ~borderless~ property is also set).  For
+users on Emacs 29, the ~x-use-underline-position-properties~ variable must
+also be set to nil.
 
-Combinations of any of those properties are expressed as a list,
-like in these examples:
+Combinations of any of those properties are expressed as a list, like in
+these examples:
 
 #+begin_src emacs-lisp
 (accented)
@@ -929,31 +931,13 @@ high, because it has the adverse effect of always 
overriding the default
 colors (which have been carefully designed to be highly accessible).
 
 Furthermore, because Moody expects an underline and overline instead of
-a box style, it is advised to set ~x-underline-at-descent-line~ to a
-non-nil value.
+a box style, it is strongly advised to set ~x-underline-at-descent-line~
+to a non-nil value.
 
 Finally, note that various packages which heavily modify the mode line,
 such as =doom-modeline=, =nano-modeline=, =powerline=, =spaceline= may not look
 as intended with all possible combinations of this user option.
 
-*** Option for mode line padding
-:properties:
-:custom_id: h:a12b4d3c-e66b-42ed-99ab-4ea039b69e2e
-:end:
-#+vindex: modus-themes-mode-line-padding
-
-Brief: Set the padding of the mode lines.
-
-Symbol: ~modus-themes-mode-line-padding~ (=natnum= type)
-
-Controls the exact width of the mode line's padding.  Possible values
-are positive integers.  The default value is =6=.
-
-This customization option applies only when ~modus-themes-mode-line~ is
-configured with the ~padded~ property.
-
-[[#h:27943af6-d950-42d0-bc23-106e43f50a24][Option for mode line presentation]].
-
 ** Option for accented background in tab interfaces
 :properties:
 :alt_title: Tab style
@@ -1002,7 +986,7 @@ foreground colors for their interaction model, and (ii) 
those that
 combine background and foreground values for some of their metaphors.
 The former category encompasses Icomplete, Ido, Selectrum, Vertico, as
 well as pattern matching styles like Orderless and Flx.  The latter
-covers Helm, Ivy, and Sallet.
+covers Helm and Ivy.
 
 A value of ~nil~ (the default) will simply respect the metaphors of each
 completion framework.
@@ -1151,7 +1135,7 @@ To disable fringe indicators for Flymake or Flycheck, 
refer to variables
 ~flymake-fringe-indicator-position~ and ~flycheck-indication-mode~,
 respectively.
 
-** Option for line highlighting (hl-line-mode)
+** Option for line highlighting
 :properties:
 :alt_title: Line highlighting
 :description: Choose style of current line (hl-line-mode)
@@ -1205,7 +1189,7 @@ with underlines.
 This style affects several packages that enable ~hl-line-mode~, such as
 =elfeed=, =notmuch=, and =mu4e=.
 
-** Option for line numbers (display-line-numbers-mode)
+** Option for line numbers
 :properties:
 :alt_title: Line numbers
 :description: Toggle subtle style for line numbers
@@ -1260,7 +1244,7 @@ combined with a subtle background.
 With a non-nil value (~t~), these constructs will use a more prominent
 background and foreground color combination instead.
 
-** Option for parenthesis matching (show-paren-mode)
+** Option for parenthesis matching
 :properties:
 :alt_title: Matching parentheses
 :description: Choose between various styles for matching delimiters/parentheses
@@ -1361,12 +1345,12 @@ In user configuration files the form may look like this:
 ** Option for diff buffer looks
 :properties:
 :alt_title: Diffs
-:description: Choose among intense, desaturated, or text-only diffs
+:description: Choose among intense, desaturated, or background-only diffs
 :custom_id: h:ea7ac54f-5827-49bd-b09f-62424b3b6427
 :end:
 #+vindex: modus-themes-diffs
 
-Bried: Set the overall style of diffs.
+Brief: Set the overall style of diffs.
 
 Symbol: ~modus-themes-diffs~ (=choice= type)
 
@@ -1375,11 +1359,10 @@ Possible values:
 1. ~nil~ (default)
 2. ~desaturated~
 3. ~bg-only~
-4. ~deuteranopia~
-5. ~fg-only-deuteranopia~
 
 The default (~nil~) uses fairly intense color combinations for diffs, by
-applying prominently colored backgrounds, with appropriate foregrounds.
+applying prominently colored backgrounds, with appropriately tinted
+foregrounds.
 
 Option ~desaturated~ follows the same principles as with the default
 (~nil~), though it tones down all relevant colors.
@@ -1387,24 +1370,22 @@ Option ~desaturated~ follows the same principles as 
with the default
 Option ~bg-only~ applies a background but does not override the text's
 foreground.  This makes it suitable for a non-nil value passed to
 ~diff-font-lock-syntax~ (note: Magit does not support syntax highlighting
-in diffs---last checked on 2021-04-21).
-
-Option ~deuteranopia~ is like the default (~nil~) in terms of using
-prominently colored backgrounds, except that it also accounts for
-red-green color defficiency by replacing all instances of green with
-colors on the blue side of the spectrum.  Other stylistic changes are
-made in the interest of optimizing for such a use-case.
-
-Option ~fg-only-deuteranopia~ removes all colored backgrounds, except from
-word-wise or refined changes.  Instead, it only uses color-coded
-foreground values to differentiate between added, removed, and changed
-lines.  If a background is necessary to denote context, a subtle
-grayscale value is applied.  The color used for added lines is a variant
-of blue to account for red-green color defficiency but also because
-green text alone is hard to discern in the diff's context (hard for our
-accessibility purposes).  The ~fg-only~ option that existed in older
-versions of the themes is now an alias of ~fg-only-deuteranopia~, in the
-interest of backward compatibility.
+in diffs---last checked on 2021-12-02).
+
+When the user option ~modus-themes-deuteranopia~ is non-nil, all diffs
+will use a red/blue color-coding system instead of the standard
+red/green.  Other stylistic changes are made in the interest of
+optimizing for such a use-case.
+
+[[#h:3ed03a48-20d8-4ce7-b214-0eb7e4c79abe][Option for red-green color 
deficiency or deuteranopia]].
+
+In versions before =2.0.0= there was an option for foreground-only diffs.
+This is no longer supported at the theme level because there are cases
+where the perceived contrast and overall contextuality were not good
+enough although the applied colors were technically above the 7:1
+contrast threshold.
+
+[[#h:e2aed9eb-5e1e-45ec-bbd7-bc4faeab3236][Diffs with only the foreground]].
 
 ** Option for org-mode block styles
 :properties:
@@ -1468,8 +1449,8 @@ all possible combinations:
 
 #+begin_src emacs-lisp
 (setq modus-themes-org-agenda
-      '((header-block . (variable-pitch scale-title))
-        (header-date . (grayscale workaholic bold-today))
+      '((header-block . (variable-pitch 1.5))
+        (header-date . (grayscale workaholic bold-today 1.2))
         (event . (accented italic varied))
         (scheduled . uniform)
         (habit . traffic-light)))
@@ -1483,20 +1464,31 @@ come in the form of a list that can include either or 
both of those
 properties:
 
 - ~variable-pitch~ to use a proportionately spaced typeface;
-- ~scale-title~ to increase the size to the number assigned to
-  ~modus-themes-scale-title~ 
([[#h:6868baa1-beba-45ed-baa5-5fd68322ccb3][Control the scale of headings]]) or 
~no-scale~
-  to make the font use the same height as the rest of the buffer.
+- A number as a floating point (e.g. 1.5) to set the height of the text
+  to that many times the default font height.  A float of 1.0 or the
+  symbol ~no-scale~ have the same effect of making the font to the same
+  height as the rest of the buffer.  When neither a number nor ~no-scale~
+  are present, the default is a small increase in height (a value of
+  1.15).
+- The symbol of a weight attribute adjusts the font of the heading
+  accordingly, such as ~light~, ~semibold~, etc.  Valid symbols are defined
+  in the internal variable ~modus-themes--heading-weights~.  The absence
+  of a weight means that bold will be used by virtue of inheriting the
+  ~bold~ face.
 
-In case both ~scale-title~ and ~no-scale~ are in the list, the latter takes
-precedence.
+[[#h:2793a224-2109-4f61-a106-721c57c01375][Configure bold and italic faces]].
+
+In case both a number and ~no-scale~ are in the list, the latter takes
+precedence.  If two numbers are specified, the first one is applied.
 
 Example usage:
 
 #+begin_src emacs-lisp
 (header-block . nil)
-(header-block . (scale-title))
+(header-block . (1.5))
 (header-block . (no-scale))
-(header-block . (variable-pitch scale-title))
+(header-block . (variable-pitch 1.5))
+(header-block . (variable-pitch 1.5 semibold))
 #+end_src
 
 A ~header-date~ key covers date headings.  Dates use only a foreground
@@ -1511,12 +1503,12 @@ the following properties:
   terms of color;
 - ~bold-today~ to apply a bold typographic weight to the current
   date;
-- ~bold-all~ to render all date headings in a bold weight.
-- ~scale-heading~ increases the height of the date headings to the value
-  of ~modus-themes-scale-1~ (which is the first step in the scale for
-  regular headings).
+- ~bold-all~ to render all date headings in a bold weight;
 - ~underline-today~ applies an underline to the current date while
-  removing the background it has by default.
+  removing the background it has by default;
+- A number as a floating point (e.g. 1.2) to set the height of the text
+  to that many times the default font height.  The default is the same
+  as the base font height (the equivalent of 1.0).
 
 For example:
 
@@ -1536,12 +1528,6 @@ or sexp (phases of the moon, holidays, etc.).  By 
default all those look
 the same and have a subtle foreground color (the default is a nil value
 or an empty list).  This key accepts a list of properties.  Those are:
 
-- ~scale-small~ reduces the height of the entries to the value of
-  the user option ~modus-themes-scale-small~ (0.9 the height of
-  the main font size by default).  This work best when the
-  relevant entries have no tags associated with them and when the
-  user is interested in reducing their presence in the agenda
-  view.
 - ~accented~ applies an accent value to the event's foreground,
   replacing the original gray.  It makes all entries stand out more.
 - ~italic~ adds a slant to the font's forms (italic or oblique forms,
@@ -1608,9 +1594,12 @@ passed as a symbol.  Those are:
   being too late.  The difference between ready and clear states is
   attenuated by painting both of them using shades of green.  This
   option thus highlights the alert and overdue states.
-- ~traffic-light-deuteranopia~ is like the ~traffic-light~ except its three
-  colors are red, yellow, and blue to be suitable for users with
-  red-green color deficiency (deuteranopia).
+- When ~modus-themes-deuteranopia~ is non-nil the habit graph uses a
+  three-color style like the aforementioned ~traffic-light~ variant,
+  except that shades of blue are applied instead of green.  This is
+  suitable for users with red-green color deficiency (deuteranopia).
+
+[[#h:3ed03a48-20d8-4ce7-b214-0eb7e4c79abe][Option for red-green color 
deficiency or deuteranopia]].
 
 For example:
 
@@ -1623,17 +1612,17 @@ For example:
 Putting it all together, the alist can look like this:
 
 #+begin_src emacs-lisp
-'((header-block . (scale-title variable-pitch))
+'((header-block . (1.5 variable-pitch))
   (header-date . (grayscale workaholic bold-today))
-  (event . (accented scale-small))
+  (event . (accented varied))
   (scheduled . uniform)
   (habit . traffic-light))
 
 ;; Or else:
 (setq modus-themes-org-agenda
-      '((header-block . (scale-title variable-pitch))
+      '((header-block . (1.5 variable-pitch))
         (header-date . (grayscale workaholic bold-today))
-        (event . (accented scale-small))
+        (event . (accented varied))
         (scheduled . uniform)
         (habit . traffic-light)))
 #+end_src
@@ -1659,8 +1648,9 @@ a presentation of all available properties:
 
 #+begin_src emacs-lisp
 (setq modus-themes-headings
-      '((1 . (background overline))
-        (2 . (overline rainbow))
+      '((1 . (background overline variable-pitch 1.5))
+        (2 . (overline rainbow 1.3))
+        (3 . (overline 1.1))
         (t . (monochrome))))
 #+end_src
 
@@ -1683,7 +1673,8 @@ Properties:
   - ~heavy~
   - ~extrabold~
   - ~ultrabold~
-+ ~no-bold~
++ ~no-bold~ (deprecated alias of a ~regular~ weight)
++ A floating point as a height multiple of the default
 
 By default (a ~nil~ value for this variable), all headings have a bold
 typographic weight and use a desaturated text color.
@@ -1695,10 +1686,13 @@ An ~overline~ property draws a line above the area of 
the heading.
 A ~background~ property adds a subtle tinted color to the background of
 the heading.
 
-A ~monochrome~ property makes all headings the same base color, which is
-that of the default for the active theme (black/white).  When ~background~
-is also set, ~monochrome~ changes its color to gray.  If both ~monochrome~
-and ~rainbow~ are set, the former takes precedence.
+A ~monochrome~ property makes the heading the same as the base color,
+which is that of the ~default~ face's foreground.  When ~background~ is also
+set, ~monochrome~ changes its color to gray.  If both ~monochrome~ and
+~rainbow~ are set, the former takes precedence.
+
+A ~variable-pitch~ property changes the font family of the heading to that
+of the ~variable-pitch~ face (normally a proportionately spaced typeface).
 
 The symbol of a weight attribute adjusts the font of the heading
 accordingly, such as ~light~, ~semibold~, etc.  Valid symbols are defined in
@@ -1709,13 +1703,17 @@ users are encouraged to specify a ~regular~ weight 
instead.
 
 [[#h:2793a224-2109-4f61-a106-721c57c01375][Configure bold and italic faces]].
 
+A number, expressed as a floating point (e.g. 1.5), adjusts the height
+of the heading to that many times the base font size.  The default
+height is the same as 1.0, though it need not be explicitly stated.
+
 Combinations of any of those properties are expressed as a list, like in
 these examples:
 
 #+begin_src emacs-lisp
 (semibold)
 (rainbow background)
-(overline monochrome semibold)
+(overline monochrome semibold 1.3)
 #+end_src
 
 The order in which the properties are set is not significant.
@@ -1724,8 +1722,8 @@ In user configuration files the form may look like this:
 
 #+begin_src emacs-lisp
 (setq modus-themes-headings
-      '((1 . (background overline rainbow))
-        (2 . (background overline))
+      '((1 . (background overline rainbow 1.5))
+        (2 . (background overline 1.3))
         (t . (overline semibold))))
 #+end_src
 
@@ -1750,113 +1748,6 @@ For Org users, the extent of the heading depends on the 
variable
 ~background~ properties.  Depending on the version of Org, there may be
 others, such as ~org-fontify-done-headline~.
 
-[[#h:075eb022-37a6-41a4-a040-cc189f6bfa1f][Option for scaled headings]].
-
-[[#h:97caca76-fa13-456c-aef1-a2aa165ea274][Option for variable-pitch font in 
headings]].
-
-** Option for scaled headings
-:properties:
-:alt_title: Scaled headings
-:description: Toggle scaling of headings
-:custom_id: h:075eb022-37a6-41a4-a040-cc189f6bfa1f
-:end:
-#+vindex: modus-themes-scale-headings
-
-Brief: Toggle the scaling of headings.
-
-Symbol: ~modus-themes-scale-headings~ (=boolean= type)
-
-Possible values:
-
-1. ~nil~ (default)
-2. ~t~
-
-The default is to use the same size for headings and paragraph text.
-
-With a non-nil value (~t~) make headings larger in height relative to the
-main text.  This is noticeable in modes like Org, Markdown, and Info.
-
-*** Control the scale of headings
-:properties:
-:alt_title: Scaled heading sizes
-:description: Specify rate of increase for scaled headings
-:custom_id: h:6868baa1-beba-45ed-baa5-5fd68322ccb3
-:end:
-
-Brief: Specify the height for individual heading scales.
-
-Symbols (all are =number= type):
-
-+ ~modus-themes-scale-1~
-+ ~modus-themes-scale-2~
-+ ~modus-themes-scale-3~
-+ ~modus-themes-scale-4~
-+ ~modus-themes-scale-title~
-+ ~modus-themes-scale-small~
-
-In addition to the toggle for enabling scaled headings, users can also
-specify a number of their own.
-
-+ If it is a floating point, say, =1.5=, it is interpreted as a multiple
-  of the base font size.  This is the recommended method, because it
-  will always adapt to changes in the base font size, such as while
-  using the ~text-scale-adjust~ command.
-
-+ If it is an integer, it is read as an absolute font height that is
-  1/10 of the typographic point size.  Thus a value of =18pt= must be
-  expressed as =180=.  Setting an absolute value is discouraged, as it
-  will break the layout in cases where the base font size must change,
-  such as with the ~text-scale-adjust~ command 
([[#h:defcf4fc-8fa8-4c29-b12e-7119582cc929][Font configurations]]).
-  While we discourage using absolute values, we still provide for this
-  option for users who do not need to perform text-scaling operations or
-  who are content with whatever discrepancies in height.
-
-Below are the variables in their default values, using the floating
-point paradigm.  The numbers are very conservative, but one is free to
-change them to their liking, such as =1.2=, =1.4=, =1.6=, =1.8=, =2.0=---or 
use a
-resource for finding a consistent scale:
-
-#+begin_src emacs-lisp
-(setq modus-themes-scale-1 1.05
-      modus-themes-scale-2 1.1
-      modus-themes-scale-3 1.15
-      modus-themes-scale-4 1.2
-      modus-themes-scale-title 1.3
-      modus-themes-scale-small 0.9)
-#+end_src
-
-As for the application of that scale, the variables that range from
-~modus-themes-scale-1~ up to ~modus-themes-scale-4~ apply to regular
-headings within the context of the given major mode.  The former is the
-smallest, while the latter is the largest.  "Regular headings" are those
-that have a standard syntax for their scale, such as Org mode's eight
-levels of asterisks or Markdown's six columns.
-
-Whereas ~modus-themes-scale-title~ is applied to special headings that do
-not conform with the aforementioned syntax, yet which are expected to be
-larger than the largest value on that implied scale or at least have
-some unique purpose in the buffer.  Put concretely, Org's =#+title= meta
-datum is not part of the eight levels of headings in an Org file, yet is
-supposed to signify the primary header.  Similarly, the Org Agenda's
-structure headings are not part of a recognisable scale and so they also
-get ~modus-themes-scale-title~ 
([[#h:68f481bc-5904-4725-a3e6-d7ecfa7c3dbc][Option for Org agenda constructs]]).
-
-Similarly ~modus-themes-scale-small~ is not applied to regular headings,
-but reserved for special contexts where the user is presented with an
-option to use a smaller font height than the base size.  It is only
-implemented for the Org agenda.
-
-Users who wish to maintain scaled headings for the normal syntax while
-preventing special headings from standing out, can assign a value of =1.0=
-to ~modus-themes-scale-title~ to make it the same as body text (or
-whatever value would render it indistinguishable from the desired point
-of reference).
-
-Note that in earlier versions of Org, scaling would only increase the
-size of the heading, but not of keywords that were added to it, like
-"TODO".  The issue has been fixed upstream:
-<https://protesilaos.com/codelog/2020-09-24-org-headings-adapt/>.
-
 ** Option for variable-pitch font in UI elements
 :properties:
 :alt_title: UI typeface
@@ -1887,33 +1778,7 @@ is done by assigning the ~variable-pitch~ face to the 
relevant items.
 
 [[#h:defcf4fc-8fa8-4c29-b12e-7119582cc929][Font configurations for Org and 
others]].
 
-** Option for variable-pitch font in headings
-:properties:
-:alt_title: Headings' typeface
-:description: Toggle the use of variable-pitch in headings
-:custom_id: h:97caca76-fa13-456c-aef1-a2aa165ea274
-:end:
-#+vindex: modus-themes-variable-pitch-headings
-
-Brief: Toggle the use of proportionately spaced (~variable-pitch~) fonts
-in headings.
-
-Symbol: ~modus-themes-variable-pitch-headings~ (=boolean= type)
-
-Possible values:
-
-1. ~nil~ (default)
-2. ~t~
-
-The default is to use the main font family, which typically is
-monospaced.
-
-With a non-nil value (~t~) apply a proportionately spaced typeface, else
-"variable-pitch", to headings (such as in Org mode).
-
-[[#h:defcf4fc-8fa8-4c29-b12e-7119582cc929][Font configurations for Org and 
others]].
-
-* Advanced customization (do-it-yourself)
+* Advanced customization
 :properties:
 :custom_id: h:f4651d55-8c07-46aa-b52b-bed1e53463bb
 :end:
@@ -1928,7 +1793,7 @@ their own local tweaks and who are willing to deal with 
any possible
 incompatibilities between versioned releases of the themes.  As such,
 they are labelled as "do-it-yourself" or "DIY".
 
-** Per-theme customization settings (DIY)
+** Per-theme customization settings
 :properties:
 :custom_id: h:a897b302-8e10-4a26-beab-3caaee1e1193
 :end:
@@ -1963,7 +1828,7 @@ equivalent the themes provide.
 For a more elaborate design, it is better to inspect the source code of
 ~modus-themes-toggle~ and relevant functions.
 
-** Case-by-case face specs using the themes' palette (DIY)
+** Case-by-case face specs using the themes' palette
 :properties:
 :custom_id: h:1487c631-f4fe-490d-8d58-d72ffa3bd474
 :end:
@@ -2067,7 +1932,7 @@ Take the previous example with the ~cursor~ face:
 (set-face-attribute 'cursor nil :background (modus-themes-color-alts 'blue 
'red))
 #+end_src
 
-** Face specs at scale using the themes' palette (DIY)
+** Face specs at scale using the themes' palette
 :properties:
 :custom_id: h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae
 :end:
@@ -2182,7 +2047,7 @@ the previous section.  Adapt the above example like this:
    ...))
 #+end_src
 
-** Remap face with local value (DIY)
+** Remap face with local value
 :properties:
 :custom_id: h:7a93cb6f-4eca-4d56-a85c-9dcd813d6b0f
 :end:
@@ -2244,7 +2109,7 @@ Perhaps you may wish to generalise those findings in to a 
set of
 functions that also accept an arbitrary face.  We shall leave the
 experimentation up to you.
 
-** Cycle through arbitrary colors (DIY)
+** Cycle through arbitrary colors
 :properties:
 :custom_id: h:77dc4a30-b96a-4849-85a8-fee3c2995305
 :end:
@@ -2408,7 +2273,7 @@ Must become this:
  ...)
 #+end_src
 
-** Override colors (DIY)
+** Override colors
 :properties:
 :custom_id: h:307d95dd-8dbd-4ece-a543-10ae86f155a6
 :end:
@@ -2524,7 +2389,7 @@ that we provide: 
[[#h:02e25930-e71a-493d-828a-8907fc80f874][test color combinati
 ratio between two color values, so it can help in overriding the palette
 (or a subset thereof) without making the end result inaccessible.
 
-** Override color saturation (DIY)
+** Override color saturation
 :properties:
 :custom_id: h:4589acdc-2505-41fc-9f5e-699cfc45ab00
 :end:
@@ -2644,7 +2509,7 @@ inspiration from the ~modus-themes-toggle~ we already 
provide:
     ('modus-vivendi (modus-themes-load-vivendi))))
 #+end_src
 
-** Font configurations for Org and others (DIY)
+** Font configurations for Org and others
 :properties:
 :custom_id: h:defcf4fc-8fa8-4c29-b12e-7119582cc929
 :end:
@@ -2708,9 +2573,9 @@ scale gracefully when using something like the 
~text-scale-adjust~ command
 which only operates on the base font size (i.e. the ~default~ face's
 absolute height).
 
-[[#h:e6c5451f-6763-4be7-8fdb-b4706a422a4c][Note for EWW and Elfeed fonts (SHR 
fonts)]].
+[[#h:e6c5451f-6763-4be7-8fdb-b4706a422a4c][Note for EWW and Elfeed fonts]].
 
-** Configure bold and italic faces (DIY)
+** Configure bold and italic faces
 :properties:
 :custom_id: h:2793a224-2109-4f61-a106-721c57c01375
 :end:
@@ -2805,7 +2670,7 @@ of the themes, which can make it easier to redefine faces 
in bulk).
 
 [[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Face specs at scale using the 
themes' palette]].
 
-** Custom Org user faces (DIY)
+** Custom Org user faces
 :properties:
 :custom_id: h:89f0678d-c5c3-4a57-a526-668b2bb2d7ad
 :end:
@@ -2893,7 +2758,7 @@ it if you plan to control face attributes.
 
 [[#h:02e25930-e71a-493d-828a-8907fc80f874][Check color combinations]].
 
-** Update Org block delimiter fontification (DIY)
+** Update Org block delimiter fontification
 :properties:
 :custom_id: h:f44cc6e3-b0f1-4a5e-8a90-9e48fa557b50
 :end:
@@ -2935,7 +2800,7 @@ Run this function at the post theme load phase, such as 
with the
     (font-lock-flush)))
 #+end_src
 
-** Measure color contrast (DIY)
+** Measure color contrast
 :properties:
 :custom_id: h:02e25930-e71a-493d-828a-8907fc80f874
 :end:
@@ -3008,7 +2873,7 @@ minutia and relevant commentary.
 Such knowledge may prove valuable while attempting to override some of
 the themes' colors: [[#h:307d95dd-8dbd-4ece-a543-10ae86f155a6][Override 
colors]].
 
-** Load theme depending on time of day (DIY)
+** Load theme depending on time of day
 :properties:
 :custom_id: h:1d1ef4b4-8600-4a09-993c-6de3af0ddd26
 :end:
@@ -3035,7 +2900,7 @@ package:
   (circadian-setup))
 #+end_src
 
-** Backdrop for pdf-tools (DIY)
+** Backdrop for pdf-tools
 :properties:
 :custom_id: h:ff69dfe1-29c0-447a-915c-b5ff7c5509cd
 :end:
@@ -3097,7 +2962,7 @@ With those in place, PDFs have a distinct backdrop for 
their page, while
 they automatically switch to their dark mode when ~modus-themes-toggle~ is
 called from inside a buffer whose major-mode is ~pdf-view-mode~.
 
-** Decrease mode line height (DIY)
+** Decrease mode line height
 :properties:
 :custom_id: h:03be4438-dae1-4961-9596-60a307c070b5
 :end:
@@ -3192,7 +3057,7 @@ to be specified as well:
 (add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-custom-faces)
 #+end_src
 
-** A theme-agnostic hook for theme loading (DIY)
+** A theme-agnostic hook for theme loading
 :properties:
 :custom_id: h:86f6906b-f090-46cc-9816-1fe8aeb38776
 :end:
@@ -3241,6 +3106,61 @@ user.  Hence our hesitation to recommend it as part of 
the standard
 setup of the Modus themes (it is generally a good idea to understand
 what the implications are of advising a function).
 
+** Diffs with only the foreground
+:properties:
+:custom_id: h:e2aed9eb-5e1e-45ec-bbd7-bc4faeab3236
+:end:
+#+cindex: Foreground-only diffs
+
+Buffers that show differences between versions of a file or buffer, such
+as in ~diff-mode~ and ~ediff~ always use color-coded background and
+foreground combinations.
+
+[[#h:ea7ac54f-5827-49bd-b09f-62424b3b6427][Option for diff buffer looks]].
+
+User may, however, prefer a style that removes the color-coded
+backgrounds from regular changes while keeping them for word-wise (aka
+"refined") changes---backgrounds for word-wise diffs are helpful in
+context.  To make this happen, one can use the ~modus-themes-with-colors~
+macro ([[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Face specs at scale using 
the themes' palette]]):
+
+#+begin_src emacs-lisp
+(defun my-modus-themes-custom-faces ()
+  (modus-themes-with-colors
+    (custom-set-faces
+     `(modus-themes-diff-added ((,class :background unspecified :foreground 
,green))) ; OR ,blue for deuteranopia
+     `(modus-themes-diff-changed ((,class :background unspecified :foreground 
,yellow)))
+     `(modus-themes-diff-removed ((,class :background unspecified :foreground 
,red)))
+
+     `(modus-themes-diff-refine-added ((,class :background ,bg-diff-added 
:foreground ,fg-diff-added)))
+     ;; `(modus-themes-diff-refine-added ((,class :background 
,bg-diff-added-deuteran :foreground ,fg-diff-added-deuteran)))
+     `(modus-themes-diff-refine-changed ((,class :background ,bg-diff-changed 
:foreground ,fg-diff-changed)))
+     `(modus-themes-diff-refine-removed ((,class :background ,bg-diff-removed 
:foreground ,fg-diff-removed)))
+
+     `(modus-themes-diff-focus-added ((,class :background ,bg-dim :foreground 
,green))) ; OR ,blue for deuteranopia
+     `(modus-themes-diff-focus-changed ((,class :background ,bg-dim 
:foreground ,yellow)))
+     `(modus-themes-diff-focus-removed ((,class :background ,bg-dim 
:foreground ,red)))
+
+     `(modus-themes-diff-heading ((,class :background ,bg-alt :foreground 
,fg-main)))
+
+     `(diff-indicator-added ((,class :foreground ,green))) ; OR ,blue for 
deuteranopia
+     `(diff-indicator-changed ((,class :foreground ,yellow)))
+     `(diff-indicator-removed ((,class :foreground ,red)))
+
+     `(magit-diff-added ((,class :background unspecified :foreground 
,green-faint)))
+     `(magit-diff-changed ((,class :background unspecified :foreground 
,yellow-faint)))
+     `(magit-diff-removed ((,class :background unspecified :foreground 
,red-faint)))
+     `(magit-diff-context-highlight ((,class :background ,bg-dim :foreground 
,fg-dim))))))
+
+;; This is so that the changes persist when switching between
+;; `modus-operandi' and `modus-vivendi'.
+(add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-custom-faces)
+#+end_src
+
+This used to be an optional style of ~modus-themes-diffs~, but has been
+removed since version =2.0.0= to ensure that the accessibility standard
+and aesthetic quality of the themes is not compromised.
+
 * Face coverage
 :properties:
 :custom_id: h:a9c8f29d-7f72-4b54-b74b-ddefe15d6a19
@@ -3264,14 +3184,12 @@ affected face groups.  The items with an appended 
asterisk =*= tend to
 have lots of extensions, so the "full support" may not be 100% true…
 
 + ace-window
-+ ag
 + alert
 + all-the-icons
 + annotate
 + ansi-color
 + anzu
 + apropos
-+ apt-sources-list
 + artbollocks-mode
 + auctex and TeX
 + auto-dim-other-buffers
@@ -3284,7 +3202,6 @@ have lots of extensions, so the "full support" may not be 
100% true…
 + boon
 + bookmark
 + breakpoint (provided by the built-in {{{file(gdb-mi.el)}}} library)
-+ buffer-expose
 + calendar and diary
 + calfw
 + centaur-tabs
@@ -3302,7 +3219,6 @@ have lots of extensions, so the "full support" may not be 
100% true…
 + corfu
 + counsel*
 + counsel-css
-+ counsel-org-capture-string
 + cov
 + cperl-mode
 + css-mode
@@ -3314,7 +3230,6 @@ have lots of extensions, so the "full support" may not be 
100% true…
 + dashboard (emacs-dashboard)
 + deadgrep
 + debbugs
-+ define-word
 + deft
 + dictionary
 + diff-hl
@@ -3327,15 +3242,12 @@ have lots of extensions, so the "full support" may not 
be 100% true…
 + dired-git-info
 + dired-narrow
 + dired-subtree
-+ diredc
 + diredfl
 + diredp (dired+)
-+ disk-usage
 + display-fill-column-indicator-mode
 + doom-modeline
 + dynamic-ruler
 + easy-jekyll
-+ easy-kill
 + ebdb
 + ediff
 + eglot
@@ -3371,7 +3283,6 @@ have lots of extensions, so the "full support" may not be 
100% true…
 + flycheck-posframe
 + flymake
 + flyspell
-+ flyspell-correct
 + flx
 + freeze-it
 + frog-menu
@@ -3383,10 +3294,8 @@ have lots of extensions, so the "full support" may not 
be 100% true…
 + geiser
 + git-commit
 + git-gutter (and variants)
-+ git-lens
 + git-rebase
 + git-timemachine
-+ git-walktree
 + gnus
 + gotest
 + golden-ratio-scroll-screen
@@ -3395,21 +3304,15 @@ have lots of extensions, so the "full support" may not 
be 100% true…
 + helm-switch-shell
 + helm-xref
 + helpful
-+ highlight-blocks
-+ highlight-defined
-+ highlight-escape-sequences (~hes-mode~)
 + highlight-indentation
 + highlight-numbers
 + highlight-parentheses ([[#h:24bab397-dcb2-421d-aa6e-ec5bd622b913][Note on 
highlight-parentheses.el]])
-+ highlight-symbol
-+ highlight-tail
 + highlight-thing
 + hl-defined
 + hl-fill-column
 + hl-line-mode
 + hl-todo
 + hydra
-+ hyperlist
 + ibuffer
 + icomplete
 + icomplete-vertical
@@ -3424,7 +3327,6 @@ have lots of extensions, so the "full support" may not be 
100% true…
 + interaction-log
 + ioccur
 + isearch, occur, etc.
-+ isl (isearch-light)
 + ivy*
 + ivy-posframe
 + jira (org-jira)
@@ -3448,7 +3350,6 @@ have lots of extensions, so the "full support" may not be 
100% true…
 + markup-faces (~adoc-mode~)
 + mentor
 + messages
-+ minibuffer-line
 + minimap
 + mmm-mode
 + mode-line
@@ -3456,15 +3357,12 @@ have lots of extensions, so the "full support" may not 
be 100% true…
 + moody
 + mpdel
 + mu4e
-+ mu4e-conversation
 + multiple-cursors
 + nano-modeline
 + neotree
-+ no-emoji
 + notmuch
 + num3-mode
 + nxml-mode
-+ objed
 + orderless
 + org*
 + org-journal
@@ -3484,14 +3382,11 @@ have lots of extensions, so the "full support" may not 
be 100% true…
 + pandoc-mode
 + paradox
 + paren-face
-+ parrot
 + pass
 + pdf-tools
 + persp-mode
 + perspective
 + phi-grep
-+ phi-search
-+ pkgbuild-mode
 + pomidor
 + popup
 + powerline
@@ -3503,7 +3398,6 @@ have lots of extensions, so the "full support" may not be 
100% true…
 + quick-peek
 + racket-mode
 + rainbow-blocks
-+ rainbow-identifiers
 + rainbow-delimiters
 + rcirc
 + recursion-indicator
@@ -3512,7 +3406,6 @@ have lots of extensions, so the "full support" may not be 
100% true…
 + ripgrep
 + rmail
 + ruler-mode
-+ sallet
 + selectrum
 + selectrum-prescient
 + semantic
@@ -3530,13 +3423,10 @@ have lots of extensions, so the "full support" may not 
be 100% true…
 + solaire
 + spaceline
 + speedbar
-+ spell-fu
-+ spray
 + stripes
 + suggest
 + switch-window
 + swiper
-+ swoop
 + sx
 + symbol-overlay
 + syslog-mode
@@ -3558,13 +3448,11 @@ have lots of extensions, so the "full support" may not 
be 100% true…
 + undo-tree
 + vc (vc-dir.el, vc-hooks.el)
 + vc-annotate (the output of {{{kbd(C-x v g)}}})
-+ vdiff
 + vertico
 + vertico-quick
 + vimish-fold
 + visible-mark
 + visual-regexp
-+ volatile-highlights
 + vterm
 + wcheck-mode
 + web-mode
@@ -3596,20 +3484,36 @@ These do not require any extra styles because they are 
configured to
 inherit from some basic faces or their dependencies which are directly
 supported by the themes.
 
++ ag
++ apt-sources-list
++ buffer-expose
 + bufler
 + counsel-notmuch
++ counsel-org-capture-string
++ define-word
++ disk-usage
++ easy-kill
 + edit-indirect
 + evil-owl
++ flyspell-correct
 + fortran-mode
++ git-walktree
 + goggles
++ highlight-defined
++ highlight-escape-sequences (~hes-mode~)
 + i3wm-config-mode
++ minibuffer-line
++ no-emoji
++ parrot
 + perl-mode
 + php-mode
 + rjsx-mode
 + side-hustle
++ spell-fu
 + swift-mode
 + tab-bar-echo-area
 + tide
++ vdiff
 + vertico-indexed
 + vertico-mouse
 
@@ -3806,7 +3710,7 @@ of the techniques that are discussed at length in the 
various
 "Do-It-Yourself" (DIY) sections, which provide insight into the more
 advanced customization options of the themes.
 
-[[#h:f4651d55-8c07-46aa-b52b-bed1e53463bb][Advanced customization 
(do-it-yourself)]].
+[[#h:f4651d55-8c07-46aa-b52b-bed1e53463bb][Advanced customization]].
 
 In the following example, we are assuming that the user wants to (i)
 re-use color variables provided by the themes, (ii) be able to retain
@@ -4076,8 +3980,8 @@ The ~god-mode~ library does not provide faces that could 
be configured by
 the Modus themes.  Users who would like to get some visual feedback on
 the status of {{{kbd(M-x god-mode)}}} are instead encouraged by upstream to
 set up their own configurations, such as by changing the ~mode-line~ face
-([[#h:f4651d55-8c07-46aa-b52b-bed1e53463bb][Advanced customization 
(do-it-yourself)]]).  This is an adaptation of the
-approach followed in the upstream README:
+([[#h:f4651d55-8c07-46aa-b52b-bed1e53463bb][Advanced customization]]).  This 
is an adaptation of the approach
+followed in the upstream README:
 
 #+begin_src emacs-lisp
 (defun my-god-mode-update-mode-line ()
@@ -4171,7 +4075,7 @@ specifications the webpage provides.
 
 Consult {{{kbd(C-h v shr-use-colors)}}}.
 
-** Note on EWW and Elfeed fonts (SHR fonts)
+** Note on EWW and Elfeed fonts
 :properties:
 :custom_id: h:e6c5451f-6763-4be7-8fdb-b4706a422a4c
 :end:
@@ -4285,11 +4189,11 @@ you've customized any faces.
             "-draw"       "text %X,%Y '%c'"))))
 #+end_src
 
-* Frequently Asked Questions (FAQ)
+* Frequently Asked Questions
 :properties:
 :custom_id: h:b3384767-30d3-4484-ba7f-081729f03a47
 :end:
-#+cindex: Frequently Asked Questions (FAQ)
+#+cindex: Frequently Asked Questions
 
 In this section we provide answers related to some aspects of the Modus
 themes' design and application.
@@ -4620,11 +4524,12 @@ The Modus themes are a collective effort.  Every bit of 
work matters.
 + Author/maintainer :: Protesilaos Stavrou.
 
 + Contributions to code or documentation :: Anders Johansson, Basil
-  L.{{{space()}}} Contovounesios, Carlo Zancanaro, Christian Tietze, Daniel
-  Mendler, Eli Zaretskii, Fritz Grabo, Kévin Le Gouguec, Kostadin Ninev,
-  Madhavan Krishnan, Markus Beppler, Matthew Stevenson, Mauro Aranda,
-  Nicolas De Jaeghere, Philip Kaludercic, Rudolf Adamkovič, Stephen
-  Gildea, Shreyas Ragavan, Stefan Kangas, Vincent Murphy, Xinglu Chen.
+  L.{{{space()}}} Contovounesios, Björn Lindström, Carlo Zancanaro, Christian
+  Tietze, Daniel Mendler, Eli Zaretskii, Fritz Grabo, Illia Ostapyshyn,
+  Kévin Le Gouguec, Kostadin Ninev, Madhavan Krishnan, Markus Beppler,
+  Matthew Stevenson, Mauro Aranda, Nicolas De Jaeghere, Philip
+  Kaludercic, Rudolf Adamkovič, Stephen Gildea, Shreyas Ragavan, Stefan
+  Kangas, Vincent Murphy, Xinglu Chen.
 
 + Ideas and user feedback :: Aaron Jensen, Adam Porter, Adam Spiers,
   Adrian Manea, Alex Griffin, Alex Peitsinis, Alexey Shmalko, Alok
diff --git a/doc/misc/newsticker.texi b/doc/misc/newsticker.texi
index 5d052cc27d..92dba55c01 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--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 2004--2022 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 4ca223d46c..206da82335 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--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 2007--2022 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 e330606015..31d64c3d84 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--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 1996--2022 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -240,7 +240,7 @@ entering Octave commands at the prompt.  The buffer is in 
Inferior
 Octave mode, which is derived from the standard Comint mode, a major
 mode for interacting with an inferior interpreter.  See the
 documentation for @code{comint-mode} for more details, and use
-@kbd{C-h b} to find out about available special keybindings.
+@kbd{C-h b} to find out about available special key bindings.
 
 You can also communicate with an inferior Octave process from within
 files with Octave code (i.e., buffers in Octave mode), using the
diff --git a/doc/misc/org-setup.org b/doc/misc/org-setup.org
index d0392f10a2..88474538e5 100644
--- a/doc/misc/org-setup.org
+++ b/doc/misc/org-setup.org
@@ -1,6 +1,6 @@
 # SETUPFILE for Org manual
 
-# Copyright (C) 2021 Free Software Foundation, Inc.
+# Copyright (C) 2021-2022 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/doc/misc/org.org b/doc/misc/org.org
index df2724dd9c..60af81ea2c 100644
--- a/doc/misc/org.org
+++ b/doc/misc/org.org
@@ -10811,6 +10811,18 @@ To turn off fontification for marked up text, you can 
set
 ~org-fontify-emphasized-text~ to ~nil~.  To narrow down the list of
 available markup syntax, you can customize ~org-emphasis-alist~.
 
+Sometimes, when marked text also contains the marker character itself,
+the result may be unsettling.  For example,
+
+#+begin_example
+/One may expect this whole sentence to be italicized, but the
+following ~user/?variable~ contains =/= character, which effectively
+stops emphasis there./
+#+end_example
+
+You can use zero width space to help Org sorting out the ambiguity.
+See [[*Escape Character]] for more details.
+
 ** Subscripts and Superscripts
 :PROPERTIES:
 :DESCRIPTION: Simple syntax for raising/lowering text.
@@ -15559,7 +15571,7 @@ for usage and configuration details.
 :DESCRIPTION: Fine-tuning the export output.
 :END:
 
-*** Hooks
+*** Export hooks
 :PROPERTIES:
 :UNNUMBERED: notoc
 :END:
@@ -18191,7 +18203,7 @@ expanded anyway.
   #+kindex: C-c C-v f
   Choose a file to tangle.  Bound to {{{kbd(C-c C-v f)}}}.
 
-*** Hooks
+*** Tangle hooks
 :PROPERTIES:
 :UNNUMBERED: notoc
 :END:
@@ -21589,7 +21601,7 @@ that are mentioned in the manual.  For a more complete 
list, use
 
 This manual is for Org version {{{version}}}.
 
-Copyright \copy 2004--2021 Free Software Foundation, Inc.
+Copyright \copy 2004--2022 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 833326c089..80c130fb8e 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--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 1991--2022 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 e796da6da3..304c9c8ec8 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--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 2001, 2003--2022 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 58ca045e78..b18ab2a6b2 100644
--- a/doc/misc/rcirc.texi
+++ b/doc/misc/rcirc.texi
@@ -6,7 +6,7 @@
 @c %**end of header
 
 @copying
-Copyright @copyright{} 2006--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 2006--2022 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -464,7 +464,7 @@ your status as ``being back'' if you do not.  People can 
use the
 @cindex help about irc
 Typical IRC servers implement many more commands.  You can read more
 about the fantastic world of IRC online at
-@uref{http://www.irchelp.org/, the Internet Relay Chat (IRC) help
+@uref{https://www.irchelp.org/, the Internet Relay Chat (IRC) help
 archive}.
 
 @node Configuration
@@ -933,6 +933,11 @@ how to include the date in the time stamp:
 (setq rcirc-time-format "%Y-%m-%d %H:%M ")
 @end example
 
+@findex rcirc-when
+If you don't wish to use verbose time formatting all the time, you can
+use the @code{rcirc-when} command to display a complete timestamp for
+the message at point.
+
 @node Defining a new command
 @section Defining a new command
 @cindex defining commands
diff --git a/doc/misc/reftex.texi b/doc/misc/reftex.texi
index 8bde241e18..c3b7b0b0f6 100644
--- a/doc/misc/reftex.texi
+++ b/doc/misc/reftex.texi
@@ -46,7 +46,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--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 1997--2022 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 91e67a8798..9d1fe545d4 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--2021 Free Software
+Copyright @copyright{} 2001, 2004--2005, 2007--2022 Free Software
 Foundation, Inc.
 
 @quotation
@@ -313,7 +313,7 @@ Save (if it is modified) and bury the current buffer.
 @node Keystrokes
 @chapter Keystroke Reference
 
-@file{remember.el} defines the following keybindings by default:
+@file{remember.el} defines the following key bindings by default:
 
 @table @kbd
 
diff --git a/doc/misc/sasl.texi b/doc/misc/sasl.texi
index 847ad5ed76..4ead5a5563 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--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 2000, 2004--2022 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 3f5b5917a0..3f6dcd022a 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--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 1993, 2001--2022 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 70a19484e8..3141ab7c69 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--2021 Free Software Foundation,
+@c Copyright (C) 1999--2005, 2007, 2009--2022 Free Software Foundation,
 @c Inc.
 @c See file semantic.texi for copying conditions.
 
@@ -145,7 +145,7 @@ this means moving to the parent of the current tag.
 @item C-c , @key{SPC}
 Display a list of possible completions for the symbol at point
 (@code{semantic-complete-analyze-inline}).  This also activates a
-special set of keybindings for choosing a completion: @key{RET}
+special set of key bindings for choosing a completion: @key{RET}
 accepts the current completion, @kbd{M-n} and @kbd{M-p} cycle through
 possible completions, @key{TAB} completes as far as possible and then
 cycles, and @kbd{C-g} or any other key aborts the completion.
@@ -655,7 +655,7 @@ usual summary if the text at point has one of these faces.
 
 Semantic Idle Completions mode is a minor mode for performing
 @dfn{code completions} during idle time.  The completions are
-displayed inline, with keybindings that allow you to cycle through
+displayed inline, with key bindings that allow you to cycle through
 different alternatives.
 
 Semantic Idle Completions mode performs completion based on the
@@ -681,7 +681,7 @@ besselj [1 of 6 matches]
 @end example
 
 @noindent
-While the completion is being displayed, the following keybindings
+While the completion is being displayed, the following key bindings
 take effect:
 
 @table @kbd
@@ -785,7 +785,7 @@ Most of the other commands documented in this section call
 This command is bound to @kbd{C-c , @key{SPC}} when Semantic mode is
 enabled (@pxref{Semantic mode user commands}).  It displays a list of
 possible completions for the symbol at point, and activates a special
-set of keybindings for choosing a completion.
+set of key bindings for choosing a completion.
 
 You can type @key{RET} to accept the current completion, @kbd{M-n} and
 @kbd{M-p} to cycle through the possible completions, @key{TAB} to
@@ -1122,7 +1122,7 @@ that @code{grep} is much slower than the others.
 
 The commands to display symbol references are @kbd{C-c , g}
 (@code{semantic-symref-symbol} and @kbd{C-c , G}
-(@code{semantic-symref}).  These keybindings are available whenever
+(@code{semantic-symref}).  These key bindings are available whenever
 Semantic mode is enabled (@pxref{Semantic mode user commands}).
 
 @deffn Command semantic-symref-symbol sym
diff --git a/doc/misc/semantic.texi b/doc/misc/semantic.texi
index 3c4f2f0c0e..eb5c7e0e67 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--2005, 2007, 2009--2021 Free Software
+Copyright @copyright{} 1999--2005, 2007, 2009--2022 Free Software
 Foundation, Inc.
 
 @quotation
diff --git a/doc/misc/ses.texi b/doc/misc/ses.texi
index b529f0b836..0acb7bf3f1 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--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 2002--2022 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 c30409fc32..df03dd0144 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--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 2001--2022 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 f5d567533b..2e0381138f 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--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 2003--2022 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 70d4b05416..13b709bfc8 100644
--- a/doc/misc/speedbar.texi
+++ b/doc/misc/speedbar.texi
@@ -5,7 +5,7 @@
 @syncodeindex fn cp
 
 @copying
-Copyright @copyright{} 1999--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 1999--2022 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -1218,4 +1218,3 @@ Two good values are @code{nil} and @code{statictag}.
 
 @bye
 @c  LocalWords:  speedbar's xref slowbar kbd subsubsection
-@c  LocalWords:  keybindings
diff --git a/doc/misc/srecode.texi b/doc/misc/srecode.texi
index 1f7473c151..a0cbf7e33f 100644
--- a/doc/misc/srecode.texi
+++ b/doc/misc/srecode.texi
@@ -16,7 +16,7 @@
 @c %**end of header
 
 @copying
-Copyright @copyright{} 2007--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 2007--2022 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -293,14 +293,14 @@ If the variable @code{srecode-takeover-INS-key} is set, 
then the key
 The most important key is bound to @code{srecode-insert} which is
 @kbd{C-c / /}, or @kbd{@key{INSERT} @key{INSERT}}.  @ref{Quick Start}.
 
-Major keybindings are:
+Major key bindings are:
 
 @table @kbd
 @item C-c / /
 Insert a template whose name is typed into the minibuffer.
 @item C-c / <lower case letter>
 Reserved for direct binding of simple templates to keys using a
-keybinding command in the template file.
+key binding command in the template file.
 @item C-c / <upper case letter>
 Reserved for template applications (Such as comment or get/set inserter.)
 @item C-c / E
@@ -1070,9 +1070,9 @@ Here is an example of wrapping a semantic tag in a 
compound value:
   "Wrap up a collection of semantic tag information.
 This class will be used to derive dictionary values.")
 
-(defmethod srecode-compound-toString((cp srecode-semantic-tag)
-                                     function
-                                     dictionary)
+(cl-defmethod srecode-compound-toString ((cp srecode-semantic-tag)
+                                         function
+                                         dictionary)
   "Convert the compound dictionary value CP to a string.
 If FUNCTION is non-nil, then FUNCTION is somehow applied to an
 aspect of the compound value."
diff --git a/doc/misc/texinfo.tex b/doc/misc/texinfo.tex
index e48383defc..58b6abee78 100644
--- a/doc/misc/texinfo.tex
+++ b/doc/misc/texinfo.tex
@@ -3,7 +3,7 @@
 % Load plain if necessary, i.e., if running under initex.
 \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
 %
-\def\texinfoversion{2021-04-25.21}
+\def\texinfoversion{2022-01-02.12}
 %
 % Copyright 1985, 1986, 1988, 1990-2021 Free Software Foundation, Inc.
 %
@@ -3193,14 +3193,9 @@ end
 %    \kern-0.4pt\hrule}%
 %  \kern-.06em\raise0.4pt\hbox{\angleright}}}}
 
-% definition of @key with no lozenge.  If the current font is already
-% monospace, don't change it; that way, we respect @kbdinputstyle.  But
-% if it isn't monospace, then use \tt.
+% definition of @key with no lozenge.
 %
-\def\key#1{{\setregularquotes
-  \nohyphenation
-  \ifmonospace\else\tt\fi
-  #1}\null}
+\def\key#1{{\setregularquotes \nohyphenation \tt #1}\null}
 
 % @clicksequence{File @click{} Open ...}
 \def\clicksequence#1{\begingroup #1\endgroup}
@@ -3614,6 +3609,9 @@ $$%
 \def\quotedblbase{{\ecfont \char"12}}
 \def\quotesinglbase{{\ecfont \char"0D}}
 %
+\def\L{{\ecfont \char"8A}} % L with stroke
+\def\l{{\ecfont \char"AA}} % l with stroke
+%
 % This positioning is not perfect (see the ogonek LaTeX package), but
 % we have the precomposed glyphs for the most common cases.  We put the
 % tests to use those glyphs in the single \ogonek macro so we have fewer
@@ -7592,6 +7590,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 %
 \def\printdefunline#1#2{%
   \begingroup
+    \plainfrenchspacing
     % call \deffnheader:
     #1#2 \endheader
     % common ending:
@@ -9402,7 +9401,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   \fi\fi
   %
   \ifimagevmode
-    \nobreak\medskip
+    \medskip
     % Usually we'll have text after the image which will insert
     % \parskip glue, so insert it here too to equalize the space
     % above and below.
@@ -11244,23 +11243,6 @@ directory should work if nowhere else does.}
   \defbodyindent = .5cm
 }}
 
-% Use @smallerbook to reset parameters for 6x9 trim size.
-% (Just testing, parameters still in flux.)
-\def\smallerbook{{\globaldefs = 1
-  \parskip = 1.5pt plus 1pt
-  \textleading = 12pt
-  %
-  \internalpagesizes{7.4in}{4.8in}%
-                    {-.2in}{-.4in}%
-                    {0pt}{14pt}%
-                    {9in}{6in}%
-  %
-  \lispnarrowing = 0.25in
-  \tolerance = 700
-  \contentsrightmargin = 0pt
-  \defbodyindent = .4cm
-}}
-
 % Use @afourpaper to print on European A4 paper.
 \def\afourpaper{{\globaldefs = 1
   \parskip = 3pt plus 2pt minus 1pt
@@ -11599,11 +11581,9 @@ directory should work if nowhere else does.}
 @setregularquotes
 
 @c Local variables:
-@c eval: (add-hook 'before-save-hook 'time-stamp)
+@c eval: (add-hook 'before-save-hook 'time-stamp nil t)
+@c time-stamp-pattern: "texinfoversion{%Y-%02m-%02d.%02H}"
 @c page-delimiter: "^\\\\message\\|emacs-page"
-@c time-stamp-start: "def\\\\texinfoversion{"
-@c time-stamp-format: "%:y-%02m-%02d.%02H"
-@c time-stamp-end: "}"
 @c End:
 
 @c vim:sw=2:
diff --git a/doc/misc/todo-mode.texi b/doc/misc/todo-mode.texi
index b3ea652a7e..85603cf593 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--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 2013--2022 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 1f6d4ad626..3c15955860 100644
--- a/doc/misc/tramp.texi
+++ b/doc/misc/tramp.texi
@@ -12,7 +12,7 @@
 @footnotestyle end
 
 @copying
-Copyright @copyright{} 1999--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 1999--2022 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -3389,8 +3389,8 @@ indication that the process has been interrupted, and 
returns a
 corresponding string.
 
 This remote process handling does not apply to @acronym{GVFS}
-(@pxref{GVFS-based methods}) because the remote file system is mounted on
-the local host and @value{tramp} accesses it by changing the
+(@pxref{GVFS-based methods}) because the remote file system is mounted
+on the local host and @value{tramp} accesses it by changing the
 @code{default-directory}.
 
 @value{tramp} starts a remote process when a command is executed in a
@@ -4059,6 +4059,11 @@ CPIO archives
 @cindex @file{cpio} file archive suffix
 @cindex file archive suffix @file{cpio}
 
+@item @samp{.crate} ---
+Cargo (Rust) packages
+@cindex @file{crate} file archive suffix
+@cindex file archive suffix @file{crate}
+
 @item @samp{.deb} ---
 Debian packages
 @cindex @file{deb} file archive suffix
@@ -4226,7 +4231,7 @@ It is even possible to access file archives in file 
archives, as
 (progn
   (url-handler-mode 1)
   (find-file
-   
"http://ftp.debian.org/debian/pool/main/c/coreutils/coreutils_8.28-1_amd64.deb/control.tar.gz/control";))
+   
"https://ftp.debian.org/debian/pool/main/c/coreutils/coreutils_8.28-1_amd64.deb/control.tar.gz/control";))
 @end group
 @end lisp
 
diff --git a/doc/misc/trampver.texi b/doc/misc/trampver.texi
index 89c478035c..9e1be52cd3 100644
--- a/doc/misc/trampver.texi
+++ b/doc/misc/trampver.texi
@@ -2,7 +2,7 @@
 @c texi/trampver.texi.  Generated from trampver.texi.in by configure.
 
 @c This is part of the Emacs manual.
-@c Copyright (C) 2003--2021 Free Software Foundation, Inc.
+@c Copyright (C) 2003--2022 Free Software Foundation, Inc.
 @c See file doclicense.texi for copying conditions.
 
 @c In the Tramp GIT, the version numbers are auto-frobbed from
diff --git a/doc/misc/url.texi b/doc/misc/url.texi
index 8f15e11007..a9d06d7f5b 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--2021 Free Software
+Copyright @copyright{} 1993--1999, 2002, 2004--2022 Free Software
 Foundation, Inc.
 
 @quotation
@@ -90,7 +90,7 @@ can be accessed (usually over a network) in a specific way.
 
 @example
 ftp://ftp.is.co.za/rfc/rfc1808.txt
-http://www.ietf.org/rfc/rfc2396.txt
+https://www.ietf.org/rfc/rfc2396.txt
 ldap://[2001:db8::7]/c=GB?objectClass?one
 mailto:John.Doe@@example.com
 news:comp.infosystems.www.servers.unix
@@ -708,7 +708,7 @@ Well-known ports are used if the URL does not specify a 
port.
 @cindex rcirc
 
   The @code{irc} scheme is defined in the Internet Draft at
-@url{http://www.w3.org/Addressing/draft-mirashi-url-irc-01.txt} (which
+@url{https://www.w3.org/Addressing/draft-mirashi-url-irc-01.txt} (which
 was never approved as an RFC).  Such URLs have the form
 
 @example
@@ -1181,7 +1181,7 @@ opened by the URL library.
 @c machines off the local network.  This is characterized by being able
 @c to reach someplace with a raw ip number, but not its hostname
 @c (@url{http://129.79.254.191/} works, but
-@c @url{http://www.cs.indiana.edu/} doesn't).  This used to happen on
+@c @url{https://www.cs.indiana.edu/} doesn't).  This used to happen on
 @c SunOS4 and Ultrix, but is now probably now rare.  If Emacs can't be
 @c rebuilt linked against the resolver library, it can use the external
 @c @command{nslookup} program instead.
diff --git a/doc/misc/vhdl-mode.texi b/doc/misc/vhdl-mode.texi
index 7022582db5..7d451c71bd 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--2021 Free Software
+Copyright @copyright{} 1995--2008, 2010, 2012, 2015--2022 Free Software
 Foundation, Inc.
 
 @quotation
@@ -928,7 +928,7 @@ If you want to customize indentation, here you go:
   (setq tab-width 8
         ;; this will make sure spaces are used instead of tabs
         indent-tabs-mode nil)
-  ;; keybindings for VHDL are put in vhdl-mode-map
+  ;; key bindings for VHDL are put in vhdl-mode-map
   (define-key vhdl-mode-map "\C-m" 'newline-and-indent)
   )
 
diff --git a/doc/misc/vip.texi b/doc/misc/vip.texi
index 92c76ad251..df65d70cb1 100644
--- a/doc/misc/vip.texi
+++ b/doc/misc/vip.texi
@@ -4,7 +4,7 @@
 @include docstyle.texi
 
 @copying
-Copyright @copyright{} 1987, 2001--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 1987, 2001--2022 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 e127f62bb5..b0deb31d10 100644
--- a/doc/misc/viper.texi
+++ b/doc/misc/viper.texi
@@ -8,7 +8,7 @@
 @include docstyle.texi
 
 @copying
-Copyright @copyright{} 1995--1997, 2001--2021 Free Software Foundation,
+Copyright @copyright{} 1995--1997, 2001--2022 Free Software Foundation,
 Inc.
 
 @quotation
diff --git a/doc/misc/widget.texi b/doc/misc/widget.texi
index 7fd9212d71..c84b49a038 100644
--- a/doc/misc/widget.texi
+++ b/doc/misc/widget.texi
@@ -9,7 +9,7 @@
 @c %**end of header
 
 @copying
-Copyright @copyright{} 2000--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 2000--2022 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 c0bb7b10a4..07240e5dd3 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--2021
+Copyright @copyright{} 1988--1993, 1995, 1998--2004, 2007, 2012--2022
 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 33b3a33f0f..d300cd3a3d 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--2021 Free Software Foundation, Inc.
+Copyright @copyright{} 2001--2022 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/etc/AUTHORS b/etc/AUTHORS
index b599809e3e..0029a4b97f 100644
--- a/etc/AUTHORS
+++ b/etc/AUTHORS
@@ -9,8 +9,9 @@ Aaron Ecay: changed ob-R.el ob-core.el org-src.el ox-latex.el 
nsterm.m
   ob-awk.el ob-exp.el ob-python.el ob-tangle.el org-bibtex.el org-id.el
   org.el org.texi package.el paren.el
 
-Aaron Jensen: changed frameset.el nsterm.m Info.plist.in flyspell.el
-  mouse.el server.el systhread.c w32term.c xdisp.c xterm.c
+Aaron Jensen: changed frameset.el nsterm.m xdisp-tests.el xdisp.c
+  Info.plist.in flyspell.el mouse.el server.el systhread.c w32term.c
+  xterm.c
 
 Aaron Larson: co-wrote bibtex.el
 
@@ -18,7 +19,7 @@ Aaron S. Hawley: wrote lisp-tests.el undo-tests.el
 and changed simple.el files.texi isearch.el morse.el sgml-mode.el
   tar-mode.el textmodes/table.el thingatpt.el add-log.el autoinsert.el
   building.texi calc.el cc-fonts.el comint.el compare-w.el custom.texi
-  diff.el edebug.el etags.el ffap.el files.el and 31 other files
+  diff.el edebug.el etags.el ffap.el files.el and 30 other files
 
 Abdó Roig-Maranges: changed org.el org-agenda.el ox-html.el ox-odt.el
 
@@ -37,11 +38,14 @@ Adam Gołębiowski: changed lib-src/Makefile.in
 Adam Hupp: changed emacs.py emacs2.py emacs3.py gud.el
   progmodes/python.el
 
+Adam Porter: changed tab-line.el cl-macs.el map.el control.texi
+  map-tests.el pcase-tests.el tab-bar.el
+
 Adam Sjøgren: changed mml2015.el shr.el spam.el xterm.c blink.xpm
   braindamaged.xpm cry.xpm dead.xpm evil.xpm forced.xpm frown.xpm
   gnus-sum.el grin.xpm gtkutil.c indifferent.xpm message.el
   reverse-smile.xpm sad.xpm smile.xpm wry.xpm gnus-html.el
-  and 7 other files
+  and 10 other files
 
 Adam Sokolnicki: changed ruby-mode.el
 
@@ -70,7 +74,7 @@ and changed nsterm.m nsfns.m nsfont.m nsterm.h nsmenu.m 
configure.ac
 
 Agustín Martín: changed ispell.el flyspell.el fixit.texi
 
-Ahmed Khanzada: changed battery.el
+Ahmed Khanzada: changed battery.el nsterm.m
 
 Aidan Gauland: wrote em-tramp.el
 and changed eshell.texi em-term.el em-unix.el erc-match.el em-cmpl.el
@@ -85,6 +89,8 @@ and changed cc-mode.el perl-mode.el
 
 Akinori Musha: changed ruby-mode.el Makefile.in sieve-mode.el
 
+Akira Kyle: changed eww.el process.c xwidget.c
+
 Aki Vehtari: changed bibtex.el gnus-art.el gnus-score.el gnus-sum.el
   nnmail.el tar-mode.el
 
@@ -97,25 +103,26 @@ Alakazam Petrofsky: changed hanoi.el
 Alan Mackenzie: wrote cc-awk.el
 and co-wrote cc-align.el cc-cmds.el cc-defs.el cc-engine.el cc-fonts.el
   cc-langs.el cc-mode.el cc-styles.el cc-vars.el
-and changed cc-mode.texi bytecomp.el display.texi follow.el subr.el
-  edebug.el progmodes/compile.el programs.texi syntax.texi modes.texi
-  font-lock.el isearch.el text.texi help.el ispell.el lread.c syntax.c
-  windows.texi .dir-locals.el control.texi cus-start.el
-  and 148 other files
+and changed cc-mode.texi minibuf.c bytecomp.el edebug.el follow.el
+  window.c display.texi subr.el syntax.texi progmodes/compile.el
+  programs.texi keyboard.c lisp.h modes.texi window.el windows.texi
+  cus-start.el eval.c font-lock.el isearch.el newcomment.el
+  and 166 other files
 
 Alan Modra: changed unexelf.c
 
-Alan Schmitt: changed gnus-sum.el nnimap.el ob-ocaml.el org-faces.el
+Alan Schmitt: co-wrote ox-koma-letter.el
+and changed gnus-sum.el nnimap.el ob-ocaml.el org-faces.el
 
 Alan Shutko: changed diary-lib.el calendar.el bindings.el cal-hebrew.el
   easy-mmode.el gnus-sum.el ibuf-ext.el ibuffer.el lunar.el macros.el
   solar.el
 
 Alan Third: wrote dabbrev-tests.el image-transforms-tests.el
-and changed nsterm.m nsterm.h nsfns.m nsmenu.m ns-win.el nsimage.m
-  image.c macfont.m configure.ac frame.el xdisp.c macos.texi display.texi
-  image.el xterm.c Info.plist.in conf_post.h dispextern.h frame.c frame.h
-  frames.texi and 21 other files
+and changed nsterm.m nsterm.h nsfns.m image.c nsmenu.m configure.ac
+  nsimage.m ns-win.el macfont.m dispextern.h frame.el nsfont.m
+  display.texi xdisp.c frame.c frame.h macos.texi xterm.c .gitlab-ci.yml
+  Makefile.in emacs.c and 39 other files
 
 Alastair Burt: changed gnus-art.el smiley.el
 
@@ -125,25 +132,104 @@ and changed sieve.el gnus-msg.el gnus.texi 
mail/sieve-manage.el
 
 Albert L. Ting: changed gnus-group.el mail-hist.el
 
+Aleksandr Vityazev: changed tramp-compat.el
+
 Aleksei Gusev: changed progmodes/compile.el
 
-Alexandru Harsanyi: changed soap-client.el soap-inspect.el emacs3.py
-  vc-hooks.el vc.el xml.el
+Alexander Adolf: wrote eudcb-macos-contacts.el
+and changed eudc.texi
+
+Alexander Becher: changed vc-annotate.el
+
+Alexander Gramiak: changed w32term.c xterm.c nsterm.m dispextern.h
+  xdisp.c frame.c image.c nsgui.h w32gui.h xfns.c frame.el termhooks.h
+  w32fns.c w32term.h faces.el nsterm.h xfaces.c xterm.h frame.h xfont.c
+  configure.ac and 69 other files
+
+Alexander Haeckel: changed getset.el
+
+Alexander Klimov: changed files.el calc-graph.el files.texi man.el rx.el
+  sendmail.el
+
+Alexander Kreuzer: changed nnrss.el
+
+Alexander Kuleshov: changed dns-mode.el files.texi image-mode.el
+  keyboard.c ld-script.el xdisp.c
+
+Alexander L. Belikoff: wrote erc.el
+
+Alexander Miller: changed dispextern.h faces.el frame.c frame.h
+  frames.texi nsfns.m nsterm.m w32fns.c xfaces.c xfns.c xterm.c
+
+Alexander Pohoyda: co-wrote mail/rmailmm.el
+and changed rmailsum.el man.el rmail.el sendmail.el
+
+Alexander Shopov: changed code-pages.el
+
+Alexander Vorobiev: changed org-compat.el
+
+Alexander Zhuckov: changed ebrowse.c
+
+Alexandre Adolphe: changed cus-face.el dispextern.h display.texi nsfont.m
+  nsterm.m w32term.c xdisp.c xfaces.c xterm.c
+
+Alexandre Duret-Lutz: changed nnmaildir.el
+
+Alexandre Garreau: changed message.el
+
+Alexandre Julliard: wrote vc-git.el
+and changed vc.el ewoc.el
+
+Alexandre Oliva: wrote gnus-mlspl.el
+and changed unexelf.c emacs-regex.c format.el iris4d.h iris5d.h unexsgi.c
+
+Alexandre Veyrenc: changed fr-refcard.tex
+
+Alexandru Harsanyi: wrote soap-client.el soap-inspect.el
+and changed emacs3.py vc-hooks.el vc.el xml.el
+
+Alexandr Vityazev: changed shortdoc.el
+
+Alex Bochannek: changed gnus.texi gnus-sum.el gnus-score.el gnus-topic.el
+  gnus-util.el gnus-fun.el gnus-group.el gnus.el ange-ftp.el gnus-art.el
+  nnimap.el tramp-sh.el
+
+Alex Coventry: changed files.el
+
+Alex Dunn: changed subr-tests.el subr.el
+
+Alexei Khlebnikov: changed autorevert.el vc-git.el
+
+Alex Kosorukoff: changed org-capture.el
+
+Alex Mcgrath: changed rcirc.el
+
+Alex Murray: changed erc-desktop-notifications.el network-stream.el
 
-Alex Gramiak: wrote ansi-color.el conf-mode-tests.el cus-theme.el
-  erc-compat.el erc-hecomplete.el erc-join.el erc-lang.el erc-ring.el
-  erc.el gnus-mlspl.el master.el soap-client.el soap-inspect.el
-  spam-stat.el sql.el vc-git.el which-func.el
+Alex Ott: changed TUTORIAL.ru ede/files.el ru-refcard.tex base.el
+  cedet-files.el cpp-root.el ede.el ede/generic.el idle.el ispell.el
+  semantic/format.el
+
+Alex Reed: changed verilog-mode.el
+
+Alex Rezinsky: wrote which-func.el
+
+Alex Schroeder: wrote ansi-color.el cus-theme.el erc-compat.el
+  erc-hecomplete.el erc-join.el erc-lang.el erc-ring.el master.el
+  spam-stat.el sql.el
 and co-wrote longlines.el mail/rmailmm.el
-and changed erc-track.el erc-button.el w32term.c xterm.c erc-stamp.el
-  nsterm.m xdisp.c dispextern.h frame.c image.c nsgui.h w32gui.h xfns.c
-  erc-match.el frame.el termhooks.h w32fns.c Makefile TUTORIAL.ru
-  erc-autoaway.el erc-nickserv.el and 215 other files
+and changed erc.el erc-track.el erc-button.el erc-stamp.el erc-match.el
+  erc-autoaway.el erc-nickserv.el rcirc.texi Makefile erc-autojoin.el
+  erc-fill.el erc-pcomplete.el erc-complete.el erc-ibuffer.el
+  erc-members.el rmail.el comint.el custom.el erc-bbdb.el erc-chess.el
+  erc-ezbounce.el and 35 other files
+
+Alex Shinn: changed files.el
 
 Alfred Correira: changed generic-x.el
 
 Alfred M. Szmidt: changed rmail.el vc-svn.el html2text.el openbsd.h
-  progmodes/compile.el rmailsum.el
+  progmodes/compile.el rmailsum.el vc.el
 
 Alfredo Finelli: changed TUTORIAL.it
 
@@ -151,10 +237,10 @@ Ali Bahrami: changed configure configure.ac sol2-10.h
 
 Alin C. Soare: changed lisp-mode.el hexl.el
 
-Allen Li: changed abbrev.el abbrev-tests.el abbrevs.texi sending.texi
-  autoload.el bookmark.el comint.el dired-x.el misc.texi nsm.el
-  progmodes/compile.el ring-tests.el ring.el sequences.texi subr.el
-  xref.el
+Allen Li: changed abbrev.el abbrev-tests.el abbrevs.texi recentf.el
+  sending.texi autoload.el bookmark.el comint.el dired-x.el gnus-group.el
+  misc.texi nsm.el progmodes/compile.el ring-tests.el ring.el
+  sequences.texi subr.el xref.el
 
 Allen S. Rout: changed org-capture.el
 
@@ -166,14 +252,18 @@ Alp Aker: changed nsfont.m nsterm.m buff-menu.el nsfns.m 
nsmenu.m
 
 Álvar Jesús Ibeas Martín: changed TUTORIAL.es emacs-lisp-intro.texi
 
+Alyssa Ross: changed progmodes/compile.el simple.el
+
 Ami Fischman: changed bindings.el calendar.el diary-lib.el print.c
   savehist.el vc-git.el
 
-Amin Bandali: changed erc.el erc-button.el erc-desktop-notifications.el
-  erc-track.el erc-autoaway.el erc-compat.el erc-fill.el erc-ibuffer.el
-  erc-imenu.el erc-join.el erc-lang.el erc-list.el erc-log.el
-  erc-match.el erc-notify.el erc-pcomplete.el erc-replace.el erc-ring.el
-  erc-services.el erc-sound.el erc-speedbar.el and 5 other files
+Amin Bandali: changed erc.el erc-backend.el erc-button.el erc-compat.el
+  erc-track.el erc-dcc.el erc-desktop-notifications.el erc-match.el
+  erc-services.el erc-speedbar.el erc-status-sidebar.el erc.texi
+  erc-autoaway.el erc-fill.el erc-goodies.el erc-ibuffer.el erc-imenu.el
+  erc-join.el erc-lang.el erc-list.el erc-log.el and 11 other files
+
+Amos Bird: changed xfns.c
 
 Anand Mitra: changed gnus-sum.el
 
@@ -183,12 +273,19 @@ Anders Lindgren: wrote autorevert.el cwarn.el 
faceup-test-basics.el
   faceup-test-files.el faceup.el follow.el
 and changed nsterm.m nsfns.m nsmenu.m nsterm.h font-lock.el nsimage.m
   README etags.c term.el window.el Info.plist.in compile.el diff-mode.el
-  ert.el faceup-test-mode.el faceup-test-this-file-directory.el loadup.el
-  lread.c ns-win.el nsfont.m test1.txt and 3 other files
+  ert.el faceup-test-mode.el faceup-test-this-file-directory.el
+  lisp-mode.el loadup.el lread.c ns-win.el nsfont.m and 4 other files
 
 Anders Waldenborg: changed emacsclient.c
 
-Andrea Corallo: changed map-tests.el map.el
+Andrea Corallo: wrote comp-cstr-tests.el comp-cstr.el comp-tests.el
+  comp.el
+and changed comp.c pdumper.c lread.c bytecomp.el comp.h configure.ac
+  lisp.h startup.el loadup.el alloc.c data.c emacs.c .gitlab-ci.yml
+  nadvice.el cl-macs.el advice.el help.el lisp/Makefile.in package.el
+  Makefile.in comp-test-funcs.el and 62 other files
+
+André A. Gomes: changed ispell.el
 
 Andrea Rossetti: changed ruler-mode.el
 
@@ -203,11 +300,11 @@ Andreas Büsching: changed emacsclient.c
 Andreas Fuchs: wrote erc-ezbounce.el erc-match.el erc-replace.el
   erc-truncate.el
 and co-wrote erc-fill.el
-and changed erc.el erc-bbdb.el erc-button.el erc-log.el erc-stamp.el
-  erc-autoaway.el erc-autojoin.el erc-dcc.el erc-imenu.el erc-list.el
-  erc-members.el erc-menu.el erc-netsplit.el erc-notify.el erc-ring.el
-  erc-speedbar.el erc-track.el erc-xdcc.el gnus-registry.el mml-sec.el
-  mml2015.el
+and changed erc.el erc-bbdb.el erc-button.el erc-log.el comp.c
+  erc-stamp.el comp.el erc-autoaway.el erc-autojoin.el erc-dcc.el
+  erc-imenu.el erc-list.el erc-members.el erc-menu.el erc-netsplit.el
+  erc-notify.el erc-ring.el erc-speedbar.el erc-track.el erc-xdcc.el
+  gnus-registry.el and 3 other files
 
 Andreas Jaeger: changed gnus-msg.el gnus-start.el gnus-xmas.el
   nnfolder.el nnml.el
@@ -230,8 +327,8 @@ Andreas Rottmann: changed emacsclient.1 emacsclient.c 
misc.texi server.el
 
 Andreas Schwab: changed configure.ac lisp.h xdisp.c process.c alloc.c
   coding.c Makefile.in files.el fileio.c keyboard.c lread.c xterm.c fns.c
-  editfns.c emacs.c src/Makefile.in print.c eval.c font.c xfns.c sysdep.c
-  and 651 other files
+  src/Makefile.in editfns.c emacs.c print.c eval.c font.c xfns.c sysdep.c
+  and 656 other files
 
 Andreas Seltenreich: changed nnweb.el gnus.texi message.el gnus-sum.el
   gnus.el nnslashdot.el gnus-srvr.el gnus-util.el mm-url.el mm-uu.el
@@ -251,23 +348,27 @@ Andre Spiegel: changed vc.el vc-hooks.el vc-cvs.el 
vc-rcs.el vc-sccs.el
 Andre Srinivasan: changed gnus-group.el gnus-sum.el gnus.texi message.el
   mm-decode.el mml.el nnmail.el
 
+Andrew Barbarello: wrote erc-status-sidebar.el
+
 Andrew Beals: changed spook.lines
 
+Andrew Burgess: changed cua-base.el
+
 Andrew Choi: changed macterm.c darwin.h mac-win.el sysdep.c emacs.c mac.c
   macfns.c fontset.c frame.c keyboard.c xfaces.c dispextern.h macmenu.c
   unexmacosx.c configure.ac frame.h macterm.h titdic-cnv.el xdisp.c
   alloc.c callproc.c and 27 other files
 
-Andrew Cohen: wrote spam-wash.el
-and changed nnir.el gnus-sum.el nnimap.el gnus-msg.el gnus.texi
-  gnus-group.el gnus-int.el dns.el gnus-art.el gnus-registry.el
-  gnus-srvr.el gnus.el nnheader.el nnspool.el
-
 Andrew Csillag: wrote m4-mode.el
 
 Andrew Eggenberger: changed cl-extra.el seq.el
 
-Andrew G Cohen: changed gnus-sum.el gnus-art.el
+Andrew G Cohen: wrote nnselect.el spam-wash.el
+and changed nnir.el gnus-sum.el nnimap.el gnus-msg.el gnus-group.el
+  gnus.texi gnus-int.el gnus-art.el gnus-cache.el gnus.el nnheader.el
+  nnspool.el auth-source.el dns.el gnus-agent.el gnus-cloud.el
+  gnus-registry.el gnus-srvr.el gnus-start.el nndiary.el nnfolder.el
+  and 5 other files
 
 Andrew Hall: changed paren.el
 
@@ -289,6 +390,8 @@ Andrew Schein: changed sql.el
 
 Andrew Schwartzmeyer: changed subr-tests.el subr.el
 
+Andrew Whatson: changed comp.el
+
 Andrew W. Nosenko: changed tramp.el
 
 Andrew Zhilin: changed emacs22.png emacs22.ico
@@ -299,10 +402,9 @@ Andrey Slusar: changed gnus-async.el gnus.el
 
 Andrey Zhdanov: changed gud.el
 
-Andrii Kolomoiets: changed vc-hg.el progmodes/python.el vc-git.el vc.el
-  maintaining.texi vc-svn.el
-
-Andrzej Lichnerowicz: wrote ob-io.el
+Andrii Kolomoiets: changed vc-hg.el progmodes/python.el vc.el vc-dir.el
+  vc-git.el cyril-util.el ewoc.el frame.c frame.el maintaining.texi
+  ns-win.el nsterm.h nsterm.m project.el vc-dispatcher.el vc-svn.el
 
 Andrzej P: changed gdb-mi.el
 
@@ -332,16 +434,18 @@ Ansgar Burchardt: changed latin-ltx.el
 
 Antoine Beaupré: changed vc-git.el
 
-Antoine Levitt: changed gnus-group.el gnus-sum.el message.texi ada-prj.el
+Antoine Levitt: changed gnus-group.el gnus-sum.el message.texi
   ange-ftp.el cus-edit.el dired-x.el ebnf2ps.el emerge.el erc-button.el
   erc-goodies.el erc-stamp.el erc-track.el files.el find-file.el
   gnus-art.el gnus-uu.el gnus.el gnus.texi message.el mh-funcs.el
-  and 8 other files
+  mh-mime.el and 7 other files
 
 Antonin Houska: changed newcomment.el
 
-Arash Esbati: changed reftex-vars.el reftex-ref.el reftex.el nnmaildir.el
-  reftex-auc.el reftex-cite.el reftex-dcr.el
+Arash Esbati: changed reftex-vars.el reftex-auc.el reftex-ref.el
+  reftex.el nnmaildir.el reftex-cite.el reftex-dcr.el reftex-toc.el
+
+Arik Mitschang: changed smime.el
 
 Ari Roponen: changed xterm.c image.c atimer.c doc.c ftcrfont.c hash.texi
   mule.texi package.el startup.el subr.el svg.el time-date.el woman.el
@@ -362,21 +466,32 @@ and changed smime.el mml-smime.el smime-ldap.el 
flymake.el gnus-art.el
 Arni Magnusson: wrote bat-mode.el
 and changed frames.texi generic-x.el texinfo.el
 
+Arnold Noronha: changed ido.el
+
 Artem Chuprina: changed message.el
 
+Artem Loenko: changed src/Makefile.in
+
+Arthur Miller: changed help-fns.el ange-ftp.el bytecomp.el comp.c comp.el
+  dired-tests.el dired.c dired.el files.texi help.texi lisp.h ls-lisp.el
+  sysdep.c tramp-adb.el tramp-rclone.el tramp-sh.el tramp-smb.el tramp.el
+  wdired.el
+
 Artur Malabarba: wrote char-fold-tests.el faces-tests.el isearch-tests.el
-  let-alist.el simple-tests.el sort-tests.el tabulated-list-test.el
+  let-alist.el simple-tests.el sort-tests.el tabulated-list-tests.el
 and changed package.el isearch.el lisp/char-fold.el files.el
   tabulated-list.el package-test.el menu-bar.el replace.el bytecomp.el
   faces.el files-x.el custom.el custom.texi help-fns.el
   let-alist-tests.el simple.el subr-tests.el align.el bindings.el
-  cl-lib-tests.el cl-macs.el and 42 other files
+  cl-lib-tests.el cl-macs.el and 43 other files
 
 Artyom Loenko: changed Info.plist.in
 
 Arun Persaud: changed org-agenda.el org-src.el
 
-Ashish Shukla: changed emacs-gnutls.texi gnutls.el
+Asher Gordon: changed gomoku.el mml.el
+
+Ashish Shukla: changed emacs-gnutls.texi gnutls.el comp.el
 
 Ashwin Ram: wrote refer.el
 
@@ -386,6 +501,9 @@ Atsuo Ohki: changed lread.c
 
 Aubrey Jaffer: changed info.el unexelf.c
 
+Augusto Stoffel: changed progmodes/python.el comint.el isearch.el
+  eldoc.el misc.texi progmodes/compile.el search.texi
+
 Aurélien Aptel: changed alloc.c emacs-module.h lisp.h Makefile
   configure.ac cus-face.el data.c dispextern.h display.texi dynlib.c
   dynlib.h emacs-module.c faces.el lread.c modhelp.py nsterm.m ox-html.el
@@ -421,14 +539,16 @@ Bartosz Duszel: changed allout.el bib-mode.el cc-cmds.el 
hexl.el icon.el
   sendmail.el ses.el simple.el verilog-mode.el vi.el vip.el viper-cmd.el
   xscheme.el
 
-Basil L. Contovounesios: changed simple.el message.el subr.el gravatar.el
-  custom.el gnus-group.el gnus-sum.el gnus-win.el internals.texi
-  modes.texi text.texi window.c bibtex.el button.el customize.texi
-  display.texi eww.el gnus-art.el gnus-msg.el gnus.texi lists.texi
-  and 150 other files
+Basil L. Contovounesios: changed simple.el message.el subr.el eww.el
+  custom.el bibtex.el text.texi gnus-sum.el modes.texi customize.texi
+  files.texi gnus-group.el gnus-win.el gravatar.el internals.texi json.el
+  shr.el window.c battery-tests.el button.el custom-tests.el
+  and 278 other files
+
+Bastian Beischer: changed semantic/complete.el calc-yank.el include.el
+  mru-bookmark.el refs.el senator.el
 
-Bastian Beischer: changed semantic/complete.el include.el mru-bookmark.el
-  refs.el senator.el
+Bastian Beranek: changed tab-bar.el
 
 Bastien Guerry: wrote gnus-bookmark.el
 and co-wrote ol-bibtex.el org-list.el org-protocol.el org-src.el
@@ -436,7 +556,7 @@ and changed org.el org-agenda.el org.texi ox-html.el 
org-clock.el
   org-capture.el org-table.el ox-latex.el ox.el ox-odt.el org-compat.el
   ox-publish.el ob.el org-mobile.el org-colview.el org-macs.el
   org-pcomplete.el org-timer.el org-faces.el ox-ascii.el org-archive.el
-  and 120 other files
+  and 119 other files
 
 Ben A. Mesander: co-wrote erc-dcc.el
 
@@ -455,9 +575,9 @@ and changed org-clock.el org.el
 
 Benjamin Ragheb: changed fortune.el
 
-Benjamin Riefenstahl: changed files.el image-mode.el w32select.c emacs.c
-  image.el inc/ms-w32.h lisp.h mac-win.el macterm.c mule-cmds.el
-  runemacs.c tcl.el w32.c w32.h
+Benjamin Riefenstahl: changed files.el image-mode.el nnrss-tests.el
+  w32select.c emacs.c image.el inc/ms-w32.h lisp.h mac-win.el macterm.c
+  mule-cmds.el nnrss.el runemacs.c tcl.el w32.c w32.h
 
 Benjamin Rutt: co-wrote gnus-dired.el
 and changed vc.el gnus-msg.el message.el diff-mode.el ffap.el nnimap.el
@@ -511,6 +631,8 @@ and changed mh-customize.el mh-search.el mh-alias.el 
mh-e.texi Makefile
 
 Bjarte Johansen: wrote ob-sed.el
 
+Björn Holby: changed vhdl-mode.el
+
 Björn Lindström: changed rcirc.texi
 
 Bjørn Mork: changed nnimap.el gnus-agent.el message.el mml2015.el
@@ -554,7 +676,8 @@ and changed fill.el simple.el indent.el paragraphs.el 
cmds.c intervals.c
 Boris Samorodov: changed imap.el
 
 Boruch Baum: co-wrote footnote.el
-and changed bookmark.el
+and changed bookmark.el apropos.el autorevert.el calc.el cua-rect.el
+  help.el ses.el simple.el textmodes/table.el
 
 Boyd Lynn Gerber: changed configure.ac
 
@@ -585,6 +708,9 @@ Brian Fox: changed Makefile.in Makefile configure.ac 
minibuf.c dired.el
 
 Brian Jenkins: changed frame.c frames.texi hooks.texi
 
+Brian Leung: changed comint.el gud.el advice.el comp.c comp.el em-hist.el
+  files.el find-func.el gdb-mi.el help.el nadvice.el shell.el shortdoc.el
+
 Brian Marick: co-wrote hideif.el
 
 Brian McKenna: changed eww.el
@@ -606,7 +732,8 @@ Brian van den Broek: changed org.texi
 
 Bruce Stephens: changed calc-ext.el
 
-Bruno Félix Rezende Ribeiro: changed functions.texi gnus.texi
+Bruno Félix Rezende Ribeiro: changed os.texi finder.el functions.texi
+  gnus.texi info.el lisp-mnt.el package.el
 
 Bruno Haible: co-wrote po.el
 and changed INSTALL emacs.1 epaths.in info.el paths.el
@@ -615,6 +742,8 @@ Bryan Henderson: changed Makefile term.el
 
 Bryan O'Sullivan: changed ange-ftp.el
 
+Caio Henrique: changed menu-bar.el
+
 Caio Tiago Oliveira: changed ob-scala.el
 
 Caleb Deupree: changed w32-fns.el
@@ -622,7 +751,9 @@ Caleb Deupree: changed w32-fns.el
 Callum Cameron: changed term.el
 
 Cameron Desautels: changed cus-edit.el custom.texi help.el regexp-opt.el
-  ruby-mode.el
+  ruby-mode.el titdic-cnv.el
+
+Campbell Barton: changed bookmark.el
 
 Carl D. Roth: changed gnus-nocem.el
 
@@ -630,19 +761,23 @@ Carl Edman: co-wrote ns-win.el
 
 Carl Henrik Lunde: changed format-spec.el
 
-Carlos Pita: changed progmodes/python.el erc-pcomplete.el fringe.c
-  gtkutil.c image-mode.el keyboard.c sh-script.el
+Carl Lei: changed cc-langs.el
+
+Carlos Pita: changed progmodes/python.el Makefile.in comint.el
+  emacs.service emacsclient.desktop erc-pcomplete.el fringe.c gtkutil.c
+  image-mode.el keyboard.c sh-script.el
 
 Carsten Bormann: changed ibmrs6000.h latin-post.el
 
 Carsten Dominik: wrote idlw-complete-structtag.el idlw-toolbar.el
-  ol-info.el ol-rmail.el ol.el org-agenda.el org-archive.el
+  ol-info.el ol-man.el ol-rmail.el ol.el org-agenda.el org-archive.el
   org-capture.el org-clock.el org-colview.el org-compat.el
   org-datetree.el org-faces.el org-feed.el org-footnote.el org-goto.el
   org-id.el org-indent.el org-inlinetask.el org-macs.el org-mobile.el
-  org-table.el org-timer.el org.el reftex-auc.el reftex-cite.el
-  reftex-dcr.el reftex-global.el reftex-index.el reftex-parse.el
-  reftex-ref.el reftex-sel.el reftex-toc.el reftex-vars.el reftex.el
+  org-refile.el org-table.el org-timer.el org.el reftex-auc.el
+  reftex-cite.el reftex-dcr.el reftex-global.el reftex-index.el
+  reftex-parse.el reftex-ref.el reftex-sel.el reftex-toc.el
+  reftex-vars.el reftex.el
 and co-wrote idlw-help.el idlw-shell.el idlwave.el ol-bbdb.el
   ol-bibtex.el ol-gnus.el org-entities.el org-list.el org-pcomplete.el
   org-src.el ox-beamer.el ox-html.el ox-icalendar.el
@@ -667,7 +802,7 @@ Changwoo Ryu: changed files.el
 
 Chao-Hong Liu: changed TUTORIAL.cn TUTORIAL.zh
 
-Charles A. Roelli: changed nsterm.m vc.el nsfns.m simple.el isearch.el
+Charles A. Roelli: changed nsterm.m vc.el simple.el nsfns.m isearch.el
   nsmenu.m nsterm.h process.c register.el diff-mode.el display.texi
   files.el files.texi fixit.texi macfont.m minibuf.c nsfont.m nsimage.m
   nsselect.m org-clock.el progmodes/python.el and 47 other files
@@ -698,7 +833,7 @@ and co-wrote longlines.el tango-dark-theme.el tango-theme.el
 and changed simple.el display.texi xdisp.c files.el frames.texi
   cus-edit.el files.texi custom.el subr.el text.texi faces.el keyboard.c
   startup.el package.el misc.texi emacs.texi modes.texi mouse.el
-  custom.texi image.c window.el and 933 other files
+  custom.texi image.c window.el and 932 other files
 
 Chris Chase: co-wrote idlw-shell.el idlwave.el
 
@@ -715,13 +850,15 @@ Chris Hall: changed callproc.c frame.c
 
 Chris Hanson: changed xscheme.el scheme.el xterm.c hpux.h x11term.c
   hp9000s300.h keyboard.c process.c texinfmt.el sort.el syntax.c
-  texnfo-upd.el x11fns.c xfns.c dired.el emacsclient.c fileio.c
-  hp9000s800.h indent.c info.el man.el and 17 other files
+  texnfo-upd.el x11fns.c xfns.c dired.el emacs-regex.c emacsclient.c
+  fileio.c hp9000s800.h indent.c info.el and 17 other files
 
 Chris Hecker: changed calc-aent.el
 
 Chris Lindblad: co-wrote tcl.el
 
+Chris Mcmahan: changed package.el
+
 Chris Moore: changed dired.el hexl.el jka-cmpr-hook.el replace.el
   wdired.el Makefile.in comint.el diff-mode.el gnus-sum.el isearch.el
   mouse.el pgg-gpg.el pgg-pgp.el pgg-pgp5.el server.el shell.el
@@ -734,13 +871,13 @@ Chris Prince: changed w32term.c
 Chris Smith: wrote icon.el
 and changed icon-mode.el
 
+Christer Enfors: changed erc.texi
+
 Christian Egli: changed org-taskjuggler.el org.texi
 
 Christian Faulhammer: changed configure configure.ac src/Makefile.in
   vc-bzr.el
 
-Christian Garbs: wrote ob-vala.el
-
 Christian Limpach: co-wrote ns-win.el
 and changed configure.ac
 
@@ -794,6 +931,8 @@ and changed replace.el files.el ispell.el time.el
 
 Christopher J. White: changed url-http.el
 
+Christopher League: changed bookmark.el cus-theme.el
+
 Christopher Oliver: changed mouse.el
 
 Christopher Schmidt: changed files.el ibuffer.el org.el tips.texi
@@ -806,7 +945,7 @@ Christopher Thorne: changed dired.el progmodes/grep.el
 Christopher Wellons: changed emacs-lisp/cl-lib.el hashcash.el
   viper-cmd.el viper-ex.el viper-init.el viper.el
 
-Christophe Troestler: changed epg.el
+Christophe Troestler: changed gnus-icalendar.el epg.el newcomment.el
 
 Christoph Scholtes: changed README.W32 progmodes/python.el stdint.h
   INSTALL maintaining.texi INSTALL.REPO admin.el bookmark.el
@@ -832,10 +971,16 @@ Claudio Bley: changed image.c image.el process.c stat.h 
w32-win.el w32.c
 
 Claudio Fontana: changed Makefile.in leim/Makefile.in lib-src/Makefile.in
 
+Clemens Radermacher: changed cus-start.el frame.c minibuf.texi window.el
+
 Clément Pit--Claudel: changed debugging.texi emacs-lisp/debug.el eval.c
   progmodes/python.el subr-tests.el subr.el url-http.el url-vars.el
 
-Clément Pit-Claudel: changed keyboard.c text.texi
+Clément Pit-Claudel: changed Dockerfile.emba button.el configure.ac
+  display.texi ert.el gitlab-ci.yml keyboard.c tex-mode.el text.texi
+  xdisp.c
+
+Codruț Constantin Gușoi: changed files.el
 
 Colin Marquardt: changed gnus.el message.el
 
@@ -850,8 +995,14 @@ and changed calc.el replace.el update-game-score.c 
calc-ext.el
 
 Colin Williams: changed calc.texi
 
+Colin Woodbury: changed files.el files.texi macros.texi shortdoc.el
+
 Constantin Kulikov: changed server.el startup.el
 
+Constantino Calancha: changed dired.el
+
+Corwin Brust: changed erc-services.el
+
 Courtney Bane: changed term.c
 
 Craig Markwardt: changed icalendar.el
@@ -878,12 +1029,14 @@ and changed mail-extr.el
 
 Dale Sedivec: changed sgml-mode.el wisent/python.el
 
-Damien Cassou: wrote auth-source-pass-tests.el
+Damien Cassou: wrote auth-source-pass-tests.el hierarchy-tests.el
+  hierarchy.el
 and co-wrote auth-source-pass.el auth-source-tests.el
-and changed auth.texi message.el seq-tests.el seq.el simple-tests.el
-  simple.el auth-source.el checkdoc-tests.el checkdoc.el imenu-tests.el
-  imenu.el info.el isearch.el ispell.el json-tests.el json.el
-  message-tests.el package.el rmc.el sequences.texi xref.el
+and changed auth.texi checkdoc.el ispell.el message.el seq-tests.el
+  seq.el simple-tests.el simple.el auth-source.el autorevert.el
+  checkdoc-tests.el imenu-tests.el imenu.el info.el isearch.el
+  json-tests.el json.el message-tests.el package.el rmc.el sequences.texi
+  xref.el
 
 Damien Elmes: changed erc.el erc-dcc.el erc-track.el erc-log.el
   erc-pcomplete.el README erc-button.el erc-nets.el erc-ring.el Makefile
@@ -898,12 +1051,12 @@ Dan Christensen: changed gnus-sum.el nndoc.el 
nnfolder.el gnus-art.el
   spam.el time-date.el
 
 Dan Davison: wrote ob-matlab.el ob-octave.el
-and co-wrote ob-R.el ob-core.el ob-exp.el ob-lob.el ob-perl.el
+and co-wrote ob-R.el ob-core.el ob-exp.el ob-java.el ob-lob.el ob-perl.el
   ob-python.el ob-ref.el org-src.el
 and changed ob.el ob-sh.el org.el ox.el ox-latex.el ob-tangle.el ob-C.el
-  ob-asymptote.el ob-clojure.el ob-haskell.el ob-ruby.el ob-scheme.el
-  ob-table.el ob-ditaa.el ob-dot.el ob-gnuplot.el ob-js.el ob-mscgen.el
-  ob-ocaml.el ob-org.el ob-plantuml.el and 14 other files
+  ob-clojure.el ob-haskell.el ob-ruby.el ob-scheme.el ob-table.el
+  ob-ditaa.el ob-dot.el ob-gnuplot.el ob-js.el ob-ocaml.el ob-org.el
+  ob-plantuml.el ob-sass.el ob-screen.el and 12 other files
 
 Daniel Barrett: changed dbnotn.rnc
 
@@ -919,7 +1072,7 @@ and co-wrote js.el
 and changed keyboard.c emacs.c w32fns.c alloc.c image.c cl-macs.el lisp.h
   src/Makefile.in configure.ac frame.c frame.el process.c xterm.el
   sh-script.el xfaces.c coding.c cygw32.c data.c dbusbind.c fns.c font.c
-  and 216 other files
+  and 213 other files
 
 Daniel Dehennin: changed gnus-mlspl.el mml2015.el gnus-msg.el gnus.texi
   mm-decode.el nnmail.el ox.el
@@ -931,6 +1084,10 @@ Daniel Elliott: changed octave.el
 Daniel Engeler: changed sysdep.c elisp.texi emacs.texi internals.texi
   misc.texi process.c process.h processes.texi term.el w32.c w32.h
 
+Daniele Nicolodi: changed url-http.el
+
+Daniel Gröber: changed rxvt.el
+
 Daniel Hackney: wrote package-tests.el
 and co-wrote package.el
 and changed package-test.el package-x.el ange-ftp.el
@@ -943,20 +1100,31 @@ Daniel Jensen: changed apropos.el
 
 Daniel Kahn Gillmor: changed mml-sec.el
 
-Daniel Koning: changed artist.el commands.texi subr.el
+Daniel Koning: changed simple.el artist.el commands.texi subr.el
 
 Daniel LaLiberte: wrote cust-print.el edebug.el isearch.el
 and co-wrote hideif.el
 and changed mlconvert.el eval-region.el
 
+Daniel Lenski: changed speedbar.el
+
 Daniel Lopez: changed progmodes/compile.el
 
 Daniel Lublin: changed dns-mode.el
 
+Daniel Martín: changed shortdoc.el nsterm.m erc.texi files.el files.texi
+  msdos-xtra.texi ns-win.el basic.texi cmacexp.el compilation.txt
+  compile-tests.el cscope.el diff.el dired.el editfns.c emacs.texi
+  files-tests.el find-func-tests.el find-func.el frame.c frame.el
+  and 16 other files
+
 Daniel McClanahan: changed lisp-mode.el
 
 Daniel M Coffman: changed arc-mode.el
 
+Daniel Mendler: changed minibuffer.el minibuf.texi simple.el help-fns.el
+  info.el minibuf.c minibuffer-tests.el xref.el
+
 Daniel M German: co-wrote org-protocol.el
 
 Daniel Néri: changed message.el
@@ -983,6 +1151,8 @@ Daniel Ralston: changed rcirc.el
 
 Daniel Schoepe: changed gnus-sum.el
 
+Daniel Semyonov: changed mairix.el
+
 Dani Moncayo: changed msys-to-w32 Makefile.in configure.ac buffers.texi
   lists.texi mini.texi INSTALL README.W32 basic.texi custom.texi
   dired.texi display.texi emacs-lisp-intro.texi files.texi killing.texi
@@ -993,15 +1163,19 @@ and co-wrote hideshow.el
 and changed vc.el configure.ac vc-hg.el vc-git.el src/Makefile.in
   vc-bzr.el sysdep.c emacs.c process.c vc-cvs.el lisp.h term.c
   vc-hooks.el xterm.c keyboard.c vc-svn.el xterm.el callproc.c darwin.h
-  term.el gnu-linux.h and 921 other files
+  term.el gnu-linux.h and 920 other files
 
 Danny Roozendaal: wrote handwrite.el
 
 Danny Siu: changed gnus-sum.el gnus-picon.el nndoc.el nnimap.el smiley.el
 
+Dan Ports: changed configure.ac
+
 Dan Rosenberg: changed movemail.c
 
-Dario Gjorgjevski: changed auth-source.el recentf.el syntax.el
+Dario Gjorgjevski: changed progmodes/python.el project.el auth-source.el
+  cus-edit.el erc-desktop-notifications.el ido.el minibuffer-tests.el
+  recentf.el sh-script.el syntax.el tramp.el xml.el
 
 Darren Hoo: changed db-find.el db.el gnus-art.el isearch.el man.el
   nsmenu.m startup.el
@@ -1027,7 +1201,7 @@ and co-wrote latin-ltx.el socks.el
 and changed configure.ac help.el mule-cmds.el fortran.el mule-conf.el
   xterm.c browse-url.el mule.el coding.c src/Makefile.in european.el
   fns.c mule-diag.el simple.el wid-edit.el cus-edit.el cus-start.el
-  files.el keyboard.c byte-opt.el info.el and 772 other files
+  files.el keyboard.c byte-opt.el info.el and 771 other files
 
 Dave Pearson: wrote 5x5.el quickurl.el
 
@@ -1063,8 +1237,10 @@ David De La Harpe Golden: changed files.el mouse.el 
simple.el fileio.c
   cus-start.el nsselect.m select.el w32-fns.el x-win.el xterm.c
 
 David Edmondson: changed message.el erc.el mml2015.el process.c
-  gnus-cite.el imap.el mm-uu.el mm-view.el nnfolder.el nnimap.el nnml.el
-  rcirc.el shr.el
+  gnus-cite.el gnus-cloud.el gnus.texi imap.el mm-uu.el mm-view.el
+  nnfolder.el nnimap.el nnml.el rcirc.el shr.el
+
+Davide Masserut: changed bindings.el basic.texi
 
 David Engster: wrote mairix.el nnmairix.el
 and co-wrote gitmerge.el
@@ -1072,7 +1248,7 @@ and changed cedet/semantic.el db.el insert.el 
semantic/complete.el c.by
   c.el db-el.el db-file.el db-find.el ede-grammar.el eieio-opt.el
   eieio.el eieio.texi gnus.texi registry.el srecode/compile.el
   wisent/python.el analyze.el bovine/el.el bovine/grammar.el
-  decorate/mode.el and 87 other files
+  decorate/mode.el and 88 other files
 
 David Gillespie: wrote calc-aent.el calc-alg.el calc-arith.el calc-bin.el
   calc-comb.el calc-cplx.el calc-embed.el calc-ext.el calc-fin.el
@@ -1139,7 +1315,7 @@ and changed mode-clone.el
 David Michael: changed files.el
 
 David M. Koppelman: wrote hi-lock.el
-and changed display.texi
+and changed display.texi userlock.el
 
 David Moore: co-wrote nnvirtual.el
 and changed gnus-xmas.el
@@ -1195,13 +1371,15 @@ Debarshi Ray: changed erc-backend.el erc.el
 
 Decklin Foster: changed nngateway.el
 
-Deepak Goel: changed idlw-shell.el ada-xref.el feedmail.el files.el
-  find-func.el flymake.el mh-search.el mh-seq.el mh-thread.el mh-xface.el
-  org.el simple.el vc.el vhdl-mode.el wdired.el README ada-mode.el
-  allout.el appt.el apropos.el artist.el and 85 other files
+Deepak Goel: changed idlw-shell.el feedmail.el files.el find-func.el
+  flymake.el mh-search.el mh-seq.el mh-thread.el mh-xface.el org.el
+  simple.el vc.el vhdl-mode.el wdired.el README allout.el appt.el
+  apropos.el artist.el bibtex.el bindings.el and 83 other files
 
 D. E. Evans: changed basic.texi
 
+Deneb Meketa: changed progmodes/python.el
+
 Denis B. Roegel: co-wrote solar.el
 
 Denis Bueno: changed autorevert.el
@@ -1228,6 +1406,8 @@ Derek Peschel: changed etags.c
 
 Derek Upham: changed nxml-mode.el
 
+Derek Zhou: changed process.c
+
 Detlev Zundel: wrote re-builder.el
 and changed buffer.c
 
@@ -1243,7 +1423,11 @@ Diane Murray: changed erc.el erc-backend.el erc-menu.el 
erc-button.el
   erc-goodies.el erc-ibuffer.el erc-log.el erc-nicklist.el url-http.el
   Makefile erc-dcc.el and 36 other files
 
-Dick R. Chiang: changed checkdoc.el cl-macs-tests.el cl-macs.el
+Dick R. Chiang: changed ffap-tests.el ffap.el gnus-group.el gnus.texi
+  message.el bindings.el buffer-tests.el buffer.c checkdoc.el
+  cl-macs-tests.el cl-macs.el comint-tests.el gnus-srvr.el gnus-sum.el
+  gnus-topic.el gnutls.c key.pub key.sec minibuffer.el misc.texi mml.el
+  and 7 other files
 
 Didier Verna: wrote gnus-diary.el nndiary.el
 and co-wrote nnml.el
@@ -1263,7 +1447,7 @@ Dima Kogan: wrote diff-mode-tests.el
 and changed diff-mode.el erc-backend.el image.c font.c gud.el hideshow.el
   autorevert.el comint.el find-file.el subword.el BOOST.tests PCRE.tests
   PTESTS TESTS align.el alloc.c ediff-mult.el ediff.el erc-button.el
-  isearch.el keyboard.c and 11 other files
+  isearch.el keyboard.c and 12 other files
 
 Dirk Herrmann: co-wrote bibtex.el
 
@@ -1271,12 +1455,14 @@ Dirk-Jan C. Binnema: changed org-agenda.el
 
 Dirk Ullrich: changed ispell.el
 
+Dmitrii Kuragin: changed ispell.el
+
 Dmitri Paduchikh: changed advice.el
 
 Dmitry Antipov: changed lisp.h xdisp.c alloc.c xterm.c frame.c buffer.c
   xfns.c window.c font.c w32term.c frame.h keyboard.c nsterm.m w32fns.c
   editfns.c xterm.h xfaces.c dispnew.c fileio.c dispextern.h fns.c
-  and 278 other files
+  and 277 other files
 
 Dmitry Bolshakov: changed hideshow.el
 
@@ -1287,11 +1473,11 @@ Dmitry Gorbik: changed org.el
 
 Dmitry Gutov: wrote elisp-mode-tests.el jit-lock-tests.el json-tests.el
   vc-hg-tests.el xref-tests.el
-and changed ruby-mode.el xref.el project.el vc-git.el elisp-mode.el
-  etags.el ruby-mode-tests.el js.el package.el vc-hg.el vc.el
-  symref/grep.el log-edit.el dired-aux.el simple.el minibuffer.el
-  menu-bar.el package-test.el progmodes/grep.el vc-svn.el eldoc.el
-  and 111 other files
+and changed xref.el ruby-mode.el project.el vc-git.el elisp-mode.el
+  etags.el ruby-mode-tests.el js.el vc.el vc-hg.el package.el
+  symref/grep.el dired-aux.el simple.el log-edit.el minibuffer.el
+  progmodes/grep.el ido.el maintaining.texi menu-bar.el package-test.el
+  and 123 other files
 
 Dmitry Kurochkin: changed isearch.el
 
@@ -1311,6 +1497,10 @@ Don Woods: changed replace.el
 
 Doug Cutting: co-wrote disass.el
 
+Doug Davis: changed elisp-mode.el progmodes/python.el
+
+Doug Gilmore: changed xterm.c
+
 Douglas Lewan: changed TUTORIAL.pt_BR
 
 Doug Maxey: changed mouse.el
@@ -1319,12 +1509,16 @@ Drake Wilson: changed emacsclient.c files.el misc.texi
 
 Drew Adams: wrote light-blue-theme.el
 and co-wrote color.el
-and changed dired.el cus-edit.el imenu.el info.el ls-lisp.el faces.el
-  files.el help-mode.el help.el isearch.el menu-bar.el modes.texi
-  mouse.el ange-ftp.el apropos.el bindings.el bookmark.el custom.el
-  descr-text.el dired-aux.el dired.texi and 18 other files
+and changed dired.el cus-edit.el imenu.el info.el ls-lisp.el menu-bar.el
+  dired.texi faces.el files.el frame.el help-fns.el help-mode.el help.el
+  help.texi isearch.el modes.texi mouse.el wid-edit.el ange-ftp.el
+  apropos.el bindings.el and 22 other files
+
+Earl Hyatt: changed ffap.el seq-tests.el sequences.texi windows.texi
+  control.texi cus-edit.el hi-lock.el misc.texi pcase-tests.el pcase.el
+  replace.el search.texi seq.el tab-bar.el
 
-E. Choroba: changed simple.el
+E. Choroba: changed cperl-mode.el simple.el
 
 Edison Ibañez: changed auth-source-pass-tests.el
 
@@ -1361,6 +1555,8 @@ Eirik Fuller: changed ralloc.c xterm.c
 E. Jay Berkenbilt: changed b2m.c flyspell.el ispell.el unrmail.el
   whitespace.el window.h
 
+Elad Lahav: changed configure.ac
+
 Elias Oltmanns: changed tls.el gnus-agent.el gnus-cite.el gnus-int.el
   gnus-srvr.el gnus.el nnimap.el
 
@@ -1373,13 +1569,19 @@ and changed simple.el dired.el
 Eli Tziperman: wrote rmail-spam-filter.el
 
 Eli Zaretskii: wrote [bidirectional display in xdisp.c]
-  [tty menus in term.c] abbrev-tests.el bidi.c biditest.el
-  chartab-tests.el coding-tests.el doc-tests.el etags-tests.el rxvt.el
-  tty-colors.el
-and changed xdisp.c msdos.c w32.c display.texi w32fns.c simple.el
-  files.el fileio.c keyboard.c w32term.c w32proc.c emacs.c files.texi
-  text.texi dispnew.c frames.texi lisp.h dispextern.h window.c process.c
-  term.c and 1188 other files
+  [tty menus in term.c] abbrev-tests.el bidi.c biditest.el cham.el
+  chartab-tests.el coding-tests.el etags-tests.el rxvt.el tty-colors.el
+and co-wrote help-tests.el
+and changed xdisp.c display.texi w32.c msdos.c w32fns.c simple.el
+  files.el fileio.c keyboard.c emacs.c w32term.c text.texi dispnew.c
+  w32proc.c files.texi frames.texi configure.ac lisp.h dispextern.h
+  process.c editfns.c and 1232 other files
+
+Eliza Velasquez: changed server.el
+
+Ellington Santos: changed battery.el
+
+Emacs-F: changed rmail-spam-filter.el
 
 Emanuele Giaquinta: changed configure.ac rxvt.el charset.c etags.c
   fontset.c frame.el gnus-faq.texi loadup.el lread.c sh-script.el
@@ -1391,20 +1593,21 @@ Emilio C. Lopes: changed woman.el cmuscheme.el help.el 
vc.el advice.el
   animate.el apropos.el artist.el bookmark.el cal-menu.el calc-prog.el
   calc-store.el calcalg3.el calendar.el calendar.texi checkdoc.el
   code-pages.el codepage.el completion.el cus-edit.el diff.el
-  and 57 other files
+  and 58 other files
 
 Emmanuel Briot: wrote xml.el
-and changed ada-mode.el ada-stmt.el ada-prj.el ada-xref.el
+and changed ada-stmt.el
 
 Era Eriksson: changed bibtex.el dired.el json.el ses.el ses.texi shell.el
   tramp.el tramp.texi
 
-Eric Abrahamsen: wrote gnus-test-headers.el
-and changed gnus-sum.el gnus-group.el gnus-start.el gnus-registry.el
-  eieio-base.el nnimap.el gnus.texi nnir.el gnus-agent.el registry.el
-  gnus-srvr.el gnus.el eieio.el gnus-score.el files.el files.texi
-  gnus-art.el gnus-cache.el nnmail.el nnmaildir.el nnrss.el
-  and 43 other files
+Eric Abrahamsen: wrote gnus-dbus.el gnus-search-tests.el gnus-search.el
+  gnus-test-headers.el
+and changed gnus-sum.el gnus-group.el gnus-registry.el gnus-start.el
+  gnus.texi eieio-base.el nnimap.el nnir.el gnus-agent.el gnus.el
+  registry.el gnus-srvr.el eieio.el gnus-cache.el gnus-msg.el
+  gnus-score.el message.el files.el files.texi gnus-art.el gnus-util.el
+  and 50 other files
 
 Eric Bélanger: changed image.c
 
@@ -1430,62 +1633,61 @@ Eric Marsden: changed gnus-cache.el url-util.el
 
 Eric M. Ludlam: wrote analyze.el analyze/complete.el analyze/debug.el
   args.el auto.el autoconf-edit.el base.el bovine.el bovine/debug.el
-  bovine/el.el bovine/make.el c.el cedet-cscope.el cedet-files.el
-  cedet-global.el cedet-idutils.el cedet-utests.el cedet/semantic.el
-  cedet/srecode.el checkdoc.el config.el cpp-root.el cscope.el
-  data-debug.el db-debug.el db-el.el db-file.el db-find.el db-global.el
-  db-mode.el db-ref.el db-typecache.el db.el decorate.el decorate/mode.el
-  dep.el detect.el dframe.el dictionary.el doc.el document.el
-  ede-grammar.el ede-tests.el ede.el ede/custom.el ede/dired.el
-  ede/files.el ede/generic.el ede/linux.el ede/locate.el ede/make.el
-  ede/shell.el ede/simple.el ede/speedbar.el ede/srecode.el ede/util.el
-  edit.el eieio-base.el eieio-compat.el eieio-core.el eieio-custom.el
-  eieio-datadebug.el eieio-opt.el eieio-speedbar.el
-  eieio-test-methodinvoke.el eieio-test-persist.el eieio-tests.el
-  eieio.el emacs-lisp/chart.el emacs.el expandproto.el extract.el
-  ezimage.el fcn.el fields.el filter.el filters.el fw.el gcc.el getset.el
-  global.el html.el ia-sb.el ia.el idle.el idutils.el include.el
-  insert.el inversion.el javascript.el lex-spp.el lex.el list.el
-  makefile-edit.el map.el mru-bookmark.el pconf.el pmake.el
-  proj-archive.el proj-aux.el proj-comp.el proj-elisp.el proj-info.el
-  proj-misc.el proj-obj.el proj-prog.el proj-scheme.el proj-shared.el
-  proj.el project-am.el pulse.el refs.el sb-image.el sb.el scm.el
-  scope.el semantic-tests.el semantic-utest-c.el semantic-utest-fmt.el
+  bovine/el.el bovine/make.el c.el cedet-cscope.el cedet-files-tests.el
+  cedet-files.el cedet-global.el cedet-idutils.el cedet-utests.el
+  cedet/semantic.el cedet/srecode.el checkdoc.el config.el cpp-root.el
+  cscope.el data-debug.el db-debug.el db-el.el db-file.el db-find.el
+  db-global.el db-mode.el db-ref.el db-typecache.el db.el decorate.el
+  decorate/mode.el dep.el detect.el dframe.el dictionary.el doc.el
+  document-tests.el document.el ede-grammar.el ede-tests.el ede.el
+  ede/custom.el ede/dired.el ede/files.el ede/generic.el ede/linux.el
+  ede/locate.el ede/make.el ede/shell.el ede/simple.el ede/speedbar.el
+  ede/srecode.el ede/util.el edit.el eieio-base.el eieio-compat.el
+  eieio-core.el eieio-custom.el eieio-datadebug.el eieio-opt.el
+  eieio-speedbar.el eieio-test-methodinvoke.el eieio-test-persist.el
+  eieio-tests.el eieio.el emacs-lisp/chart.el emacs.el expandproto.el
+  extract.el ezimage.el fcn.el fields-tests.el fields.el filter.el
+  filters.el format-tests.el fw-tests.el fw.el gcc-tests.el gcc.el
+  getset.el global.el html.el ia-sb.el ia.el idle.el idutils.el
+  include.el insert.el inversion-tests.el inversion.el javascript.el
+  lex-spp.el lex.el list.el makefile-edit.el map.el mru-bookmark.el
+  pconf.el pmake.el proj-archive.el proj-aux.el proj-comp.el
+  proj-elisp.el proj-info.el proj-misc.el proj-obj.el proj-prog.el
+  proj-scheme.el proj-shared.el proj.el project-am.el pulse.el refs.el
+  sb-image.el sb.el scm.el scope.el semantic-tests.el semantic-utest-c.el
   semantic-utest-ia.el semantic-utest.el semantic/chart.el
   semantic/complete.el semantic/ctxt.el semantic/debug.el
   semantic/find.el semantic/format.el semantic/imenu.el semantic/sort.el
   semantic/texi.el semantic/util.el source.el speedbar.el
-  srecode-tests.el srecode/compile.el srecode/ctxt.el srecode/el.el
-  srecode/find.el srecode/java.el srecode/mode.el srecode/semantic.el
-  srecode/table.el srecode/texi.el srt.el symref.el symref/grep.el
-  system.el tag-file.el tag-ls.el tag-write.el tag.el test-fmt.el test.el
+  srecode/compile.el srecode/ctxt.el srecode/el.el srecode/find.el
+  srecode/java.el srecode/mode.el srecode/semantic.el srecode/table.el
+  srecode/texi.el srt.el symref.el symref/grep.el system.el tag-file.el
+  tag-ls.el tag-write.el tag.el test.el
 and co-wrote db-ebrowse.el srecode/cpp.el util-modes.el
 and changed c.srt ede.texi info.el rmail.el speedbspec.el  cedet.el
   ede-autoconf.srt ede-make.srt eieio.texi gud.el sb-dir-minus.xpm
   sb-dir-plus.xpm sb-dir.xpm sb-mail.xpm sb-pg-minus.xpm sb-pg-plus.xpm
   sb-pg.xpm sb-tag-gt.xpm sb-tag-minus.xpm sb-tag-plus.xpm
-  and 50 other files
+  and 35 other files
 
-Eric Schulte: wrote ob-asymptote.el ob-awk.el ob-calc.el ob-comint.el
-  ob-coq.el ob-css.el ob-ditaa.el ob-dot.el ob-emacs-lisp.el ob-eval.el
-  ob-forth.el ob-gnuplot.el ob-haskell.el ob-java.el ob-js.el ob-latex.el
-  ob-makefile.el ob-ocaml.el ob-org.el ob-ruby.el ob-sass.el ob-shell.el
-  ob-shen.el ob-sql.el ob-sqlite.el ob-table.el ob-tangle.el ob.el
-  org-plot.el
+Eric Schulte: wrote ob-awk.el ob-calc.el ob-comint.el ob-css.el
+  ob-ditaa.el ob-dot.el ob-emacs-lisp.el ob-eval.el ob-forth.el
+  ob-gnuplot.el ob-haskell.el ob-js.el ob-latex.el ob-makefile.el
+  ob-ocaml.el ob-org.el ob-ruby.el ob-sass.el ob-shell.el ob-sql.el
+  ob-sqlite.el ob-table.el ob-tangle.el ob.el org-plot.el
 and co-wrote ob-C.el ob-R.el ob-core.el ob-exp.el ob-fortran.el
-  ob-lisp.el ob-lob.el ob-maxima.el ob-perl.el ob-picolisp.el
-  ob-python.el ob-ref.el ob-scheme.el ol-bibtex.el
+  ob-java.el ob-lisp.el ob-lob.el ob-maxima.el ob-perl.el ob-python.el
+  ob-ref.el ob-scheme.el ol-bibtex.el
 and changed org.texi org.el ob-clojure.el org-exp-blocks.el ob-sh.el
   org-bibtex.el ox.el ox-latex.el org-src.el ob-plantuml.el ob-keys.el
   ob-screen.el org-macs.el org-table.el org-agenda.el org-mouse.el
-  orgcard.tex ob-lilypond.el ob-mscgen.el ob-octave.el org-clock.el
-  and 16 other files
+  orgcard.tex ob-lilypond.el ob-octave.el org-clock.el org-compat.el
+  and 13 other files
 
-Eric S Fraga: wrote ob-ledger.el
-and co-wrote ob-maxima.el
+Eric S Fraga: co-wrote ob-maxima.el
 and changed ox-icalendar.el org.texi ox-latex.el
 
-Eric Skoglund: changed esh-proc.el eshell.texi
+Eric Skoglund: changed esh-proc.el eshell.texi replace.el
 
 Eric S. Raymond: wrote AT386.el asm-mode.el cookie1.el finder.el gud.el
   lisp-mnt.el loadhist.el
@@ -1513,6 +1715,10 @@ Erik Toubro Nielsen: changed gnus-sum.el gnus-topic.el
 
 Ernest Adrogué: changed european.el latin-pre.el mule-cmds.el
 
+Ernest N. Mamikonyan: changed texinfo.el
+
+Ernesto Alfonso: changed simple.el
+
 E Sabof: changed hi-lock.el image-dired.el
 
 Espen Skoglund: wrote pascal.el
@@ -1524,9 +1730,7 @@ Ethan Bradford: changed ispell.el ange-ftp.el gnus.el 
gnuspost.el lpr.el
 
 Ethan Ligon: changed org-docbook.el ox-html.el
 
-Etienne Prud'homme: changed align.el
-
-Etienne Prud’Homme: changed css-mode-tests.el css-mode.el
+Etienne Prud’Homme: changed align.el css-mode-tests.el css-mode.el
 
 Eugene Exarevsky: changed sql.el
 
@@ -1551,7 +1755,10 @@ Eyal Lotem: changed ido.el
 Fabián Ezequiel Gallina: wrote progmodes/python.el subr-x-tests.el
 and changed python-tests.el subr-x.el imenu.el wisent/python.el
 
-Fabrice Bauzac: changed dired-aux.el fixit.texi search.texi
+Fabrice Bauzac: changed objects.texi dired-aux.el fixit.texi ibuf-ext.el
+  search.texi
+
+Fabrice Nicol: changed etags.c etags.1
 
 Fabrice Niessen: wrote leuven-theme.el
 and changed org-agenda.el
@@ -1559,7 +1766,7 @@ and changed org-agenda.el
 Fabrice Popineau: changed w32.c ms-w32.h w32fns.c w32heap.c w32term.c
   configure.ac lisp.h unexw32.c buffer.c emacs.c image.c w32heap.h
   w32proc.c w32term.h INSTALL addsection.c alloc.c dispextern.h
-  emacs-x64.manifest emacs-x86.manifest etags.c and 25 other files
+  emacs-regex.c emacs-x64.manifest emacs-x86.manifest and 25 other files
 
 Fan Kai: changed esh-arg.el
 
@@ -1568,14 +1775,14 @@ Faried Nawaz: changed message.el
 Federico Beffa: changed xscheme.el
 
 Federico Tedin: wrote tempo-tests.el
-and changed minibuf.c mouse.el package.el rect.el cursor-sensor.el
-  cus-start.el doc-view.el edebug.el eww.el files.texi gamegrid.el
-  keyboard.c minibuf.texi package-tests.el package.texi simple.el
-  tempo.el vc-git.el xfaces.c
+and changed minibuf.c esh-var.el minibuf.texi mouse.el package.el rect.el
+  simple.el tempo.el coding.c cursor-sensor.el cus-start.el doc-view.el
+  edebug.el em-dirs.el eshell-tests.el eww.el fileio-tests.el fileio.c
+  files.texi gamegrid.el keyboard.c and 8 other files
 
 Felicián Németh: changed project.el xref.el
 
-Felipe Ochoa: changed faces.el js.el js.js paren.el
+Felipe Ochoa: changed faces.el js.el paren.el
 
 Felix E. Klee: co-wrote svg.el
 and changed display.texi
@@ -1593,18 +1800,20 @@ Feng Li: changed calc-ext.el pascal.el which-func.el
 
 Feng Shu: changed org.el org.texi ox.el ox-html.el ox-latex.el ox-odt.el
 
+Ferdinand Pieper: changed flow-fill-tests.el flow-fill.el
+
 Ferenc Wagner: changed nnweb.el
 
 Filipe Cabecinhas: changed nsterm.m
 
-Filipp Gunbin: changed auth-source-tests.el auth-source.el autorevert.el
-  compilation.txt dired-aux.el gnus-ml.el progmodes/compile.el shell.el
-  cc-menus.el custom.el dabbrev.el gnus-sum.el imenu.el info.el info.texi
-  ldap.el search.texi sql.el
-
-Fix Bug#24483.: changed sql.el sql-tests.el
+Filipp Gunbin: changed compilation.txt progmodes/compile.el
+  auth-source-tests.el auth-source.el autorevert.el dired-aux.el
+  gnus-ml.el shell.el sysdep.c cc-menus.el compile-tests.el custom.el
+  dabbrev.el gnus-sum.el imenu.el info.el info.texi keymaps.texi ldap.el
+  processes.texi search.texi and 3 other files
 
-Fix Bug#35307.: changed sql.el
+F. Jason Park: changed socks-tests.el erc-tests.el erc.el socks.el
+  erc-button.el erc-ring.el erc-services.el puny-tests.el puny.el
 
 Flemming Hoejstrup Hansen: changed forms.el
 
@@ -1614,6 +1823,8 @@ Florian Beck: changed org.el
 
 Florian Ragwitz: changed gnus-html.el mail/sieve-manage.el
 
+Florian V. Savigny: changed sql.el
+
 Florian Weimer: changed message.el gnus.el coding.c gnus-sum.el gnus.texi
   mm-decode.el mm-util.el
 
@@ -1623,7 +1834,7 @@ Francesco Potortì: wrote cmacexp.el
 and changed etags.c man.el delta.h etags.1 undigest.el rmail.el comint.el
   configure.ac maintaining.texi uniquify.el latin-post.el etags.el
   latin-alt.el lib-src/Makefile.in sgml-mode.el Makefile.in data.c
-  european.el filelock.c files.el generic-x.el and 44 other files
+  european.el filelock.c files.el generic-x.el and 45 other files
 
 Francesc Rocher: changed splash.png splash.svg startup.el README
   cus-start.el gnus.el gnus.png gnus.svg macterm.c splash.pbm splash.xpm
@@ -1701,12 +1912,16 @@ Fujii Hironori: changed w32fns.c
 
 Gábor Vida: changed gnus-demon.el auth-source.el ido.el
 
+Gabriel Do Nascimento Ribeiro: changed remember.el mb-depth.el repeat.el
+  tab-line.el cmuscheme.el comint.el esh-mode.el etags.el gnus-sum.el
+  hl-line.el idlwave.el inf-lisp.el mh-gnus.el mh-letter.el mh-mime.el
+  mh-seq.el mh-utils.el minibuf.c minibuffer.el mule-cmds.el package.el
+  and 10 other files
+
 Gaby Launay: changed auth-source-pass.el
 
 Gareth Jones: changed fns.c gnus-score.el
 
-Gareth Rees: changed NEWS.24
-
 Garrett Wollman: changed sendmail.el
 
 Gary Delp: wrote mailpost.el (public domain)
@@ -1730,11 +1945,11 @@ Geert Kloosterman: changed which-func.el
 
 Gemini Lasswell: wrote backtrace-tests.el backtrace.el edebug-tests.el
   kmacro-tests.el testcover-tests.el thread-tests.el thread.el
-and changed edebug.el cl-print.el edebug.texi cl-print-tests.el
-  debugging.texi cl-macs.el emacs-lisp/debug.el edebug-test-code.el
-  subr.el testcases.el testcover.el cl-generic.el ert-x.el eval.c
-  eieio-compat.el elisp.texi ert.el ert.texi eval-tests.el generator.el
-  print.c and 24 other files
+and changed edebug.el cl-print.el edebug.texi emacs-lisp/debug.el
+  cl-print-tests.el debugging.texi cl-macs.el edebug-test-code.el subr.el
+  testcases.el testcover.el cl-generic.el ert-x.el eval.c eieio-compat.el
+  elisp.texi ert.el ert.texi eval-tests.el generator.el print.c
+  and 24 other files
 
 Geoff Gole: changed align.el ibuffer.el whitespace.el
 
@@ -1765,7 +1980,7 @@ Gerd Möllmann: wrote authors.el ebrowse.el jit-lock.el 
tooltip.el
 and changed xdisp.c xterm.c dispnew.c dispextern.h xfns.c xfaces.c
   window.c keyboard.c lisp.h faces.el alloc.c buffer.c startup.el xterm.h
   fns.c simple.el term.c configure.ac frame.c xmenu.c emacs.c
-  and 610 other files
+  and 607 other files
 
 Gergely Nagy: changed erc.el
 
@@ -1786,24 +2001,30 @@ Giuliano Procida: changed perl-mode.el
 Giuseppe Scrivano: changed browse-url.el buffer.c configure.ac sysdep.c
   xsmfns.c
 
+G. Jay Kerns: wrote ob-julia.el
+
 Glenn Morris: wrote check-declare.el f90-tests.el vc-bzr-tests.el
 and changed configure.ac Makefile.in src/Makefile.in calendar.el
-  diary-lib.el lisp/Makefile.in files.el make-dist rmail.el
-  progmodes/f90.el bytecomp.el simple.el authors.el admin.el startup.el
-  emacs.texi misc/Makefile.in display.texi lib-src/Makefile.in ack.texi
-  subr.el and 1760 other files
+  lisp/Makefile.in diary-lib.el files.el make-dist rmail.el
+  progmodes/f90.el bytecomp.el admin.el misc/Makefile.in simple.el
+  authors.el startup.el emacs.texi lib-src/Makefile.in display.texi
+  ack.texi subr.el and 1790 other files
 
 Glynn Clements: wrote gamegrid.el snake.el tetris.el
 
 Göktuğ Kayaalp: changed electric.el european.el text.texi vc-cvs.el
   vc-hg.el
 
+Gong Qijian: changed startup.el
+
 Göran Uddeborg: changed isc4-1.h
 
 Gordon Matzigkeit: changed gnus-uu.el
 
 Graham Dobbins: changed lisp-mode.el
 
+Grant Shangreaux: changed HELLO latin-post.el latin-pre.el
+
 Greg A. Woods: co-wrote pcvs.el
 
 Greg Hill: changed bytecomp.el
@@ -1818,11 +2039,10 @@ and changed tar-mode.el
 
 Gregoire Jadi: changed proced.el
 
-Grégoire Jadi: changed org.texi emacsgtkfixed.c keyboard.c rcirc.el
-  xwidget.c xwidget.el Makefile.in cl-generic.el configure.ac
-  dispextern.h dispnew.c emacs.c latin-post.el lisp.h ob-core.el
-  org-id.el org.el print.c reporter.el sendmail.el shr.el
-  and 6 other files
+Grégoire Jadi: changed org.texi configure.ac emacsgtkfixed.c keyboard.c
+  rcirc.el xwidget.c xwidget.el Makefile.in bibtex-tests.el bibtex.el
+  cl-generic.el dispextern.h dispnew.c emacs.c latin-post.el lisp.h
+  ob-core.el org-id.el org.el print.c reporter.el and 8 other files
 
 Gregorio Gervasio, Jr.: changed gnus-sum.el
 
@@ -1833,11 +2053,16 @@ Gregor Schmid: changed intervals.c intervals.h 
tcl-mode.el textprop.c
 
 Gregory Chernov: changed nnslashdot.el
 
-Grégory Mounié: changed display.texi hi-lock.el man.el
+Gregory Heytings: changed isearch.el minibuffer.el mini.texi quail.el
+  search.texi simple.el HELLO buffers.texi diff-mode.el emake facemenu.el
+  files.el fringe.c help-macro.el icomplete.el keyboard.c misc-lang.el
+  modula2.el pcmpl-gnu.el print.c pulse.el and 4 other files
+
+Grégory Mounié: changed display.texi hi-lock.el man.el xfns.c
 
 Gregory Neil Shapiro: changed mailabbrev.el
 
-Gregor Zattler: changed eshell.texi emacs-lisp-intro.texi
+Gregor Zattler: changed eww.texi eshell.texi emacs-lisp-intro.texi
 
 Greg Stark: changed gnus-ems.el timezone.el
 
@@ -1882,7 +2107,11 @@ Hans Wennborg: changed emacs.c
 
 Han-Wen Nienhuys: changed emacsclient.c server.el
 
-Harald Hanche-Olsen: changed sgml-mode.el skeleton.el
+Harald Hanche-Olsen: changed misc.texi server.el sgml-mode.el skeleton.el
+
+Harald Jörg: wrote cperl-mode-tests.el
+and changed cperl-mode.el perl-mode.el grammar.pl cperl-bug-19709.pl
+  cperl-indent-exp.pl cperl-indent-styles.pl
 
 Harald Maier: changed w32heap.c
 
@@ -1891,14 +2120,14 @@ Harald Meland: changed gnus-art.el gnus-salt.el 
gnus-score.el
 
 Harri Kiiskinen: changed org-protocol.el ox-publish.el
 
-H. Dieter Wilhelm: changed calc-help.el maintaining.texi
+H. Dieter Wilhelm: changed calc-help.el maintaining.texi paragraphs.el
 
 Heiko Muenkel: changed b2m.c
 
-Helmut Eller: changed emacs-lisp/debug.el xref.el CTAGS.good ETAGS.good_1
-  ETAGS.good_2 ETAGS.good_3 ETAGS.good_4 ETAGS.good_5 ETAGS.good_6
-  cl-indent.el cl-macs.el elisp-mode.el ert.el etags.c etags.el eval.c
-  lisp-mode.el process-tests.el process.c test-forth.fth
+Helmut Eller: changed emacs-lisp/debug.el lisp-mode.el xref.el CTAGS.good
+  ETAGS.good_1 ETAGS.good_2 ETAGS.good_3 ETAGS.good_4 ETAGS.good_5
+  ETAGS.good_6 cl-indent.el cl-macs.el elisp-mode.el ert.el etags.c
+  etags.el eval.c process-tests.el process.c test-forth.fth
 
 Helmut Waitzmann: changed gnus-sum.el gnus.texi
 
@@ -1933,17 +2162,18 @@ Holger Schauer: wrote fortune.el
 and changed message-utils.el
 
 Hong Xu: changed etags.el simple.el maintaining.texi minibuf.texi
-  paren.el progmodes/python.el search.c editfns.c em-cmpl.el
+  tramp.texi paren.el progmodes/python.el search.c editfns.c em-cmpl.el
   emacs-mime.texi files.texi flyspell.el gnus-cite.el message.el
   parse-time-tests.el parse-time.el progmodes/cpp.el programs.texi
-  python-tests.el subr.el url-util.el and 3 other files
+  python-tests.el subr.el and 4 other files
 
 Hosoya Kei: changed TUTORIAL.ja
 
 Hovav Shacham: wrote windmove.el
 
 Howard Gayle: wrote case-table.el casetab.c iso-ascii.el iso-transl.el
-  rot13.el vt100-led.el
+  vt100-led.el
+and co-wrote rot13.el
 
 Howard Melman: changed imenu.el picture.el
 
@@ -1959,11 +2189,11 @@ Hubert Chan: changed spam.el
 
 Hugh Brown: changed progmodes/grep.el building.texi
 
-Hynek Schlawack: changed gnus-art.el gnus-sum.el
+Hugh Daschbach: changed dbus-tests.el dbus.el org.gnu.Emacs.TestDBus.xml
 
-Ian D: changed doc-view.el image-mode.el
+Hynek Schlawack: changed gnus-art.el gnus-sum.el
 
-Ian Dunn: changed eww.el vc-hg.el
+Ian Dunn: changed eww.el doc-view.el image-mode.el vc-hg.el
 
 Ian Eure: changed sql.el url-util.el
 
@@ -1976,16 +2206,24 @@ Ian Lance Taylor: changed sco4.h
 Ian T Zimmerman: wrote gametree.el
 and changed ange-ftp.el desktop.el tex-mode.el
 
-İ. Göktuğ Kayaalp: changed eww.el frames.texi mwheel.el vc-rcs.el
+Ian W: changed ispell.el
+
+İ. Göktuğ Kayaalp: changed eww.el frame.h frames.texi mwheel.el vc-rcs.el
 
 Igor Kuzmin: wrote cconv.el
 
+Igor Saprykin: changed ftfont.c
+
+Ihor Radchenko: changed fns.c
+
 Iku Iwasa: changed auth-source-pass-tests.el auth-source-pass.el
 
 Ikumi Keita: changed characters.el japan-util.el kinsoku.el minibuf.c
 
 Ilja Weis: co-wrote gnus-topic.el
 
+Illia Ostapyshyn: changed cus-start.el calc-graph.el
+
 Ilya N. Golubev: changed mm-util.el shell.el
 
 Ilya Shlyakhter: changed org.el ob-lilypond.el org-clock.el
@@ -1994,10 +2232,12 @@ Ilya Shlyakhter: changed org.el ob-lilypond.el 
org-clock.el
 Ilya Zakharevich: wrote tmm.el
 and co-wrote cperl-mode.el
 and changed w32fns.c syntax.c intervals.c syntax.h textprop.c dired.c
-  font-lock.el intervals.h regex.c regex.h search.c
+  emacs-regex.c emacs-regex.h font-lock.el intervals.h search.c
 
 Ilya Zonov: changed org-mouse.el
 
+Imran Khan: changed css-mode.el
+
 Indiana University Foundation: changed buffer.c buffer.h indent.c
   region-cache.c region-cache.h search.c xdisp.c
 
@@ -2007,15 +2247,16 @@ Inge Frick: changed easymenu.el keyboard.c view.el 
compile.el
 
 Inge Wallin: co-wrote avl-tree.el ewoc.el
 
-Ingo Lohmar: changed calendar.el calendar.texi help-fns.el
-  js-indent-align-list-continuation-nil.js js.el ls-lisp.el org-agenda.el
-  org.el
+Ingo Lohmar: changed sql.el calendar.el calendar.texi help-fns.el js.el
+  ls-lisp.el org-agenda.el org.el
 
 Inoue Seiichiro: changed xterm.c xfns.c xterm.h
 
 International Business Machines: changed emacs.c fileio.c process.c
   sysdep.c unexcoff.c
 
+Ioannis Kappas: changed package.el process-tests.el
+
 Ippei Furuhashi: changed org.texi org-colview.el org-table.el org.el
 
 Irie Shinsuke: changed subr.el
@@ -2028,6 +2269,10 @@ Ismail S: changed org-capture.el
 
 Istvan Marko: changed gnus-agent.el xfns.c
 
+Itai Seggev: changed src/Makefile.in
+
+Itai Y. Efrat: changed browse-url.el
+
 Itai Zukerman: changed mm-decode.el
 
 Ivan Andrus: changed editfns.c epg.el ffap.el find-file.el ibuf-ext.el
@@ -2046,6 +2291,8 @@ Ivan Shmakov: changed eww.el shr.el desktop.el eww.texi 
faces.el files.el
   erc-track.el facemenu.el files.texi iso-transl.el misearch.el nndoc.el
   rcirc.el simple.el smerge-mode.el and 5 other files
 
+Ivan Sokolov: changed ansi-color.el project.el
+
 Ivan Vilata i Balaguer: changed org-clock.el org.texi
 
 Ivan Zakharyaschev: changed codepage.el lread.c
@@ -2064,10 +2311,7 @@ Jack Duthen: changed which-func.el
 
 Jack Repenning: changed unexelfsgi.c
 
-Jackson Ray Hamilton: changed js.el jsx-unclosed-2.jsx jsx.jsx js.js
-  jsx-comment-string.jsx files.el jsx-align-gt-with-lt.jsx
-  jsx-indent-level.jsx jsx-quote.jsx jsx-self-closing.jsx
-  jsx-unclosed-1.jsx sgml-mode.el
+Jackson Ray Hamilton: changed js.el files.el sgml-mode.el
 
 Jack Twilley: changed message.el
 
@@ -2077,10 +2321,20 @@ Jacques Duthen: co-wrote ps-print.el ps-samp.el
 
 Jae-hyeon Park: changed fontset.el
 
-Jaesup Kwak: changed xwidget.c
+Jaesup Kwak: changed xwidget.c nsxwidget.m xwidget.el nsxwidget.h
+  xwidget.h Info.plist.in configure.ac emacs.c nsterm.m src/Makefile.in
 
 Jaeyoun Chung: changed hangul3.el hanja3.el gnus-mule.el hangul.el
 
+Jakub-W: changed calculator.el
+
+J. Alexander Branham: wrote conf-mode-tests.el
+and changed checkdoc.el indent.el text.texi bibtex.el em-rebind.el
+  esh-util.el js.el lpr.el message.el subr.el .dir-locals.el
+  auth-source-pass.el bug-reference.el comint.el conf-mode.el dired-x.el
+  dired.el ediff-diff.el ediff-help.el ediff-hook.el ediff-init.el
+  and 43 other files
+
 Jambunathan K: wrote ox-odt.el
 and co-wrote ox-html.el
 and changed org-lparse.el org.el org.texi ox.el icomplete.el
@@ -2099,6 +2353,8 @@ and changed  fns.c nxml-mode.texi window.c xselect.c
 James Cloos: wrote arabic.el
 and changed url-history.el xfns.c xterm.c xterm.h
 
+James N. V. Cash: changed tab-bar.el eldoc.el help-fns.el
+
 James R. Larus: co-wrote mh-e.el
 
 James R. Van Zandt: changed sh-script.el
@@ -2109,6 +2365,8 @@ James TD Smith: changed org.el org-colview.el org-clock.el
   org-remember.el org-plot.el org-agenda.el org-compat.el org-habit.el
   org.texi
 
+James Thomas: changed ind-util.el quail/indian.el
+
 James Troup: changed gnus-sum.el
 
 James Van Artsdalen: changed unexcoff.c
@@ -2119,7 +2377,7 @@ Jamie Zawinski: wrote mailabbrev.el tar-mode.el
 and co-wrote byte-opt.el byte-run.el bytecomp.el disass.el font-lock.el
 and changed bytecode.c mail-extr.el subr.el
 
-Jan Beich: changed configure.ac mml-smime.el
+Jan Beich: changed configure.ac efaq.texi mml-smime.el term.c
 
 Jan Böcker: wrote ol-docview.el
 and changed org.el org-docview.el org.texi
@@ -2128,7 +2386,7 @@ Jan Djärv: wrote dnd.el dynamic-setting.el x-dnd.el
 and changed gtkutil.c xterm.c nsterm.m xfns.c configure.ac nsfns.m
   xmenu.c xterm.h nsterm.h nsmenu.m gtkutil.h keyboard.c x-win.el emacs.c
   frame.c src/Makefile.in process.c xsettings.c cus-start.el nsfont.m
-  frames.texi and 304 other files
+  frames.texi and 303 other files
 
 Jan-Hein Buhrman: changed ange-ftp.el env.el
 
@@ -2146,12 +2404,19 @@ Jan Schormann: wrote solitaire.el
 
 Jan Seeger: changed ox-publish.el parse-time.el
 
-Jan Tatarik: wrote gnus-icalendar.el
+Jan Synacek: changed emacs-lisp-intro.texi minibuffer.el mwheel.el
+  vc-git.el
+
+Jan Tatarik: wrote gnus-icalendar-tests.el gnus-icalendar.el
 and changed gnus-score.el gnus-logic.el
 
 Jan Vroonhof: changed gnus-cite.el gnus-msg.el nntp.el
 
-Jared Finder: changed progmodes/compile.el
+Jared Finder: changed menu-bar.el term.c commands.texi frame.c isearch.el
+  mouse.el tmm.el wid-edit.el xt-mouse.el artist.el dispnew.c
+  ediff-wind.el ediff.el faces.el foldout.el frames.texi keyboard.c
+  lread.c mouse-drag.el progmodes/compile.el ruler-mode.el
+  and 7 other files
 
 Jarek Czekalski: changed keyboard.c callproc.c mini.texi minibuf.c
   misc.texi server.el shell.el w32fns.c xgselect.c
@@ -2161,7 +2426,7 @@ and changed add-log.el filecache.el progmodes/grep.el 
comint.el
   gnus-art.el gnus-sum.el gnus.texi ispell.el lisp-mnt.el man.el
   nnmail.el apropos.el autorevert.el checkdoc.el cperl-mode.el
   css-mode.el desktop.el em-ls.el emacs-lisp/debug.el emacsclient.1
-  executable.el and 23 other files
+  executable.el and 24 other files
 
 Jarmo Hurri: wrote ob-processing.el
 and changed org-gnus.el org-table.el org.texi
@@ -2171,10 +2436,15 @@ and changed url-auth.el
 
 Jarosław Rzeszótko: changed ielm.el url-http.el
 
+Jashank Jeremy: changed elisp-mode.el faces.el frame.c frame.el frame.h
+  xfaces.c
+
 Jason Baker: changed gnus-art.el
 
 Jason Dunsmore: changed org.el ox-html.el
 
+Jason Kim: changed shell.el
+
 Jason L. Wright: changed smtpmail.el
 
 Jason Merrill: changed gnus-sum.el add-log.el gnus-salt.el imap.el
@@ -2205,17 +2475,20 @@ Jay McCarthy: changed org-colview.el
 
 Jay Sachs: changed gnus-score.el gnus-win.el
 
-Jd Smith: co-wrote idlw-help.el idlw-shell.el idlwave.el
-
-J.D. Smith: changed idlwave.el idlw-shell.el idlw-help.el idlw-rinfo.el
-  idlw-toolbar.el comint.el idlwave.texi vc.el bibtex.el files.texi
-  hideshow.el idlw-complete-structtag.el misc.texi mouse.el
+J.D. Smith: co-wrote idlw-help.el idlw-shell.el idlwave.el
+and changed idlw-rinfo.el idlw-toolbar.el comint.el idlwave.texi vc.el
+  bibtex.el files.texi hideshow.el idlw-complete-structtag.el misc.texi
+  mouse.el
 
 Jean-Christophe Helary: changed emacs-lisp-intro.texi ns-win.el
   package-tests.el package.el strings.texi subr-x.el ucs-normalize.el
 
+Jean Forget: changed cal-french.el
+
 Jean Haidouk: changed latin-alt.el latin-post.el latin-pre.el
 
+Jean Louis: changed dired-aux.el
+
 Jean-Philippe Gravel: changed gdb-mi.el
 
 Jean-Philippe Theberge: wrote thumbs.el
@@ -2246,14 +2519,21 @@ and changed mh-e.el mh-comp.el mh-utils.el mh-mime.el 
mh-customize.el
   mh-folder.el mh-funcs.el mh-alias.el mh-seq.el mh-show.el Makefile
   bsdos4.h mh-identity.el mh-junk.el mh-letter.el
 
+Jeff Spencer: changed dired.el
+
+Jeff Walsh: changed xwidget.c
+
 Jelle Licht: changed auth-source-pass-tests.el auth-source-pass.el
 
+Jen-Chieh Shen: changed window.el
+
 Jens Krinke: changed smime.el
 
 Jens Lautenbacher: changed gnus.el
 
-Jens Lechtenboerger: changed mml-sec.el gnus-util.el message.texi
-  mml-smime.el mml1991.el mml2015.el message.el package.el package.texi
+Jens Lechtenbörger: wrote gnus-util-tests.el mml-sec-tests.el
+and changed mml-sec.el gnus-util.el message.texi mml-smime.el mml1991.el
+  mml2015.el message.el package.el package.texi
 
 Jens Petersen: wrote find-func.el
 and changed mule-cmds.el pcmpl-rpm.el
@@ -2267,15 +2547,13 @@ Jens Uwe Schmidt: changed edebug.el
 
 Jeramey Crawford: changed amdx86-64.h configure.ac
 
-Jeremie Courreges-Anglas: changed kqueue.c
-
-Jérémie Courrèges-Anglas: changed org.texi ox-latex.el
+Jérémie Courrèges-Anglas: changed kqueue.c org.texi ox-latex.el
 
 Jeremy Bertram Maitin-Shepard: changed erc.el erc-backend.el
   erc-button.el erc-track.el mml.el
 
-Jérémy Compostella: changed tramp-sh.el battery.el keyboard.c windmove.el
-  window.el xdisp.c
+Jérémy Compostella: changed tramp-sh.el mml.el battery.el keyboard.c
+  windmove.el window.el xdisp.c
 
 Jeremy Moore: changed hideif.el
 
@@ -2300,6 +2578,8 @@ and changed gnus-sum.el gnus-art.el message.el 
gnus-group.el gnus-msg.el
 
 Jhair Tocancipa Triana: changed gnus-audio.el
 
+Jiacai Liu: changed project.el
+
 Jiajie Chen: changed button.el
 
 Jihyun Cho: wrote hangul.el hanja-util.el
@@ -2309,7 +2589,7 @@ and co-wrote pcvs.el wyse50.el
 and changed keyboard.c xterm.c xfns.c window.c process.c ymakefile
   dispnew.c xdisp.c sysdep.c configure.ac lisp.h Makefile.in keymap.c
   configure make-dist buffer.c frame.c screen.c simple.el alloc.c emacs.c
-  and 402 other files
+  and 403 other files
 
 Jim Diamond: changed server.el
 
@@ -2321,13 +2601,20 @@ Jim Meyering: changed lread.c make-docfile.c w32.c 
w32font.c copyright.el
   alloc.c artist.el autoinsert.el buffer.h callproc.c character.h
   charset.c configure and 55 other files
 
-Jimmy Aguilar Mena: changed xdisp.c xfaces.c dispextern.h face-remap.el
-  hl-line.el icomplete.el xwidget.c
+Jimmy Aguilar Mena: changed xdisp.c xfaces.c dispextern.h mouse.el
+  face-remap.el hl-line.el icomplete.el uniquify.el xwidget.c
 
-Jimmy Yuen Ho Wong: changed nsm.el gnutls.c gnutls.el net-utils.el
+Jimmy Yuen Ho Wong: changed nsm.el gnutls.c gnutls.el disass.el
+  net-utils.el
 
 Jim Paris: changed process.c
 
+Jim Porter: changed delsel.el ansi-color-tests.el ansi-color.el
+  bindings.el term-tests.el term.el tramp.el callproc.c
+  dichromacy-theme.el diff-mode.el files-tests.el gdb-mi.el grep-tests.el
+  ispell.el leuven-theme.el man.el menu-bar.el misterioso-theme.el
+  process.c process.h progmodes/grep.el and 6 other files
+
 Jim Radford: changed gnus-start.el
 
 Jim Salem: wrote completion.el
@@ -2363,12 +2650,12 @@ Joanna Pluta: changed TUTORIAL.pl
 João Cachopo: changed spam.el
 
 João Távora: wrote elec-pair.el electric-tests.el flymake-cc.el
-  jsonrpc-tests.el jsonrpc.el message-tests.el
-and changed flymake.el flymake-proc.el icomplete.el minibuffer.el
-  flymake-tests.el flymake.texi elisp-mode.el flymake-elisp.el
-  electric.el flymake-ui.el text.texi json-tests.el tex-mode.el
-  errors-and-warnings.c json.c xref.el auth-source-pass.el linum.el
-  maintaining.texi message.el progmodes/python.el and 30 other files
+  jsonrpc-tests.el jsonrpc.el message-tests.el shorthands.el
+and changed flymake.el icomplete.el minibuffer.el flymake-proc.el
+  eldoc.el elisp-mode.el flymake.texi flymake-tests.el flymake-elisp.el
+  electric.el elisp-mode-tests.el lread.c flymake-ui.el
+  progmodes/python.el text.texi xref.el json-tests.el project.el
+  tex-mode.el buffers.texi cfengine.el and 55 other files
 
 Jochen Hein: changed gnus-art.el
 
@@ -2438,6 +2725,8 @@ John Anthony: changed inf-lisp.el ruby-mode.el 
text-mode.el
 
 John Basrai: changed man.el
 
+John Cummings: changed files.el
+
 John F. Carr: changed dired.c
 
 John Fremlin: changed gnus-msg.el message.el
@@ -2502,8 +2791,12 @@ John Yates: changed hideshow.el
 
 Jon Anders Skorpen: changed ox-publish.el
 
-Jonas Bernoulli: changed eieio.el button.el cus-edit.el ido.el
-  lisp-mnt.el tabulated-list.el tips.texi
+Jonas Bernoulli: wrote transient.el
+and changed epa.el epa-file.el lisp-mnt.el tips.texi dired-aux.el
+  dired-x.el dired.el eieio.el epa-dired.el font-lock.el
+  progmodes/compile.el simple.el allout.el button.el comint.el
+  cus-edit.el eldoc.el emacs-module-tests.el epa-hook.el epg-config.el
+  epg.el and 9 other files
 
 Jonas Hoersch: changed org-inlinetask.el org.el
 
@@ -2534,10 +2827,11 @@ Jonathan Tomer: changed files-tests.el files.el 
tramp-tests.el
 
 Jonathan Vail: changed vc.el
 
-Jonathan Yavner: wrote ses.el tcover-ses.el tcover-unsafep.el
-  testcover.el unsafep.el
+Jonathan Yavner: wrote ses.el tcover-ses.el testcover.el unsafep-tests.el
+  unsafep.el
 and changed ses.texi ses-example.ses edebug.el editfns.c files.el
-  functions.texi misc/Makefile.in subr.el variables.texi
+  functions.texi misc/Makefile.in subr.el tcover-unsafep.el
+  variables.texi
 
 Jon Ericson: changed gnus.el spam-report.el
 
@@ -2560,9 +2854,11 @@ and changed erc.el erc-track.el erc-backend.el 
erc-match.el misc.el
   erc-ibuffer.el erc-macs.el erc-page.el erc-pcomplete.el erc-sound.el
   minibuffer.el and 15 other files
 
-Jose A. Ortega Ruiz: changed gnus-sum.el url-http.el
+Jorge P. De Morais Neto: changed TUTORIAL cl.texi
+
+Jose A. Ortega Ruiz: changed mixal-mode.el gnus-sum.el url-http.el
 
-Jose E. Marchesi: changed ada-mode.el gomoku.el simple.el smtpmail.el
+Jose E. Marchesi: changed gomoku.el simple.el smtpmail.el
 
 José L. Doménech: changed dired-aux.el
 
@@ -2594,18 +2890,22 @@ Jostein Kjønigsen: changed nxml-mode.el 
progmodes/compile.el
 
 Jouni K. Seppänen: changed gnus.texi nnimap.el mm-url.el
 
+J. Scott Berg: changed xterm.c
+
+Juan José García-Ripoll: changed w32image.c configure.ac image.c
+  w32-win.el w32.c w32term.c w32term.h
+
 Juan León Lahoz García: wrote wdired.el
 and changed files.el perl-mode.el
 
-Juanma Barranquero: wrote emacs-lock.el frameset.el help-tests.el
-  keymap-tests.el
+Juanma Barranquero: wrote emacs-lock.el frameset.el
+and co-wrote help-tests.el keymap-tests.el
 and changed subr.el desktop.el w32fns.c faces.el simple.el emacsclient.c
   files.el server.el bs.el help-fns.el xdisp.c org.el w32term.c w32.c
   buffer.c keyboard.c ido.el image.c window.c eval.c allout.el
-  and 1235 other files
+  and 1226 other files
 
-Juan Pechiar: wrote ob-mscgen.el
-and changed ob-octave.el
+Juan Pechiar: changed ob-octave.el
 
 Juergen Kreileder: changed imap.el nnimap.el
 
@@ -2615,7 +2915,7 @@ Jules Tamagnan: changed progmodes/python.el
 
 Julian Gehring: changed org.texi orgcard.tex
 
-Julian Scheid: changed tramp.el color.el
+Julian Scheid: changed tramp.el cl-extra.el color.el ert.el
 
 Julien Avarre: changed gnus-fun.el
 
@@ -2635,6 +2935,8 @@ Jun Hao: changed auth-source.el desktop.el
 
 Junio Hamano: changed window.el
 
+Junya Takahashi: changed epa-file.el
+
 Jure Cuhalev: changed ispell.el
 
 Jürgen Hartmann: changed window.el
@@ -2643,12 +2945,12 @@ Jürgen Hötzel: wrote tramp-adb.el
 and changed tramp-gvfs.el tramp-sh.el comint.el em-unix.el esh-util.el
   tramp-cache.el tramp.el url-handlers.el wid-edit.el
 
-Juri Linkov: wrote files-x.el misearch.el replace-tests.el tab-bar.el
-  tab-line.el
-and changed isearch.el info.el simple.el replace.el dired.el dired-aux.el
-  progmodes/grep.el progmodes/compile.el startup.el subr.el diff-mode.el
-  files.el menu-bar.el faces.el bindings.el display.texi image-mode.el
-  desktop.el comint.el minibuffer.el search.texi and 419 other files
+Juri Linkov: wrote compose.el files-x.el misearch.el repeat-tests.el
+  replace-tests.el tab-bar-tests.el tab-bar.el tab-line.el
+and changed isearch.el simple.el info.el replace.el dired.el dired-aux.el
+  progmodes/grep.el subr.el window.el image-mode.el mouse.el diff-mode.el
+  files.el menu-bar.el minibuffer.el progmodes/compile.el startup.el
+  faces.el vc.el display.texi search.texi and 444 other files
 
 Jussi Lahdenniemi: changed w32fns.c ms-w32.h msdos.texi w32.c w32.h
   w32console.c w32heap.c w32inevt.c w32term.h
@@ -2661,7 +2963,7 @@ Justin Gordon: changed ox-md.el
 
 Justin Sheehy: changed gnus-sum.el nntp.el
 
-Justin Timmons: changed progmodes/python.el
+Justin Timmons: changed apropos.el progmodes/python.el
 
 Justus Piater: changed org-agenda.el smtpmail.el
 
@@ -2672,7 +2974,7 @@ and co-wrote longlines.el tramp-sh.el tramp.el
 and changed message.el gnus-agent.el gnus-sum.el files.el nnmail.el
   tramp.texi nntp.el gnus.el simple.el ange-ftp.el dired.el paragraphs.el
   bindings.el files.texi gnus-art.el gnus-group.el man.el INSTALL
-  Makefile.in crisp.el fileio.c and 44 other files
+  Makefile.in crisp.el fileio.c and 45 other files
 
 Kailash C. Chowksey: changed HELLO ind-util.el kannada.el knd-util.el
   lisp/Makefile.in loadup.el
@@ -2681,13 +2983,15 @@ Kai Tetzlaff: changed ox-publish.el url-http.el
 
 Kalle Kankare: changed image.c
 
-Kalle Olavi Niemitalo: changed keyboard.c
+Kalle Olavi Niemitalo: changed xselect.c keyboard.c xfns.c xterm.h
 
 Kanematsu Daiji: changed nnimap.el
 
 Kan-Ru Chen: changed nnir.el ecomplete.el window.el gnus-diary.el
   gnus.texi ibuf-ext.el nnmbox.el nroff-mode.el
 
+Kapuze Martin: changed python.wy
+
 Karel Klíč: changed fileio.c files.el configure.ac eval.c ftfont.c lisp.h
   src/Makefile.in text.texi tramp.el
 
@@ -2705,8 +3009,8 @@ Karl Eichwalder: changed Makefile.in add-log.el 
bookmark.el dired-aux.el
 
 Karl Fogel: wrote bookmark.el mail-hist.el saveplace.el
 and co-wrote pcvs.el
-and changed simple.el files.el doc-view.el image-mode.el info.el
-  isearch.el vc-svn.el CONTRIBUTE INSTALL autogen.sh editfns.c
+and changed simple.el files.el CONTRIBUTE doc-view.el image-mode.el
+  info.el isearch.el vc-svn.el INSTALL autogen.sh editfns.c
   internals.texi menu-bar.el simple-test.el subr.el tex-mode.el
   thingatpt.el INSTALL.REPO comint.el configure configure.ac
   and 21 other files
@@ -2736,6 +3040,8 @@ Károly Lőrentey: changed xfns.c bindings.el keyboard.c 
menu-bar.el
   x-win.el xdisp.c xt-mouse.el xterm.c xterm.h .gdbinit AT386.el HELLO
   README and 101 other files
 
+Karthik Chikmagalur: changed pcmpl-unix.el
+
 Katsuhiro Hermit Endo: changed gnus-group.el gnus-spec.el
 
 Katsumi Yamaoka: wrote canlock.el
@@ -2744,10 +3050,10 @@ and changed gnus-art.el gnus-sum.el message.el 
mm-decode.el gnus.texi
   shr.el rfc2047.el gnus-start.el gnus.el nntp.el gnus-agent.el nnrss.el
   mm-uu.el nnmail.el emacs-mime.texi and 161 other files
 
-Kaushal Modi: changed files.el isearch.el apropos.el calc-yank.el
-  custom.texi desktop.el ediff-diff.el eww.el ffap.el maintaining.texi
-  printing.el ps-print.el tips.texi variables.texi vc-hooks.el
-  vc1-xtra.texi woman.el
+Kaushal Modi: changed dired-aux.el files.el isearch.el apropos.el
+  calc-yank.el custom.texi desktop.el dired.el dired.texi ediff-diff.el
+  eww.el ffap.el maintaining.texi printing.el ps-print.el tips.texi
+  variables.texi vc-hooks.el vc1-xtra.texi woman.el
 
 Kaushik Srenevasan: changed gdb-mi.el
 
@@ -2755,8 +3061,8 @@ Kaveh R. Ghazi: changed delta88k.h xterm.c
 
 Kayvan Sylvan: changed supercite.el
 
-Kazuhiro Ito: changed coding.c flow-fill.el font.c keyboard.c
-  make-mode.el net/starttls.el xdisp.c
+Kazuhiro Ito: changed coding.c uudecode.el flow-fill.el font.c
+  japan-util.el keyboard.c make-mode.el net/starttls.el xdisp.c
 
 Kazushi Marukawa: changed filelock.c hexl.c profile.c unexalpha.c
 
@@ -2769,6 +3075,8 @@ Keitaro Miyazaki: changed re-builder.el
 Keith Amidon: co-wrote auth-source-pass.el
 and changed auth-source-pass-tests.el
 
+Keith David Bershatsky: changed ns-win.el tex-mode.el
+
 Keith Gabryelski: wrote hexl.c hexl.el
 
 Keith Packard: changed font.c
@@ -2777,13 +3085,13 @@ Kelly Dean: changed simple.el help-mode.el desktop.el 
files.el lisp.el
   register.el easy-mmode.el fileio.c help-fns.el help-macro.el help.el
   keyboard.c package-x.el rect.el windmove.el winner.el
 
-Kelvin White: changed erc.el erc-pcomplete.el erc.texi NEWS.24
-  erc-backend.el erc-ring.el erc-stamp.el
+Kelvin White: changed erc.el erc-pcomplete.el erc.texi erc-backend.el
+  erc-ring.el erc-stamp.el
 
 Ken Brown: changed configure.ac gmalloc.c sheap.c emacs.c w32fns.c
   fileio.c w32term.c unexcw.c conf_post.h cygwin.h filenotify-tests.el
-  lisp.h browse-url.el dispextern.h emacs.rc.in fileio-tests.el frame.c
-  image.c keyboard.c profiler.c src/Makefile.in and 48 other files
+  src/Makefile.in lisp.h sysdep.c browse-url.el dispextern.h emacs.rc.in
+  fileio-tests.el frame.c image.c keyboard.c and 50 other files
 
 Ken Brush: changed emacsclient.c
 
@@ -2793,7 +3101,7 @@ and co-wrote ps-def.el ps-mule.el ps-print.el ps-samp.el 
quail.el
 and changed coding.c mule-cmds.el mule.el fontset.c charset.c xdisp.c
   font.c fontset.el xterm.c fileio.c mule-conf.el ftfont.c characters.el
   fns.c mule-diag.el coding.h charset.h ccl.c xfaces.c editfns.c
-  composite.c and 389 other files
+  composite.c and 387 other files
 
 Kenichi Okada: co-wrote sasl-cram.el sasl-digest.el
 
@@ -2828,7 +3136,7 @@ Kevin Blake: changed font-lock.el ring.el
 
 Kevin Broadey: wrote foldout.el
 
-Kevin Brubeck Unhammer: changed erc-track.el
+Kevin Brubeck Unhammer: changed erc-join.el erc-track.el erc.el
 
 Kevin Christian: changed gnus-score.el
 
@@ -2851,7 +3159,9 @@ and changed gnus-agent.el gnus-sum.el gnus-start.el 
gnus-int.el nntp.el
 
 Kevin Layer: changed mml.el w32proc.c
 
-Kévin Le Gouguec: changed font-lock.el font-lock-tests.el
+Kévin Le Gouguec: changed font-lock.el gnus-sum.el progmodes/python.el
+  dired-aux-tests.el dired-aux.el electric-tests.el font-lock-tests.el
+  gnus.el message.texi project.el python-tests.el sh-script.el shr.el
 
 Kevin Rodgers: changed compile.el mailabbrev.el progmodes/compile.el
   dired-x.el files.el ange-ftp.el byte-opt.el desktop.el diff-mode.el
@@ -2863,14 +3173,16 @@ Kevin Ryde: wrote info-xref.el
 and changed info-look.el info.el checkdoc.el cl.texi compilation.txt
   etags.c arc-mode.el ffap.el gnus-art.el gnus-sum.el mule.el os.texi
   progmodes/compile.el woman.el browse-url.el copyright.el dig.el
-  files.el flyspell.el keyboard.c mailcap.el and 86 other files
+  files.el flyspell.el keyboard.c mailcap.el and 88 other files
+
+Kien Nguyen: changed comp.c
 
 Kim F. Storm: wrote bindat.el cua-base.el cua-gmrk.el cua-rect.el ido.el
   keypad.el kmacro.el
 and changed xdisp.c dispextern.h process.c simple.el window.c keyboard.c
   xterm.c dispnew.c subr.el w32term.c lisp.h fringe.c display.texi
   macterm.c alloc.c fns.c xfaces.c keymap.c xfns.c xterm.h .gdbinit
-  and 249 other files
+  and 248 other files
 
 Kimit Yada: changed copyright.el
 
@@ -2884,6 +3196,8 @@ Kirk Kelsey: changed make-mode.el vc-hg.el
 
 Kishore Kumar: changed terminal.el
 
+Kiso Katsuyuki: changed tab-line.el
+
 Klaus Straubinger: changed url-http.el url-history.el pcmpl-rpm.el
   url-cookie.el url.el
 
@@ -2906,16 +3220,18 @@ Koichi Arakawa: changed tramp-sh.el w32proc.c
 Konrad Hinsen: wrote ol-eshell.el
 and changed ob-python.el
 
-Konstantin Kharlamov: changed ada-mode.el calc-aent.el calc-ext.el
-  calc-lang.el cc-mode.el cperl-mode.el css-mode.el cua-rect.el
-  diff-mode.el dnd.el ebnf-abn.el ebnf-dtd.el ebnf-ebx.el
-  emacs-module-tests.el epg.el faces.el gnus-art.el gtkutil.c hideif.el
-  htmlfontify.el lex.el and 24 other files
+Konstantin Kharlamov: changed smerge-mode.el diff-mode.el files.el
+  autorevert.el calc-aent.el calc-ext.el calc-lang.el cc-mode.el
+  cperl-mode.el css-mode.el cua-rect.el dnd.el ebnf-abn.el ebnf-dtd.el
+  ebnf-ebx.el emacs-module-tests.el epg.el faces.el gnus-art.el gtkutil.c
+  hideif.el and 26 other files
 
 Konstantin Kliakhandler: changed org-agenda.el
 
 Konstantin Novitsky: changed progmodes/python.el
 
+Kristian Hole: changed sql.el
+
 Kristoffer Grönlund: wrote wombat-theme.el
 
 Krzysztof Jurewicz: changed erc.el secrets.el
@@ -2935,11 +3251,12 @@ and changed battery.el ielm.el octave-hlp.el 
octave-mode.texi term.el
 Kurt Swanson: changed gnus-art.el gnus-salt.el gnus-sum.el gnus-ems.el
   gnus-group.el gnus-msg.el gnus-score.el gnus-util.el nnmail.el window.c
 
+Kyle Hubert: changed ediff-util.el
+
 Kyle Jones: wrote life.el
 and changed saveconf.el buffer.c mail-utils.el sendmail.el
 
-Kyle Meyer: wrote ob-stan.el
-and changed org-compat.el ox.el
+Kyle Meyer: changed org-compat.el ox.el
 
 Kyotaro Horiguchi: changed coding.c indent.c
 
@@ -2968,29 +3285,29 @@ and co-wrote dabbrev.el imenu.el
 Lars Ljung: changed esh-ext.el isearch.el
 
 Lars Magne Ingebrigtsen: wrote compface.el decompress-tests.el dns.el
-  dom.el ecomplete.el eww.el exif.el format-spec.el gnus-agent.el
-  gnus-art.el gnus-async.el gnus-bcklg.el gnus-cache.el gnus-cloud.el
-  gnus-demon.el gnus-draft.el gnus-dup.el gnus-eform.el gnus-fun.el
-  gnus-group.el gnus-html.el gnus-int.el gnus-logic.el gnus-picon.el
-  gnus-range.el gnus-salt.el gnus-spec.el gnus-srvr.el gnus-start.el
-  gnus-sum.el gnus-undo.el gnus-util.el gnus-uu.el gnus-win.el
-  ietf-drums.el image-converter.el mail-parse.el mail-prsvr.el
-  mail-source.el message.el messcompat.el mm-archive.el mm-view.el mml.el
-  netrc.el network-stream-tests.el network-stream.el nnagent.el nndir.el
-  nndraft.el nngateway.el nnmail.el nnoo.el nntp.el nnweb.el nsm.el
-  parse-time-tests.el puny.el qp.el rfc2045.el rfc2104-tests.el
-  rfc2231.el rtree.el score-mode.el shr-tests.el shr.el spam.el
-  text-property-search-tests.el text-property-search.el url-domsuf.el
-  url-queue.el
+  dom.el ecomplete.el erc-tests.el eww.el exif.el format-spec.el
+  gnus-agent.el gnus-art.el gnus-async.el gnus-bcklg.el gnus-cache.el
+  gnus-cloud.el gnus-demon.el gnus-draft.el gnus-dup.el gnus-eform.el
+  gnus-fun.el gnus-group.el gnus-html.el gnus-int.el gnus-logic.el
+  gnus-picon.el gnus-range.el gnus-salt.el gnus-spec.el gnus-srvr.el
+  gnus-start.el gnus-sum.el gnus-undo.el gnus-util.el gnus-uu.el
+  gnus-win.el ietf-drums.el image-converter.el mail-parse.el
+  mail-prsvr.el mail-source.el message.el messcompat.el mm-archive.el
+  mm-view.el mml.el netrc.el network-stream-tests.el network-stream.el
+  nnagent.el nndir.el nndraft.el nngateway.el nnmail.el nnoo.el nntp.el
+  nnweb.el nsm.el parse-time-tests.el puny.el qp.el rfc2045.el
+  rfc2104-tests.el rfc2231.el rtree.el score-mode.el shr-tests.el shr.el
+  spam.el text-property-search-tests.el text-property-search.el
+  url-domsuf.el url-queue.el
 and co-wrote gnus-kill.el gnus-mh.el gnus-msg.el gnus-score.el
   gnus-topic.el gnus.el gssapi.el mailcap.el mm-bodies.el mm-decode.el
   mm-encode.el mm-util.el nnbabyl.el nndoc.el nneething.el nnfolder.el
   nnheader.el nnimap.el nnmbox.el nnmh.el nnml.el nnspool.el nnvirtual.el
   rfc2047.el svg.el time-date.el
-and changed gnus.texi process.c subr.el simple.el files.el gnutls.c
-  gnus-ems.el smtpmail.el display.texi url-http.el auth-source.el
-  gnus-cite.el pop3.el dired.el edebug.el gnus-xmas.el text.texi image.el
-  image.c gnutls.el nnrss.el and 651 other files
+and changed gnus.texi simple.el subr.el files.el process.c text.texi
+  display.texi dired.el gnutls.c gnus-ems.el smtpmail.el help-fns.el
+  auth-source.el url-http.el edebug.el gnus-cite.el image.el pop3.el
+  dired-aux.el fns.c image.c and 860 other files
 
 Lars Rasmusson: changed ebrowse.c
 
@@ -3016,15 +3333,15 @@ Lee Duhem: changed eval.c
 
 Leigh Stoller: changed emacsclient.c server.el
 
-Lele Gaifax: changed progmodes/python.el flymake.el python-tests.el
-  TUTORIAL.it flymake-proc.el flymake.texi isearch.el
+Lele Gaifax: changed TUTORIAL.it progmodes/python.el flymake.el
+  python-tests.el flymake-proc.el flymake.texi isearch.el
 
 Lennart Borgman: co-wrote ert-x.el
-and changed nxml-mode.el tutorial.el re-builder.el window.el ada-xref.el
-  buff-menu.el emacs-lisp/debug.el emacsclient.c filesets.el flymake.el
-  help-fns.el isearch.el linum.el lisp-mode.el lisp.el mouse.el
-  recentf.el remember.el replace.el ruby-mode.el shell.el
-  and 4 other files
+and changed nxml-mode.el tutorial.el re-builder.el window.el buff-menu.el
+  emacs-lisp/debug.el emacsclient.c filesets.el flymake.el help-fns.el
+  isearch.el linum.el lisp-mode.el lisp.el mouse.el progmodes/grep.el
+  recentf.el remember.el replace.el reveal.el ruby-mode.el
+  and 5 other files
 
 Lennart Staflin: changed dired.el diary-ins.el diary-lib.el tq.el xdisp.c
 
@@ -3042,8 +3359,12 @@ Leonardo Nobrega: changed progmodes/python.el
 
 Leonard Randall: changed org-bibtex.el reftex-parse.el
 
+Leon Vack: changed erc-services.el
+
 Leo P. White: changed eieio-custom.el
 
+Leo Vivier: changed dired-aux.el
+
 Levin Du: changed parse-time.el org-clock.el
 
 Le Wang: changed org-src.el comint.el hilit-chg.el misc.el
@@ -3056,15 +3377,20 @@ Liam Stitt: changed url-file.el url-vars.el
 
 Liang Wang: changed etags.el
 
+Liāu, Kiong-Gē 廖宮毅: changed comp.c mingw-cfg.site
+
 Lixin Chin: changed bibtex.el
 
 Lloyd Zusman: changed mml.el pgg-gpg.el
 
 Lluís Vilanova: changed ede/linux.el
 
+Logan Perkins: changed keyboard.c
+
 Luca Capello: changed mm-encode.el
 
-Lucas Werkmeister: changed emacs.c emacs.service
+Lucas Werkmeister: changed emacs.c emacs.service nxml-mode.el
+  sgml-mode.el
 
 Lucid, Inc.: changed byte-opt.el byte-run.el bytecode.c bytecomp.el
   delsel.el disass.el faces.el font-lock.el mailabbrev.el select.el
@@ -3074,7 +3400,7 @@ Luc Teirlinck: wrote help-at-pt.el
 and changed files.el autorevert.el cus-edit.el subr.el simple.el
   frames.texi startup.el display.texi files.texi dired.el comint.el
   modes.texi custom.texi emacs.texi fns.c frame.el ielm.el minibuf.texi
-  variables.texi buffers.texi commands.texi and 211 other files
+  variables.texi buffers.texi commands.texi and 212 other files
 
 Ludovic Courtès: wrote nnregistry.el
 and changed configure.ac gnus.texi loadup.el
@@ -3090,9 +3416,9 @@ Lukas Huonker: changed tetris.el
 Łukasz Jędrzejewski: changed auth-source-pass-tests.el
   auth-source-pass.el
 
-Łukasz Stelmach: changed erc.el ps-print.el cookie1.el gnus-group.el
-  gtkutil.c message.el org-agenda.el org-bbdb.el org.el org.texi
-  ox-html.el ox.el simple.el
+Łukasz Stelmach: changed erc.el message.el ps-print.el cookie1.el
+  gnus-group.el gtkutil.c org-agenda.el org-bbdb.el org.el org.texi
+  ox-html.el ox.el shr.el simple.el
 
 Luke Lee: changed hideif.el
 
@@ -3102,7 +3428,7 @@ Lute Kamstra: changed modes.texi emacs-lisp/debug.el 
generic-x.el
   generic.el font-lock.el simple.el subr.el battery.el debugging.texi
   easy-mmode.el elisp.texi emacs-lisp/generic.el hl-line.el info.el
   octave.el basic.texi bindings.el calc.el cmdargs.texi diff-mode.el
-  doclicense.texi and 290 other files
+  doclicense.texi and 288 other files
 
 Lynn Slater: wrote help-macro.el
 
@@ -3123,12 +3449,14 @@ Malcolm Purvis: changed spam-stat.el
 
 Manoj Srivastava: wrote manoj-dark-theme.el
 
-Manuel Giraud: changed ox-html.el ox-publish.el org.texi
+Manuel Giraud: changed ox-html.el ox-publish.el vc.el idlwave.el org.texi
 
 Manuel Gómez: changed speedbar.el
 
 Manuel Serrano: wrote flyspell.el
 
+Manuel Uberti: changed project.el
+
 Marcelo Toledo: changed TUTORIAL.pt_BR TUTORIAL.cn TUTORIAL.cs
   TUTORIAL.de TUTORIAL.es TUTORIAL.fr TUTORIAL.it TUTORIAL.ja TUTORIAL.ko
   TUTORIAL.pl TUTORIAL.ro TUTORIAL.ru TUTORIAL.sk TUTORIAL.sl TUTORIAL.th
@@ -3144,11 +3472,13 @@ and changed battery.el doc-view.el elisp-mode-tests.el 
fill.el lisp.el
 
 Marc Lefranc: changed gnus-art.el
 
+Marco Centurion: changed dired-aux.el files.el files.texi
+
 Marco Melgazzi: changed term.el
 
 Marco Wahl: wrote ol-eww.el
-and changed org-agenda.el page-ext.el org.el scroll-lock-tests.el
-  scroll-lock.el
+and changed org-agenda.el page-ext.el ffap.el kmacro.el kmacro.texi
+  org.el scroll-lock-tests.el scroll-lock.el
 
 Marco Walther: changed mips-siemens.h unexelfsni.c unexsni.c
 
@@ -3178,10 +3508,11 @@ and changed erc.el erc-dcc.el erc-speak.el Makefile 
erc-bbdb.el
   and 48 other files
 
 Mark A. Hershberger: changed xml.el nnrss.el mm-url.el cperl-mode.el
-  isearch.el vc-bzr.el  NXML-NEWS cc-mode.texi compilation.txt ede.texi
+  isearch.el vc-bzr.el  OpenDocument-schema-v1.3+libreoffice.rnc
+  OpenDocument-schema-v1.3.rnc cc-mode.texi compilation.txt ede.texi
   eieio.texi esh-mode.el flymake.el gnus-group.el menu-bar.el
   misc/Makefile.in nxml-mode.texi progmodes/compile.el
-  progmodes/python.el programs.texi and 8 other files
+  progmodes/python.el and 10 other files
 
 Mark Davies: changed amdx86-64.h configure configure.ac hp800.h
   lib-src/Makefile.in netbsd.h ralloc.c sh3el.h sort.el
@@ -3217,9 +3548,9 @@ Mark Osbourne: changed hexl-mode.el
 
 Mark Oteiza: wrote mailcap-tests.el md4-tests.el xdg-tests.el xdg.el
 and changed image-dired.el dunnet.el mpc.el eww.el json.el calc-units.el
-  subr-x.el subr.el lcms.c message.el tex-mode.el cl-macs.el cl.texi
-  ibuffer.el lcms-tests.el mailcap.el cl-print.el emacs-lisp/chart.el
-  files.el htmlfontify.el pcase.el and 178 other files
+  lcms.c subr-x.el subr.el message.el tex-mode.el cl-macs.el cl.texi
+  ibuffer.el lcms-tests.el mailcap.el progmodes/python.el cl-print.el
+  eldoc.el emacs-lisp/chart.el files.el and 173 other files
 
 Mark Plaksin: changed nnrss.el term.el
 
@@ -3242,7 +3573,7 @@ and changed cus-edit.el files.el progmodes/compile.el 
rmail.el
   tex-mode.el find-func.el rmailsum.el simple.el cus-dep.el dired.el
   mule-cmds.el rmailout.el checkdoc.el configure.ac custom.el emacsbug.el
   gnus.el help-fns.el ls-lisp.el mwheel.el sendmail.el
-  and 126 other files
+  and 125 other files
 
 Markus Sauermann: changed lisp-mode.el
 
@@ -3267,6 +3598,8 @@ Martin Buchholz: changed etags.c
 
 Martin Jesper Low Madsen: changed auth-source.el
 
+Martin Joerg: changed tramp-sh.el
+
 Martin J. Reed: changed ldap.el
 
 Martin Kletzander: changed erc-join.el
@@ -3283,9 +3616,9 @@ Martin Neitzel: changed supercite.el
 Martin Pohlack: changed iimage.el pc-select.el
 
 Martin Rudalics: changed window.el window.c windows.texi frame.c xdisp.c
-  w32fns.c xterm.c frames.texi w32term.c xfns.c frame.el display.texi
-  help.el buffer.c window.h cus-start.el frame.h dispnew.c mouse.el
-  nsfns.m gtkutil.c and 209 other files
+  xterm.c frames.texi w32fns.c w32term.c xfns.c frame.el display.texi
+  frame.h cus-start.el help.el buffer.c window.h mouse.el dispnew.c
+  nsfns.m gtkutil.c and 212 other files
 
 Martin Stjernholm: wrote cc-bytecomp.el
 and co-wrote cc-align.el cc-cmds.el cc-compat.el cc-defs.el cc-engine.el
@@ -3304,7 +3637,9 @@ and changed ob-emacs-lisp.el
 
 Masahiko Sato: wrote vip.el
 
-Masahiro Nakamura: changed ns-win.el nsterm.m
+Masahiro Nakamura: changed mpc.el tramp.texi nsterm.m w32fns.c keyboard.c
+  ns-win.el nsmenu.m nsterm.h package.el refcard.tex shortdoc.el
+  strokes.el
 
 Masanobu Umeda: wrote metamail.el rmailsort.el timezone.el
 and co-wrote gnus-kill.el gnus-mh.el gnus-msg.el gnus.el nnbabyl.el
@@ -3328,7 +3663,7 @@ Masayuki Ataka: changed texinfmt.el texinfo.el 
characters.el cmuscheme.el
 Masayuki Fujii: changed dnd.el w32-win.el
 
 Mathias Dahl: wrote image-dired.el
-and changed tumme.el dired.el dired.texi
+and changed tumme.el dired.el dired.texi abbrev.el abbrevs.texi
 
 Mathias Megyei: changed lisp/Makefile.in
 
@@ -3336,7 +3671,12 @@ Mathieu Othacehe: changed tramp-adb.el
 
 Mats Lidell: changed TUTORIAL.sv european.el gnus-art.el org-element.el
 
-Matt Armstrong: changed gnus-topic.el gnus.el imap.el message.el shell.el
+Matt Armstrong: changed display.texi filelock-tests.el buffer.c
+  commands.texi filelock.c files.el gnus-topic.el gnus.el imap.el
+  lisp-mnt.el map-tests.el marker.c message.el shell.el simple.el
+  userlock.el
+
+Matt Beshara: changed js.el nsfns.m
 
 Matt Bisson: changed xterm.c
 
@@ -3344,7 +3684,7 @@ Matt Curtis: changed pulse.el
 
 Matt Fidler: changed package.el
 
-Matthew Bauer: changed comint.el startup.el
+Matthew Bauer: changed comint.el shell.el startup.el
 
 Matthew Carter: changed sql.el
 
@@ -3364,12 +3704,16 @@ Matthew Mundell: changed calendar.texi diary-lib.el 
files.texi
 
 Matthew Newton: changed imenu.el
 
+Matthew White: changed buffer.c bookmark-tests.el bookmark.el
+  test-list.bmk
+
 Matthias Dahl: changed faces.el process.c process.h
 
 Matthias Förste: changed files.el
 
-Matthias Meulien: changed bookmark.el progmodes/python.el buff-menu.el
-  prog-mode.el simple.el tabify.el vc-dir.el vc-git.el
+Matthias Meulien: changed bookmark.el progmodes/python.el vc-dir.el
+  buff-menu.el prog-mode.el simple.el tab-bar.el tabify.el vc-git.el
+  vc-tests.el
 
 Matthias Wiehl: changed gnus.el
 
@@ -3384,11 +3728,13 @@ Matt Hodges: changed textmodes/table.el faces.el 
iswitchb.el simple.el
   edebug.texi eldoc.el em-hist.el em-pred.el fixit.texi icon.el ido.el
   locate.el paragraphs.el pcomplete.el repeat.el and 3 other files
 
-Mattias Engdegård: changed rx.el searching.texi rx-tests.el autorevert.el
-  calc-tests.el regexp-opt.el filenotify.el subr.el files.el
-  progmodes/compile.el mouse.el bytecomp.el compile-tests.el
-  autorevert-tests.el byte-opt.el bytecomp-tests.el calc-alg.el
-  compilation.txt dired.el font.c regex-emacs.c and 161 other files
+Mattias Engdegård: changed byte-opt.el rx.el rx-tests.el searching.texi
+  bytecomp-tests.el bytecomp.el calc-tests.el progmodes/compile.el
+  subr.el autorevert.el gdb-mi.el files.el regex-emacs-tests.el mouse.el
+  regexp-opt.el replace.el calc.el coding.c filenotify.el regex-emacs.c
+  calc-ext.el and 537 other files
+
+Mattias M: changed asm-mode-tests.el asm-mode.el
 
 Matt Lundin: changed org-agenda.el org.el org-bibtex.el org-footnote.el
   ox-publish.el org-bbdb.el org-datetree.el org-gnus.el
@@ -3402,15 +3748,17 @@ Matt Simmons: changed message.el
 Matt Swift: changed dired.el editfns.c lisp-mode.el mm-decode.el
   outline.el progmodes/compile.el rx.el simple.el startup.el
 
-Mauro Aranda: changed wid-edit.el cus-edit.el gnus.texi octave.el pong.el
-  autorevert.el cc-mode.texi control.texi custom-tests.el custom.el
-  dbus.texi dired-x.texi elisp-mode.el epa.el esh-mode.el
-  eshell/eshell.el eudc.texi files.texi functions.texi gnus-faq.texi
-  info.el and 14 other files
+Mauro Aranda: changed wid-edit.el cus-edit.el custom.el wid-edit-tests.el
+  widget.texi custom-tests.el checkdoc-tests.el checkdoc.el
+  cus-edit-tests.el cus-theme.el customize.texi files.texi gnus.texi
+  octave.el pong.el autorevert.el button.el cc-mode.texi control.texi
+  custom--test-theme.el dbus.texi and 35 other files
 
 Maxime Edouard Robert Froumentin: changed gnus-art.el mml.el
 
-Max Mikhanosha: changed org-agenda.el org-habit.el org.el
+Maxim Nikulin: changed mailcap.el
+
+Max Mikhanosha: changed org-agenda.el org-habit.el keyboard.c org.el
 
 Memnon Anon: changed org.texi
 
@@ -3419,14 +3767,15 @@ Micah Anderson: changed spook.lines
 Michael Albinus: wrote autorevert-tests.el dbus-tests.el dbus.el
   filenotify-tests.el filenotify.el files-x-tests.el secrets-tests.el
   secrets.el shadowfile-tests.el tramp-archive-tests.el tramp-archive.el
-  tramp-cmds.el tramp-compat.el tramp-crypt.el tramp-ftp.el tramp-gvfs.el
-  tramp-integration.el tramp-rclone.el tramp-smb.el tramp-sudoedit.el
-  tramp-tests.el url-tramp-tests.el url-tramp.el vc-tests.el zeroconf.el
+  tramp-cmds.el tramp-compat.el tramp-crypt.el tramp-ftp.el tramp-fuse.el
+  tramp-gvfs.el tramp-integration.el tramp-rclone.el tramp-smb.el
+  tramp-sshfs.el tramp-sudoedit.el tramp-tests.el url-tramp-tests.el
+  url-tramp.el vc-tests.el zeroconf.el
 and co-wrote tramp-cache.el tramp-sh.el tramp.el
 and changed tramp.texi tramp-adb.el trampver.el trampver.texi dbusbind.c
-  file-notify-tests.el files.el ange-ftp.el files.texi dbus.texi
-  autorevert.el tramp-fish.el kqueue.c tramp-gw.el tramp-imap.el os.texi
-  xesam.el configure.ac lisp.h shell.el gfilenotify.c and 253 other files
+  files.el ange-ftp.el file-notify-tests.el files.texi dbus.texi
+  autorevert.el tramp-fish.el kqueue.c tramp-gw.el os.texi shell.el
+  tramp-imap.el gitlab-ci.yml lisp.h README xesam.el and 280 other files
 
 Michael Ben-Gershon: changed acorn.h configure.ac riscix1-1.h riscix1-2.h
   unexec.c
@@ -3453,19 +3802,18 @@ Michael Downes: changed gnus-sum.el
 Michael D. Prange: wrote fortran.el
 and changed tex-mode.el
 
-Michael Gauland: wrote ob-ebnf.el
-and co-wrote ob-scheme.el
+Michael Gauland: co-wrote ob-scheme.el
 and changed ebnf2ps.el org-src.el
 
 Michael Gschwind: wrote iso-cvt.el
 
 Michael Harnois: changed nnimap.el
 
-Michael Heerdegen: changed cl-macs.el subr.el control.texi copyright.el
-  css-mode.el dired.el easy-mmode.el filesets.el hi-lock.el macroexp.el
-  modula2.el ob-C.el ob-core.el ob-exp.el ob-groovy.el ob-haskell.el
-  ob-io.el ob-lisp.el ob-lob.el ob-lua.el ob-octave.el
-  and 227 other files
+Michael Heerdegen: changed bytecomp.el cl-macs.el subr.el control.texi
+  copyright.el css-mode.el dired.el easy-mmode.el eieio-core.el
+  filesets.el hi-lock.el macroexp.el modula2.el ob-C.el ob-core.el
+  ob-exp.el ob-groovy.el ob-haskell.el ob-lisp.el ob-lob.el ob-lua.el
+  and 229 other files
 
 Michael Hendricks: changed help.el
 
@@ -3497,9 +3845,9 @@ Michael McNamara: co-wrote verilog-mode.el
 
 Michael Olson: changed erc.el erc-backend.el Makefile erc-track.el
   erc-log.el erc-stamp.el erc-autoaway.el erc-dcc.el erc-goodies.el
-  erc-list.el erc-compat.el erc-identd.el erc.texi ERC-NEWS erc-bbdb.el
+  erc-list.el erc-compat.el erc-identd.el erc.texi erc-bbdb.el
   erc-match.el erc-notify.el erc-ibuffer.el erc-services.el remember.el
-  erc-button.el and 54 other files
+  erc-button.el erc-nicklist.el and 54 other files
 
 Michael Orlitzky: changed tex-mode.el
 
@@ -3538,6 +3886,8 @@ Michael Weylandt: changed ox-latex.el
 
 Michael Witten: changed TUTORIAL fixit.texi intro.texi
 
+Michalis V: changed dired-aux.el em-cmpl.el help-mode.el tcl.el
+
 Michal Jankowski: changed insdel.c keyboard.c
 
 Michał Kondraciuk: changed cus-edit.el
@@ -3547,11 +3897,11 @@ Michał Krzywkowski: changed elide-head.el
 Michal Nazarewicz: wrote cc-mode-tests.el descr-text-tests.el
   tildify-tests.el
 and co-wrote tildify.el
-and changed regex.c casefiddle.c simple.el test/src/regex-emacs-tests.el
-  casefiddle-tests.el message.el regex.h search.c buffer.h ert-x.el
-  files.el frame.c remember.el sgml-mode.el unidata-gen.el README
-  SpecialCasing.txt bindings.el buffer.c cc-mode.el cfengine.el
-  and 37 other files
+and changed emacs-regex.c casefiddle.c simple.el
+  test/src/regex-emacs-tests.el casefiddle-tests.el emacs-regex.h
+  message.el search.c buffer.h cc-mode.el cc-mode.texi ert-x.el files.el
+  frame.c remember.el sgml-mode.el unidata-gen.el README
+  SpecialCasing.txt bindings.el buffer.c and 41 other files
 
 Michal Nowak: changed gnutls.el
 
@@ -3573,6 +3923,10 @@ Miguel Ruiz: changed ob-gnuplot.el
 
 Mihai Olteanu: changed hexl.el
 
+Miha Rihtaršič: changed keyboard.c commands.texi minibuf.c minibuffer.el
+  simple.el comint.el data.c delsel.el errors.texi esh-mode.el eval.c
+  ibuffer.el macros.c process.c sh-script.el
+
 Mihir Rege: changed js.el
 
 Mikael Djurfeldt: changed xdisp.c
@@ -3585,11 +3939,13 @@ Mike Gulick: changed gdb-mi.el
 
 Mike Haertel: changed 7300.h
 
+Mike Hamrick: changed dispextern.h term.c termchar.h xfaces.c
+
 Mike Kazantsev: changed erc-dcc.el
 
 Mike Kupfer: changed mh-comp.el mh-e.el ftcrfont.c mh-utils.el
-  emacs-mime.texi ftxfont.c gnus-mh.el gnus.texi mh-acros.el mh-compat.el
-  mh-e.texi mh-identity.el mh-mime.el xftfont.c
+  emacs-mime.texi gnus-mh.el gnus.texi mh-acros.el mh-compat.el mh-e.texi
+  mh-identity.el mh-mime.el xftfont.c
 
 Mike Lamb: changed em-unix.el esh-util.el pcmpl-unix.el
 
@@ -3621,10 +3977,12 @@ Miles Bader: wrote button.el face-remap.el 
image-file.el macroexp.el
 and changed comint.el faces.el simple.el editfns.c xfaces.c xdisp.c
   info.el minibuf.c display.texi quick-install-emacs wid-edit.el xterm.c
   dispextern.h subr.el window.el cus-edit.el diff-mode.el xfns.c
-  bytecomp.el help.el lisp.h and 272 other files
+  bytecomp.el help.el lisp.h and 271 other files
 
 Milton Wulei: changed gdb-ui.el
 
+Mingde Matthew Zeng: changed erc-join.el erc.el
+
 Mirek Kaim: changed configure.ac
 
 Mirko Vukovic: changed emacs.texi maintaining.texi
@@ -3673,14 +4031,22 @@ Nakamura Toshikazu: changed w32fns.c
 
 Nali Toja: changed configure.ac
 
+Naofumi Yasufuku: changed tramp-sh.el
+
 Naohiro Aota: changed fontset.c ftfont.c gnus-art.el mm-view.el tls.el
   xftfont.c
 
+Naoya Yamashita: changed gv-tests.el gv.el
+
+Narendra Joshi: changed repeat.el
+
 Nathaniel Flath: changed cc-menus.el cc-engine.el cc-fonts.el cc-langs.el
   cc-mode.el cc-vars.el
 
 Nathan J. Williams: changed imap.el
 
+Nathan Moreau: changed vc.el
+
 Nathan Trapuzzano: changed cconv.el cl-macs.el cperl-mode.el gnus.texi
   linum.el progmodes/python.el python-tests.el
 
@@ -3690,7 +4056,7 @@ Neal Ziring: co-wrote vi.el (public domain)
 
 Neil Mager: wrote appt.el
 
-Neil Roberts: changed custom.texi files.el
+Neil Roberts: changed custom.texi display.texi files.el xdisp.c
 
 Neil W. Van Dyke: wrote webjump.el
 
@@ -3709,10 +4075,12 @@ Niall Mansfield: changed etags.c
 
 Nic Ferrier: changed ert.el tramp.el
 
-Nicholas Drozd: changed calc.texi editfns.c ol.html ol.txt shr.el
+Nicholas Drozd: changed calc.texi editfns.c shr.el
 
 Nicholas Maniscalco: changed term.el
 
+Nicholas Strauss: changed lunar.el
+
 Nick Alcock: changed control.texi customize.texi display.texi files.el
   frames.texi gnus.el keymaps.texi modes.texi nonascii.texi syntax.texi
   text.texi windows.texi
@@ -3721,9 +4089,11 @@ Nick Dokos: changed org-table.el ox.el icalendar.el 
mh-search.el
   org-mobile.el org.el ox-ascii.el url-cache.el
 
 Nick Drozd: changed quail/georgian.el eww.el eww.texi shr.el HELLO
-  cc-mode-tests.el ido.texi
+  cc-mode-tests.el ido.texi replace-tests.el
+
+Nick Gasson: changed comint-tests.el comint.el rmailsum.el
 
-Nick Helm: changed eldoc.el help.el help.texi nsterm.m
+Nick Helm: changed dired-aux.el eldoc.el help.el help.texi nsterm.m
   whitespace-tests.el whitespace.el
 
 Nick Roberts: wrote gdb-mi.el t-mouse.el
@@ -3732,31 +4102,38 @@ and changed gdb-ui.el gud.el building.texi tooltip.el 
speedbar.el
   keyboard.c subr.el frames.texi help-mode.el progmodes/compile.el
   xdisp.c display.texi term.c vc-svn.el and 145 other files
 
+Nick Savage: changed help-mode.el
+
 Nick Terrell: changed jka-cmpr-hook.el
 
 Nico Francois: changed w32fns.c w32inevt.c w32menu.c
 
 Nicolas Avrutin: changed url-http.el
 
+Nicolás Bértolo: changed comp.c comp.el emacs.c lread.c comp.h lisp.h
+  package.el alloc.c configure.ac eval.c pdumper.c src/Makefile.in
+  w32-win.el w32.c w32common.h w32fns.c
+
 Nicolas Calderon Asselin: changed org-clock.el
 
-Nicolas Goaziou: wrote org-duration.el org-element.el org-keys.el
-  org-lint.el org-macro.el org-num.el ox-ascii.el ox-latex.el ox-md.el
-  ox-org.el ox.el
-and co-wrote ox-beamer.el ox-icalendar.el ox-man.el
+Nicolas Goaziou: wrote oc-basic.el oc-biblatex.el oc-csl.el oc-natbib.el
+  oc.el ol-doi.el org-duration.el org-element.el org-keys.el org-lint.el
+  org-macro.el org-num.el ox-ascii.el ox-latex.el ox-md.el ox-org.el
+  ox.el
+and co-wrote ox-beamer.el ox-icalendar.el ox-koma-letter.el ox-man.el
 and changed org-list.el org.el ox-html.el org-footnote.el ox-texinfo.el
   org.texi ox-publish.el ox-odt.el org-inlinetask.el org-indent.el
   org-docbook.el ob-exp.el org-agenda.el org-timer.el ob.el
-  org-capture.el ob-asymptote.el org-clock.el org-macs.el
-  org-pcomplete.el org-table.el and 22 other files
+  org-capture.el org-clock.el org-macs.el org-pcomplete.el org-table.el
+  org-archive.el and 21 other files
 
-Nicolas Graner: changed message.el
+Nicolas Graner: changed eww.el message.el
 
 Nicolas Petton: wrote map-tests.el map.el seq-tests.el seq.el
-  thunk-tests.el thunk.el url-handlers-test.el
+  thunk-tests.el thunk.el url-handlers-tests.el
 and co-wrote auth-source-pass.el auth-source-tests.el subr-tests.el
-and changed README configure.ac sed2v2.inp authors.el sequences.texi
-  README.W32 emacs.png emacs23.png HISTORY arc-mode.el cl-extra.el
+and changed README authors.el configure.ac sed2v2.inp sequences.texi
+  README.W32 emacs.png HISTORY emacs23.png arc-mode.el cl-extra.el
   emacs.svg manoj-dark-theme.el Emacs.icns Makefile.in auth-source.el
   emacs.ico fns.c make-tarball.txt obarray-tests.el obarray.el
   and 37 other files
@@ -3783,7 +4160,7 @@ Nikolaj Schumacher: changed flymake.el 
progmodes/compile.el eldoc.el
 
 Nikolaus Rath: changed nnimap.el gnus-sum.el gnus.texi
 
-Nikolay Kudryavtsev: changed sql.el vc-git.el
+Nikolay Kudryavtsev: changed bytecomp.el checkdoc.el sql.el vc-git.el
 
 Nil Geisweiller: changed flymake.el
 
@@ -3791,24 +4168,26 @@ Nils Ackermann: changed message.el nnmh.el 
reftex-vars.el
 
 Nitish Chinta: changed progmodes/python.el sendmail.el simple.el
 
-N. Jackson: changed emacs.texi forms.texi
+N. Jackson: changed emacs.texi forms.texi os.texi
+
+Noah Evans: changed follow.el
 
 Noah Friedman: wrote eldoc.el rlogin.el type-break.el
 and co-wrote erc-dcc.el
 and changed rsz-mini.el emacs-buffer.gdb comint.el files.el Makefile
-  mailabbrev.el sendmail.el subr.el timer.el xfns.c yow.el apropos.el
-  battery.el bytecomp.el calc.el coding.c complete.el config.in
-  configure.ac copyright.h fns.c and 22 other files
+  mailabbrev.el sendmail.el shell.el src/sysdep.c subr.el timer.el xfns.c
+  yow.el apropos.el battery.el bytecomp.el calc.el coding.c complete.el
+  config.in configure.ac and 24 other files
 
 Noah Lavine: changed tramp.el
 
-Noah Swainland: changed calc.el
+Noah Swainland: changed calc.el goto-addr.el misc.texi
 
 Noam Postavsky: changed progmodes/python.el lisp-mode.el bytecomp.el
-  lisp-mode-tests.el term.el xdisp.c eval.c cl-macs.el data.c
-  emacs-lisp/debug.el simple.el help-fns.el modes.texi subr.el
-  elisp-mode.el ert.el isearch.el processes.texi cl-print.el diff-mode.el
-  ffap.el and 359 other files
+  lisp-mode-tests.el term.el xdisp.c cl-macs.el eval.c simple.el data.c
+  emacs-lisp/debug.el modes.texi help-fns.el subr.el elisp-mode.el ert.el
+  isearch.el processes.texi search.c cl-print.el diff-mode.el
+  and 363 other files
 
 Nobuyoshi Nakada: co-wrote ruby-mode.el
 and changed ruby-mode-tests.el
@@ -3851,12 +4230,11 @@ Oleg Pykhalov: changed gnus-sum.el
 Oleg S. Tihonov: changed cyrillic.el ispell.el language/cyrillic.el
   map-ynp.el subr.el
 
-Oleh Krehel: wrote ob-J.el
-and co-wrote subr-tests.el
+Oleh Krehel: co-wrote subr-tests.el
 and changed dired-aux.el outline.el checkdoc.el files.el subr.el buffer.c
   check-declare.el alloc.c appt.el buffer.h calc.el category.c
-  cl-indent.el custom.el derived.el dired-x.el dired.el dired.texi
-  display.texi easy-mmode.el ffap.el and 14 other files
+  cl-indent.el cus-edit.el custom.el derived.el dired-x.el dired.el
+  dired.texi display.texi easy-mmode.el and 15 other files
 
 Oleksandr Gavenko: changed generic-x.el progmodes/grep.el
 
@@ -3872,6 +4250,9 @@ and changed gamegrid.el gnus-cite.el nonascii.texi rx.el 
startup.el
 Oliver Seidel: wrote otodo-mode.el
 and co-wrote todo-mode.el
 
+Olivier Certner: changed erc-track.el erc-ibuffer.el erc-services.el
+  erc-stamp.el
+
 Olivier Laurens: changed forms.el
 
 Olivier Lecarme: changed make-mode.el ange-ftp.el apropos.el bibtex.el
@@ -3882,6 +4263,8 @@ Olli Savia: changed etags.c syssignal.h
 
 Olof Ohlsson Sax: changed vc-svn.el
 
+Omar Polo: changed configure.ac emacsclient.c sysdep.c vc.el
+
 Orivej Desh: changed tramp-sh.el
 
 Osamu Yamane: changed smtpmail.el
@@ -3891,13 +4274,19 @@ and co-wrote eudc-bob.el eudc-export.el eudc-hotlist.el 
eudc-vars.el
   eudc.el eudcb-bbdb.el eudcb-ldap.el eudcb-ph.el
 and changed ph.el
 
-Óscar Fuentes: changed ido.el password-cache.el ses.el vc-hooks.el xfns.c
-  CPP-DEFINES addpm.c addsection.c browse-url.el callproc.c cmdproxy.c
-  configure.ac diff-mode.el emacsclient.c keyboard.c ms-w32.h preprep.c
-  progmodes/grep.el vc-bzr.el vc-cvs.el vc-git.el and 9 other files
+Óscar Fuentes: changed ido.el password-cache.el progmodes/grep.el ses.el
+  vc-hooks.el xfns.c CPP-DEFINES addpm.c addsection.c browse-url.el
+  callproc.c cmdproxy.c configure.ac diff-mode.el em-cmpl.el
+  emacsclient.c keyboard.c ms-w32.h preprep.c vc-bzr.el vc-cvs.el
+  and 10 other files
 
 Øyvind Stegard: changed gnus-msg.el
 
+Pablo Barbáchano: wrote ansi-color-tests.el
+and changed ansi-color.el
+
+Pankaj Jangid: changed gnus-sum.el gnus.texi semantic.texi frame.c
+
 Pascal Dupuis: changed octave.el
 
 Pascal Rigaux: changed image.c rfc2231.el
@@ -3915,10 +4304,10 @@ and changed imenu.el make-mode.el
 
 Paul Eggert: wrote rcs2log
 and co-wrote cal-dst.el
-and changed lisp.h configure.ac alloc.c process.c fileio.c editfns.c
-  xdisp.c sysdep.c image.c keyboard.c data.c emacs.c fns.c lread.c
-  xterm.c eval.c callproc.c Makefile.in frame.c buffer.c gnulib-comp.m4
-  and 1813 other files
+and changed lisp.h configure.ac alloc.c fileio.c process.c editfns.c
+  sysdep.c xdisp.c fns.c image.c keyboard.c data.c emacs.c lread.c
+  xterm.c eval.c gnulib-comp.m4 callproc.c Makefile.in frame.c buffer.c
+  and 1854 other files
 
 Paul Fisher: changed fns.c
 
@@ -3930,10 +4319,10 @@ Paul Jarc: wrote nnmaildir.el (public domain) nnnil.el 
(public domain)
 and changed message.el gnus-util.el gnus-int.el gnus.el gnus-agent.el
   gnus-start.el gnus-sum.el nnmail.el
 
-Paul Pogonyshev: changed subr.el byte-opt.el eval.c progmodes/python.el
-  which-func.el align.el bytecode.c bytecomp.el cc-langs.el cl-macs.el
-  configure.ac dabbrev.el display.texi eldoc.el elisp-mode.el
-  emacs-lisp/debug.el ert.el ert.texi etags.el fns-tests.el fns.c
+Paul Pogonyshev: changed subr.el byte-opt.el bytecomp.el
+  emacs-lisp/debug.el eval.c progmodes/python.el which-func.el align.el
+  bytecode.c cc-langs.el cl-macs.el configure.ac dabbrev.el display.texi
+  eldoc.el elisp-mode.el ert.el ert.texi etags.el fns-tests.el fns.c
   and 20 other files
 
 Paul Rankin: changed outline.el
@@ -3944,7 +4333,7 @@ Paul Reilly: changed dgux.h lwlib-Xm.c lwlib.c xlwmenu.c 
configure.ac
   lwlib/Makefile.in mail/rmailmm.el rmailedit.el rmailkwd.el
   and 10 other files
 
-Paul Rivier: changed ada-mode.el mixal-mode.el reftex-vars.el reftex.el
+Paul Rivier: changed mixal-mode.el reftex-vars.el reftex.el
 
 Paul Rubin: changed config.h sun2.h texinfmt.el window.c
 
@@ -3958,20 +4347,24 @@ Paul Stodghill: changed gnus-agent.el gnus-util.el
 
 Paul Van Der Walt: changed message.el
 
+Paul W. Rankin: changed bookmark.el font-lock.el nsterm.m outline.el
+
 Pavel Janík: co-wrote eudc-bob.el eudc-export.el eudc-hotlist.el
   eudc-vars.el eudc.el eudcb-bbdb.el eudcb-ldap.el eudcb-ph.el
 and changed keyboard.c xterm.c COPYING xdisp.c process.c emacs.c lisp.h
   menu-bar.el ldap.el make-dist xfns.c buffer.c coding.c eval.c fileio.c
   flyspell.el fns.c indent.c Makefile.in callint.c cus-start.el
-  and 702 other files
+  and 699 other files
 
 Pavel Kobiakov: wrote flymake-proc.el flymake.el
 and changed flymake.texi
 
 Peder O. Klingenberg: wrote dns-mode-tests.el
 and changed dns-mode.el icalendar.el mm-decode.el calc-comb.el calc.texi
-  dunnet.el emacsbug.el emacsclient.c eww.el gnus.texi misc.texi
-  url-http.el url-queue.el url-util.el url-vars.el url.texi
+  dunnet.el emacsbug.el emacsclient.c eww.el gnus.texi misc.texi snake.el
+  subr.el url-http.el url-queue.el url-util.el url-vars.el url.texi
+
+Pedro Andres Aranda Gutierrez: changed cus-face.el xfaces.c
 
 P. E. Jareth Hein: changed gnus-util.el
 
@@ -4000,8 +4393,8 @@ Perry E. Metzger: changed xdisp.c bindings.el buffer.c 
display.texi
 
 Per Starbäck: changed ispell.el characters.el dired.el gnus-start.el BUGS
   apropos.el bibtex.el bytecomp.el charset.h coding.c doctor.el emacs.c
-  european.el iso-transl.el pcmpl-gnu.el replace.el startup.el
-  trouble.texi vc.el xdisp.c
+  european.el iso-transl.el pcmpl-gnu.el progmodes/python.el replace.el
+  startup.el trouble.texi vc.el xdisp.c
 
 Pete Beardmore: changed semantic/complete.el idle.el
 
@@ -4017,7 +4410,7 @@ Peter Doornbosch: changed vc-svn.el
 
 Peter Dyballa: changed calendar.el
 
-Peter Feigl: changed scheme.el HELLO
+Peter Feigl: changed scheme.el HELLO tabulated-list.el
 
 Peter Heslin: changed flyspell.el outline.el
 
@@ -4031,12 +4424,14 @@ Peter Kleiweg: wrote ps-mode.el
 
 Peter Liljenberg: wrote elint.el
 
-Peter Münster: changed gnus-delay.el gnus-demon.el gnus-group.el
-  gnus-start.el gnus.texi org-agenda.el org.el
+Peter Münster: changed image-dired.el gnus-delay.el gnus-demon.el
+  gnus-group.el gnus-start.el gnus.texi org-agenda.el org.el
 
 Peter O'Gorman: changed configure.ac frame.h hpux10-20.h termhooks.h
 
-Peter Oliver: changed perl-mode.el server.el vc-sccs.el
+Peter Oliver: changed emacsclient.desktop emacsclient-mail.desktop
+  Makefile.in emacs-mail.desktop server.el configure.ac emacs.desktop
+  emacs.metainfo.xml misc.texi perl-mode.el ruby-mode-tests.el vc-sccs.el
 
 Peter Povinec: changed term.el
 
@@ -4075,15 +4470,24 @@ Petri Kaurinkoski: changed configure.ac iris4d.h 
irix6-0.h irix6-5.h
 
 Petr Salinger: changed configure.ac gnu-kfreebsd.h
 
+Petteri Hintsanen: changed sequences.texi Makefile.in emacs/Makefile.in
+  lispintro/Makefile.in lispref/Makefile.in misc/Makefile.in
+
 Phil Hagelberg: wrote ert-x-tests.el
 and changed package.el pcmpl-unix.el subr.el
 
+Philip Brown: changed comp.el
+
 Philip Hudson: changed em-hist.el
 
 Philip Jackson: wrote find-cmd.el ol-irc.el
 and changed org-irc.el
 
-Philip K: changed ispell.el
+Philip Kaludercic: wrote epa-ks.el
+and changed rcirc.el rcirc.texi project.el gravatar.el outline.el
+  message.el windmove.el css-mode.el epa.texi erc.el fns-tests.el fns.c
+  ispell.el message.texi nnmaildir.el progmodes/python.el recentf.el
+  replace.el sgml-mode.el skeleton.el subr.el timeclock.el
 
 Philippe Schnoebelen: wrote gomoku.el mpuz.el
 and changed cl-extra.el
@@ -4096,35 +4500,40 @@ Philippe Waroquiers: changed etags.el term.c
 Philipp Haselwarter: changed gnus-agent.el gnus-sum.el gnus-sync.el
   gnus.texi newcomment.el
 
+Philipp Klaus Krause: changed emacs.c movemail.c
+
 Philipp Rumpf: changed electric.el
 
 Philipp Stephani: wrote callint-tests.el checkdoc-tests.el
   cl-preloaded-tests.el ediff-diff-tests.el eval-tests.el ido-tests.el
   lread-tests.el mouse-tests.el startup-tests.el xt-mouse-tests.el
-and changed emacs-module.c emacs-module-tests.el json.c json-tests.el
-  eval.c mod-test.c lisp.h lread.c nsterm.m configure.ac bytecomp.el
-  internals.texi gtkutil.c emacs-module.h.in files.el alloc.c
-  electric-tests.el electric.el test/Makefile.in editfns.c emacs.c
-  and 127 other files
-
-Phillip Lord: wrote ps-print-tests.el
-and changed build-zips.sh lisp/Makefile.in undo.c build-dep-zips.py
-  simple.el test/Makefile.in Makefile Makefile.in emacs.nsi keyboard.c
-  viper-cmd.el README-windows-binaries README.W32 elisp-mode-tests.el
-  ldefs-clean.el loadup.el README-scripts autoload.el
+and changed emacs-module.c emacs-module-tests.el configure.ac json.c
+  process.c eval.c json-tests.el process-tests.el internals.texi alloc.c
+  emacs-module.h.in emacs.c lread.c nsterm.m lisp.h pdumper.c bytecomp.el
+  callproc.c seccomp-filter.c gtkutil.c files.el and 179 other files
+
+Phillip Lord: wrote ps-print-tests.el w32-feature.el
+and changed build-zips.sh build-dep-zips.py lisp/Makefile.in undo.c
+  simple.el test/Makefile.in README-scripts README-windows-binaries
+  emacs.nsi Makefile Makefile.in keyboard.c viper-cmd.el README.W32
+  elisp-mode-tests.el ldefs-clean.el loadup.el autoload.el
   automated/Makefile.in cmds.c dired.el and 171 other files
 
 Phil Sainty: wrote autoload-longlines-mode-tests.el
   autoload-major-mode-tests.el autoload-minor-mode-tests.el
   so-long-tests-helpers.el so-long-tests.el so-long.el spelling-tests.el
-and changed diff.el goto-addr.el term.el cl-macs.el comint.el derived.el
+and changed comint.el term.el diff.el goto-addr.el cl-macs.el derived.el
   easy-mmode.el emacs.texi files.texi lisp.el misc.texi package.el
   progmodes/grep.el simple.el subword.el trouble.texi
 
 Phil Sung: changed wdired.el dired.texi follow.el progmodes/python.el
 
+Pierre-Antoine Rouby: changed etags.1 etags.c maintaining.texi
+
 Pierre Lorenzon: changed eieio-custom.el pconf.el
 
+Pierre Neidhardt: changed shell.el
+
 Pierre Poissinger: changed charset.c
 
 Pierre Téchoueyres: changed browse-url.el eieio-test-persist.el epg.el
@@ -4138,7 +4547,8 @@ Pieter Praet: changed org-crypt.el
 
 Pieter Schoenmakers: changed TUTORIAL.nl
 
-Pieter Van Oostrum: changed package.el shell-tests.el shell.el
+Pieter Van Oostrum: changed package.el package-tests.el package.texi
+  shell-tests.el shell.el
 
 Piet van Oostrum: changed data.c fileio.c flyspell.el smtpmail.el
 
@@ -4148,10 +4558,15 @@ Piotr Trojanek: changed gnutls.c process.c
 
 Piotr Zieliński: wrote org-mouse.el
 
-Pip Cet: changed fns.c display.texi xdisp.c xterm.c dispextern.h frame.el
-  gtkutil.c image.c json-tests.el json.c mail-utils.el nsterm.m simple.el
-  subr.el text.texi textprop.c timer-list.el tty-colors-tests.el
-  tty-colors.el url-http.el xfaces.c xterm.h
+Pip Cet: wrote image-circular-tests.el
+and changed xdisp.c comp.c fns.c pdumper.c alloc.c byte-opt.el
+  display.texi ftcrfont.c image.c xterm.c bytecomp-tests.el bytecomp.el
+  ccl-tests.el ccl.c ccl.el cmds.c comint.el comp-test-funcs.el
+  comp-tests.el comp.el composite.c and 28 other files
+
+Po Lu: changed xdisp.c browse-url.el callproc.c cc-compat.el config.bat
+  esh-cmd.el fileio.c langinfo.h loadup.el msdos.c msdos.h nsfns.m
+  nsterm.m process.c sed1v2.inp sed2v2.inp sed3v2.inp sedlibmk.inp
 
 Pontus Michael: changed simple.el
 
@@ -4159,15 +4574,23 @@ Prestoo Ten: changed screen.el
 
 Primoz Peterlin: changed TUTORIAL.sl
 
+Protesilaos Stavrou: wrote modus-operandi-theme.el modus-themes.el
+  modus-vivendi-theme.el
+and changed modus-themes.org vc-dir.el log-view.el modus-themes.texi
+  vc-git.el apropos.el custom.el diff-mode.el perl-mode.el shortdoc.el
+  shr.el vc-cvs.el vc-hg.el vc-svn.el vc/vc-bzr.el
+
 Przemysław Wojnowski: wrote obarray-tests.el sgml-mode-tests.el
 and changed abbrev-tests.el abbrev.el cl-lib-tests.el loadup.el
   obarray.el sgml-mode.el
 
 Puneeth Chaganti: changed org.texi ox.el org-agenda.el org-capture.el
-  ox-html.el svg.el
+  ox-html.el svg.el xwidget.el
+
+Qiantan Hong: changed xwidget.c
 
 Radon Rosborough: changed package.el custom.texi package.texi startup.el
-  eval.c lread.c org.texi os.texi
+  eval.c lread.c org.texi os.texi xterm.c
 
 Rafael Laboissiere: changed org-remember.el org-bibtex.el org.el org.texi
 
@@ -4189,6 +4612,8 @@ Rajappa Iyer: changed gnus-salt.el
 
 Raja R. Harinath: changed gnus-salt.el nnml.el
 
+Rajeev Narang: changed icalendar.el
+
 Rajesh Vaidheeswarran: changed whitespace.el ffap.el
 
 Ralf Angeli: wrote scroll-lock.el
@@ -4203,8 +4628,8 @@ Ralf Fassel: changed dabbrev.el files.el fill.el 
iso-acc.el tar-mode.el
 Ralf Mattes: changed el.srt
 
 Ralph Schleicher: wrote battery.el info-look.el
-and changed libc.el browse-url.el fileio.c info.el mm-decode.el
-  nnultimate.el perl-mode.el which-func.el
+and changed libc.el browse-url.el eww.el eww.texi fileio.c info.el
+  mm-decode.el nnultimate.el perl-mode.el shr.el which-func.el
 
 Ramakrishnan M: changed mlm-util.el
 
@@ -4218,8 +4643,9 @@ Randal Schwartz: wrote pp.el
 Ransom Williams: changed files.el
 
 Rasmus Pank Roulund: wrote org-tempo.el
-and changed ox-latex.el gnus-notifications.el org.el ange-ftp.el
-  gnus-fun.el gnus-icalendar.el gnus-sum.el gnus.texi ido.el message.texi
+and co-wrote ox-koma-letter.el
+and changed ox-latex.el gnus-icalendar.el gnus-notifications.el org.el
+  ange-ftp.el gnus-fun.el gnus-sum.el gnus.texi ido.el message.texi
   ob-C.el org-entities.el org-src.el org.texi ox-html.el ox.el vc-git.el
 
 Raul Acevedo: changed info.el options.el
@@ -4242,6 +4668,8 @@ Remek Trzaska: changed gnus-ems.el
 
 Remi Letot: changed nnmaildir.el
 
+Remington Furman: changed thingatpt.el
+
 Rémi Vanicat: changed ox-icalendar.el org-table.el
 
 Renaud Rioboo: changed nnmail.el
@@ -4254,15 +4682,14 @@ and changed vhdl-mode.texi
 
 Reuben Thomas: changed ispell.el whitespace.el dired-x.el files.el
   sh-script.el emacsclient-tests.el remember.el README emacsclient.c
-  misc.texi msdos.c simple.el INSTALL ada-mode.el ada-xref.el alloc.c
-  arc-mode.el authors.el config.bat copyright dired-x.texi
-  and 36 other files
+  misc.texi msdos.c simple.el INSTALL alloc.c arc-mode.el authors.el
+  config.bat copyright dired-x.texi dired.el dosfns.c and 35 other files
 
 Ricardo Wurmus: changed xwidget.el xwidget.c configure.ac xwidget.h
 
 Riccardo Murri: changed vc-bzr.el tls.el
 
-Richard Copley: changed Makefile.in epaths.in epaths.nt gdb-mi.el
+Richard Copley: changed Makefile.in epaths.in epaths.nt gdb-mi.el sort.el
   text.texi
 
 Richard Dawe: changed config.in src/Makefile.in
@@ -4272,7 +4699,7 @@ Richard G. Bielawski: changed modes.texi paren.el
 Richard Hoskins: changed message.el
 
 Richard Kim: wrote wisent/python.el
-and changed bovine.texi db-global.el loading.texi python-wy.el
+and changed bovine.texi db-global.el gud.el loading.texi python-wy.el
   texnfo-upd.el wisent.texi
 
 Richard King: wrote filelock.c uniquify.el userlock.el
@@ -4346,15 +4773,15 @@ Roberto Rodríguez: changed glossary.texi widget.texi
 Robert P. Goldman: changed org.texi ob-exp.el org.el ox-latex.el
 
 Robert Pluim: wrote nsm-tests.el
-and changed process.c ftfont.c gtkutil.c processes.texi vc-git.el
-  configure.ac font.c network-stream.el nsm.el process-tests.el xfns.c
-  dispextern.h files.texi ftcrfont.c gnus-icalendar.el gnutls.el
-  gtkutil.h network-stream-tests.el nsterm.m text.texi w32.c
-  and 90 other files
+and changed configure.ac process.c blocks.awk network-stream-tests.el
+  font.c processes.texi ftfont.c gtkutil.c vc-git.el process-tests.el
+  emoji-zwj.awk gnutls.el network-stream.el nsm.el tramp.texi mml-sec.el
+  nsterm.m unicode xfns.c auth.texi composite.c and 134 other files
 
-Robert Thorpe: changed cus-start.el indent.el
+Robert Thorpe: changed cus-start.el indent.el rmail.texi
 
-Robert Weiner: changed cus-edit.el
+Robert Weiner: changed cus-edit.el etags.el positions.texi simple.el
+  subr.el texinfo.el
 
 Rob Giardina: changed org-agenda.el
 
@@ -4375,7 +4802,7 @@ Roger Breitenstein: changed smtpmail.el
 Roland B. Roberts: changed buffer.h callproc.c dired.c files.el
   gnus-group.el gnus-sum.el process.c sort.el sysdep.c systty.h
 
-Roland Kaufmann: changed ox.el
+Roland Kaufmann: changed configure.ac ox.el
 
 Roland McGrath: wrote autoload.el etags.el map-ynp.el progmodes/grep.el
 and co-wrote find-dired.el progmodes/compile.el
@@ -4386,9 +4813,9 @@ and changed compile.el add-log.el configure.ac files.el 
vc.el simple.el
 
 Roland Winkler: wrote proced.el
 and changed bibtex.el faces.el crm.el find-dired.el bookmark.el process.c
-  appt.el artist.el bibtex-style.el conf-mode.el cus-edit.el diary-lib.el
-  flyspell.el hideshow.el ibuf-ext.el ibuffer.el ispell.el make-mode.el
-  sgml-mode.el sh-script.el skeleton.el smtpmail.el
+  smtpmail.el appt.el artist.el bibtex-style.el conf-mode.el cus-edit.el
+  diary-lib.el flyspell.el gnus.texi hideshow.el ibuf-ext.el ibuffer.el
+  ispell.el make-mode.el nnimap.el and 5 other files
 
 Rolf Ade: changed sql.el tcl.el
 
@@ -4417,9 +4844,9 @@ Roy Liu: changed ns-win.el
 
 Rüdiger Sonderfeld: wrote inotify-tests.el reftex-tests.el
 and changed eww.el octave.el shr.el bibtex.el configure.ac
-  misc/Makefile.in reftex-vars.el vc-git.el TUTORIAL.de ada-mode.el
-  autoinsert.el building.texi calc-lang.el cc-langs.el dired.texi
-  editfns.c emacs.c emacs.texi epa.el erc.el eww.texi and 39 other files
+  misc/Makefile.in reftex-vars.el vc-git.el TUTORIAL.de autoinsert.el
+  building.texi bytecomp.el calc-lang.el cc-langs.el dired.texi editfns.c
+  emacs.c emacs.texi epa.el erc.el eww.texi and 39 other files
 
 Rui-Tao Dong: changed nnweb.el
 
@@ -4431,13 +4858,19 @@ Ruslan Bekenev: changed rfc2045.el rfc2047.el rfc2231.el
 
 Russ Allbery: changed message.el
 
+Ruthra Kumar: changed arc-mode.el esh-cmd.el files.el
+
 Ryan Barrett: changed dirtrack.el
 
 Ryan Brown: changed cl-indent.el
 
-Ryan Crum: changed json.el
+Ryan Crum: changed term.el json.el
+
+Ryan Olson: changed package.el
 
-Ryan Thompson: changed advice-tests.el ido.el minibuffer-tests.el
+Ryan Prior: changed comint.el
+
+Ryan Thompson: changed ido.el advice-tests.el minibuffer-tests.el
   minibuffer.el savehist.el tmm.el
 
 Ryan Twitchell: changed ido.el
@@ -4471,9 +4904,8 @@ Sam Kendall: changed etags.c etags.el
 Sam Steingold: wrote gulp.el midnight.el
 and changed progmodes/compile.el cl-indent.el simple.el vc-cvs.el vc.el
   mouse.el vc-hg.el etags.el files.el font-lock.el tex-mode.el
-  ange-ftp.el sgml-mode.el vc-git.el window.el add-log.el bindings.el
-  bookmark.el bug-reference.el calendar.el cperl-mode.el
-  and 157 other files
+  ange-ftp.el gnus-sum.el message.el sgml-mode.el vc-git.el window.el
+  add-log.el bindings.el bookmark.el bug-reference.el and 186 other files
 
 Samuel Bronson: changed custom.el emacsclient.c keyboard.c
   progmodes/grep.el semantic/format.el unexmacosx.c
@@ -4490,6 +4922,8 @@ Sanghyuk Suh: changed mac-win.el macterm.c
 
 Santiago Payà i Miralta: changed vc-hg.el
 
+Saroj Thirumalai: changed printing.el
+
 Sascha Lüdecke: co-wrote mml1991.el
 and changed gnus-win.el
 
@@ -4498,6 +4932,8 @@ Sascha Wilde: changed pgg-gpg.el pgg.texi pgg.el 
bubbles.el configure.ac
 
 Sašo Živanović: changed reftex-parse.el reftex.el
 
+Satoshi Nakagawa: changed url-http.el
+
 Satyaki Das: wrote mh-acros.el mh-gnus.el mh-search.el mh-speed.el
   mh-thread.el mh-tool-bar.el
 and co-wrote mh-junk.el
@@ -4539,6 +4975,9 @@ Sean O'Rourke: changed complete.el comint.el dabbrev.el 
find-func.el
 
 Sean Sieger: changed emacs-lisp-intro.texi
 
+Sean Whitton: changed project.el bindings.el files.texi simple.el
+  killing.texi rect.el repeat.el
+
 Sebastian Freundt: changed nnmaildir.el
 
 Sebastian Hermida: wrote misterioso-theme.el
@@ -4554,6 +4993,9 @@ and changed ox-publish.el ftfont.c ox-jsinfo.el
 
 Sebastian Tennant: changed desktop.el
 
+Sebastian Urban: changed display.texi basic.texi docstyle.texi emacs.texi
+  fixit.texi text.texi
+
 Sebastian Wiesner: changed bytecomp.el comint.el files.el replace.el
   simple.el
 
@@ -4578,14 +5020,18 @@ Seppo Sade: changed esh-ext.el
 
 Sergei Organov: changed vc.el
 
+Serge Tupchii: changed etags.c
+
 Sergey Litvinov: co-wrote ob-fortran.el
 and changed ob-maxima.el ob-octave.el
 
+Sergey Organov: changed desktop.el
+
 Sergey Poznyakoff: changed rmail.el mh-mime.el rmail.texi smtpmail.el
 
 Sergey Trofimov: changed window.el
 
-Sergey Vinokurov: changed emacs-module-tests.el emacs-module.c mod-test.c
+Sergey Vinokurov: changed emacs-module-tests.el emacs-module.c
 
 Sergio Durigan Junior: changed eudcb-bbdb.el gdb-mi.el
 
@@ -4623,6 +5069,10 @@ Shingo Tanaka: changed files.el
 
 Shinichirou Sugou: changed etags.c
 
+Shitikanth Kashyap: changed progmodes/python.el tabulated-list.el
+
+Shohei Yoshida: changed configure.ac
+
 Shoji Nishimura: changed org.el
 
 Sho Nakatani: changed doc-view.el
@@ -4642,16 +5092,16 @@ Sidney Markowitz: changed doctor.el nsmenu.m
 Sigbjorn Finne: changed gnus-srvr.el
 
 Simen Heggestøyl: wrote apropos-tests.el asm-mode-tests.el
-  autoconf-tests.el autoinsert-tests.el check-declare-tests.el
-  color-tests.el css-mode-tests.el dom-tests.el elide-head-tests.el
-  glasses-tests.el help-mode-tests.el makesum-tests.el page-tests.el
-  paren-tests.el po-tests.el ring-tests.el rot13-tests.el sql-tests.el
-  webjump-tests.el
-and changed css-mode.el css-mode.css json-tests.el json.el sgml-mode.el
-  scss-mode.scss page.el ring.el rot13.el scheme.el sql.el asm-mode.el
-  autoinsert.el color.el files.el js.el less-css-mode.el
-  less-css-mode.less maintaining.texi makesum.el midnight.el
-  and 5 other files
+  autoconf-tests.el autoinsert-tests.el browse-url-tests.el
+  check-declare-tests.el color-tests.el css-mode-tests.el dom-tests.el
+  elide-head-tests.el glasses-tests.el help-mode-tests.el
+  makesum-tests.el page-tests.el paren-tests.el po-tests.el ring-tests.el
+  rot13-tests.el sql-tests.el webjump-tests.el
+and changed css-mode.el project.el json-tests.el json.el scss-mode.scss
+  sgml-mode.el less-css-mode.less maintaining.texi modes.texi page.el
+  ring.el rot13.el scheme.el sql.el apropos.el asm-mode.el autoconf.el
+  autoinsert.el browse-url.el check-declare.el color.el
+  and 15 other files
 
 Simona Arizanova: changed help.el
 
@@ -4660,13 +5110,16 @@ Simon Josefsson: wrote dig.el dns-mode.el flow-fill.el 
fringe.el imap.el
   sasl-scram-sha256.el sieve-mode.el sieve.el smime.el starttls.el tls.el
   url-imap.el
 and co-wrote gnus-sieve.el gssapi.el mml1991.el nnfolder.el nnimap.el
-  nnml.el sieve-manage.el
+  nnml.el rot13.el sieve-manage.el
 and changed message.el gnus-sum.el gnus-art.el smtpmail.el pgg-gpg.el
   pgg.el gnus-agent.el mml2015.el mml.el gnus-group.el mm-decode.el
   gnus-msg.el gnus.texi mail/sieve-manage.el pgg-pgp5.el browse-url.el
   gnus-int.el gnus.el hashcash.el mm-view.el password.el
   and 101 other files
 
+Simon Lang: changed building.texi icomplete.el misterioso-theme.el
+  progmodes/grep.el
+
 Simon Law: changed delsel.el electric.el
 
 Simon Leinen: changed Makefile.in smtpmail.el Makefile cm.c cm.h hpux9.h
@@ -4680,8 +5133,6 @@ and changed font-lock.el rmail.el fortran.el sendmail.el 
subr.el dired.el
   menu-bar.el perl-mode.el ps-print.el rmailsum.el bytecomp.el
   cc-fonts.el data.c faces.el lisp-mode.el and 56 other files
 
-Simon Michael: wrote ob-hledger.el
-
 Simon Schubert: changed json.el
 
 Simon South: co-wrote opascal.el
@@ -4693,6 +5144,8 @@ Skip Collins: changed w32fns.c w32term.c w32term.h
 Sławomir Nowaczyk: changed emacs.py progmodes/python.el TUTORIAL.pl
   flyspell.el ls-lisp.el w32proc.c
 
+Spencer Baugh: changed data-tests.el alloc.c autorevert.el
+
 Spencer Thomas: changed dabbrev.el emacsclient.c gnus.texi server.el
   unexcoff.c
 
@@ -4707,30 +5160,34 @@ Stefan Bruda: co-wrote prolog.el
 Stefan Guath: changed find-dired.el
 
 Stefan Kangas: wrote bookmark-tests.el cal-julian-tests.el
-  delim-col-tests.el lunar-tests.el misc-tests.el morse-tests.el
-  paragraphs-tests.el password-cache-tests.el qp-tests.el
-  rfc2045-tests.el studly-tests.el tabify-tests.el timezone-tests.el
-  underline-tests.el uudecode-tests.el
-and changed bookmark.el package.el efaq.texi package.texi ibuffer.el
-  mwheel.el cperl-mode.el fns.c gud.el simple.el subr.el autoinsert.el
-  comint-tests.el cus-edit.el delim-col.el dired-aux.el dired-x.el
-  em-term.el ert.texi flow-fill.el frames.texi and 147 other files
+  delim-col-tests.el etc-authors-mode.el life-tests.el loadhist-tests.el
+  lunar-tests.el mail-utils-tests.el misc-tests.el morse-tests.el
+  netrc-tests.el paragraphs-tests.el password-cache-tests.el qp-tests.el
+  rfc2045-tests.el sasl-cram-tests.el sasl-tests.el saveplace-tests.el
+  studly-tests.el tabify-tests.el time-tests.el timezone-tests.el
+  underline-tests.el uudecode-tests.el warnings-tests.el
+and co-wrote help-tests.el keymap-tests.el
+and changed efaq.texi checkdoc.el package.el cperl-mode.el bookmark.el
+  help.el keymap.c subr.el simple.el erc.el ediff-util.el idlwave.el
+  time.el bytecomp-tests.el comp.el speedbar.el bytecomp.el edebug.el
+  emacs-lisp-intro.texi flyspell.el ibuffer.el and 1337 other files
 
 Stefan Merten: co-wrote rst.el
 
 Stefan Monnier: wrote bibtex-style.el bytecomp-tests.el
   cl-generic-tests.el cl-generic.el cl-preloaded.el cl-print.el cl.el
   css-mode.el cursor-sensor.el cvs-status.el diff-mode.el fileloop.el
-  footnote-tests.el gv.el inline.el lisp-tests.el log-edit.el log-view.el
+  find-func-tests.el footnote-tests.el gv.el inline.el lisp-mnt-tests.el
+  lisp-tests.el log-edit.el log-view.el macroexp-tests.el
   minibuffer-tests.el minibuffer.el mpc.el nadvice.el pcase.el
   pcvs-defs.el pcvs-info.el pcvs-parse.el pcvs-util.el radix-tree.el
   regexp-opt-tests.el reveal.el smerge-mode.el smie.el subword-tests.el
   vc-mtn.el
 and co-wrote font-lock.el gitmerge.el pcvs.el
-and changed subr.el simple.el keyboard.c bytecomp.el files.el lisp.h
-  cl-macs.el vc.el xdisp.c alloc.c eval.c sh-script.el
-  progmodes/compile.el keymap.c tex-mode.el buffer.c newcomment.el
-  window.c lread.c fileio.c help-fns.el and 1372 other files
+and changed subr.el simple.el keyboard.c bytecomp.el cl-macs.el files.el
+  lisp.h vc.el xdisp.c alloc.c eval.c sh-script.el progmodes/compile.el
+  keymap.c buffer.c window.c tex-mode.el lisp-mode.el newcomment.el
+  help-fns.el lread.c and 1616 other files
 
 Stefano Facchini: changed gtkutil.c
 
@@ -4748,11 +5205,13 @@ Stefan Wiens: changed gnus-sum.el
 
 Steinar Bang: changed gnus-setup.el imap.el
 
-Štěpán Němec: changed INSTALL calc-ext.el checkdoc.el cl.texi comint.el
-  edebug.texi font-lock.el functions.texi gnus-sum.el insdel.c
-  leim-ext.el loading.texi maps.texi mark.texi message.texi mini.texi
-  minibuf.texi misc.texi programs.texi subr.el text.texi
-  and 7 other files
+Štěpán Němec: changed loadhist.el files.el gnus-sum.el loading.texi
+  subr.el INSTALL calc-ext.el checkdoc.el cl.texi comint.el edebug.texi
+  ediff-init.el emacs-lisp/cl-lib.el find-func.el fixit.texi font-lock.el
+  functions.texi gnus-art.el gnus.texi help-fns.el help.el
+  and 22 other files
+
+Stéphane Boucher: changed replace.el
 
 Stephan Stahl: changed which-func.el buff-menu.el buffer.c dired-x.texi
   ediff-mult.el
@@ -4761,11 +5220,11 @@ Stephen A. Wood: changed fortran.el
 
 Stephen Berman: wrote todo-mode-tests.el
 and co-wrote todo-mode.el
-and changed wdired.el todo-mode.texi diary-lib.el wdired-tests.el
-  dired-tests.el doc-view.el files.el minibuffer.el dired.el frames.texi
-  hl-line.el info.el menu-bar.el mouse.el otodo-mode.el subr.el
-  .gitattributes TUTORIAL allout.el artist.el compile.texi
-  and 43 other files
+and changed wdired.el todo-mode.texi diary-lib.el dired.el
+  wdired-tests.el dired-tests.el doc-view.el files.el info.el
+  minibuffer.el todo-test-1.todo eww.el frames.texi hl-line.el
+  menu-bar.el mouse.el otodo-mode.el subr.el .gitattributes TUTORIAL
+  allout.el and 59 other files
 
 Stephen C. Gilardi: changed configure.ac
 
@@ -4779,19 +5238,20 @@ and changed diary-lib.el octave.el org-agenda.el 
locate.el replace.el
 
 Stephen Gildea: wrote refcard.tex
 and co-wrote mh-funcs.el mh-search.el
-and changed time-stamp.el time-stamp-tests.el mh-e.el mh-comp.el
-  mh-utils.el mh-junk.el files.el mh-customize.el mh-e.texi mh-show.el
-  backups.texi dns-mode.el fileio.c files.texi fortran.el goto-addr.el
-  mh-mime.el misc.texi mwheel.el tex-mode.el
+and changed time-stamp.el time-stamp-tests.el mh-e.el mh-junk.el
+  mh-comp.el mh-utils-tests.el mh-utils.el mh-e.texi mh-show.el files.el
+  mh-customize.el mh-xface-tests.el backups.texi compile.texi dns-mode.el
+  fileio.c files.texi finder.el fortran.el goto-addr.el iso8601-tests.el
+  and 17 other files
 
 Stephen J. Turnbull: changed ediff-init.el strings.texi subr.el
 
 Stephen Leake: wrote elisp-mode-tests.el
-and changed ada-mode.el ada-xref.el elisp-mode.el xref.el window.el
-  mode-local.el CONTRIBUTE ada-prj.el project.el vc-mtn.el ada-stmt.el
-  cedet-global.el ede/generic.el simple.el autoload.el bytecomp.el
-  cl-generic.el ede/locate.el files.texi functions.texi package.el
-  and 30 other files
+and changed elisp-mode.el xref.el window.el mode-local.el CONTRIBUTE
+  project.el vc-mtn.el ada-stmt.el cedet-global.el ede/generic.el
+  simple.el autoload.el bytecomp.el cl-generic.el ede/locate.el
+  files.texi functions.texi package.el progmodes/grep.el windows.texi
+  INSTALL.REPO and 32 other files
 
 Stephen Pegoraro: changed xterm.c
 
@@ -4803,7 +5263,8 @@ Steve Fisk: co-wrote cal-tex.el
 
 Steve Grubb: changed vcdiff
 
-Steven Allen: changed em-prompt.el xdg.el
+Steven Allen: changed em-prompt.el esh-mode.el tramp-gvfs.el
+  tramp-integration.el url-expand.el xdg.el
 
 Steven De Herdt: changed vc/vc-bzr.el
 
@@ -4825,7 +5286,7 @@ Steven Tamm: changed macterm.c mac.c macfns.c 
configure.ac mac-win.el
 Steve Nygard: changed unexnext.c
 
 Steve Purcell: wrote less-css-mode.el
-and changed package.el nnimap.el nsterm.m sql.el
+and changed package.el nnimap.el nsterm.m ruby-mode.el sql.el
 
 Steve Scott: changed rcirc.el
 
@@ -4855,6 +5316,11 @@ Suhail Shergill: changed ob-core.el ox-html.el
 
 Sundar Narasimhan: changed rnews.el
 
+Sungbin Jo: changed nsxwidget.m xwidget.c xwidget.el nsxwidget.h
+  xwidget.h Info.plist.in configure.ac emacs.c nsterm.m src/Makefile.in
+
+Sun Lin: changed dired-aux.el
+
 Sun Microsystems, Inc: wrote emacs.icon sun.el
 and changed emacsclient.c server.el
 
@@ -4903,8 +5369,11 @@ Takai Kousuke: changed ccl.el image/compface.el
 
 Takeshi Yamada: changed fns.c
 
+Takesi Ayanokoji: changed anti.texi efaq.texi
+
 Tak Kunihiro: wrote pixel-scroll.el
-and changed frames.texi mouse.el mwheel.el dired.el ns-win.el
+and changed frames.texi mouse.el mwheel.el dired.el lists.texi ns-win.el
+  subr.el
 
 Tao Fang: changed url-http.el
 
@@ -4913,11 +5382,11 @@ and changed arc-mode.el
 
 Tassilo Horn: wrote doc-view.el
 and co-wrote ol-gnus.el
-and changed reftex-vars.el tex-mode.el gnus.texi reftex-cite.el
-  tsdh-dark-theme.el tsdh-light-theme.el gnus-sum.el file-notify-tests.el
-  reftex.el misc.texi org-gnus.el prog-mode.el subword.el image-mode.el
-  json.el lisp-mode.el cc-cmds.el display.texi em-term.el emacsbug.el
-  files.el and 82 other files
+and changed bug-reference.el reftex-vars.el tex-mode.el browse-url.el
+  gnus.texi reftex-cite.el tsdh-dark-theme.el tsdh-light-theme.el
+  gnus-sum.el maintaining.texi file-notify-tests.el gnus-art.el misc.texi
+  reftex.el org-gnus.el prog-mode.el subword.el image-mode.el json.el
+  lisp-mode.el rcirc.el and 99 other files
 
 Tatsuya Ichikawa: changed gnus-agent.el gnus-cache.el
 
@@ -4936,8 +5405,9 @@ Teodor Zlatanov: wrote auth-source.el gnus-registry.el 
gnus-tests.el
   url-future-tests.el url-future.el url-util-tests.el
 and changed spam.el gnus.el nnimap.el gnus.texi gnutls.c gnus-sum.el
   auth.texi cfengine.el gnus-sync.el gnus-util.el gnus-start.el netrc.el
-  gnutls.h message.el spam-stat.el encrypt.el mail-source.el nnir.el
-  nnmail.el auth-source-tests.el configure.ac and 119 other files
+  gnutls.h message.el spam-stat.el .gitlab-ci.yml encrypt.el
+  mail-source.el nnir.el nnmail.el auth-source-tests.el
+  and 125 other files
 
 Terje Rosten: changed xfns.c version.el xterm.c xterm.h
 
@@ -4956,12 +5426,17 @@ Thamer Mahmoud: changed arabic.el
 
 Theodore Jump: changed makefile.nt makefile.def w32-win.el w32faces.c
 
+Theodor Thornhill: changed project.el css-mode.el maintaining.texi
+  mwheel.el shell.el tutorial.el
+
 Theresa O'Connor: wrote json.el
 and changed erc.el erc-viper.el erc-log.el erc-track.el viper.el
   erc-backend.el erc-chess.el erc-dcc.el erc-ezbounce.el erc-goodies.el
   erc-list.el erc-macs.el erc-match.el erc-ring.el erc-services.el
   erc-stamp.el goto-addr.el latin-ltx.el progmodes/python.el url-auth.el
 
+Thibault Polge: changed ibuffer.el subr.el
+
 Thien-Thi Nguyen: wrote last-chance.el
 and co-wrote hideshow.el
 and changed ewoc.el vc.el info.el processes.texi zone.el lisp-mode.el
@@ -4978,7 +5453,7 @@ Thierry Volpiatto: changed bookmark.el files.el 
dired-aux.el
   eshell/eshell.el gnus-sum.el keyboard.c net-utils.el package.el
   tramp.el eldoc.el files.texi image-mode.el info.el man.el minibuffer.el
   pcmpl-gnu.el subr.el winner.el woman.el avoid.el commands.texi
-  and 15 other files
+  and 16 other files
 
 Thomas Bach: changed wisent/python.el
 
@@ -4994,10 +5469,11 @@ Thomas Dorner: changed ange-ftp.el
 Thomas Dye: changed org.texi org-bibtex.el ob-R.el org.el
 
 Thomas Fitzsimmons: wrote soap-client.el
-and changed soap-inspect.el ldap.el eudc-vars.el eudc.el eudc.texi
-  ntlm.el eudcb-ldap.el eudcb-bbdb.el eudc-bob.el eudc-export.el
-  eudcb-ph.el package.el url-http.el diary-lib.el display.texi
-  eudc-hotlist.el icalendar.el url-auth.el
+and changed soap-inspect.el ldap.el eudc.texi eudc-vars.el eudc.el
+  ntlm.el url-http.el eudcb-ldap.el eudcb-bbdb.el ntlm-tests.el
+  eudc-bob.el eudc-export.el eudcb-ph.el package.el README authinfo
+  diary-lib.el display.texi eudc-hotlist.el eudcb-macos-contacts.el
+  icalendar.el and 3 other files
 
 Thomas Horsley: changed cxux-crt0.s cxux.h cxux7.h emacs.c nh3000.h
   nh4000.h simple.el sysdep.c xterm.c
@@ -5026,8 +5502,6 @@ and changed emacs-lock.el subr.el
 
 Thor Kristoffersen: changed nntp.el
 
-Thorsten Jolitz: co-wrote ob-picolisp.el
-
 Thorsten Ohl: changed lread.c next.h
 
 Tiago Saboga: changed files.el
@@ -5048,28 +5522,32 @@ Tim Harper: changed ns-win.el
 
 Tim Howe: changed org-clock.el
 
-Tim Landscheidt: changed gnus-art.el gnus.texi icalendar.el sort.el
-  ws-mode.el
+Tim Landscheidt: changed gnus-art.el eieio-opt.el gnus.texi icalendar.el
+  sort.el ws-mode.el
 
 Timo Juhani Lindfors: changed gnus-msg.el
 
 Timo Lilja: changed mail-source.el
 
-Timo Myyrä: changed battery.el
+Timo Myyrä: changed battery.el configure.ac english.el european.el
+  language/japanese.el mule-conf.el systhread.c
 
 Timo Savola: changed emacs.c gtkutil.c startup.el x-win.el xfns.c xterm.c
   xterm.h
 
+Tim Ruffing: changed emacs.service
+
 Tim Van Holder: changed emacsclient.c Makefile.in configure.ac
   progmodes/compile.el which-func.el
 
 Tino Calancha: wrote buff-menu-tests.el ediff-ptch-tests.el
   em-ls-tests.el ffap-tests.el hi-lock-tests.el ls-lisp-tests.el
   register-tests.el rmc-tests.el
-and changed ibuffer.el ibuf-ext.el dired-tests.el dired.el replace.el
-  dired-aux.el replace-tests.el simple.el ibuf-macs.el subr.el dired.texi
-  ibuffer-tests.el ls-lisp.el diff-mode.el files.el cl-macs.el cl-seq.el
-  dired-x.el ediff-ptch.el em-ls.el buff-menu.el and 95 other files
+and changed ibuffer.el dired.el ibuf-ext.el dired-tests.el replace.el
+  dired-aux.el simple.el replace-tests.el dired.texi files.el
+  ibuf-macs.el subr.el ibuffer-tests.el ls-lisp.el cl-macs.el
+  diff-mode.el cl-seq.el dired-x.el ediff-ptch.el em-ls.el files-tests.el
+  and 113 other files
 
 Titus von der Malsburg: changed simple.el window.el
 
@@ -5081,12 +5559,14 @@ Tobias Gerdin: changed xref.el
 
 Tobias Ringström: changed etags.c
 
-Tobias Zawada: changed wid-edit.el
+Tobias Rittweiler: changed xref-tests.el xref.el
+
+Tobias Zawada: changed find-func.el hideshow.el wid-edit.el
 
 Toby Allsopp: changed ldap.el eudc.el
 
 Toby Cubitt: co-wrote avl-tree.el
-and changed org-capture.el org.el org-agenda.el org-clock.el
+and changed org-capture.el org.el org-agenda.el cl-macs.el org-clock.el
   org-colview.el org.texi
 
 Toby Speight: changed generic-x.el window.el
@@ -5098,10 +5578,18 @@ Tokuya Kameshima: changed org-mew.el org-agenda.el
 
 Tomas Abrahamsson: wrote artist.el
 
+Tomas Nordin: changed progmodes/python.el
+
 Tomasz Gajewski: changed cpp-root.el
 
+Tomasz Konojacki: changed perl-mode.el
+
 Tom Breton: changed autoinsert.el cus-edit.el gnus-agent.el lread.c
 
+Tom Fitzhenry: changed vc-hg.el
+
+Tom Gillespie: changed files.el
+
 Tom Hageman: changed etags.c
 
 Tom Houlder: wrote mantemp.el
@@ -5135,10 +5623,10 @@ Tom Seddon: changed w32font.c
 
 Tom Tromey: wrote bug-reference.el erc-list.el package-x.el
 and co-wrote package.el tcl.el
-and changed data.c lisp.h js.el buffer.c data-tests.el alloc.c
-  css-mode.el js-tests.el mhtml-mode.el process.c window.c editfns.c
-  fns.c keyboard.c keymap.c lread.c makefile.el xfns.c bytecode.c cmds.c
-  configure.ac and 206 other files
+and changed data.c lisp.h js.el buffer.c data-tests.el mhtml-mode.el
+  alloc.c css-mode.el js-tests.el process.c window.c bytecode.c editfns.c
+  files.el fns.c keyboard.c keymap.c lread.c makefile.el xfns.c cmds.c
+  and 208 other files
 
 Tom Willemse: changed elec-pair.el package.el perl-mode.el prog-mode.el
   progmodes/python.el simple.el
@@ -5154,6 +5642,9 @@ Torsten Anders: changed ox-beamer.el
 
 Torsten Bronger: changed latin-ltx.el
 
+Torsten Hilbrich: wrote dictionary-connection.el dictionary.el
+and changed net
+
 Toru Tomabechi: wrote language/tibetan.el quail/tibetan.el tibet-util.el
 
 Toru Tsuneyoshi: changed ange-ftp.el buff-menu.el cus-start.el fileio.c
@@ -5163,7 +5654,7 @@ Toshiaki Nomura: changed uxpds.h
 
 Trent W. Buck: changed rcirc.el remember.el rx.el
 
-Trevor Murphy: changed find-dired.el gnus.texi nnimap.el org.el
+Trevor Murphy: changed find-dired.el gnus.texi nnimap.el org.el window.el
 
 Trevor Spiteri: changed progmodes/grep.el
 
@@ -5184,8 +5675,8 @@ Tsuchiya Masatoshi: changed gnus-art.el mm-view.el 
gnus-sum.el
 
 Tsugutomo Enami: changed frame.c keyboard.c configure.ac dispnew.c
   fileio.c process.c simple.el sysdep.c xdisp.c add-log.el bytecomp.el
-  editfns.c emacs.c frame.h gnus-group.el netbsd.h nnheader.el nnimap.el
-  perl-mode.el regex.c regex.h and 6 other files
+  editfns.c emacs-regex.c emacs-regex.h emacs.c frame.h gnus-group.el
+  netbsd.h nnheader.el nnimap.el perl-mode.el and 6 other files
 
 Tsuyoshi Akiho: changed gnus-sum.el nnrss.el
 
@@ -5214,16 +5705,21 @@ Ulrich Müller: changed configure.ac calc-units.el 
lib-src/Makefile.in
   src/Makefile.in version.el doctor.el emacs.1 files.el gamegrid.el
   gud.el server.el ChgPane.c ChgSel.c HELLO INSTALL Makefile.in
   XMakeAssoc.c authors.el bytecomp.el case-table.el configure
-  and 39 other files
+  and 40 other files
 
 Ulrich Neumerkel: changed xterm.c
 
+Ulrich Ölmann: changed misc.texi
+
 Ulrik Vieth: wrote meta-mode.el
 and changed files.el
 
 Ury Marshak: changed nsfns.m
 
-Uwe Brauer: changed mml-smime.el
+Utkarsh Singh: changed em-script.el files.el outline.el tex-mode.el
+  vc-git.el window.el
+
+Uwe Brauer: changed tex-mode.el mml-smime.el
 
 Vadim Nasardinov: changed allout.el
 
@@ -5237,9 +5733,11 @@ Valentin Gatien-Baron: changed emacs-module.c
 
 Valentin Wüstholz: changed org.el
 
+Valery Alexeev: changed cyril-util.el cyrillic.el
+
 Van L: changed subr.el
 
-Vasilij Schneidermann: changed cus-start.el eww.el cc-mode.el
+Vasilij Schneidermann: changed ETAGS.EBNF cus-start.el eww.el cc-mode.el
   debugging.texi display.texi edebug.el emacs-lisp/debug.el eval.c
   ielm.el os.texi profiler.el redisplay-testsuite.el shr.el snake.el
   term.el tetris.el xdisp.c xterm.c
@@ -5260,7 +5758,10 @@ Victor J. Orlikowski: changed erc-dcc.el
 
 Victor Zandy: wrote zone.el
 
-Viktor Rosenfeld: changed ob-sql.el org.el
+Viktor Rosenfeld: co-wrote ox-koma-letter.el
+and changed ob-sql.el org.el
+
+Viktor Slavkovikj: changed rmail.el
 
 Ville Skyttä: changed mh-comp.el pgg.el tcl.el
 
@@ -5296,10 +5797,14 @@ and changed erc-backend.el erc.el erc-services.el 
hexl.el emacs.c
   erc-button.el erc-capab.el erc-join.el htmlfontify.texi sh-script.el
   xterm.c xterm.h
 
+Vladimir Alexiev: changed arc-mode.el nnvirtual.el tmm.el
+
 Vladimir Kazanov: changed java.srt
 
 Vladimir Lomov: changed ox-html.el
 
+Vladimir Nikishkin: changed scm.el
+
 Vladimir Panteleev: wrote bat-mode-tests.el
 and changed ert.texi bat-mode.el
 
@@ -5343,6 +5848,8 @@ Wilfred Hughes: changed button.el byte-opt.el css-mode.el 
find-func.el
 
 Will Glozer: changed macterm.c
 
+William Denton: changed ruby-mode.el
+
 William F. Schelter: wrote telnet.el
 
 William M. Perry: wrote url-dav.el url-gw.el url-http.el url-util.el
@@ -5363,10 +5870,8 @@ William Sommerfeld: wrote emacsclient.c scribe.el 
server.el
 William Stevenson: wrote adwaita-theme.el
 and changed artist.el
 
-William Waites: wrote ob-abc.el
-
 William Xu: changed arc-mode.el gcc.el hideif.el nsterm.m outline.el
-  url.el webjump.el
+  url.el webjump.el xref.el
 
 Will Mengarini: wrote repeat.el
 
@@ -5377,6 +5882,8 @@ and changed files.el
 
 Wim Nieuwenhuizen: changed TUTORIAL.nl
 
+Win Treese: changed nsmenu.m
+
 Wlodzimierz Bzyl: co-wrote ogonek.el
 and changed pl-refcard.tex
 
@@ -5405,6 +5912,7 @@ and changed process.c alloc.c callint.c config.in 
configure.ac data.c
   print.c sort.el
 
 Wolfgang Scherer: changed vc-cvs.el vc-dir.el vc-svn.el vc.el pcvs.el
+  vc-git.el
 
 Wolfgang Schnerring: changed emacsclient.c
 
@@ -5418,7 +5926,7 @@ Xavier Maillard: changed gnus-faq.texi gnus-score.el 
mh-utils.el spam.el
 
 Xi Lu: changed etags.c tramp-sh.el
 
-Xu Chunyang: changed dom.el eww.el gud.el netrc.el
+Xu Chunyang: changed eww.el dom.el gud.el netrc.el
 
 Xue Fuqiao: changed display.texi emacs-lisp-intro.texi files.texi
   maintaining.texi text.texi windows.texi nonascii.texi frames.texi
@@ -5433,14 +5941,18 @@ Yair F: changed hebrew.el
 Yamamoto Mitsuharu: wrote uvs.el
 and changed macterm.c macfns.c mac-win.el xterm.c mac.c macterm.h image.c
   macmenu.c macgui.h xdisp.c ftfont.c xfns.c keyboard.c macselect.c
-  ftcrfont.c configure.ac macfont.m w32term.c dispextern.h
-  src/Makefile.in unexmacosx.c and 109 other files
+  ftcrfont.c macfont.m configure.ac w32term.c dispextern.h
+  src/Makefile.in unexmacosx.c and 111 other files
+
+Yan Gajdos: changed vc-git.el
 
 Yann Dirson: changed imenu.el
 
 Yann Hodique: changed ox-publish.el package.el rcirc.el
 
-Yasuhiro Kimura: changed japan-util.el
+Yasuhiro Kimura: changed schemas.xml japan-util.el
+
+Yasuoka Masahiko: changed configure.ac
 
 Yasushi Shoji: changed org-clock.el org.texi ox-ascii.el
 
@@ -5449,6 +5961,10 @@ Yavor Doganov: changed configure.ac Makefile.in emacs.1 
etags.1 make-dist
 
 Ye Qianchuan: changed descr-text.el
 
+Yichao Yu: changed xfns.c xterm.c
+
+Yikai Zhao: changed memory-report.el
+
 Yoichi Nakayama: changed browse-url.el finder.el man.el rfc2368.el
 
 Yong Lu: changed charset.c coding.c language/greek.el
@@ -5466,17 +5982,23 @@ Yoshinari Nomura: changed ox-html.el ox.el
 Yoshinori Koseki: wrote iimage.el
 and changed fontset.el message.el nnheader.el nnmail.el
 
-Yuan Fu: changed gdb-mi.el
+Yuan Fu: changed gdb-mi.el building.texi doc-view.el outline.el
+  simple-tests.el cus-start.el display.texi gud.el simple.el text.texi
+  window.el xdisp.c
 
 Yuanle Song: changed rng-xsd.el
 
+Yuchen Pei: changed calendar.texi diary-lib.el icalendar-tests.el
+
 Yue Daian: wrote cl-font-lock.el
 
+Yuga Ego: changed emacs-lisp-intro.texi
+
 Yu-ji Hosokawa: changed README.W32
 
 Yukihiro Matsumoto: co-wrote ruby-mode.el
 
-Yuri D'elia: changed message.el package.el
+Yuri D'Elia: changed message.el package.el
 
 Yuri Karaban: changed pop3.el
 
@@ -5500,15 +6022,22 @@ Yves Baumes: changed package.el
 Zachary Kanfer: changed org.el cus-edit.el keyboard.c newcomment.el
   simple.el
 
+Zajcev Evgeny: changed display.texi image.c battery.el buffer.c fileio.c
+  lread.c svg.el window.el xdisp.c
+
 Zhang Wei: changed chinese.el characters.el mule-cmds.el xfns.c erc.el
   faces.el fontset.el mm-util.el mule.el org-publish.el rfc2047.el
   x-win.el
 
 Zhang Weize: wrote ob-plantuml.el
 
+Zhehao Lin: changed xfaces.c
+
+Zhiwei Chen: changed hideif.el
+
 Zhongwei Yao: changed tramp-adb.el
 
-Zhu Zihao: changed svg.el
+Zhu Zihao: changed eieio.el svg.el
 
 Zoltan Kemenczy: changed gud.el
 
diff --git a/etc/CALC-NEWS b/etc/CALC-NEWS
index da9ed66f15..217e16c108 100644
--- a/etc/CALC-NEWS
+++ b/etc/CALC-NEWS
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2021 Free Software Foundation, Inc.
+Copyright (C) 2001-2022 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 629ab0b1fd..32ae5cf3bc 100644
--- a/etc/ChangeLog.1
+++ b/etc/ChangeLog.1
@@ -6891,7 +6891,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1993-1999, 2001-2021 Free Software Foundation, Inc.
+  Copyright (C) 1993-1999, 2001-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/etc/DEBUG b/etc/DEBUG
index a05aeef160..dd33b42f19 100644
--- a/etc/DEBUG
+++ b/etc/DEBUG
@@ -1,6 +1,6 @@
 Debugging GNU Emacs
 
-Copyright (C) 1985, 2000-2021 Free Software Foundation, Inc.
+Copyright (C) 1985, 2000-2022 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 ** Preliminaries
diff --git a/etc/DISTRIB b/etc/DISTRIB
index 3dd1bf3d98..a60d140aa6 100644
--- a/etc/DISTRIB
+++ b/etc/DISTRIB
@@ -1,7 +1,7 @@
                                                -*- text -*-
             GNU Emacs availability information
 
-Copyright (C) 1986-1993, 1995, 1998, 2000-2021 Free Software Foundation,
+Copyright (C) 1986-1993, 1995, 1998, 2000-2022 Free Software Foundation,
 Inc.
 See the end of the file for license conditions.
 
diff --git a/etc/ERC-NEWS b/etc/ERC-NEWS
index 31ea3de620..bdcd943c37 100644
--- a/etc/ERC-NEWS
+++ b/etc/ERC-NEWS
@@ -1,6 +1,6 @@
 ERC NEWS                                                       -*- outline -*-
 
-Copyright (C) 2006-2021 Free Software Foundation, Inc.
+Copyright (C) 2006-2022 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Please send ERC bug reports to 'bug-gnu-emacs@gnu.org',
diff --git a/etc/ETAGS.EBNF b/etc/ETAGS.EBNF
index c72ac6f721..ac89e7436a 100644
--- a/etc/ETAGS.EBNF
+++ b/etc/ETAGS.EBNF
@@ -94,7 +94,7 @@ those.
 
 ===================== end of discussion of tag names =====================
 
-Copyright (C) 2002-2021 Free Software Foundation, Inc.
+Copyright (C) 2002-2022 Free Software Foundation, Inc.
 
 COPYING PERMISSIONS:
 
diff --git a/etc/ETAGS.README b/etc/ETAGS.README
index 3c56021524..af1bf10566 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-2021 Free Software
+Copyright (C) 1984, 1987-1989, 1993-1995, 1998-2022 Free Software
 Foundation, Inc.
 
 This file is not considered part of GNU Emacs.
diff --git a/etc/HELLO b/etc/HELLO
index 8bd489fb40..5b2002ff93 100644
--- a/etc/HELLO
+++ b/etc/HELLO
@@ -96,7 +96,7 @@ Vietnamese (tiếng Việt)       Chào bạn
 
 
 
-Copyright (C) 2001-2021 Free Software Foundation, Inc.
+Copyright (C) 2001-2022 Free Software Foundation, Inc.
 
 
 This file is part of GNU Emacs.
diff --git a/etc/MACHINES b/etc/MACHINES
index d883f1abd6..dcdef0c557 100644
--- a/etc/MACHINES
+++ b/etc/MACHINES
@@ -1,6 +1,6 @@
 Emacs machines list
 
-Copyright (C) 1989-1990, 1992-1993, 1998, 2001-2021 Free Software
+Copyright (C) 1989-1990, 1992-1993, 1998, 2001-2022 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 29c48c7214..9bcfc40af2 100644
--- a/etc/MH-E-NEWS
+++ b/etc/MH-E-NEWS
@@ -1,6 +1,6 @@
 * COPYRIGHT
 
-Copyright (C) 2001-2021 Free Software Foundation, Inc.
+Copyright (C) 2001-2022 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 87a7a43a5e..d7281467c6 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.
 
-Copyright (C) 2021 Free Software Foundation, Inc.
+Copyright (C) 2021-2022 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Please send Emacs bug reports to 'bug-gnu-emacs@gnu.org'.
@@ -24,6 +24,11 @@ applies, and please also update docstrings as needed.
 
 * Installation Changes in Emacs 29.1
 
++++
+** 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.
+
 ** Emacs has been ported to the Haiku operating system.
 The configuration process should automatically detect and build for
 Haiku.  There is also an optional window-system port to Haiku, which
@@ -43,7 +48,7 @@ development files are present on your system, and configure 
Emacs with
 *** Double buffering is now enabled on the Haiku operating system.
 Unlike X, there is no compile-time option to enable or disable
 double-buffering.  If you wish to disable double-buffering, change the
-frame parameter `inhibit-double-buffering' instead.
+frame parameter 'inhibit-double-buffering' instead.
 
 ** Emacs now installs the ".pdmp" file using a unique fingerprint in the name.
 The file is typically installed using a file name akin to
@@ -56,9 +61,21 @@ If your X server has support and you have the XInput 2 
development headers
 installed, you can configure Emacs with the option '--with-xinput2' to enable
 this support.
 
-The named feature `xinput2' can be used to test for the presence of
+The named feature '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 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.
+
+---
+** 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.
+
 
 * Startup Changes in Emacs 29.1
 
@@ -73,22 +90,50 @@ be used to reinitialize structures that would normally be 
done at load
 time.
 
 
+* Incompatible changes in Emacs 29.1
+
+---
+** Support for old EIEIO functions is not autoloaded any more.
+You need an explicit (require 'eieio-compat) to use 'defmethod'
+and 'defgeneric' (which have been made obsolete in Emacs-25 with
+'cl-defmethod' and 'cl-defgeneric').
+Similarly you might need to (require 'eieio-compat) before loading
+files that were compiled with an old EIEIO (Emacs<25).
+
+---
+** 'C-x 8 .' has been moved to 'C-x 8 . .'.
+This is to open up the 'C-x 8 .' map to bind further characters there.
+
+
 * Changes in Emacs 29.1
 
+** New command 'sqlite-mode-open-file' for examining an sqlite3 file.
+This uses the new 'sqlite-mode' which allows listing the tables in a
+DB file, and examining and modifying the columns and the contents of
+those tables.
+
+---
+** 'write-file' will now copy some file mode bits.
+If the current buffer is visiting a file that is executable, the
+'C-x C-w' command will now make the new file executable, too.
+
++++
+** New user option 'process-error-pause-time'.
+This determines how long to pause Emacs after a process
+filter/sentinel error has been handled.
+
++++
+** New face 'variable-pitch-text'.
+This face is like 'variable-pitch' (from which it inherits), but is
+slightly larger, which should help with the visual size differences
+between the default, non-proportional font and proportional fonts when
+mixed.
+
 +++
 ** New face 'mode-line-active'.
 This inherits from the 'mode-line' face, but is the face actually used
 on the mode lines (along with 'mode-line-inactive').
 
----
-** The mode line now uses a proportional font by default.
-To get the old monospaced mode line back, customize the
-'mode-line-active' and 'mode-line-inactive' faces not to inherit from
-the 'variable-pitch' face, or add this to your ~/.emacs:
-
-  (set-face-attribute 'mode-line-active nil :inherit 'mode-line)
-  (set-face-attribute 'mode-line-inactive nil :inherit 'mode-line)
-
 +++
 ** New function 'buffer-text-pixel-size'.
 This is similar to 'window-text-pixel-size', but can be used when the
@@ -99,6 +144,16 @@ buffer isn't displayed.
 This controls the thickness of the external borders of the menu bars
 and pop-up menus.
 
++++
+** New X resource: "inputStyle".
+This controls the style of the pre-edit and status areas of X input
+methods.
+
+---
+** New user option 'x-gtk-use-native-input'.
+This controls whether or not GTK input methods are used by Emacs,
+instead of XIM input methods.
+
 ---
 ** New minor mode 'pixel-scroll-precision-mode'.
 When enabled, and if your mouse supports it, you can scroll the
@@ -115,18 +170,29 @@ 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".
 
+** ERT
+
 +++
-** New ERT variables 'ert-batch-print-length' and 'ert-batch-print-level'.
+*** New ERT variables 'ert-batch-print-length' and 'ert-batch-print-level'.
 These variables will override 'print-length' and 'print-level' when
 printing Lisp values in ERT batch test results.
 
 ---
-** Redefining an ERT test in batch mode now signals an error
+*** Redefining an ERT test in batch mode now signals an error.
 Executing 'ert-deftest' with the same name as an existing test causes
 the previous definition to be discarded, which was probably not
 intended when this occurs in batch mode.  To remedy the error, rename
 tests so that they all have unique names.
 
++++
+*** ERT can generate JUnit test reports.
+When environment variable 'EMACS_TEST_JUNIT_REPORT' is set, ERT
+generates a JUnit test report under this file name.  This is useful
+for Emacs integration into CI/CD test environments.
+
+*** Unbound test symbols now signal an 'ert-test-unbound' error.
+This affects the 'ert-select-tests' function and its callers.
+
 ** Emoji
 
 +++
@@ -161,7 +227,7 @@ command also works for non-Emoji characters.)
 
 ---
 *** 'C-h b' uses outlining by default.
-Set 'describe-bindings-outline' to nil to get the old behaviour.
+Set 'describe-bindings-outline' to nil to get the old behavior.
 
 ---
 *** Jumping to function/variable source now saves mark before moving point.
@@ -203,11 +269,23 @@ For example, a 'display-buffer-alist' entry of
 will make the body of the chosen window 40 columns wide.  For the
 height use 'window-height' in combination with 'body-lines'.
 
+*** 'other-window-scroll-default' can define the other window to scroll.
+
+** Rcirc
+
++++
+*** New command 'rcirc-when'.
+
 ** Tab Bars and Tab Lines
 
 ---
 *** 'C-x t RET' creates a new tab when the provided tab name doesn't exist.
 
+---
+*** New keymap 'tab-bar-history-mode-map'.
+By default, it contains 'C-c <left>' and 'C-c <right>' to browse
+the history of tab window configurations back and forward.
+
 ** Better detection of text suspiciously reordered on display.
 The function 'bidi-find-overridden-directionality' has been extended
 to detect reordering effects produced by embeddings and isolates
@@ -253,7 +331,7 @@ This command increases (or decreases) the number of empty 
lines before
 point.
 
 ---
-*** Improved mouse behavior with auto-scrolling modes.
+** Improved mouse behavior with auto-scrolling modes.
 When clicking inside the 'scroll-margin' or 'hscroll-margin' region
 the point is now moved only when releasing the mouse button.  This no
 longer results in a bogus selection, unless the mouse has been
@@ -267,6 +345,8 @@ effectively dragged.
 Customize this option to limit the number of entries in the menu
 "Edit->Paste from Kill Menu".  The default is 60.
 
+** Performing a pinch gesture on a touchpad now increases the text scale.
+
 ** show-paren-mode
 
 +++
@@ -295,6 +375,45 @@ received.
 
 * Changes in Specialized Modes and Packages in Emacs 29.1
 
+** Minibuffer and Completions
+
+*** The *Completions* buffer can now be automatically selected.
+To enable this behavior, customize the option 'completion-auto-select'
+to t.  Then pressing TAB will switch to the *Completions* buffer when
+it pops up that buffer.
+
+*** New user option 'completion-wrap-movement'.
+When non-nil, the commands 'next-completion' and 'previous-completion'
+automatically wrap around on reaching the beginning or the end of
+the *Completions* buffer.
+
+** Isearch and Replace
+
++++
+*** New user option 'char-fold-override' disables default character 
equivalences.
+
+** New minor mode 'glyphless-display-mode'.
+This allows an easy way to toggle seeing all glyphless characters in
+the current buffer.
+
+** Registers
+
++++
+*** Buffer names can now be stored in registers.
+For instance, to enable jumping to the "*Messages*" buffer with
+'C-x r j m':
+
+    (set-register ?m '(buffer . "*Messages*"))
+
+** pixel-fill
+
++++
+*** This is a new package that deals with filling variable-pitch text.
+
++++
+*** New function 'pixel-fill-region'.
+This fills the region to be no wider than a specified pixel width.
+
 ** Info
 
 ---
@@ -321,6 +440,11 @@ If non-nil, 'C-c C-a' will put attached files at the end 
of the message.
 ---
 *** Message Mode now supports image yanking.
 
+---
+*** New user option 'message-server-alist'.
+This controls automatic insertion of the "X-Message-SMTP-Method"
+header before sending a message.
+
 ** HTML Mode
 
 ---
@@ -334,6 +458,11 @@ It narrows to the current node.
 
 ** eww/shr
 
++++
+*** New user option 'shr-allowed-images'.
+This complements 'shr-blocked-images', but allows specifying just the
+allowed images.
+
 +++
 *** New user option 'shr-use-xwidgets-for-media'.
 If non-nil (and Emacs has been built with support for xwidgets),
@@ -348,6 +477,16 @@ the common "utm_" trackers from URLs.
 
 ** Gnus
 
+---
+*** Gnus now uses a variable-pitch font in the headers by default.
+To get the monospace font back, you can put something like the
+following in your .gnus file:
+
+    (set-face-attribute 'gnus-header nil :inherit 'unspecified)
+
+---
+*** The default value of 'gnus-treat-fold-headers' is now 'head'.
+
 ---
 *** New face 'gnus-header'.
 All other 'gnus-header-*' faces inherit from this face now.
@@ -365,7 +504,7 @@ representation as emojis.
 ** EIEIO
 
 +++
-*** 'slot-value' can now be used to read slots of 'cl-defstruct' objects.
+*** 'slot-value' can now be used to access slots of 'cl-defstruct' objects.
 
 ** align
 
@@ -427,6 +566,10 @@ it with new 'term-{faint,italic,slow-blink,fast-blink}' 
faces.
 *** 'project-find-file' and 'project-or-external-find-file' now accept
 a prefix argument which is interpreted to mean "include all files".
 
+*** 'project-kill-buffers' can display the list of buffers to kill.
+Customize the user option 'project-kill-buffers-display-buffer-list'
+to enable the display of the buffer list.
+
 +++
 *** New command 'xref-go-forward'.
 It is bound to 'C-M-,' and jumps to the location where 'xref-go-back'
@@ -467,6 +610,12 @@ This works like 'image-transform-fit-to-window'.
 The new 'fit-window' option will never scale an image more than this
 much (in percent).  It is nil by default, which means no limit.
 
+---
+*** New user option 'image-text-based-formats'.
+This controls whether or not to show a message when opening certain
+image formats saying how to edit it as text.  The default is to show
+this message for SVG and XPM.
+
 ** Image-Dired
 
 +++
@@ -484,6 +633,16 @@ user options that are no longer needed are now obsolete:
 'image-dired-display-window-width-correction',
 'image-dired-temp-image-file'.
 
+---
+*** Navigation and marking commands now work in image display buffer.
+The following new bindings have been added:
+
+  n / SPC   image-dired-display-next-thumbnail-original
+  p / DEL   image-dired-display-previous-thumbnail-original
+  m         image-dired-mark-thumb-original-file
+  d         image-dired-flag-thumb-original-file
+  u         image-dired-unmark-thumb-original-file
+
 ---
 *** Reduce dependency on external "exiftool" command.
 The 'image-dired-copy-with-exif-file-name' no longer requires an
@@ -494,7 +653,7 @@ external "exiftool" command to be available.  The user 
options
 ---
 *** New command for the thumbnail buffer.
 The new command 'image-dired-unmark-all-marks' has been added.  It is
-bound to 'U' in the thumbnail buffer.
+bound to 'U' in the thumbnail and display buffer.
 
 ---
 *** Support Thumbnail Managing Standard v0.9.0 (Dec 2020).
@@ -515,13 +674,16 @@ used for images that are flagged for deletion in the 
Dired buffer
 associated with Image-Dired.
 
 ---
-*** The 'image-dired-slideshow-start' command has been revamped.
+*** 'image-dired-slideshow-start' is now bound to 'S'.
+It is bound in both the thumbnail and display buffer.
+
+---
+*** The 'image-dired-slideshow-start' command no longer prompts.
 It no longer inconveniently prompts for a number of images and a
 delay: it runs indefinitely, but stops automatically on any command.
 You can set the delay with a prefix argument, or a negative prefix
-argument to prompt anyways.  Customize the user option
-'image-dired-slideshow-delay' to change the default, which is 5
-seconds.  It is bound to 'S' in the thumbnail and display buffer.
+argument to prompt for a delay.  Customize the user option
+'image-dired-slideshow-delay' to change the default from 5 seconds.
 
 ---
 *** Support for bookmark.el.
@@ -529,6 +691,17 @@ The command 'bookmark-set' (bound to 'C-x r m') is now 
supported in
 the thumbnail view, and will create a bookmark that opens the current
 directory in Image-Dired.
 
+---
+*** New user option 'image-dired-marking-shows-next'.
+If this option is non-nil (the default), marking, unmarking or
+flagging an image in either the thumbnail or display buffer shows the
+next image.
+
+---
+*** Image information is now shown in the header line.
+This replaces the message most navigation commands in the thumbnail
+buffer used to show at the bottom of the screen.
+
 +++
 *** 'image-dired-show-all-from-dir-max-files' has been increased to 500.
 This option controls asking for confirmation when starting Image-Dired
@@ -546,6 +719,13 @@ updating the thumbnail file.
 
 ** Dired
 
+*** 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
@@ -606,6 +786,26 @@ When calling 'abbreviate-file-name' on a Tramp filename, 
the result
 will abbreviate the user's home directory, for example by abbreviating
 "/ssh:user@host:/home/user" to "/ssh:user@host:~".
 
+** Browse URL
+
+---
+*** Support for the Netscape web browser has been removed.
+This support has been obsolete since Emacs 25.1.  The final version of
+the Netscape web browser was released in February, 2008.
+
+---
+*** Support for the Galeon web browser has been removed.
+This support has been obsolete since Emacs 25.1.  The final version of
+the Galeon web browser was released in September, 2008.
+
+** Miscellaneous
+
+---
+*** New minor mode 'elide-head-mode'.
+Enabling this minor mode turns on hiding header material, like
+'elide-head' does; disabling it shows the header.  The commands
+'elide-head' and 'elide-head-show' are now obsolete.
+
 
 * New Modes and Packages in Emacs 29.1
 
@@ -618,6 +818,11 @@ Emacs buffers, like indentation and the like.  The new ert 
function
 
 * Incompatible Lisp Changes in Emacs 29.1
 
+** User option 'mail-source-ignore-errors' is now obsolete.
+The whole mechanism for prompting users to continue in case of
+mail-source errors has been removed, so this option is no longer
+needed.
+
 ** Fonts
 
 ---
@@ -691,9 +896,35 @@ with recent versions of Firefox.
 ** The function 'image-dired-get-exif-data' is now obsolete.
 Use 'exif-parse-file' and 'exif-field' instead.
 
+---
+** 'insert-directory' alternatives should not change the free disk space line.
+This change is now applied in 'dired-insert-directory'.
+
+** Some functions and variables obsolete since Emacs 23 have been removed:
+'find-emacs-lisp-shadows', 'newsticker-cache-filename',
+'unify-8859-on-decoding-mode', 'unify-8859-on-encoding-mode',
+'vc-arch-command'.
+
++++
+** Base64 encoding no longer tolerates latin-1 input.
+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.
+
 
 * Lisp Changes in Emacs 29.1
 
++++
+** New variable 'lisp-directory' holds the directory of Emacs's own Lisp files.
+
++++
+** New facility for handling session state: 'multisession-value'.
+This can be used as a convenient way to store (simple) application
+state, and 'M-x list-multisession-values' allows users to list
+(and edit) this data.
+
 +++
 ** New function 'get-display-property'.
 This is like 'get-text-property', but works on the 'display' text
@@ -708,6 +939,17 @@ property.
 ** New 'min-width' 'display' property.
 This allows setting a minimum display width for a region of text.
 
++++
+** New event type 'touch-end'.
+This event is sent whenever the user's finger moves off the mouse
+wheel on some mice, or when the user's finger moves off the touchpad.
+
++++
+** New event type 'pinch'.
+This event is sent when a user peforms a pinch gesture on a touchpad,
+which is comprised of placing two fingers on the touchpad and moving
+them towards or away from each other.
+
 ** Keymaps and key definitions
 
 +++
@@ -752,6 +994,10 @@ If non-nil, remove the definition from the keymap.  This 
is subtly
 different from setting a definition to nil (when the keymap has a
 parent).
 
++++
+*** 'read-multiple-choice' now takes an optional SHOW-HELP argument.
+If non-nil, show the help buffer immediately, before any user input.
+
 +++
 *** New function 'key-valid-p'.
 The 'kbd' function is quite permissive, and will try to return
@@ -764,6 +1010,11 @@ syntax.
 This is like 'kbd', but only returns vectors instead of a mix of
 vectors and strings.
 
++++
+*** New ':type' for 'defcustom' for keys.
+The new 'key' type can be used for options that should be a valid key
+according to 'key-valid-p'.  The type 'key-sequence' is now obsolete.
+
 +++
 ** New substitution in docstrings and 'substitute-command-keys'.
 Use \\`KEYSEQ' to insert a literal key sequence "KEYSEQ" (for example
@@ -828,6 +1079,17 @@ when they have changed.
 This can be used to check whether a specific font has a glyph for a
 character.
 
++++
+** 'window-text-pixel-size' now accepts a new argument 'ignore-line-at-end'.
+This controls whether or not the last screen line of the text being
+measured will be counted for the purpose of calculating the text
+dimensions.
+
++++
+** 'window-text-pixel-size' understands a new meaning of 'from'.
+Specifying a cons as the from argument allows to start measuring text
+from a specified amount of pixels above or below a position.
+
 ** XDG support
 
 *** New function 'xdg-state-home' returns 'XDG_STATE_HOME' environment 
variable.
@@ -992,6 +1254,38 @@ that should be displayed, and the xwidget that asked to 
display it.
 This function is used to control where and if an xwidget stores
 cookies set by web pages on disk.
 
+** New variable 'help-buffer-under-preparation'.
+This variable is bound to t during the preparation of a "*Help*" buffer.
+
++++
+** Timestamps like (1 . 1000) now work without warnings being generated.
+For example, (time-add nil '(1 . 1000)) no longer warns that the
+(1 . 1000) acts like (1000 . 1000000).  This warning, which was a
+temporary transition aid for Emacs 27, has served its purpose.
+
++++
+** '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.
+
++++
+** New events for taking advantage of touchscreen devices.
+The events 'touchscreen-begin, 'touchscreen-update', and
+'touchscreen-end' have been added to take better advantage of
+touch-capable display panels.
+
++++
+** New error symbol 'permission-denied'.
+This is a subcategory of 'file-error', and is signaled when some file
+operation fails because the OS doesn't allow Emacs to access a file or
+a directory.
+
++++
+** The ':underline' face attribute now accepts a new property.
+The property ':position' now specifies the position of the underline
+when used as part of a property list specification for the
+':underline' attribute.
+
 
 * Changes in Emacs 29.1 on Non-Free Operating Systems
 
diff --git a/etc/NEWS.1-17 b/etc/NEWS.1-17
index 42a3ced1c3..ee6fa82b29 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1985-1986, 2006-2022 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/etc/NEWS.18 b/etc/NEWS.18
index b11a189c30..78d63e5db7 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1988, 2006-2022 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/etc/NEWS.19 b/etc/NEWS.19
index fd91c0842f..7eb4deaeba 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1993-1995, 2001, 2006-2022 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/etc/NEWS.20 b/etc/NEWS.20
index efd0e5d5c2..2a9b0b2d25 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1999-2001, 2006-2022 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/etc/NEWS.21 b/etc/NEWS.21
index b9d59594a4..52d2eb6c52 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2000-2022 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/etc/NEWS.22 b/etc/NEWS.22
index 1f03dc3a13..be3167dace 100644
--- a/etc/NEWS.22
+++ b/etc/NEWS.22
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.
 
-Copyright (C) 2001-2021 Free Software Foundation, Inc.
+Copyright (C) 2001-2022 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 8611ba53d2..da483c3e7b 100644
--- a/etc/NEWS.23
+++ b/etc/NEWS.23
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.
 
-Copyright (C) 2007-2021 Free Software Foundation, Inc.
+Copyright (C) 2007-2022 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 acf6219f74..0fd4037ed0 100644
--- a/etc/NEWS.24
+++ b/etc/NEWS.24
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.
 
-Copyright (C) 2010-2021 Free Software Foundation, Inc.
+Copyright (C) 2010-2022 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 c533f27709..21fcd052dc 100644
--- a/etc/NEWS.25
+++ b/etc/NEWS.25
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.
 
-Copyright (C) 2014-2021 Free Software Foundation, Inc.
+Copyright (C) 2014-2022 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 05e8672625..a78baaea5f 100644
--- a/etc/NEWS.26
+++ b/etc/NEWS.26
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.
 
-Copyright (C) 2016-2021 Free Software Foundation, Inc.
+Copyright (C) 2016-2022 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 e47f408be9..6e116533c5 100644
--- a/etc/NEWS.27
+++ b/etc/NEWS.27
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.
 
-Copyright (C) 2017-2021 Free Software Foundation, Inc.
+Copyright (C) 2017-2022 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 8e38c3690c..1e882883b5 100644
--- a/etc/NEWS.28
+++ b/etc/NEWS.28
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.
 
-Copyright (C) 2019-2021 Free Software Foundation, Inc.
+Copyright (C) 2019-2022 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Please send Emacs bug reports to 'bug-gnu-emacs@gnu.org'.
@@ -77,9 +77,6 @@ shaping, so 'configure' now recommends that combination.
 'configure --with-xdbe=no' can now be used to disable double buffering
 at build time.
 
----
-** Support for building with Motif has been removed.
-
 ---
 ** The configure option '--without-makeinfo' has been removed.
 This was only ever relevant when building from a repository checkout.
@@ -635,7 +632,9 @@ This works like 'C-u M-x apropos-command' but is more 
discoverable.
 *** Keybindings in 'help-mode' use the new 'help-key-binding' face.
 This face is added by 'substitute-command-keys' to any "\[command]"
 substitution.  The return value of that function should consequently
-be assumed to be a propertized string.
+be assumed to be a propertized string.  To prevent the function from
+adding the 'help-key-binding' face, call 'substitute-command-keys'
+with the new optional argument NO-FACE non-nil.
 
 Note that the new face will also be used in tooltips.  When using the
 GTK toolkit, this is only true if 'x-gtk-use-system-tooltips' is t.
@@ -1009,20 +1008,6 @@ file:
 
     (add-hook 'foo-mode-hook (lambda () (auto-fill-mode -1))
 
-** Xref migrated from EIEIO to cl-defstruct for its core objects.
-This means that 'oref' and 'with-slots' no longer works on them, and
-'make-instance' can no longer be used to create those instances (which
-wasn't recommended anyway).  Packages should restrict themselves to
-using functions like 'xref-make', 'xref-make-match',
-'xref-make-*-location', as well as accessor functions
-'xref-item-summary' and 'xref-item-location'.
-
-Among the benefits are better performance (noticeable when there are a
-lot of matches) and improved flexibility: 'xref-match-item' instances
-do not require that 'location' inherits from 'xref-location' anymore
-(that class was removed), so packages can create new location types to
-use with "match items" without adding EIEIO as a dependency.
-
 
 * Editing Changes in Emacs 28.1
 
@@ -1586,9 +1571,9 @@ and the result is not truncated in any way.
 It no longer has lower precedence than '+' and '-'.
 
 ---
-*** Calc now marks its windows dedicated.
-The new user option 'calc-make-windows-dedicated' controls this.  It
-is t by default; set to nil to get back the old behavior.
+*** New user option 'calc-make-windows-dedicated'.
+When this user option is non-nil, Calc will mark its windows as
+dedicated.
 
 ** Calendar
 
@@ -1964,6 +1949,13 @@ String or list of strings specifying switches for Git 
log under VC.
 If you are still using it with any regularity, please file a bug
 report with some details.
 
+---
+*** New variable 'vc-git-use-literal-pathspecs'.
+The Git backend's function now treat all file names "literally", where
+some of them previously could interpret file names (pathspecs) as
+globs when they contain appropriate characters.  Functions can bind
+the aforementioned variable to nil locally to avoid this.
+
 ** Gnus
 
 +++
@@ -3053,7 +3045,6 @@ checkdoc will now check the format of 'yes-or-no-p'.
 *** New command 'checkdoc-dired'.
 This can be used to run checkdoc on files from a Dired buffer.
 
----
 *** No longer checks for 'A-' modifiers.
 Checkdoc recommends usage of command substitutions ("\\[foo-command]")
 in favor of writing keybindings like 'C-c f'.  It now no longer warns
@@ -3273,11 +3264,11 @@ The user option 'repeat-exit-timeout' (default nil, 
which means
 forever) specifies the number of seconds of idle time after which to
 break the repetition chain automatically.
 
-When user option 'repeat-keep-prefix' is non-nil (the default), the
-prefix arg of the previous command is kept.  This can be used to
-e.g. reverse the window navigation direction with 'C-x o M-- o o' or
-to set a new step with 'C-x { C-5 { { {', which will set the window
-resizing step to 5 columns.
+When user option 'repeat-keep-prefix' is non-nil, the prefix arg of
+the previous command is kept.  This can be used to e.g. reverse the
+window navigation direction with 'C-x o M-- o o' or to set a new step
+with 'C-x { C-5 { { {', which will set the window resizing step to 5
+columns.
 
 'M-x describe-repeat-maps' will display a buffer showing
 which commands are repeatable in 'repeat-mode'.
@@ -3722,6 +3713,20 @@ user option has been renamed to 
'find-library-source-path', and
 ---
 ** The macro 'vc-call' no longer evaluates its second argument twice.
 
+** Xref migrated from EIEIO to cl-defstruct for its core objects.
+This means that 'oref' and 'with-slots' no longer works on them, and
+'make-instance' can no longer be used to create those instances (which
+wasn't recommended anyway).  Packages should restrict themselves to
+using functions like 'xref-make', 'xref-make-match',
+'xref-make-*-location', as well as accessor functions
+'xref-item-summary' and 'xref-item-location'.
+
+Among the benefits are better performance (noticeable when there are a
+lot of matches) and improved flexibility: 'xref-match-item' instances
+do not require that 'location' inherits from 'xref-location' anymore
+(that class was removed), so packages can create new location types to
+use with "match items" without adding EIEIO as a dependency.
+
 
 * Lisp Changes in Emacs 28.1
 
@@ -3732,15 +3737,28 @@ commands as being applicable for modes derived from 
'dired-mode',
 or if the mode is a minor mode, when the current buffer has that
 minor mode activated.  Note that using this form will create byte code
 that is not compatible with byte code in previous Emacs versions.
+Also note that by default these annotations have no effect, unless the
+new option 'read-extended-command-predicate' option is customized to call
+'command-completion-default-include-p' or a similar function.
 
 +++
-** New forms to declare how completion should happen has been added.
+** New 'declare' forms to control completion of commands in 'M-x'.
 '(declare (completion PREDICATE))' can be used as a general predicate
-to say whether the command should be present when completing with
-'M-x TAB'.  '(declare (modes MODE...))' can be used as a short-hand
-way of saying that the command should be present when completing from
-buffers in major modes derived from MODE..., or, if it's a minor mode,
-when that minor mode is enabled in the current buffer.
+to say whether the command should be considered a completion candidate
+when completing with 'M-x TAB'.
+
+'(declare (modes MODE...))' can be used as a short-hand way of saying
+that the command should be considered a completion candidate when
+completing on commands from buffers in major modes derived from
+MODE..., or, if it's a minor mode, when that minor mode is enabled in
+the current buffer.
+
+Note that these forms will only have their effect if the
+'read-extended-command-predicate' option is customized to call
+'command-completion-default-include-p' or a similar function.  The
+default value of 'read-extended-command-predicate' is nil, which means
+no commands that match what you have typed are excluded from being
+completion candidates.
 
 +++
 ** 'define-minor-mode'  now takes an ':interactive' argument.
diff --git a/etc/NEXTSTEP b/etc/NEXTSTEP
index 5dd2e646ed..dacbed2045 100644
--- a/etc/NEXTSTEP
+++ b/etc/NEXTSTEP
@@ -1,4 +1,4 @@
-Copyright (C) 2008-2021 Free Software Foundation, Inc.
+Copyright (C) 2008-2022 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 cdce6e72ba..b5301ee2cf 100644
--- a/etc/NXML-NEWS
+++ b/etc/NXML-NEWS
@@ -1,4 +1,4 @@
-Copyright (C) 2007-2021 Free Software Foundation, Inc.
+Copyright (C) 2007-2022 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 5e7813ca7f..e4bb706e08 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2012-2022 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Please send Org bug reports to mailto:emacs-orgmode@gnu.org.
diff --git a/etc/PROBLEMS b/etc/PROBLEMS
index acff3be7da..9040c49256 100644
--- a/etc/PROBLEMS
+++ b/etc/PROBLEMS
@@ -1,6 +1,6 @@
 Known Problems with GNU Emacs
 
-Copyright (C) 1987-1989, 1993-1999, 2001-2021 Free Software Foundation,
+Copyright (C) 1987-1989, 1993-1999, 2001-2022 Free Software Foundation,
 Inc.
 See the end of the file for license conditions.
 
@@ -1236,6 +1236,15 @@ A workaround is to not use 'klipper'/'clipit'.  
Upgrading 'klipper' to
 the one coming with KDE 3.3 or later might solve the problem; if it
 doesn't, set 'select-active-regions' to 'only' or nil.
 
+*** Emacs doesn't receive the key "C-.", displaying an input field instead.
+
+This is caused by the IBus Emoji input panel, which is usually bound
+to "C-.".  You can disable that panel by running the following
+command:
+
+  $ gsettings set org.freedesktop.ibus.panel.emoji hotkey "[]"
+
+
 ** Window-manager and toolkit-related problems
 
 *** Emacs built with GTK+ toolkit produces corrupted display on HiDPI screen
@@ -1328,6 +1337,12 @@ A better approach might be to avoid navigation from 
Nautilus to Emacs
 for such files, and instead to open the file in Emacs using Tramp
 remote file name syntax.
 
+*** Gnome: GTK builds with XInput2 freeze when making a frame fullscreen.
+
+This problem exists with GTK 3.24.30 in GNOME 41.1 and possibly other
+versions.  The solution is to upgrade GNOME Shell to the version that
+comes with GNOME 41.2.
+
 *** KDE: When running on KDE, colors or fonts are not as specified for Emacs,
 or messed up.
 
@@ -1675,6 +1690,18 @@ This happens on the proprietary X server ASTEC-X when 
the number of
 monitors is changed after the server has started.  A workaround is to
 restart the X server after the monitor configuration has been changed.
 
+*** Touchpad gestures don't work and emit warning messages.
+
+When pinching or swiping on your touchpad, you might see a warning
+message that looks like:
+
+  XInputWireToCookie: Unknown generic event. type 28
+
+This happens when your XInput headers support XInput 2.4, but the
+actual version of libXi installed does not.  The solution is to
+upgrade your libXi binaries to libXi 1.8.0 or later, to correspond
+with your XInput headers.
+
 * Runtime problems on character terminals
 
 *** With X forwarding, mouse highlighting can make Emacs slow.
@@ -2792,6 +2819,17 @@ file; for example:
       "/usr/local/opt/libgccjit/lib/gcc/11"
       "/usr/local/opt/gcc/lib/gcc/11/gcc/x86_64-apple-darwin20/11.2.0") ":"))
 
+* Runtime problems specific to PGTK
+
+** Some modifier keys doesn't work if Emacs is started in a systemd unit file.
+
+Environment variables may be different if there is a difference in the
+behavior of keys between when started in the systemd unit file and
+when started from the command line.
+
+Especially, PGTK Emacs needs environment variables LANG and
+GTK_IM_MODULE.
+
 * Build-time problems
 
 ** Configuration
diff --git a/etc/README b/etc/README
index 6d7a15a6f2..d343160b50 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-2021 Free Software Foundation, Inc.
+  Copyright (C) 1999, 2001-2022 Free Software Foundation, Inc.
   License: GNU General Public License version 3 or later (see COPYING)
diff --git a/etc/TERMS b/etc/TERMS
index 80b39c80e9..ed7d0d09de 100644
--- a/etc/TERMS
+++ b/etc/TERMS
@@ -1,4 +1,4 @@
-Copyright (C) 1999, 2001-2021 Free Software Foundation, Inc.
+Copyright (C) 1999, 2001-2022 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 cd06b1ea26..80e77bba60 100644
--- a/etc/TODO
+++ b/etc/TODO
@@ -1,6 +1,6 @@
 Emacs TODO List                                                   -*-outline-*-
 
-Copyright (C) 2001-2021 Free Software Foundation, Inc.
+Copyright (C) 2001-2022 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
@@ -80,6 +80,10 @@ all interactive commands to see if they are only relevant in 
one
 particular mode.  This requires care as some commands might be useful
 outside of the mode they were written for.
 
+** Convert defvar foo-mode-map to defvar-keymap
+Verify the conversion by comparing the value of the keymap before
+converting it and after (you can see the value in 'C-h v').
+
 ** Write more tests
 Pick a fixed bug from the database, write a test case to make sure it
 stays fixed.  Or pick your favorite programming major-mode, and write
diff --git a/etc/charsets/README b/etc/charsets/README
index 96cba7c613..e513fcb815 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 2003-2022 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 34d8c53c9a..5601ce272a 100644
--- a/etc/compilation.txt
+++ b/etc/compilation.txt
@@ -679,7 +679,7 @@ Compilation segmentation fault at Thu Jul 13 10:55:49
 Compilation finished at Thu Jul 21 15:02:15
 
 
-Copyright (C) 2004-2021 Free Software Foundation, Inc.
+Copyright (C) 2004-2022 Free Software Foundation, Inc.
 
 COPYING PERMISSIONS:
 
diff --git a/etc/edt-user.el b/etc/edt-user.el
index 8e1a599f0d..fbeadc8789 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-2021 Free Software Foundation,
+;; Copyright (C) 1986, 1992-1993, 2000-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Kevin Gallagher <kevin.gal@verizon.net>
diff --git a/etc/emacs-buffer.gdb b/etc/emacs-buffer.gdb
index 41af836599..96320b157a 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 2005-2022 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 7467b88e73..11df8a7159 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-2021 Free Software Foundation, Inc. -->
+<!-- Copyright (C) 2014-2022 Free Software Foundation, Inc. -->
 <component type="desktop-application">
  <id>org.gnu.emacs</id>
  <metadata_license>GFDL-1.3+</metadata_license>
diff --git a/etc/enriched.txt b/etc/enriched.txt
index dd269e313c..5c74c610ae 100644
--- a/etc/enriched.txt
+++ b/etc/enriched.txt
@@ -253,7 +253,7 @@ it.</indent>
 
 
 
-Copyright (C) 1995, 1997, 2001-2021 Free Software Foundation, Inc.
+Copyright (C) 1995, 1997, 2001-2022 Free Software Foundation, Inc.
 
 COPYING PERMISSIONS:
 
diff --git a/etc/forms/forms-d2.el b/etc/forms/forms-d2.el
index cd4231cf2d..a333441f34 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-2021 Free Software Foundation,
+;; Copyright (C) 1991, 1994-1997, 2001-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Johan Vromans <jvromans@squirrel.nl>
diff --git a/etc/gnus-tut.txt b/etc/gnus-tut.txt
index 27e868b79c..8ab718f5d2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2001-2022 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 0370ae4e2c..ff90553d88 100644
--- a/etc/grep.txt
+++ b/etc/grep.txt
@@ -104,7 +104,7 @@ grep -nH -e "xyzxyz" ../info/*
 
 * Miscellaneous
 
-Copyright (C) 2005-2021 Free Software Foundation, Inc.
+Copyright (C) 2005-2022 Free Software Foundation, Inc.
 
 COPYING PERMISSIONS:
 
diff --git a/etc/images/README b/etc/images/README
index 561cfff765..72da92427b 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-2021 Free Software Foundation, Inc.
+  Copyright (C) 2003-2022 Free Software Foundation, Inc.
 
 Files: gnus.pbm
   Author: Luis Fernandes <elf@ee.ryerson.ca>
-  Copyright (C) 2001-2021 Free Software Foundation, Inc.
+  Copyright (C) 2001-2022 Free Software Foundation, Inc.
 
 Files: splash.png, splash.svg, splash.pbm, splash.xpm
   Author: Francesc Rocher <francesc.rocher@gmail.com>
-  Copyright (C) 2008-2021 Free Software Foundation, Inc.
+  Copyright (C) 2008-2022 Free Software Foundation, Inc.
 
 Files: checked.xpm, unchecked.xpm
   Author: Chong Yidong <cyd@stupidchicken.com>
-  Copyright (C) 2010-2021 Free Software Foundation, Inc.
+  Copyright (C) 2010-2022 Free Software Foundation, Inc.
 
 
 * The following icons are from GTK+ 2.x. They are not part of Emacs, but
diff --git a/etc/images/checked.xpm b/etc/images/checked.xpm
index 3e7e76f254..aefa9dd5da 100644
--- a/etc/images/checked.xpm
+++ b/etc/images/checked.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-/* Copyright (C) 2010-2021 Free Software Foundation, Inc.
+/* Copyright (C) 2010-2022 Free Software Foundation, Inc.
  *
  * Author: Chong Yidong <cyd@stupidchicken.com>
  *
diff --git a/etc/images/custom/README b/etc/images/custom/README
index fc9cd8d7f1..4238d3d133 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2008-2022 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 865ce5b4c0..80f128ae99 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1999-2022 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 4acfc0c7db..db039d792d 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2001-2022 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2001-2022 Free Software Foundation, Inc.
 
 Files: gnus.png, gnus.svg
   Author: Francesc Rocher <rocher@member.fsf.org>
-  Copyright (C) 2008-2021 Free Software Foundation, Inc.
+  Copyright (C) 2008-2022 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 362dc16cb6..1733af900b 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2008-2022 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 0ef5258b9a..5edd99e2bf 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2002-2022 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 a0a2e9303d..ca2d3733ed 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2015-2022 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2007-2022 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2005-2022 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2011-2022 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 a2bc441247..6a2c77ed6a 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2008-2022 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 31db7b9cef..95f732a66e 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2008-2022 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 b11c5bd052..04e4c084df 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2008-2022 Free Software Foundation, Inc.
 
    This file is part of GNU Emacs.
 
diff --git a/etc/images/mh-logo.xpm b/etc/images/mh-logo.xpm
index fd7598d5a6..846859e058 100644
--- a/etc/images/mh-logo.xpm
+++ b/etc/images/mh-logo.xpm
@@ -1,7 +1,7 @@
 /* XPM */
 /* MH-E Logo
  *
- * Copyright (C) 2003-2021 Free Software Foundation, Inc.
+ * Copyright (C) 2003-2022 Free Software Foundation, Inc.
  *
  * Author: Satyaki Das
  *
diff --git a/etc/images/mpc/README b/etc/images/mpc/README
index 30e9ac0cf2..bf84c76909 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2009-2022 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 30ecabb639..19e042db63 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2011-2022 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 9fddcfb9e7..a454f27313 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1999-2022 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 5d15f3cfbf..f4ead742ca 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2007-2022 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 5d15f3cfbf..f4ead742ca 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2007-2022 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 387ffad7c7..4c583aa102 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2008-2022 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 f1429ef16f..4d9083fca5 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2019-2022 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 a0c9c8e48d..561cde9d56 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2004-2022 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 2a9c8a211b..41983108d9 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2004-2022 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
diff --git a/etc/images/unchecked.xpm b/etc/images/unchecked.xpm
index 5e18534e77..b758346b96 100644
--- a/etc/images/unchecked.xpm
+++ b/etc/images/unchecked.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-/* Copyright (C) 2010-2021 Free Software Foundation, Inc.
+/* Copyright (C) 2010-2022 Free Software Foundation, Inc.
  *
  * Author: Chong Yidong <cyd@stupidchicken.com>
  *
diff --git a/etc/org.gnu.emacs.defaults.gschema.xml 
b/etc/org.gnu.emacs.defaults.gschema.xml
new file mode 100644
index 0000000000..d4299c25c9
--- /dev/null
+++ b/etc/org.gnu.emacs.defaults.gschema.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2019-2020, 2022 Free Software Foundation, Inc. -->
+<schemalist>
+
+  <schema id="org.gnu.emacs.defaults">
+
+    <key name='alpha'                    type='s'><default>''</default></key>
+    <key name='auto-raise-lower'         type='s'><default>''</default></key>
+    <key name='auto-lower'               type='s'><default>''</default></key>
+    <key name='auto-raise'               type='s'><default>''</default></key>
+    <key name='background'               type='s'><default>''</default></key>
+    <key name='background-mode'          type='s'><default>''</default></key>
+    <key name='bitmap-icon'              type='s'><default>''</default></key>
+    <key name='border-color'             type='s'><default>''</default></key>
+    <key name='border-width'             type='s'><default>''</default></key>
+    <key name='buffer-predicate'         type='s'><default>''</default></key>
+    <key name='cursor-blink'             type='s'><default>''</default></key>
+    <key name='cursor-type'              type='s'><default>''</default></key>
+    <key name='cursor-color'             type='s'><default>''</default></key>
+    <key name='font'                     type='s'><default>''</default></key>
+    <key name='font-backend'             type='s'><default>''</default></key>
+    <key name='foreground'               type='s'><default>''</default></key>
+    <key name='fullscreen'               type='s'><default>''</default></key>
+    <key name='horizontal-scroll-bars'   type='s'><default>''</default></key>
+    <key name='icon-name'                type='s'><default>''</default></key>
+    <key name='inhibit-double-buffering' type='s'><default>''</default></key>
+    <key name='internal-border'          type='s'><default>''</default></key>
+    <key name='internal-border-width'    type='s'><default>''</default></key>
+    <key name='left-fringe'              type='s'><default>''</default></key>
+    <key name='line-spacing'             type='s'><default>''</default></key>
+    <key name='menu-bar'                 type='s'><default>''</default></key>
+    <key name='minibuffer'               type='s'><default>''</default></key>
+    <key name='name'                     type='s'><default>''</default></key>
+    <key name='pointer-color'            type='s'><default>''</default></key>
+    <key name='reverse-video'            type='s'><default>''</default></key>
+    <key name='right-fringe'             type='s'><default>''</default></key>
+    <key name='screen-gamma'             type='s'><default>''</default></key>
+    <key name='scroll-bar'               type='s'><default>''</default></key>
+    <key name='scroll-bar-background'    type='s'><default>''</default></key>
+    <key name='scroll-bar-foreground'    type='s'><default>''</default></key>
+    <key name='scroll-bar-height'        type='s'><default>''</default></key>
+    <key name='scroll-bar-width'         type='s'><default>''</default></key>
+    <key name='scroll-bars'              type='s'><default>''</default></key>
+    <key name='title'                    type='s'><default>''</default></key>
+    <key name='tool-bar'                 type='s'><default>''</default></key>
+    <key name='vertical-scroll-bars'     type='s'><default>''</default></key>
+    <key name='wait-for-w-m'             type='s'><default>''</default></key>
+
+  </schema>
+
+</schemalist>
diff --git a/etc/org/README b/etc/org/README
index 07126fc31b..aac788d3c6 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2010-2022 Free Software Foundation, Inc.
 
 These files are part of GNU Emacs.
 
diff --git a/etc/ps-prin0.ps b/etc/ps-prin0.ps
index 7204666646..53f4cac355 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-2021 Free Software Foundation, Inc.
+% Copyright (C) 2000-2022 Free Software Foundation, Inc.
 
 % This file is part of GNU Emacs.
 
diff --git a/etc/ps-prin1.ps b/etc/ps-prin1.ps
index d565e33d3b..a9e6615dac 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-2021 Free Software Foundation, Inc.
+% Copyright (C) 2000-2022 Free Software Foundation, Inc.
 
 % This file is part of GNU Emacs.
 
diff --git a/etc/publicsuffix.txt b/etc/publicsuffix.txt
index 5cc95b9000..fb018d626a 100644
--- a/etc/publicsuffix.txt
+++ b/etc/publicsuffix.txt
@@ -7132,7 +7132,7 @@ org.zw
 
 // newGTLDs
 
-// List of new gTLDs imported from 
https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 
2021-10-08T15:12:46Z
+// List of new gTLDs imported from 
https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 
2021-12-30T15:13:57Z
 // This list is auto-generated, don't edit it manually.
 // aaa : 2015-02-26 American Automobile Association, Inc.
 aaa
@@ -7197,9 +7197,6 @@ aeg
 // aetna : 2015-05-21 Aetna Life Insurance Company
 aetna
 
-// afamilycompany : 2015-07-23 Johnson Shareholdings, Inc.
-afamilycompany
-
 // afl : 2014-10-02 Australian Football League
 afl
 
@@ -7530,7 +7527,7 @@ bosch
 // bostik : 2015-05-28 Bostik SA
 bostik
 
-// boston : 2015-12-10 Boston TLD Management, LLC
+// boston : 2015-12-10 Registry Services, LLC
 boston
 
 // bot : 2014-12-18 Amazon Registry Services, Inc.
@@ -7647,7 +7644,7 @@ cars
 // casa : 2013-11-21 Registry Services, LLC
 casa
 
-// case : 2015-09-03 CNH Industrial N.V.
+// case : 2015-09-03 Helium TLDs Ltd
 case
 
 // cash : 2014-03-06 Binky Moon, LLC
@@ -8016,9 +8013,6 @@ dtv
 // dubai : 2015-01-01 Dubai Smart Government Department
 dubai
 
-// duck : 2015-07-23 Johnson Shareholdings, Inc.
-duck
-
 // dunlop : 2015-07-02 The Goodyear Tire & Rubber Company
 dunlop
 
@@ -8346,9 +8340,6 @@ gives
 // giving : 2014-11-13 Giving Limited
 giving
 
-// glade : 2015-07-23 Johnson Shareholdings, Inc.
-glade
-
 // glass : 2013-11-07 Binky Moon, LLC
 glass
 
@@ -8880,9 +8871,6 @@ live
 // living : 2015-07-30 Lifestyle Domain Holdings, Inc.
 living
 
-// lixil : 2015-03-19 LIXIL Group Corporation
-lixil
-
 // llc : 2017-12-14 Afilias Limited
 llc
 
@@ -9021,7 +9009,7 @@ menu
 // merckmsd : 2016-07-14 MSD Registry Holdings, Inc.
 merckmsd
 
-// miami : 2013-12-19 Minds + Machines Group Limited
+// miami : 2013-12-19 Registry Services, LLC
 miami
 
 // microsoft : 2014-12-18 Microsoft Corporation
@@ -9216,9 +9204,6 @@ obi
 // observer : 2015-04-30 Dog Beach, LLC
 observer
 
-// off : 2015-07-23 Johnson Shareholdings, Inc.
-off
-
 // office : 2015-03-12 Microsoft Corporation
 office
 
@@ -9462,9 +9447,6 @@ racing
 // radio : 2016-07-21 European Broadcasting Union (EBU)
 radio
 
-// raid : 2015-07-23 Johnson Shareholdings, Inc.
-raid
-
 // read : 2014-12-18 Amazon Registry Services, Inc.
 read
 
@@ -9669,9 +9651,6 @@ schwarz
 // science : 2014-09-11 dot Science Limited
 science
 
-// scjohnson : 2015-07-23 Johnson Shareholdings, Inc.
-scjohnson
-
 // scot : 2014-01-23 Dot Scot Registry Limited
 scot
 
@@ -10317,9 +10296,6 @@ xin
 // xn--3ds443g : 2013-09-08 TLD REGISTRY LIMITED OY
 在线
 
-// xn--3oq18vl8pn36a : 2015-07-02 Volkswagen (China) Investment Co., Ltd.
-大众汽车
-
 // xn--3pxu8k : 2015-01-15 VeriSign Sarl
 点看
 
@@ -10785,10 +10761,6 @@ s3-website.eu-west-2.amazonaws.com
 s3-website.eu-west-3.amazonaws.com
 s3-website.us-east-2.amazonaws.com
 
-// Amsterdam Wireless: https://www.amsterdamwireless.nl/
-// Submitted by Imre Jonk <hostmaster@amsterdamwireless.nl>
-amsw.nl
-
 // Amune : https://amune.org/
 // Submitted by Team Amune <cert@amune.org>
 t3l3p0rt.net
@@ -10880,6 +10852,18 @@ rs.ba
 app.banzaicloud.io
 *.backyards.banzaicloud.io
 
+// BASE, Inc. : https://binc.jp
+// Submitted by Yuya NAGASAWA <public-suffix-list@binc.jp>
+base.ec
+official.ec
+buyshop.jp
+fashionstore.jp
+handcrafted.jp
+kawaiishop.jp
+supersale.jp
+theshop.jp
+shopselect.net
+base.shop
 
 // BetaInABox
 // Submitted by Adrian <adrian@betainabox.com>
@@ -10982,7 +10966,6 @@ za.com
 // No longer operated by CentralNic, these entries should be adopted and/or 
removed by current operators
 // Submitted by Gavin Brown <gavin.brown@centralnic.com>
 ar.com
-gb.com
 hu.com
 kr.com
 no.com
@@ -11036,10 +11019,6 @@ cx.ua
 discourse.group
 discourse.team
 
-// ClearVox : http://www.clearvox.nl/
-// Submitted by Leon Rowland <leon@clearvox.nl>
-virtueeldomein.nl
-
 // Clever Cloud : https://www.clever-cloud.com/
 // Submitted by Quentin Adam <noc@clever-cloud.com>
 cleverapps.io
@@ -11642,12 +11621,6 @@ blogsite.xyz
 // Submitted by Dominik Menke <dom@digineo.de>
 dynv6.net
 
-// Ellucian : https://ellucian.com
-// Submitted by Josue Colon <CloudOps-Network@ellucian.com>
-elluciancrmadvance.com
-elluciancrmadvise.com
-elluciancrmrecruit.com
-
 // E4YOU spol. s.r.o. : https://e4you.cz/
 // Submitted by Vladimir Dudr <info@e4you.cz>
 e4.cz
@@ -11676,6 +11649,10 @@ tuleap-partners.com
 onred.one
 staging.onred.one
 
+// encoway GmbH : https://www.encoway.de
+// Submitted by Marcel Daus <cloudops@encoway.de>
+eu.encoway.cloud
+
 // EU.org https://eu.org/
 // Submitted by Pierre Beyssac <hostmaster@eu.org>
 eu.org
@@ -11915,6 +11892,11 @@ fireweb.app
 // Submitted by Louis Chemineau <louis@chmn.me>
 flap.id
 
+// FlashDrive : https://flashdrive.io
+// Submitted by Eric Chan <support@flashdrive.io>
+onflashdrive.app
+fldrv.com
+
 // fly.io: https://fly.io
 // Submitted by Kurt Mackey <kurt@fly.io>
 fly.dev
@@ -12200,6 +12182,7 @@ herokussl.com
 
 // Hibernating Rhinos
 // Submitted by Oren Eini <oren@ravendb.net>
+ravendb.cloud
 myravendb.com
 ravendb.community
 ravendb.me
@@ -12214,6 +12197,11 @@ homesklep.pl
 // Submitted by SECaaS Team <summchan@hkpc.org>
 secaas.hk
 
+// Hoplix : https://www.hoplix.com
+// Submitted by Danilo De Franco<info@hoplix.shop>
+hoplix.shop
+
+
 // HOSTBIP REGISTRY : https://www.hostbip.com/
 // Submitted by Atanunu Igbunuroghene <publicsuffixlist@hostbip.com>
 orx.biz
@@ -12459,6 +12447,10 @@ uni5.net
 // Submitted by Roy Keene <rkeene@knightpoint.com>
 knightpoint.systems
 
+// KoobinEvent, SL: https://www.koobin.com
+// Submitted by Iván Oliva <ivan.oliva@koobin.com>
+koobin.events
+
 // KUROKU LTD : https://kuroku.ltd/
 // Submitted by DisposaBoy <security@oya.to>
 oya.to
@@ -12727,6 +12719,10 @@ that.win
 from.work
 to.work
 
+// Net at Work Gmbh : https://www.netatwork.de
+// Submitted by Jan Jaeschke <jan.jaeschke@netatwork.de>
+cloud.nospamproxy.com
+
 // Netlify : https://www.netlify.com
 // Submitted by Jessica Parsons <jessica@netlify.com>
 netlify.app
@@ -12886,11 +12882,6 @@ zapto.org
 // Submitted by Konstantin Nosov <Nosov@nodeart.io>
 stage.nodeart.io
 
-// Nodum B.V. : https://nodum.io/
-// Submitted by Wietse Wind <hello+publicsuffixlist@nodum.io>
-nodum.co
-nodum.io
-
 // Nucleos Inc. : https://nucleos.com
 // Submitted by Piotr Zduniak <piotr@nucleos.com>
 pcloud.host
@@ -13491,7 +13482,8 @@ sopot.pl
 
 // Teckids e.V. : https://www.teckids.org
 // Submitted by Dominik George <dominik.george@teckids.org>
-edugit.org
+edugit.io
+s3.teckids.org
 
 // Telebit : https://telebit.cloud
 // Submitted by AJ ONeal <aj@telebit.cloud>
@@ -13589,6 +13581,10 @@ syno-ds.de
 synology-diskstation.de
 synology-ds.de
 
+// Typeform : https://www.typeform.com
+// Submitted by Sergi Ferriz <sergi.ferriz@typeform.com>
+pro.typeform.com
+
 // Uberspace : https://uberspace.de
 // Submitted by Moritz Werner <mwerner@jonaspasche.com>
 uber.space
diff --git a/etc/refcards/Makefile b/etc/refcards/Makefile
index ce2c534a93..6f8913c5f0 100644
--- a/etc/refcards/Makefile
+++ b/etc/refcards/Makefile
@@ -1,6 +1,6 @@
 ### Makefile for Emacs refcards
 
-## Copyright (C) 1993-1994, 2001-2021 Free Software Foundation, Inc.
+## Copyright (C) 1993-1994, 2001-2022 Free Software Foundation, Inc.
 
 ## This file is part of GNU Emacs.
 #
diff --git a/etc/refcards/README b/etc/refcards/README
index 4102c85ba1..8e5eb5c89c 100644
--- a/etc/refcards/README
+++ b/etc/refcards/README
@@ -1,4 +1,4 @@
-Copyright (C) 2013-2021 Free Software Foundation, Inc.
+Copyright (C) 2013-2022 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
@@ -77,7 +77,7 @@ it is reproduced here for convenience.
 
 File: gnus-logo.eps, gnus-logo.pdf
   Author: Luis Fernandes <elf@ee.ryerson.ca>
-  Copyright (C) 2001-2021 Free Software Foundation, Inc.
+  Copyright (C) 2001-2022 Free Software Foundation, Inc.
   License: GNU General Public License version 3 or later (see COPYING)
 
 
diff --git a/etc/refcards/calccard.tex b/etc/refcards/calccard.tex
index 02607621cd..987ab39411 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--2021 Free Software Foundation, Inc.
+% Copyright (C) 1987, 1992, 2001--2022 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 294d11d1ca..689ceff366 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--2021 Free Software Foundation, Inc.
+% Copyright (C) 2000--2022 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 4d9a8b34ae..e598caeec4 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--2021 Free Software
+% Copyright (C) 1987, 1993, 1996--1997, 2001--2022 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 75a07eebd1..542195c7fb 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--2021 Free Software Foundation, Inc.
+% Copyright (C) 2000--2022 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 9cd0df7a5e..7eaf1fcf2b 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--2021 Free Software Foundation,
+% Copyright (C) 1987, 1993, 1996, 2000--2022 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 8d5af71b6c..7841daabff 100644
--- a/etc/refcards/dired-ref.tex
+++ b/etc/refcards/dired-ref.tex
@@ -1,6 +1,6 @@
 % Reference Card for Dired
 
-% Copyright (C) 2000--2021 Free Software Foundation, Inc.
+% Copyright (C) 2000--2022 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 ac80804bf1..e8bd43e354 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{2021}                             % latest copyright year
+\def\year{2022}                             % latest copyright year
diff --git a/etc/refcards/fr-dired-ref.tex b/etc/refcards/fr-dired-ref.tex
index fb8462f276..e0eebe05e6 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--2021 Free Software Foundation, Inc.
+% Copyright (C) 2000--2022 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 ad6db6340d..039e42c905 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--2021 Free Software
+% Copyright (C) 1987, 1993, 1996--1997, 2001--2022 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 e11fe175f8..1468622611 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--2021 Free Software Foundation, Inc.
+% Copyright (C) 2000--2022 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 eb77461821..cd38c2ba22 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-2021 Free Software Foundation, Inc.
+% Copyright (C) 2000-2022 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 4a1760c1b2..93191f23af 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--2021 Free Software Foundation, 
Inc.\\*
+    Copyright \copyright\ 1995, 2000, 2002--2022 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 d3715948d6..dec4d174c4 100644
--- a/etc/refcards/orgcard.tex
+++ b/etc/refcards/orgcard.tex
@@ -1,5 +1,5 @@
 % Reference Card for Org Mode
-\def\orgversionnumber{9.5}
+\def\orgversionnumber{9.5.2}
 \def\versionyear{2021}          % latest update
 \input emacsver.tex
 
@@ -17,7 +17,7 @@
 \pdflayout=(0l)
 
 % Nothing else needs to be changed below this line.
-% Copyright (C) 1987, 1993, 1996--1997, 2001--2021 Free Software
+% Copyright (C) 1987, 1993, 1996--1997, 2001--2022 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 91e67b109d..1bc7fbdb55 100644
--- a/etc/refcards/pdflayout.sty
+++ b/etc/refcards/pdflayout.sty
@@ -1,4 +1,4 @@
-% Copyright (C) 2007-2021 Free Software Foundation, Inc.
+% Copyright (C) 2007-2022 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 5c12dbfbf5..a9978c4cc3 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--2021 Free Software Foundation, Inc.
+% Copyright (C) 1999, 2001--2022 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 9226a6d8fb..2a3316a5be 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--2021 Free
+% Copyright (C) 1987, 1993, 1996--1997, 2002--2004, 2006--2022 Free
 % Software Foundation, Inc.
 
 % Author: Stephen Gildea <stepheng+emacs@gildea.com>
diff --git a/etc/refcards/refcard.tex b/etc/refcards/refcard.tex
index bc057569a7..3da3e4902e 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--2021 Free Software
+% Copyright (C) 1987, 1993, 1996--1997, 2001--2022 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 018be36eb4..40af641468 100644
--- a/etc/refcards/ru-refcard.tex
+++ b/etc/refcards/ru-refcard.tex
@@ -1,4 +1,4 @@
-% Copyright (C) 1997, 2002--2021 Free Software Foundation, Inc.
+% Copyright (C) 1997, 2002--2022 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]{2021}       % copyright year
+\newcommand{\cyear}[0]{2022}       % 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 04db4e3fe8..ce2cc07c81 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--2021 Free Software Foundation, Inc.
+% Copyright (C) 2000--2022 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 bda808f232..b3fbde8ceb 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--2021 Free Software
+% Copyright (C) 1987, 1993, 1996--1997, 2001--2022 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 9bf591a794..04bf17650c 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--2021 Free Software Foundation, Inc.
+% Copyright (C) 2000--2022 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 a5cd9b7e11..354ad9cb6c 100644
--- a/etc/refcards/survival.tex
+++ b/etc/refcards/survival.tex
@@ -1,7 +1,7 @@
 %&tex
 % Title:  GNU Emacs Survival Card
 
-% Copyright (C) 2000--2021 Free Software Foundation, Inc.
+% Copyright (C) 2000--2022 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 c62988a050..f44ccc03c6 100644
--- a/etc/refcards/vipcard.tex
+++ b/etc/refcards/vipcard.tex
@@ -1,6 +1,6 @@
 % Quick Reference Card for VIP
 
-% Copyright (C) 1987, 2001--2021 Free Software Foundation, Inc.
+% Copyright (C) 1987, 2001--2022 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 24be19f14d..0794ea1d42 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--2021 Free Software Foundation, Inc.
+% Copyright (C) 1995--1997, 2001--2022 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 697d1db11e..2889acbf3f 100644
--- a/etc/schema/locate.rnc
+++ b/etc/schema/locate.rnc
@@ -1,4 +1,4 @@
-# Copyright (C) 2003-2004, 2007-2021 Free Software Foundation, Inc.
+# Copyright (C) 2003-2004, 2007-2022 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/etc/schema/relaxng.rnc b/etc/schema/relaxng.rnc
index d3a9d96617..7a86d58ba9 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 2003-2004, 2007-2022 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/etc/schema/schemas.xml b/etc/schema/schemas.xml
index f8acb0d40c..678621f7bd 100644
--- a/etc/schema/schemas.xml
+++ b/etc/schema/schemas.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!-- Copyright (C) 2003-2004, 2007-2021 Free Software Foundation, Inc.
+<!-- Copyright (C) 2003-2004, 2007-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/etc/ses-example.ses b/etc/ses-example.ses
index f73fbfba70..f6f0dff27f 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-2021 Free Software Foundation, Inc.
+;;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
 
 ;;; COPYING PERMISSIONS:
 ;;; 
diff --git a/etc/srecode/c.srt b/etc/srecode/c.srt
index 753d1ee01b..e36caef307 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2010, 2012-2022 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/etc/srecode/cpp.srt b/etc/srecode/cpp.srt
index 3d1f9cbf92..d35adaf4b7 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/etc/srecode/default.srt b/etc/srecode/default.srt
index 0dff66187e..04ca2e3023 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 0de05ff15c..e11623dc04 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 4fc00ddf9e..edd18c26fc 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 b7eb0dbf2c..a94392b673 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 042c05aa63..19dc14202d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010, 2012-2022 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 ba380e4090..cde1690f54 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/etc/srecode/el.srt b/etc/srecode/el.srt
index a366434c3e..9078f4d334 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 af27cb2e8c..f53b410126 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/etc/srecode/java.srt b/etc/srecode/java.srt
index 5d8ce88b56..5c4f7d8072 100644
--- a/etc/srecode/java.srt
+++ b/etc/srecode/java.srt
@@ -1,6 +1,6 @@
 ;; java.srt
 
-;; Copyright (C) 2009-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/etc/srecode/make.srt b/etc/srecode/make.srt
index f83ecf9e12..436e067c50 100644
--- a/etc/srecode/make.srt
+++ b/etc/srecode/make.srt
@@ -1,6 +1,6 @@
 ;; make.srt
 
-;; Copyright (C) 2009-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 6825c6b837..62eb0befdf 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/etc/srecode/template.srt b/etc/srecode/template.srt
index 5820b1d756..b6590f5f0b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2005, 2007-2022 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/etc/srecode/test.srt b/etc/srecode/test.srt
index 581c295383..186376b58a 100644
--- a/etc/srecode/test.srt
+++ b/etc/srecode/test.srt
@@ -1,6 +1,6 @@
 ;; test.srt --- SRecode templates for testing
 
-;; Copyright (C) 2008-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/etc/srecode/texi.srt b/etc/srecode/texi.srt
index cc4c50c780..611ef65a8c 100644
--- a/etc/srecode/texi.srt
+++ b/etc/srecode/texi.srt
@@ -1,6 +1,6 @@
 ;; texi.srt --- SRecode templates for Texinfo
 
-;; Copyright (C) 2008-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/etc/srecode/wisent.srt b/etc/srecode/wisent.srt
index 4e8f61bd09..83553c3dca 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 7d297df526..ba83a0578c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 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 5895693386..8f19147f91 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 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 148ebd434c..d53c075d92 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
 ;; Author: Chong Yidong <cyd@stupidchicken>
 
diff --git a/etc/themes/leuven-theme.el b/etc/themes/leuven-theme.el
index 514384ca2a..d9a8d5391a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2022 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 547d2df04c..eeca46210c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 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 f10b88507e..b70620fe21 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
 ;; Author: Manoj Srivastava <srivasta@ieee.org>
 ;; Keywords: lisp, faces
@@ -541,7 +541,6 @@ jarring angry fruit salad look to reduce eye fatigue.")
  '(ido-indicator ((t (:background "red1" :foreground "yellow1" :width 
condensed))))
  '(ido-only-match ((t (:foreground "ForestGreen"))))
  '(ido-subdir ((t (:foreground "red1"))))
- '(info-menu-5 ((t (:underline t))))
  '(info-menu-header ((t (:bold t :weight bold))))
  '(info-node ((t (:bold t :italic t :foreground "yellow"))))
  '(info-node ((t (:italic t :bold t :foreground "white" :slant italic :weight 
bold))))
diff --git a/etc/themes/misterioso-theme.el b/etc/themes/misterioso-theme.el
index 26a5946d30..55186384ad 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
 ;; Author: Sebastian Hermida
 
diff --git a/etc/themes/modus-operandi-theme.el 
b/etc/themes/modus-operandi-theme.el
index 5a73e655f3..a5e8fc701c 100644
--- a/etc/themes/modus-operandi-theme.el
+++ b/etc/themes/modus-operandi-theme.el
@@ -1,27 +1,27 @@
 ;;; modus-operandi-theme.el --- Accessible light theme (WCAG AAA) -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2019-2021  Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
 
 ;; Author: Protesilaos Stavrou <info@protesilaos.com>
 ;; URL: https://gitlab.com/protesilaos/modus-themes
-;; Version: 1.7.0
+;; Version: 2.0.0
 ;; Package-Requires: ((emacs "27.1"))
 ;; Keywords: faces, theme, accessibility
 
 ;; 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.
+;; 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 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/etc/themes/modus-themes.el b/etc/themes/modus-themes.el
index f7d38ac2de..8afa961ba3 100644
--- a/etc/themes/modus-themes.el
+++ b/etc/themes/modus-themes.el
@@ -1,28 +1,28 @@
 ;;; modus-themes.el --- Highly accessible themes (WCAG AAA) -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2019-2021  Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
 
 ;; Author: Protesilaos Stavrou <info@protesilaos.com>
 ;; URL: https://gitlab.com/protesilaos/modus-themes
-;; Version: 1.7.0
-;; Last-Modified: <2021-11-18 12:28:22 +0200>
+;; Version: 2.0.0
+;; Last-Modified: <2021-12-24 12:35:25 +0200>
 ;; Package-Requires: ((emacs "27.1"))
 ;; Keywords: faces, theme, accessibility
 
 ;; 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.
+;; 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 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:
 ;;
@@ -38,14 +38,12 @@
 ;;     modus-themes-headings                       (alist)
 ;;     modus-themes-org-agenda                     (alist)
 ;;     modus-themes-bold-constructs                (boolean)
+;;     modus-themes-deuteranopia                   (boolean)
 ;;     modus-themes-inhibit-reload                 (boolean)
 ;;     modus-themes-intense-markup                 (boolean)
 ;;     modus-themes-italic-constructs              (boolean)
 ;;     modus-themes-mixed-fonts                    (boolean)
-;;     modus-themes-scale-headings                 (boolean)
 ;;     modus-themes-subtle-line-numbers            (boolean)
-;;     modus-themes-success-deuteranopia           (boolean)
-;;     modus-themes-variable-pitch-headings        (boolean)
 ;;     modus-themes-variable-pitch-ui              (boolean)
 ;;     modus-themes-completions                    (choice)
 ;;     modus-themes-diffs                          (choice)
@@ -60,21 +58,6 @@
 ;;     modus-themes-prompts                        (choice)
 ;;     modus-themes-region                         (choice)
 ;;     modus-themes-syntax                         (choice)
-;;     modus-themes-mode-line-padding              (natnum)
-;;
-;; The default scale for headings is as follows (it can be customized as
-;; well---remember, no scaling takes place by default):
-;;
-;;     modus-themes-scale-1                        1.05
-;;     modus-themes-scale-2                        1.1
-;;     modus-themes-scale-3                        1.15
-;;     modus-themes-scale-4                        1.2
-;;     modus-themes-scale-title                    1.3
-;;
-;; There is another scaling-related option, which however is reserved
-;; for special cases and is not used for headings:
-;;
-;;     modus-themes-scale-small                    0.9
 ;;
 ;; There also exist two unique customization variables for overriding
 ;; color palette values.  The specifics are documented in the manual.
@@ -89,14 +72,12 @@
 ;; missing package or change you would like to see.
 ;;
 ;;     ace-window
-;;     ag
 ;;     alert
 ;;     all-the-icons
 ;;     annotate
 ;;     ansi-color
 ;;     anzu
 ;;     apropos
-;;     apt-sources-list
 ;;     artbollocks-mode
 ;;     auctex and TeX
 ;;     auto-dim-other-buffers
@@ -109,7 +90,6 @@
 ;;     boon
 ;;     bookmark
 ;;     breakpoint (provided by built-in gdb-mi.el)
-;;     buffer-expose
 ;;     calendar and diary
 ;;     calfw
 ;;     centaur-tabs
@@ -127,7 +107,6 @@
 ;;     corfu
 ;;     counsel
 ;;     counsel-css
-;;     counsel-org-capture-string
 ;;     cov
 ;;     cperl-mode
 ;;     css-mode
@@ -139,28 +118,24 @@
 ;;     dashboard (emacs-dashboard)
 ;;     deadgrep
 ;;     debbugs
-;;     define-word
 ;;     deft
 ;;     dictionary
 ;;     diff-hl
 ;;     diff-mode
 ;;     dim-autoload
 ;;     dir-treeview
-;;     dired
+;;     Dired
 ;;     dired-async
 ;;     dired-git
 ;;     dired-git-info
 ;;     dired-narrow
 ;;     dired-subtree
-;;     diredc
 ;;     diredfl
 ;;     diredp (dired+)
-;;     disk-usage
 ;;     display-fill-column-indicator-mode
 ;;     doom-modeline
 ;;     dynamic-ruler
 ;;     easy-jekyll
-;;     easy-kill
 ;;     ebdb
 ;;     ediff
 ;;     eglot
@@ -197,7 +172,6 @@
 ;;     flycheck-posframe
 ;;     flymake
 ;;     flyspell
-;;     flyspell-correct
 ;;     flx
 ;;     freeze-it
 ;;     frog-menu
@@ -209,10 +183,8 @@
 ;;     geiser
 ;;     git-commit
 ;;     git-gutter (and variants)
-;;     git-lens
 ;;     git-rebase
 ;;     git-timemachine
-;;     git-walktree
 ;;     gnus
 ;;     gotest
 ;;     golden-ratio-scroll-screen
@@ -221,20 +193,14 @@
 ;;     helm-switch-shell
 ;;     helm-xref
 ;;     helpful
-;;     highlight-blocks
-;;     highlight-defined
-;;     highlight-escape-sequences (`hes-mode')
 ;;     highlight-indentation
 ;;     highlight-numbers
-;;     highlight-symbol
-;;     highlight-tail
 ;;     highlight-thing
 ;;     hl-defined
 ;;     hl-fill-column
 ;;     hl-line-mode
 ;;     hl-todo
 ;;     hydra
-;;     hyperlist
 ;;     ibuffer
 ;;     icomplete
 ;;     ido-mode
@@ -248,7 +214,6 @@
 ;;     interaction-log
 ;;     ioccur
 ;;     isearch, occur, etc.
-;;     isl (isearch-light)
 ;;     ivy
 ;;     ivy-posframe
 ;;     jira (org-jira)
@@ -272,22 +237,18 @@
 ;;     markup-faces (`adoc-mode')
 ;;     mentor
 ;;     messages
-;;     minibuffer-line
 ;;     minimap
 ;;     mmm-mode
 ;;     mode-line
 ;;     mood-line
 ;;     mpdel
 ;;     mu4e
-;;     mu4e-conversation
 ;;     multiple-cursors
 ;;     nano-modeline
 ;;     neotree
-;;     no-emoji
 ;;     notmuch
 ;;     num3-mode
 ;;     nxml-mode
-;;     objed
 ;;     orderless
 ;;     org
 ;;     org-journal
@@ -307,14 +268,11 @@
 ;;     pandoc-mode
 ;;     paradox
 ;;     paren-face
-;;     parrot
 ;;     pass
 ;;     pdf-tools
 ;;     persp-mode
 ;;     perspective
 ;;     phi-grep
-;;     phi-search
-;;     pkgbuild-mode
 ;;     pomidor
 ;;     popup
 ;;     powerline
@@ -326,7 +284,6 @@
 ;;     quick-peek
 ;;     racket-mode
 ;;     rainbow-blocks
-;;     rainbow-identifiers
 ;;     rainbow-delimiters
 ;;     rcirc
 ;;     recursion-indicator
@@ -335,7 +292,6 @@
 ;;     ripgrep
 ;;     rmail
 ;;     ruler-mode
-;;     sallet
 ;;     selectrum
 ;;     selectrum-prescient
 ;;     semantic
@@ -352,13 +308,10 @@
 ;;     smerge
 ;;     spaceline
 ;;     speedbar
-;;     spell-fu
-;;     spray
 ;;     stripes
 ;;     suggest
 ;;     switch-window
 ;;     swiper
-;;     swoop
 ;;     sx
 ;;     symbol-overlay
 ;;     syslog-mode
@@ -380,13 +333,11 @@
 ;;     undo-tree
 ;;     vc (vc-dir.el, vc-hooks.el)
 ;;     vc-annotate (C-x v g)
-;;     vdiff
 ;;     vertico
 ;;     vertico-quick
 ;;     vimish-fold
 ;;     visible-mark
 ;;     visual-regexp
-;;     volatile-highlights
 ;;     vterm
 ;;     wcheck-mode
 ;;     web-mode
@@ -594,9 +545,6 @@ cover the blue-cyan-magenta side of the spectrum."
     ;; while bg-tab-inactive should be combined with fg-dim, whereas
     ;; bg-tab-inactive-alt goes together with fg-main
     ;;
-    ;; bg-tab-bar is only intended for the bar that holds the tabs and
-    ;; can only be combined with fg-main
-    ;;
     ;; fg-escape-char-construct and fg-escape-char-backslash can
     ;; be combined bg-main, bg-dim, bg-alt
     ;;
@@ -626,7 +574,6 @@ cover the blue-cyan-magenta side of the spectrum."
     (bg-region-accent . "#afafef")
     (bg-region-accent-subtle . "#efdfff")
 
-    (bg-tab-bar . "#d5d5d5")
     (bg-tab-active . "#f6f6f6")
     (bg-tab-inactive . "#b7b7b7")
     (bg-tab-inactive-accent . "#a9b4f6")
@@ -839,9 +786,6 @@ symbol and the latter as a string.")
     ;; while bg-tab-inactive should be combined with fg-dim, whereas
     ;; bg-tab-inactive-alt goes together with fg-main
     ;;
-    ;; bg-tab-bar is only intended for the bar that holds the tabs and
-    ;; can only be combined with fg-main
-    ;;
     ;; fg-escape-char-construct and fg-escape-char-backslash can
     ;; be combined bg-main, bg-dim, bg-alt
     ;;
@@ -871,7 +815,6 @@ symbol and the latter as a string.")
     (bg-region-accent . "#4f3d88")
     (bg-region-accent-subtle . "#240f55")
 
-    (bg-tab-bar . "#2c2c2c")
     (bg-tab-active . "#0e0e0e")
     (bg-tab-inactive . "#424242")
     (bg-tab-inactive-accent . "#35398f")
@@ -920,10 +863,10 @@ symbol and the latter as a string.")
     (bg-diff-refine-changed . "#585800") (fg-diff-refine-changed . "#ffffcc")
     (bg-diff-refine-removed . "#852828") (fg-diff-refine-removed . "#ffd9eb")
 
-    (bg-diff-focus-added . "#203d20") (fg-diff-focus-added . "#b4ddb4")
-    (bg-diff-focus-added-deuteran . "#00405f") (fg-diff-focus-added-deuteran . 
"#bfe4ff")
-    (bg-diff-focus-changed . "#4a3a10") (fg-diff-focus-changed . "#d0daaf")
-    (bg-diff-focus-removed . "#5e2526") (fg-diff-focus-removed . "#eebdba")
+    (bg-diff-focus-added . "#1d3c25") (fg-diff-focus-added . "#b4ddb4")
+    (bg-diff-focus-added-deuteran . "#003959") (fg-diff-focus-added-deuteran . 
"#bfe4ff")
+    (bg-diff-focus-changed . "#424200") (fg-diff-focus-changed . "#d0daaf")
+    (bg-diff-focus-removed . "#500f29") (fg-diff-focus-removed . "#eebdba")
 
     (bg-mark-sel . "#002f2f") (fg-mark-sel . "#60cfa2")
     (bg-mark-del . "#5a0000") (fg-mark-del . "#ff99aa")
@@ -1494,6 +1437,11 @@ This behaves in accordance with 
`modus-themes-mixed-fonts'.
 The actual styling of the face is done by `modus-themes-faces'."
   :group 'modus-theme-faces)
 
+(defface modus-themes-ui-variable-pitch nil
+  "Face for `modus-themes-variable-pitch-ui'.
+The actual styling of the face is done by `modus-themes-faces'."
+  :group 'modus-theme-faces)
+
 (defface modus-themes-graph-red-0 nil
   "Special subdued red face for use in graphs.
 This is intended to be applied in contexts such as the Org agenda
@@ -1673,6 +1621,72 @@ The actual styling of the face is done by 
`modus-themes-faces'."
 The actual styling of the face is done by `modus-themes-faces'."
   :group 'modus-theme-faces)
 
+;; "Grue" is "green" and "blue".
+(defface modus-themes-grue nil
+  "Generic face for `modus-themes-deuteranopia' foreground.
+The actual styling of the face is done by `modus-themes-faces'."
+  :group 'modus-themes-faces)
+
+(defface modus-themes-grue-active nil
+  "Face for `modus-themes-deuteranopia' active foreground.
+The actual styling of the face is done by `modus-themes-faces'."
+  :group 'modus-themes-faces)
+
+(defface modus-themes-grue-nuanced nil
+  "Face for `modus-themes-deuteranopia' nuanced foreground.
+The actual styling of the face is done by `modus-themes-faces'."
+  :group 'modus-themes-faces)
+
+(defface modus-themes-grue-background-active nil
+  "Face for `modus-themes-deuteranopia' active background.
+The actual styling of the face is done by `modus-themes-faces'."
+  :group 'modus-themes-faces)
+
+(defface modus-themes-grue-background-intense nil
+  "Face for `modus-themes-deuteranopia' intense background.
+The actual styling of the face is done by `modus-themes-faces'."
+  :group 'modus-themes-faces)
+
+(defface modus-themes-grue-background-subtle nil
+  "Face for `modus-themes-deuteranopia' subtle background.
+The actual styling of the face is done by `modus-themes-faces'."
+  :group 'modus-themes-faces)
+
+(defface modus-themes-grue-background-refine nil
+  "Face for `modus-themes-deuteranopia' refined background.
+The actual styling of the face is done by `modus-themes-faces'."
+  :group 'modus-themes-faces)
+
+(defface modus-themes-link-symlink nil
+  "Face for `modus-themes-links' symbolic link.
+The actual styling of the face is done by `modus-themes-faces'."
+  :group 'modus-themes-faces)
+
+(defface modus-themes-link-broken nil
+  "Face for `modus-themes-links' broken link.
+The actual styling of the face is done by `modus-themes-faces'."
+  :group 'modus-themes-faces)
+
+(defface modus-themes-tab-backdrop nil
+  "Face of backdrop in tabbed interfaces.
+The actual styling of the face is done by `modus-themes-faces'."
+  :group 'modus-themes-faces)
+
+(defface modus-themes-tab-active nil
+  "Face of active tab.
+The actual styling of the face is done by `modus-themes-faces'."
+  :group 'modus-themes-faces)
+
+(defface modus-themes-tab-inactive nil
+  "Face of inactive tab.
+The actual styling of the face is done by `modus-themes-faces'."
+  :group 'modus-themes-faces)
+
+(defface modus-themes-markup-verbatim nil
+  "Face of verbatim markup.
+The actual styling of the face is done by `modus-themes-faces'."
+  :group 'modus-themes-faces)
+
 
 
 ;;; Customization variables
@@ -1767,7 +1781,7 @@ For form, see `modus-themes-vivendi-colors'."
   :link '(info-link "(modus-themes) Bold constructs"))
 
 (defcustom modus-themes-variable-pitch-headings nil
-  "Use proportional fonts (variable-pitch) in headings."
+  "DEPRECATED: specify `variable-pitch' in `modus-themes-headings'."
   :group 'modus-themes
   :package-version '(modus-themes . "1.0.0")
   :version "28.1"
@@ -1776,6 +1790,8 @@ For form, see `modus-themes-vivendi-colors'."
   :initialize #'custom-initialize-default
   :link '(info-link "(modus-themes) Headings' typeface"))
 
+(make-obsolete 'modus-themes-variable-pitch-headings 'modus-themes-headings 
"2.0.0")
+
 (defcustom modus-themes-variable-pitch-ui nil
   "Use proportional fonts (variable-pitch) in UI elements.
 This includes the mode line, header line, tab bar, and tab line."
@@ -1824,6 +1840,7 @@ Users may need to explicitly configure the font family of
                 (const :tag "Semi-bold" semibold)
                 (const :tag "Extra-bold" extrabold)
                 (const :tag "Ultra-bold" ultrabold))
+        (float :tag "Number (float) to adjust height by" :value 1.1)
         (choice :tag "Colors"
                 (const :tag "Subtle colors" nil)
                 (const :tag "Rainbow colors" rainbow)
@@ -1842,26 +1859,34 @@ described below.  Here is a sample, followed by a 
presentation of
 all available properties:
 
     (setq modus-themes-headings
-          '((1 . (background overline))
-            (2 . (overline rainbow))
-            (t . (monochrome))))
+          (quote ((1 . (background overline variable-pitch 1.5))
+                  (2 . (overline rainbow 1.3))
+                  (3 . (overline 1.1))
+                  (t . (monochrome)))))
 
 By default (a nil value for this variable), all headings have a
-bold typographic weight and use a desaturated text color.
+bold typographic weight, use a desaturated text color, have a
+font family that is the same as the `default' face (typically
+monospaced), and a height that is equal to the `default' face's
+height.
 
 A `rainbow' property makes the text color more saturated.
 
 An `overline' property draws a line above the area of the
 heading.
 
-A `background' property adds a subtle tinted color to the
+A `background' property applies a subtle tinted color to the
 background of the heading.
 
-A `monochrome' property makes all headings the same base color,
-which is that of the default for the active theme (black/white).
-When `background' is also set, `monochrome' changes its color to
-gray.  If both `monochrome' and `rainbow' are set, the former
-takes precedence.
+A `monochrome' property makes the heading the same as the base
+color, which is that of the `default' face's foreground.  When
+`background' is also set, `monochrome' changes its color to gray.
+If both `monochrome' and `rainbow' are set, the former takes
+precedence.
+
+A `variable-pitch' property changes the font family of the
+heading to that of the `variable-pitch' face (normally a
+proportionately spaced typeface).
 
 The symbol of a weight attribute adjusts the font of the heading
 accordingly, such as `light', `semibold', etc.  Valid symbols are
@@ -1872,46 +1897,47 @@ and italic faces).  For backward compatibility, the 
`no-bold'
 value is accepted, though users are encouraged to specify a
 `regular' weight instead.
 
+A number, expressed as a floating point (e.g. 1.5), adjusts the
+height of the heading to that many times the base font size.  The
+default height is the same as 1.0, though it need not be
+explicitly stated.
+
 Combinations of any of those properties are expressed as a list,
 like in these examples:
 
     (semibold)
     (rainbow background)
-    (overline monochrome semibold)
+    (overline monochrome semibold 1.3)
 
 The order in which the properties are set is not significant.
 
 In user configuration files the form may look like this:
 
     (setq modus-themes-headings
-          '((1 . (background overline rainbow))
-            (2 . (background overline))
-            (t . (overline semibold))))
+          (quote ((1 . (background overline rainbow 1.5))
+                  (2 . (background overline 1.3))
+                  (t . (overline semibold)))))
 
 When defining the styles per heading level, it is possible to
 pass a non-nil value (t) instead of a list of properties.  This
 will retain the original aesthetic for that level.  For example:
 
     (setq modus-themes-headings
-          '((1 . t)           ; keep the default style
-            (2 . (background overline))
-            (t . (rainbow)))) ; style for all other headings
+          (quote ((1 . t)           ; keep the default style
+                  (2 . (background overline))
+                  (t . (rainbow))))) ; style for all other headings
 
     (setq modus-themes-headings
-          '((1 . (background overline))
-            (2 . (rainbow semibold))
-            (t . t))) ; default style for all other levels
+          (quote ((1 . (background overline))
+                  (2 . (rainbow semibold))
+                  (t . t)))) ; default style for all other levels
 
 For Org users, the extent of the heading depends on the variable
 `org-fontify-whole-heading-line'.  This affects the `overline'
 and `background' properties.  Depending on the version of Org,
-there may be others, such as `org-fontify-done-headline'.
-
-Also read `modus-themes-scale-headings' to change the height of
-headings and `modus-themes-variable-pitch-headings' to make them
-use a proportionately spaced font."
+there may be others, such as `org-fontify-done-headline'."
   :group 'modus-themes
-  :package-version '(modus-themes . "1.7.0")
+  :package-version '(modus-themes . "2.0.0")
   :version "29.1"
   :type `(alist
           :options ,(mapcar (lambda (el)
@@ -1931,11 +1957,11 @@ is a sample, followed by a description of all possible
 combinations:
 
     (setq modus-themes-org-agenda
-          '((header-block . (variable-pitch scale-title))
-            (header-date . (grayscale workaholic bold-today))
-            (event . (accented italic varied))
-            (scheduled . uniform)
-            (habit . traffic-light)))
+          (quote ((header-block . (variable-pitch 1.5 semibold))
+                  (header-date . (grayscale workaholic bold-today 1.2))
+                  (event . (accented italic varied))
+                  (scheduled . uniform)
+                  (habit . traffic-light))))
 
 A `header-block' key applies to elements that concern the
 headings which demarcate blocks in the structure of the agenda.
@@ -1945,19 +1971,30 @@ font size.  Acceptable values come in the form of a 
list that can
 include either or both of those properties:
 
 - `variable-pitch' to use a proportionately spaced typeface;
-- `scale-title' to increase height to `modus-themes-scale-title'
-  OR `no-scale' to set the font to the same height as the rest of
-  the buffer.
-
-In case both `scale-title' and `no-scale' are in the list, the
-latter takes precedence.
+- A number as a floating point (e.g. 1.5) to set the height of
+  the text to that many times the default font height.  A float
+  of 1.0 or the symbol `no-scale' have the same effect of making
+  the font to the same height as the rest of the buffer.  When
+  neither a number nor `no-scale' are present, the default is a
+  small increase in height (a value of 1.15).
+- The symbol of a weight attribute adjusts the font of the
+  heading accordingly, such as `light', `semibold', etc.  Valid
+  symbols are defined in the internal variable
+  `modus-themes--heading-weights'.  The absence of a weight means
+  that bold will be used by virtue of inheriting the `bold'
+  face (check the manual for tweaking bold and italic faces).
+
+In case both a number and `no-scale' are in the list, the latter
+takes precedence.  If two numbers are specified, the first one is
+applied.
 
 Example usage:
 
     (header-block . nil)
-    (header-block . (scale-title))
+    (header-block . (1.5))
     (header-block . (no-scale))
-    (header-block . (variable-pitch scale-title))
+    (header-block . (variable-pitch 1.5))
+    (header-block . (variable-pitch 1.5 semibold))
 
 A `header-date' key covers date headings.  Dates use only a
 foreground color by default (a nil value), with weekdays and
@@ -1971,12 +2008,13 @@ that can include any of the following properties:
   terms of color;
 - `bold-today' to apply a bold typographic weight to the current
   date;
-- `bold-all' to render all date headings in a bold weight.
-- `scale-heading' increases the height of the date headings to
-  the value of `modus-themes-scale-1' (which is the first step in
-  the scale for regular headings).
+- `bold-all' to render all date headings in a bold weight;
 - `underline-today' applies an underline to the current date
-  while removing the background it has by default.
+  while removing the background it has by default;
+- A number as a floating point (e.g. 1.2) to set the height of
+  the text to that many times the default font height.  The
+  default is the same as the base font height (the equivalent of
+  1.0).
 
 For example:
 
@@ -1985,7 +2023,7 @@ For example:
     (header-date . (grayscale bold-all))
     (header-date . (grayscale workaholic))
     (header-date . (grayscale workaholic bold-today))
-    (header-date . (grayscale workaholic bold-today scale-heading))
+    (header-date . (grayscale workaholic bold-today 1.2))
 
 An `event' key covers (i) headings with a plain time stamp that
 are shown on the agenda, also known as events, (ii) entries
@@ -1995,12 +2033,6 @@ By default all those look the same and have a subtle 
foreground
 color (the default is a nil value or an empty list).  This key
 accepts a list of properties.  Those are:
 
-- `scale-small' reduces the height of the entries to the value of
-  the user option `modus-themes-scale-small' (0.9 the height of
-  the main font size by default).  This work best when the
-  relevant entries have no tags associated with them and when the
-  user is interested in reducing their presence in the agenda
-  view.
 - `accented' applies an accent value to the event's foreground,
   replacing the original gray.  It makes all entries stand out more.
 - `italic' adds a slant to the font's forms (italic or oblique
@@ -2068,9 +2100,11 @@ value are passed as a symbol.  Those are:
   The difference between ready and clear states is attenuated by
   painting both of them using shades of green.  This option thus
   highlights the alert and overdue states.
-- `traffic-light-deuteranopia' is like the `traffic-light' except
-  its three colors are red, yellow, and blue to be suitable for
-  users with red-green color deficiency (deuteranopia).
+- When `modus-themes-deuteranopia' is non-nil the habit graph
+  uses a three-color style like the aforementioned
+  `traffic-light' variant, except that shades of blue are applied
+  instead of green.  This is suitable for users with red-green
+  color deficiency (deuteranopia).
 
 For example:
 
@@ -2078,7 +2112,7 @@ For example:
     (habit . simplified)
     (habit . traffic-light)"
   :group 'modus-themes
-  :package-version '(modus-themes . "1.7.0")
+  :package-version '(modus-themes . "2.0.0")
   :version "29.1"
   :type '(set
           (cons :tag "Block header"
@@ -2087,10 +2121,22 @@ For example:
                      (choice :tag "Font style"
                              (const :tag "Use the original typeface (default)" 
nil)
                              (const :tag "Use `variable-pitch' font" 
variable-pitch))
+                     (choice :tag "Font weight (must be supported by the 
typeface)"
+                             (const :tag "Bold (default)" nil)
+                             (const :tag "Thin" thin)
+                             (const :tag "Ultra-light" ultralight)
+                             (const :tag "Extra-light" extralight)
+                             (const :tag "Light" light)
+                             (const :tag "Semi-light" semilight)
+                             (const :tag "Regular" regular)
+                             (const :tag "Medium" medium)
+                             (const :tag "Semi-bold" semibold)
+                             (const :tag "Extra-bold" extrabold)
+                             (const :tag "Ultra-bold" ultrabold))
                      (choice :tag "Scaling"
                              (const :tag "Slight increase in height (default)" 
nil)
                              (const :tag "Do not scale" no-scale)
-                             (const :tag "Scale to match 
`modus-themes-scale-title'" scale-title))))
+                             (float :tag "Number (float) to adjust height by" 
:value 1.3))))
           (cons :tag "Date header" :greedy t
                 (const header-date)
                 (set :tag "Header presentation" :greedy t
@@ -2098,12 +2144,11 @@ For example:
                      (const :tag "Do not differentiate weekdays from weekends" 
workaholic)
                      (const :tag "Make today bold" bold-today)
                      (const :tag "Make all dates bold" bold-all)
-                     (const :tag "Increase font size (`modus-themes-scale-1')" 
scale-heading)
+                     (float :tag "Number (float) to adjust height by" :value 
1.05)
                      (const :tag "Make today underlined; remove the 
background" underline-today)))
           (cons :tag "Event entry" :greedy t
                 (const event)
                 (set :tag "Text presentation" :greedy t
-                     (const :tag "Use smaller font size 
(`modus-themes-scale-small')" scale-small)
                      (const :tag "Apply an accent color" accented)
                      (const :tag "Italic font slant (oblique forms)" italic)
                      (const :tag "Differentiate events from diary/sexp 
entries" varied)))
@@ -2116,183 +2161,88 @@ For example:
                 (const habit)
                 (choice (const :tag "Follow the original design of `org-habit' 
(default)" nil)
                         (const :tag "Do not distinguish between present and 
future variants" simplified)
-                        (const :tag "Use only red, yellow, green" 
traffic-light)
-                        (const :tag "Use only red, yellow, blue" 
traffic-light-deuteranopia))))
+                        (const :tag "Use only red, yellow, green" 
traffic-light))))
   :set #'modus-themes--set-option
   :initialize #'custom-initialize-default
   :link '(info-link "(modus-themes) Org agenda"))
 
 (defcustom modus-themes-scale-headings nil
-  "Use font scaling for headings.
-
-For regular headings the scale is controlled by the variables
-`modus-themes-scale-1' (smallest increase) and its variants all
-the way up to `modus-themes-scale-4' (largest increase).
-
-While `modus-themes-scale-title' is reserved for special headings
-that nominally are the largest on the scale (though that is not a
-requirement).
-
-A special heading is, in this context, one that does not fit into
-the syntax for heading levels that apply to the given mode.  For
-example, Org's #+title keyword lies outside the normal eight
-levels of headings.  Whereas, say, Markdown does not have such a
-special heading."
+  "DEPRECATED: specify height in `modus-themes-headings'."
   :group 'modus-themes
   :package-version '(modus-themes . "1.2.0")
   :version "28.1"
   :type 'boolean
   :set #'modus-themes--set-option
-  :initialize #'custom-initialize-default
-  :link '(info-link "(modus-themes) Scaled headings"))
+  :initialize #'custom-initialize-default)
 
-(defcustom modus-themes-scale-1 1.05
-  "Font size that is slightly larger than the base value.
-
-This size is used for level 4 headings, such as in Org and
-Markdown files.
+(make-obsolete 'modus-themes-scale-headings 'modus-themes-headings "2.0.0")
 
-The default value is a floating point that is interpreted as a
-multiple of the base font size.  It is recommended to use such a
-value.
-
-However, the variable also accepts an integer, understood as an
-absolute height that is 1/10 of the typeface's point size (e.g. a
-value of 140 is the same as setting the font at 14 point size).
-This will ignore the base font size and, thus, will not scale in
-accordance with it in cases where it changes, such as while using
-`text-scale-adjust'."
+(defcustom modus-themes-scale-1 1.05
+  "DEPRECATED: specify height in `modus-themes-headings'."
   :group 'modus-themes
   :package-version '(modus-themes . "1.2.0")
   :version "28.1"
   :type 'number
   :set #'modus-themes--set-option
-  :initialize #'custom-initialize-default
-  :link '(info-link "(modus-themes) Scaled heading sizes"))
-
-(defcustom modus-themes-scale-2 1.1
-  "Font size slightly larger than `modus-themes-scale-1'.
+  :initialize #'custom-initialize-default)
 
-This size is used for level 3 headings, such as in Org and
-Markdown files.
+(make-obsolete 'modus-themes-scale-1 'modus-themes-headings "2.0.0")
 
-The default value is a floating point that is interpreted as a
-multiple of the base font size.  It is recommended to use such a
-value.
-
-However, the variable also accepts an integer, understood as an
-absolute height that is 1/10 of the typeface's point size (e.g. a
-value of 140 is the same as setting the font at 14 point size).
-This will ignore the base font size and, thus, will not scale in
-accordance with it in cases where it changes, such as while using
-`text-scale-adjust'."
+(defcustom modus-themes-scale-2 1.1
+  "DEPRECATED: specify height in `modus-themes-headings'."
   :group 'modus-themes
   :package-version '(modus-themes . "1.2.0")
   :version "28.1"
   :type 'number
   :set #'modus-themes--set-option
-  :initialize #'custom-initialize-default
-  :link '(info-link "(modus-themes) Scaled heading sizes"))
-
-(defcustom modus-themes-scale-3 1.15
-  "Font size slightly larger than `modus-themes-scale-2'.
+  :initialize #'custom-initialize-default)
 
-This size is used for level 2 headings, such as in Org and
-Markdown files.
+(make-obsolete 'modus-themes-scale-2 'modus-themes-headings "2.0.0")
 
-The default value is a floating point that is interpreted as a
-multiple of the base font size.  It is recommended to use such a
-value.
-
-However, the variable also accepts an integer, understood as an
-absolute height that is 1/10 of the typeface's point size (e.g. a
-value of 140 is the same as setting the font at 14 point size).
-This will ignore the base font size and, thus, will not scale in
-accordance with it in cases where it changes, such as while using
-`text-scale-adjust'."
+(defcustom modus-themes-scale-3 1.15
+  "DEPRECATED: specify height in `modus-themes-headings'."
   :group 'modus-themes
   :package-version '(modus-themes . "1.2.0")
   :version "28.1"
   :type 'number
   :set #'modus-themes--set-option
-  :initialize #'custom-initialize-default
-  :link '(info-link "(modus-themes) Scaled heading sizes"))
+  :initialize #'custom-initialize-default)
 
-(defcustom modus-themes-scale-4 1.2
-  "Font size slightly larger than `modus-themes-scale-3'.
-
-This size is used for level 1 headings, such as in Org and
-Markdown files.
+(make-obsolete 'modus-themes-scale-3 'modus-themes-headings "2.0.0")
 
-The default value is a floating point that is interpreted as a
-multiple of the base font size.  It is recommended to use such a
-value.
-
-However, the variable also accepts an integer, understood as an
-absolute height that is 1/10 of the typeface's point size (e.g. a
-value of 140 is the same as setting the font at 14 point size).
-This will ignore the base font size and, thus, will not scale in
-accordance with it in cases where it changes, such as while using
-`text-scale-adjust'."
+(defcustom modus-themes-scale-4 1.2
+  "DEPRECATED: specify height in `modus-themes-headings'."
   :group 'modus-themes
   :package-version '(modus-themes . "1.2.0")
   :version "28.1"
   :type 'number
   :set #'modus-themes--set-option
-  :initialize #'custom-initialize-default
-  :link '(info-link "(modus-themes) Scaled heading sizes"))
+  :initialize #'custom-initialize-default)
 
-(define-obsolete-variable-alias 'modus-themes-scale-5 
'modus-themes-scale-title "1.5.0")
+(make-obsolete 'modus-themes-scale-4 'modus-themes-headings "2.0.0")
 
 (defcustom modus-themes-scale-title 1.3
-  "Font size slightly larger than `modus-themes-scale-4'.
-
-This size is only used for 'special' top level headings, such as
-Org's file title heading, denoted by the #+title key word, and
-the Org agenda structure headers (see `modus-themes-org-agenda').
-
-The default value is a floating point that is interpreted as a
-multiple of the base font size.  It is recommended to use such a
-value.
-
-However, the variable also accepts an integer, understood as an
-absolute height that is 1/10 of the typeface's point size (e.g. a
-value of 140 is the same as setting the font at 14 point size).
-This will ignore the base font size and, thus, will not scale in
-accordance with it in cases where it changes, such as while using
-`text-scale-adjust'."
+  "DEPRECATED: specify height in `modus-themes-headings'.
+Same principle for `modus-themes-org-agenda'."
   :group 'modus-themes
   :package-version '(modus-themes . "1.5.0")
   :version "28.1"
   :type 'number
   :set #'modus-themes--set-option
-  :initialize #'custom-initialize-default
-  :link '(info-link "(modus-themes) Scaled heading sizes"))
-
-(defcustom modus-themes-scale-small 0.9
-  "Font size smaller than the default value.
-
-This size is only used in special contexts where users are
-presented with the option to have smaller text on display (see
-`modus-themes-org-agenda').
+  :initialize #'custom-initialize-default)
 
-The default value is a floating point that is interpreted as a
-multiple of the base font size.  It is recommended to use such a
-value.
+(make-obsolete 'modus-themes-scale-title 'modus-themes-headings "2.0.0")
 
-However, the variable also accepts an integer, understood as an
-absolute height that is 1/10 of the typeface's point size (e.g. a
-value of 140 is the same as setting the font at 14 point size).
-This will ignore the base font size and, thus, will not scale in
-accordance with it in cases where it changes, such as while using
-`text-scale-adjust'."
+(defcustom modus-themes-scale-small 0.9
+  "DEPRECATED."
   :group 'modus-themes
   :package-version '(modus-themes . "1.6.0")
   :version "28.1"
   :type 'number
   :set #'modus-themes--set-option
-  :initialize #'custom-initialize-default
-  :link '(info-link "(modus-themes) Scaled heading sizes"))
+  :initialize #'custom-initialize-default)
+
+(make-obsolete 'modus-themes-scale-small nil "2.0.0")
 
 (defcustom modus-themes-fringes nil
   "Define the visibility of fringes.
@@ -2348,7 +2298,7 @@ The order in which the properties are set is not 
significant.
 
 In user configuration files the form may look like this:
 
-    (setq modus-themes-lang-checkers '(text-also background))
+    (setq modus-themes-lang-checkers (quote (text-also background)))
 
 NOTE: The placement of the straight underline, though not the
 wave style, is controlled by the built-in variables
@@ -2416,50 +2366,6 @@ respectively."
   :initialize #'custom-initialize-default
   :link '(info-link "(modus-themes) Org mode blocks"))
 
-(defcustom modus-themes-org-habit nil
-  "Deprecated in version 1.5.0 favor of `modus-themes-org-agenda'.
-
-Control the presentation of the `org-habit' graph.
-
-The default is meant to conform with the original aesthetic of
-`org-habit'.  It employs all four color codes that correspond to
-the org-habit states---clear, ready, alert, and overdue---while
-distinguishing between their present and future variants.  This
-results in a total of eight colors in use: red, yellow, green,
-blue, in tinted and shaded versions.  They cover the full set of
-information provided by the `org-habit' consistency graph.
-
-Option `simplified' is like the default except that it removes
-the dichotomy between current and future variants by applying
-uniform color-coded values.  It applies a total of four colors:
-red, yellow, green, blue.  They produce a simplified consistency
-graph that is more legible (or less \"busy\") than the default.
-The intent is to shift focus towards the distinction between the
-four states of a habit task, rather than each state's
-present/future outlook.
-
-Option `traffic-light' further reduces the available colors to
-red, yellow, and green.  As in `simplified', present and future
-variants appear uniformly, but differently from it, the 'clear'
-state is rendered in a green hue, instead of the original blue.
-This is meant to capture the use-case where a habit task being
-\"too early\" is less important than it being \"too late\".  The
-difference between ready and clear states is attenuated by
-painting both of them using shades of green.  This option thus
-highlights the alert and overdue states."
-  :group 'modus-themes
-  :package-version '(modus-themes . "1.1.0")
-  :version "28.1"
-  :type '(choice
-          (const :format "[%v] %t\n" :tag "Respect the original design of 
org-habit (default)" nil)
-          (const :format "[%v] %t\n" :tag "Like the default, but do not 
distinguish between present and future variants" simplified)
-          (const :format "[%v] %t\n" :tag "Like `simplified', but only use 
red, yellow, green" traffic-light))
-  :set #'modus-themes--set-option
-  :initialize #'custom-initialize-default
-  :link '(info-link "(modus-themes) Org agenda habits"))
-
-(make-obsolete 'modus-themes-org-habit 'modus-themes-org-agenda "1.5.0")
-
 (defcustom modus-themes-mode-line nil
   "Control the overall style of the mode line.
 
@@ -2489,13 +2395,16 @@ the same as the background, effectively creating some 
padding.
 The `accented' property ensures that the active mode line uses a
 colored background instead of the standard shade of gray.
 
-The `padded' property increases the apparent height of the mode
-line.  This is done by applying box effects and combining them
-with an underline and overline.  To ensure that the underline is
-placed at the bottom, set `x-underline-at-descent-line' to
-non-nil.  The `padded' property has no effect when the `moody'
-property is also used, because Moody already applies its own
-padding.
+A positive integer (natural number or natnum) applies a padding
+effect of NATNUM pixels at the boundaries of the mode lines.  The
+default value is 1 and does not need to be specified explicitly.
+The padding has no effect when the `moody' property is also used,
+because Moody already applies its own tweaks.  To ensure that the
+underline is placed at the bottom of the mode line, set
+`x-underline-at-descent-line' to non-nil (this is not needed when
+the `borderless' property is also set).  For users on Emacs 29,
+the `x-use-underline-position-properties' variable must also be
+set to nil.
 
 Combinations of any of those properties are expressed as a list,
 like in these examples:
@@ -2508,7 +2417,7 @@ The order in which the properties are set is not 
significant.
 
 In user configuration files the form may look like this:
 
-    (setq modus-themes-mode-line '(borderless accented))
+    (setq modus-themes-mode-line (quote (borderless accented)))
 
 Note that Moody does not expose any faces that the themes could
 style directly.  Instead it re-purposes existing ones to render
@@ -2532,7 +2441,7 @@ default colors (which have been carefully designed to be 
highly
 accessible).
 
 Furthermore, because Moody expects an underline and overline
-instead of a box style, it is advised to set
+instead of a box style, it is strongly advised to set
 `x-underline-at-descent-line' to a non-nil value."
   :group 'modus-themes
   :package-version '(modus-themes . "1.6.0")
@@ -2544,14 +2453,13 @@ instead of a box style, it is advised to set
                       (const :tag "No box effects (Moody-compatible)" moody))
               (const :tag "Colored background" accented)
               (const :tag "Without border color" borderless)
-              (const :tag "With extra padding" padded))
+              (natnum :tag "With extra padding" :value 6))
   :set #'modus-themes--set-option
   :initialize #'custom-initialize-default
   :link '(info-link "(modus-themes) Mode line"))
 
 (defcustom modus-themes-mode-line-padding 6
-  "Padding for `modus-themes-mode-line'.
-The value is expressed as a positive integer."
+  "DEPRECATED: Set natural number in `modus-themes-mode-line'."
   :group 'modus-themes
   :package-version '(modus-themes . "1.7.0")
   :version "29.1"
@@ -2560,12 +2468,14 @@ The value is expressed as a positive integer."
   :initialize #'custom-initialize-default
   :link '(info-link "(modus-themes) Mode line"))
 
+(make-obsolete 'modus-themes-mode-line-padding 'modus-themes-mode-line "2.0.0")
+
 (defcustom modus-themes-diffs nil
   "Adjust the overall style of diffs.
 
 The default (nil) uses fairly intense color combinations for
 diffs, by applying prominently colored backgrounds, with
-appropriate foregrounds.
+appropriately tinted foregrounds.
 
 Option `desaturated' follows the same principles as with the
 default (nil), though it tones down all relevant colors.
@@ -2573,36 +2483,19 @@ default (nil), though it tones down all relevant colors.
 Option `bg-only' applies a background but does not override the
 text's foreground.  This makes it suitable for a non-nil value
 passed to `diff-font-lock-syntax' (note: Magit does not support
-syntax highlighting in diffs---last checked on 2021-04-21).
-
-Option `deuteranopia' is like the default (nil) in terms of using
-prominently colored backgrounds, except that it also accounts for
-red-green color defficiency by replacing all instances of green
-with colors on the blue side of the spectrum.  Other stylistic
-changes are made in the interest of optimizing for such a
-use-case.
-
-Option `fg-only-deuteranopia' removes all colored backgrounds,
-except from word-wise or refined changes.  Instead, it only uses
-color-coded foreground values to differentiate between added,
-removed, and changed lines.  If a background is necessary to
-denote context, a subtle grayscale value is applied.  The color
-used for added lines is a variant of blue to account for
-red-green color defficiency but also because green text alone is
-hard to discern in the diff's context (hard for our accessibility
-purposes).  The `fg-only' option that existed in older versions
-of the themes is now an alias of `fg-only-deuteranopia', in the
-interest of backward compatibility."
+syntax highlighting in diffs---last checked on 2021-12-02).
+
+When the user option `modus-themes-deuteranopia' is non-nil, all
+diffs will use a red/blue color-coding system instead of the
+standard red/green.  Other stylistic changes are made in the
+interest of optimizing for such a use-case."
   :group 'modus-themes
-  :package-version '(modus-themes . "1.4.0")
-  :version "28.1"
+  :package-version '(modus-themes . "2.0.0")
+  :version "29.1"
   :type '(choice
           (const :format "[%v] %t\n" :tag "Intensely colored backgrounds 
(default)" nil)
           (const :format "[%v] %t\n" :tag "Slightly accented backgrounds with 
tinted text" desaturated)
-          (const :format "[%v] %t\n" :tag "Apply color-coded backgrounds; keep 
syntax colors intact" bg-only)
-          (const :format "[%v] %t\n" :tag "Like the default (nil), though 
optimized for red-green color defficiency" deuteranopia)
-          (const :format "[%v] %t\n" :tag "No backgrounds, except for refined 
diffs" fg-only-deuteranopia)
-          (const :format "[%v] %t\n" :tag "Alias of `fg-only-deuteranopia' for 
backward compatibility" fg-only))
+          (const :format "[%v] %t\n" :tag "Apply color-coded backgrounds; keep 
syntax colors intact" bg-only))
   :set #'modus-themes--set-option
   :initialize #'custom-initialize-default
   :link '(info-link "(modus-themes) Diffs"))
@@ -2617,8 +2510,7 @@ only or mostly use foreground colors for their 
interaction model,
 and (ii) those that combine background and foreground values for
 some of their metaphors.  The former category encompasses
 Icomplete, Ido, Selectrum, Vertico, as well as pattern matching
-styles like Orderless and Flx.  The latter covers Helm, Ivy, and
-Sallet.
+styles like Orderless and Flx.  The latter covers Helm and Ivy.
 
 A value of nil (the default) will simply respect the metaphors of
 each completion framework.
@@ -2687,7 +2579,7 @@ The order in which the properties are set is not 
significant.
 
 In user configuration files the form may look like this:
 
-    (setq modus-themes-prompts '(background gray))"
+    (setq modus-themes-prompts (quote (background gray)))"
   :group 'modus-themes
   :package-version '(modus-themes . "1.5.0")
   :version "28.1"
@@ -2701,8 +2593,6 @@ In user configuration files the form may look like this:
   :initialize #'custom-initialize-default
   :link '(info-link "(modus-themes) Command prompts"))
 
-(make-obsolete 'modus-themes-intense-hl-line 'modus-themes-hl-line "1.3.0")
-
 (defcustom modus-themes-hl-line nil
   "Control the current line highlight of HL-line mode.
 
@@ -2731,7 +2621,7 @@ The order in which the properties are set is not 
significant.
 
 In user configuration files the form may look like this:
 
-    (setq modus-themes-hl-line '(underline accented))
+    (setq modus-themes-hl-line (quote (underline accented)))
 
 Set `x-underline-at-descent-line' to a non-nil value for better
 results with underlines."
@@ -2799,7 +2689,7 @@ The order in which the properties are set is not 
significant.
 
 In user configuration files the form may look like this:
 
-    (setq modus-themes-paren-match '(bold intense))"
+    (setq modus-themes-paren-match (quote (bold intense)))"
   :group 'modus-themes
   :package-version '(modus-themes . "1.5.0")
   :version "28.1"
@@ -2847,7 +2737,7 @@ The order in which the properties are set is not 
significant.
 
 In user configuration files the form may look like this:
 
-    (setq modus-themes-syntax '(faint alt-syntax))
+    (setq modus-themes-syntax (quote (faint alt-syntax)))
 
 Independent of this variable, users may also control the use of a
 bold weight or italic text: `modus-themes-bold-constructs' and
@@ -2906,7 +2796,7 @@ The order in which the properties are set is not 
significant.
 
 In user configuration files the form may look like this:
 
-    (setq modus-themes-links '(neutral-underline background))
+    (setq modus-themes-links (quote (neutral-underline background)))
 
 The placement of the underline, meaning its proximity to the
 text, is controlled by `x-use-underline-position-properties',
@@ -2960,7 +2850,7 @@ The order in which the properties are set is not 
significant.
 
 In user configuration files the form may look like this:
 
-    (setq modus-themes-region '(bg-only no-extend))"
+    (setq modus-themes-region (quote (bg-only no-extend)))"
   :group 'modus-themes
   :package-version '(modus-themes . "1.5.0")
   :version "28.1"
@@ -2972,26 +2862,37 @@ In user configuration files the form may look like this:
   :initialize #'custom-initialize-default
   :link '(info-link "(modus-themes) Active region"))
 
-(defcustom modus-themes-success-deuteranopia nil
-  "Color-code 'success' or 'done' as blue instead of green.
-
-This is to account for red-green color deficiency.
-
-The present customization option applies to all contexts where
-there can be a color-coded distinction between success or
-failure, to-do or done, mark for selection or deletion (e.g. in
-Dired), current and lazily highlighted search matches, and so on.
-
-Diffs, which rely on a red/green dichotomy by default, can also
-be configured to meet the needs of users with deuteranopia via
-the option `modus-themes-diffs'."
+(define-obsolete-variable-alias
+  'modus-themes-success-deuteranopia
+  'modus-themes-deuteranopia
+  "2.0.0")
+
+(defcustom modus-themes-deuteranopia nil
+  "When non-nil use red/blue color-coding instead of red/green.
+
+This is to account for red-green color deficiency, also know as
+deuteranopia and variants.  It applies to all contexts where
+there can be a color-coded distinction between failure or
+success, a to-do or done state, a mark for deletion versus a mark
+for selection (e.g. in Dired), current and lazily highlighted
+search matches, removed lines in diffs as opposed to added ones,
+and so on.
+
+Note that this does not change all colors throughout the active
+theme, but only applies to cases that have color-coding
+significance.  For example, regular code syntax highlighting is
+not affected.  There is no such need because of the themes'
+overarching commitment to the highest legibility standard, which
+ensures that text is readable regardless of hue, as well as the
+predominance of colors on the blue-cyan-magenta-purple side of
+the spectrum."
   :group 'modus-themes
-  :package-version '(modus-themes . "1.4.0")
-  :version "28.1"
+  :package-version '(modus-themes . "2.0.0")
+  :version "29.1"
   :type 'boolean
   :set #'modus-themes--set-option
   :initialize #'custom-initialize-default
-  :link '(info-link "(modus-themes) Success' color-code"))
+  :link '(info-link "(modus-themes) Deuteranopia style"))
 
 (defcustom modus-themes-mail-citations nil
   "Control the color of citations in messages or email clients.
@@ -3093,11 +2994,6 @@ Those are stored in `modus-themes-faces' and
   (when modus-themes-mixed-fonts
     (list :inherit 'fixed-pitch)))
 
-(defun modus-themes--variable-pitch ()
-  "Conditional use of `variable-pitch' in headings."
-  (when modus-themes-variable-pitch-headings
-    (list :inherit 'variable-pitch)))
-
 (defun modus-themes--variable-pitch-ui ()
   "Conditional use of `variable-pitch' in UI elements."
   (when modus-themes-variable-pitch-ui
@@ -3163,7 +3059,8 @@ differ in overall intensity.  FAINTFG is a nuanced color."
                  (memq 'intense modus-themes-lang-checkers))
             intensebg)
            ((memq 'background modus-themes-lang-checkers)
-            subtlebg))
+            subtlebg)
+           ('unspecified))
           :foreground
           (cond
            ((and (memq 'faint modus-themes-lang-checkers)
@@ -3175,10 +3072,11 @@ differ in overall intensity.  FAINTFG is a nuanced 
color."
            ((memq 'intense modus-themes-lang-checkers)
             intensefg)
            ((memq 'text-also modus-themes-lang-checkers)
-            subtlefg)))))
+            subtlefg)
+           ('unspecified)))))
 
 (defun modus-themes--prompt (mainfg intensefg grayfg subtlebg intensebg 
intensebg-fg subtlebggray intensebggray)
-  "Conditional use of colors for prompts.
+  "Conditional use of colors for text prompt faces.
 MAINFG is the prompt's standard foreground.  INTENSEFG is a more
 prominent alternative to the main foreground, while GRAYFG is a
 less luminant shade of gray.
@@ -3192,7 +3090,7 @@ should be combinable with INTENSEBG-FG.
 SUBTLEBGGRAY and INTENSEBGGRAY are background values.  The former
 can be combined with GRAYFG, while the latter only works with the
 theme's fallback text color."
-  (let ((modus-themes-prompts
+  (let ((properties
          (if (listp modus-themes-prompts)
              modus-themes-prompts
            ;; translation layer for legacy values
@@ -3207,40 +3105,40 @@ theme's fallback text color."
              ('intense-gray '(background intense gray))))))
     (list :foreground
           (cond
-           ((and (memq 'gray modus-themes-prompts)
-                 (memq 'intense modus-themes-prompts))
+           ((and (memq 'gray properties)
+                 (memq 'intense properties))
             'unspecified)
-           ((memq 'gray modus-themes-prompts)
+           ((memq 'gray properties)
             grayfg)
-           ((and (memq 'background modus-themes-prompts)
-                 (memq 'intense modus-themes-prompts))
+           ((and (memq 'background properties)
+                 (memq 'intense properties))
             intensebg-fg)
-           ((memq 'intense modus-themes-prompts)
+           ((memq 'intense properties)
             intensefg)
            (mainfg))
           :background
           (cond
-           ((and (memq 'gray modus-themes-prompts)
-                 (memq 'background modus-themes-prompts)
-                 (memq 'intense modus-themes-prompts))
+           ((and (memq 'gray properties)
+                 (memq 'background properties)
+                 (memq 'intense properties))
             intensebggray)
-           ((and (memq 'gray modus-themes-prompts)
-                 (memq 'background modus-themes-prompts))
+           ((and (memq 'gray properties)
+                 (memq 'background properties))
             subtlebggray)
-           ((and (memq 'background modus-themes-prompts)
-                 (memq 'intense modus-themes-prompts))
+           ((and (memq 'background properties)
+                 (memq 'intense properties))
             intensebg)
-           ((memq 'background modus-themes-prompts)
+           ((memq 'background properties)
             subtlebg)
            ('unspecified))
           :inherit
           (cond
-           ((and (memq 'bold modus-themes-prompts)
-                 (memq 'italic modus-themes-prompts))
+           ((and (memq 'bold properties)
+                 (memq 'italic properties))
             'bold-italic)
-           ((memq 'italic modus-themes-prompts)
+           ((memq 'italic properties)
             'italic)
-           ((memq 'bold modus-themes-prompts)
+           ((memq 'bold properties)
             'bold)
            ('unspecified)))))
 
@@ -3250,7 +3148,7 @@ NORMALBG should be the special palette color 
'bg-paren-match' or
 something similar.  INTENSEBG must be easier to discern next to
 other backgrounds, such as the special palette color
 'bg-paren-match-intense'."
-  (let ((modus-themes-paren-match
+  (let ((properties
          (if (listp modus-themes-paren-match)
              modus-themes-paren-match
            ;; translation layer for legacy values
@@ -3261,15 +3159,15 @@ other backgrounds, such as the special palette color
              ('subtle-bold '(bold))
              ('intense '(intense))))))
     (list :inherit
-          (if (memq 'bold modus-themes-paren-match)
+          (if (memq 'bold properties)
               'bold
             'unspecified)
           :background
-          (if (memq 'intense modus-themes-paren-match)
+          (if (memq 'intense properties)
               intensebg
             normalbg)
           :underline
-          (if (memq 'underline modus-themes-paren-match)
+          (if (memq 'underline properties)
               t
             nil))))
 
@@ -3277,7 +3175,7 @@ other backgrounds, such as the special palette color
   "Apply foreground value to code syntax.
 FG is the default.  FAINT is typically the same color in its
 desaturated version."
-  (let ((modus-themes-syntax
+  (let ((properties
          (if (listp modus-themes-syntax)
              modus-themes-syntax
            ;; translation layer for legacy values
@@ -3291,7 +3189,7 @@ desaturated version."
              ('alt-syntax-yellow-comments '(alt-syntax yellow-comments))))))
     (list :foreground
           (cond
-           ((memq 'faint modus-themes-syntax)
+           ((memq 'faint properties)
             faint)
            (fg)))))
 
@@ -3300,7 +3198,7 @@ desaturated version."
 FG is the default.  FAINT is typically the same color in its
 desaturated version.  ALT is another hue while optional FAINT-ALT
 is its subtle alternative."
-  (let ((modus-themes-syntax
+  (let ((properties
          (if (listp modus-themes-syntax)
              modus-themes-syntax
            ;; translation layer for legacy values
@@ -3314,12 +3212,12 @@ is its subtle alternative."
              ('alt-syntax-yellow-comments '(alt-syntax yellow-comments))))))
     (list :foreground
           (cond
-           ((and (memq 'alt-syntax modus-themes-syntax)
-                 (memq 'faint modus-themes-syntax))
+           ((and (memq 'alt-syntax properties)
+                 (memq 'faint properties))
             (or faint-alt alt))
-           ((memq 'faint modus-themes-syntax)
+           ((memq 'faint properties)
             faint)
-           ((memq 'alt-syntax modus-themes-syntax)
+           ((memq 'alt-syntax properties)
             alt)
            (fg)))))
 
@@ -3330,7 +3228,7 @@ desaturated version.  GREEN is a color variant in that 
side of
 the spectrum.  ALT is another hue.  Optional FAINT-GREEN is a
 subtle alternative to GREEN.  Optional FAINT-ALT is a subtle
 alternative to ALT."
-  (let ((modus-themes-syntax
+  (let ((properties
          (if (listp modus-themes-syntax)
              modus-themes-syntax
            ;; translation layer for legacy values
@@ -3344,17 +3242,17 @@ alternative to ALT."
              ('alt-syntax-yellow-comments '(alt-syntax yellow-comments))))))
     (list :foreground
           (cond
-           ((and (memq 'faint modus-themes-syntax)
-                 (memq 'green-strings modus-themes-syntax))
+           ((and (memq 'faint properties)
+                 (memq 'green-strings properties))
             (or faint-green green))
-           ((and (memq 'alt-syntax modus-themes-syntax)
-                 (memq 'faint modus-themes-syntax))
+           ((and (memq 'alt-syntax properties)
+                 (memq 'faint properties))
             (or faint-alt faint))
-           ((memq 'faint modus-themes-syntax)
+           ((memq 'faint properties)
             faint)
-           ((memq 'green-strings modus-themes-syntax)
+           ((memq 'green-strings properties)
             green)
-           ((memq 'alt-syntax modus-themes-syntax)
+           ((memq 'alt-syntax properties)
             alt)
            (fg)))))
 
@@ -3363,7 +3261,7 @@ alternative to ALT."
 FG is the default.  YELLOW is a color variant of that name while
 optional FAINT-YELLOW is its subtle variant.  Optional FAINT is
 an alternative to the default value."
-  (let ((modus-themes-syntax
+  (let ((properties
          (if (listp modus-themes-syntax)
              modus-themes-syntax
            ;; translation layer for legacy values
@@ -3377,16 +3275,16 @@ an alternative to the default value."
              ('alt-syntax-yellow-comments '(alt-syntax yellow-comments))))))
     (list :foreground
           (cond
-           ((and (memq 'faint modus-themes-syntax)
-                 (memq 'yellow-comments modus-themes-syntax))
+           ((and (memq 'faint properties)
+                 (memq 'yellow-comments properties))
             (or faint-yellow yellow))
-           ((and (memq 'alt-syntax modus-themes-syntax)
-                 (memq 'yellow-comments modus-themes-syntax)
-                 (not (memq 'green-strings modus-themes-syntax)))
+           ((and (memq 'alt-syntax properties)
+                 (memq 'yellow-comments properties)
+                 (not (memq 'green-strings properties)))
             (or faint-yellow yellow))
-           ((memq 'yellow-comments modus-themes-syntax)
+           ((memq 'yellow-comments properties)
             yellow)
-           ((memq 'faint modus-themes-syntax)
+           ((memq 'faint properties)
             (or faint fg))
            (fg)))))
 
@@ -3418,7 +3316,7 @@ that combines well with the background and foreground."
   (let* ((key (modus-themes--key-cdr level modus-themes-headings))
          (style (or key (modus-themes--key-cdr t modus-themes-headings)))
          (style-listp (listp style))
-         (modus-themes-headings
+         (properties
           (if style-listp
               style
             ;; translation layer for legacy values
@@ -3440,7 +3338,7 @@ that combines well with the background and foreground."
               ('rainbow-section-no-bold '(no-bold rainbow background overline))
               ('section '(background overline))
               ('section-no-bold '(background overline no-bold)))))
-         (var (when modus-themes-variable-pitch-headings 'variable-pitch))
+         (var (when (memq 'variable-pitch properties) 'variable-pitch))
          (varbold (if var
                       (append (list 'bold) (list var))
                     'bold))
@@ -3449,28 +3347,30 @@ that combines well with the background and foreground."
           (cond
            ;; `no-bold' is for backward compatibility because we cannot
            ;; deprecate a variable's value.
-           ((or weight (memq 'no-bold modus-themes-headings))
+           ((or weight (memq 'no-bold properties))
             var)
            (varbold))
           :background
           (cond
-           ((and (memq 'monochrome modus-themes-headings)
-                 (memq 'background modus-themes-headings))
+           ((and (memq 'monochrome properties)
+                 (memq 'background properties))
             bg-gray)
-           ((memq 'background modus-themes-headings)
+           ((memq 'background properties)
             bg)
            ('unspecified))
           :foreground
           (cond
-           ((memq 'monochrome modus-themes-headings)
+           ((memq 'monochrome properties)
             'unspecified)
-           ((memq 'rainbow modus-themes-headings)
+           ((memq 'rainbow properties)
             fg-alt)
            (fg))
+          :height
+          (seq-find #'floatp properties 'unspecified)
           :weight
           (or weight 'unspecified)
           :overline
-          (if (memq 'overline modus-themes-headings)
+          (if (memq 'overline properties)
               border
             'unspecified))))
 
@@ -3478,16 +3378,20 @@ that combines well with the background and foreground."
   "Control the style of the Org agenda structure.
 FG is the foreground color to use."
   (let* ((properties (modus-themes--key-cdr 'header-block 
modus-themes-org-agenda))
-         (inherit (cond ((memq 'variable-pitch properties)
-                         (list 'bold 'variable-pitch))
-                        ('bold)))
-         (height (cond ((memq 'no-scale properties)
-                        1.0)
-                       ((memq 'scale-title properties)
-                        modus-themes-scale-title)
-                       (1.15))))
-    (list :inherit inherit
-          :height height
+         (weight (modus-themes--heading-weight properties)))
+    (list :inherit
+          (cond
+           ((and weight (memq 'variable-pitch properties))
+            'variable-pitch)
+           (weight 'unspecified)
+           ((memq 'variable-pitch properties)
+            (list 'bold 'variable-pitch))
+           ('bold))
+          :weight
+          (or weight 'unspecified)
+          :height
+          (cond ((memq 'no-scale properties) 'unspecified)
+                ((seq-find #'floatp properties 1.15)))
           :foreground fg)))
 
 (defun modus-themes--agenda-date (defaultfg grayscalefg &optional workaholicfg 
grayscaleworkaholicfg bg bold ul)
@@ -3506,8 +3410,10 @@ weight.  Optional UL applies an underline."
            (t
             'unspecified))
           :background
-          (unless (memq 'underline-today properties)
-            bg)
+          (cond
+           ((memq 'underline-today properties)
+            'unspecified)
+           ((or bg 'unspecified)))
           :foreground
           (cond
            ((and (memq 'grayscale properties)
@@ -3520,9 +3426,7 @@ weight.  Optional UL applies an underline."
            (t
             defaultfg))
           :height
-          (if (memq 'scale-heading properties)
-              modus-themes-scale-1
-            'unspecified)
+          (seq-find #'floatp properties 'unspecified)
           :underline
           (if (and ul (memq 'underline-today properties))
               t
@@ -3535,11 +3439,7 @@ toggle to behave in accordance with the semantics of the 
`varied'
 property that the `event' key accepts in
 `modus-themes-org-agenda'."
   (let ((properties (modus-themes--key-cdr 'event modus-themes-org-agenda)))
-    (list :height
-          (if (memq 'scale-small properties)
-              modus-themes-scale-small
-            'unspecified)
-          :foreground
+    (list :foreground
           (cond
            ((or (and (memq 'varied properties) varied)
                 (and (memq 'accented properties)
@@ -3585,11 +3485,12 @@ DEFAULT is the original foregrounc color.  TRAFFIC is 
to be used
 when the 'traffic-light' style is applied, while SIMPLE
 corresponds to the 'simplified style'.  Optional TRAFFIC-DEUTERAN
 is an alternative to TRAFFIC, meant for deuteranopia."
-  (pcase (modus-themes--key-cdr 'habit modus-themes-org-agenda)
-    ('traffic-light (list :background traffic))
-    ('traffic-light-deuteranopia (list :background (or traffic-deuteran 
traffic)))
-    ('simplified (list :background simple))
-    (_ (list :background default))))
+  (if modus-themes-deuteranopia
+      (list :background (or traffic-deuteran traffic))
+    (pcase (modus-themes--key-cdr 'habit modus-themes-org-agenda)
+      ('traffic-light (list :background traffic))
+      ('simplified (list :background simple))
+      (_ (list :background default)))))
 
 (defun modus-themes--org-block (bgblk fgdefault &optional fgblk)
   "Conditionally set the background of Org blocks.
@@ -3625,15 +3526,8 @@ set to `rainbow'."
     ('gray-background (list :background bg :foreground fg :extend t))
     ('grayscale (list :background bg :foreground fg :extend t))
     ('greyscale (list :background bg :foreground fg :extend t))
-    ('rainbow (list :background bgaccent :foreground fgaccent))
-    (_ (list :background bg :foreground fg))))
-
-(defun modus-themes--mode-line-padding ()
-  "Determine mode line padding value.
-See `modus-themes--mode-line-attrs'."
-  (if (natnump modus-themes-mode-line-padding)
-      modus-themes-mode-line-padding
-    6))                                 ; the default value
+    ('rainbow (list :background bgaccent :foreground fgaccent :extend nil))
+    (_ (list :background bg :foreground fg :extend nil))))
 
 (defun modus-themes--mode-line-attrs
     (fg bg fg-alt bg-alt fg-accent bg-accent border border-3d &optional 
alt-style fg-distant)
@@ -3651,91 +3545,85 @@ line's box property.
 Optional FG-DISTANT should be close to the main background
 values.  It is intended to be used as a distant-foreground
 property."
-  (let ((padding (modus-themes--mode-line-padding))
-        (modus-themes-mode-line
-         (if (listp modus-themes-mode-line)
-             modus-themes-mode-line
-           ;; translation layer for legacy values
-           (alist-get modus-themes-mode-line
-                      '((3d . (3d))
-                        (moody . (moody))
-                        (borderless . (borderless))
-                        (borderless-3d . (borderless 3d))
-                        (borderless-moody . (borderless moody))
-                        (accented . (accented))
-                        (accented-3d . (accented 3d))
-                        (accented-moody . (accented moody))
-                        (borderless-accented . (borderless accented))
-                        (borderless-accented-3d . (borderless accented 3d))
-                        (borderless-accented-moody . (borderless accented 
moody)))))))
-    (let ((base (cond ((memq 'accented modus-themes-mode-line)
-                       (cons fg-accent bg-accent))
-                      ((and (or (memq 'moody modus-themes-mode-line)
-                                (memq '3d modus-themes-mode-line))
-                            (not (memq 'borderless modus-themes-mode-line)))
-                       (cons fg-alt bg-alt))
-                      ((cons fg bg))))
-          (box (cond ((memq 'moody modus-themes-mode-line)
+  (let* ((properties
+          (if (listp modus-themes-mode-line)
+              modus-themes-mode-line
+            ;; translation layer for legacy values
+            (alist-get modus-themes-mode-line
+                       '((3d . (3d))
+                         (moody . (moody))
+                         (borderless . (borderless))
+                         (borderless-3d . (borderless 3d))
+                         (borderless-moody . (borderless moody))
+                         (accented . (accented))
+                         (accented-3d . (accented 3d))
+                         (accented-moody . (accented moody))
+                         (borderless-accented . (borderless accented))
+                         (borderless-accented-3d . (borderless accented 3d))
+                         (borderless-accented-moody . (borderless accented 
moody))))))
+         (padding (seq-find #'natnump properties 1))
+         (padded (> padding 1))
+         (base (cond ((memq 'accented properties)
+                      (cons fg-accent bg-accent))
+                     ((and (or (memq 'moody properties)
+                               (memq '3d properties))
+                           (not (memq 'borderless properties)))
+                      (cons fg-alt bg-alt))
+                     ((cons fg bg))))
+         (line (cond ((not (or (memq 'moody properties) padded))
+                      'unspecified)
+                     ((and (not (memq 'moody properties))
+                           padded
+                           (memq 'borderless properties))
                       'unspecified)
-                     ((and (memq '3d modus-themes-mode-line)
-                           (memq 'padded modus-themes-mode-line))
-                      (list :line-width padding
-                            :color
-                            (cond ((and (memq 'accented modus-themes-mode-line)
-                                        (memq 'borderless 
modus-themes-mode-line))
-                                   bg-accent)
-                                  ((or (memq 'accented modus-themes-mode-line)
-                                       (memq 'borderless 
modus-themes-mode-line))
-                                   bg)
-                                  (bg-alt))
-                            :style (when alt-style 'released-button)))
-                     ((and (memq 'accented modus-themes-mode-line)
-                           (memq 'padded modus-themes-mode-line))
-                      (list :line-width padding :color bg-accent))
-                     ((memq 'padded modus-themes-mode-line)
-                      (list :line-width padding :color bg))
-                     ((memq '3d modus-themes-mode-line)
-                      (list :line-width 1
-                            :color
-                            (cond ((and (memq 'accented modus-themes-mode-line)
-                                        (memq 'borderless 
modus-themes-mode-line))
-                                   bg-accent)
-                                  ((memq 'borderless modus-themes-mode-line) 
bg)
-                                  (border-3d))
-                            :style (when alt-style 'released-button)))
-                     ((and (memq 'accented modus-themes-mode-line)
-                           (memq 'borderless modus-themes-mode-line))
+                     ((and (memq 'borderless properties)
+                           (memq 'accented properties))
                       bg-accent)
-                     ((memq 'borderless modus-themes-mode-line)
+                     ((memq 'borderless properties)
                       bg)
-                     ((memq 'padded modus-themes-mode-line)
-                      (list :line-width padding :color bg))
-                     (border)))
-          (line (cond ((not (or (memq 'moody modus-themes-mode-line)
-                                (memq 'padded modus-themes-mode-line)))
-                       'unspecified)
-                      ((and (memq 'borderless modus-themes-mode-line)
-                            (memq 'accented modus-themes-mode-line))
-                       bg-accent)
-                      ((memq 'borderless modus-themes-mode-line)
-                       bg)
-                      (border))))
-      (list :foreground (car base)
-            :background (cdr base)
-            :box box
-            :overline line
-            :underline line
-            :distant-foreground
-            (when (memq 'moody modus-themes-mode-line)
-              fg-distant)))))
-
-(defun modus-themes--diff
-    (fg-only-bg fg-only-fg mainbg mainfg altbg altfg &optional deuteranbg 
deuteranfg  bg-only-fg)
-  "Color combinations for `modus-themes-diffs'.
+                     (border))))
+    (list :foreground (car base)
+          :background (cdr base)
+          :box
+          (cond ((memq 'moody properties)
+                 'unspecified)
+                ((and (memq '3d properties) padded)
+                 (list :line-width padding
+                       :color
+                       (cond ((and (memq 'accented properties)
+                                   (memq 'borderless properties))
+                              bg-accent)
+                             ((or (memq 'accented properties)
+                                  (memq 'borderless properties))
+                              bg)
+                             (bg-alt))
+                       :style (when alt-style 'released-button)))
+                ((and (memq 'accented properties) padded)
+                 (list :line-width padding :color bg-accent))
+                ((memq '3d properties)
+                 (list :line-width padding
+                       :color
+                       (cond ((and (memq 'accented properties)
+                                   (memq 'borderless properties))
+                              bg-accent)
+                             ((memq 'borderless properties) bg)
+                             (border-3d))
+                       :style (when alt-style 'released-button)))
+                ((and (memq 'accented properties)
+                      (memq 'borderless properties))
+                 (list :line-width padding :color bg-accent))
+                ((or (memq 'borderless properties) padded)
+                 (list :line-width padding :color bg))
+                (border))
+          :overline line
+          :underline line
+          :distant-foreground
+          (if (memq 'moody properties)
+              fg-distant
+            'unspecified))))
 
-FG-ONLY-BG should be similar or the same as the main background.
-FG-ONLY-FG should be a saturated accent value that can be
-combined with the former.
+(defun modus-themes--diff (mainbg mainfg altbg altfg &optional deuteranbg 
deuteranfg  bg-only-fg)
+  "Color combinations for `modus-themes-diffs'.
 
 MAINBG must be one of the dedicated backgrounds for diffs while
 MAINFG must be the same for the foreground.
@@ -3749,27 +3637,16 @@ for red-green color defficiency (deuteranopia).
 
 Optional BG-ONLY-FG applies ALTFG else leaves the foreground
 unspecified."
-  (pcase modus-themes-diffs
-    ('fg-only (list :background fg-only-bg :foreground fg-only-fg))
-    ('fg-only-deuteranopia (list :background fg-only-bg :foreground 
fg-only-fg))
-    ('desaturated (list :background altbg :foreground altfg))
-    ('deuteranopia (list :background (or deuteranbg mainbg) :foreground (or 
deuteranfg mainfg)))
-    ('bg-only (list :background altbg :foreground (if bg-only-fg altfg 
'unspecified)))
-    (_ (list :background mainbg :foreground mainfg))))
-
-(defun modus-themes--diff-deuteran (deuteran main)
-  "Determine whether the DEUTERAN or MAIN color should be used.
-This is based on whether `modus-themes-diffs' has the value
-`deuteranopia'."
-  (if (or (eq modus-themes-diffs 'deuteranopia)
-          (eq modus-themes-diffs 'fg-only-deuteranopia)
-          (eq modus-themes-diffs 'fg-only))
-      (list deuteran)
-    (list main)))
-
-(defun modus-themes--success-deuteran (deuteran main)
+  (if modus-themes-deuteranopia
+      (list :background (or deuteranbg mainbg) :foreground (or deuteranfg 
mainfg))
+    (pcase modus-themes-diffs
+      ('desaturated (list :background altbg :foreground altfg))
+      ('bg-only (list :background altbg :foreground (if bg-only-fg altfg 
'unspecified)))
+      (_ (list :background mainbg :foreground mainfg)))))
+
+(defun modus-themes--deuteran (deuteran main)
   "Determine whether to color-code success as DEUTERAN or MAIN."
-  (if modus-themes-success-deuteranopia
+  (if modus-themes-deuteranopia
       (list deuteran)
     (list main)))
 
@@ -3813,7 +3690,7 @@ FG is the link's default color for its text and underline
 property.  FGFAINT is a desaturated color for the text and
 underline.  UNDERLINE is a gray color only for the undeline.  BG
 is a background color and BGNEUTRAL is its fallback value."
-  (let ((modus-themes-links
+  (let ((properties
          (if (listp modus-themes-links)
              modus-themes-links
            ;; translation layer for legacy values
@@ -3826,42 +3703,42 @@ is a background color and BGNEUTRAL is its fallback 
value."
              ('neutral-underline-only '(no-color neutral-underline))))))
     (list :inherit
           (cond
-           ((and (memq 'bold modus-themes-links)
-                 (memq 'italic modus-themes-links))
+           ((and (memq 'bold properties)
+                 (memq 'italic properties))
             'bold-italic)
-           ((memq 'italic modus-themes-links)
+           ((memq 'italic properties)
             'italic)
-           ((memq 'bold modus-themes-links)
+           ((memq 'bold properties)
             'bold)
            ('unspecified))
           :background
           (cond
-           ((and (memq 'no-color modus-themes-links)
-                 (memq 'no-underline modus-themes-links))
+           ((and (memq 'no-color properties)
+                 (memq 'no-underline properties))
             bgneutral)
-           ((memq 'background modus-themes-links)
+           ((memq 'background properties)
             bg)
            ('unspecified))
           :foreground
           (cond
-           ((memq 'no-color modus-themes-links)
+           ((memq 'no-color properties)
             'unspecified)
-           ((memq 'faint modus-themes-links)
+           ((memq 'faint properties)
             fgfaint)
            (fg))
           :underline
           (cond
-           ((memq 'no-underline modus-themes-links)
+           ((memq 'no-underline properties)
             'unspecified)
-           ((memq 'neutral-underline modus-themes-links)
+           ((memq 'neutral-underline properties)
             underline)
            (t)))))
 
 (defun modus-themes--link-color (fg fgfaint &optional neutralfg)
-  "Extends `modus-themes--link'.
+  "Extend `modus-themes--link'.
 FG is the main accented foreground.  FGFAINT is also accented,
 yet desaturated.  Optional NEUTRALFG is a gray value."
-  (let ((modus-themes-links
+  (let ((properties
          (if (listp modus-themes-links)
              modus-themes-links
            ;; translation layer for legacy values
@@ -3874,25 +3751,19 @@ yet desaturated.  Optional NEUTRALFG is a gray value."
              ('neutral-underline-only '(no-color neutral-underline))))))
     (list :foreground
           (cond
-           ((memq 'no-color modus-themes-links)
+           ((memq 'no-color properties)
             (or neutralfg 'unspecified))
-           ((memq 'faint modus-themes-links)
+           ((memq 'faint properties)
             fgfaint)
            (fg))
           :underline
           (cond
-           ((memq 'no-underline modus-themes-links)
+           ((memq 'no-underline properties)
             'unspecified)
-           ((memq 'neutral-underline modus-themes-links)
+           ((memq 'neutral-underline properties)
             (or neutralfg 'unspecified))
            (t)))))
 
-(defun modus-themes--scale (amount)
-  "Scale heading by AMOUNT.
-AMOUNT is a customization option."
-  (when modus-themes-scale-headings
-    (list :height amount)))
-
 (defun modus-themes--region (bg fg bgsubtle bgaccent bgaccentsubtle)
   "Apply `modus-themes-region' styles.
 
@@ -3901,7 +3772,7 @@ is a subtle background value that can be combined with 
all colors
 used to fontify text and code syntax.  BGACCENT is a colored
 background that combines well with FG.  BGACCENTSUBTLE can be
 combined with all colors used to fontify text."
-  (let ((modus-themes-region
+  (let ((properties
          (if (listp modus-themes-region)
              modus-themes-region
            ;; translation layer for legacy values
@@ -3913,25 +3784,25 @@ combined with all colors used to fontify text."
              ('no-extend '(no-extend))))))
     (list :background
           (cond
-           ((and (memq 'accented modus-themes-region)
-                 (memq 'bg-only modus-themes-region))
+           ((and (memq 'accented properties)
+                 (memq 'bg-only properties))
             bgaccentsubtle)
-           ((memq 'accented modus-themes-region)
+           ((memq 'accented properties)
             bgaccent)
-           ((memq 'bg-only modus-themes-region)
+           ((memq 'bg-only properties)
             bgsubtle)
            (bg))
           :foreground
           (cond
-           ((and (memq 'accented modus-themes-region)
-                 (memq 'bg-only modus-themes-region))
+           ((and (memq 'accented properties)
+                 (memq 'bg-only properties))
             'unspecified)
-           ((memq 'bg-only modus-themes-region)
+           ((memq 'bg-only properties)
             'unspecified)
            (fg))
           :extend
           (cond
-           ((memq 'no-extend modus-themes-region)
+           ((memq 'no-extend properties)
             nil)
            (t)))))
 
@@ -3946,7 +3817,7 @@ LINEACCENT are color values that can remain distinct 
against the
 buffer's possible backgrounds: the former is neutral, the latter
 is accented.  LINENEUTRALINTENSE and LINEACCENTINTENSE are their
 more prominent alternatives."
-  (let ((modus-themes-hl-line
+  (let ((properties
          (if (listp modus-themes-hl-line)
              modus-themes-hl-line
            ;; translation layer for legacy values
@@ -3959,28 +3830,28 @@ more prominent alternatives."
              ('underline-only-accented '(underline accented))))))
     (list :background
           (cond
-           ((and (memq 'intense modus-themes-hl-line)
-                 (memq 'accented modus-themes-hl-line))
+           ((and (memq 'intense properties)
+                 (memq 'accented properties))
             bgaccent)
-           ((memq 'accented modus-themes-hl-line)
+           ((memq 'accented properties)
             bgaccentsubtle)
-           ((memq 'intense modus-themes-hl-line)
+           ((memq 'intense properties)
             bgintense)
            (bgdefault))
           :underline
           (cond
-           ((and (memq 'intense modus-themes-hl-line)
-                 (memq 'accented modus-themes-hl-line)
-                 (memq 'underline modus-themes-hl-line))
+           ((and (memq 'intense properties)
+                 (memq 'accented properties)
+                 (memq 'underline properties))
             lineaccentintense)
-           ((and (memq 'accented modus-themes-hl-line)
-                 (memq 'underline modus-themes-hl-line))
+           ((and (memq 'accented properties)
+                 (memq 'underline properties))
             lineaccent)
-           ((and (memq 'intense modus-themes-hl-line)
-                 (memq 'underline modus-themes-hl-line))
+           ((and (memq 'intense properties)
+                 (memq 'underline properties))
             lineneutralintense)
-           ((or (memq 'no-background modus-themes-hl-line)
-                (memq 'underline modus-themes-hl-line))
+           ((or (memq 'no-background properties)
+                (memq 'underline properties))
             lineneutral)
            ('unspecified)))))
 
@@ -4240,66 +4111,72 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     ;; intended for `diff-mode' or equivalent
     `(modus-themes-diff-added
       ((,class ,@(modus-themes--diff
-                  bg-main blue-alt-other
                   bg-diff-focus-added fg-diff-focus-added
                   green-nuanced-bg fg-diff-added
                   bg-diff-focus-added-deuteran fg-diff-focus-added-deuteran))))
     `(modus-themes-diff-changed
       ((,class ,@(modus-themes--diff
-                  bg-main yellow
                   bg-diff-focus-changed fg-diff-focus-changed
                   yellow-nuanced-bg fg-diff-changed))))
     `(modus-themes-diff-removed
       ((,class ,@(modus-themes--diff
-                  bg-main red
                   bg-diff-focus-removed fg-diff-focus-removed
                   red-nuanced-bg fg-diff-removed))))
     `(modus-themes-diff-refine-added
       ((,class ,@(modus-themes--diff
-                  bg-diff-added-deuteran fg-diff-added-deuteran
                   bg-diff-refine-added fg-diff-refine-added
                   bg-diff-focus-added fg-diff-focus-added
                   bg-diff-refine-added-deuteran 
fg-diff-refine-added-deuteran))))
     `(modus-themes-diff-refine-changed
       ((,class ,@(modus-themes--diff
-                  bg-diff-changed fg-diff-changed
                   bg-diff-refine-changed fg-diff-refine-changed
                   bg-diff-focus-changed fg-diff-focus-changed))))
     `(modus-themes-diff-refine-removed
       ((,class ,@(modus-themes--diff
-                  bg-diff-removed fg-diff-removed
                   bg-diff-refine-removed fg-diff-refine-removed
                   bg-diff-focus-removed fg-diff-focus-removed))))
     `(modus-themes-diff-focus-added
       ((,class ,@(modus-themes--diff
-                  bg-dim blue-alt-other
                   bg-diff-focus-added fg-diff-focus-added
                   bg-diff-added fg-diff-added
                   bg-diff-focus-added-deuteran fg-diff-focus-added-deuteran))))
     `(modus-themes-diff-focus-changed
       ((,class ,@(modus-themes--diff
-                  bg-dim yellow
                   bg-diff-focus-changed fg-diff-focus-changed
                   bg-diff-changed fg-diff-changed))))
     `(modus-themes-diff-focus-removed
       ((,class ,@(modus-themes--diff
-                  bg-dim red
                   bg-diff-focus-removed fg-diff-focus-removed
                   bg-diff-removed fg-diff-removed))))
     `(modus-themes-diff-heading
       ((,class ,@(modus-themes--diff
-                  bg-alt fg-main
                   bg-diff-heading fg-diff-heading
                   cyan-nuanced-bg cyan-nuanced-fg
                   bg-header fg-main
                   t))))
+;;;;; deuteranopia-specific
+    `(modus-themes-grue ((,class :foreground ,@(modus-themes--deuteran blue 
green))))
+    `(modus-themes-grue-active ((,class :foreground ,@(modus-themes--deuteran 
blue-active green-active))))
+    `(modus-themes-grue-nuanced ((,class :foreground ,@(modus-themes--deuteran 
blue-nuanced-fg green-nuanced-fg))))
+    `(modus-themes-grue-background-active ((,class :inherit 
,@(modus-themes--deuteran
+                                                               
'modus-themes-fringe-blue
+                                                               
'modus-themes-fringe-green))))
+    `(modus-themes-grue-background-intense ((,class :inherit 
,@(modus-themes--deuteran
+                                                                
'modus-themes-intense-blue
+                                                                
'modus-themes-intense-green))))
+    `(modus-themes-grue-background-subtle ((,class :inherit 
,@(modus-themes--deuteran
+                                                               
'modus-themes-subtle-blue
+                                                               
'modus-themes-subtle-green))))
+    `(modus-themes-grue-background-subtle ((,class :inherit 
,@(modus-themes--deuteran
+                                                               
'modus-themes-refine-blue
+                                                               
'modus-themes-refine-green))))
 ;;;;; mark indicators
     ;; color combinations intended for Dired, Ibuffer, or equivalent
     `(modus-themes-pseudo-header ((,class :inherit bold :foreground ,fg-main)))
     `(modus-themes-mark-alt ((,class :inherit bold :background ,bg-mark-alt 
:foreground ,fg-mark-alt)))
     `(modus-themes-mark-del ((,class :inherit bold :background ,bg-mark-del 
:foreground ,fg-mark-del)))
     `(modus-themes-mark-sel ((,class :inherit bold
-                                     :background 
,@(modus-themes--success-deuteran
+                                     :background ,@(modus-themes--deuteran
                                                     cyan-refine-bg
                                                     bg-mark-sel)
                                      :foreground ,fg-mark-sel)))
@@ -4309,23 +4186,19 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(modus-themes-heading-1
       ((,class ,@(modus-themes--heading
                   1 fg-main magenta-alt-other
-                  magenta-nuanced-bg bg-alt bg-region)
-               ,@(modus-themes--scale modus-themes-scale-4))))
+                  magenta-nuanced-bg bg-alt bg-region))))
     `(modus-themes-heading-2
       ((,class ,@(modus-themes--heading
                   2 fg-special-warm magenta-alt
-                  red-nuanced-bg bg-alt bg-region)
-               ,@(modus-themes--scale modus-themes-scale-3))))
+                  red-nuanced-bg bg-alt bg-region))))
     `(modus-themes-heading-3
       ((,class ,@(modus-themes--heading
                   3 fg-special-cold blue
-                  blue-nuanced-bg bg-alt bg-region)
-               ,@(modus-themes--scale modus-themes-scale-2))))
+                  blue-nuanced-bg bg-alt bg-region))))
     `(modus-themes-heading-4
       ((,class ,@(modus-themes--heading
                   4 fg-special-mild cyan
-                  cyan-nuanced-bg bg-alt bg-region)
-               ,@(modus-themes--scale modus-themes-scale-1))))
+                  cyan-nuanced-bg bg-alt bg-region))))
     `(modus-themes-heading-5
       ((,class ,@(modus-themes--heading
                   5 fg-special-calm green-alt-other
@@ -4365,6 +4238,13 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(modus-themes-lang-warning ((,class ,@(modus-themes--lang-check
                                             fg-lang-underline-warning 
fg-lang-warning
                                             yellow yellow-refine-fg 
yellow-nuanced-bg yellow-refine-bg yellow-faint))))
+;;;;; links
+    `(modus-themes-link-broken ((,class :inherit button 
,@(modus-themes--link-color red red-faint))))
+    `(modus-themes-link-symlink ((,class :inherit button 
,@(modus-themes--link-color cyan cyan-faint))))
+;;;;; tabs
+    `(modus-themes-tab-active ((,class ,@(modus-themes--tab bg-tab-active nil 
nil nil t t))))
+    `(modus-themes-tab-backdrop ((,class ,@(modus-themes--tab bg-active 
bg-active-accent nil nil nil nil t))))
+    `(modus-themes-tab-inactive ((,class ,@(modus-themes--tab bg-tab-inactive 
bg-tab-inactive-accent fg-dim nil t))))
 ;;;;; other custom faces
     `(modus-themes-bold ((,class ,@(modus-themes--bold-weight))))
     `(modus-themes-hl-line ((,class ,@(modus-themes--hl-line
@@ -4384,18 +4264,21 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(modus-themes-reset-soft ((,class :background ,bg-main :foreground 
,fg-main
                                        :weight normal :slant normal 
:strike-through nil
                                        :box nil :underline nil :overline nil 
:extend nil)))
-    `(modus-themes-search-success ((,class :inherit 
,@(modus-themes--success-deuteran
+    `(modus-themes-search-success ((,class :inherit ,@(modus-themes--deuteran
                                                        
'modus-themes-intense-blue
                                                        
'modus-themes-intense-green))))
-    `(modus-themes-search-success-lazy ((,class :inherit 
,@(modus-themes--success-deuteran
+    `(modus-themes-search-success-lazy ((,class :inherit 
,@(modus-themes--deuteran
                                                             
'modus-themes-special-mild
                                                             
'modus-themes-refine-cyan))))
-    `(modus-themes-search-success-modeline ((,class :foreground 
,@(modus-themes--success-deuteran
+    `(modus-themes-search-success-modeline ((,class :foreground 
,@(modus-themes--deuteran
                                                                    blue-active
                                                                    
green-active))))
     `(modus-themes-slant ((,class :inherit italic :slant 
,@(modus-themes--slant))))
-    `(modus-themes-variable-pitch ((,class ,@(modus-themes--variable-pitch))))
+    `(modus-themes-ui-variable-pitch ((,class 
,@(modus-themes--variable-pitch-ui))))
     `(modus-themes-fixed-pitch ((,class ,@(modus-themes--fixed-pitch))))
+    `(modus-themes-markup-verbatim ((,class :inherit modus-themes-fixed-pitch
+                                            ,@(modus-themes--markup 
fg-special-calm magenta-alt
+                                                                    bg-alt 
magenta-nuanced-bg))))
 ;;;; standard faces
 ;;;;; absolute essentials
     `(default ((,class :background ,bg-main :foreground ,fg-main)))
@@ -4413,7 +4296,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(error ((,class :inherit bold :foreground ,red)))
     `(escape-glyph ((,class :foreground ,fg-escape-char-construct)))
     `(file-name-shadow ((,class :inherit (shadow italic))))
-    `(header-line ((,class ,@(modus-themes--variable-pitch-ui)
+    `(header-line ((,class :inherit modus-themes-ui-variable-pitch
                            :background ,bg-header :foreground ,fg-header)))
     `(header-line-highlight ((,class :inherit modus-themes-active-blue)))
     `(help-argument-name ((,class :inherit modus-themes-slant :foreground 
,cyan)))
@@ -4434,7 +4317,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
                                               bg-region-accent-subtle))))
     `(secondary-selection ((,class :inherit modus-themes-special-cold)))
     `(shadow ((,class :foreground ,fg-alt)))
-    `(success ((,class :inherit bold :foreground 
,@(modus-themes--success-deuteran blue green))))
+    `(success ((,class :inherit (bold modus-themes-grue))))
     `(trailing-whitespace ((,class :background ,red-intense-bg)))
     `(warning ((,class :inherit bold :foreground ,yellow)))
 ;;;;; buttons, links, widgets
@@ -4452,9 +4335,6 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(widget-field ((,class :background ,bg-alt :foreground ,fg-dim)))
     `(widget-inactive ((,class :inherit shadow :background ,bg-dim)))
     `(widget-single-line-field ((,class :inherit widget-field)))
-;;;;; ag
-    `(ag-hit-face ((,class :foreground ,fg-special-cold)))
-    `(ag-match-face ((,class :inherit modus-themes-special-calm)))
 ;;;;; alert
     `(alert-high-face ((,class :inherit bold :foreground ,red-alt)))
     `(alert-low-face ((,class :foreground ,fg-special-mild)))
@@ -4530,62 +4410,45 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(anzu-replace-highlight ((,class :inherit modus-themes-refine-yellow 
:underline t)))
     `(anzu-replace-to ((,class :inherit (modus-themes-search-success bold))))
 ;;;;; apropos
-    `(apropos-button ((,class :inherit button
-                              ,@(modus-themes--link-color
-                                 magenta-alt-other magenta-alt-other-faint))))
-    `(apropos-function-button ((,class :inherit button
-                                       ,@(modus-themes--link-color
-                                          magenta magenta-faint))))
+    `(apropos-button ((,class :foreground ,magenta-alt-other)))
+    `(apropos-function-button ((,class :foreground ,magenta)))
     `(apropos-keybinding ((,class :inherit modus-themes-key-binding)))
-    `(apropos-misc-button ((,class :inherit button
-                                   ,@(modus-themes--link-color
-                                      green-alt-other green-alt-other-faint))))
+    `(apropos-misc-button ((,class :foreground ,green-alt-other)))
     `(apropos-property ((,class :inherit modus-themes-bold :foreground 
,magenta-alt)))
     `(apropos-symbol ((,class :inherit modus-themes-pseudo-header)))
-    `(apropos-user-option-button ((,class :inherit button
-                                          ,@(modus-themes--link-color
-                                             cyan cyan-faint))))
-    `(apropos-variable-button ((,class :inherit button
-                                       ,@(modus-themes--link-color
-                                          blue-alt blue-alt-faint))))
-;;;;; apt-sources-list
-    `(apt-sources-list-components ((,class :foreground ,cyan)))
-    `(apt-sources-list-options ((,class :foreground ,yellow)))
-    `(apt-sources-list-suite ((,class :foreground ,green)))
-    `(apt-sources-list-type ((,class :foreground ,magenta)))
-    `(apt-sources-list-uri ((,class :foreground ,blue)))
+    `(apropos-user-option-button ((,class :foreground ,cyan)))
+    `(apropos-variable-button ((,class :foreground ,blue-alt)))
 ;;;;; artbollocks-mode
     `(artbollocks-face ((,class :inherit modus-themes-lang-note)))
     `(artbollocks-lexical-illusions-face ((,class :background ,bg-alt 
:foreground ,red-alt :underline t)))
     `(artbollocks-passive-voice-face ((,class :inherit 
modus-themes-lang-warning)))
     `(artbollocks-weasel-words-face ((,class :inherit 
modus-themes-lang-error)))
 ;;;;; auctex and Tex
-    `(font-latex-bold-face ((,class :inherit bold :foreground 
,fg-special-calm)))
-    `(font-latex-doctex-documentation-face ((,class :inherit 
modus-themes-slant :foreground ,fg-special-cold)))
-    `(font-latex-doctex-preprocessor-face ((,class :inherit modus-themes-bold 
:foreground ,red-alt-other)))
+    `(font-latex-bold-face ((,class :inherit bold)))
+    `(font-latex-doctex-documentation-face ((,class :inherit 
font-lock-doc-face)))
+    `(font-latex-doctex-preprocessor-face ((,class :inherit 
font-lock-preprocessor-face)))
     `(font-latex-italic-face ((,class :inherit italic)))
-    `(font-latex-math-face ((,class :foreground ,cyan-alt-other)))
-    `(font-latex-script-char-face ((,class :foreground ,cyan-alt-other)))
-    `(font-latex-sectioning-0-face ((,class :inherit 
modus-themes-variable-pitch :foreground ,blue-nuanced-fg)))
-    `(font-latex-sectioning-1-face ((,class :inherit (bold 
modus-themes-variable-pitch) :foreground ,blue-nuanced-fg)))
-    `(font-latex-sectioning-2-face ((,class :inherit (bold 
modus-themes-variable-pitch) :foreground ,blue-nuanced-fg)))
-    `(font-latex-sectioning-3-face ((,class :inherit (bold 
modus-themes-variable-pitch) :foreground ,blue-nuanced-fg)))
-    `(font-latex-sectioning-4-face ((,class :inherit (bold 
modus-themes-variable-pitch) :foreground ,blue-nuanced-fg)))
-    `(font-latex-sectioning-5-face ((,class :inherit 
modus-themes-variable-pitch :foreground ,blue-nuanced-fg)))
-    `(font-latex-sedate-face ((,class :inherit modus-themes-bold :foreground 
,magenta-alt-other)))
-    `(font-latex-slide-title-face ((,class :inherit (bold 
modus-themes-variable-pitch) :foreground ,cyan-nuanced-fg
-                                           ,@(modus-themes--scale 
modus-themes-scale-4))))
+    `(font-latex-math-face ((,class :inherit font-lock-constant-face)))
+    `(font-latex-script-char-face ((,class :inherit font-lock-builtin-face)))
+    `(font-latex-sectioning-0-face ((,class :inherit modus-themes-heading-1)))
+    `(font-latex-sectioning-1-face ((,class :inherit modus-themes-heading-2)))
+    `(font-latex-sectioning-2-face ((,class :inherit modus-themes-heading-3)))
+    `(font-latex-sectioning-3-face ((,class :inherit modus-themes-heading-4)))
+    `(font-latex-sectioning-4-face ((,class :inherit modus-themes-heading-5)))
+    `(font-latex-sectioning-5-face ((,class :inherit modus-themes-heading-6)))
+    `(font-latex-sedate-face ((,class :inherit font-lock-keyword-face)))
+    `(font-latex-slide-title-face ((,class :inherit modus-themes-heading-1)))
     `(font-latex-string-face ((,class :inherit font-lock-string-face)))
     `(font-latex-subscript-face ((,class :height 0.95)))
     `(font-latex-superscript-face ((,class :height 0.95)))
     `(font-latex-verbatim-face ((,class :background ,bg-dim :foreground 
,fg-special-mild)))
     `(font-latex-warning-face ((,class :inherit font-lock-warning-face)))
     `(tex-match ((,class :foreground ,blue-alt-other)))
-    `(tex-verbatim ((,class :background ,bg-dim :foreground ,fg-special-mild)))
+    `(tex-verbatim ((,class :inherit modus-themes-markup-verbatim)))
     `(texinfo-heading ((,class :foreground ,magenta)))
     `(TeX-error-description-error ((,class :inherit error)))
-    `(TeX-error-description-help ((,class :foreground ,blue)))
-    `(TeX-error-description-tex-said ((,class :foreground ,blue)))
+    `(TeX-error-description-help ((,class :inherit success)))
+    `(TeX-error-description-tex-said ((,class :inherit success)))
     `(TeX-error-description-warning ((,class :inherit warning)))
 ;;;;; auto-dim-other-buffers
     `(auto-dim-other-buffers-face ((,class :background ,bg-alt)))
@@ -4653,10 +4516,6 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
 ;;;;; breakpoint (built-in gdb-mi.el)
     `(breakpoint-disabled ((,class :inherit shadow)))
     `(breakpoint-enabled ((,class :inherit bold :foreground ,red)))
-;;;;; buffer-expose
-    `(buffer-expose-ace-char-face ((,class :inherit bold :foreground 
,red-active)))
-    `(buffer-expose-mode-line-face ((,class :foreground ,cyan-active)))
-    `(buffer-expose-selected-face ((,class :inherit 
modus-themes-special-mild)))
 ;;;;; calendar and diary
     `(calendar-month-header ((,class :inherit modus-themes-pseudo-header)))
     `(calendar-today ((,class :inherit bold :underline t)))
@@ -4679,9 +4538,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(cfw:face-saturday ((,class :inherit bold :foreground ,cyan-alt-other)))
     `(cfw:face-select ((,class :inherit modus-themes-intense-blue)))
     `(cfw:face-sunday ((,class :inherit bold :foreground ,cyan-alt-other)))
-    `(cfw:face-title ((,class :inherit modus-themes-variable-pitch
-                              :foreground ,fg-special-cold
-                              ,@(modus-themes--scale 
modus-themes-scale-title))))
+    `(cfw:face-title ((,class :inherit modus-themes-heading-1 :background 
,bg-main :overline nil :foreground ,fg-special-cold)))
     `(cfw:face-today ((,class :background ,bg-inactive)))
     `(cfw:face-today-title ((,class :background ,bg-active)))
     `(cfw:face-toolbar ((,class :background ,bg-alt :foreground ,bg-alt)))
@@ -4696,9 +4553,9 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(centaur-tabs-modified-marker-selected ((,class :inherit 
centaur-tabs-selected)))
     `(centaur-tabs-modified-marker-unselected ((,class :inherit 
centaur-tabs-unselected)))
     `(centaur-tabs-default (( )))
-    `(centaur-tabs-selected ((,class ,@(modus-themes--tab bg-tab-active nil 
nil nil t t))))
+    `(centaur-tabs-selected ((,class :inherit modus-themes-tab-active)))
     `(centaur-tabs-selected-modified ((,class :inherit (italic 
centaur-tabs-selected))))
-    `(centaur-tabs-unselected ((,class ,@(modus-themes--tab bg-tab-inactive 
bg-tab-inactive-accent fg-dim nil t))))
+    `(centaur-tabs-unselected ((,class :inherit modus-themes-tab-inactive)))
     `(centaur-tabs-unselected-modified ((,class :inherit (italic 
centaur-tabs-unselected))))
 ;;;;; cfrs
     `(cfrs-border-color ((,class :background ,fg-window-divider-inner)))
@@ -4749,9 +4606,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
                                                        :background ,bg-alt 
:foreground ,fg-alt)))
     `(cider-test-error-face ((,class :inherit modus-themes-subtle-red)))
     `(cider-test-failure-face ((,class :inherit (modus-themes-intense-red 
bold))))
-    `(cider-test-success-face ((,class :inherit 
,@(modus-themes--success-deuteran
-                                                   'modus-themes-intense-blue
-                                                   
'modus-themes-intense-green))))
+    `(cider-test-success-face ((,class :inherit 
modus-themes-grue-background-intense)))
     `(cider-traced-face ((,class :box (:line-width -1 :color ,cyan :style nil) 
:background ,bg-dim)))
     `(cider-warning-highlight-face ((,class :foreground ,yellow :underline t)))
 ;;;;; circe (and lui)
@@ -4784,8 +4639,6 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(company-preview ((,class :background ,bg-dim :foreground ,fg-dim)))
     `(company-preview-common ((,class :foreground ,blue-alt)))
     `(company-preview-search ((,class :inherit modus-themes-special-calm)))
-    `(company-scrollbar-bg ((,class :background ,bg-active)))
-    `(company-scrollbar-fg ((,class :background ,fg-active)))
     `(company-template-field ((,class :inherit modus-themes-intense-magenta)))
     `(company-tooltip ((,class :background ,bg-alt :foreground ,fg-alt)))
     `(company-tooltip-annotation ((,class :inherit modus-themes-slant 
:foreground ,fg-special-cold)))
@@ -4794,6 +4647,8 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(company-tooltip-common-selection ((,class :foreground ,fg-main)))
     `(company-tooltip-deprecated ((,class :inherit company-tooltip 
:strike-through t)))
     `(company-tooltip-mouse ((,class :inherit modus-themes-intense-blue)))
+    `(company-tooltip-scrollbar-thumb ((,class :background ,fg-active)))
+    `(company-tooltip-scrollbar-track ((,class :background ,bg-active)))
     `(company-tooltip-search ((,class :inherit 
(modus-themes-search-success-lazy bold))))
     `(company-tooltip-search-selection ((,class :inherit 
(modus-themes-search-success bold) :underline t)))
     `(company-tooltip-selection ((,class :inherit (modus-themes-subtle-cyan 
bold))))
@@ -4858,8 +4713,6 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(counsel-css-selector-depth-face-4 ((,class :foreground ,yellow)))
     `(counsel-css-selector-depth-face-5 ((,class :foreground ,magenta)))
     `(counsel-css-selector-depth-face-6 ((,class :foreground ,red)))
-;;;;; counsel-org-capture-string
-    `(counsel-org-capture-string-template-body-face ((,class :foreground 
,fg-special-cold)))
 ;;;;; cov
     `(cov-coverage-not-run-face ((,class :foreground ,red-intense)))
     `(cov-coverage-run-face ((,class :foreground ,green-intense)))
@@ -4941,9 +4794,6 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(debbugs-gnu-stale-4 ((,class :foreground ,yellow-alt-other)))
     `(debbugs-gnu-stale-5 ((,class :foreground ,red-alt)))
     `(debbugs-gnu-tagged ((,class :foreground ,magenta-alt)))
-;;;;; define-word
-    `(define-word-face-1 ((,class :foreground ,yellow)))
-    `(define-word-face-2 ((,class :foreground ,fg-main)))
 ;;;;; deft
     `(deft-filter-string-error-face ((,class :inherit 
modus-themes-refine-red)))
     `(deft-filter-string-face ((,class :foreground ,green-intense)))
@@ -4965,9 +4815,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(diff-hl-dired-ignored ((,class :inherit dired-ignored)))
     `(diff-hl-dired-insert ((,class :inherit diff-hl-insert)))
     `(diff-hl-dired-unknown ((,class :inherit dired-ignored)))
-    `(diff-hl-insert ((,class :inherit ,@(modus-themes--diff-deuteran
-                                          'modus-themes-fringe-blue
-                                          'modus-themes-fringe-green))))
+    `(diff-hl-insert ((,class :inherit modus-themes-grue-background-active)))
     `(diff-hl-reverted-hunk-highlight ((,class :background ,fg-main 
:foreground ,bg-main)))
 ;;;;; diff-mode
     `(diff-added ((,class :inherit modus-themes-diff-added)))
@@ -4979,8 +4827,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(diff-header ((,class :foreground ,fg-main)))
     `(diff-hunk-header ((,class :inherit (bold modus-themes-diff-heading))))
     `(diff-index ((,class :inherit bold :foreground ,blue-alt)))
-    `(diff-indicator-added ((,class :inherit (diff-added bold)
-                                    :foreground ,@(modus-themes--diff-deuteran 
blue green))))
+    `(diff-indicator-added ((,class :inherit (modus-themes-grue diff-added 
bold))))
     `(diff-indicator-changed ((,class :inherit (diff-changed bold) :foreground 
,yellow)))
     `(diff-indicator-removed ((,class :inherit (diff-removed bold) :foreground 
,red)))
     `(diff-nonexistent ((,class :inherit (modus-themes-neutral bold))))
@@ -5008,13 +4855,11 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(dir-treeview-indent-face ((,class :inherit shadow)))
     `(dir-treeview-label-mouse-face ((,class :inherit highlight)))
     `(dir-treeview-start-dir-face ((,class :inherit 
modus-themes-pseudo-header)))
-    `(dir-treeview-symlink-face ((,class :inherit button
-                                         ,@(modus-themes--link-color
-                                            cyan cyan-faint))))
+    `(dir-treeview-symlink-face ((,class :inherit modus-themes-link-symlink)))
     `(dir-treeview-video-face ((,class :foreground ,magenta-alt-other)))
     `(dir-treeview-video-icon-face ((,class :inherit 
dir-treeview-default-icon-face :foreground ,magenta-alt-other)))
 ;;;;; dired
-    `(dired-broken-symlink ((,class :inherit button :foreground ,red)))
+    `(dired-broken-symlink ((,class :inherit modus-themes-link-broken)))
     `(dired-directory ((,class :foreground ,blue)))
     `(dired-flagged ((,class :inherit modus-themes-mark-del)))
     `(dired-header ((,class :inherit modus-themes-pseudo-header)))
@@ -5022,9 +4867,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(dired-mark ((,class :inherit modus-themes-mark-symbol)))
     `(dired-marked ((,class :inherit modus-themes-mark-sel)))
     `(dired-perm-write ((,class :foreground ,fg-special-warm)))
-    `(dired-symlink ((,class :inherit button
-                             ,@(modus-themes--link-color
-                                cyan-alt cyan-alt-faint))))
+    `(dired-symlink ((,class :inherit modus-themes-link-symlink)))
     `(dired-warning ((,class :inherit bold :foreground ,yellow)))
 ;;;;; dired-async
     `(dired-async-failures ((,class :inherit bold :foreground ,red-active)))
@@ -5048,11 +4891,6 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(dired-subtree-depth-4-face (()))
     `(dired-subtree-depth-5-face (()))
     `(dired-subtree-depth-6-face (()))
-;;;;; diredc
-    `(diredc-face-chmod-font-lock-dir ((,class :foreground ,blue-alt)))
-    `(diredc-face-chmod-font-lock-exec ((,class :foreground ,magenta)))
-    `(diredc-face-chmod-font-lock-read ((,class :foreground ,fg-main)))
-    `(diredc-face-chmod-font-lock-write ((,class :foreground ,cyan)))
 ;;;;; diredfl
     `(diredfl-autofile-name ((,class :inherit modus-themes-special-cold)))
     `(diredfl-compressed-file-name ((,class :foreground ,fg-special-warm)))
@@ -5108,13 +4946,6 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(diredp-symlink ((,class :inherit dired-symlink)))
     `(diredp-tagged-autofile-name ((,class :inherit 
modus-themes-refine-magenta)))
     `(diredp-write-priv ((,class :foreground ,cyan)))
-;;;;; disk-usage
-    `(disk-usage-children ((,class :foreground ,yellow)))
-    `(disk-usage-inaccessible ((,class :inherit bold :foreground ,red)))
-    `(disk-usage-percent ((,class :foreground ,green)))
-    `(disk-usage-size ((,class :foreground ,cyan)))
-    `(disk-usage-symlink ((,class :inherit button)))
-    `(disk-usage-symlink-directory ((,class :inherit bold :foreground 
,blue-alt)))
 ;;;;; display-fill-column-indicator-mode
     `(fill-column-indicator ((,class :foreground ,bg-active)))
 ;;;;; doom-modeline
@@ -5145,9 +4976,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(doom-modeline-host ((,class :inherit italic)))
     `(doom-modeline-info ((,class :foreground ,green-active)))
     `(doom-modeline-lsp-error ((,class :inherit bold :foreground ,red-active)))
-    `(doom-modeline-lsp-success ((,class :inherit bold :foreground 
,@(modus-themes--success-deuteran
-                                                                      
blue-active
-                                                                      
green-active))))
+    `(doom-modeline-lsp-success ((,class :inherit (bold 
modus-themes-grue-active))))
     `(doom-modeline-lsp-warning ((,class :inherit bold :foreground 
,yellow-active)))
     `(doom-modeline-panel ((,class :inherit modus-themes-active-blue)))
     `(doom-modeline-persp-buffer-not-in-persp ((,class :inherit italic 
:foreground ,yellow-active)))
@@ -5163,9 +4992,6 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(dynamic-ruler-positive-face ((,class :inherit 
modus-themes-intense-yellow)))
 ;;;;; easy-jekyll
     `(easy-jekyll-help-face ((,class :background ,bg-dim :foreground 
,cyan-alt-other)))
-;;;;; easy-kill
-    `(easy-kill-origin ((,class :inherit modus-themes-subtle-red)))
-    `(easy-kill-selection ((,class :inherit modus-themes-subtle-yellow)))
 ;;;;; ebdb
     `(ebdb-address-default ((,class :foreground ,fg-special-calm)))
     `(ebdb-defunct ((,class :inherit shadow)))
@@ -5181,7 +5007,6 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
 ;;;;; ediff
     `(ediff-current-diff-A ((,class :inherit modus-themes-diff-removed)))
     `(ediff-current-diff-Ancestor ((,class ,@(modus-themes--diff
-                                              bg-alt fg-special-cold
                                               bg-special-cold fg-special-cold
                                               blue-nuanced-bg blue))))
     `(ediff-current-diff-B ((,class :inherit modus-themes-diff-added)))
@@ -5238,12 +5063,12 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
 ;;;;; embark
     `(embark-keybinding ((,class :inherit modus-themes-key-binding)))
 ;;;;; emms
-    `(emms-browser-album-face ((,class :foreground ,magenta-alt-other 
,@(modus-themes--scale modus-themes-scale-2))))
-    `(emms-browser-artist-face ((,class :foreground ,cyan 
,@(modus-themes--scale modus-themes-scale-3))))
-    `(emms-browser-composer-face ((,class :foreground ,magenta-alt 
,@(modus-themes--scale modus-themes-scale-3))))
+    `(emms-browser-album-face ((,class :foreground ,magenta-alt-other)))
+    `(emms-browser-artist-face ((,class :foreground ,cyan)))
+    `(emms-browser-composer-face ((,class :foreground ,magenta-alt)))
     `(emms-browser-performer-face ((,class :inherit emms-browser-artist-face)))
     `(emms-browser-track-face ((,class :inherit emms-playlist-track-face)))
-    `(emms-browser-year/genre-face ((,class :foreground ,cyan-alt-other 
,@(modus-themes--scale modus-themes-scale-4))))
+    `(emms-browser-year/genre-face ((,class :foreground ,cyan-alt-other)))
     `(emms-playlist-track-face ((,class :foreground ,blue-alt)))
     `(emms-playlist-selected-face ((,class :inherit bold :foreground 
,blue-alt-other)))
     `(emms-metaplaylist-mode-current-face ((,class :inherit 
emms-playlist-selected-face)))
@@ -5275,28 +5100,28 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(equake-tab-active ((,class :background ,fg-alt :foreground ,bg-alt)))
     `(equake-tab-inactive ((,class :foreground ,fg-inactive)))
 ;;;;; erc
-    `(erc-action-face ((,class :inherit bold :foreground ,cyan)))
+    `(erc-action-face ((,class :foreground ,cyan-alt-other)))
     `(erc-bold-face ((,class :inherit bold)))
     `(erc-button ((,class :inherit button)))
     `(erc-command-indicator-face ((,class :inherit bold :foreground 
,cyan-alt)))
-    `(erc-current-nick-face ((,class :foreground ,magenta-alt-other)))
+    `(erc-current-nick-face ((,class :inherit bold :foreground ,red-alt)))
     `(erc-dangerous-host-face ((,class :inherit modus-themes-intense-red)))
-    `(erc-direct-msg-face ((,class :foreground ,magenta)))
+    `(erc-direct-msg-face ((,class :foreground ,fg-special-warm)))
     `(erc-error-face ((,class :inherit bold :foreground ,red)))
-    `(erc-fool-face ((,class :foreground ,fg-inactive)))
+    `(erc-fool-face ((,class :inherit shadow)))
     `(erc-header-line ((,class :background ,bg-header :foreground ,fg-header)))
-    `(erc-input-face ((,class :foreground ,fg-special-calm)))
+    `(erc-input-face ((,class :foreground ,magenta)))
     `(erc-inverse-face ((,class :inherit erc-default-face :inverse-video t)))
-    `(erc-keyword-face ((,class :inherit bold :foreground ,magenta-alt)))
+    `(erc-keyword-face ((,class :inherit bold :foreground ,magenta-alt-other)))
     `(erc-my-nick-face ((,class :inherit bold :foreground ,magenta)))
     `(erc-my-nick-prefix-face ((,class :inherit erc-my-nick-face)))
     `(erc-nick-default-face ((,class :inherit bold :foreground ,blue)))
-    `(erc-nick-msg-face ((,class :inherit bold :foreground ,green)))
+    `(erc-nick-msg-face ((,class :inherit warning)))
     `(erc-nick-prefix-face ((,class :inherit erc-nick-default-face)))
-    `(erc-notice-face ((,class :foreground ,fg-unfocused)))
-    `(erc-pal-face ((,class :inherit bold :foreground ,red-alt)))
+    `(erc-notice-face ((,class :inherit font-lock-comment-face)))
+    `(erc-pal-face ((,class :inherit bold :foreground ,magenta-alt)))
     `(erc-prompt-face ((,class :inherit modus-themes-prompt)))
-    `(erc-timestamp-face ((,class :foreground ,blue-nuanced-fg)))
+    `(erc-timestamp-face ((,class :foreground ,cyan)))
     `(erc-underline-face ((,class :underline t)))
     `(bg:erc-color-face0 ((,class :background "white")))
     `(bg:erc-color-face1 ((,class :background "black")))
@@ -5346,7 +5171,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(eshell-ls-product ((,class :inherit shadow)))
     `(eshell-ls-readonly ((,class :foreground ,yellow-faint)))
     `(eshell-ls-special ((,class :foreground ,magenta)))
-    `(eshell-ls-symlink ((,class :foreground ,cyan)))
+    `(eshell-ls-symlink ((,class :inherit modus-themes-link-symlink)))
     `(eshell-ls-unreadable ((,class :background ,bg-inactive :foreground 
,fg-inactive)))
     `(eshell-prompt ((,class :inherit modus-themes-prompt)))
 ;;;;; eshell-fringe-status
@@ -5452,10 +5277,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(flycheck-indicator-error ((,class :inherit modus-themes-bold :foreground 
,red-active)))
     `(flycheck-indicator-info ((,class :inherit modus-themes-bold :foreground 
,blue-active)))
     `(flycheck-indicator-running ((,class :inherit modus-themes-bold 
:foreground ,magenta-active)))
-    `(flycheck-indicator-success ((,class :inherit modus-themes-bold
-                                          :foreground 
,@(modus-themes--success-deuteran
-                                                         blue-active
-                                                         green-active))))
+    `(flycheck-indicator-success ((,class :inherit (modus-themes-bold 
modus-themes-grue-active))))
     `(flycheck-indicator-warning ((,class :inherit modus-themes-bold 
:foreground ,yellow-active)))
 ;;;;; flycheck-posframe
     `(flycheck-posframe-background-face ((,class :background ,bg-alt)))
@@ -5471,8 +5293,6 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
 ;;;;; flyspell
     `(flyspell-duplicate ((,class :inherit modus-themes-lang-warning)))
     `(flyspell-incorrect ((,class :inherit modus-themes-lang-error)))
-;;;;; flyspell-correct
-    `(flyspell-correct-highlight-face ((,class :inherit 
modus-themes-refine-green)))
 ;;;;; flx
     `(flx-highlight-face ((,class ,@(modus-themes--extra-completions
                                      'modus-themes-subtle-magenta
@@ -5591,66 +5411,33 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(git-commit-comment-branch-local ((,class :inherit modus-themes-slant 
:foreground ,blue-alt)))
     `(git-commit-comment-branch-remote ((,class :inherit modus-themes-slant 
:foreground ,magenta-alt)))
     `(git-commit-comment-detached ((,class :inherit modus-themes-slant 
:foreground ,cyan-alt)))
-    `(git-commit-comment-file ((,class :inherit modus-themes-slant
-                                       ,@(modus-themes--syntax-comment
-                                          fg-special-cold red-nuanced-fg))))
-    `(git-commit-comment-heading ((,class :inherit (bold modus-themes-slant)
-                                          ,@(modus-themes--syntax-comment
-                                             fg-dim fg-special-warm))))
+    `(git-commit-comment-file ((,class :inherit modus-themes-slant :foreground 
,cyan)))
+    `(git-commit-comment-heading ((,class :inherit (bold modus-themes-slant))))
     `(git-commit-keyword ((,class :foreground ,magenta)))
     `(git-commit-known-pseudo-header ((,class :foreground ,cyan-alt-other)))
-    `(git-commit-nonempty-second-line ((,class :inherit 
modus-themes-refine-yellow)))
-    `(git-commit-overlong-summary ((,class :inherit 
modus-themes-refine-yellow)))
+    `(git-commit-nonempty-second-line ((,class :inherit error)))
+    `(git-commit-overlong-summary ((,class :inherit warning)))
     `(git-commit-pseudo-header ((,class :foreground ,blue)))
-    `(git-commit-summary ((,class :inherit bold :foreground ,cyan)))
+    `(git-commit-summary ((,class :inherit bold :foreground ,blue)))
 ;;;;; git-gutter
-    `(git-gutter:added ((,class :inherit ,@(modus-themes--diff-deuteran
-                                            'modus-themes-fringe-blue
-                                            'modus-themes-fringe-green))))
+    `(git-gutter:added ((,class :inherit modus-themes-grue-background-active)))
     `(git-gutter:deleted ((,class :inherit modus-themes-fringe-red)))
     `(git-gutter:modified ((,class :inherit modus-themes-fringe-yellow)))
     `(git-gutter:separator ((,class :inherit modus-themes-fringe-cyan)))
     `(git-gutter:unchanged ((,class :inherit modus-themes-fringe-magenta)))
 ;;;;; git-gutter-fr
-    `(git-gutter-fr:added ((,class :inherit ,@(modus-themes--diff-deuteran
-                                               'modus-themes-fringe-blue
-                                               'modus-themes-fringe-green))))
+    `(git-gutter-fr:added ((,class :inherit 
modus-themes-grue-background-active)))
     `(git-gutter-fr:deleted ((,class :inherit modus-themes-fringe-red)))
     `(git-gutter-fr:modified ((,class :inherit modus-themes-fringe-yellow)))
-;;;;; git-{gutter,fringe}+
-    `(git-gutter+-added ((,class :inherit ,@(modus-themes--diff-deuteran
-                                             'modus-themes-fringe-blue
-                                             'modus-themes-fringe-green))))
-    `(git-gutter+-deleted ((,class :inherit modus-themes-fringe-red)))
-    `(git-gutter+-modified ((,class :inherit modus-themes-fringe-yellow)))
-    `(git-gutter+-separator ((,class :inherit modus-themes-fringe-cyan)))
-    `(git-gutter+-unchanged ((,class :inherit modus-themes-fringe-magenta)))
-    `(git-gutter-fr+-added ((,class :inherit modus-themes-fringe-green)))
-    `(git-gutter-fr+-deleted ((,class :inherit modus-themes-fringe-red)))
-    `(git-gutter-fr+-modified ((,class :inherit modus-themes-fringe-yellow)))
-;;;;; git-lens
-    `(git-lens-added ((,class :inherit bold :foreground 
,@(modus-themes--diff-deuteran blue green))))
-    `(git-lens-deleted ((,class :inherit bold :foreground ,red)))
-    `(git-lens-header ((,class :inherit bold :height 1.1 :foreground ,cyan)))
-    `(git-lens-modified ((,class :inherit bold :foreground ,yellow)))
-    `(git-lens-renamed ((,class :inherit bold :foreground ,magenta)))
 ;;;;; git-rebase
-    `(git-rebase-comment-hash ((,class :inherit modus-themes-slant
-                                       ,@(modus-themes--syntax-comment
-                                          fg-special-cold red-nuanced-fg))))
-    `(git-rebase-comment-heading  ((,class :inherit (bold modus-themes-slant)
-                                           ,@(modus-themes--syntax-comment
-                                              fg-dim fg-special-warm))))
+    `(git-rebase-comment-hash ((,class :inherit modus-themes-slant :foreground 
,cyan)))
+    `(git-rebase-comment-heading  ((,class :inherit (bold 
modus-themes-slant))))
     `(git-rebase-description ((,class :foreground ,fg-main)))
     `(git-rebase-hash ((,class :foreground ,cyan-alt-other)))
 ;;;;; git-timemachine
     `(git-timemachine-commit ((,class :inherit bold :foreground 
,yellow-active)))
     `(git-timemachine-minibuffer-author-face ((,class :foreground 
,fg-special-warm)))
     `(git-timemachine-minibuffer-detail-face ((,class :foreground ,red-alt)))
-;;;;; git-walktree
-    `(git-walktree-commit-face ((,class :foreground ,yellow)))
-    `(git-walktree-symlink-face ((,class :inherit button)))
-    `(git-walktree-tree-face ((,class :foreground ,magenta)))
 ;;;;; gnus
     `(gnus-button ((,class :inherit button)))
     `(gnus-cite-1 ((,class :inherit message-cited-text-1)))
@@ -5774,9 +5561,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(helm-ff-executable ((,class :foreground ,magenta-alt)))
     `(helm-ff-file ((,class :foreground ,fg-main)))
     `(helm-ff-file-extension ((,class :foreground ,fg-special-warm)))
-    `(helm-ff-invalid-symlink ((,class :inherit button
-                                       ,@(modus-themes--link-color
-                                          red red-faint))))
+    `(helm-ff-invalid-symlink ((,class :inherit modus-themes-link-broken)))
     `(helm-ff-pipe ((,class ,@(modus-themes--extra-completions
                                'modus-themes-refine-magenta
                                'modus-themes-subtle-magenta
@@ -5793,9 +5578,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
                                'modus-themes-refine-red
                                'modus-themes-nuanced-yellow
                                red-alt))))
-    `(helm-ff-symlink ((,class :inherit button
-                               ,@(modus-themes--link-color
-                                  cyan cyan-faint))))
+    `(helm-ff-symlink ((,class :inherit modus-themes-link-symlink)))
     `(helm-ff-truename ((,class :foreground ,blue-alt-other)))
     `(helm-fd-finish ((,class :foreground ,green-active)))
     `(helm-grep-cmd-line ((,class :foreground ,yellow-alt-other)))
@@ -5832,9 +5615,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
                                   'modus-themes-nuanced-cyan
                                   cyan-alt-other))))
     `(helm-minibuffer-prompt ((,class :inherit modus-themes-prompt)))
-    `(helm-moccur-buffer ((,class :inherit button
-                                  ,@(modus-themes--link-color
-                                     cyan-alt-other cyan-alt-other-faint))))
+    `(helm-moccur-buffer ((,class :inherit button :foreground 
,cyan-alt-other)))
     `(helm-mode-prefix ((,class ,@(modus-themes--extra-completions
                                    'modus-themes-subtle-magenta
                                    'modus-themes-intense-magenta
@@ -5858,8 +5639,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(helm-separator ((,class :foreground ,fg-special-mild)))
     `(helm-time-zone-current ((,class :foreground ,green)))
     `(helm-time-zone-home ((,class :foreground ,magenta)))
-    `(helm-source-header ((,class :inherit bold :foreground ,red-alt
-                                  ,@(modus-themes--scale 
modus-themes-scale-4))))
+    `(helm-source-header ((,class :inherit modus-themes-pseudo-header 
:foreground ,fg-special-cold)))
     `(helm-top-columns ((,class :inherit helm-header)))
     `(helm-ucs-char ((,class :foreground ,yellow-alt-other)))
     `(helm-visible-mark ((,class :inherit modus-themes-subtle-cyan)))
@@ -5903,33 +5683,11 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(highlight-changes-delete ((,class :background ,red-nuanced-bg
                                         :foreground ,red :underline t)))
     `(hl-line ((,class :inherit modus-themes-hl-line)))
-;;;;; highlight-blocks
-    `(highlight-blocks-depth-1-face ((,class :background ,bg-dim :foreground 
,fg-main)))
-    `(highlight-blocks-depth-2-face ((,class :background ,bg-alt :foreground 
,fg-main)))
-    `(highlight-blocks-depth-3-face ((,class :background ,bg-special-cold 
:foreground ,fg-main)))
-    `(highlight-blocks-depth-4-face ((,class :background ,bg-special-calm 
:foreground ,fg-main)))
-    `(highlight-blocks-depth-5-face ((,class :background ,bg-special-warm 
:foreground ,fg-main)))
-    `(highlight-blocks-depth-6-face ((,class :background ,bg-special-mild 
:foreground ,fg-main)))
-    `(highlight-blocks-depth-7-face ((,class :background ,bg-inactive 
:foreground ,fg-main)))
-    `(highlight-blocks-depth-8-face ((,class :background ,bg-active 
:foreground ,fg-main)))
-    `(highlight-blocks-depth-9-face ((,class :background ,cyan-subtle-bg 
:foreground ,fg-main)))
-;;;;; highlight-defined
-    `(highlight-defined-builtin-function-name-face ((,class :foreground 
,magenta)))
-    `(highlight-defined-face-name-face ((,class :foreground ,fg-main)))
-    `(highlight-defined-function-name-face ((,class :foreground ,magenta)))
-    `(highlight-defined-macro-name-face ((,class :foreground ,magenta-alt)))
-    `(highlight-defined-special-form-name-face ((,class :foreground 
,magenta-alt-other)))
-    `(highlight-defined-variable-name-face ((,class :foreground ,cyan)))
-;;;;; highlight-escape-sequences (`hes-mode')
-    `(hes-escape-backslash-face ((,class :inherit 
font-lock-regexp-grouping-construct)))
-    `(hes-escape-sequence-face ((,class :inherit 
font-lock-regexp-grouping-backslash)))
 ;;;;; highlight-indentation
     `(highlight-indentation-face ((,class :inherit modus-themes-hl-line)))
     `(highlight-indentation-current-column-face ((,class :background 
,bg-active)))
 ;;;;; highlight-numbers
     `(highlight-numbers-number ((,class :foreground ,blue-alt-other)))
-;;;;; highlight-symbol
-    `(highlight-symbol-face ((,class :inherit modus-themes-special-mild)))
 ;;;;; highlight-thing
     `(highlight-thing ((,class :background ,bg-alt :foreground ,cyan)))
 ;;;;; hl-defined
@@ -5946,16 +5704,6 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(hydra-face-pink ((,class :inherit bold :foreground ,magenta-alt-faint)))
     `(hydra-face-red ((,class :inherit bold :foreground ,red-faint)))
     `(hydra-face-teal ((,class :inherit bold :foreground ,cyan-alt-other)))
-;;;;; hyperlist
-    `(hyperlist-condition ((,class :foreground ,green)))
-    `(hyperlist-hashtag ((,class :foreground ,yellow)))
-    `(hyperlist-operator ((,class :foreground ,blue-alt)))
-    `(hyperlist-paren ((,class :foreground ,cyan-alt-other)))
-    `(hyperlist-quote ((,class :foreground ,cyan-alt)))
-    `(hyperlist-ref ((,class :foreground ,magenta-alt-other)))
-    `(hyperlist-stars ((,class :inherit shadow)))
-    `(hyperlist-tag ((,class :foreground ,red)))
-    `(hyperlist-toplevel ((,class :inherit bold :foreground ,fg-main)))
 ;;;;; icomplete
     `(icomplete-first-match ((,class :inherit bold
                                      ,@(modus-themes--standard-completions
@@ -5988,9 +5736,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(iflipb-other-buffer-face ((,class :inherit shadow)))
 ;;;;; image-dired
     `(image-dired-thumb-flagged ((,class :background ,red-intense-bg)))
-    `(image-dired-thumb-mark ((,class :background 
,@(modus-themes--success-deuteran
-                                                     cyan-intense-bg
-                                                     green-intense-bg))))
+    `(image-dired-thumb-mark ((,class :inherit 
modus-themes-grue-background-intense)))
 ;;;;; imenu-list
     `(imenu-list-entry-face-0 ((,class :foreground ,cyan)))
     `(imenu-list-entry-face-1 ((,class :foreground ,blue)))
@@ -6009,9 +5755,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(indium-repl-prompt-face ((,class :inherit modus-themes-prompt)))
     `(indium-repl-stdout-face ((,class :foreground ,fg-main)))
 ;;;;; info
-    `(Info-quoted ((,class :inherit modus-themes-fixed-pitch ; the 
capitalization is canonical
-                           ,@(modus-themes--markup fg-special-calm magenta-alt
-                                                   bg-alt 
magenta-nuanced-bg))))
+    `(Info-quoted ((,class :inherit modus-themes-markup-verbatim))) ; the 
capitalization is canonical
     `(info-header-node ((,class :inherit (shadow bold))))
     `(info-header-xref ((,class :foreground ,blue-active)))
     `(info-index-match ((,class :inherit match)))
@@ -6049,8 +5793,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(ioccur-num-line-face ((,class :foreground ,fg-special-warm)))
     `(ioccur-overlay-face ((,class :inherit modus-themes-refine-blue :extend 
t)))
     `(ioccur-regexp-face ((,class :inherit (modus-themes-intense-magenta 
bold))))
-    `(ioccur-title-face ((,class :inherit bold :foreground ,red-alt
-                                 ,@(modus-themes--scale 
modus-themes-scale-4))))
+    `(ioccur-title-face ((,class :inherit modus-themes-pseudo-header 
:foreground ,fg-special-cold)))
 ;;;;; isearch, occur, and the like
     `(isearch ((,class :inherit (modus-themes-search-success bold))))
     `(isearch-fail ((,class :inherit modus-themes-refine-red)))
@@ -6059,14 +5802,6 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(lazy-highlight ((,class :inherit modus-themes-search-success-lazy)))
     `(match ((,class :inherit modus-themes-special-calm)))
     `(query-replace ((,class :inherit (modus-themes-intense-yellow bold))))
-;;;;; isl (isearch-light)
-    `(isl-line ((,class :inherit ,@(modus-themes--success-deuteran
-                                    'modus-themes-subtle-blue
-                                    'modus-themes-subtle-green))))
-    `(isl-match ((,class :inherit modus-themes-search-success-lazy)))
-    `(isl-number ((,class :inherit (modus-themes-bold 
modus-themes-search-success-modeline))))
-    `(isl-on ((,class :inherit (bold modus-themes-search-success))))
-    `(isl-string ((,class :inherit modus-themes-bold :foreground 
,cyan-active)))
 ;;;;; ivy
     `(ivy-action ((,class :inherit bold :foreground ,red-alt)))
     `(ivy-completions-annotations ((,class :inherit completions-annotations)))
@@ -6268,11 +6003,17 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(magit-blame-margin ((,class :inherit (magit-blame-highlight 
modus-themes-reset-hard))))
     `(magit-blame-name ((,class :foreground ,magenta-alt-other)))
     `(magit-blame-summary ((,class :foreground ,cyan-alt-other)))
-    `(magit-branch-current ((,class :foreground ,blue-alt-other :box t)))
+    ;; ;; NOTE 2021-11-23: we do not set the `magit-branch-current'
+    ;; ;; because its definition checks if the :box attribute can be set
+    ;; ;; and if not, it uses :inverse-video.  Useful for terminal
+    ;; ;; emulators.
+    ;;
+    ;; `(magit-branch-current ((,class :foreground ,blue-alt-other :box t)))
     `(magit-branch-local ((,class :foreground ,blue-alt)))
     `(magit-branch-remote ((,class :foreground ,magenta-alt)))
     `(magit-branch-remote-head ((,class :foreground ,magenta-alt-other :box 
t)))
     `(magit-branch-upstream ((,class :inherit italic)))
+    `(magit-branch-warning ((,class :inherit warning)))
     `(magit-cherry-equivalent ((,class :background ,bg-main :foreground 
,magenta-intense)))
     `(magit-cherry-unmatched ((,class :background ,bg-main :foreground 
,cyan-intense)))
     ;; NOTE: here we break from the pattern of inheriting from the
@@ -6280,19 +6021,16 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     ;; not the highlighted ones.  This is because Magit's interaction
     ;; model relies on highlighting the current diff hunk.
     `(magit-diff-added ((,class ,@(modus-themes--diff
-                                   bg-main blue-alt-other
                                    bg-diff-added fg-diff-added
                                    green-nuanced-bg fg-diff-added
                                    bg-diff-added-deuteran 
fg-diff-added-deuteran))))
     `(magit-diff-added-highlight ((,class :inherit 
modus-themes-diff-focus-added)))
     `(magit-diff-base ((,class ,@(modus-themes--diff
-                                  bg-main yellow
                                   bg-diff-changed fg-diff-changed
                                   yellow-nuanced-bg fg-diff-changed))))
     `(magit-diff-base-highlight ((,class :inherit 
modus-themes-diff-focus-changed)))
     `(magit-diff-context ((,class ,@(unless (eq modus-themes-diffs 'bg-only) 
(list :foreground fg-unfocused)))))
     `(magit-diff-context-highlight ((,class ,@(modus-themes--diff
-                                               bg-dim fg-dim
                                                bg-inactive fg-inactive
                                                bg-dim fg-alt
                                                bg-dim fg-alt))))
@@ -6303,25 +6041,25 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     ;; modus-themes-diff-* faces.
     `(magit-diff-hunk-heading ((,class :inherit bold
                                        ,@(modus-themes--diff
-                                          bg-alt fg-alt
                                           bg-active fg-inactive
                                           bg-inactive fg-inactive
                                           bg-inactive fg-inactive
                                           t))))
+    ;; NOTE: we do not follow the pattern of inheriting from
+    ;; modus-themes-grue-* faces, as this is a special case.
     `(magit-diff-hunk-heading-highlight
       ((,class :inherit bold
-               :background ,@(modus-themes--diff-deuteran bg-active 
bg-diff-heading)
-               :foreground ,@(modus-themes--diff-deuteran fg-main 
fg-diff-heading))))
+               :background ,@(modus-themes--deuteran bg-active bg-diff-heading)
+               :foreground ,@(modus-themes--deuteran fg-main 
fg-diff-heading))))
     `(magit-diff-hunk-heading-selection ((,class :inherit 
modus-themes-refine-blue)))
     `(magit-diff-hunk-region ((,class :inherit bold)))
     `(magit-diff-lines-boundary ((,class :background ,fg-main)))
     `(magit-diff-lines-heading ((,class :inherit modus-themes-refine-magenta)))
     `(magit-diff-removed ((,class ,@(modus-themes--diff
-                                     bg-main red
                                      bg-diff-removed fg-diff-removed
                                      red-nuanced-bg fg-diff-removed))))
     `(magit-diff-removed-highlight ((,class :inherit 
modus-themes-diff-focus-removed)))
-    `(magit-diffstat-added ((,class :foreground ,@(modus-themes--diff-deuteran 
blue green))))
+    `(magit-diffstat-added ((,class :inherit modus-themes-grue)))
     `(magit-diffstat-removed ((,class :foreground ,red)))
     `(magit-dimmed ((,class :foreground ,fg-unfocused)))
     `(magit-filename ((,class :foreground ,fg-special-cold)))
@@ -6356,9 +6094,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(magit-section-heading ((,class :inherit bold :foreground ,cyan)))
     `(magit-section-heading-selection ((,class :inherit 
(modus-themes-refine-cyan bold))))
     `(magit-section-highlight ((,class :background ,bg-alt)))
-    `(magit-sequence-done ((,class :foreground 
,@(modus-themes--success-deuteran
-                                                  blue
-                                                  green))))
+    `(magit-sequence-done ((,class :inherit modus-themes-grue)))
     `(magit-sequence-drop ((,class :foreground ,red-alt)))
     `(magit-sequence-exec ((,class :foreground ,magenta-alt)))
     `(magit-sequence-head ((,class :foreground ,cyan-alt)))
@@ -6370,9 +6106,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(magit-signature-error ((,class :foreground ,red-alt)))
     `(magit-signature-expired ((,class :foreground ,yellow)))
     `(magit-signature-expired-key ((,class :foreground ,yellow)))
-    `(magit-signature-good ((,class :foreground 
,@(modus-themes--success-deuteran
-                                                   blue
-                                                   green))))
+    `(magit-signature-good ((,class :inherit modus-themes-grue)))
     `(magit-signature-revoked ((,class :foreground ,magenta)))
     `(magit-signature-untrusted ((,class :foreground ,cyan)))
     `(magit-tag ((,class :foreground ,yellow-alt-other)))
@@ -6449,15 +6183,13 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
                                                 :foreground ,fg-special-mild)))
     `(markdown-html-tag-name-face ((,class :inherit modus-themes-fixed-pitch
                                            :foreground ,magenta-alt)))
-    `(markdown-inline-code-face ((,class :inherit modus-themes-fixed-pitch
-                                         ,@(modus-themes--markup 
fg-special-calm magenta-alt
-                                                                 bg-alt 
magenta-nuanced-bg))))
+    `(markdown-inline-code-face ((,class :inherit 
modus-themes-markup-verbatim)))
     `(markdown-italic-face ((,class :inherit italic)))
     `(markdown-language-info-face ((,class :inherit modus-themes-fixed-pitch
                                            :foreground ,fg-special-cold)))
     `(markdown-language-keyword-face ((,class :inherit modus-themes-fixed-pitch
-                                              ,@(modus-themes--markup fg-alt 
red-alt
-                                                                      bg-alt 
red-nuanced-bg))))
+                                              :background ,bg-alt
+                                              :foreground ,fg-alt)))
     `(markdown-line-break-face ((,class :inherit modus-themes-refine-cyan 
:underline t)))
     `(markdown-link-face ((,class :inherit button)))
     `(markdown-link-title-face ((,class :inherit modus-themes-slant 
:foreground ,fg-special-cold)))
@@ -6479,18 +6211,16 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(markup-bold-face ((,class :inherit bold :foreground ,red-nuanced-fg)))
     `(markup-code-face ((,class :foreground ,magenta)))
     `(markup-comment-face ((,class :inherit font-lock-comment-face)))
-    `(markup-complex-replacement-face ((,class :background ,magenta-nuanced-bg
-                                               :foreground ,magenta-alt-other
-                                               :underline ,magenta-alt-other)))
+    `(markup-complex-replacement-face ((,class :background ,magenta-nuanced-bg 
:foreground ,magenta-alt-other)))
     `(markup-emphasis-face ((,class :inherit markup-italic-face)))
     `(markup-error-face ((,class :inherit error)))
     `(markup-gen-face ((,class :foreground ,magenta-alt)))
-    `(markup-internal-reference-face ((,class :foreground ,fg-alt :underline 
,bg-region)))
+    `(markup-internal-reference-face ((,class :inherit modus-themes-slant 
:foreground ,fg-alt)))
     `(markup-italic-face ((,class :inherit italic)))
     `(markup-list-face ((,class :inherit modus-themes-special-cold)))
-    `(markup-meta-face ((,class :inherit shadow)))
+    `(markup-meta-face ((,class :inherit (modus-themes-fixed-pitch shadow))))
     `(markup-meta-hide-face ((,class :foreground "gray50")))
-    `(markup-reference-face ((,class :foreground ,blue-alt :underline 
,bg-region)))
+    `(markup-reference-face ((,class :inherit modus-themes-slant :foreground 
,blue-alt)))
     `(markup-replacement-face ((,class :inherit modus-themes-fixed-pitch 
:foreground ,red-alt)))
     `(markup-secondary-text-face ((,class :height 0.9 :foreground 
,cyan-alt-other)))
     `(markup-small-face ((,class :inherit markup-gen-face :height 0.9)))
@@ -6500,24 +6230,13 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(markup-table-cell-face ((,class :inherit modus-themes-subtle-neutral)))
     `(markup-table-face ((,class :inherit modus-themes-subtle-neutral)))
     `(markup-table-row-face ((,class :inherit modus-themes-special-cold)))
-    `(markup-title-0-face ((,class :inherit (bold modus-themes-variable-pitch)
-                                   :foreground ,blue-nuanced-fg
-                                   ,@(modus-themes--scale 
modus-themes-scale-title))))
-    `(markup-title-1-face ((,class :inherit (bold modus-themes-variable-pitch)
-                                   :foreground ,blue-nuanced-fg
-                                   ,@(modus-themes--scale 
modus-themes-scale-1))))
-    `(markup-title-2-face ((,class :inherit (bold modus-themes-variable-pitch)
-                                   :foreground ,blue-nuanced-fg
-                                   ,@(modus-themes--scale 
modus-themes-scale-2))))
-    `(markup-title-3-face ((,class :inherit (bold modus-themes-variable-pitch)
-                                   :foreground ,blue-nuanced-fg
-                                   ,@(modus-themes--scale 
modus-themes-scale-3))))
-    `(markup-title-4-face ((,class :inherit (bold modus-themes-variable-pitch)
-                                   :foreground ,blue-nuanced-fg
-                                   ,@(modus-themes--scale 
modus-themes-scale-4))))
-    `(markup-title-5-face ((,class :inherit (bold modus-themes-variable-pitch)
-                                   :foreground ,blue-nuanced-fg)))
-    `(markup-verbatim-face ((,class :background ,bg-alt)))
+    `(markup-title-0-face ((,class :inherit modus-themes-heading-1)))
+    `(markup-title-1-face ((,class :inherit modus-themes-heading-2)))
+    `(markup-title-2-face ((,class :inherit modus-themes-heading-3)))
+    `(markup-title-3-face ((,class :inherit modus-themes-heading-4)))
+    `(markup-title-4-face ((,class :inherit modus-themes-heading-5)))
+    `(markup-title-5-face ((,class :inherit modus-themes-heading-6)))
+    `(markup-verbatim-face ((,class :inherit modus-themes-fixed-pitch 
:background ,bg-alt)))
 ;;;;; mentor
     `(mentor-download-message ((,class :foreground ,fg-special-warm)))
     `(mentor-download-name ((,class :foreground ,fg-special-cold)))
@@ -6542,8 +6261,6 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(message-header-xheader ((,class :foreground ,blue-alt)))
     `(message-mml ((,class :foreground ,cyan-alt-other)))
     `(message-separator ((,class :inherit modus-themes-intense-neutral)))
-;;;;; minibuffer-line
-    `(minibuffer-line ((,class :foreground ,fg-main)))
 ;;;;; minimap
     `(minimap-active-region-background ((,class :background ,bg-active)))
     `(minimap-current-line-face ((,class :background ,cyan-intense-bg 
:foreground ,fg-main)))
@@ -6557,17 +6274,18 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(mmm-output-submode-face ((,class :background ,red-nuanced-bg)))
     `(mmm-special-submode-face ((,class :background ,green-nuanced-bg)))
 ;;;;; mode-line
-    `(mode-line ((,class ,@(modus-themes--variable-pitch-ui)
+    `(mode-line ((,class :inherit modus-themes-ui-variable-pitch
                          ,@(modus-themes--mode-line-attrs
                             fg-active bg-active
                             fg-dim bg-active
                             fg-main bg-active-accent
                             fg-alt bg-active
                             'alt-style bg-main))))
+    `(mode-line-active ((,class :inherit mode-line)))
     `(mode-line-buffer-id ((,class :inherit bold)))
     `(mode-line-emphasis ((,class :inherit bold :foreground ,blue-active)))
     `(mode-line-highlight ((,class :inherit modus-themes-active-blue :box 
(:line-width -1 :style pressed-button))))
-    `(mode-line-inactive ((,class ,@(modus-themes--variable-pitch-ui)
+    `(mode-line-inactive ((,class :inherit modus-themes-ui-variable-pitch
                                   ,@(modus-themes--mode-line-attrs
                                      fg-inactive bg-inactive
                                      fg-alt bg-dim
@@ -6578,9 +6296,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(mood-line-status-error ((,class :inherit bold :foreground ,red-active)))
     `(mood-line-status-info ((,class :foreground ,cyan-active)))
     `(mood-line-status-neutral ((,class :foreground ,blue-active)))
-    `(mood-line-status-success ((,class :foreground 
,@(modus-themes--success-deuteran
-                                                       blue-active
-                                                       green-active))))
+    `(mood-line-status-success ((,class :inherit modus-themes-grue-active)))
     `(mood-line-status-warning ((,class :inherit bold :foreground 
,yellow-active)))
     `(mood-line-unimportant ((,class :foreground ,fg-inactive)))
 ;;;;; mpdel
@@ -6624,18 +6340,6 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(mu4e-url-number-face ((,class :inherit shadow)))
     `(mu4e-view-body-face ((,class :foreground ,fg-main)))
     `(mu4e-warning-face ((,class :inherit warning)))
-;;;;; mu4e-conversation
-    `(mu4e-conversation-header ((,class :inherit modus-themes-special-cold)))
-    `(mu4e-conversation-sender-1 ((,class :foreground ,fg-special-warm)))
-    `(mu4e-conversation-sender-2 ((,class :foreground ,fg-special-cold)))
-    `(mu4e-conversation-sender-3 ((,class :foreground ,fg-special-mild)))
-    `(mu4e-conversation-sender-4 ((,class :inherit shadow)))
-    `(mu4e-conversation-sender-5 ((,class :foreground ,yellow-refine-fg)))
-    `(mu4e-conversation-sender-6 ((,class :foreground ,cyan-refine-fg)))
-    `(mu4e-conversation-sender-7 ((,class :foreground ,green-refine-fg)))
-    `(mu4e-conversation-sender-8 ((,class :foreground ,blue-refine-fg)))
-    `(mu4e-conversation-sender-me ((,class :foreground ,fg-main)))
-    `(mu4e-conversation-unread ((,class :inherit bold)))
 ;;;;; multiple-cursors
     `(mc/cursor-bar-face ((,class :height 1 :background ,fg-main)))
     `(mc/cursor-face ((,class :inverse-video t)))
@@ -6659,7 +6363,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(neo-file-link-face ((,class :foreground ,fg-main)))
     `(neo-header-face ((,class :inherit bold :foreground ,fg-main)))
     `(neo-root-dir-face ((,class :inherit bold :foreground ,cyan-alt)))
-    `(neo-vc-added-face ((,class :foreground ,@(modus-themes--diff-deuteran 
blue green))))
+    `(neo-vc-added-face ((,class :inherit modus-themes-grue)))
     `(neo-vc-conflict-face ((,class :inherit error)))
     `(neo-vc-default-face ((,class :foreground ,fg-main)))
     `(neo-vc-edited-face ((,class :foreground ,yellow)))
@@ -6671,8 +6375,6 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(neo-vc-unlocked-changes-face ((,class :inherit 
modus-themes-refine-blue)))
     `(neo-vc-up-to-date-face ((,class :inherit shadow)))
     `(neo-vc-user-face ((,class :foreground ,magenta)))
-;;;;; no-emoji
-    `(no-emoji ((,class :foreground ,cyan)))
 ;;;;; notmuch
     `(notmuch-crypto-decryption ((,class :inherit (shadow bold))))
     `(notmuch-crypto-part-header ((,class :foreground ,magenta-alt-other)))
@@ -6731,10 +6433,6 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(nxml-prolog-keyword ((,class :inherit font-lock-keyword-face)))
     `(nxml-ref ((,class :inherit modus-themes-bold :foreground 
,fg-special-mild)))
     `(rng-error ((,class :inherit error)))
-;;;;; objed
-    `(objed-hl ((,class :background ,(if modus-themes-hl-line 
bg-hl-alt-intense bg-hl-alt))))
-    `(objed-mark ((,class :background ,bg-active)))
-    `(objed-mode-line ((,class :foreground ,cyan-active)))
 ;;;;; orderless
     `(orderless-match-face-0 ((,class :inherit bold
                                       ,@(modus-themes--standard-completions
@@ -6769,9 +6467,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
                                                                           
bg-inactive t t))))
     `(org-agenda-diary ((,class :inherit org-agenda-calendar-sexp)))
     `(org-agenda-dimmed-todo-face ((,class :inherit shadow)))
-    `(org-agenda-done ((,class :foreground ,@(modus-themes--success-deuteran
-                                              blue-nuanced-fg
-                                              green-nuanced-fg))))
+    `(org-agenda-done ((,class :inherit modus-themes-grue-nuanced)))
     `(org-agenda-filter-category ((,class :inherit bold :foreground 
,cyan-active)))
     `(org-agenda-filter-effort ((,class :inherit bold :foreground 
,cyan-active)))
     `(org-agenda-filter-regexp ((,class :inherit bold :foreground 
,cyan-active)))
@@ -6797,20 +6493,19 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
                         ,@(modus-themes--markup fg-special-mild green-alt-other
                                                 bg-alt green-nuanced-bg)
                         :extend t)))
-    `(org-column ((,class :background ,bg-alt)))
-    `(org-column-title ((,class :inherit bold :underline t :background 
,bg-alt)))
+    `(org-column ((,class :inherit (modus-themes-fixed-pitch default)
+                          :background ,bg-alt)))
+    `(org-column-title ((,class :inherit (bold modus-themes-fixed-pitch 
default)
+                                :underline t :background ,bg-alt)))
     `(org-date ((,class :inherit ,(if modus-themes-mixed-fonts
-                                      '(button fixed-pitch)
-                                    'button)
-                        ,@(modus-themes--link-color
-                           cyan cyan-faint))))
-    `(org-date-selected ((,class :inherit bold :foreground ,blue-alt 
:inverse-video t)))
+                                      '(fixed-pitch modus-themes-link-symlink)
+                                    'modus-themes-link-symlink))))
+    `(org-date-selected ((,class :foreground ,blue-alt :inverse-video t)))
     `(org-dispatcher-highlight ((,class :inherit (bold 
modus-themes-mark-alt))))
     `(org-document-info ((,class :foreground ,fg-special-cold)))
     `(org-document-info-keyword ((,class :inherit (shadow 
modus-themes-fixed-pitch))))
-    `(org-document-title ((,class :inherit (bold modus-themes-variable-pitch) 
:foreground ,fg-special-cold
-                                  ,@(modus-themes--scale 
modus-themes-scale-title))))
-    `(org-done ((,class :foreground ,@(modus-themes--success-deuteran blue 
green))))
+    `(org-document-title ((,class :inherit modus-themes-heading-1 :background 
,bg-main :overline nil :foreground ,fg-special-cold)))
+    `(org-done ((,class :inherit modus-themes-grue)))
     `(org-drawer ((,class :inherit (shadow modus-themes-fixed-pitch))))
     `(org-ellipsis (())) ; inherits from the heading's color
     `(org-footnote ((,class :inherit button
@@ -6853,10 +6548,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
                                               green-graph-0-bg
                                               green-graph-1-bg
                                               blue-graph-0-bg))))
-    `(org-headline-done ((,class :inherit modus-themes-variable-pitch
-                                 :foreground ,@(modus-themes--success-deuteran
-                                                blue-nuanced-fg
-                                                green-nuanced-fg))))
+    `(org-headline-done ((,class :inherit (modus-themes-variable-pitch 
modus-themes-grue-nuanced))))
     `(org-headline-todo ((,class :inherit modus-themes-variable-pitch 
:foreground ,red-nuanced-fg)))
     `(org-hide ((,class :foreground ,bg-main)))
     `(org-indent ((,class :inherit (fixed-pitch org-hide))))
@@ -6884,10 +6576,10 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(org-scheduled ((,class ,@(modus-themes--agenda-scheduled yellow-faint 
fg-special-warm magenta-alt))))
     `(org-scheduled-previously ((,class ,@(modus-themes--agenda-scheduled 
yellow fg-special-warm yellow-alt-other))))
     `(org-scheduled-today ((,class ,@(modus-themes--agenda-scheduled yellow 
fg-special-warm magenta-alt-other))))
-    `(org-sexp-date ((,class :inherit org-date)))
+    `(org-sexp-date ((,class :foreground ,cyan-alt-other)))
     `(org-special-keyword ((,class :inherit (shadow 
modus-themes-fixed-pitch))))
     `(org-table ((,class :inherit modus-themes-fixed-pitch :foreground 
,fg-special-cold)))
-    `(org-table-header ((,class :inherit (fixed-pitch 
modus-themes-intense-neutral))))
+    `(org-table-header ((,class :inherit (fixed-pitch 
modus-themes-special-cold))))
     `(org-tag ((,class :foreground ,magenta-nuanced-fg)))
     `(org-tag-group ((,class :inherit bold :foreground ,cyan-nuanced-fg)))
     `(org-target ((,class :underline t)))
@@ -6895,9 +6587,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(org-todo ((,class :foreground ,red)))
     `(org-upcoming-deadline ((,class :foreground ,red-alt-other)))
     `(org-upcoming-distant-deadline ((,class :foreground ,red-faint)))
-    `(org-verbatim ((,class :inherit modus-themes-fixed-pitch
-                            ,@(modus-themes--markup fg-special-calm magenta-alt
-                                                    bg-alt 
magenta-nuanced-bg))))
+    `(org-verbatim ((,class :inherit modus-themes-markup-verbatim)))
     `(org-verse ((,class :inherit org-quote)))
     `(org-warning ((,class :inherit bold :foreground ,red-alt-other)))
 ;;;;; org-journal
@@ -6914,29 +6604,21 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
 ;;;;; org-recur
     `(org-recur ((,class :foreground ,magenta-active)))
 ;;;;; org-roam
-    `(org-roam-link ((,class :inherit button
-                             ,@(modus-themes--link-color
-                                green green-faint))))
-    `(org-roam-link-current ((,class :inherit button
-                                     ,@(modus-themes--link-color
-                                        green-alt green-alt-faint))))
-    `(org-roam-link-invalid ((,class :inherit button
-                                     ,@(modus-themes--link-color
-                                        red red-faint))))
-    `(org-roam-link-shielded ((,class :inherit button
-                                      ,@(modus-themes--link-color
-                                         yellow yellow-faint))))
-    `(org-roam-tag ((,class :inherit (shadow italic))))
+    `(org-roam-dim ((,class :foreground "gray50")))
+    `(org-roam-header-line ((,class :inherit bold :foreground 
,magenta-active)))
+    `(org-roam-olp ((,class :inherit shadow)))
+    `(org-roam-preview-heading ((,class :inherit modus-themes-subtle-neutral)))
+    `(org-roam-preview-heading-highlight ((,class :inherit 
modus-themes-intense-neutral)))
+    `(org-roam-preview-heading-selection ((,class :inherit 
modus-themes-special-cold)))
+    `(org-roam-preview-region ((,class :inherit bold)))
+    `(org-roam-title ((,class :inherit modus-themes-pseudo-header)))
 ;;;;; org-superstar
     `(org-superstar-item ((,class :foreground ,fg-main)))
     `(org-superstar-leading ((,class :foreground ,fg-whitespace)))
 ;;;;; org-table-sticky-header
-    `(org-table-sticky-header-face ((,class :inherit 
modus-themes-intense-neutral)))
+    `(org-table-sticky-header-face ((,class :inherit 
modus-themes-special-cold)))
 ;;;;; org-tree-slide
-    `(org-tree-slide-header-overlay-face
-      ((,class :inherit (bold modus-themes-variable-pitch) :background ,bg-main
-               :foreground ,fg-special-cold :overline nil
-               ,@(modus-themes--scale modus-themes-scale-title))))
+    `(org-tree-slide-header-overlay-face ((,class :inherit 
org-document-title)))
 ;;;;; org-treescope
     `(org-treescope-faces--markerinternal-midday ((,class :inherit 
modus-themes-intense-blue)))
     `(org-treescope-faces--markerinternal-range ((,class :inherit 
modus-themes-special-mild)))
@@ -6992,8 +6674,6 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(paradox-starred-face ((,class :foreground ,magenta-alt)))
 ;;;;; paren-face
     `(parenthesis ((,class :foreground ,fg-unfocused)))
-;;;;; parrot
-    `(parrot-rotate-rotation-highlight-face ((,class :inherit 
modus-themes-refine-magenta)))
 ;;;;; pass
     `(pass-mode-directory-face ((,class :inherit bold :foreground 
,fg-special-cold)))
     `(pass-mode-entry-face ((,class :background ,bg-main :foreground 
,fg-main)))
@@ -7009,26 +6689,16 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
 ;;;;; perspective
     `(persp-selected-face ((,class :inherit bold :foreground ,blue-active)))
 ;;;;; phi-grep
-    `(phi-grep-heading-face  ((,class :inherit bold :foreground ,red-alt
-                                      ,@(modus-themes--scale 
modus-themes-scale-4))))
+    `(phi-grep-heading-face ((,class :inherit modus-themes-pseudo-header 
:foreground ,fg-special-cold)))
     `(phi-grep-line-number-face ((,class :foreground ,fg-special-warm)))
     `(phi-grep-match-face ((,class :inherit modus-themes-special-calm)))
     `(phi-grep-modified-face ((,class :inherit modus-themes-refine-yellow)))
     `(phi-grep-overlay-face ((,class :inherit modus-themes-refine-blue)))
-;;;;; phi-search
-    `(phi-replace-preview-face ((,class :inherit 
modus-themes-intense-magenta)))
-    `(phi-search-failpart-face ((,class :inherit modus-themes-refine-red)))
-    `(phi-search-match-face ((,class :inherit 
modus-themes-search-success-lazy)))
-    `(phi-search-selection-face ((,class :inherit (modus-themes-search-success 
bold))))
-;;;;; pkgbuild-mode
-    `(pkgbuild-error-face ((,class :inherit modus-themes-lang-error)))
 ;;;;; pomidor
     `(pomidor-break-face ((,class :foreground ,blue-alt-other)))
     `(pomidor-overwork-face ((,class :foreground ,red-alt-other)))
     `(pomidor-skip-face ((,class :inherit (shadow modus-themes-slant))))
-    `(pomidor-work-face ((,class :foreground ,@(modus-themes--success-deuteran
-                                                blue-alt
-                                                green-alt-other))))
+    `(pomidor-work-face ((,class :inherit modus-themes-grue)))
 ;;;;; popup
     `(popup-face ((,class :background ,bg-alt :foreground ,fg-main)))
     `(popup-isearch-match ((,class :inherit (modus-themes-refine-cyan bold))))
@@ -7093,22 +6763,6 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(rainbow-blocks-depth-8-face ((,class :foreground ,cyan-alt)))
     `(rainbow-blocks-depth-9-face ((,class :foreground ,red-alt)))
     `(rainbow-blocks-unmatched-face ((,class :foreground ,red)))
-;;;;; rainbow-identifiers
-    `(rainbow-identifiers-identifier-1 ((,class :foreground ,green-alt-other)))
-    `(rainbow-identifiers-identifier-2 ((,class :foreground 
,magenta-alt-other)))
-    `(rainbow-identifiers-identifier-3 ((,class :foreground ,cyan-alt-other)))
-    `(rainbow-identifiers-identifier-4 ((,class :foreground 
,yellow-alt-other)))
-    `(rainbow-identifiers-identifier-5 ((,class :foreground ,blue-alt-other)))
-    `(rainbow-identifiers-identifier-6 ((,class :foreground ,green-alt)))
-    `(rainbow-identifiers-identifier-7 ((,class :foreground ,magenta-alt)))
-    `(rainbow-identifiers-identifier-8 ((,class :foreground ,cyan-alt)))
-    `(rainbow-identifiers-identifier-9 ((,class :foreground ,yellow-alt)))
-    `(rainbow-identifiers-identifier-10 ((,class :foreground ,green)))
-    `(rainbow-identifiers-identifier-11 ((,class :foreground ,magenta)))
-    `(rainbow-identifiers-identifier-12 ((,class :foreground ,cyan)))
-    `(rainbow-identifiers-identifier-13 ((,class :foreground ,yellow)))
-    `(rainbow-identifiers-identifier-14 ((,class :foreground ,blue-alt)))
-    `(rainbow-identifiers-identifier-15 ((,class :foreground ,red-alt)))
 ;;;;; rainbow-delimiters
     `(rainbow-delimiters-base-error-face ((,class :background ,red-subtle-bg 
:foreground ,fg-main)))
     `(rainbow-delimiters-base-face ((,class :foreground ,fg-main)))
@@ -7124,16 +6778,19 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(rainbow-delimiters-mismatched-face ((,class :inherit (bold 
modus-themes-refine-yellow))))
     `(rainbow-delimiters-unmatched-face ((,class :inherit (bold 
modus-themes-refine-red))))
 ;;;;; rcirc
-    `(rcirc-bright-nick ((,class :inherit bold :foreground ,magenta-alt)))
+    `(rcirc-bright-nick ((,class :inherit bold :foreground ,magenta-intense)))
     `(rcirc-dim-nick ((,class :inherit shadow)))
+    `(rcirc-monospace-text ((,class :inherit fixed-pitch)))
     `(rcirc-my-nick ((,class :inherit bold :foreground ,magenta)))
-    `(rcirc-nick-in-message ((,class :foreground ,magenta-alt-other)))
-    `(rcirc-nick-in-message-full-line ((,class :inherit bold :foreground 
,fg-special-mild)))
-    `(rcirc-other-nick ((,class :inherit bold :foreground ,fg-special-cold)))
+    `(rcirc-nick-in-message ((,class :inherit bold :foreground ,red-alt)))
+    `(rcirc-nick-in-message-full-line ((,class :inherit bold :foreground 
,cyan-alt-other)))
+    `(rcirc-other-nick ((,class :inherit bold :foreground ,blue)))
     `(rcirc-prompt ((,class :inherit modus-themes-prompt)))
-    `(rcirc-server ((,class :foreground ,fg-unfocused)))
-    `(rcirc-timestamp ((,class :foreground ,blue-nuanced-fg)))
-    `(rcirc-url ((,class :foreground ,blue :underline t)))
+    `(rcirc-server ((,class :inherit shadow)))
+    `(rcirc-timestamp ((,class :foreground ,cyan)))
+    `(rcirc-track-keyword ((,class :inherit bold)))
+    `(rcirc-track-nick ((,class :inherit bold :foreground ,red-active)))
+    `(rcirc-url ((,class :inherit link)))
 ;;;;; recursion-indicator
     `(recursion-indicator-general ((,class :foreground ,blue-active)))
     `(recursion-indicator-minibuffer ((,class :foreground ,red-active)))
@@ -7176,57 +6833,13 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(ruler-mode-margins ((,class :inherit ruler-mode-default :foreground 
,bg-main)))
     `(ruler-mode-pad ((,class :inherit ruler-mode-default :background 
,bg-active :foreground ,fg-inactive)))
     `(ruler-mode-tab-stop ((,class :inherit ruler-mode-default :foreground 
,fg-special-warm)))
-;;;;; sallet
-    `(sallet-buffer-compressed ((,class :inherit italic :foreground 
,yellow-nuanced-fg)))
-    `(sallet-buffer-default-directory ((,class :foreground ,cyan-nuanced-fg)))
-    `(sallet-buffer-directory ((,class :foreground ,blue-nuanced-fg)))
-    `(sallet-buffer-help ((,class :foreground ,fg-special-cold)))
-    `(sallet-buffer-modified ((,class :inherit italic :foreground 
,yellow-alt-other)))
-    `(sallet-buffer-ordinary ((,class :foreground ,fg-main)))
-    `(sallet-buffer-read-only ((,class :foreground ,yellow-alt)))
-    `(sallet-buffer-size ((,class :foreground ,fg-special-calm)))
-    `(sallet-buffer-special ((,class :foreground ,magenta-alt-other)))
-    `(sallet-flx-match ((,class ,@(modus-themes--extra-completions
-                                   'modus-themes-subtle-cyan
-                                   'modus-themes-refine-cyan
-                                   'modus-themes-nuanced-cyan
-                                   cyan-alt-other))))
-    `(sallet-recentf-buffer-name ((,class :foreground ,blue-nuanced-fg)))
-    `(sallet-recentf-file-path ((,class :foreground ,fg-special-mild)))
-    `(sallet-regexp-match ((,class ,@(modus-themes--extra-completions
-                                      'modus-themes-subtle-magenta
-                                      'modus-themes-refine-magenta
-                                      'modus-themes-nuanced-magenta
-                                      magenta-alt-other))))
-    `(sallet-source-header ((,class :inherit bold :foreground ,red-alt
-                                    ,@(modus-themes--scale 
modus-themes-scale-4))))
-    `(sallet-substring-match ((,class ,@(modus-themes--extra-completions
-                                         'modus-themes-subtle-blue
-                                         'modus-themes-refine-blue
-                                         'modus-themes-nuanced-blue
-                                         blue-alt-other))))
 ;;;;; selectrum
-    ;; NOTE 2021-02-22: The `selectrum-primary-highlight' and
-    ;; `selectrum-secondary-highlight' are deprecated upstream in favour
-    ;; of their selectrum-prescient counterparts.  We shall remove those
-    ;; faces from the themes once we are certain that they are no longer
-    ;; relevant.
     `(selectrum-current-candidate
       ((,class :inherit bold :foreground ,fg-main
                :background ,@(pcase modus-themes-completions
                                ('opinionated (list bg-active))
                                (_ (list bg-inactive))))))
     `(selectrum-mouse-highlight ((,class :inherit highlight)))
-    `(selectrum-primary-highlight
-      ((,class :inherit bold
-               ,@(modus-themes--standard-completions
-                  magenta-alt magenta-nuanced-bg
-                  magenta-refine-bg magenta-refine-fg))))
-    `(selectrum-secondary-highlight
-      ((,class :inherit bold
-               ,@(modus-themes--standard-completions
-                  cyan-alt-other cyan-nuanced-bg
-                  cyan-refine-bg cyan-refine-fg))))
     `(selectrum-quick-keys-highlight
       ((,class :inherit modus-themes-refine-red)))
     `(selectrum-quick-keys-match
@@ -7363,11 +6976,6 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(speedbar-selected-face ((,class :inherit bold :foreground ,cyan)))
     `(speedbar-separator-face ((,class :inherit modus-themes-intense-neutral)))
     `(speedbar-tag-face ((,class :foreground ,yellow-alt-other)))
-;;;;; spell-fu
-    `(spell-fu-incorrect-face ((,class :inherit modus-themes-lang-error)))
-;;;;; spray
-    `(spray-accent-face ((,class :foreground ,red-intense)))
-    `(spray-base-face ((,class :inherit default :foreground ,fg-special-cold)))
 ;;;;; stripes
     `(stripes ((,class :background ,bg-alt)))
 ;;;;; suggest
@@ -7385,14 +6993,6 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(swiper-match-face-2 ((,class :inherit (bold 
modus-themes-intense-green))))
     `(swiper-match-face-3 ((,class :inherit (bold modus-themes-intense-blue))))
     `(swiper-match-face-4 ((,class :inherit (bold modus-themes-intense-red))))
-;;;;; swoop
-    `(swoop-face-header-format-line ((,class :inherit bold :foreground ,red-alt
-                                             ,@(modus-themes--scale 
modus-themes-scale-3))))
-    `(swoop-face-line-buffer-name ((,class :inherit bold :foreground ,blue-alt
-                                           ,@(modus-themes--scale 
modus-themes-scale-4))))
-    `(swoop-face-line-number ((,class :foreground ,fg-special-warm)))
-    `(swoop-face-target-line ((,class :inherit modus-themes-intense-blue 
:extend t)))
-    `(swoop-face-target-words ((,class :inherit modus-themes-refine-cyan)))
 ;;;;; sx
     `(sx-inbox-item-type ((,class :foreground ,magenta-alt-other)))
     `(sx-inbox-item-type-unread ((,class :inherit (sx-inbox-item-type bold))))
@@ -7442,30 +7042,29 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(syslog-su ((,class :inherit bold :foreground ,red-alt)))
     `(syslog-warn ((,class :inherit bold :foreground ,yellow)))
 ;;;;; tab-bar-groups
-    `(tab-bar-groups-tab-1 ((,class ,@(modus-themes--variable-pitch-ui) 
:foreground ,blue-tab)))
-    `(tab-bar-groups-tab-2 ((,class ,@(modus-themes--variable-pitch-ui) 
:foreground ,red-tab)))
-    `(tab-bar-groups-tab-3 ((,class ,@(modus-themes--variable-pitch-ui) 
:foreground ,green-tab)))
-    `(tab-bar-groups-tab-4 ((,class ,@(modus-themes--variable-pitch-ui) 
:foreground ,orange-tab)))
-    `(tab-bar-groups-tab-5 ((,class ,@(modus-themes--variable-pitch-ui) 
:foreground ,purple-tab)))
-    `(tab-bar-groups-tab-6 ((,class ,@(modus-themes--variable-pitch-ui) 
:foreground ,cyan-tab)))
-    `(tab-bar-groups-tab-7 ((,class ,@(modus-themes--variable-pitch-ui) 
:foreground ,yellow-tab)))
-    `(tab-bar-groups-tab-8 ((,class ,@(modus-themes--variable-pitch-ui) 
:foreground ,magenta-tab)))
+    `(tab-bar-groups-tab-1 ((,class :inherit modus-themes-ui-variable-pitch 
:foreground ,blue-tab)))
+    `(tab-bar-groups-tab-2 ((,class :inherit modus-themes-ui-variable-pitch 
:foreground ,red-tab)))
+    `(tab-bar-groups-tab-3 ((,class :inherit modus-themes-ui-variable-pitch 
:foreground ,green-tab)))
+    `(tab-bar-groups-tab-4 ((,class :inherit modus-themes-ui-variable-pitch 
:foreground ,orange-tab)))
+    `(tab-bar-groups-tab-5 ((,class :inherit modus-themes-ui-variable-pitch 
:foreground ,purple-tab)))
+    `(tab-bar-groups-tab-6 ((,class :inherit modus-themes-ui-variable-pitch 
:foreground ,cyan-tab)))
+    `(tab-bar-groups-tab-7 ((,class :inherit modus-themes-ui-variable-pitch 
:foreground ,yellow-tab)))
+    `(tab-bar-groups-tab-8 ((,class :inherit modus-themes-ui-variable-pitch 
:foreground ,magenta-tab)))
 ;;;;; tab-bar-mode
-    `(tab-bar ((,class ,@(modus-themes--tab bg-active bg-active-accent nil nil 
nil nil t))))
+    `(tab-bar ((,class :inherit modus-themes-tab-backdrop)))
     `(tab-bar-tab-group-current ((,class ,@(modus-themes--tab bg-tab-active)
                                          :box (:line-width (2 . -2) :color 
"gray50"))))
     `(tab-bar-tab-group-inactive ((,class ,@(modus-themes--tab bg-tab-inactive 
bg-tab-inactive-accent fg-dim)
                                           :box (:line-width (2 . -2) :color 
"gray50"))))
-    `(tab-bar-tab ((,class ,@(modus-themes--tab bg-tab-active nil nil nil t 
t))))
-    `(tab-bar-tab-inactive ((,class ,@(modus-themes--tab bg-tab-inactive 
bg-tab-inactive-accent fg-dim nil t))))
+    `(tab-bar-tab ((,class :inherit modus-themes-tab-active)))
+    `(tab-bar-tab-inactive ((,class :inherit modus-themes-tab-inactive)))
 ;;;;; tab-line-mode
-    `(tab-line ((,class ,@(modus-themes--tab bg-active bg-active-accent nil 
nil nil nil t)
-                        :height 0.95)))
+    `(tab-line ((,class :inherit modus-themes-tab-backdrop :height 0.95)))
     `(tab-line-close-highlight ((,class :foreground ,red)))
     `(tab-line-highlight ((,class :inherit modus-themes-active-blue)))
-    `(tab-line-tab ((,class ,@(modus-themes--tab bg-tab-active nil nil nil t 
t))))
+    `(tab-line-tab ((,class :inherit modus-themes-tab-active)))
     `(tab-line-tab-current ((,class :inherit tab-line-tab)))
-    `(tab-line-tab-inactive ((,class ,@(modus-themes--tab bg-tab-inactive 
bg-tab-inactive-accent fg-dim nil t))))
+    `(tab-line-tab-inactive ((,class :inherit modus-themes-tab-inactive)))
     `(tab-line-tab-inactive-alternate ((,class ,@(modus-themes--tab 
bg-tab-inactive-alt
                                                                     
bg-tab-inactive-alt-accent fg-main nil t))))
     `(tab-line-tab-modified ((,class :foreground ,red-alt-other-faint)))
@@ -7539,9 +7138,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(transient-argument ((,class :inherit bold :foreground ,green)))
     `(transient-blue ((,class :inherit bold :foreground ,blue)))
     `(transient-disabled-suffix ((,class :inherit modus-themes-intense-red)))
-    `(transient-enabled-suffix ((,class :inherit 
,@(modus-themes--success-deuteran
-                                                    'modus-themes-subtle-blue
-                                                    
'modus-themes-subtle-green))))
+    `(transient-enabled-suffix ((,class :inherit 
modus-themes-grue-background-subtle)))
     `(transient-heading ((,class :inherit bold :foreground ,fg-main)))
     `(transient-inactive-argument ((,class :inherit shadow)))
     `(transient-inactive-value ((,class :inherit shadow)))
@@ -7560,34 +7157,29 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(trashed-mark ((,class :inherit modus-themes-mark-symbol)))
     `(trashed-marked ((,class :inherit modus-themes-mark-alt)))
     `(trashed-restored ((,class :inherit modus-themes-mark-sel)))
-    `(trashed-symlink ((,class :inherit button
-                               ,@(modus-themes--link-color
-                                  cyan-alt cyan-alt-faint))))
+    `(trashed-symlink ((,class :inherit modus-themes-link-symlink)))
 ;;;;; treemacs
     `(treemacs-directory-collapsed-face ((,class :foreground ,magenta-alt)))
     `(treemacs-directory-face ((,class :inherit dired-directory)))
     `(treemacs-file-face ((,class :foreground ,fg-main)))
     `(treemacs-fringe-indicator-face ((,class :foreground ,fg-main)))
-    `(treemacs-git-added-face ((,class :foreground ,green-intense)))
-    `(treemacs-git-conflict-face ((,class :inherit (modus-themes-intense-red 
bold))))
+    `(treemacs-git-added-face ((,class :inherit success)))
+    `(treemacs-git-conflict-face ((,class :inherit error)))
     `(treemacs-git-ignored-face ((,class :inherit shadow)))
-    `(treemacs-git-modified-face ((,class :foreground ,yellow-alt-other)))
-    `(treemacs-git-renamed-face ((,class :foreground ,cyan-alt-other)))
+    `(treemacs-git-modified-face ((,class :inherit warning)))
+    `(treemacs-git-renamed-face ((,class :inherit italic)))
     `(treemacs-git-unmodified-face ((,class :foreground ,fg-main)))
-    `(treemacs-git-untracked-face ((,class :foreground ,red-alt-other)))
+    `(treemacs-git-untracked-face ((,class :inherit shadow)))
     `(treemacs-help-column-face ((,class :inherit modus-themes-bold 
:foreground ,magenta-alt-other :underline t)))
     `(treemacs-help-title-face ((,class :foreground ,blue-alt-other)))
     `(treemacs-on-failure-pulse-face ((,class :inherit 
modus-themes-intense-red)))
-    `(treemacs-on-success-pulse-face ((,class :inherit 
,@(modus-themes--success-deuteran
-                                                          
'modus-themes-intense-blue
-                                                          
'modus-themes-intense-green))))
+    `(treemacs-on-success-pulse-face ((,class :inherit 
modus-themes-grue-background-intense)))
     `(treemacs-root-face ((,class :inherit bold :foreground ,blue-alt-other 
:height 1.2 :underline t)))
     `(treemacs-root-remote-disconnected-face ((,class :inherit 
treemacs-root-remote-face :foreground ,yellow)))
     `(treemacs-root-remote-face ((,class :inherit treemacs-root-face 
:foreground ,magenta)))
     `(treemacs-root-remote-unreadable-face ((,class :inherit 
treemacs-root-unreadable-face)))
     `(treemacs-root-unreadable-face ((,class :inherit treemacs-root-face 
:strike-through t)))
     `(treemacs-tags-face ((,class :foreground ,blue-alt)))
-    `(treemacs-tags-face ((,class :foreground ,magenta-alt)))
 ;;;;; tty-menu
     `(tty-menu-disabled-face ((,class :background ,bg-alt :foreground 
,fg-alt)))
     `(tty-menu-enabled-face ((,class :inherit bold :background ,bg-alt 
:foreground ,fg-main)))
@@ -7644,14 +7236,6 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(vc-removed-state ((,class :foreground ,red-active)))
     `(vc-state-base ((,class :foreground ,fg-active)))
     `(vc-up-to-date-state ((,class :foreground ,fg-special-cold)))
-;;;;; vdiff
-    `(vdiff-addition-face ((,class :inherit modus-themes-diff-added)))
-    `(vdiff-change-face ((,class :inherit modus-themes-diff-changed)))
-    `(vdiff-closed-fold-face ((,class :inherit modus-themes-diff-heading)))
-    `(vdiff-refine-added ((,class :inherit modus-themes-diff-refine-added)))
-    `(vdiff-refine-changed ((,class :inherit 
modus-themes-diff-refine-changed)))
-    `(vdiff-subtraction-face ((,class :inherit modus-themes-diff-removed)))
-    `(vdiff-target-face ((,class :inherit modus-themes-intense-blue)))
 ;;;;; vertico
     `(vertico-current ((,class :inherit bold :foreground ,fg-main
                                :background ,@(pcase modus-themes-completions
@@ -7677,8 +7261,6 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(vr/match-0 ((,class :inherit modus-themes-refine-yellow)))
     `(vr/match-1 ((,class :inherit modus-themes-refine-yellow)))
     `(vr/match-separator-face ((,class :inherit (modus-themes-intense-neutral 
bold))))
-;;;;; volatile-highlights
-    `(vhl/default-face ((,class :background ,bg-alt :foreground 
,blue-nuanced-fg :extend t)))
 ;;;;; vterm
     `(vterm-color-black ((,class :background "gray35" :foreground "gray35")))
     `(vterm-color-blue ((,class :background ,blue :foreground ,blue)))
@@ -7768,11 +7350,11 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(web-mode-warning-face ((,class :inherit font-lock-warning-face)))
     `(web-mode-whitespace-face ((,class :background ,bg-whitespace :foreground 
,fg-whitespace)))
 ;;;;; wgrep
-    `(wgrep-delete-face ((,class :inherit modus-themes-refine-yellow)))
-    `(wgrep-done-face ((,class :inherit modus-themes-refine-blue)))
-    `(wgrep-face ((,class :inherit modus-themes-refine-green)))
+    `(wgrep-delete-face ((,class :inherit warning)))
+    `(wgrep-done-face ((,class :inherit success)))
+    `(wgrep-face ((,class :inherit bold)))
     `(wgrep-file-face ((,class :foreground ,fg-special-warm)))
-    `(wgrep-reject-face ((,class :inherit (modus-themes-intense-red bold))))
+    `(wgrep-reject-face ((,class :inherit error)))
 ;;;;; which-function-mode
     `(which-func ((,class :foreground ,magenta-active)))
 ;;;;; which-key
@@ -7828,7 +7410,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(ztreep-arrow-face ((,class :foreground ,fg-inactive)))
     `(ztreep-diff-header-face ((,class :inherit bold :height 1.2 :foreground 
,fg-special-cold)))
     `(ztreep-diff-header-small-face ((,class :foreground ,fg-main)))
-    `(ztreep-diff-model-add-face ((,class :foreground 
,@(modus-themes--diff-deuteran blue green))))
+    `(ztreep-diff-model-add-face ((,class :inherit modus-themes-grue)))
     `(ztreep-diff-model-diff-face ((,class :foreground ,red)))
     `(ztreep-diff-model-ignored-face ((,class :inherit shadow :strike-through 
t)))
     `(ztreep-diff-model-normal-face ((,class :inherit shadow)))
@@ -7858,10 +7440,6 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(ibuffer-filter-group-name-face 'modus-themes-pseudo-header)
     `(ibuffer-marked-face 'modus-themes-mark-sel)
     `(ibuffer-title-face 'default)
-;;;; highlight-tail
-    `(highlight-tail-colors
-      '((,green-subtle-bg . 0)
-        (,cyan-subtle-bg . 20)))
 ;;;; hl-todo
     `(hl-todo-keyword-faces
       '(("HOLD" . ,yellow-alt)
diff --git a/etc/themes/modus-vivendi-theme.el 
b/etc/themes/modus-vivendi-theme.el
index 6dffbf07e9..738753741c 100644
--- a/etc/themes/modus-vivendi-theme.el
+++ b/etc/themes/modus-vivendi-theme.el
@@ -1,27 +1,27 @@
 ;;; modus-vivendi-theme.el --- Accessible dark theme (WCAG AAA) -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2019-2021  Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
 
 ;; Author: Protesilaos Stavrou <info@protesilaos.com>
 ;; URL: https://gitlab.com/protesilaos/modus-themes
-;; Version: 1.7.0
+;; Version: 2.0.0
 ;; Package-Requires: ((emacs "27.1"))
 ;; Keywords: faces, theme, accessibility
 
 ;; 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.
+;; 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 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/etc/themes/tango-dark-theme.el b/etc/themes/tango-dark-theme.el
index fe4a24746e..ef00d2ac49 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 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 5c429b0b70..ecbbf03753 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 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 62ed7c81dc..a88ad75520 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 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 481a8f3733..d9d09b702b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 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 162f797515..c56c8a2d8a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 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 9cf8e7dfc9..f21b18b421 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 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 d769c33721..d9fab8ac78 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
 ;; Author: Kristoffer Grönlund <krig@koru.se>
 
diff --git a/etc/tutorials/TUTORIAL b/etc/tutorials/TUTORIAL
index dcdb61f23e..c4e08adb0c 100644
--- a/etc/tutorials/TUTORIAL
+++ b/etc/tutorials/TUTORIAL
@@ -304,8 +304,8 @@ position, type <DEL>.  This is the key on the keyboard 
usually labeled
 "Backspace"--the same one you normally use, outside Emacs, to delete
 the last character typed.
 
-There may also be another key on your keyboard labeled <Delete>, but
-that's not the one we refer to as <DEL>.
+There is usually another key on your keyboard labeled <Delete>, but
+that's not the one we refer to as <DEL> in Emacs.
 
 >> Do this now--type a few characters, then delete them by
    typing <DEL> a few times.  Don't worry about this file
@@ -1099,6 +1099,20 @@ manual in the node called "Dired".
 The manual also describes many other Emacs features.
 
 
+* INSTALLING PACKAGES
+---------------------
+
+There's a rich set of packages for Emacs written by the community,
+which extend Emacs' capabilities.  These packages include support for
+new languages, additional themes, plugins for integrating with
+external applications, and much, much more.
+
+To see a list of all available packages, type M-x list-packages.  In
+the display this shows, you can install or uninstall packages, as well
+as read packages' descriptions.  For more information about package
+management, consult the manual.
+
+
 * CONCLUSION
 ------------
 
@@ -1117,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-2021 Free Software Foundation,
+  Copyright (C) 1985, 1996, 1998, 2001-2022 Free Software Foundation,
   Inc.
 
   This file is part of GNU Emacs.
diff --git a/etc/tutorials/TUTORIAL.bg b/etc/tutorials/TUTORIAL.bg
index 3391e9b32e..63cae5d62b 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-2021 Free Software Foundation,
+  Copyright (C) 1985, 1996, 1998, 2001-2022 Free Software Foundation,
   Inc.
 
   This file is part of GNU Emacs.
diff --git a/etc/tutorials/TUTORIAL.cn b/etc/tutorials/TUTORIAL.cn
index 742de090da..5d03014e41 100644
--- a/etc/tutorials/TUTORIAL.cn
+++ b/etc/tutorials/TUTORIAL.cn
@@ -997,7 +997,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-2021 Free Software Foundation,
+  Copyright (C) 1985, 1996, 1998, 2001-2022 Free Software Foundation,
   Inc.
 
   This file is part of GNU Emacs.
@@ -1026,7 +1026,7 @@ using, writing, and sharing free software!
 
 本篇指南是 GNU Emacs 的一部分,并允许在下列条件的约束下发行其拷贝:
 
-   Copyright (C) 1985, 1996, 1998, 2001-2021 Free Software Foundation,
+   Copyright (C) 1985, 1996, 1998, 2001-2022 Free Software Foundation,
    Inc.
 
    本文件为 GNU Emacs 的一部分。
diff --git a/etc/tutorials/TUTORIAL.cs b/etc/tutorials/TUTORIAL.cs
index 12c0d1e5ca..737b872c50 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1985, 1996, 1998, 2001-2022 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 7793094dc0..4ae421f40e 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-2021 Free Software Foundation,
+   Copyright (C) 1985, 1996-1997, 2001-2022 Free Software Foundation,
    Inc.
 
    Diese Datei ist ein Bestandteil von GNU Emacs.
diff --git a/etc/tutorials/TUTORIAL.eo b/etc/tutorials/TUTORIAL.eo
index a1490cb99b..762510a6fb 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-2021 Free Software
+   Copyright (C) 1985, 1999, 2001-2002, 2005, 2007-2022 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 a92604ccb9..454f2ce68f 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1985, 1996, 1998, 2001-2022 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 3c1d87cda0..5b080645e4 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1985, 1996, 2001-2022 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
diff --git a/etc/tutorials/TUTORIAL.he b/etc/tutorials/TUTORIAL.he
index 465768aa87..26a9d06e45 100644
--- a/etc/tutorials/TUTORIAL.he
+++ b/etc/tutorials/TUTORIAL.he
@@ -985,6 +985,17 @@ find-file.
 
 בנוסף, מדריך למשתמש מתאר עוד הרבה מאד תכונות של Emacs.
 
+* התקנת חבילות הרחבה
+--------------------
+קיימות לא מעט חבילות תוכנה עבור Emacs אשר מרחיבות את היכולות שלו. חבילות
+הרחבה אלו נכתבו ע״י קהילת משתמשי Emacs והן מהוות אוסף עשיר של תכונות
+התומכות בשפות תכנות נוספות, ערכות נושא נוספות, תוספים לשילוב יישומים
+חיצוניים, ועוד ועוד.
+
+לצפיה ברשימת חבילות ההרחבה הזמינות, יש להקיש M-x list-packages. בתצוגה
+שתיפתח בעקבות זאת תוכלו לעיין בתיאור של חבילות, לבחור חבילות להתקנה במחשב
+שלכם, להסיר חבילות, ועוד. פרטים נוספים לגבי ניהול חבילות הרחבה ניתן למצוא
+במדריך למשתמש.
 
 * לסיום
 -------
@@ -1004,7 +1015,7 @@ find-file.
 גירסה זו של השיעור הינה חלק מחבילת GNU Emacs. היא מוגנת בזכויות יוצרים
 וניתנת להעתקה והפצת עותקים בתנאים מסויימים כדלקמן:
 
-                       Copyright (C) 2010-2021 Free Software Foundation, Inc.
+                       Copyright (C) 2010-2022 Free Software Foundation, Inc.
 
 ‏GNU Emacs הינו תכנה חפשית; זכותכם להפיצו ו\או לשנותו בכפוף לתנאי
 הרשיון GNU General Public License, כפי שהוא יוצא לאור ע״י Free
diff --git a/etc/tutorials/TUTORIAL.it b/etc/tutorials/TUTORIAL.it
index 68bf40332e..dba941cfd5 100644
--- a/etc/tutorials/TUTORIAL.it
+++ b/etc/tutorials/TUTORIAL.it
@@ -1178,14 +1178,27 @@ quei file.  Dired è descritta nel manuale Emacs nel 
nodo chiamato
 Il manuale descrive molte altre funzionalità di Emacs.
 
 
+* INSTALLAZIONE DI ULTERIORI PACCHETTI
+
+Ci sono tantissimi pacchetti che estendono le funzionalità di Emacs,
+scritti dalla comunità.  Questi pacchetti includono il supporto a
+nuovi linguaggi, aggiungono temi addizionali, rendono possibile
+interoperare con applicazioni esterne e molto, molto altro.
+
+Per vedere una lista di tutti i pacchetti disponibili, inserisci
+M-x list-packages.  Nell'elenco che viene mostrato, puoi installare o
+disinstallare pacchetti, o leggerne la descrizione.  Consulta il
+manuale per ulteriori informazioni sulla gestione dei pacchetti.
+
+
 * CONCLUSIONI
 -------------
 
 Per chiudere una sessione di Emacs si usa C-x C-c.
 
-Questo documento è stato creato per essere utile a tutti i nuovi
-utenti, se qualcosa per te è stato poco chiaro non dare la colpa a te
-stesso: lamentati!
+Questo documento è pensato per essere comprensibile a tutti i nuovi
+utenti, quindi se hai trovato qualcosa di poco chiaro, non dare la
+colpa a te stesso: lamentati!
 
 
 * COPIA
@@ -1206,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-2021 Free Software Foundation, Inc.
+Copyright (C) 2003-2022 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 db1e19b692..43f4d09da7 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1985, 1996, 1998, 2001-2022 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 d3ec8c240c..84cc4f1d84 100644
--- a/etc/tutorials/TUTORIAL.ko
+++ b/etc/tutorials/TUTORIAL.ko
@@ -981,7 +981,7 @@ C-x C-s와 (META쇠나 EDIT쇠 혹은 교체쇠가 있으면) <ESC>v와 같은 
 GNU 이맥스와 같이 이 지침서 판은 저작권이 있으며 특정한 조건을 만족할
 때에 복사본을 배포할 수 있는 허가를 갖고 나온 것이다:
 
-Copyright (C) 1985, 1996, 2001-2021 Free Software Foundation, Inc.
+Copyright (C) 1985, 1996, 2001-2022 Free Software Foundation, Inc.
 
    이 문서는 이 저작권 공고와 허용 공고가 그대로 유지되고, 배포자가
    수취자에게 이 공고에 따라 허용되는 것처럼 또 재분배하는 것을
diff --git a/etc/tutorials/TUTORIAL.nl b/etc/tutorials/TUTORIAL.nl
index 0853e5ffbb..2ec3fac11b 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-2021 Free Software Foundation,
+  Copyright (C) 1985, 1996, 1998, 2001-2022 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-2021 Free Software Foundation, Inc.
+  Copyright (C) 1985, 1996, 1998, 2001-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/etc/tutorials/TUTORIAL.pl b/etc/tutorials/TUTORIAL.pl
index b5ccccfad4..2d87eb4710 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1985, 1994, 2001-2022 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 65ab3b5651..0a3b376e4d 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2004-2022 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 f9e67caa1e..1f1dc32560 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-2021 Free Software Foundation, Inc.
+Copyright (c) 1985, 2013-2022 Free Software Foundation, Inc.
 
 Citiţi acum versiunea românească a tutorialului de Emacs.
 
@@ -1082,7 +1082,7 @@ continuare noţita de copyright originală în limba engleză.
 This version of the tutorial, like GNU Emacs, is copyrighted, and
 comes with permission to distribute copies on certain conditions:
 
-Copyright (C) 1998, 2001-2021 Free Software Foundation, Inc.
+Copyright (C) 1998, 2001-2022 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.ru b/etc/tutorials/TUTORIAL.ru
index 45bee48bd4..d32b7163e6 100644
--- a/etc/tutorials/TUTORIAL.ru
+++ b/etc/tutorials/TUTORIAL.ru
@@ -1105,7 +1105,7 @@ Dired позволяет вам отображать список файлов 
 (copyrighted) и приходит с ограничениями распространения копий со
 следующими соглашениями:
 
-Copyright (C) 1985, 1996, 1998, 2001-2021 Free Software Foundation, Inc.
+Copyright (C) 1985, 1996, 1998, 2001-2022 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 525db24800..7e523f0f93 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1985, 1996, 1998, 2001-2022 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 be87588b26..20ff1b6055 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-2021 Free Software Foundation, Inc.
+Copyright © 1985, 1996, 1998, 2001-2022 Free Software Foundation, Inc.
 
   Ta datoteka je del paketa GNU Emacs.
 
diff --git a/etc/tutorials/TUTORIAL.sv b/etc/tutorials/TUTORIAL.sv
index dacc66d916..b1111af929 100644
--- a/etc/tutorials/TUTORIAL.sv
+++ b/etc/tutorials/TUTORIAL.sv
@@ -1119,6 +1119,20 @@ Emacs-manualen i noden "Dired".
 Manualen beskriver även många andra funktioner i Emacs.
 
 
+* INSTALLERA PAKET
+------------------
+
+Det finns en stor mängd paket för Emacs skrivna av användare, som
+utökar Emacs funktionalitet. Detta kan innefatta stöd för nya språk,
+fler teman, insticksmoduler för integration med externa program och
+mycket, mycket annat.
+
+Skriv M-x list-packages för att se en lista över alla tillgängliga
+paket. I detta läge kan du installera eller avinstallera paket samt
+läsa mer om olika paket. Se användarmanualen för mer information om
+pakethantering.
+
+
 * SLUTORD
 ---------
 
@@ -1139,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-2021 Free Software Foundation, Inc.
+Copyright (C) 1985, 1996, 1998, 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/etc/tutorials/TUTORIAL.th b/etc/tutorials/TUTORIAL.th
index 8bd4f07260..fb5a031362 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1985, 1996, 2001-2022 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.zh b/etc/tutorials/TUTORIAL.zh
index a808cf8359..959d51b7aa 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1985, 1996, 1998, 2001-2022 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 364e9341ae..dadd8d1faa 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
 
 ;; Author: Phillip Lord <phillip.lord@russet.org.uk>
 
diff --git a/leim/ChangeLog.1 b/leim/ChangeLog.1
index e2c0120445..af5a16c385 100644
--- a/leim/ChangeLog.1
+++ b/leim/ChangeLog.1
@@ -2578,7 +2578,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1997-1999, 2001-2021 Free Software Foundation, Inc.
+  Copyright (C) 1997-1999, 2001-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/leim/MISC-DIC/README b/leim/MISC-DIC/README
index 74ae75289b..f205ecd725 100644
--- a/leim/MISC-DIC/README
+++ b/leim/MISC-DIC/README
@@ -20,7 +20,7 @@ license notice.
 They are copies of those distributed with a free package
 called CCE at:
 
-   http://archive.debian.org/debian/pool/main/c/cce/cce_0.36.orig.tar.gz
+   https://archive.debian.org/debian/pool/main/c/cce/cce_0.36.orig.tar.gz
 
 As the original files don't contain copyright and license notices, a
 proper notice is extracted from the file Copyright and added at the
diff --git a/leim/MISC-DIC/pinyin.map b/leim/MISC-DIC/pinyin.map
index 4809769d1a..e206564bcd 100644
--- a/leim/MISC-DIC/pinyin.map
+++ b/leim/MISC-DIC/pinyin.map
@@ -3,7 +3,7 @@
 % This file is included in the free package called CCE.  It is
 % available in:
 %
-% http://archive.debian.org/debian/pool/main/c/cce/cce_0.36.orig.tar.gz
+% https://archive.debian.org/debian/pool/main/c/cce/cce_0.36.orig.tar.gz
 %
 % As the file itself doesn't contain copyright and license notices,
 % the following statements of the file cce/Copyright covers it.
diff --git a/leim/MISC-DIC/ziranma.cin b/leim/MISC-DIC/ziranma.cin
index b61aea2b6f..b276e888a0 100644
--- a/leim/MISC-DIC/ziranma.cin
+++ b/leim/MISC-DIC/ziranma.cin
@@ -3,7 +3,7 @@
 % This file is included in the free package called CCE.  It is
 % available in:
 %
-% http://archive.debian.org/debian/pool/main/c/cce/cce_0.36.orig.tar.gz
+% https://archive.debian.org/debian/pool/main/c/cce/cce_0.36.orig.tar.gz
 %
 % As the file itself doesn't contain copyright and license notices,
 % the following statements of the file cce/Copyright covers it.
diff --git a/leim/Makefile.in b/leim/Makefile.in
index ce1029abcf..a574a10845 100644
--- a/leim/Makefile.in
+++ b/leim/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 1997-2021 Free Software Foundation, Inc.
+# Copyright (C) 1997-2022 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 baaf661055..6a4ec77619 100644
--- a/leim/README
+++ b/leim/README
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2021 Free Software Foundation, Inc.
+Copyright (C) 2001-2022 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/leim/SKK-DIC/SKK-JISYO.L b/leim/SKK-DIC/SKK-JISYO.L
index f1e06ccfca..2d4f619898 100644
--- a/leim/SKK-DIC/SKK-JISYO.L
+++ b/leim/SKK-DIC/SKK-JISYO.L
@@ -143454,7 +143454,7 @@ zyklus /
 �Ϥä��������� /ȯ���Dz�/
 �Ϥä����������� /ȯ�����/
 �Ϥä��������� /ȯ����ϩ/
-�Ϥä���������� /ȯ����Ω/
+�Ϥä���������� /ȯ����Ψ/
 �Ϥä��������� /ȯ���ս�/
 �Ϥä������󤫤� /ȯ���ֳ�/
 �Ϥä������� /ȯ����/
diff --git a/leim/leim-ext.el b/leim/leim-ext.el
index 904675c0c5..58dd166763 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2022 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 3c2698005d..0829f50a56 100644
--- a/lib-src/ChangeLog.1
+++ b/lib-src/ChangeLog.1
@@ -8609,7 +8609,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1988-1999, 2001-2021 Free Software Foundation, Inc.
+  Copyright (C) 1988-1999, 2001-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lib-src/Makefile.in b/lib-src/Makefile.in
index d062e78366..c25ba5c974 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-2021 Free Software
+# Copyright (C) 1985, 1987-1988, 1993-1994, 2001-2022 Free Software
 # Foundation, Inc.
 
 # This file is part of GNU Emacs.
@@ -195,6 +195,8 @@ LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@
 LIB_GETRANDOM = @LIB_GETRANDOM@
 ## Whatever libraries are needed for euidaccess
 LIB_EACCESS=@LIB_EACCESS@
+## Libraries needed for file_has_acl
+LIB_HAS_ACL=@LIB_HAS_ACL@
 ## empty or -lwsock2 for MinGW
 LIB_WSOCK32=@LIB_WSOCK32@
 
@@ -295,8 +297,8 @@ maybe-blessmail: $(BLESSMAIL_TARGET)
 ## up if chown or chgrp fails, as the package responsible for
 ## installing Emacs can fix this problem later.
 $(DESTDIR)${archlibdir}: all
-       @echo
-       @echo "Installing utilities run internally by Emacs."
+       $(info $ )
+       $(info Installing utilities run internally by Emacs.)
        umask 022 && ${MKDIR_P} "$(DESTDIR)${archlibdir}"
        exp_archlibdir=`cd "$(DESTDIR)${archlibdir}" && /bin/pwd` && \
        if [ "$$exp_archlibdir" != "`/bin/pwd`" ]; then \
@@ -337,8 +339,8 @@ $(DESTDIR)${archlibdir}: all
 .PHONY: bootstrap-clean check tags
 
 install: $(DESTDIR)${archlibdir}
-       @echo
-       @echo "Installing utilities for users to run."
+       $(info $ )
+       $(info Installing utilities for users to run.)
        umask 022 && ${MKDIR_P} "$(DESTDIR)${bindir}"
        for file in ${INSTALLABLES} ; do \
          $(INSTALL_PROGRAM) $(INSTALL_STRIP) $${file} \
@@ -373,7 +375,7 @@ bootstrap-clean maintainer-clean: distclean
 
 ## Test the contents of the directory.
 check:
-       @echo "We don't have any tests for the lib-src/ directory yet."
+       $(info We don't have any tests for the lib-src/ directory yet.)
 
 tagsfiles = $(wildcard ${srcdir}/*.[ch])
 
@@ -418,7 +420,7 @@ pop.o: ${srcdir}/pop.c ${srcdir}/pop.h 
${srcdir}/../lib/min-max.h $(config_h)
 emacsclient${EXEEXT}: ${srcdir}/emacsclient.c $(NTLIB) $(config_h)
        $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} $< \
           $(NTLIB) $(LOADLIBES) \
-          $(LIB_WSOCK32) $(LIB_EACCESS) $(LIBS_ECLIENT) -o $@
+          $(LIB_WSOCK32) $(LIB_EACCESS) $(LIB_HAS_ACL) $(LIBS_ECLIENT) -o $@
 
 emacsclientw${EXEEXT}: ${srcdir}/emacsclient.c $(NTLIB) $(CLIENTRES) 
$(config_h)
        $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} $(CLIENTRES) -mwindows $< \
diff --git a/lib-src/be_resources.cc b/lib-src/be_resources.cc
index e6a14f037b..d18fe30dd7 100644
--- a/lib-src/be_resources.cc
+++ b/lib-src/be_resources.cc
@@ -1,5 +1,5 @@
 /* Haiku window system support
-   Copyright (C) 2021 Free Software Foundation, Inc.
+   Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/lib-src/ebrowse.c b/lib-src/ebrowse.c
index 436b13a32c..04ae018464 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1992-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c
index c55b29830d..365e803e1c 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-1987, 1994, 1999-2021 Free Software Foundation, Inc.
+Copyright (C) 1986-1987, 1994, 1999-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -607,7 +607,12 @@ decode_options (int argc, char **argv)
       alt_display = "be";
 #endif
 
+#ifdef HAVE_PGTK
+      display = egetenv ("WAYLAND_DISPLAY");
+      alt_display = egetenv ("DISPLAY");
+#else
       display = egetenv ("DISPLAY");
+#endif
     }
 
   if (!display)
@@ -1469,7 +1474,6 @@ set_local_socket (char const *server_name)
   else
     {
       /* socket_name is a file name component.  */
-      sock_status = ENOENT;
       char const *xdg_runtime_dir = egetenv ("XDG_RUNTIME_DIR");
       if (xdg_runtime_dir)
        {
@@ -1479,7 +1483,7 @@ set_local_socket (char const *server_name)
                         ? connect_socket (AT_FDCWD, sockname, s, 0)
                         : ENAMETOOLONG);
        }
-      if (sock_status == ENOENT)
+      else
        {
          char const *tmpdir = egetenv ("TMPDIR");
          if (tmpdir)
@@ -1758,8 +1762,9 @@ start_daemon_and_retry_set_socket (void)
        }
 
       /* Try connecting, the daemon should have started by now.  */
-      message (true,
-              "Emacs daemon should have started, trying to connect again\n");
+      if (!quiet)
+        message (true,
+                 "Emacs daemon should have started, trying to connect 
again\n");
     }
   else if (dpid < 0)
     {
@@ -1850,7 +1855,7 @@ start_daemon_and_retry_set_socket (void)
   /* Try connecting, the daemon should have started by now.  */
   /* It's just a progress message, so don't pop a dialog if this is
      emacsclientw.  */
-  if (!w32_window_app ())
+  if (!quiet && !w32_window_app ())
     message (true,
             "Emacs daemon should have started, trying to connect again\n");
 #endif /* WINDOWSNT */
diff --git a/lib-src/etags.c b/lib-src/etags.c
index bd4d4fcf53..aa5bc8839d 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-2021 Free Software
+Copyright (C) 1984, 1987-1989, 1993-1995, 1998-2022 Free Software
 Foundation, Inc.
 
 This file is not considered part of GNU Emacs.
@@ -5773,7 +5773,7 @@ static void
 TEX_decode_env (const char *evarname, const char *defenv)
 {
   const char *env, *p;
-  ptrdiff_t len;
+  ptrdiff_t len = 1;
 
   /* Append default string to environment. */
   env = getenv (evarname);
@@ -5782,8 +5782,13 @@ TEX_decode_env (const char *evarname, const char *defenv)
   else
     env = concat (env, defenv, "");
 
+  /* If the environment variable doesn't start with a colon, increase
+     the length of the token table.  */
+  if (*env != ':')
+    len++;
+
   /* Allocate a token table */
-  for (len = 1, p = env; (p = strchr (p, ':')); )
+  for (p = env; (p = strchr (p, ':')); )
     if (*++p)
       len++;
   TEX_toktab = xnew (len, linebuffer);
diff --git a/lib-src/hexl.c b/lib-src/hexl.c
index 64866068f4..c074a957a6 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1989, 2001-2022 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 d17c28be90..f42b1988a2 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-2021 Free Software
+Copyright (C) 1985-1986, 1992-1994, 1997, 1999-2022 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -19,8 +19,8 @@ You should have received a copy of the GNU General Public 
License
 along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.  */
 
 
-/* The arguments given to this program are all the C and Lisp source files
- of GNU Emacs.  .elc and .el and .c files are allowed.
+/* The arguments given to this program are all the C and some Lisp source files
+ of GNU Emacs.  .el and .c files are allowed.
  A .o file can also be specified; the .c file it was made from is used.
  This helps the makefile pass the correct list of files.
  Option -d DIR means change to DIR before looking for files.
@@ -62,9 +62,6 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
    Similarly, msdos defines this as sys_chdir, but we're not linking with the
    file where that function is defined.  */
 #undef chdir
-#define IS_SLASH(c)  ((c) == '/' || (c) == '\\' || (c) == ':')
-#else  /* not DOS_NT */
-#define IS_SLASH(c)  ((c) == '/')
 #endif /* not DOS_NT */
 
 static void scan_file (char *filename);
@@ -242,9 +239,7 @@ scan_file (char *filename)
 
   if (!generate_globals)
     put_filename (filename);
-  if (len > 4 && !strcmp (filename + len - 4, ".elc"))
-    scan_lisp_file (filename, "rb");
-  else if (len > 3 && !strcmp (filename + len - 3, ".el"))
+  if (len > 3 && !strcmp (filename + len - 3, ".el"))
     scan_lisp_file (filename, "r");
   else
     scan_c_file (filename, "r");
@@ -1225,7 +1220,7 @@ scan_c_stream (FILE *infile)
     fatal ("read error");
 }
 
-/* Read a file of Lisp code, compiled or interpreted.
+/* Read a file of Lisp source code.
  Looks for
   (defun NAME ARGS DOCSTRING ...)
   (defmacro NAME ARGS DOCSTRING ...)
@@ -1252,10 +1247,8 @@ scan_c_stream (FILE *infile)
  For defun, defmacro, and autoload, we know how to skip over the
  arglist, but the doc string must still have a backslash and newline
  immediately after the double quote.
- The only source files that must follow this convention are preloaded
- uncompiled ones like loaddefs.el; aside from that, it is always the .elc
- file that we should look at, and they are no problem because byte-compiler
- output follows this convention.
+ The only source files that follow this convention are autoload-generated
+ files like loaddefs.el;
  The NAME and DOCSTRING are output.
  NAME is preceded by `F' for a function or `V' for a variable.
  An entry is output only if DOCSTRING has \ newline just after the opening ".
@@ -1331,50 +1324,14 @@ search_lisp_doc_at_eol (FILE *infile)
   return true;
 }
 
-#define DEF_ELISP_FILE(fn)  { #fn, sizeof(#fn) - 1 }
-
 static void
 scan_lisp_file (const char *filename, const char *mode)
 {
   FILE *infile;
   int c;
-  char *saved_string = 0;
-  /* These are the only files that are loaded uncompiled, and must
-     follow the conventions of the doc strings expected by this
-     function.  These conventions are automatically followed by the
-     byte compiler when it produces the .elc files.  */
-  static struct {
-    const char *fn;
-    int fl;
-  } const uncompiled[] = {
-    DEF_ELISP_FILE (loaddefs.el),
-    DEF_ELISP_FILE (loadup.el),
-    DEF_ELISP_FILE (charprop.el),
-    DEF_ELISP_FILE (cp51932.el),
-    DEF_ELISP_FILE (eucjp-ms.el)
-  };
-  int i;
-  int flen = strlen (filename);
 
   if (generate_globals)
     fatal ("scanning lisp file when -g specified");
-  if (flen > 3 && !strcmp (filename + flen - 3, ".el"))
-    {
-      bool match = false;
-      for (i = 0; i < sizeof (uncompiled) / sizeof (uncompiled[0]); i++)
-       {
-         if (uncompiled[i].fl <= flen
-             && !strcmp (filename + flen - uncompiled[i].fl, uncompiled[i].fn)
-             && (flen == uncompiled[i].fl
-                 || IS_SLASH (filename[flen - uncompiled[i].fl - 1])))
-           {
-             match = true;
-             break;
-           }
-       }
-      if (!match)
-       fatal ("uncompiled lisp file %s is not supported", filename);
-    }
 
   infile = fopen (filename, mode);
   if (infile == NULL)
@@ -1398,54 +1355,6 @@ scan_lisp_file (const char *filename, const char *mode)
       /* Skip the line break.  */
       while (c == '\n' || c == '\r')
        c = getc (infile);
-      /* Detect a dynamic doc string and save it for the next expression.  */
-      if (c == '#')
-       {
-         c = getc (infile);
-         if (c == '@')
-           {
-             ptrdiff_t length = 0;
-             ptrdiff_t i;
-
-             /* Read the length.  */
-             while ((c = getc (infile),
-                     c_isdigit (c)))
-               {
-                 if (INT_MULTIPLY_WRAPV (length, 10, &length)
-                     || INT_ADD_WRAPV (length, c - '0', &length)
-                     || SIZE_MAX < length)
-                   memory_exhausted ();
-               }
-
-             if (length <= 1)
-               fatal ("invalid dynamic doc string length");
-
-             if (c != ' ')
-               fatal ("space not found after dynamic doc string length");
-
-             /* The next character is a space that is counted in the length
-                but not part of the doc string.
-                We already read it, so just ignore it.  */
-             length--;
-
-             /* Read in the contents.  */
-             free (saved_string);
-             saved_string = xmalloc (length);
-             for (i = 0; i < length; i++)
-               saved_string[i] = getc (infile);
-             /* The last character is a ^_.
-                That is needed in the .elc file
-                but it is redundant in DOC.  So get rid of it here.  */
-             saved_string[length - 1] = 0;
-             /* Skip the line break.  */
-             while (c == '\n' || c == '\r')
-               c = getc (infile);
-             /* Skip the following line.  */
-             while (! (c == '\n' || c == '\r' || c < 0))
-               c = getc (infile);
-           }
-         continue;
-       }
 
       if (c != '(')
        continue;
@@ -1498,7 +1407,6 @@ scan_lisp_file (const char *filename, const char *mode)
            }
        }
 
-      /* defcustom can only occur in uncompiled Lisp files.  */
       else if (! strcmp (buffer, "defvar")
               || ! strcmp (buffer, "defconst")
               || ! strcmp (buffer, "defcustom"))
@@ -1506,9 +1414,8 @@ scan_lisp_file (const char *filename, const char *mode)
          type = 'V';
          read_lisp_symbol (infile, buffer);
 
-         if (saved_string == 0)
-           if (!search_lisp_doc_at_eol (infile))
-             continue;
+         if (!search_lisp_doc_at_eol (infile))
+           continue;
        }
 
       else if (! strcmp (buffer, "custom-declare-variable")
@@ -1548,9 +1455,8 @@ scan_lisp_file (const char *filename, const char *mode)
                }
            }
 
-         if (saved_string == 0)
-           if (!search_lisp_doc_at_eol (infile))
-             continue;
+         if (!search_lisp_doc_at_eol (infile))
+           continue;
        }
 
       else if (! strcmp (buffer, "fset") || ! strcmp (buffer, "defalias"))
@@ -1586,9 +1492,8 @@ scan_lisp_file (const char *filename, const char *mode)
                }
            }
 
-         if (saved_string == 0)
-           if (!search_lisp_doc_at_eol (infile))
-             continue;
+         if (!search_lisp_doc_at_eol (infile))
+           continue;
        }
 
       else if (! strcmp (buffer, "autoload"))
@@ -1632,9 +1537,8 @@ scan_lisp_file (const char *filename, const char *mode)
            }
          read_c_string_or_comment (infile, 0, false, 0);
 
-         if (saved_string == 0)
-           if (!search_lisp_doc_at_eol (infile))
-             continue;
+         if (!search_lisp_doc_at_eol (infile))
+           continue;
        }
 
 #ifdef DEBUG
@@ -1652,23 +1556,13 @@ scan_lisp_file (const char *filename, const char *mode)
          continue;
        }
 
-      /* At this point, we should either use the previous dynamic doc string in
-        saved_string or gobble a doc string from the input file.
-        In the latter case, the opening quote (and leading backslash-newline)
+      /* At this point, we should gobble a doc string from the input file.
+        The opening quote (and leading backslash-newline)
         have already been read.  */
 
       printf ("\037%c%s\n", type, buffer);
-      if (saved_string)
-       {
-         fputs (saved_string, stdout);
-         /* Don't use one dynamic doc string twice.  */
-         free (saved_string);
-         saved_string = 0;
-       }
-      else
-       read_c_string_or_comment (infile, 1, false, 0);
+      read_c_string_or_comment (infile, 1, false, 0);
     }
-  free (saved_string);
   if (ferror (infile) || fclose (infile) != 0)
     fatal ("%s: read error", filename);
 }
diff --git a/lib-src/make-fingerprint.c b/lib-src/make-fingerprint.c
index 485dd4b919..ea9fe941e4 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-2021 Free
+Copyright (C) 1985-1986, 1992-1994, 1997, 1999-2016, 2018-2022 Free
 Software Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/lib-src/movemail.c b/lib-src/movemail.c
index e683da179d..888688f90b 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-2021 Free Software
+Copyright (C) 1986, 1992-1994, 1996, 1999, 2001-2022 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/lib-src/ntlib.c b/lib-src/ntlib.c
index c8bcf742fe..ee21abc723 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1994, 2001-2022 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 d62c19f16a..2cd2b1d107 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1994, 2002-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/lib-src/pop.c b/lib-src/pop.c
index 27ed89b836..cfe2ece660 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-2021 Free Software
+Copyright (C) 1991, 1993, 1996-1997, 1999, 2001-2022 Free Software
 Foundation, Inc.
 
 Author: Jonathan Kamens <jik@security.ov.com>
diff --git a/lib-src/pop.h b/lib-src/pop.h
index 229714b68e..2c9b3e0bec 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1991, 1993, 2001-2022 Free Software Foundation, Inc.
 
 Author: Jonathan Kamens <jik@security.ov.com>
 
diff --git a/lib-src/rcs2log b/lib-src/rcs2log
index 7a033672f6..bc7875cfdd 100755
--- a/lib-src/rcs2log
+++ b/lib-src/rcs2log
@@ -2,7 +2,7 @@
 
 # RCS to ChangeLog generator
 
-# Copyright (C) 1992-1998, 2001-2021 Free Software Foundation, Inc.
+# Copyright (C) 1992-1998, 2001-2022 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) 2021 Free Software Foundation, Inc.
+Copyright='Copyright (C) 2022 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 e7496053a8..552a986239 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2020-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/lib-src/update-game-score.c b/lib-src/update-game-score.c
index f1242dfbe6..8d6cca79c9 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2002-2022 Free Software Foundation, Inc.
 
 Author: Colin Walters <walters@debian.org>
 
diff --git a/lib/Makefile.in b/lib/Makefile.in
index ccb90c3d1b..8b95013624 100644
--- a/lib/Makefile.in
+++ b/lib/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright 2017-2021 Free Software Foundation, Inc.
+# Copyright 2017-2022 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
@@ -88,13 +88,13 @@ e-%.o: %.c
 all: libgnu.a $(if $(HYBRID_MALLOC),libegnu.a)
 
 libgnu.a: $(libgnu_a_OBJECTS)
-       $(AM_V_at)rm -f $@
-       $(AM_V_AR)$(AR) $(ARFLAGS) $@ $(libgnu_a_OBJECTS)
+       $(AM_V_AR)rm -f $@
+       $(AM_V_at)$(AR) $(ARFLAGS) $@ $(libgnu_a_OBJECTS)
        $(AM_V_at)$(RANLIB) $@
 
 libegnu.a: $(libegnu_a_OBJECTS)
-       $(AM_V_at)rm -f $@
-       $(AM_V_AR)$(AR) $(ARFLAGS) $@ $(libegnu_a_OBJECTS)
+       $(AM_V_AR)rm -f $@
+       $(AM_V_at)$(AR) $(ARFLAGS) $@ $(libegnu_a_OBJECTS)
        $(AM_V_at)$(RANLIB) $@
 
 ETAGS = ../lib-src/etags$(EXEEXT)
diff --git a/lib/_Noreturn.h b/lib/_Noreturn.h
index 6fed3c7971..e914627a88 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2011-2022 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 af1af82c9f..39717c3517 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-2021 Free Software Foundation, Inc.
+   Copyright 2013-2022 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 2b212e8fc4..75a80bf0df 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2002-2003, 2005-2022 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 ca302bf8cd..582f9e1c1a 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2002-2003, 2005-2022 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 7014b82f73..8b933c20b9 100644
--- a/lib/acl.h
+++ b/lib/acl.h
@@ -1,6 +1,6 @@
 /* acl.c - access control lists
 
-   Copyright (C) 2002, 2008-2021 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2008-2022 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 6f70caf175..e4c014ce71 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2002-2003, 2005-2022 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 f0fe7fc055..ddd6568b8e 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2018-2022 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 65c2d4d939..e2b146138d 100644
--- a/lib/alloca.in.h
+++ b/lib/alloca.in.h
@@ -1,6 +1,6 @@
 /* Memory allocation on the stack.
 
-   Copyright (C) 1995, 1999, 2001-2004, 2006-2021 Free Software Foundation,
+   Copyright (C) 1995, 1999, 2001-2004, 2006-2022 Free Software Foundation,
    Inc.
 
    This file is free software: you can redistribute it and/or modify
diff --git a/lib/allocator.c b/lib/allocator.c
index 2262de9ff3..42c891805d 100644
--- a/lib/allocator.c
+++ b/lib/allocator.c
@@ -1,6 +1,6 @@
 /* Memory allocators such as malloc+free.
 
-   Copyright (C) 2011-2021 Free Software Foundation, Inc.
+   Copyright (C) 2011-2022 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 f0e8f34896..3e698ced83 100644
--- a/lib/allocator.h
+++ b/lib/allocator.h
@@ -1,6 +1,6 @@
 /* Memory allocators such as malloc+free.
 
-   Copyright (C) 2011-2021 Free Software Foundation, Inc.
+   Copyright (C) 2011-2022 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 b4de241e90..e4513efe95 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2009-2022 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/at-func.c b/lib/at-func.c
index b6d9de754d..92d65f6341 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2006, 2009-2022 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 eb36188d48..378d4f0a80 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-2021 Free Software Foundation, Inc.
+   Copyright 2020-2022 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 adc0ae2b0c..ea407fd74f 100644
--- a/lib/binary-io.c
+++ b/lib/binary-io.c
@@ -1,5 +1,5 @@
 /* Binary mode I/O.
-   Copyright 2017-2021 Free Software Foundation, Inc.
+   Copyright 2017-2022 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 642f08b1ba..5b7661e233 100644
--- a/lib/binary-io.h
+++ b/lib/binary-io.h
@@ -1,5 +1,5 @@
 /* Binary mode I/O.
-   Copyright (C) 2001, 2003, 2005, 2008-2021 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2003, 2005, 2008-2022 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 113f878027..f4746d3995 100644
--- a/lib/byteswap.in.h
+++ b/lib/byteswap.in.h
@@ -1,5 +1,5 @@
 /* byteswap.h - Byte swapping
-   Copyright (C) 2005, 2007, 2009-2021 Free Software Foundation, Inc.
+   Copyright (C) 2005, 2007, 2009-2022 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 a47b61a009..ad181558fb 100644
--- a/lib/c++defs.h
+++ b/lib/c++defs.h
@@ -1,5 +1,5 @@
 /* C++ compatible function declaration macros.
-   Copyright (C) 2010-2021 Free Software Foundation, Inc.
+   Copyright (C) 2010-2022 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 300f97c292..a247514cd6 100644
--- a/lib/c-ctype.c
+++ b/lib/c-ctype.c
@@ -1,6 +1,6 @@
 /* Character handling in C locale.
 
-   Copyright (C) 2003-2021 Free Software Foundation, Inc.
+   Copyright (C) 2003-2022 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 3a652ac1f2..1a4f603898 100644
--- a/lib/c-ctype.h
+++ b/lib/c-ctype.h
@@ -5,7 +5,7 @@
    <ctype.h> functions' behaviour depends on the current locale set via
    setlocale.
 
-   Copyright (C) 2000-2003, 2006, 2008-2021 Free Software Foundation, Inc.
+   Copyright (C) 2000-2003, 2006, 2008-2022 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 82f99bb06b..3e874b5ea3 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-2021 Free Software
+   Copyright (C) 1995-1996, 2001, 2003, 2005, 2009-2022 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 3c22455082..87b993cb2f 100644
--- a/lib/c-strcasecmp.c
+++ b/lib/c-strcasecmp.c
@@ -1,5 +1,5 @@
 /* c-strcasecmp.c -- case insensitive string comparator in C locale
-   Copyright (C) 1998-1999, 2005-2006, 2009-2021 Free Software Foundation, Inc.
+   Copyright (C) 1998-1999, 2005-2006, 2009-2022 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 f3ca786cb3..5a5d30b6e5 100644
--- a/lib/c-strncasecmp.c
+++ b/lib/c-strncasecmp.c
@@ -1,5 +1,5 @@
 /* c-strncasecmp.c -- case insensitive string comparator in C locale
-   Copyright (C) 1998-1999, 2005-2006, 2009-2021 Free Software Foundation, Inc.
+   Copyright (C) 1998-1999, 2005-2006, 2009-2022 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 92e9639720..a7fa7feb62 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1996-2022 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 9d0c125ecb..6ddc35f798 100644
--- a/lib/careadlinkat.c
+++ b/lib/careadlinkat.c
@@ -1,6 +1,6 @@
 /* Read symbolic links into a buffer without size limitation, relative to fd.
 
-   Copyright (C) 2001, 2003-2004, 2007, 2009-2021 Free Software Foundation,
+   Copyright (C) 2001, 2003-2004, 2007, 2009-2022 Free Software Foundation,
    Inc.
 
    This file is free software: you can redistribute it and/or modify
diff --git a/lib/careadlinkat.h b/lib/careadlinkat.h
index a3517b827a..2b559b2cd4 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2011-2022 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 4dac9d264d..abf13a9086 100644
--- a/lib/cdefs.h
+++ b/lib/cdefs.h
@@ -1,4 +1,5 @@
-/* Copyright (C) 1992-2021 Free Software Foundation, Inc.
+/* Copyright (C) 1992-2022 Free Software Foundation, Inc.
+   Copyright The GNU Toolchain Authors.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -150,6 +151,53 @@
 # define __glibc_objsize(__o) __bos (__o)
 #endif
 
+/* Compile time conditions to choose between the regular, _chk and _chk_warn
+   variants.  These conditions should get evaluated to constant and optimized
+   away.  */
+
+#define __glibc_safe_len_cond(__l, __s, __osz) ((__l) <= (__osz) / (__s))
+#define __glibc_unsigned_or_positive(__l) \
+  ((__typeof (__l)) 0 < (__typeof (__l)) -1                                  \
+   || (__builtin_constant_p (__l) && (__l) > 0))
+
+/* Length is known to be safe at compile time if the __L * __S <= __OBJSZ
+   condition can be folded to a constant and if it is true.  The -1 check is
+   redundant because since it implies that __glibc_safe_len_cond is true.  */
+#define __glibc_safe_or_unknown_len(__l, __s, __osz) \
+  (__glibc_unsigned_or_positive (__l)                                        \
+   && __builtin_constant_p (__glibc_safe_len_cond ((__SIZE_TYPE__) (__l),     \
+                                                  __s, __osz))               \
+   && __glibc_safe_len_cond ((__SIZE_TYPE__) (__l), __s, __osz))
+
+/* Conversely, we know at compile time that the length is unsafe if the
+   __L * __S <= __OBJSZ condition can be folded to a constant and if it is
+   false.  */
+#define __glibc_unsafe_len(__l, __s, __osz) \
+  (__glibc_unsigned_or_positive (__l)                                        \
+   && __builtin_constant_p (__glibc_safe_len_cond ((__SIZE_TYPE__) (__l),     \
+                                                  __s, __osz))               \
+   && !__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), __s, __osz))
+
+/* Fortify function f.  __f_alias, __f_chk and __f_chk_warn must be
+   declared.  */
+
+#define __glibc_fortify(f, __l, __s, __osz, ...) \
+  (__glibc_safe_or_unknown_len (__l, __s, __osz)                             \
+   ? __ ## f ## _alias (__VA_ARGS__)                                         \
+   : (__glibc_unsafe_len (__l, __s, __osz)                                   \
+      ? __ ## f ## _chk_warn (__VA_ARGS__, __osz)                            \
+      : __ ## f ## _chk (__VA_ARGS__, __osz)))                       \
+
+/* Fortify function f, where object size argument passed to f is the number of
+   elements and not total size.  */
+
+#define __glibc_fortify_n(f, __l, __s, __osz, ...) \
+  (__glibc_safe_or_unknown_len (__l, __s, __osz)                             \
+   ? __ ## f ## _alias (__VA_ARGS__)                                         \
+   : (__glibc_unsafe_len (__l, __s, __osz)                                   \
+      ? __ ## f ## _chk_warn (__VA_ARGS__, (__osz) / (__s))                  \
+      : __ ## f ## _chk (__VA_ARGS__, (__osz) / (__s))))                     \
+
 #if __GNUC_PREREQ (4,3)
 # define __warnattr(msg) __attribute__((__warning__ (msg)))
 # define __errordecl(name, msg) \
@@ -243,6 +291,15 @@
 # define __attribute_alloc_size__(params) /* Ignore.  */
 #endif
 
+/* Tell the compiler which argument to an allocation function
+   indicates the alignment of the allocation.  */
+#if __GNUC_PREREQ (4, 9) || __glibc_has_attribute (__alloc_align__)
+# define __attribute_alloc_align__(param) \
+  __attribute__ ((__alloc_align__ param))
+#else
+# define __attribute_alloc_align__(param) /* Ignore.  */
+#endif
+
 /* At some point during the gcc 2.96 development the `pure' attribute
    for functions was introduced.  We don't want to use it unconditionally
    (although this would be possible) since it generates warnings.  */
@@ -605,12 +662,22 @@ _Static_assert (0, "IEEE 128-bits long double requires 
redirection on this platf
    size-index is not provided:
      access (access-mode, <ref-index> [, <size-index>])  */
 #  define __attr_access(x) __attribute__ ((__access__ x))
+/* For _FORTIFY_SOURCE == 3 we use __builtin_dynamic_object_size, which may
+   use the access attribute to get object sizes from function definition
+   arguments, so we can't use them on functions we fortify.  Drop the object
+   size hints for such functions.  */
+#  if __USE_FORTIFY_LEVEL == 3
+#    define __fortified_attr_access(a, o, s) __attribute__ ((__access__ (a, 
o)))
+#  else
+#    define __fortified_attr_access(a, o, s) __attr_access ((a, o, s))
+#  endif
 #  if __GNUC_PREREQ (11, 0)
 #    define __attr_access_none(argno) __attribute__ ((__access__ (__none__, 
argno)))
 #  else
 #    define __attr_access_none(argno)
 #  endif
 #else
+#  define __fortified_attr_access(a, o, s)
 #  define __attr_access(x)
 #  define __attr_access_none(argno)
 #endif
diff --git a/lib/cloexec.c b/lib/cloexec.c
index 7defa93446..812be01a06 100644
--- a/lib/cloexec.c
+++ b/lib/cloexec.c
@@ -1,6 +1,6 @@
 /* cloexec.c - set or clear the close-on-exec descriptor flag
 
-   Copyright (C) 1991, 2004-2006, 2009-2021 Free Software Foundation, Inc.
+   Copyright (C) 1991, 2004-2006, 2009-2022 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 97a3659efb..7a22d77532 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2009-2022 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 86f6d6e1de..54f3e3c3d0 100644
--- a/lib/close-stream.c
+++ b/lib/close-stream.c
@@ -1,6 +1,6 @@
 /* Close a stream, with nicer error checking than fclose's.
 
-   Copyright (C) 1998-2002, 2004, 2006-2021 Free Software Foundation, Inc.
+   Copyright (C) 1998-2002, 2004, 2006-2022 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 8a58a48e61..537506c489 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2006-2022 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 17df577055..96f1ec7c5e 100644
--- a/lib/copy-file-range.c
+++ b/lib/copy-file-range.c
@@ -1,5 +1,5 @@
 /* Stub for copy_file_range
-   Copyright 2019-2021 Free Software Foundation, Inc.
+   Copyright 2019-2022 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 7cf1ac2ff0..8eb1d2c100 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2012-2022 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 cef529ac13..354641af0a 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2012-2022 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 d9b4f5e848..67a61dad61 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2012-2022 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 5e87a572b0..7d24c45a0d 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2007-2022 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 538b01dc02..143dcda55d 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-2021 Free Software Foundation, Inc.
+   Copyright 2013-2022 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 f81674c571..9a989a4324 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-2021 Free Software Foundation, Inc.
+   Copyright 2013-2022 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 1cac430edd..0c901a6ecf 100644
--- a/lib/diffseq.h
+++ b/lib/diffseq.h
@@ -1,6 +1,6 @@
 /* Analyze differences between two vectors.
 
-   Copyright (C) 1988-1989, 1992-1995, 2001-2004, 2006-2021 Free Software
+   Copyright (C) 1988-1989, 1992-1995, 2001-2004, 2006-2022 Free Software
    Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
diff --git a/lib/dirent.in.h b/lib/dirent.in.h
index 4deb0cb466..f28288d1ac 100644
--- a/lib/dirent.in.h
+++ b/lib/dirent.in.h
@@ -1,5 +1,5 @@
 /* A GNU-like <dirent.h>.
-   Copyright (C) 2006-2021 Free Software Foundation, Inc.
+   Copyright (C) 2006-2022 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 640cb4ff13..4104683fbf 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2006, 2008-2022 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 5baba92922..eaade8fa01 100644
--- a/lib/dtoastr.c
+++ b/lib/dtoastr.c
@@ -1,6 +1,6 @@
 /* Convert 'double' to accurate string.
 
-   Copyright (C) 2010-2021 Free Software Foundation, Inc.
+   Copyright (C) 2010-2022 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 73061a3309..225a2be67c 100644
--- a/lib/dtotimespec.c
+++ b/lib/dtotimespec.c
@@ -1,6 +1,6 @@
 /* Convert double to timespec.
 
-   Copyright (C) 2011-2021 Free Software Foundation, Inc.
+   Copyright (C) 2011-2022 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 53e5552132..1c766ab38e 100644
--- a/lib/dup2.c
+++ b/lib/dup2.c
@@ -1,6 +1,6 @@
 /* Duplicate an open file descriptor to a specified file descriptor.
 
-   Copyright (C) 1999, 2004-2007, 2009-2021 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2004-2007, 2009-2022 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 ec64273b3a..ca6439d3ad 100644
--- a/lib/dynarray.h
+++ b/lib/dynarray.h
@@ -1,5 +1,5 @@
 /* Type-safe arrays which grow dynamically.
-   Copyright 2021 Free Software Foundation, Inc.
+   Copyright 2021-2022 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 fcd30ab1e6..8b31457119 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2012-2022 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 3cad9e2d62..3ec1845694 100644
--- a/lib/errno.in.h
+++ b/lib/errno.in.h
@@ -1,6 +1,6 @@
 /* A POSIX-like <errno.h>.
 
-   Copyright (C) 2008-2021 Free Software Foundation, Inc.
+   Copyright (C) 2008-2022 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 a86cebd179..97388c73bb 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-2021 Free
+   Copyright (C) 1990-1991, 1995, 1998, 2000, 2003-2006, 2008-2022 Free
    Software Foundation, Inc.
 
    This file is part of the GNU C Library.
diff --git a/lib/execinfo.c b/lib/execinfo.c
index 18a1051b25..4320b16c63 100644
--- a/lib/execinfo.c
+++ b/lib/execinfo.c
@@ -1,6 +1,6 @@
 /* Information about executables.
 
-   Copyright (C) 2012-2021 Free Software Foundation, Inc.
+   Copyright (C) 2012-2022 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 98bb8039b7..03c551a87b 100644
--- a/lib/execinfo.in.h
+++ b/lib/execinfo.in.h
@@ -1,6 +1,6 @@
 /* Information about executables.
 
-   Copyright (C) 2012-2021 Free Software Foundation, Inc.
+   Copyright (C) 2012-2022 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 2906c04d0f..ad0bfd170c 100644
--- a/lib/explicit_bzero.c
+++ b/lib/explicit_bzero.c
@@ -1,5 +1,5 @@
 /* Erasure of sensitive data, generic implementation.
-   Copyright (C) 2016-2021 Free Software Foundation, Inc.
+   Copyright (C) 2016-2022 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 3a776466cf..2c0c07aac1 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2009-2022 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 eb6e2242fd..506e6badd7 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2006, 2009-2022 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 c744eb91e6..f9753c4035 100644
--- a/lib/fcntl.c
+++ b/lib/fcntl.c
@@ -1,6 +1,6 @@
 /* Provide file descriptor control.
 
-   Copyright (C) 2009-2021 Free Software Foundation, Inc.
+   Copyright (C) 2009-2022 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 26dedc3041..3e0c302af3 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2006-2022 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 451b4e1321..a61bad66e2 100644
--- a/lib/fdopendir.c
+++ b/lib/fdopendir.c
@@ -1,5 +1,5 @@
 /* provide a replacement fdopendir function
-   Copyright (C) 2004-2021 Free Software Foundation, Inc.
+   Copyright (C) 2004-2022 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 800af227cc..2b6f91ff20 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2002-2003, 2005-2022 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 357567281d..cb508ad12d 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-2021 Free
+   Copyright (C) 1985, 1990, 1993, 1998-2000, 2004, 2006, 2009-2022 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 a02facb757..7c645c16b5 100644
--- a/lib/filemode.h
+++ b/lib/filemode.h
@@ -1,6 +1,6 @@
 /* Make a string describing file modes.
 
-   Copyright (C) 1998-1999, 2003, 2006, 2009-2021 Free Software Foundation,
+   Copyright (C) 1998-1999, 2003, 2006, 2009-2022 Free Software Foundation,
    Inc.
 
    This program is free software: you can redistribute it and/or modify
diff --git a/lib/filename.h b/lib/filename.h
index dafe3dfddb..ab77ca2df9 100644
--- a/lib/filename.h
+++ b/lib/filename.h
@@ -1,5 +1,5 @@
 /* Basic filename support macros.
-   Copyright (C) 2001-2004, 2007-2021 Free Software Foundation, Inc.
+   Copyright (C) 2001-2022 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 fca23ec4fc..b3e6e2f3cb 100644
--- a/lib/filevercmp.c
+++ b/lib/filevercmp.c
@@ -1,7 +1,7 @@
 /*
    Copyright (C) 1995 Ian Jackson <iwj10@cus.cam.ac.uk>
    Copyright (C) 2001 Anthony Towns <aj@azure.humbug.org.au>
-   Copyright (C) 2008-2021 Free Software Foundation, Inc.
+   Copyright (C) 2008-2022 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 c210452938..98020e6667 100644
--- a/lib/filevercmp.h
+++ b/lib/filevercmp.h
@@ -1,7 +1,7 @@
 /*
    Copyright (C) 1995 Ian Jackson <iwj10@cus.cam.ac.uk>
    Copyright (C) 2001 Anthony Towns <aj@azure.humbug.org.au>
-   Copyright (C) 2008-2021 Free Software Foundation, Inc.
+   Copyright (C) 2008-2022 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 7266da9710..e450d317d7 100644
--- a/lib/fingerprint.c
+++ b/lib/fingerprint.c
@@ -1,6 +1,6 @@
 /* Placeholder fingerprint for Emacs
 
-Copyright 2019-2021 Free Software Foundation, Inc.
+Copyright 2019-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/lib/fingerprint.h b/lib/fingerprint.h
index 6ec0c80052..d683d0a37a 100644
--- a/lib/fingerprint.h
+++ b/lib/fingerprint.h
@@ -1,6 +1,6 @@
 /* Header file for the Emacs build fingerprint.
 
-Copyright (C) 2016, 2018-2021 Free Software Foundation, Inc.
+Copyright (C) 2016, 2018-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/lib/flexmember.h b/lib/flexmember.h
index 1b19a2bfd9..1545639f75 100644
--- a/lib/flexmember.h
+++ b/lib/flexmember.h
@@ -1,6 +1,6 @@
 /* Sizes of structs with flexible array members.
 
-   Copyright 2016-2021 Free Software Foundation, Inc.
+   Copyright 2016-2022 Free Software Foundation, Inc.
 
    This file is part of the GNU C Library.
 
diff --git a/lib/fpending.c b/lib/fpending.c
index 7c61f7eea7..617f3977f8 100644
--- a/lib/fpending.c
+++ b/lib/fpending.c
@@ -1,5 +1,5 @@
 /* fpending.c -- return the number of pending output bytes on a stream
-   Copyright (C) 2000, 2004, 2006-2007, 2009-2021 Free Software Foundation,
+   Copyright (C) 2000, 2004, 2006-2007, 2009-2022 Free Software Foundation,
    Inc.
 
    This program is free software: you can redistribute it and/or modify
diff --git a/lib/fpending.h b/lib/fpending.h
index 016341bab5..2b45e9031b 100644
--- a/lib/fpending.h
+++ b/lib/fpending.h
@@ -1,6 +1,6 @@
 /* Declare __fpending.
 
-   Copyright (C) 2000, 2003, 2005-2006, 2009-2021 Free Software Foundation,
+   Copyright (C) 2000, 2003, 2005-2006, 2009-2022 Free Software Foundation,
    Inc.
 
    This program is free software: you can redistribute it and/or modify
diff --git a/lib/free.c b/lib/free.c
index 780f03dd11..86ebe6c630 100644
--- a/lib/free.c
+++ b/lib/free.c
@@ -1,6 +1,6 @@
 /* Make free() preserve errno.
 
-   Copyright (C) 2003, 2006, 2009-2021 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2006, 2009-2022 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 640a375430..56de0cab4b 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2006, 2009-2022 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 740cdc219a..734f0fc746 100644
--- a/lib/fsusage.c
+++ b/lib/fsusage.c
@@ -1,6 +1,6 @@
 /* fsusage.c -- return space usage of mounted file systems
 
-   Copyright (C) 1991-1992, 1996, 1998-1999, 2002-2006, 2009-2021 Free Software
+   Copyright (C) 1991-1992, 1996, 1998-1999, 2002-2006, 2009-2022 Free Software
    Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
diff --git a/lib/fsusage.h b/lib/fsusage.h
index b3f58d9994..f4f50aba29 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-2021 Free Software
+   Copyright (C) 1991-1992, 1997, 2003-2006, 2009-2022 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 99a932d770..9b561ab96e 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2008-2022 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 0ee0407ec2..4349c8c561 100644
--- a/lib/ftoastr.c
+++ b/lib/ftoastr.c
@@ -1,6 +1,6 @@
 /* floating point to accurate string
 
-   Copyright (C) 2010-2021 Free Software Foundation, Inc.
+   Copyright (C) 2010-2022 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 d7ff9e0548..065574a9ff 100644
--- a/lib/ftoastr.h
+++ b/lib/ftoastr.h
@@ -1,6 +1,6 @@
 /* floating point to accurate string
 
-   Copyright (C) 2010-2021 Free Software Foundation, Inc.
+   Copyright (C) 2010-2022 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 273cc87187..97228242b1 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2009-2022 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 fe376e5bb0..a17b791c8d 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2002-2003, 2005-2022 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 5006c2d5c5..793e0f8894 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2008-2022 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 96665257f2..f7abd72667 100644
--- a/lib/getgroups.c
+++ b/lib/getgroups.c
@@ -1,6 +1,6 @@
 /* provide consistent interface to getgroups for systems that don't allow N==0
 
-   Copyright (C) 1996, 1999, 2003, 2006-2021 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1999, 2003, 2006-2022 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 d42d0cd279..53d1b81a3b 100644
--- a/lib/getloadavg.c
+++ b/lib/getloadavg.c
@@ -1,6 +1,6 @@
 /* Get the system load averages.
 
-   Copyright (C) 1985-1989, 1991-1995, 1997, 1999-2000, 2003-2021 Free Software
+   Copyright (C) 1985-1989, 1991-1995, 1997, 1999-2000, 2003-2022 Free Software
    Foundation, Inc.
 
    NOTE: The canonical source of this file is maintained with gnulib.
diff --git a/lib/getopt-cdefs.in.h b/lib/getopt-cdefs.in.h
index 33e3d4b3d8..b6dd913caf 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1989-2022 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 ceb14d0597..1c40ecc833 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1989-2022 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 f82a8c6129..d661fcc554 100644
--- a/lib/getopt-ext.h
+++ b/lib/getopt-ext.h
@@ -1,5 +1,5 @@
 /* Declarations for getopt (GNU extensions).
-   Copyright (C) 1989-2021 Free Software Foundation, Inc.
+   Copyright (C) 1989-2022 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 b1733a3497..3eead0e04e 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1989-2022 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 b9a14ba05a..85a6cb5db3 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1989-2022 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 7f3aa5aa3d..128dc7fcf5 100644
--- a/lib/getopt.c
+++ b/lib/getopt.c
@@ -1,5 +1,5 @@
 /* Getopt for GNU.
-   Copyright (C) 1987-2021 Free Software Foundation, Inc.
+   Copyright (C) 1987-2022 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 bf884f0322..9bc50ee2be 100644
--- a/lib/getopt.in.h
+++ b/lib/getopt.in.h
@@ -1,5 +1,5 @@
 /* Declarations for getopt.
-   Copyright (C) 1989-2021 Free Software Foundation, Inc.
+   Copyright (C) 1989-2022 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 5a928062fd..990eee1b64 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1987-2022 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 91254e487d..ccdbb973a5 100644
--- a/lib/getopt_int.h
+++ b/lib/getopt_int.h
@@ -1,5 +1,5 @@
 /* Internal declarations for getopt.
-   Copyright (C) 1989-2021 Free Software Foundation, Inc.
+   Copyright (C) 1989-2022 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 a186c4d3bd..e146873093 100644
--- a/lib/getrandom.c
+++ b/lib/getrandom.c
@@ -1,6 +1,6 @@
 /* Obtain a series of random bytes.
 
-   Copyright 2020-2021 Free Software Foundation, Inc.
+   Copyright 2020-2022 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 f1c7a24075..b3577a043f 100644
--- a/lib/gettext.h
+++ b/lib/gettext.h
@@ -1,5 +1,5 @@
 /* Convenience header for conditional use of GNU <libintl.h>.
-   Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2021 Free Software
+   Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2022 Free Software
    Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
@@ -138,7 +138,7 @@
 #define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \
   npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, 
MsgidPlural, N, Category)
 
-#ifdef __GNUC__
+#if defined __GNUC__ || defined __clang__
 __inline
 #else
 #ifdef __cplusplus
@@ -157,7 +157,7 @@ pgettext_aux (const char *domain,
     return translation;
 }
 
-#ifdef __GNUC__
+#if defined __GNUC__ || defined __clang__
 __inline
 #else
 #ifdef __cplusplus
@@ -191,9 +191,8 @@ npgettext_aux (const char *domain,
    or may have security implications due to non-deterministic stack usage.  */
 
 #if (!defined GNULIB_NO_VLA \
-     && (((__GNUC__ >= 3 || __GNUG__ >= 2) && !defined __STRICT_ANSI__) \
-     /*  || (__STDC_VERSION__ == 199901L && !defined __HP_cc)
-         || (__STDC_VERSION__ >= 201112L && !defined __STDC_NO_VLA__) */ ))
+     && defined __STDC_VERSION__ && 199901L <= __STDC_VERSION__ \
+     && !defined __STDC_NO_VLA__)
 # define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 1
 #else
 # define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 0
@@ -208,7 +207,7 @@ npgettext_aux (const char *domain,
 #define dpgettext_expr(Domainname, Msgctxt, Msgid) \
   dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES)
 
-#ifdef __GNUC__
+#if defined __GNUC__ || defined __clang__
 __inline
 #else
 #ifdef __cplusplus
@@ -255,7 +254,7 @@ dcpgettext_expr (const char *domain,
 #define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \
   dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES)
 
-#ifdef __GNUC__
+#if defined __GNUC__ || defined __clang__
 __inline
 #else
 #ifdef __cplusplus
diff --git a/lib/gettime.c b/lib/gettime.c
index 8f28a32df1..a44a69dfc4 100644
--- a/lib/gettime.c
+++ b/lib/gettime.c
@@ -1,6 +1,6 @@
 /* gettime -- get the system clock
 
-   Copyright (C) 2002, 2004-2007, 2009-2021 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2004-2007, 2009-2022 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
@@ -30,6 +30,8 @@ gettime (struct timespec *ts)
 {
 #if defined CLOCK_REALTIME && HAVE_CLOCK_GETTIME
   clock_gettime (CLOCK_REALTIME, ts);
+#elif defined HAVE_TIMESPEC_GET
+  timespec_get (ts, TIME_UTC);
 #else
   struct timeval tv;
   gettimeofday (&tv, NULL);
diff --git a/lib/gettimeofday.c b/lib/gettimeofday.c
index 2a222fc5b7..36c7920afe 100644
--- a/lib/gettimeofday.c
+++ b/lib/gettimeofday.c
@@ -1,6 +1,6 @@
 /* Provide gettimeofday for systems that don't have it or for which it's 
broken.
 
-   Copyright (C) 2001-2003, 2005-2007, 2009-2021 Free Software Foundation, Inc.
+   Copyright (C) 2001-2003, 2005-2007, 2009-2022 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 c7c7eb455b..a8a6cd782d 100644
--- a/lib/gnulib.mk.in
+++ b/lib/gnulib.mk.in
@@ -1,5 +1,5 @@
 ## DO NOT EDIT! GENERATED AUTOMATICALLY!
-# Copyright (C) 2002-2021 Free Software Foundation, Inc.
+# Copyright (C) 2002-2022 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
@@ -202,6 +202,9 @@ COM_ERRLIB = @COM_ERRLIB@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CRYPTOLIB = @CRYPTOLIB@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXFLAGS = @CXXFLAGS@
 CYGWIN_OBJ = @CYGWIN_OBJ@
 C_SWITCH_MACHINE = @C_SWITCH_MACHINE@
 C_SWITCH_SYSTEM = @C_SWITCH_SYSTEM@
@@ -244,22 +247,26 @@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@
 GETOPT_H = @GETOPT_H@
 GFILENOTIFY_CFLAGS = @GFILENOTIFY_CFLAGS@
 GFILENOTIFY_LIBS = @GFILENOTIFY_LIBS@
-GL_COND_LIBTOOL = @GL_COND_LIBTOOL@
-GL_GENERATE_ALLOCA_H = @GL_GENERATE_ALLOCA_H@
-GL_GENERATE_BYTESWAP_H = @GL_GENERATE_BYTESWAP_H@
-GL_GENERATE_ERRNO_H = @GL_GENERATE_ERRNO_H@
-GL_GENERATE_EXECINFO_H = @GL_GENERATE_EXECINFO_H@
-GL_GENERATE_GMP_GMP_H = @GL_GENERATE_GMP_GMP_H@
-GL_GENERATE_IEEE754_H = @GL_GENERATE_IEEE754_H@
-GL_GENERATE_LIMITS_H = @GL_GENERATE_LIMITS_H@
-GL_GENERATE_MINI_GMP_H = @GL_GENERATE_MINI_GMP_H@
-GL_GENERATE_STDALIGN_H = @GL_GENERATE_STDALIGN_H@
-GL_GENERATE_STDDEF_H = @GL_GENERATE_STDDEF_H@
-GL_GENERATE_STDINT_H = @GL_GENERATE_STDINT_H@
+GL_COND_LIBTOOL_CONDITION = @GL_COND_LIBTOOL_CONDITION@
+GL_GENERATE_ALLOCA_H_CONDITION = @GL_GENERATE_ALLOCA_H_CONDITION@
+GL_GENERATE_BYTESWAP_H_CONDITION = @GL_GENERATE_BYTESWAP_H_CONDITION@
+GL_GENERATE_ERRNO_H_CONDITION = @GL_GENERATE_ERRNO_H_CONDITION@
+GL_GENERATE_EXECINFO_H_CONDITION = @GL_GENERATE_EXECINFO_H_CONDITION@
+GL_GENERATE_GETOPT_CDEFS_H_CONDITION = @GL_GENERATE_GETOPT_CDEFS_H_CONDITION@
+GL_GENERATE_GETOPT_H_CONDITION = @GL_GENERATE_GETOPT_H_CONDITION@
+GL_GENERATE_GMP_GMP_H_CONDITION = @GL_GENERATE_GMP_GMP_H_CONDITION@
+GL_GENERATE_GMP_H_CONDITION = @GL_GENERATE_GMP_H_CONDITION@
+GL_GENERATE_IEEE754_H_CONDITION = @GL_GENERATE_IEEE754_H_CONDITION@
+GL_GENERATE_LIMITS_H_CONDITION = @GL_GENERATE_LIMITS_H_CONDITION@
+GL_GENERATE_MINI_GMP_H_CONDITION = @GL_GENERATE_MINI_GMP_H_CONDITION@
+GL_GENERATE_STDALIGN_H_CONDITION = @GL_GENERATE_STDALIGN_H_CONDITION@
+GL_GENERATE_STDDEF_H_CONDITION = @GL_GENERATE_STDDEF_H_CONDITION@
+GL_GENERATE_STDINT_H_CONDITION = @GL_GENERATE_STDINT_H_CONDITION@
 GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@
 GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@
 GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@
 GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@
+GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@
 GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@
 GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@
 GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@
@@ -299,6 +306,7 @@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@
 GL_GNULIB_FGETC = @GL_GNULIB_FGETC@
 GL_GNULIB_FGETS = @GL_GNULIB_FGETS@
 GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@
+GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@
 GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@
 GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@
 GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@
@@ -334,6 +342,7 @@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@
 GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@
 GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@
 GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@
+GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@
 GL_GNULIB_GETRANDOM = @GL_GNULIB_GETRANDOM@
 GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@
 GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@
@@ -351,6 +360,7 @@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@
 GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@
 GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@
 GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@
+GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@
 GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@
 GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@
 GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@
@@ -460,6 +470,7 @@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@
 GL_GNULIB_READLINK = @GL_GNULIB_READLINK@
 GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@
 GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@
+GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@
 GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@
 GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@
 GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@
@@ -517,6 +528,7 @@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@
 GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@
 GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@
 GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@
+GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@
 GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@
 GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@
 GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@
@@ -561,12 +573,17 @@ GTK_CFLAGS = @GTK_CFLAGS@
 GTK_LIBS = @GTK_LIBS@
 GTK_OBJ = @GTK_OBJ@
 GZIP_PROG = @GZIP_PROG@
+HAIKU_CFLAGS = @HAIKU_CFLAGS@
+HAIKU_CXX_OBJ = @HAIKU_CXX_OBJ@
+HAIKU_LIBS = @HAIKU_LIBS@
+HAIKU_OBJ = @HAIKU_OBJ@
 HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@
 HARFBUZZ_LIBS = @HARFBUZZ_LIBS@
 HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@
 HAVE_ALLOCA_H = @HAVE_ALLOCA_H@
 HAVE_ALPHASORT = @HAVE_ALPHASORT@
 HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BE_APP = @HAVE_BE_APP@
 HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@
 HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
 HAVE_CHOWN = @HAVE_CHOWN@
@@ -600,6 +617,7 @@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@
 HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
 HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
 HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@
+HAVE_DECL_POSIX_SPAWN_SETSID = @HAVE_DECL_POSIX_SPAWN_SETSID@
 HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
 HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
 HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@
@@ -651,6 +669,7 @@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@
 HAVE_GETUMASK = @HAVE_GETUMASK@
 HAVE_GRANTPT = @HAVE_GRANTPT@
 HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@
+HAVE_GSETTINGS = @HAVE_GSETTINGS@
 HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@
 HAVE_INITSTATE = @HAVE_INITSTATE@
 HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
@@ -684,12 +703,17 @@ HAVE_OPENDIR = @HAVE_OPENDIR@
 HAVE_OS_H = @HAVE_OS_H@
 HAVE_PCLOSE = @HAVE_PCLOSE@
 HAVE_PDUMPER = @HAVE_PDUMPER@
+HAVE_PGTK = @HAVE_PGTK@
 HAVE_PIPE = @HAVE_PIPE@
 HAVE_PIPE2 = @HAVE_PIPE2@
 HAVE_POPEN = @HAVE_POPEN@
 HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@
 HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
 HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
+HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@
+HAVE_POSIX_SPAWNATTR_SETFLAGS = @HAVE_POSIX_SPAWNATTR_SETFLAGS@
+HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 
@HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@
+HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR_NP = 
@HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR_NP@
 HAVE_PREAD = @HAVE_PREAD@
 HAVE_PSELECT = @HAVE_PSELECT@
 HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@
@@ -726,6 +750,7 @@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
 HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
 HAVE_SIGSET_T = @HAVE_SIGSET_T@
 HAVE_SLEEP = @HAVE_SLEEP@
+HAVE_SPAWN_H = @HAVE_SPAWN_H@
 HAVE_STDINT_H = @HAVE_STDINT_H@
 HAVE_STPCPY = @HAVE_STPCPY@
 HAVE_STPNCPY = @HAVE_STPNCPY@
@@ -758,6 +783,7 @@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
 HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
 HAVE_TIMEGM = @HAVE_TIMEGM@
 HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@
+HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@
 HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@
 HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
 HAVE_UNISTD_H = @HAVE_UNISTD_H@
@@ -923,6 +949,8 @@ PATH_SEPARATOR = @PATH_SEPARATOR@
 PAXCTL = @PAXCTL@
 PAXCTL_dumped = @PAXCTL_dumped@
 PAXCTL_notdumped = @PAXCTL_notdumped@
+PGTK_LIBS = @PGTK_LIBS@
+PGTK_OBJ = @PGTK_OBJ@
 PKG_CONFIG = @PKG_CONFIG@
 PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
 PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
@@ -940,7 +968,8 @@ RALLOC_OBJ = @RALLOC_OBJ@
 RANLIB = @RANLIB@
 REPLACE_ACCESS = @REPLACE_ACCESS@
 REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@
-REPLACE_CALLOC = @REPLACE_CALLOC@
+REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@
+REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@
 REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
 REPLACE_CHOWN = @REPLACE_CHOWN@
 REPLACE_CLOSE = @REPLACE_CLOSE@
@@ -968,6 +997,7 @@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@
 REPLACE_FFLUSH = @REPLACE_FFLUSH@
 REPLACE_FFSLL = @REPLACE_FFSLL@
 REPLACE_FOPEN = @REPLACE_FOPEN@
+REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@
 REPLACE_FPRINTF = @REPLACE_FPRINTF@
 REPLACE_FPURGE = @REPLACE_FPURGE@
 REPLACE_FREE = @REPLACE_FREE@
@@ -989,6 +1019,7 @@ REPLACE_GETLINE = @REPLACE_GETLINE@
 REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
 REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
 REPLACE_GETPASS = @REPLACE_GETPASS@
+REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@
 REPLACE_GETRANDOM = @REPLACE_GETRANDOM@
 REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
 REPLACE_GMTIME = @REPLACE_GMTIME@
@@ -1001,7 +1032,8 @@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@
 REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
 REPLACE_LSEEK = @REPLACE_LSEEK@
 REPLACE_LSTAT = @REPLACE_LSTAT@
-REPLACE_MALLOC = @REPLACE_MALLOC@
+REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@
+REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@
 REPLACE_MBTOWC = @REPLACE_MBTOWC@
 REPLACE_MEMCHR = @REPLACE_MEMCHR@
 REPLACE_MEMMEM = @REPLACE_MEMMEM@
@@ -1036,8 +1068,9 @@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
 REPLACE_READ = @REPLACE_READ@
 REPLACE_READLINK = @REPLACE_READLINK@
 REPLACE_READLINKAT = @REPLACE_READLINKAT@
-REPLACE_REALLOC = @REPLACE_REALLOC@
 REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@
+REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@
+REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@
 REPLACE_REALPATH = @REPLACE_REALPATH@
 REPLACE_REMOVE = @REPLACE_REMOVE@
 REPLACE_RENAME = @REPLACE_RENAME@
@@ -1104,6 +1137,7 @@ SETTINGS_LIBS = @SETTINGS_LIBS@
 SHELL = @SHELL@
 SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
 SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
+SQLITE3_LIBS = @SQLITE3_LIBS@
 STDALIGN_H = @STDALIGN_H@
 STDDEF_H = @STDDEF_H@
 STDINT_H = @STDINT_H@
@@ -1132,6 +1166,8 @@ WARN_CFLAGS = @WARN_CFLAGS@
 WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
 WEBKIT_CFLAGS = @WEBKIT_CFLAGS@
 WEBKIT_LIBS = @WEBKIT_LIBS@
+WEBP_CFLAGS = @WEBP_CFLAGS@
+WEBP_LIBS = @WEBP_LIBS@
 WERROR_CFLAGS = @WERROR_CFLAGS@
 WIDGET_OBJ = @WIDGET_OBJ@
 WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
@@ -1153,6 +1189,8 @@ XFT_LIBS = @XFT_LIBS@
 XGSELOBJ = @XGSELOBJ@
 XINERAMA_CFLAGS = @XINERAMA_CFLAGS@
 XINERAMA_LIBS = @XINERAMA_LIBS@
+XINPUT_CFLAGS = @XINPUT_CFLAGS@
+XINPUT_LIBS = @XINPUT_LIBS@
 XMENU_OBJ = @XMENU_OBJ@
 XMKMF = @XMKMF@
 XOBJ = @XOBJ@
@@ -1162,6 +1200,7 @@ XRENDER_LIBS = @XRENDER_LIBS@
 XWIDGETS_OBJ = @XWIDGETS_OBJ@
 X_TOOLKIT_TYPE = @X_TOOLKIT_TYPE@
 ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
 ac_ct_OBJC = @ac_ct_OBJC@
 archlibdir = @archlibdir@
 bindir = @bindir@
@@ -1188,34 +1227,36 @@ exec_prefix = @exec_prefix@
 gamedir = @gamedir@
 gamegroup = @gamegroup@
 gameuser = @gameuser@
-gl_GNULIB_ENABLED_03e0aaad4cb89ca757653bd367a6ccb7 = 
@gl_GNULIB_ENABLED_03e0aaad4cb89ca757653bd367a6ccb7@
-gl_GNULIB_ENABLED_260941c0e5dc67ec9e87d1fb321c300b = 
@gl_GNULIB_ENABLED_260941c0e5dc67ec9e87d1fb321c300b@
-gl_GNULIB_ENABLED_5264294aa0a5557541b53c8c741f7f31 = 
@gl_GNULIB_ENABLED_5264294aa0a5557541b53c8c741f7f31@
-gl_GNULIB_ENABLED_6099e9737f757db36c47fa9d9f02e88c = 
@gl_GNULIB_ENABLED_6099e9737f757db36c47fa9d9f02e88c@
-gl_GNULIB_ENABLED_61bcaca76b3e6f9ae55d57a1c3193bc4 = 
@gl_GNULIB_ENABLED_61bcaca76b3e6f9ae55d57a1c3193bc4@
-gl_GNULIB_ENABLED_682e609604ccaac6be382e4ee3a4eaec = 
@gl_GNULIB_ENABLED_682e609604ccaac6be382e4ee3a4eaec@
-gl_GNULIB_ENABLED_925677f0343de64b89a9f0c790b4104c = 
@gl_GNULIB_ENABLED_925677f0343de64b89a9f0c790b4104c@
-gl_GNULIB_ENABLED_a9786850e999ae65a836a6041e8e5ed1 = 
@gl_GNULIB_ENABLED_a9786850e999ae65a836a6041e8e5ed1@
-gl_GNULIB_ENABLED_be453cec5eecf5731a274f2de7f2db36 = 
@gl_GNULIB_ENABLED_be453cec5eecf5731a274f2de7f2db36@
-gl_GNULIB_ENABLED_cloexec = @gl_GNULIB_ENABLED_cloexec@
-gl_GNULIB_ENABLED_d3b2383720ee0e541357aa2aac598e2b = 
@gl_GNULIB_ENABLED_d3b2383720ee0e541357aa2aac598e2b@
-gl_GNULIB_ENABLED_dirfd = @gl_GNULIB_ENABLED_dirfd@
-gl_GNULIB_ENABLED_dynarray = @gl_GNULIB_ENABLED_dynarray@
-gl_GNULIB_ENABLED_ef455225c00f5049c808c2eda3e76866 = 
@gl_GNULIB_ENABLED_ef455225c00f5049c808c2eda3e76866@
-gl_GNULIB_ENABLED_euidaccess = @gl_GNULIB_ENABLED_euidaccess@
-gl_GNULIB_ENABLED_getdtablesize = @gl_GNULIB_ENABLED_getdtablesize@
-gl_GNULIB_ENABLED_getgroups = @gl_GNULIB_ENABLED_getgroups@
-gl_GNULIB_ENABLED_lchmod = @gl_GNULIB_ENABLED_lchmod@
-gl_GNULIB_ENABLED_open = @gl_GNULIB_ENABLED_open@
-gl_GNULIB_ENABLED_rawmemchr = @gl_GNULIB_ENABLED_rawmemchr@
-gl_GNULIB_ENABLED_scratch_buffer = @gl_GNULIB_ENABLED_scratch_buffer@
-gl_GNULIB_ENABLED_strtoll = @gl_GNULIB_ENABLED_strtoll@
-gl_GNULIB_ENABLED_utimens = @gl_GNULIB_ENABLED_utimens@
+gl_GNULIB_ENABLED_03e0aaad4cb89ca757653bd367a6ccb7_CONDITION = 
@gl_GNULIB_ENABLED_03e0aaad4cb89ca757653bd367a6ccb7_CONDITION@
+gl_GNULIB_ENABLED_260941c0e5dc67ec9e87d1fb321c300b_CONDITION = 
@gl_GNULIB_ENABLED_260941c0e5dc67ec9e87d1fb321c300b_CONDITION@
+gl_GNULIB_ENABLED_5264294aa0a5557541b53c8c741f7f31_CONDITION = 
@gl_GNULIB_ENABLED_5264294aa0a5557541b53c8c741f7f31_CONDITION@
+gl_GNULIB_ENABLED_6099e9737f757db36c47fa9d9f02e88c_CONDITION = 
@gl_GNULIB_ENABLED_6099e9737f757db36c47fa9d9f02e88c_CONDITION@
+gl_GNULIB_ENABLED_61bcaca76b3e6f9ae55d57a1c3193bc4_CONDITION = 
@gl_GNULIB_ENABLED_61bcaca76b3e6f9ae55d57a1c3193bc4_CONDITION@
+gl_GNULIB_ENABLED_682e609604ccaac6be382e4ee3a4eaec_CONDITION = 
@gl_GNULIB_ENABLED_682e609604ccaac6be382e4ee3a4eaec_CONDITION@
+gl_GNULIB_ENABLED_925677f0343de64b89a9f0c790b4104c_CONDITION = 
@gl_GNULIB_ENABLED_925677f0343de64b89a9f0c790b4104c_CONDITION@
+gl_GNULIB_ENABLED_a9786850e999ae65a836a6041e8e5ed1_CONDITION = 
@gl_GNULIB_ENABLED_a9786850e999ae65a836a6041e8e5ed1_CONDITION@
+gl_GNULIB_ENABLED_be453cec5eecf5731a274f2de7f2db36_CONDITION = 
@gl_GNULIB_ENABLED_be453cec5eecf5731a274f2de7f2db36_CONDITION@
+gl_GNULIB_ENABLED_cloexec_CONDITION = @gl_GNULIB_ENABLED_cloexec_CONDITION@
+gl_GNULIB_ENABLED_d3b2383720ee0e541357aa2aac598e2b_CONDITION = 
@gl_GNULIB_ENABLED_d3b2383720ee0e541357aa2aac598e2b_CONDITION@
+gl_GNULIB_ENABLED_dirfd_CONDITION = @gl_GNULIB_ENABLED_dirfd_CONDITION@
+gl_GNULIB_ENABLED_dynarray_CONDITION = @gl_GNULIB_ENABLED_dynarray_CONDITION@
+gl_GNULIB_ENABLED_e80bf6f757095d2e5fc94dafb8f8fc8b_CONDITION = 
@gl_GNULIB_ENABLED_e80bf6f757095d2e5fc94dafb8f8fc8b_CONDITION@
+gl_GNULIB_ENABLED_ef455225c00f5049c808c2eda3e76866_CONDITION = 
@gl_GNULIB_ENABLED_ef455225c00f5049c808c2eda3e76866_CONDITION@
+gl_GNULIB_ENABLED_euidaccess_CONDITION = 
@gl_GNULIB_ENABLED_euidaccess_CONDITION@
+gl_GNULIB_ENABLED_getdtablesize_CONDITION = 
@gl_GNULIB_ENABLED_getdtablesize_CONDITION@
+gl_GNULIB_ENABLED_getgroups_CONDITION = @gl_GNULIB_ENABLED_getgroups_CONDITION@
+gl_GNULIB_ENABLED_lchmod_CONDITION = @gl_GNULIB_ENABLED_lchmod_CONDITION@
+gl_GNULIB_ENABLED_open_CONDITION = @gl_GNULIB_ENABLED_open_CONDITION@
+gl_GNULIB_ENABLED_rawmemchr_CONDITION = @gl_GNULIB_ENABLED_rawmemchr_CONDITION@
+gl_GNULIB_ENABLED_scratch_buffer_CONDITION = 
@gl_GNULIB_ENABLED_scratch_buffer_CONDITION@
+gl_GNULIB_ENABLED_strtoll_CONDITION = @gl_GNULIB_ENABLED_strtoll_CONDITION@
+gl_GNULIB_ENABLED_utimens_CONDITION = @gl_GNULIB_ENABLED_utimens_CONDITION@
 gl_LIBOBJS = @gl_LIBOBJS@
 gl_LTLIBOBJS = @gl_LTLIBOBJS@
 gltests_LIBOBJS = @gltests_LIBOBJS@
 gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
 gltests_WITNESS = @gltests_WITNESS@
+gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -1296,13 +1337,12 @@ BUILT_SOURCES += $(ALLOCA_H)
 
 # We need the following in order to create <alloca.h> when the system
 # doesn't have one that works with the given compiler.
-ifneq (,$(GL_GENERATE_ALLOCA_H))
+ifneq (,$(GL_GENERATE_ALLOCA_H_CONDITION))
 alloca.h: alloca.in.h $(top_builddir)/config.status
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's|@''HAVE_ALLOCA_H''@|$(HAVE_ALLOCA_H)|g' < 
$(srcdir)/alloca.in.h; \
-       } > $@-t && \
-       mv -f $@-t $@
+       $(gl_V_at)$(SED_HEADER_STDOUT) \
+         -e 's|@''HAVE_ALLOCA_H''@|$(HAVE_ALLOCA_H)|g' \
+         $(srcdir)/alloca.in.h > $@-t
+       $(AM_V_at)mv $@-t $@
 else
 alloca.h: $(top_builddir)/config.status
        rm -f $@
@@ -1327,7 +1367,7 @@ endif
 ## begin gnulib module at-internal
 ifeq (,$(OMIT_GNULIB_MODULE_at-internal))
 
-ifneq (,$(gl_GNULIB_ENABLED_260941c0e5dc67ec9e87d1fb321c300b))
+ifneq (,$(gl_GNULIB_ENABLED_260941c0e5dc67ec9e87d1fb321c300b_CONDITION))
 libgnu_a_SOURCES += openat-priv.h openat-proc.c
 
 endif
@@ -1358,13 +1398,10 @@ BUILT_SOURCES += $(BYTESWAP_H)
 
 # We need the following in order to create <byteswap.h> when the system
 # doesn't have one.
-ifneq (,$(GL_GENERATE_BYTESWAP_H))
+ifneq (,$(GL_GENERATE_BYTESWAP_H_CONDITION))
 byteswap.h: byteswap.in.h $(top_builddir)/config.status
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         cat $(srcdir)/byteswap.in.h; \
-       } > $@-t && \
-       mv -f $@-t $@
+       $(gl_V_at)$(SED_HEADER_TO_AT_t) $(srcdir)/byteswap.in.h
+       $(AM_V_at)mv $@-t $@
 else
 byteswap.h: $(top_builddir)/config.status
        rm -f $@
@@ -1416,7 +1453,7 @@ endif
 ## begin gnulib module cloexec
 ifeq (,$(OMIT_GNULIB_MODULE_cloexec))
 
-ifneq (,$(gl_GNULIB_ENABLED_cloexec))
+ifneq (,$(gl_GNULIB_ENABLED_cloexec_CONDITION))
 libgnu_a_SOURCES += cloexec.c
 
 endif
@@ -1540,9 +1577,8 @@ BUILT_SOURCES += dirent.h
 # We need the following in order to create <dirent.h> when the system
 # doesn't have one that works with the given compiler.
 dirent.h: dirent.in.h $(top_builddir)/config.status $(CXXDEFS_H) 
$(ARG_NONNULL_H) $(WARN_ON_USE_H)
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+       $(gl_V_at)$(SED_HEADER_STDOUT) \
+             -e 's|@''GUARD_PREFIX''@|GL|g' \
              -e 's|@''HAVE_DIRENT_H''@|$(HAVE_DIRENT_H)|g' \
              -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
              -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
@@ -1572,9 +1608,8 @@ dirent.h: dirent.in.h $(top_builddir)/config.status 
$(CXXDEFS_H) $(ARG_NONNULL_H
              -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
              -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
              -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
-             < $(srcdir)/dirent.in.h; \
-       } > $@-t && \
-       mv $@-t $@
+             $(srcdir)/dirent.in.h > $@-t
+       $(AM_V_at)mv $@-t $@
 MOSTLYCLEANFILES += dirent.h dirent.h-t
 
 EXTRA_DIST += dirent.in.h
@@ -1585,7 +1620,7 @@ endif
 ## begin gnulib module dirfd
 ifeq (,$(OMIT_GNULIB_MODULE_dirfd))
 
-ifneq (,$(gl_GNULIB_ENABLED_dirfd))
+ifneq (,$(gl_GNULIB_ENABLED_dirfd_CONDITION))
 
 endif
 EXTRA_DIST += dirfd.c
@@ -1629,31 +1664,28 @@ endif
 ## begin gnulib module dynarray
 ifeq (,$(OMIT_GNULIB_MODULE_dynarray))
 
-ifneq (,$(gl_GNULIB_ENABLED_dynarray))
+ifneq (,$(gl_GNULIB_ENABLED_dynarray_CONDITION))
 BUILT_SOURCES += malloc/dynarray.gl.h malloc/dynarray-skeleton.gl.h
 
 malloc/dynarray.gl.h: malloc/dynarray.h
-       $(AM_V_at)$(MKDIR_P) malloc
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e '/libc_hidden_proto/d' < $(srcdir)/malloc/dynarray.h; \
-       } > $@-t && \
-       mv $@-t $@
+       $(AM_V_GEN)$(MKDIR_P) 'malloc'
+       $(AM_V_at)$(SED_HEADER_STDOUT) \
+         -e '/libc_hidden_proto/d' \
+         $(srcdir)/malloc/dynarray.h > $@-t
+       $(AM_V_at)mv $@-t $@
 MOSTLYCLEANFILES += malloc/dynarray.gl.h malloc/dynarray.gl.h-t
 
 malloc/dynarray-skeleton.gl.h: malloc/dynarray-skeleton.c
-       $(AM_V_at)$(MKDIR_P) malloc
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's|<malloc/dynarray\.h>|<malloc/dynarray.gl.h>|g' \
+       $(AM_V_GEN)$(MKDIR_P) 'malloc'
+       $(AM_V_at)$(SED_HEADER_STDOUT) \
+             -e 's|<malloc/dynarray\.h>|<malloc/dynarray.gl.h>|g' \
              -e 's|__attribute_maybe_unused__|_GL_ATTRIBUTE_MAYBE_UNUSED|g' \
              -e 's|__attribute_nonnull__|_GL_ATTRIBUTE_NONNULL|g' \
              -e 's|__attribute_warn_unused_result__|_GL_ATTRIBUTE_NODISCARD|g' 
\
              -e 's|__glibc_likely|_GL_LIKELY|g' \
              -e 's|__glibc_unlikely|_GL_UNLIKELY|g' \
-             < $(srcdir)/malloc/dynarray-skeleton.c; \
-       } > $@-t && \
-       mv $@-t $@
+             $(srcdir)/malloc/dynarray-skeleton.c > $@-t
+       $(AM_V_at)mv $@-t $@
 MOSTLYCLEANFILES += malloc/dynarray-skeleton.gl.h 
malloc/dynarray-skeleton.gl.h-t
 
 libgnu_a_SOURCES += malloc/dynarray_at_failure.c                 
malloc/dynarray_emplace_enlarge.c                 malloc/dynarray_finalize.c    
             malloc/dynarray_resize.c                 
malloc/dynarray_resize_clear.c
@@ -1669,7 +1701,7 @@ endif
 ## begin gnulib module eloop-threshold
 ifeq (,$(OMIT_GNULIB_MODULE_eloop-threshold))
 
-ifneq (,$(gl_GNULIB_ENABLED_925677f0343de64b89a9f0c790b4104c))
+ifneq (,$(gl_GNULIB_ENABLED_925677f0343de64b89a9f0c790b4104c_CONDITION))
 
 endif
 EXTRA_DIST += eloop-threshold.h
@@ -1684,11 +1716,10 @@ BUILT_SOURCES += $(ERRNO_H)
 
 # We need the following in order to create <errno.h> when the system
 # doesn't have one that is POSIX compliant.
-ifneq (,$(GL_GENERATE_ERRNO_H))
+ifneq (,$(GL_GENERATE_ERRNO_H_CONDITION))
 errno.h: errno.in.h $(top_builddir)/config.status
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+       $(gl_V_at)$(SED_HEADER_STDOUT) \
+             -e 's|@''GUARD_PREFIX''@|GL|g' \
              -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
              -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
              -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
@@ -1699,9 +1730,8 @@ errno.h: errno.in.h $(top_builddir)/config.status
              -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \
              -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \
              -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \
-             < $(srcdir)/errno.in.h; \
-       } > $@-t && \
-       mv $@-t $@
+             $(srcdir)/errno.in.h > $@-t
+       $(AM_V_at)mv $@-t $@
 else
 errno.h: $(top_builddir)/config.status
        rm -f $@
@@ -1716,7 +1746,7 @@ endif
 ## begin gnulib module euidaccess
 ifeq (,$(OMIT_GNULIB_MODULE_euidaccess))
 
-ifneq (,$(gl_GNULIB_ENABLED_euidaccess))
+ifneq (,$(gl_GNULIB_ENABLED_euidaccess_CONDITION))
 
 endif
 EXTRA_DIST += euidaccess.c
@@ -1733,13 +1763,10 @@ BUILT_SOURCES += $(EXECINFO_H)
 
 # We need the following in order to create <execinfo.h> when the system
 # doesn't have one that works.
-ifneq (,$(GL_GENERATE_EXECINFO_H))
+ifneq (,$(GL_GENERATE_EXECINFO_H_CONDITION))
 execinfo.h: execinfo.in.h $(top_builddir)/config.status
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         cat $(srcdir)/execinfo.in.h; \
-       } > $@-t && \
-       mv $@-t $@
+       $(gl_V_at)$(SED_HEADER_TO_AT_t) $(srcdir)/execinfo.in.h
+       $(AM_V_at)mv $@-t $@
 else
 execinfo.h: $(top_builddir)/config.status
        rm -f $@
@@ -1805,9 +1832,8 @@ BUILT_SOURCES += fcntl.h
 # We need the following in order to create <fcntl.h> when the system
 # doesn't have one that works with the given compiler.
 fcntl.h: fcntl.in.h $(top_builddir)/config.status $(CXXDEFS_H) 
$(ARG_NONNULL_H) $(WARN_ON_USE_H)
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+       $(gl_V_at)$(SED_HEADER_STDOUT) \
+             -e 's|@''GUARD_PREFIX''@|GL|g' \
              -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
              -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
              -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
@@ -1828,9 +1854,8 @@ fcntl.h: fcntl.in.h $(top_builddir)/config.status 
$(CXXDEFS_H) $(ARG_NONNULL_H)
              -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
              -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
              -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
-             < $(srcdir)/fcntl.in.h; \
-       } > $@-t && \
-       mv $@-t $@
+             $(srcdir)/fcntl.in.h > $@-t
+       $(AM_V_at)mv $@-t $@
 MOSTLYCLEANFILES += fcntl.h fcntl.h-t
 
 EXTRA_DIST += fcntl.in.h
@@ -1963,10 +1988,31 @@ EXTRA_libgnu_a_SOURCES += futimens.c
 endif
 ## end   gnulib module futimens
 
+## begin gnulib module gen-header
+ifeq (,$(OMIT_GNULIB_MODULE_gen-header))
+
+# In 'sed', replace the pattern space with a "DO NOT EDIT" comment.
+SED_HEADER_NOEDIT = s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,
+
+# '$(SED_HEADER_STDOUT) -e "..."' runs 'sed' but first outputs "DO NOT EDIT".
+SED_HEADER_STDOUT = sed -e 1h -e '1$(SED_HEADER_NOEDIT)' -e 1G
+
+# '$(SED_HEADER_TO_AT_t) FILE' copies FILE to $@-t, prepending a leading
+# "DO_NOT_EDIT".  Although this could be done more simply via:
+#      SED_HEADER_TO_AT_t = $(SED_HEADER_STDOUT) > $@-t
+# the -n and 'w' avoid a fork+exec, at least when GNU Make is used.
+SED_HEADER_TO_AT_t = $(SED_HEADER_STDOUT) -n -e 'w $@-t'
+
+# Use $(gl_V_at) instead of $(AM_V_GEN) or $(AM_V_at) on a line that
+gl_V_at = $(AM_V_GEN)
+
+endif
+## end   gnulib module gen-header
+
 ## begin gnulib module getdtablesize
 ifeq (,$(OMIT_GNULIB_MODULE_getdtablesize))
 
-ifneq (,$(gl_GNULIB_ENABLED_getdtablesize))
+ifneq (,$(gl_GNULIB_ENABLED_getdtablesize_CONDITION))
 
 endif
 EXTRA_DIST += getdtablesize.c
@@ -1979,7 +2025,7 @@ endif
 ## begin gnulib module getgroups
 ifeq (,$(OMIT_GNULIB_MODULE_getgroups))
 
-ifneq (,$(gl_GNULIB_ENABLED_getgroups))
+ifneq (,$(gl_GNULIB_ENABLED_getgroups_CONDITION))
 
 endif
 EXTRA_DIST += getgroups.c
@@ -2007,27 +2053,33 @@ BUILT_SOURCES += $(GETOPT_H) $(GETOPT_CDEFS_H)
 
 # We need the following in order to create <getopt.h> when the system
 # doesn't have one that works with the given compiler.
+ifneq (,$(GL_GENERATE_GETOPT_H_CONDITION))
 getopt.h: getopt.in.h $(top_builddir)/config.status $(ARG_NONNULL_H)
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+       $(gl_V_at)$(SED_HEADER_STDOUT) \
+             -e 's|@''GUARD_PREFIX''@|GL|g' \
              -e 's|@''HAVE_GETOPT_H''@|$(HAVE_GETOPT_H)|g' \
              -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
              -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
              -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
              -e 's|@''NEXT_GETOPT_H''@|$(NEXT_GETOPT_H)|g' \
              -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-             < $(srcdir)/getopt.in.h; \
-       } > $@-t && \
-       mv -f $@-t $@
+             $(srcdir)/getopt.in.h > $@-t
+       $(AM_V_at)mv $@-t $@
+else
+getopt.h: $(top_builddir)/config.status
+       rm -f $@
+endif
 
+ifneq (,$(GL_GENERATE_GETOPT_CDEFS_H_CONDITION))
 getopt-cdefs.h: getopt-cdefs.in.h $(top_builddir)/config.status
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-          sed -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \
-             < $(srcdir)/getopt-cdefs.in.h; \
-       } > $@-t && \
-       mv -f $@-t $@
+       $(AM_V_GEN)$(SED_HEADER_STDOUT) \
+         -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \
+         $(srcdir)/getopt-cdefs.in.h > $@-t
+       $(AM_V_at)mv $@-t $@
+else
+getopt-cdefs.h: $(top_builddir)/config.status
+       rm -f $@
+endif
 
 MOSTLYCLEANFILES += getopt.h getopt.h-t getopt-cdefs.h getopt-cdefs.h-t
 
@@ -2052,7 +2104,7 @@ endif
 ## begin gnulib module gettext-h
 ifeq (,$(OMIT_GNULIB_MODULE_gettext-h))
 
-ifneq (,$(gl_GNULIB_ENABLED_be453cec5eecf5731a274f2de7f2db36))
+ifneq (,$(gl_GNULIB_ENABLED_be453cec5eecf5731a274f2de7f2db36_CONDITION))
 libgnu_a_SOURCES += gettext.h
 
 endif
@@ -2090,7 +2142,7 @@ endif
 ## begin gnulib module group-member
 ifeq (,$(OMIT_GNULIB_MODULE_group-member))
 
-ifneq (,$(gl_GNULIB_ENABLED_a9786850e999ae65a836a6041e8e5ed1))
+ifneq (,$(gl_GNULIB_ENABLED_a9786850e999ae65a836a6041e8e5ed1_CONDITION))
 
 endif
 EXTRA_DIST += group-member.c
@@ -2115,14 +2167,12 @@ BUILT_SOURCES += $(IEEE754_H)
 
 # We need the following in order to create <ieee754.h> when the system
 # doesn't have one that works with the given compiler.
-ifneq (,$(GL_GENERATE_IEEE754_H))
+ifneq (,$(GL_GENERATE_IEEE754_H_CONDITION))
 ieee754.h: ieee754.in.h $(top_builddir)/config.status
-       $(AM_V_GEN)rm -f $@-t && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's/ifndef _GL_GNULIB_HEADER/if 0/g' \
-           $(srcdir)/ieee754.in.h; \
-       } > $@-t && \
-       mv -f $@-t $@
+       $(gl_V_at)$(SED_HEADER_STDOUT) \
+         -e 's/ifndef _GL_GNULIB_HEADER/if 0/g' \
+         $(srcdir)/ieee754.in.h > $@-t
+       $(AM_V_at)mv $@-t $@
 else
 ieee754.h: $(top_builddir)/config.status
        rm -f $@
@@ -2160,9 +2210,8 @@ BUILT_SOURCES += inttypes.h
 # We need the following in order to create <inttypes.h> when the system
 # doesn't have one that works with the given compiler.
 inttypes.h: inttypes.in.h $(top_builddir)/config.status $(CXXDEFS_H) 
$(WARN_ON_USE_H) $(ARG_NONNULL_H)
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
+       $(gl_V_at)$(SED_HEADER_STDOUT) \
+             -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
              -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
              -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
              -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
@@ -2187,9 +2236,8 @@ inttypes.h: inttypes.in.h $(top_builddir)/config.status 
$(CXXDEFS_H) $(WARN_ON_U
              -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
              -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
              -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
-             < $(srcdir)/inttypes.in.h; \
-       } > $@-t && \
-       mv $@-t $@
+             $(srcdir)/inttypes.in.h > $@-t
+       $(AM_V_at)mv $@-t $@
 MOSTLYCLEANFILES += inttypes.h inttypes.h-t
 
 EXTRA_DIST += inttypes.in.h
@@ -2200,7 +2248,7 @@ endif
 ## begin gnulib module lchmod
 ifeq (,$(OMIT_GNULIB_MODULE_lchmod))
 
-ifneq (,$(gl_GNULIB_ENABLED_lchmod))
+ifneq (,$(gl_GNULIB_ENABLED_lchmod_CONDITION))
 
 endif
 EXTRA_DIST += lchmod.c
@@ -2224,22 +2272,23 @@ ifeq (,$(OMIT_GNULIB_MODULE_libgmp))
 
 BUILT_SOURCES += $(GMP_H)
 
-ifneq (,$(GL_GENERATE_MINI_GMP_H))
+ifneq (,$(GL_GENERATE_GMP_H_CONDITION))
+ifneq (,$(GL_GENERATE_MINI_GMP_H_CONDITION))
 # Build gmp.h as a wrapper for mini-gmp.h when using mini-gmp.
 gmp.h: $(top_builddir)/config.status
-       echo '#include "mini-gmp.h"' >$@-t
+       echo '#include "mini-gmp.h"' > $@-t
        mv $@-t $@
-else
-ifneq (,$(GL_GENERATE_GMP_GMP_H))
+endif
+ifneq (,$(GL_GENERATE_GMP_GMP_H_CONDITION))
 # Build gmp.h as a wrapper for gmp/gmp.h.
 gmp.h: $(top_builddir)/config.status
-       echo '#include <gmp/gmp.h>' >$@-t
+       echo '#include <gmp/gmp.h>' > $@-t
        mv $@-t $@
+endif
 else
 gmp.h: $(top_builddir)/config.status
        rm -f $@
 endif
-endif
 MOSTLYCLEANFILES += gmp.h gmp.h-t
 
 EXTRA_DIST += mini-gmp-gnulib.c mini-gmp.c mini-gmp.h
@@ -2256,18 +2305,16 @@ BUILT_SOURCES += $(LIMITS_H)
 
 # We need the following in order to create <limits.h> when the system
 # doesn't have one that is compatible with GNU.
-ifneq (,$(GL_GENERATE_LIMITS_H))
+ifneq (,$(GL_GENERATE_LIMITS_H_CONDITION))
 limits.h: limits.in.h $(top_builddir)/config.status
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+       $(gl_V_at)$(SED_HEADER_STDOUT) \
+             -e 's|@''GUARD_PREFIX''@|GL|g' \
              -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
              -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
              -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
              -e 's|@''NEXT_LIMITS_H''@|$(NEXT_LIMITS_H)|g' \
-             < $(srcdir)/limits.in.h; \
-       } > $@-t && \
-       mv $@-t $@
+             $(srcdir)/limits.in.h > $@-t
+       $(AM_V_at)mv $@-t $@
 else
 limits.h: $(top_builddir)/config.status
        rm -f $@
@@ -2290,10 +2337,23 @@ EXTRA_libgnu_a_SOURCES += lstat.c
 endif
 ## end   gnulib module lstat
 
+## begin gnulib module malloc-gnu
+ifeq (,$(OMIT_GNULIB_MODULE_malloc-gnu))
+
+ifneq (,$(gl_GNULIB_ENABLED_e80bf6f757095d2e5fc94dafb8f8fc8b_CONDITION))
+
+endif
+EXTRA_DIST += malloc.c
+
+EXTRA_libgnu_a_SOURCES += malloc.c
+
+endif
+## end   gnulib module malloc-gnu
+
 ## begin gnulib module malloc-posix
 ifeq (,$(OMIT_GNULIB_MODULE_malloc-posix))
 
-ifneq (,$(gl_GNULIB_ENABLED_ef455225c00f5049c808c2eda3e76866))
+ifneq (,$(gl_GNULIB_ENABLED_ef455225c00f5049c808c2eda3e76866_CONDITION))
 
 endif
 EXTRA_DIST += malloc.c
@@ -2369,7 +2429,7 @@ endif
 ## begin gnulib module mktime-internal
 ifeq (,$(OMIT_GNULIB_MODULE_mktime-internal))
 
-ifneq (,$(gl_GNULIB_ENABLED_5264294aa0a5557541b53c8c741f7f31))
+ifneq (,$(gl_GNULIB_ENABLED_5264294aa0a5557541b53c8c741f7f31_CONDITION))
 
 endif
 EXTRA_DIST += mktime-internal.h mktime.c
@@ -2402,7 +2462,7 @@ endif
 ## begin gnulib module open
 ifeq (,$(OMIT_GNULIB_MODULE_open))
 
-ifneq (,$(gl_GNULIB_ENABLED_open))
+ifneq (,$(gl_GNULIB_ENABLED_open_CONDITION))
 
 endif
 EXTRA_DIST += open.c
@@ -2415,7 +2475,7 @@ endif
 ## begin gnulib module openat-h
 ifeq (,$(OMIT_GNULIB_MODULE_openat-h))
 
-ifneq (,$(gl_GNULIB_ENABLED_03e0aaad4cb89ca757653bd367a6ccb7))
+ifneq (,$(gl_GNULIB_ENABLED_03e0aaad4cb89ca757653bd367a6ccb7_CONDITION))
 
 endif
 EXTRA_DIST += openat.h
@@ -2473,7 +2533,7 @@ endif
 ## begin gnulib module rawmemchr
 ifeq (,$(OMIT_GNULIB_MODULE_rawmemchr))
 
-ifneq (,$(gl_GNULIB_ENABLED_rawmemchr))
+ifneq (,$(gl_GNULIB_ENABLED_rawmemchr_CONDITION))
 
 endif
 EXTRA_DIST += rawmemchr.c rawmemchr.valgrind
@@ -2508,7 +2568,7 @@ endif
 ## begin gnulib module realloc-gnu
 ifeq (,$(OMIT_GNULIB_MODULE_realloc-gnu))
 
-ifneq (,$(gl_GNULIB_ENABLED_d3b2383720ee0e541357aa2aac598e2b))
+ifneq (,$(gl_GNULIB_ENABLED_d3b2383720ee0e541357aa2aac598e2b_CONDITION))
 
 endif
 EXTRA_DIST += realloc.c
@@ -2521,7 +2581,7 @@ endif
 ## begin gnulib module realloc-posix
 ifeq (,$(OMIT_GNULIB_MODULE_realloc-posix))
 
-ifneq (,$(gl_GNULIB_ENABLED_61bcaca76b3e6f9ae55d57a1c3193bc4))
+ifneq (,$(gl_GNULIB_ENABLED_61bcaca76b3e6f9ae55d57a1c3193bc4_CONDITION))
 
 endif
 EXTRA_DIST += realloc.c
@@ -2545,7 +2605,7 @@ endif
 ## begin gnulib module root-uid
 ifeq (,$(OMIT_GNULIB_MODULE_root-uid))
 
-ifneq (,$(gl_GNULIB_ENABLED_6099e9737f757db36c47fa9d9f02e88c))
+ifneq (,$(gl_GNULIB_ENABLED_6099e9737f757db36c47fa9d9f02e88c_CONDITION))
 
 endif
 EXTRA_DIST += root-uid.h
@@ -2556,20 +2616,18 @@ endif
 ## begin gnulib module scratch_buffer
 ifeq (,$(OMIT_GNULIB_MODULE_scratch_buffer))
 
-ifneq (,$(gl_GNULIB_ENABLED_scratch_buffer))
+ifneq (,$(gl_GNULIB_ENABLED_scratch_buffer_CONDITION))
 BUILT_SOURCES += malloc/scratch_buffer.gl.h
 
 malloc/scratch_buffer.gl.h: malloc/scratch_buffer.h
-       $(AM_V_at)$(MKDIR_P) malloc
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's|__always_inline|inline _GL_ATTRIBUTE_ALWAYS_INLINE|g' \
+       $(AM_V_GEN)$(MKDIR_P) 'malloc'
+       $(AM_V_at)$(SED_HEADER_STDOUT) \
+             -e 's|__always_inline|inline _GL_ATTRIBUTE_ALWAYS_INLINE|g' \
              -e 's|__glibc_likely|_GL_LIKELY|g' \
              -e 's|__glibc_unlikely|_GL_UNLIKELY|g' \
              -e '/libc_hidden_proto/d' \
-             < $(srcdir)/malloc/scratch_buffer.h; \
-       } > $@-t && \
-       mv $@-t $@
+             $(srcdir)/malloc/scratch_buffer.h > $@-t
+       $(AM_V_at)mv $@-t $@
 MOSTLYCLEANFILES += malloc/scratch_buffer.gl.h malloc/scratch_buffer.gl.h-t
 
 libgnu_a_SOURCES += malloc/scratch_buffer_dupfree.c                 
malloc/scratch_buffer_grow.c                 
malloc/scratch_buffer_grow_preserve.c                 
malloc/scratch_buffer_set_array_size.c
@@ -2610,9 +2668,8 @@ BUILT_SOURCES += signal.h
 # We need the following in order to create <signal.h> when the system
 # doesn't have a complete one.
 signal.h: signal.in.h $(top_builddir)/config.status $(CXXDEFS_H) 
$(ARG_NONNULL_H) $(WARN_ON_USE_H)
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+       $(gl_V_at)$(SED_HEADER_STDOUT) \
+             -e 's|@''GUARD_PREFIX''@|GL|g' \
              -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
              -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
              -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
@@ -2636,9 +2693,8 @@ signal.h: signal.in.h $(top_builddir)/config.status 
$(CXXDEFS_H) $(ARG_NONNULL_H
              -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
              -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
              -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
-             < $(srcdir)/signal.in.h; \
-       } > $@-t && \
-       mv $@-t $@
+             $(srcdir)/signal.in.h > $@-t
+       $(AM_V_at)mv $@-t $@
 MOSTLYCLEANFILES += signal.h signal.h-t
 
 EXTRA_DIST += signal.in.h
@@ -2719,13 +2775,10 @@ BUILT_SOURCES += $(STDALIGN_H)
 
 # We need the following in order to create <stdalign.h> when the system
 # doesn't have one that works.
-ifneq (,$(GL_GENERATE_STDALIGN_H))
+ifneq (,$(GL_GENERATE_STDALIGN_H_CONDITION))
 stdalign.h: stdalign.in.h $(top_builddir)/config.status
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         cat $(srcdir)/stdalign.in.h; \
-       } > $@-t && \
-       mv $@-t $@
+       $(gl_V_at)$(SED_HEADER_TO_AT_t) $(srcdir)/stdalign.in.h
+       $(AM_V_at)mv $@-t $@
 else
 stdalign.h: $(top_builddir)/config.status
        rm -f $@
@@ -2744,11 +2797,10 @@ BUILT_SOURCES += $(STDDEF_H)
 
 # We need the following in order to create <stddef.h> when the system
 # doesn't have one that works with the given compiler.
-ifneq (,$(GL_GENERATE_STDDEF_H))
+ifneq (,$(GL_GENERATE_STDDEF_H_CONDITION))
 stddef.h: stddef.in.h $(top_builddir)/config.status
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+       $(gl_V_at)$(SED_HEADER_STDOUT) \
+             -e 's|@''GUARD_PREFIX''@|GL|g' \
              -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
              -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
              -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
@@ -2756,9 +2808,8 @@ stddef.h: stddef.in.h $(top_builddir)/config.status
              -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \
              -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
              -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
-             < $(srcdir)/stddef.in.h; \
-       } > $@-t && \
-       mv $@-t $@
+             $(srcdir)/stddef.in.h > $@-t
+       $(AM_V_at)mv $@-t $@
 else
 stddef.h: $(top_builddir)/config.status
        rm -f $@
@@ -2777,11 +2828,10 @@ BUILT_SOURCES += $(STDINT_H)
 
 # We need the following in order to create <stdint.h> when the system
 # doesn't have one that works with the given compiler.
-ifneq (,$(GL_GENERATE_STDINT_H))
+ifneq (,$(GL_GENERATE_STDINT_H_CONDITION))
 stdint.h: stdint.in.h $(top_builddir)/config.status
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+       $(gl_V_at)$(SED_HEADER_STDOUT) \
+             -e 's|@''GUARD_PREFIX''@|GL|g' \
              -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
              -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
              -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
@@ -2808,9 +2858,8 @@ stdint.h: stdint.in.h $(top_builddir)/config.status
              -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
              -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
              -e 
's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \
-             < $(srcdir)/stdint.in.h; \
-       } > $@-t && \
-       mv $@-t $@
+             $(srcdir)/stdint.in.h > $@-t
+       $(AM_V_at)mv $@-t $@
 else
 stdint.h: $(top_builddir)/config.status
        rm -f $@
@@ -2830,9 +2879,8 @@ BUILT_SOURCES += stdio.h
 # We need the following in order to create <stdio.h> when the system
 # doesn't have one that works with the given compiler.
 stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) 
$(ARG_NONNULL_H) $(WARN_ON_USE_H)
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+       $(gl_V_at)$(SED_HEADER_STDOUT) \
+             -e 's|@''GUARD_PREFIX''@|GL|g' \
              -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
              -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
              -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
@@ -2844,6 +2892,7 @@ stdio.h: stdio.in.h $(top_builddir)/config.status 
$(CXXDEFS_H) $(ARG_NONNULL_H)
              -e 's/@''GNULIB_FGETC''@/$(GL_GNULIB_FGETC)/g' \
              -e 's/@''GNULIB_FGETS''@/$(GL_GNULIB_FGETS)/g' \
              -e 's/@''GNULIB_FOPEN''@/$(GL_GNULIB_FOPEN)/g' \
+             -e 's/@''GNULIB_FOPEN_GNU''@/$(GL_GNULIB_FOPEN_GNU)/g' \
              -e 's/@''GNULIB_FPRINTF''@/$(GL_GNULIB_FPRINTF)/g' \
              -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GL_GNULIB_FPRINTF_POSIX)/g' \
              -e 's/@''GNULIB_FPURGE''@/$(GL_GNULIB_FPURGE)/g' \
@@ -2919,6 +2968,7 @@ stdio.h: stdio.in.h $(top_builddir)/config.status 
$(CXXDEFS_H) $(ARG_NONNULL_H)
              -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \
              -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \
              -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \
+             -e 
's|@''REPLACE_FOPEN_FOR_FOPEN_GNU''@|$(REPLACE_FOPEN_FOR_FOPEN_GNU)|g' \
              -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \
              -e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \
              -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \
@@ -2949,9 +2999,9 @@ stdio.h: stdio.in.h $(top_builddir)/config.status 
$(CXXDEFS_H) $(ARG_NONNULL_H)
              -e 's|@''ASM_SYMBOL_PREFIX''@|$(ASM_SYMBOL_PREFIX)|g' \
              -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
              -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
-       } > $@-t && \
-       mv $@-t $@
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+             > $@-t
+       $(AM_V_at)mv $@-t $@
 MOSTLYCLEANFILES += stdio.h stdio.h-t
 
 EXTRA_DIST += stdio.in.h
@@ -2968,9 +3018,8 @@ BUILT_SOURCES += stdlib.h
 # doesn't have one that works with the given compiler.
 stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \
   $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+       $(gl_V_at)$(SED_HEADER_STDOUT) \
+             -e 's|@''GUARD_PREFIX''@|GL|g' \
              -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
              -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
              -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
@@ -2978,12 +3027,14 @@ stdlib.h: stdlib.in.h $(top_builddir)/config.status 
$(CXXDEFS_H) \
              -e 's/@''GNULIB__EXIT''@/$(GL_GNULIB__EXIT)/g' \
              -e 's/@''GNULIB_ALIGNED_ALLOC''@/$(GL_GNULIB_ALIGNED_ALLOC)/g' \
              -e 's/@''GNULIB_ATOLL''@/$(GL_GNULIB_ATOLL)/g' \
+             -e 's/@''GNULIB_CALLOC_GNU''@/$(GL_GNULIB_CALLOC_GNU)/g' \
              -e 's/@''GNULIB_CALLOC_POSIX''@/$(GL_GNULIB_CALLOC_POSIX)/g' \
              -e 
's/@''GNULIB_CANONICALIZE_FILE_NAME''@/$(GL_GNULIB_CANONICALIZE_FILE_NAME)/g' \
              -e 's/@''GNULIB_FREE_POSIX''@/$(GL_GNULIB_FREE_POSIX)/g' \
              -e 's/@''GNULIB_GETLOADAVG''@/$(GL_GNULIB_GETLOADAVG)/g' \
              -e 's/@''GNULIB_GETSUBOPT''@/$(GL_GNULIB_GETSUBOPT)/g' \
              -e 's/@''GNULIB_GRANTPT''@/$(GL_GNULIB_GRANTPT)/g' \
+             -e 's/@''GNULIB_MALLOC_GNU''@/$(GL_GNULIB_MALLOC_GNU)/g' \
              -e 's/@''GNULIB_MALLOC_POSIX''@/$(GL_GNULIB_MALLOC_POSIX)/g' \
              -e 's/@''GNULIB_MBTOWC''@/$(GL_GNULIB_MBTOWC)/g' \
              -e 's/@''GNULIB_MKDTEMP''@/$(GL_GNULIB_MKDTEMP)/g' \
@@ -2999,6 +3050,7 @@ stdlib.h: stdlib.in.h $(top_builddir)/config.status 
$(CXXDEFS_H) \
              -e 's/@''GNULIB_QSORT_R''@/$(GL_GNULIB_QSORT_R)/g' \
              -e 's/@''GNULIB_RANDOM''@/$(GL_GNULIB_RANDOM)/g' \
              -e 's/@''GNULIB_RANDOM_R''@/$(GL_GNULIB_RANDOM_R)/g' \
+             -e 's/@''GNULIB_REALLOC_GNU''@/$(GL_GNULIB_REALLOC_GNU)/g' \
              -e 's/@''GNULIB_REALLOC_POSIX''@/$(GL_GNULIB_REALLOC_POSIX)/g' \
              -e 's/@''GNULIB_REALLOCARRAY''@/$(GL_GNULIB_REALLOCARRAY)/g' \
              -e 's/@''GNULIB_REALPATH''@/$(GL_GNULIB_REALPATH)/g' \
@@ -3065,11 +3117,13 @@ stdlib.h: stdlib.in.h $(top_builddir)/config.status 
$(CXXDEFS_H) \
              -e 's|@''HAVE_UNLOCKPT''@|$(HAVE_UNLOCKPT)|g' \
              -e 's|@''HAVE_DECL_UNSETENV''@|$(HAVE_DECL_UNSETENV)|g' \
              -e 's|@''REPLACE_ALIGNED_ALLOC''@|$(REPLACE_ALIGNED_ALLOC)|g' \
-             -e 's|@''REPLACE_CALLOC''@|$(REPLACE_CALLOC)|g' \
+             -e 
's|@''REPLACE_CALLOC_FOR_CALLOC_GNU''@|$(REPLACE_CALLOC_FOR_CALLOC_GNU)|g' \
+             -e 
's|@''REPLACE_CALLOC_FOR_CALLOC_POSIX''@|$(REPLACE_CALLOC_FOR_CALLOC_POSIX)|g' \
              -e 
's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \
              -e 's|@''REPLACE_FREE''@|$(REPLACE_FREE)|g' \
              -e 's|@''REPLACE_INITSTATE''@|$(REPLACE_INITSTATE)|g' \
-             -e 's|@''REPLACE_MALLOC''@|$(REPLACE_MALLOC)|g' \
+             -e 
's|@''REPLACE_MALLOC_FOR_MALLOC_GNU''@|$(REPLACE_MALLOC_FOR_MALLOC_GNU)|g' \
+             -e 
's|@''REPLACE_MALLOC_FOR_MALLOC_POSIX''@|$(REPLACE_MALLOC_FOR_MALLOC_POSIX)|g' \
              -e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \
              -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \
              -e 's|@''REPLACE_POSIX_MEMALIGN''@|$(REPLACE_POSIX_MEMALIGN)|g' \
@@ -3079,7 +3133,8 @@ stdlib.h: stdlib.in.h $(top_builddir)/config.status 
$(CXXDEFS_H) \
              -e 's|@''REPLACE_QSORT_R''@|$(REPLACE_QSORT_R)|g' \
              -e 's|@''REPLACE_RANDOM''@|$(REPLACE_RANDOM)|g' \
              -e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \
-             -e 's|@''REPLACE_REALLOC''@|$(REPLACE_REALLOC)|g' \
+             -e 
's|@''REPLACE_REALLOC_FOR_REALLOC_GNU''@|$(REPLACE_REALLOC_FOR_REALLOC_GNU)|g' \
+             -e 
's|@''REPLACE_REALLOC_FOR_REALLOC_POSIX''@|$(REPLACE_REALLOC_FOR_REALLOC_POSIX)|g'
 \
              -e 's|@''REPLACE_REALLOCARRAY''@|$(REPLACE_REALLOCARRAY)|g' \
              -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \
              -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \
@@ -3095,9 +3150,9 @@ stdlib.h: stdlib.in.h $(top_builddir)/config.status 
$(CXXDEFS_H) \
              -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
              -e '/definition of _Noreturn/r $(_NORETURN_H)' \
              -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
-       } > $@-t && \
-       mv $@-t $@
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+             > $@-t
+       $(AM_V_at)mv $@-t $@
 MOSTLYCLEANFILES += stdlib.h stdlib.h-t
 
 EXTRA_DIST += stdlib.in.h
@@ -3124,9 +3179,8 @@ BUILT_SOURCES += string.h
 # We need the following in order to create <string.h> when the system
 # doesn't have one that works with the given compiler.
 string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) 
$(ARG_NONNULL_H) $(WARN_ON_USE_H)
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+       $(gl_V_at)$(SED_HEADER_STDOUT) \
+             -e 's|@''GUARD_PREFIX''@|GL|g' \
              -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
              -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
              -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
@@ -3220,10 +3274,9 @@ string.h: string.in.h $(top_builddir)/config.status 
$(CXXDEFS_H) $(ARG_NONNULL_H
              -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \
              -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
              -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
-             < $(srcdir)/string.in.h; \
-       } > $@-t && \
-       mv $@-t $@
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+             > $@-t
+       $(AM_V_at)mv $@-t $@
 MOSTLYCLEANFILES += string.h string.h-t
 
 EXTRA_DIST += string.in.h
@@ -3256,7 +3309,7 @@ endif
 ## begin gnulib module strtoll
 ifeq (,$(OMIT_GNULIB_MODULE_strtoll))
 
-ifneq (,$(gl_GNULIB_ENABLED_strtoll))
+ifneq (,$(gl_GNULIB_ENABLED_strtoll_CONDITION))
 
 endif
 EXTRA_DIST += strtol.c strtoll.c
@@ -3285,10 +3338,9 @@ BUILT_SOURCES += sys/random.h
 # We need the following in order to create <sys/random.h> when the system
 # doesn't have one.
 sys/random.h: sys_random.in.h $(top_builddir)/config.status $(CXXDEFS_H) 
$(ARG_NONNULL_H) $(WARN_ON_USE_H)
-       $(AM_V_at)$(MKDIR_P) sys
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+       $(AM_V_GEN)$(MKDIR_P) 'sys'
+       $(AM_V_at)$(SED_HEADER_STDOUT) \
+             -e 's|@''GUARD_PREFIX''@|GL|g' \
              -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
              -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
              -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
@@ -3300,9 +3352,8 @@ sys/random.h: sys_random.in.h 
$(top_builddir)/config.status $(CXXDEFS_H) $(ARG_N
              -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
              -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
              -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
-             < $(srcdir)/sys_random.in.h; \
-       } > $@-t && \
-       mv -f $@-t $@
+             $(srcdir)/sys_random.in.h > $@-t
+       $(AM_V_at)mv $@-t $@
 MOSTLYCLEANFILES += sys/random.h sys/random.h-t
 MOSTLYCLEANDIRS += sys
 
@@ -3319,10 +3370,9 @@ BUILT_SOURCES += sys/select.h
 # We need the following in order to create <sys/select.h> when the system
 # doesn't have one that works with the given compiler.
 sys/select.h: sys_select.in.h $(top_builddir)/config.status $(CXXDEFS_H) 
$(WARN_ON_USE_H)
-       $(AM_V_at)$(MKDIR_P) sys
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+       $(AM_V_GEN)$(MKDIR_P) 'sys'
+       $(AM_V_at)$(SED_HEADER_STDOUT) \
+             -e 's|@''GUARD_PREFIX''@|GL|g' \
              -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
              -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
              -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
@@ -3336,9 +3386,8 @@ sys/select.h: sys_select.in.h 
$(top_builddir)/config.status $(CXXDEFS_H) $(WARN_
              -e 's|@''REPLACE_SELECT''@|$(REPLACE_SELECT)|g' \
              -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
              -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
-             < $(srcdir)/sys_select.in.h; \
-       } > $@-t && \
-       mv $@-t $@
+             $(srcdir)/sys_select.in.h > $@-t
+       $(AM_V_at)mv $@-t $@
 MOSTLYCLEANFILES += sys/select.h sys/select.h-t
 MOSTLYCLEANDIRS += sys
 
@@ -3355,10 +3404,9 @@ BUILT_SOURCES += sys/stat.h
 # We need the following in order to create <sys/stat.h> when the system
 # has one that is incomplete.
 sys/stat.h: sys_stat.in.h $(top_builddir)/config.status $(CXXDEFS_H) 
$(ARG_NONNULL_H) $(WARN_ON_USE_H)
-       $(AM_V_at)$(MKDIR_P) sys
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+       $(AM_V_GEN)$(MKDIR_P) 'sys'
+       $(AM_V_at)$(SED_HEADER_STDOUT) \
+             -e 's|@''GUARD_PREFIX''@|GL|g' \
              -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
              -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
              -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
@@ -3411,9 +3459,8 @@ sys/stat.h: sys_stat.in.h $(top_builddir)/config.status 
$(CXXDEFS_H) $(ARG_NONNU
              -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
              -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
              -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
-             < $(srcdir)/sys_stat.in.h; \
-       } > $@-t && \
-       mv $@-t $@
+             $(srcdir)/sys_stat.in.h > $@-t
+       $(AM_V_at)mv $@-t $@
 MOSTLYCLEANFILES += sys/stat.h sys/stat.h-t
 MOSTLYCLEANDIRS += sys
 
@@ -3430,10 +3477,9 @@ BUILT_SOURCES += sys/time.h
 # We need the following in order to create <sys/time.h> when the system
 # doesn't have one that works with the given compiler.
 sys/time.h: sys_time.in.h $(top_builddir)/config.status $(CXXDEFS_H) 
$(ARG_NONNULL_H) $(WARN_ON_USE_H)
-       $(AM_V_at)$(MKDIR_P) sys
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+       $(AM_V_GEN)$(MKDIR_P) 'sys'
+       $(AM_V_at)$(SED_HEADER_STDOUT) \
+             -e 's|@''GUARD_PREFIX''@|GL|g' \
              -e 's/@''HAVE_SYS_TIME_H''@/$(HAVE_SYS_TIME_H)/g' \
              -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
              -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
@@ -3448,9 +3494,8 @@ sys/time.h: sys_time.in.h $(top_builddir)/config.status 
$(CXXDEFS_H) $(ARG_NONNU
              -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
              -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
              -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
-             < $(srcdir)/sys_time.in.h; \
-       } > $@-t && \
-       mv $@-t $@
+             $(srcdir)/sys_time.in.h > $@-t
+       $(AM_V_at)mv $@-t $@
 MOSTLYCLEANFILES += sys/time.h sys/time.h-t
 
 EXTRA_DIST += sys_time.in.h
@@ -3466,19 +3511,17 @@ BUILT_SOURCES += sys/types.h
 # We need the following in order to create <sys/types.h> when the system
 # doesn't have one that works with the given compiler.
 sys/types.h: sys_types.in.h $(top_builddir)/config.status
-       $(AM_V_at)$(MKDIR_P) sys
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+       $(AM_V_GEN)$(MKDIR_P) 'sys'
+       $(AM_V_at)$(SED_HEADER_STDOUT) \
+             -e 's|@''GUARD_PREFIX''@|GL|g' \
              -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
              -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
              -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
              -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \
              -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \
              -e 's|@''WINDOWS_STAT_INODES''@|$(WINDOWS_STAT_INODES)|g' \
-             < $(srcdir)/sys_types.in.h; \
-       } > $@-t && \
-       mv $@-t $@
+             $(srcdir)/sys_types.in.h > $@-t
+       $(AM_V_at)mv $@-t $@
 MOSTLYCLEANFILES += sys/types.h sys/types.h-t
 
 EXTRA_DIST += sys_types.in.h
@@ -3504,9 +3547,8 @@ BUILT_SOURCES += time.h
 # We need the following in order to create <time.h> when the system
 # doesn't have one that works with the given compiler.
 time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) 
$(WARN_ON_USE_H)
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+       $(gl_V_at)$(SED_HEADER_STDOUT) \
+             -e 's|@''GUARD_PREFIX''@|GL|g' \
              -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
              -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
              -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
@@ -3519,6 +3561,7 @@ time.h: time.in.h $(top_builddir)/config.status 
$(CXXDEFS_H) $(ARG_NONNULL_H) $(
              -e 's/@''GNULIB_STRPTIME''@/$(GL_GNULIB_STRPTIME)/g' \
              -e 's/@''GNULIB_TIMEGM''@/$(GL_GNULIB_TIMEGM)/g' \
              -e 's/@''GNULIB_TIMESPEC_GET''@/$(GL_GNULIB_TIMESPEC_GET)/g' \
+             -e 
's/@''GNULIB_TIMESPEC_GETRES''@/$(GL_GNULIB_TIMESPEC_GETRES)/g' \
              -e 's/@''GNULIB_TIME_R''@/$(GL_GNULIB_TIME_R)/g' \
              -e 's/@''GNULIB_TIME_RZ''@/$(GL_GNULIB_TIME_RZ)/g' \
              -e 's/@''GNULIB_TZSET''@/$(GL_GNULIB_TZSET)/g' \
@@ -3528,6 +3571,7 @@ time.h: time.in.h $(top_builddir)/config.status 
$(CXXDEFS_H) $(ARG_NONNULL_H) $(
              -e 's|@''HAVE_STRPTIME''@|$(HAVE_STRPTIME)|g' \
              -e 's|@''HAVE_TIMEGM''@|$(HAVE_TIMEGM)|g' \
              -e 's|@''HAVE_TIMESPEC_GET''@|$(HAVE_TIMESPEC_GET)|g' \
+             -e 's|@''HAVE_TIMESPEC_GETRES''@|$(HAVE_TIMESPEC_GETRES)|g' \
              -e 's|@''HAVE_TIMEZONE_T''@|$(HAVE_TIMEZONE_T)|g' \
              -e 's|@''REPLACE_CTIME''@|$(REPLACE_CTIME)|g' \
              -e 's|@''REPLACE_GMTIME''@|$(REPLACE_GMTIME)|g' \
@@ -3546,9 +3590,8 @@ time.h: time.in.h $(top_builddir)/config.status 
$(CXXDEFS_H) $(ARG_NONNULL_H) $(
              -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
              -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
              -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
-             < $(srcdir)/time.in.h; \
-       } > $@-t && \
-       mv $@-t $@
+             $(srcdir)/time.in.h > $@-t
+       $(AM_V_at)mv $@-t $@
 MOSTLYCLEANFILES += time.h time.h-t
 
 EXTRA_DIST += time.in.h
@@ -3634,9 +3677,8 @@ libgnu_a_SOURCES += unistd.c
 # We need the following in order to create an empty placeholder for
 # <unistd.h> when the system doesn't have one.
 unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) 
$(ARG_NONNULL_H) $(WARN_ON_USE_H)
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+       $(gl_V_at)$(SED_HEADER_STDOUT) \
+             -e 's|@''GUARD_PREFIX''@|GL|g' \
              -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \
              -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
              -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
@@ -3677,6 +3719,7 @@ unistd.h: unistd.in.h $(top_builddir)/config.status 
$(CXXDEFS_H) $(ARG_NONNULL_H
              -e 's/@''GNULIB_GETOPT_POSIX''@/$(GL_GNULIB_GETOPT_POSIX)/g' \
              -e 's/@''GNULIB_GETPAGESIZE''@/$(GL_GNULIB_GETPAGESIZE)/g' \
              -e 's/@''GNULIB_GETPASS''@/$(GL_GNULIB_GETPASS)/g' \
+             -e 's/@''GNULIB_GETPASS_GNU''@/$(GL_GNULIB_GETPASS_GNU)/g' \
              -e 's/@''GNULIB_GETUSERSHELL''@/$(GL_GNULIB_GETUSERSHELL)/g' \
              -e 's/@''GNULIB_GROUP_MEMBER''@/$(GL_GNULIB_GROUP_MEMBER)/g' \
              -e 's/@''GNULIB_ISATTY''@/$(GL_GNULIB_ISATTY)/g' \
@@ -3797,6 +3840,7 @@ unistd.h: unistd.in.h $(top_builddir)/config.status 
$(CXXDEFS_H) $(ARG_NONNULL_H
              -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \
              -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \
              -e 's|@''REPLACE_GETPASS''@|$(REPLACE_GETPASS)|g' \
+             -e 
's|@''REPLACE_GETPASS_FOR_GETPASS_GNU''@|$(REPLACE_GETPASS_FOR_GETPASS_GNU)|g' \
              -e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \
              -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \
              -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \
@@ -3822,9 +3866,9 @@ unistd.h: unistd.in.h $(top_builddir)/config.status 
$(CXXDEFS_H) $(ARG_NONNULL_H
              -e 
's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g'
 \
              -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
              -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
-       } > $@-t && \
-       mv $@-t $@
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+             > $@-t
+       $(AM_V_at)mv $@-t $@
 MOSTLYCLEANFILES += unistd.h unistd.h-t
 
 EXTRA_DIST += unistd.in.h
@@ -3853,7 +3897,7 @@ endif
 ## begin gnulib module utimens
 ifeq (,$(OMIT_GNULIB_MODULE_utimens))
 
-ifneq (,$(gl_GNULIB_ENABLED_utimens))
+ifneq (,$(gl_GNULIB_ENABLED_utimens_CONDITION))
 libgnu_a_SOURCES += utimens.c
 
 endif
@@ -3894,7 +3938,7 @@ endif
 ## begin gnulib module xalloc-oversized
 ifeq (,$(OMIT_GNULIB_MODULE_xalloc-oversized))
 
-ifneq (,$(gl_GNULIB_ENABLED_682e609604ccaac6be382e4ee3a4eaec))
+ifneq (,$(gl_GNULIB_ENABLED_682e609604ccaac6be382e4ee3a4eaec_CONDITION))
 
 endif
 EXTRA_DIST += xalloc-oversized.h
diff --git a/lib/group-member.c b/lib/group-member.c
index 24aea3599c..480a12616a 100644
--- a/lib/group-member.c
+++ b/lib/group-member.c
@@ -1,6 +1,6 @@
 /* group-member.c -- determine whether group id is in calling user's group list
 
-   Copyright (C) 1994, 1997-1998, 2003, 2005-2006, 2009-2021 Free Software
+   Copyright (C) 1994, 1997-1998, 2003, 2005-2006, 2009-2022 Free Software
    Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
diff --git a/lib/idx.h b/lib/idx.h
index 54ad5d81fe..c3669ddaca 100644
--- a/lib/idx.h
+++ b/lib/idx.h
@@ -1,5 +1,5 @@
 /* A type for indices and sizes.
-   Copyright (C) 2020-2021 Free Software Foundation, Inc.
+   Copyright (C) 2020-2022 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 ce371cbcea..2ca9709bb9 100644
--- a/lib/ieee754.in.h
+++ b/lib/ieee754.in.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992-2021 Free Software Foundation, Inc.
+/* Copyright (C) 1992-2022 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 6099abad97..173b63f537 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2008-2022 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.h b/lib/intprops.h
index 3fe64e82e9..68d6daa570 100644
--- a/lib/intprops.h
+++ b/lib/intprops.h
@@ -1,6 +1,6 @@
 /* intprops.h -- properties of integer types
 
-   Copyright (C) 2001-2021 Free Software Foundation, Inc.
+   Copyright (C) 2001-2022 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
@@ -229,18 +229,18 @@
 
 /* True if __builtin_add_overflow (A, B, P) and __builtin_sub_overflow
    (A, B, P) work when P is non-null.  */
+#if defined __has_builtin
+# define _GL_HAS_BUILTIN_ADD_OVERFLOW __has_builtin (__builtin_add_overflow)
 /* __builtin_{add,sub}_overflow exists but is not reliable in GCC 5.x and 6.x,
    see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98269>.  */
-#if 7 <= __GNUC__ && !defined __ICC
+#elif 7 <= __GNUC__ && !defined __EDG__
 # define _GL_HAS_BUILTIN_ADD_OVERFLOW 1
-#elif defined __has_builtin
-# define _GL_HAS_BUILTIN_ADD_OVERFLOW __has_builtin (__builtin_add_overflow)
 #else
 # define _GL_HAS_BUILTIN_ADD_OVERFLOW 0
 #endif
 
 /* True if __builtin_mul_overflow (A, B, P) works when P is non-null.  */
-#ifdef __clang__
+#if defined __clang_major__ && __clang_major__ < 14
 /* Work around Clang bug <https://bugs.llvm.org/show_bug.cgi?id=16404>.  */
 # define _GL_HAS_BUILTIN_MUL_OVERFLOW 0
 #else
@@ -249,9 +249,8 @@
 
 /* True if __builtin_add_overflow_p (A, B, C) works, and similarly for
    __builtin_sub_overflow_p and __builtin_mul_overflow_p.  */
-#if defined __clang__ || defined __ICC
-/* Clang 11 lacks __builtin_mul_overflow_p, and even if it did it
-   would presumably run afoul of Clang bug 16404.  ICC 2021.1's
+#ifdef __EDG__
+/* In EDG-based compilers like ICC 2021.3 and earlier,
    __builtin_add_overflow_p etc. are not treated as integral constant
    expressions even when all arguments are.  */
 # define _GL_HAS_BUILTIN_OVERFLOW_P 0
@@ -400,7 +399,7 @@
 #if _GL_HAS_BUILTIN_MUL_OVERFLOW
 # if ((9 < __GNUC__ + (3 <= __GNUC_MINOR__) \
        || (__GNUC__ == 8 && 4 <= __GNUC_MINOR__)) \
-      && !defined __ICC)
+      && !defined __EDG__)
 #  define INT_MULTIPLY_WRAPV(a, b, r) __builtin_mul_overflow (a, b, r)
 # else
    /* Work around GCC bug 91450.  */
diff --git a/lib/inttypes.in.h b/lib/inttypes.in.h
index 41cb4220ce..853eca087c 100644
--- a/lib/inttypes.in.h
+++ b/lib/inttypes.in.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2006-2021 Free Software Foundation, Inc.
+/* Copyright (C) 2006-2022 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 195304f511..479ed776cb 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-2021 Free Software Foundation, Inc.
+   Copyright 2020-2022 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 886c11f37f..8fec489378 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-2021 Free Software Foundation, Inc.
+   Copyright 2017-2022 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 2ecafebb00..b77bf75c5f 100644
--- a/lib/limits.in.h
+++ b/lib/limits.in.h
@@ -1,6 +1,6 @@
 /* A GNU-like <limits.h>.
 
-   Copyright 2016-2021 Free Software Foundation, Inc.
+   Copyright 2016-2022 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 7de0bf1027..472bfbceb9 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1997-2006, 2008-2022 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 0d8b3596ca..f334dd6e96 100644
--- a/lib/malloc.c
+++ b/lib/malloc.c
@@ -1,6 +1,6 @@
 /* malloc() function that is glibc compatible.
 
-   Copyright (C) 1997-1998, 2006-2007, 2009-2021 Free Software Foundation, Inc.
+   Copyright (C) 1997-1998, 2006-2007, 2009-2022 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 48210e3252..bad548a498 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2017-2022 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 638c33f986..f16fd950df 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2017-2022 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 8dd6850787..062ab7062b 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2017-2022 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 0f8baf94ad..0cff2e7055 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2017-2022 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 c33da41389..3f360c3aa8 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2017-2022 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 5a57166a84..8d1922e5c7 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2017-2022 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 9c43b00c3a..8cf1b0d026 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2017-2022 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 36d0bef4bb..e4c5c8a85d 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2015-2022 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 07363b9bc8..eb3b95c1b1 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2020-2022 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 22c8c7781e..9a5e4dbb1e 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2015-2022 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 2b2b819289..3fe5a0720e 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2015-2022 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 a47f9276a8..89c37a950e 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2015-2022 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 fb483b7334..07c639fd36 100644
--- a/lib/md5-stream.c
+++ b/lib/md5-stream.c
@@ -1,6 +1,6 @@
 /* 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-2021 Free Software
+   Copyright (C) 1995-1997, 1999-2001, 2005-2006, 2008-2022 Free Software
    Foundation, Inc.
    This file is part of the GNU C Library.
 
diff --git a/lib/md5.c b/lib/md5.c
index 7955665ccd..57489ed74c 100644
--- a/lib/md5.c
+++ b/lib/md5.c
@@ -1,6 +1,6 @@
 /* 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-2021 Free Software
+   Copyright (C) 1995-1997, 1999-2001, 2005-2006, 2008-2022 Free Software
    Foundation, Inc.
    This file is part of the GNU C Library.
 
diff --git a/lib/md5.h b/lib/md5.h
index bae5960a8c..5b92eac5ec 100644
--- a/lib/md5.h
+++ b/lib/md5.h
@@ -1,6 +1,6 @@
 /* Declaration of functions and data types used for MD5 sum computing
    library functions.
-   Copyright (C) 1995-1997, 1999-2001, 2004-2006, 2008-2021 Free Software
+   Copyright (C) 1995-1997, 1999-2001, 2004-2006, 2008-2022 Free Software
    Foundation, Inc.
    This file is part of the GNU C Library.
 
diff --git a/lib/memmem.c b/lib/memmem.c
index 142de576d9..5701052d48 100644
--- a/lib/memmem.c
+++ b/lib/memmem.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-1994, 1996-1998, 2000, 2004, 2007-2021 Free Software
+/* Copyright (C) 1991-1994, 1996-1998, 2000, 2004, 2007-2022 Free Software
    Foundation, Inc.
    This file is part of the GNU C Library.
 
diff --git a/lib/mempcpy.c b/lib/mempcpy.c
index cacacdbc62..9aae418ef2 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2007, 2009-2022 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 e0d47d13d7..e853996ad0 100644
--- a/lib/memrchr.c
+++ b/lib/memrchr.c
@@ -1,6 +1,6 @@
 /* memrchr -- find the last occurrence of a byte in a memory block
 
-   Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2021 Free Software
+   Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2022 Free Software
    Foundation, Inc.
 
    Based on strlen implementation by Torbjorn Granlund (tege@sics.se),
diff --git a/lib/mini-gmp-gnulib.c b/lib/mini-gmp-gnulib.c
index 08aa8f97c1..7620da38db 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-2021 Free Software Foundation, Inc.
+   Copyright 2018-2022 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 a03361bafa..b4b1345bbc 100644
--- a/lib/minmax.h
+++ b/lib/minmax.h
@@ -1,5 +1,5 @@
 /* MIN, MAX macros.
-   Copyright (C) 1995, 1998, 2001, 2003, 2005, 2009-2021 Free Software
+   Copyright (C) 1995, 1998, 2001, 2003, 2005, 2009-2022 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 285f1badf8..eae289aff9 100644
--- a/lib/mkostemp.c
+++ b/lib/mkostemp.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998-1999, 2001, 2005-2007, 2009-2021 Free Software
+/* Copyright (C) 1998-1999, 2001, 2005-2007, 2009-2022 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 7386625d3d..170764eabc 100644
--- a/lib/mktime-internal.h
+++ b/lib/mktime-internal.h
@@ -1,5 +1,5 @@
 /* Internals of mktime and related functions
-   Copyright 2016-2021 Free Software Foundation, Inc.
+   Copyright 2016-2022 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 ae721c72e6..aa12e28e16 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1993-2022 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Paul Eggert <eggert@twinsun.com>.
 
diff --git a/lib/nproc.c b/lib/nproc.c
index a9e369dd3f..378d3ff3fc 100644
--- a/lib/nproc.c
+++ b/lib/nproc.c
@@ -1,6 +1,6 @@
 /* Detect the number of processors.
 
-   Copyright (C) 2009-2021 Free Software Foundation, Inc.
+   Copyright (C) 2009-2022 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
@@ -307,10 +307,11 @@ num_processors_ignoring_omp (enum nproc_query query)
      NPROC_CURRENT and NPROC_ALL.  */
 
 #if HAVE_SYSCTL && ! defined __GLIBC__ && defined HW_NCPU
-  { /* This works on Mac OS X, FreeBSD, NetBSD, OpenBSD.  */
+  { /* This works on macOS, FreeBSD, NetBSD, OpenBSD.
+       macOS 10.14 does not allow mib to be const.  */
     int nprocs;
     size_t len = sizeof (nprocs);
-    static int const mib[][2] = {
+    static int mib[][2] = {
 # ifdef HW_NCPUONLINE
       { CTL_HW, HW_NCPUONLINE },
 # endif
diff --git a/lib/nproc.h b/lib/nproc.h
index d7659a5cad..505351d95f 100644
--- a/lib/nproc.h
+++ b/lib/nproc.h
@@ -1,6 +1,6 @@
 /* Detect the number of processors.
 
-   Copyright (C) 2009-2021 Free Software Foundation, Inc.
+   Copyright (C) 2009-2022 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 7f258e8727..190ff4d8f2 100644
--- a/lib/nstrftime.c
+++ b/lib/nstrftime.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-2021 Free Software Foundation, Inc.
+/* Copyright (C) 1991-2022 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
@@ -22,7 +22,7 @@
 # define HAVE_TZNAME 1
 # include "../locale/localeinfo.h"
 #else
-# include <config.h>
+# include <libc-config.h>
 # if FPRINTFTIME
 #  include "fprintftime.h"
 # else
@@ -367,10 +367,7 @@ tm_diff (const struct tm *a, const struct tm *b)
 #define ISO_WEEK1_WDAY 4 /* Thursday */
 #define YDAY_MINIMUM (-366)
 static int iso_week_days (int, int);
-#if defined __GNUC__ || defined __clang__
-__inline__
-#endif
-static int
+static __inline int
 iso_week_days (int yday, int wday)
 {
   /* Add enough to the first operand of % to make it nonnegative.  */
@@ -428,9 +425,7 @@ my_strftime (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t 
maxsize)
   return __strftime_internal (s, STRFTIME_ARG (maxsize) format, tp, false,
                               0, -1, &tzset_called extra_args LOCALE_ARG);
 }
-#if defined _LIBC && ! FPRINTFTIME
 libc_hidden_def (my_strftime)
-#endif
 
 /* Just like my_strftime, above, but with more parameters.
    UPCASE indicates that the result should be converted to upper case.
@@ -656,6 +651,8 @@ __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG 
(size_t maxsize)
 
 #endif /* ! DO_MULTIBYTE */
 
+      char const *percent = f;
+
       /* Check for flags that can modify a format.  */
       while (1)
         {
@@ -757,8 +754,8 @@ __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG 
(size_t maxsize)
           while (0)
 
         case L_('%'):
-          if (modifier != 0)
-            goto bad_format;
+          if (f - 1 != percent)
+            goto bad_percent;
           add1 (*f);
           break;
 
@@ -1472,6 +1469,7 @@ __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG 
(size_t maxsize)
           }
 
         case L_('\0'):          /* GNU extension: % at end of format.  */
+        bad_percent:
             --f;
             FALLTHROUGH;
         default:
@@ -1479,12 +1477,7 @@ __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG 
(size_t maxsize)
              since this is most likely the right thing to do if a
              multibyte string has been misparsed.  */
         bad_format:
-          {
-            int flen;
-            for (flen = 1; f[1 - flen] != L_('%'); flen++)
-              continue;
-            cpy (flen, &f[1 - flen]);
-          }
+          cpy (f - percent + 1, percent);
           break;
         }
     }
diff --git a/lib/open.c b/lib/open.c
index 372cda8816..170bff108e 100644
--- a/lib/open.c
+++ b/lib/open.c
@@ -1,5 +1,5 @@
 /* Open a descriptor to a file.
-   Copyright (C) 2007-2021 Free Software Foundation, Inc.
+   Copyright (C) 2007-2022 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 5c42d03499..451cac10cc 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2005-2006, 2009-2022 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 4f8be90f14..d5f4296d47 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2006, 2009-2022 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 70981241b2..dcb2864ffc 100644
--- a/lib/openat.h
+++ b/lib/openat.h
@@ -1,5 +1,5 @@
 /* provide a replacement openat function
-   Copyright (C) 2004-2006, 2008-2021 Free Software Foundation, Inc.
+   Copyright (C) 2004-2006, 2008-2022 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 716f4a9aae..19b93d7eab 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-2021 Free Software
+   Copyright (C) 1992, 1999, 2001, 2003, 2005, 2009-2022 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 9ba8c3b703..400aff001a 100644
--- a/lib/pipe2.c
+++ b/lib/pipe2.c
@@ -1,5 +1,5 @@
 /* Create a pipe, with specific opening flags.
-   Copyright (C) 2009-2021 Free Software Foundation, Inc.
+   Copyright (C) 2009-2022 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 b5fadc6728..a1eca0c6a2 100644
--- a/lib/pselect.c
+++ b/lib/pselect.c
@@ -1,6 +1,6 @@
 /* pselect - synchronous I/O multiplexing
 
-   Copyright 2011-2021 Free Software Foundation, Inc.
+   Copyright 2011-2022 Free Software Foundation, Inc.
 
    This file is part of gnulib.
 
diff --git a/lib/pthread_sigmask.c b/lib/pthread_sigmask.c
index 11b7091e7f..cd4eb80732 100644
--- a/lib/pthread_sigmask.c
+++ b/lib/pthread_sigmask.c
@@ -1,5 +1,5 @@
 /* POSIX compatible signal blocking for threads.
-   Copyright (C) 2011-2021 Free Software Foundation, Inc.
+   Copyright (C) 2011-2022 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 f274ca8d56..42ae68ffc1 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2002-2003, 2005-2022 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 e7a00b8030..ea68c1bfc6 100644
--- a/lib/rawmemchr.c
+++ b/lib/rawmemchr.c
@@ -1,5 +1,5 @@
 /* Searching in a string.
-   Copyright (C) 2008-2021 Free Software Foundation, Inc.
+   Copyright (C) 2008-2022 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 d489c320c3..64cf86c842 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 2008-2022 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 ad4d51dc64..ed03cc8ded 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2003-2007, 2009-2022 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 4a29f7a8bf..f3d39604d2 100644
--- a/lib/readlinkat.c
+++ b/lib/readlinkat.c
@@ -1,5 +1,5 @@
 /* Read a symlink relative to an open directory.
-   Copyright (C) 2009-2021 Free Software Foundation, Inc.
+   Copyright (C) 2009-2022 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 af03f0c577..c878381576 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-2021 Free Software
+   Copyright (C) 1997, 2003-2004, 2006-2007, 2009-2022 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 887e5b5068..b607c85320 100644
--- a/lib/regcomp.c
+++ b/lib/regcomp.c
@@ -1,5 +1,5 @@
 /* Extended regular expression matching and search library.
-   Copyright (C) 2002-2021 Free Software Foundation, Inc.
+   Copyright (C) 2002-2022 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>.
 
@@ -27,14 +27,10 @@ static void re_compile_fastmap_iter (regex_t *bufp,
                                     const re_dfastate_t *init_state,
                                     char *fastmap);
 static reg_errcode_t init_dfa (re_dfa_t *dfa, size_t pat_len);
-#ifdef RE_ENABLE_I18N
 static void free_charset (re_charset_t *cset);
-#endif /* RE_ENABLE_I18N */
 static void free_workarea_compile (regex_t *preg);
 static reg_errcode_t create_initial_state (re_dfa_t *dfa);
-#ifdef RE_ENABLE_I18N
 static void optimize_utf8 (re_dfa_t *dfa);
-#endif
 static reg_errcode_t analyze (regex_t *preg);
 static reg_errcode_t preorder (bin_tree_t *root,
                               reg_errcode_t (fn (void *, bin_tree_t *)),
@@ -89,7 +85,6 @@ static reg_errcode_t parse_bracket_element (bracket_elem_t 
*elem,
 static reg_errcode_t parse_bracket_symbol (bracket_elem_t *elem,
                                          re_string_t *regexp,
                                          re_token_t *token);
-#ifdef RE_ENABLE_I18N
 static reg_errcode_t build_equiv_class (bitset_t sbcset,
                                        re_charset_t *mbcset,
                                        Idx *equiv_class_alloc,
@@ -100,14 +95,6 @@ static reg_errcode_t build_charclass (RE_TRANSLATE_TYPE 
trans,
                                      Idx *char_class_alloc,
                                      const char *class_name,
                                      reg_syntax_t syntax);
-#else  /* not RE_ENABLE_I18N */
-static reg_errcode_t build_equiv_class (bitset_t sbcset,
-                                       const unsigned char *name);
-static reg_errcode_t build_charclass (RE_TRANSLATE_TYPE trans,
-                                     bitset_t sbcset,
-                                     const char *class_name,
-                                     reg_syntax_t syntax);
-#endif /* not RE_ENABLE_I18N */
 static bin_tree_t *build_charclass_op (re_dfa_t *dfa,
                                       RE_TRANSLATE_TYPE trans,
                                       const char *class_name,
@@ -279,8 +266,7 @@ re_compile_fastmap (struct re_pattern_buffer *bufp)
 }
 weak_alias (__re_compile_fastmap, re_compile_fastmap)
 
-static inline void
-__attribute__ ((always_inline))
+static __always_inline void
 re_set_fastmap (char *fastmap, bool icase, int ch)
 {
   fastmap[ch] = 1;
@@ -306,7 +292,6 @@ re_compile_fastmap_iter (regex_t *bufp, const re_dfastate_t 
*init_state,
       if (type == CHARACTER)
        {
          re_set_fastmap (fastmap, icase, dfa->nodes[node].opr.c);
-#ifdef RE_ENABLE_I18N
          if ((bufp->syntax & RE_ICASE) && dfa->mb_cur_max > 1)
            {
              unsigned char buf[MB_LEN_MAX];
@@ -327,7 +312,6 @@ re_compile_fastmap_iter (regex_t *bufp, const re_dfastate_t 
*init_state,
                      != (size_t) -1))
                re_set_fastmap (fastmap, false, buf[0]);
            }
-#endif
        }
       else if (type == SIMPLE_BRACKET)
        {
@@ -341,13 +325,12 @@ re_compile_fastmap_iter (regex_t *bufp, const 
re_dfastate_t *init_state,
                  re_set_fastmap (fastmap, icase, ch);
            }
        }
-#ifdef RE_ENABLE_I18N
       else if (type == COMPLEX_BRACKET)
        {
          re_charset_t *cset = dfa->nodes[node].opr.mbcset;
          Idx i;
 
-# ifdef _LIBC
+#ifdef _LIBC
          /* See if we have to try all bytes which start multiple collation
             elements.
             e.g. In da_DK, we want to catch 'a' since "aa" is a valid
@@ -363,7 +346,7 @@ re_compile_fastmap_iter (regex_t *bufp, const re_dfastate_t 
*init_state,
                    if (table[i] < 0)
                      re_set_fastmap (fastmap, icase, i);
                }
-# endif /* _LIBC */
+#endif /* _LIBC */
 
          /* See if we have to start the match at all multibyte characters,
             i.e. where we would not find an invalid sequence.  This only
@@ -371,9 +354,9 @@ re_compile_fastmap_iter (regex_t *bufp, const re_dfastate_t 
*init_state,
             sets, the SIMPLE_BRACKET again suffices.  */
          if (dfa->mb_cur_max > 1
              && (cset->nchar_classes || cset->non_match || cset->nranges
-# ifdef _LIBC
+#ifdef _LIBC
                  || cset->nequiv_classes
-# endif /* _LIBC */
+#endif /* _LIBC */
                 ))
            {
              unsigned char c = 0;
@@ -406,12 +389,7 @@ re_compile_fastmap_iter (regex_t *bufp, const 
re_dfastate_t *init_state,
                }
            }
        }
-#endif /* RE_ENABLE_I18N */
-      else if (type == OP_PERIOD
-#ifdef RE_ENABLE_I18N
-              || type == OP_UTF8_PERIOD
-#endif /* RE_ENABLE_I18N */
-              || type == END_OF_RE)
+      else if (type == OP_PERIOD || type == OP_UTF8_PERIOD || type == 
END_OF_RE)
        {
          memset (fastmap, '\1', sizeof (char) * SBC_MAX);
          if (type == END_OF_RE)
@@ -550,7 +528,6 @@ regerror (int errcode, const regex_t *__restrict preg, char 
*__restrict errbuf,
 weak_alias (__regerror, regerror)
 
 
-#ifdef RE_ENABLE_I18N
 /* This static array is used for the map to single-byte characters when
    UTF-8 is used.  Otherwise we would allocate memory just to initialize
    it the same all the time.  UTF-8 is the preferred encoding so this is
@@ -558,25 +535,24 @@ weak_alias (__regerror, regerror)
 static const bitset_t utf8_sb_map =
 {
   /* Set the first 128 bits.  */
-# if (defined __GNUC__ || __clang_major__ >= 4) && !defined __STRICT_ANSI__
+#if (defined __GNUC__ || __clang_major__ >= 4) && !defined __STRICT_ANSI__
   [0 ... 0x80 / BITSET_WORD_BITS - 1] = BITSET_WORD_MAX
-# else
-#  if 4 * BITSET_WORD_BITS < ASCII_CHARS
-#   error "bitset_word_t is narrower than 32 bits"
-#  elif 3 * BITSET_WORD_BITS < ASCII_CHARS
+#else
+# if 4 * BITSET_WORD_BITS < ASCII_CHARS
+#  error "bitset_word_t is narrower than 32 bits"
+# elif 3 * BITSET_WORD_BITS < ASCII_CHARS
   BITSET_WORD_MAX, BITSET_WORD_MAX, BITSET_WORD_MAX,
-#  elif 2 * BITSET_WORD_BITS < ASCII_CHARS
+# elif 2 * BITSET_WORD_BITS < ASCII_CHARS
   BITSET_WORD_MAX, BITSET_WORD_MAX,
-#  elif 1 * BITSET_WORD_BITS < ASCII_CHARS
+# elif 1 * BITSET_WORD_BITS < ASCII_CHARS
   BITSET_WORD_MAX,
-#  endif
+# endif
   (BITSET_WORD_MAX
    >> (SBC_MAX % BITSET_WORD_BITS == 0
        ? 0
        : BITSET_WORD_BITS - SBC_MAX % BITSET_WORD_BITS))
-# endif
-};
 #endif
+};
 
 
 static void
@@ -614,10 +590,8 @@ free_dfa_content (re_dfa_t *dfa)
        re_free (entry->array);
       }
   re_free (dfa->state_table);
-#ifdef RE_ENABLE_I18N
   if (dfa->sb_char != utf8_sb_map)
     re_free (dfa->sb_char);
-#endif
   re_free (dfa->subexp_map);
 #ifdef DEBUG
   re_free (dfa->re_str);
@@ -796,11 +770,9 @@ re_compile_internal (regex_t *preg, const char * pattern, 
size_t length,
   if (__glibc_unlikely (err != REG_NOERROR))
     goto re_compile_internal_free_return;
 
-#ifdef RE_ENABLE_I18N
   /* If possible, do searching in single byte encoding to speed things up.  */
   if (dfa->is_utf8 && !(syntax & RE_ICASE) && preg->translate == NULL)
     optimize_utf8 (dfa);
-#endif
 
   /* Then create the initial state of the dfa.  */
   err = create_initial_state (dfa);
@@ -830,11 +802,7 @@ init_dfa (re_dfa_t *dfa, size_t pat_len)
 #ifndef _LIBC
   const char *codeset_name;
 #endif
-#ifdef RE_ENABLE_I18N
   size_t max_i18n_object_size = MAX (sizeof (wchar_t), sizeof (wctype_t));
-#else
-  size_t max_i18n_object_size = 0;
-#endif
   size_t max_object_size =
     MAX (sizeof (struct re_state_table_entry),
         MAX (sizeof (re_token_t),
@@ -886,7 +854,6 @@ init_dfa (re_dfa_t *dfa, size_t pat_len)
   dfa->map_notascii = 0;
 #endif
 
-#ifdef RE_ENABLE_I18N
   if (dfa->mb_cur_max > 1)
     {
       if (dfa->is_utf8)
@@ -906,14 +873,13 @@ init_dfa (re_dfa_t *dfa, size_t pat_len)
                wint_t wch = __btowc (ch);
                if (wch != WEOF)
                  dfa->sb_char[i] |= (bitset_word_t) 1 << j;
-# ifndef _LIBC
+#ifndef _LIBC
                if (isascii (ch) && wch != ch)
                  dfa->map_notascii = 1;
-# endif
+#endif
              }
        }
     }
-#endif
 
   if (__glibc_unlikely (dfa->nodes == NULL || dfa->state_table == NULL))
     return REG_ESPACE;
@@ -933,8 +899,6 @@ init_word_char (re_dfa_t *dfa)
   dfa->word_ops_used = 1;
   if (__glibc_likely (dfa->map_notascii == 0))
     {
-      /* Avoid uint32_t and uint64_t as some non-GCC platforms lack
-        them, an issue when this code is used in Gnulib.  */
       bitset_word_t bits0 = 0x00000000;
       bitset_word_t bits1 = 0x03ff0000;
       bitset_word_t bits2 = 0x87fffffe;
@@ -1074,7 +1038,6 @@ create_initial_state (re_dfa_t *dfa)
   return REG_NOERROR;
 }
 
-#ifdef RE_ENABLE_I18N
 /* If it is possible to do searching in single byte encoding instead of UTF-8
    to speed things up, set dfa->mb_cur_max to 1, clear is_utf8 and change
    DFA nodes where needed.  */
@@ -1154,7 +1117,6 @@ optimize_utf8 (re_dfa_t *dfa)
   dfa->is_utf8 = 0;
   dfa->has_mb_node = dfa->nbackref > 0 || has_period;
 }
-#endif
 
 /* Analyze the structure tree, and calculate "first", "next", "edest",
    "eclosure", and "inveclosure".  */
@@ -1792,7 +1754,6 @@ peek_token (re_token_t *token, re_string_t *input, 
reg_syntax_t syntax)
   token->opr.c = c;
 
   token->word_char = 0;
-#ifdef RE_ENABLE_I18N
   token->mb_partial = 0;
   if (input->mb_cur_max > 1
       && !re_string_first_byte (input, re_string_cur_idx (input)))
@@ -1801,7 +1762,6 @@ peek_token (re_token_t *token, re_string_t *input, 
reg_syntax_t syntax)
       token->mb_partial = 1;
       return 1;
     }
-#endif
   if (c == '\\')
     {
       unsigned char c2;
@@ -1814,7 +1774,6 @@ peek_token (re_token_t *token, re_string_t *input, 
reg_syntax_t syntax)
       c2 = re_string_peek_byte_case (input, 1);
       token->opr.c = c2;
       token->type = CHARACTER;
-#ifdef RE_ENABLE_I18N
       if (input->mb_cur_max > 1)
        {
          wint_t wc = re_string_wchar_at (input,
@@ -1822,7 +1781,6 @@ peek_token (re_token_t *token, re_string_t *input, 
reg_syntax_t syntax)
          token->word_char = IS_WIDE_WORD_CHAR (wc) != 0;
        }
       else
-#endif
        token->word_char = IS_WORD_CHAR (c2) != 0;
 
       switch (c2)
@@ -1928,14 +1886,12 @@ peek_token (re_token_t *token, re_string_t *input, 
reg_syntax_t syntax)
     }
 
   token->type = CHARACTER;
-#ifdef RE_ENABLE_I18N
   if (input->mb_cur_max > 1)
     {
       wint_t wc = re_string_wchar_at (input, re_string_cur_idx (input));
       token->word_char = IS_WIDE_WORD_CHAR (wc) != 0;
     }
   else
-#endif
     token->word_char = IS_WORD_CHAR (token->opr.c);
 
   switch (c)
@@ -2027,14 +1983,12 @@ peek_token_bracket (re_token_t *token, re_string_t 
*input, reg_syntax_t syntax)
   c = re_string_peek_byte (input, 0);
   token->opr.c = c;
 
-#ifdef RE_ENABLE_I18N
   if (input->mb_cur_max > 1
       && !re_string_first_byte (input, re_string_cur_idx (input)))
     {
       token->type = CHARACTER;
       return 1;
     }
-#endif /* RE_ENABLE_I18N */
 
   if (c == '\\' && (syntax & RE_BACKSLASH_ESCAPE_IN_LISTS)
       && re_string_cur_idx (input) + 1 < re_string_length (input))
@@ -2256,7 +2210,6 @@ parse_expression (re_string_t *regexp, regex_t *preg, 
re_token_t *token,
          *err = REG_ESPACE;
          return NULL;
        }
-#ifdef RE_ENABLE_I18N
       if (dfa->mb_cur_max > 1)
        {
          while (!re_string_eoi (regexp)
@@ -2273,7 +2226,6 @@ parse_expression (re_string_t *regexp, regex_t *preg, 
re_token_t *token,
                }
            }
        }
-#endif
       break;
 
     case OP_OPEN_SUBEXP:
@@ -2666,40 +2618,30 @@ parse_dup_op (bin_tree_t *elem, re_string_t *regexp, 
re_dfa_t *dfa,
 
 #ifndef _LIBC
 
-# ifdef RE_ENABLE_I18N
 /* Convert the byte B to the corresponding wide character.  In a
    unibyte locale, treat B as itself.  In a multibyte locale, return
    WEOF if B is an encoding error.  */
 static wint_t
-parse_byte (unsigned char b, re_charset_t *mbcset)
+parse_byte (unsigned char b, re_dfa_t const *dfa)
 {
-  return mbcset == NULL ? b : __btowc (b);
+  return dfa->mb_cur_max > 1 ? __btowc (b) : b;
 }
-# endif
 
-  /* Local function for parse_bracket_exp only used in case of NOT _LIBC.
-     Build the range expression which starts from START_ELEM, and ends
-     at END_ELEM.  The result are written to MBCSET and SBCSET.
-     RANGE_ALLOC is the allocated size of mbcset->range_starts, and
-     mbcset->range_ends, is a pointer argument since we may
-     update it.  */
+/* Local function for parse_bracket_exp used in _LIBC environment.
+   Build the range expression which starts from START_ELEM, and ends
+   at END_ELEM.  The result are written to MBCSET and SBCSET.
+   RANGE_ALLOC is the allocated size of mbcset->range_starts, and
+   mbcset->range_ends, is a pointer argument since we may
+   update it.  */
 
 static reg_errcode_t
-# ifdef RE_ENABLE_I18N
-build_range_exp (const reg_syntax_t syntax,
-                 bitset_t sbcset,
-                 re_charset_t *mbcset,
-                 Idx *range_alloc,
-                 const bracket_elem_t *start_elem,
-                 const bracket_elem_t *end_elem)
-# else /* not RE_ENABLE_I18N */
-build_range_exp (const reg_syntax_t syntax,
-                 bitset_t sbcset,
-                 const bracket_elem_t *start_elem,
-                 const bracket_elem_t *end_elem)
-# endif /* not RE_ENABLE_I18N */
+build_range_exp (bitset_t sbcset, re_charset_t *mbcset, Idx *range_alloc,
+                bracket_elem_t *start_elem, bracket_elem_t *end_elem,
+                re_dfa_t *dfa, reg_syntax_t syntax, uint_fast32_t nrules,
+                const unsigned char *collseqmb, const char *collseqwc,
+                int_fast32_t table_size, const void *symb_table,
+                const unsigned char *extra)
 {
-  unsigned int start_ch, end_ch;
   /* Equivalence Classes and Character Classes can't be a range start/end.  */
   if (__glibc_unlikely (start_elem->type == EQUIV_CLASS
                        || start_elem->type == CHAR_CLASS
@@ -2715,110 +2657,88 @@ build_range_exp (const reg_syntax_t syntax,
                            && strlen ((char *) end_elem->opr.name) > 1)))
     return REG_ECOLLATE;
 
-# ifdef RE_ENABLE_I18N
-  {
-    wchar_t wc;
-    wint_t start_wc;
-    wint_t end_wc;
-
+  unsigned int
     start_ch = ((start_elem->type == SB_CHAR) ? start_elem->opr.ch
                : ((start_elem->type == COLL_SYM) ? start_elem->opr.name[0]
-                  : 0));
+                  : 0)),
     end_ch = ((end_elem->type == SB_CHAR) ? end_elem->opr.ch
              : ((end_elem->type == COLL_SYM) ? end_elem->opr.name[0]
                 : 0));
+  wint_t
     start_wc = ((start_elem->type == SB_CHAR || start_elem->type == COLL_SYM)
-               ? parse_byte (start_ch, mbcset) : start_elem->opr.wch);
+               ? parse_byte (start_ch, dfa) : start_elem->opr.wch),
     end_wc = ((end_elem->type == SB_CHAR || end_elem->type == COLL_SYM)
-             ? parse_byte (end_ch, mbcset) : end_elem->opr.wch);
-    if (start_wc == WEOF || end_wc == WEOF)
-      return REG_ECOLLATE;
-    else if (__glibc_unlikely ((syntax & RE_NO_EMPTY_RANGES)
-                              && start_wc > end_wc))
-      return REG_ERANGE;
-
-    /* Got valid collation sequence values, add them as a new entry.
-       However, for !_LIBC we have no collation elements: if the
-       character set is single byte, the single byte character set
-       that we build below suffices.  parse_bracket_exp passes
-       no MBCSET if dfa->mb_cur_max == 1.  */
-    if (mbcset)
-      {
-       /* Check the space of the arrays.  */
-       if (__glibc_unlikely (*range_alloc == mbcset->nranges))
-         {
-           /* There is not enough space, need realloc.  */
-           wchar_t *new_array_start, *new_array_end;
-           Idx new_nranges;
-
-           /* +1 in case of mbcset->nranges is 0.  */
-           new_nranges = 2 * mbcset->nranges + 1;
-           /* Use realloc since mbcset->range_starts and mbcset->range_ends
-              are NULL if *range_alloc == 0.  */
-           new_array_start = re_realloc (mbcset->range_starts, wchar_t,
-                                         new_nranges);
-           new_array_end = re_realloc (mbcset->range_ends, wchar_t,
-                                       new_nranges);
+             ? parse_byte (end_ch, dfa) : end_elem->opr.wch);
 
-           if (__glibc_unlikely (new_array_start == NULL
-                                 || new_array_end == NULL))
-             {
-               re_free (new_array_start);
-               re_free (new_array_end);
-               return REG_ESPACE;
-             }
+  if (start_wc == WEOF || end_wc == WEOF)
+    return REG_ECOLLATE;
+  else if (__glibc_unlikely ((syntax & RE_NO_EMPTY_RANGES)
+                             && start_wc > end_wc))
+    return REG_ERANGE;
 
-           mbcset->range_starts = new_array_start;
-           mbcset->range_ends = new_array_end;
-           *range_alloc = new_nranges;
-         }
+  /* Got valid collation sequence values, add them as a new entry.
+     However, for !_LIBC we have no collation elements: if the
+     character set is single byte, the single byte character set
+     that we build below suffices.  parse_bracket_exp passes
+     no MBCSET if dfa->mb_cur_max == 1.  */
+  if (dfa->mb_cur_max > 1)
+    {
+      /* Check the space of the arrays.  */
+      if (__glibc_unlikely (*range_alloc == mbcset->nranges))
+        {
+          /* There is not enough space, need realloc.  */
+          wchar_t *new_array_start, *new_array_end;
+          Idx new_nranges;
 
-       mbcset->range_starts[mbcset->nranges] = start_wc;
-       mbcset->range_ends[mbcset->nranges++] = end_wc;
-      }
+          /* +1 in case of mbcset->nranges is 0.  */
+          new_nranges = 2 * mbcset->nranges + 1;
+          /* Use realloc since mbcset->range_starts and mbcset->range_ends
+             are NULL if *range_alloc == 0.  */
+          new_array_start = re_realloc (mbcset->range_starts, wchar_t,
+                                        new_nranges);
+          new_array_end = re_realloc (mbcset->range_ends, wchar_t,
+                                      new_nranges);
+
+          if (__glibc_unlikely (new_array_start == NULL
+                                || new_array_end == NULL))
+            {
+              re_free (new_array_start);
+              re_free (new_array_end);
+              return REG_ESPACE;
+            }
+
+          mbcset->range_starts = new_array_start;
+          mbcset->range_ends = new_array_end;
+          *range_alloc = new_nranges;
+        }
+
+      mbcset->range_starts[mbcset->nranges] = start_wc;
+      mbcset->range_ends[mbcset->nranges++] = end_wc;
+    }
+
+  /* Build the table for single byte characters.  */
+  for (wchar_t wc = 0; wc < SBC_MAX; ++wc)
+    {
+      if (start_wc <= wc && wc <= end_wc)
+        bitset_set (sbcset, wc);
+    }
 
-    /* Build the table for single byte characters.  */
-    for (wc = 0; wc < SBC_MAX; ++wc)
-      {
-       if (start_wc <= wc && wc <= end_wc)
-         bitset_set (sbcset, wc);
-      }
-  }
-# else /* not RE_ENABLE_I18N */
-  {
-    unsigned int ch;
-    start_ch = ((start_elem->type == SB_CHAR ) ? start_elem->opr.ch
-               : ((start_elem->type == COLL_SYM) ? start_elem->opr.name[0]
-                  : 0));
-    end_ch = ((end_elem->type == SB_CHAR ) ? end_elem->opr.ch
-             : ((end_elem->type == COLL_SYM) ? end_elem->opr.name[0]
-                : 0));
-    if (start_ch > end_ch)
-      return REG_ERANGE;
-    /* Build the table for single byte characters.  */
-    for (ch = 0; ch < SBC_MAX; ++ch)
-      if (start_ch <= ch  && ch <= end_ch)
-       bitset_set (sbcset, ch);
-  }
-# endif /* not RE_ENABLE_I18N */
   return REG_NOERROR;
 }
 #endif /* not _LIBC */
 
 #ifndef _LIBC
-/* Helper function for parse_bracket_exp only used in case of NOT _LIBC..
+/* Helper function for parse_bracket_exp only used in case of NOT _LIBC.
    Build the collating element which is represented by NAME.
    The result are written to MBCSET and SBCSET.
    COLL_SYM_ALLOC is the allocated size of mbcset->coll_sym, is a
    pointer argument since we may update it.  */
 
 static reg_errcode_t
-# ifdef RE_ENABLE_I18N
 build_collating_symbol (bitset_t sbcset, re_charset_t *mbcset,
-                       Idx *coll_sym_alloc, const unsigned char *name)
-# else /* not RE_ENABLE_I18N */
-build_collating_symbol (bitset_t sbcset, const unsigned char *name)
-# endif /* not RE_ENABLE_I18N */
+                       Idx *coll_sym_alloc, const unsigned char *name,
+                       uint_fast32_t nrules, int_fast32_t table_size,
+                       const void *symb_table, const unsigned char *extra)
 {
   size_t name_len = strlen ((const char *) name);
   if (__glibc_unlikely (name_len != 1))
@@ -2831,271 +2751,280 @@ build_collating_symbol (bitset_t sbcset, const 
unsigned char *name)
 }
 #endif /* not _LIBC */
 
-/* This function parse bracket expression like "[abc]", "[a-c]",
-   "[[.a-a.]]" etc.  */
-
-static bin_tree_t *
-parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token,
-                  reg_syntax_t syntax, reg_errcode_t *err)
-{
 #ifdef _LIBC
-  const unsigned char *collseqmb;
-  const char *collseqwc;
-  uint32_t nrules;
-  int32_t table_size;
-  const int32_t *symb_table;
-  const unsigned char *extra;
-
-  /* Local function for parse_bracket_exp used in _LIBC environment.
-     Seek the collating symbol entry corresponding to NAME.
-     Return the index of the symbol in the SYMB_TABLE,
-     or -1 if not found.  */
-
-  auto inline int32_t
-  __attribute__ ((always_inline))
-  seek_collating_symbol_entry (const unsigned char *name, size_t name_len)
-    {
-      int32_t elem;
-
-      for (elem = 0; elem < table_size; elem++)
-       if (symb_table[2 * elem] != 0)
-         {
-           int32_t idx = symb_table[2 * elem + 1];
-           /* Skip the name of collating element name.  */
-           idx += 1 + extra[idx];
-           if (/* Compare the length of the name.  */
-               name_len == extra[idx]
-               /* Compare the name.  */
-               && memcmp (name, &extra[idx + 1], name_len) == 0)
-             /* Yep, this is the entry.  */
-             return elem;
-         }
-      return -1;
-    }
+/* Local function for parse_bracket_exp used in _LIBC environment.
+   Seek the collating symbol entry corresponding to NAME.
+   Return the index of the symbol in the SYMB_TABLE,
+   or -1 if not found.  */
+
+static __always_inline int32_t
+seek_collating_symbol_entry (const unsigned char *name, size_t name_len,
+                            const int32_t *symb_table,
+                            int_fast32_t table_size,
+                            const unsigned char *extra)
+{
+  int_fast32_t elem;
 
-  /* Local function for parse_bracket_exp used in _LIBC environment.
-     Look up the collation sequence value of BR_ELEM.
-     Return the value if succeeded, UINT_MAX otherwise.  */
+  for (elem = 0; elem < table_size; elem++)
+    if (symb_table[2 * elem] != 0)
+      {
+       int32_t idx = symb_table[2 * elem + 1];
+       /* Skip the name of collating element name.  */
+       idx += 1 + extra[idx];
+       if (/* Compare the length of the name.  */
+           name_len == extra[idx]
+           /* Compare the name.  */
+           && memcmp (name, &extra[idx + 1], name_len) == 0)
+         /* Yep, this is the entry.  */
+         return elem;
+      }
+  return -1;
+}
 
-  auto inline unsigned int
-  __attribute__ ((always_inline))
-  lookup_collation_sequence_value (bracket_elem_t *br_elem)
+/* Local function for parse_bracket_exp used in _LIBC environment.
+   Look up the collation sequence value of BR_ELEM.
+   Return the value if succeeded, UINT_MAX otherwise.  */
+
+static __always_inline unsigned int
+lookup_collation_sequence_value (bracket_elem_t *br_elem, uint32_t nrules,
+                                const unsigned char *collseqmb,
+                                const char *collseqwc,
+                                int_fast32_t table_size,
+                                const int32_t *symb_table,
+                                const unsigned char *extra)
+{
+  if (br_elem->type == SB_CHAR)
     {
-      if (br_elem->type == SB_CHAR)
-       {
-         /*
-         if (MB_CUR_MAX == 1)
-         */
-         if (nrules == 0)
-           return collseqmb[br_elem->opr.ch];
-         else
-           {
-             wint_t wc = __btowc (br_elem->opr.ch);
-             return __collseq_table_lookup (collseqwc, wc);
-           }
-       }
-      else if (br_elem->type == MB_CHAR)
+      /* if (MB_CUR_MAX == 1) */
+      if (nrules == 0)
+       return collseqmb[br_elem->opr.ch];
+      else
        {
-         if (nrules != 0)
-           return __collseq_table_lookup (collseqwc, br_elem->opr.wch);
+         wint_t wc = __btowc (br_elem->opr.ch);
+         return __collseq_table_lookup (collseqwc, wc);
        }
-      else if (br_elem->type == COLL_SYM)
+    }
+  else if (br_elem->type == MB_CHAR)
+    {
+      if (nrules != 0)
+       return __collseq_table_lookup (collseqwc, br_elem->opr.wch);
+    }
+  else if (br_elem->type == COLL_SYM)
+    {
+      size_t sym_name_len = strlen ((char *) br_elem->opr.name);
+      if (nrules != 0)
        {
-         size_t sym_name_len = strlen ((char *) br_elem->opr.name);
-         if (nrules != 0)
+         int32_t elem, idx;
+         elem = seek_collating_symbol_entry (br_elem->opr.name,
+                                             sym_name_len,
+                                             symb_table, table_size,
+                                             extra);
+         if (elem != -1)
            {
-             int32_t elem, idx;
-             elem = seek_collating_symbol_entry (br_elem->opr.name,
-                                                 sym_name_len);
-             if (elem != -1)
-               {
-                 /* We found the entry.  */
-                 idx = symb_table[2 * elem + 1];
-                 /* Skip the name of collating element name.  */
-                 idx += 1 + extra[idx];
-                 /* Skip the byte sequence of the collating element.  */
-                 idx += 1 + extra[idx];
-                 /* Adjust for the alignment.  */
-                 idx = (idx + 3) & ~3;
-                 /* Skip the multibyte collation sequence value.  */
-                 idx += sizeof (unsigned int);
-                 /* Skip the wide char sequence of the collating element.  */
-                 idx += sizeof (unsigned int) *
-                   (1 + *(unsigned int *) (extra + idx));
-                 /* Return the collation sequence value.  */
-                 return *(unsigned int *) (extra + idx);
-               }
-             else if (sym_name_len == 1)
-               {
-                 /* No valid character.  Match it as a single byte
-                    character.  */
-                 return collseqmb[br_elem->opr.name[0]];
-               }
+             /* We found the entry.  */
+             idx = symb_table[2 * elem + 1];
+             /* Skip the name of collating element name.  */
+             idx += 1 + extra[idx];
+             /* Skip the byte sequence of the collating element.  */
+             idx += 1 + extra[idx];
+             /* Adjust for the alignment.  */
+             idx = (idx + 3) & ~3;
+             /* Skip the multibyte collation sequence value.  */
+             idx += sizeof (unsigned int);
+             /* Skip the wide char sequence of the collating element.  */
+             idx += sizeof (unsigned int) *
+               (1 + *(unsigned int *) (extra + idx));
+             /* Return the collation sequence value.  */
+             return *(unsigned int *) (extra + idx);
            }
          else if (sym_name_len == 1)
-           return collseqmb[br_elem->opr.name[0]];
+           {
+             /* No valid character.  Match it as a single byte
+                character.  */
+             return collseqmb[br_elem->opr.name[0]];
+           }
        }
-      return UINT_MAX;
+      else if (sym_name_len == 1)
+       return collseqmb[br_elem->opr.name[0]];
     }
+  return UINT_MAX;
+}
 
-  /* Local function for parse_bracket_exp used in _LIBC environment.
-     Build the range expression which starts from START_ELEM, and ends
-     at END_ELEM.  The result are written to MBCSET and SBCSET.
-     RANGE_ALLOC is the allocated size of mbcset->range_starts, and
-     mbcset->range_ends, is a pointer argument since we may
-     update it.  */
+/* Local function for parse_bracket_exp used in _LIBC environment.
+   Build the range expression which starts from START_ELEM, and ends
+   at END_ELEM.  The result are written to MBCSET and SBCSET.
+   RANGE_ALLOC is the allocated size of mbcset->range_starts, and
+   mbcset->range_ends, is a pointer argument since we may
+   update it.  */
+
+static __always_inline reg_errcode_t
+build_range_exp (bitset_t sbcset, re_charset_t *mbcset, Idx *range_alloc,
+                bracket_elem_t *start_elem, bracket_elem_t *end_elem,
+                re_dfa_t *dfa, reg_syntax_t syntax, uint32_t nrules,
+                const unsigned char *collseqmb, const char *collseqwc,
+                int_fast32_t table_size, const int32_t *symb_table,
+                const unsigned char *extra)
+{
+  unsigned int ch;
+  uint32_t start_collseq;
+  uint32_t end_collseq;
 
-  auto inline reg_errcode_t
-  __attribute__ ((always_inline))
-  build_range_exp (bitset_t sbcset, re_charset_t *mbcset, int *range_alloc,
-                  bracket_elem_t *start_elem, bracket_elem_t *end_elem)
-    {
-      unsigned int ch;
-      uint32_t start_collseq;
-      uint32_t end_collseq;
-
-      /* Equivalence Classes and Character Classes can't be a range
-        start/end.  */
-      if (__glibc_unlikely (start_elem->type == EQUIV_CLASS
-                           || start_elem->type == CHAR_CLASS
-                           || end_elem->type == EQUIV_CLASS
-                           || end_elem->type == CHAR_CLASS))
-       return REG_ERANGE;
+  /* Equivalence Classes and Character Classes can't be a range
+     start/end.  */
+  if (__glibc_unlikely (start_elem->type == EQUIV_CLASS
+                        || start_elem->type == CHAR_CLASS
+                        || end_elem->type == EQUIV_CLASS
+                        || end_elem->type == CHAR_CLASS))
+    return REG_ERANGE;
 
-      /* FIXME: Implement rational ranges here, too.  */
-      start_collseq = lookup_collation_sequence_value (start_elem);
-      end_collseq = lookup_collation_sequence_value (end_elem);
-      /* Check start/end collation sequence values.  */
-      if (__glibc_unlikely (start_collseq == UINT_MAX
-                           || end_collseq == UINT_MAX))
-       return REG_ECOLLATE;
-      if (__glibc_unlikely ((syntax & RE_NO_EMPTY_RANGES)
-                           && start_collseq > end_collseq))
-       return REG_ERANGE;
+  /* FIXME: Implement rational ranges here, too.  */
+  start_collseq = lookup_collation_sequence_value (start_elem, nrules, 
collseqmb, collseqwc,
+                                                  table_size, symb_table, 
extra);
+  end_collseq = lookup_collation_sequence_value (end_elem, nrules, collseqmb, 
collseqwc,
+                                                table_size, symb_table, extra);
+  /* Check start/end collation sequence values.  */
+  if (__glibc_unlikely (start_collseq == UINT_MAX
+                        || end_collseq == UINT_MAX))
+    return REG_ECOLLATE;
+  if (__glibc_unlikely ((syntax & RE_NO_EMPTY_RANGES)
+                        && start_collseq > end_collseq))
+    return REG_ERANGE;
 
-      /* Got valid collation sequence values, add them as a new entry.
-        However, if we have no collation elements, and the character set
-        is single byte, the single byte character set that we
-        build below suffices. */
-      if (nrules > 0 || dfa->mb_cur_max > 1)
+  /* Got valid collation sequence values, add them as a new entry.
+     However, if we have no collation elements, and the character set
+     is single byte, the single byte character set that we
+     build below suffices. */
+  if (nrules > 0 || dfa->mb_cur_max > 1)
+    {
+      /* Check the space of the arrays.  */
+      if (__glibc_unlikely (*range_alloc == mbcset->nranges))
        {
-         /* Check the space of the arrays.  */
-         if (__glibc_unlikely (*range_alloc == mbcset->nranges))
-           {
-             /* There is not enough space, need realloc.  */
-             uint32_t *new_array_start;
-             uint32_t *new_array_end;
-             Idx new_nranges;
-
-             /* +1 in case of mbcset->nranges is 0.  */
-             new_nranges = 2 * mbcset->nranges + 1;
-             new_array_start = re_realloc (mbcset->range_starts, uint32_t,
-                                           new_nranges);
-             new_array_end = re_realloc (mbcset->range_ends, uint32_t,
-                                         new_nranges);
-
-             if (__glibc_unlikely (new_array_start == NULL
-                                   || new_array_end == NULL))
-               return REG_ESPACE;
+         /* There is not enough space, need realloc.  */
+         uint32_t *new_array_start;
+         uint32_t *new_array_end;
+         int new_nranges;
 
-             mbcset->range_starts = new_array_start;
-             mbcset->range_ends = new_array_end;
-             *range_alloc = new_nranges;
-           }
+         /* +1 in case of mbcset->nranges is 0.  */
+         new_nranges = 2 * mbcset->nranges + 1;
+         new_array_start = re_realloc (mbcset->range_starts, uint32_t,
+                                       new_nranges);
+         new_array_end = re_realloc (mbcset->range_ends, uint32_t,
+                                     new_nranges);
 
-         mbcset->range_starts[mbcset->nranges] = start_collseq;
-         mbcset->range_ends[mbcset->nranges++] = end_collseq;
-       }
+          if (__glibc_unlikely (new_array_start == NULL
+                                || new_array_end == NULL))
+           return REG_ESPACE;
 
-      /* Build the table for single byte characters.  */
-      for (ch = 0; ch < SBC_MAX; ch++)
-       {
-         uint32_t ch_collseq;
-         /*
-         if (MB_CUR_MAX == 1)
-         */
-         if (nrules == 0)
-           ch_collseq = collseqmb[ch];
-         else
-           ch_collseq = __collseq_table_lookup (collseqwc, __btowc (ch));
-         if (start_collseq <= ch_collseq && ch_collseq <= end_collseq)
-           bitset_set (sbcset, ch);
+         mbcset->range_starts = new_array_start;
+         mbcset->range_ends = new_array_end;
+         *range_alloc = new_nranges;
        }
-      return REG_NOERROR;
+
+      mbcset->range_starts[mbcset->nranges] = start_collseq;
+      mbcset->range_ends[mbcset->nranges++] = end_collseq;
     }
 
-  /* Local function for parse_bracket_exp used in _LIBC environment.
-     Build the collating element which is represented by NAME.
-     The result are written to MBCSET and SBCSET.
-     COLL_SYM_ALLOC is the allocated size of mbcset->coll_sym, is a
-     pointer argument since we may update it.  */
+  /* Build the table for single byte characters.  */
+  for (ch = 0; ch < SBC_MAX; ch++)
+    {
+      uint32_t ch_collseq;
+      /* if (MB_CUR_MAX == 1) */
+      if (nrules == 0)
+       ch_collseq = collseqmb[ch];
+      else
+       ch_collseq = __collseq_table_lookup (collseqwc, __btowc (ch));
+      if (start_collseq <= ch_collseq && ch_collseq <= end_collseq)
+       bitset_set (sbcset, ch);
+    }
+  return REG_NOERROR;
+}
 
-  auto inline reg_errcode_t
-  __attribute__ ((always_inline))
-  build_collating_symbol (bitset_t sbcset, re_charset_t *mbcset,
-                         Idx *coll_sym_alloc, const unsigned char *name)
+/* Local function for parse_bracket_exp used in _LIBC environment.
+   Build the collating element which is represented by NAME.
+   The result are written to MBCSET and SBCSET.
+   COLL_SYM_ALLOC is the allocated size of mbcset->coll_sym, is a
+   pointer argument since we may update it.  */
+
+static __always_inline reg_errcode_t
+build_collating_symbol (bitset_t sbcset, re_charset_t *mbcset,
+                       Idx *coll_sym_alloc, const unsigned char *name,
+                       uint_fast32_t nrules, int_fast32_t table_size,
+                       const int32_t *symb_table, const unsigned char *extra)
+{
+  int32_t elem, idx;
+  size_t name_len = strlen ((const char *) name);
+  if (nrules != 0)
     {
-      int32_t elem, idx;
-      size_t name_len = strlen ((const char *) name);
-      if (nrules != 0)
+      elem = seek_collating_symbol_entry (name, name_len, symb_table,
+                                         table_size, extra);
+      if (elem != -1)
        {
-         elem = seek_collating_symbol_entry (name, name_len);
-         if (elem != -1)
-           {
-             /* We found the entry.  */
-             idx = symb_table[2 * elem + 1];
-             /* Skip the name of collating element name.  */
-             idx += 1 + extra[idx];
-           }
-         else if (name_len == 1)
-           {
-             /* No valid character, treat it as a normal
-                character.  */
-             bitset_set (sbcset, name[0]);
-             return REG_NOERROR;
-           }
-         else
-           return REG_ECOLLATE;
-
-         /* Got valid collation sequence, add it as a new entry.  */
-         /* Check the space of the arrays.  */
-         if (__glibc_unlikely (*coll_sym_alloc == mbcset->ncoll_syms))
-           {
-             /* Not enough, realloc it.  */
-             /* +1 in case of mbcset->ncoll_syms is 0.  */
-             Idx new_coll_sym_alloc = 2 * mbcset->ncoll_syms + 1;
-             /* Use realloc since mbcset->coll_syms is NULL
-                if *alloc == 0.  */
-             int32_t *new_coll_syms = re_realloc (mbcset->coll_syms, int32_t,
-                                                  new_coll_sym_alloc);
-             if (__glibc_unlikely (new_coll_syms == NULL))
-               return REG_ESPACE;
-             mbcset->coll_syms = new_coll_syms;
-             *coll_sym_alloc = new_coll_sym_alloc;
-           }
-         mbcset->coll_syms[mbcset->ncoll_syms++] = idx;
+         /* We found the entry.  */
+         idx = symb_table[2 * elem + 1];
+         /* Skip the name of collating element name.  */
+         idx += 1 + extra[idx];
+       }
+      else if (name_len == 1)
+       {
+         /* No valid character, treat it as a normal
+            character.  */
+         bitset_set (sbcset, name[0]);
          return REG_NOERROR;
        }
       else
+       return REG_ECOLLATE;
+
+      /* Got valid collation sequence, add it as a new entry.  */
+      /* Check the space of the arrays.  */
+      if (__glibc_unlikely (*coll_sym_alloc == mbcset->ncoll_syms))
        {
-         if (__glibc_unlikely (name_len != 1))
-           return REG_ECOLLATE;
-         else
-           {
-             bitset_set (sbcset, name[0]);
-             return REG_NOERROR;
-           }
+         /* Not enough, realloc it.  */
+         /* +1 in case of mbcset->ncoll_syms is 0.  */
+         int new_coll_sym_alloc = 2 * mbcset->ncoll_syms + 1;
+         /* Use realloc since mbcset->coll_syms is NULL
+            if *alloc == 0.  */
+         int32_t *new_coll_syms = re_realloc (mbcset->coll_syms, int32_t,
+                                              new_coll_sym_alloc);
+          if (__glibc_unlikely (new_coll_syms == NULL))
+           return REG_ESPACE;
+         mbcset->coll_syms = new_coll_syms;
+         *coll_sym_alloc = new_coll_sym_alloc;
        }
+      mbcset->coll_syms[mbcset->ncoll_syms++] = idx;
+      return REG_NOERROR;
     }
-#endif
+  else
+    {
+      if (__glibc_unlikely (name_len != 1))
+       return REG_ECOLLATE;
+      else
+       {
+         bitset_set (sbcset, name[0]);
+         return REG_NOERROR;
+       }
+    }
+}
+#endif /* _LIBC */
+
+/* This function parse bracket expression like "[abc]", "[a-c]",
+   "[[.a-a.]]" etc.  */
+
+static bin_tree_t *
+parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token,
+                  reg_syntax_t syntax, reg_errcode_t *err)
+{
+  const unsigned char *collseqmb = NULL;
+  const char *collseqwc = NULL;
+  uint_fast32_t nrules = 0;
+  int_fast32_t table_size = 0;
+  const void *symb_table = NULL;
+  const unsigned char *extra = NULL;
 
   re_token_t br_token;
   re_bitset_ptr_t sbcset;
-#ifdef RE_ENABLE_I18N
   re_charset_t *mbcset;
   Idx coll_sym_alloc = 0, range_alloc = 0, mbchar_alloc = 0;
   Idx equiv_class_alloc = 0, char_class_alloc = 0;
-#endif /* not RE_ENABLE_I18N */
   bool non_match = false;
   bin_tree_t *work_tree;
   int token_len;
@@ -3111,26 +3040,17 @@ parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, 
re_token_t *token,
       */
       collseqwc = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQWC);
       table_size = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_SYMB_HASH_SIZEMB);
-      symb_table = (const int32_t *) _NL_CURRENT (LC_COLLATE,
-                                                 _NL_COLLATE_SYMB_TABLEMB);
+      symb_table = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_TABLEMB);
       extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE,
                                                   _NL_COLLATE_SYMB_EXTRAMB);
     }
 #endif
   sbcset = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1);
-#ifdef RE_ENABLE_I18N
   mbcset = (re_charset_t *) calloc (sizeof (re_charset_t), 1);
-#endif /* RE_ENABLE_I18N */
-#ifdef RE_ENABLE_I18N
   if (__glibc_unlikely (sbcset == NULL || mbcset == NULL))
-#else
-  if (__glibc_unlikely (sbcset == NULL))
-#endif /* RE_ENABLE_I18N */
     {
       re_free (sbcset);
-#ifdef RE_ENABLE_I18N
       re_free (mbcset);
-#endif
       *err = REG_ESPACE;
       return NULL;
     }
@@ -3143,9 +3063,7 @@ parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, 
re_token_t *token,
     }
   if (token->type == OP_NON_MATCH_LIST)
     {
-#ifdef RE_ENABLE_I18N
       mbcset->non_match = 1;
-#endif /* not RE_ENABLE_I18N */
       non_match = true;
       if (syntax & RE_HAT_LISTS_NOT_NEWLINE)
        bitset_set (sbcset, '\n');
@@ -3228,18 +3146,10 @@ parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, 
re_token_t *token,
 
          token_len = peek_token_bracket (token, regexp, syntax);
 
-#ifdef _LIBC
          *err = build_range_exp (sbcset, mbcset, &range_alloc,
-                                 &start_elem, &end_elem);
-#else
-# ifdef RE_ENABLE_I18N
-         *err = build_range_exp (syntax, sbcset,
-                                 dfa->mb_cur_max > 1 ? mbcset : NULL,
-                                 &range_alloc, &start_elem, &end_elem);
-# else
-         *err = build_range_exp (syntax, sbcset, &start_elem, &end_elem);
-# endif
-#endif /* RE_ENABLE_I18N */
+                                 &start_elem, &end_elem,
+                                 dfa, syntax, nrules, collseqmb, collseqwc,
+                                 table_size, symb_table, extra);
          if (__glibc_unlikely (*err != REG_NOERROR))
            goto parse_bracket_exp_free_return;
        }
@@ -3250,7 +3160,6 @@ parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, 
re_token_t *token,
            case SB_CHAR:
              bitset_set (sbcset, start_elem.opr.ch);
              break;
-#ifdef RE_ENABLE_I18N
            case MB_CHAR:
              /* Check whether the array has enough space.  */
              if (__glibc_unlikely (mbchar_alloc == mbcset->nmbchars))
@@ -3268,30 +3177,24 @@ parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, 
re_token_t *token,
                }
              mbcset->mbchars[mbcset->nmbchars++] = start_elem.opr.wch;
              break;
-#endif /* RE_ENABLE_I18N */
            case EQUIV_CLASS:
              *err = build_equiv_class (sbcset,
-#ifdef RE_ENABLE_I18N
                                        mbcset, &equiv_class_alloc,
-#endif /* RE_ENABLE_I18N */
                                        start_elem.opr.name);
              if (__glibc_unlikely (*err != REG_NOERROR))
                goto parse_bracket_exp_free_return;
              break;
            case COLL_SYM:
              *err = build_collating_symbol (sbcset,
-#ifdef RE_ENABLE_I18N
                                             mbcset, &coll_sym_alloc,
-#endif /* RE_ENABLE_I18N */
-                                            start_elem.opr.name);
+                                            start_elem.opr.name,
+                                            nrules, table_size, symb_table, 
extra);
              if (__glibc_unlikely (*err != REG_NOERROR))
                goto parse_bracket_exp_free_return;
              break;
            case CHAR_CLASS:
              *err = build_charclass (regexp->trans, sbcset,
-#ifdef RE_ENABLE_I18N
                                      mbcset, &char_class_alloc,
-#endif /* RE_ENABLE_I18N */
                                      (const char *) start_elem.opr.name,
                                      syntax);
              if (__glibc_unlikely (*err != REG_NOERROR))
@@ -3317,7 +3220,6 @@ parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, 
re_token_t *token,
   if (non_match)
     bitset_not (sbcset);
 
-#ifdef RE_ENABLE_I18N
   /* Ensure only single byte characters are set.  */
   if (dfa->mb_cur_max > 1)
     bitset_mask (sbcset, dfa->sb_char);
@@ -3361,11 +3263,8 @@ parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, 
re_token_t *token,
        }
     }
   else
-#endif /* not RE_ENABLE_I18N */
     {
-#ifdef RE_ENABLE_I18N
       free_charset (mbcset);
-#endif
       /* Build a tree for simple bracket.  */
       br_token.type = SIMPLE_BRACKET;
       br_token.opr.sbcset = sbcset;
@@ -3379,9 +3278,7 @@ parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, 
re_token_t *token,
   *err = REG_ESPACE;
  parse_bracket_exp_free_return:
   re_free (sbcset);
-#ifdef RE_ENABLE_I18N
   free_charset (mbcset);
-#endif /* RE_ENABLE_I18N */
   return NULL;
 }
 
@@ -3392,7 +3289,6 @@ parse_bracket_element (bracket_elem_t *elem, re_string_t 
*regexp,
                       re_token_t *token, int token_len, re_dfa_t *dfa,
                       reg_syntax_t syntax, bool accept_hyphen)
 {
-#ifdef RE_ENABLE_I18N
   int cur_char_size;
   cur_char_size = re_string_char_size_at (regexp, re_string_cur_idx (regexp));
   if (cur_char_size > 1)
@@ -3402,7 +3298,6 @@ parse_bracket_element (bracket_elem_t *elem, re_string_t 
*regexp,
       re_string_skip_bytes (regexp, cur_char_size);
       return REG_NOERROR;
     }
-#endif /* RE_ENABLE_I18N */
   re_string_skip_bytes (regexp, token_len); /* Skip a token.  */
   if (token->type == OP_OPEN_COLL_ELEM || token->type == OP_OPEN_CHAR_CLASS
       || token->type == OP_OPEN_EQUIV_CLASS)
@@ -3475,12 +3370,8 @@ parse_bracket_symbol (bracket_elem_t *elem, re_string_t 
*regexp,
      is a pointer argument since we may update it.  */
 
 static reg_errcode_t
-#ifdef RE_ENABLE_I18N
 build_equiv_class (bitset_t sbcset, re_charset_t *mbcset,
                   Idx *equiv_class_alloc, const unsigned char *name)
-#else /* not RE_ENABLE_I18N */
-build_equiv_class (bitset_t sbcset, const unsigned char *name)
-#endif /* not RE_ENABLE_I18N */
 {
 #ifdef _LIBC
   uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
@@ -3560,14 +3451,9 @@ build_equiv_class (bitset_t sbcset, const unsigned char 
*name)
      is a pointer argument since we may update it.  */
 
 static reg_errcode_t
-#ifdef RE_ENABLE_I18N
 build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset,
                 re_charset_t *mbcset, Idx *char_class_alloc,
                 const char *class_name, reg_syntax_t syntax)
-#else /* not RE_ENABLE_I18N */
-build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset,
-                const char *class_name, reg_syntax_t syntax)
-#endif /* not RE_ENABLE_I18N */
 {
   int i;
   const char *name = class_name;
@@ -3578,7 +3464,6 @@ build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset,
       && (strcmp (name, "upper") == 0 || strcmp (name, "lower") == 0))
     name = "alpha";
 
-#ifdef RE_ENABLE_I18N
   /* Check the space of the arrays.  */
   if (__glibc_unlikely (*char_class_alloc == mbcset->nchar_classes))
     {
@@ -3594,7 +3479,6 @@ build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset,
       *char_class_alloc = new_char_class_alloc;
     }
   mbcset->char_classes[mbcset->nchar_classes++] = __wctype (name);
-#endif /* RE_ENABLE_I18N */
 
 #define BUILD_CHARCLASS_LOOP(ctype_func)       \
   do {                                         \
@@ -3649,10 +3533,8 @@ build_charclass_op (re_dfa_t *dfa, RE_TRANSLATE_TYPE 
trans,
                    reg_errcode_t *err)
 {
   re_bitset_ptr_t sbcset;
-#ifdef RE_ENABLE_I18N
   re_charset_t *mbcset;
   Idx alloc = 0;
-#endif /* not RE_ENABLE_I18N */
   reg_errcode_t ret;
   bin_tree_t *tree;
 
@@ -3662,7 +3544,6 @@ build_charclass_op (re_dfa_t *dfa, RE_TRANSLATE_TYPE 
trans,
       *err = REG_ESPACE;
       return NULL;
     }
-#ifdef RE_ENABLE_I18N
   mbcset = (re_charset_t *) calloc (sizeof (re_charset_t), 1);
   if (__glibc_unlikely (mbcset == NULL))
     {
@@ -3671,21 +3552,14 @@ build_charclass_op (re_dfa_t *dfa, RE_TRANSLATE_TYPE 
trans,
       return NULL;
     }
   mbcset->non_match = non_match;
-#endif /* RE_ENABLE_I18N */
 
   /* We don't care the syntax in this case.  */
-  ret = build_charclass (trans, sbcset,
-#ifdef RE_ENABLE_I18N
-                        mbcset, &alloc,
-#endif /* RE_ENABLE_I18N */
-                        class_name, 0);
+  ret = build_charclass (trans, sbcset, mbcset, &alloc, class_name, 0);
 
   if (__glibc_unlikely (ret != REG_NOERROR))
     {
       re_free (sbcset);
-#ifdef RE_ENABLE_I18N
       free_charset (mbcset);
-#endif /* RE_ENABLE_I18N */
       *err = ret;
       return NULL;
     }
@@ -3697,11 +3571,9 @@ build_charclass_op (re_dfa_t *dfa, RE_TRANSLATE_TYPE 
trans,
   if (non_match)
     bitset_not (sbcset);
 
-#ifdef RE_ENABLE_I18N
   /* Ensure only single byte characters are set.  */
   if (dfa->mb_cur_max > 1)
     bitset_mask (sbcset, dfa->sb_char);
-#endif
 
   /* Build a tree for simple bracket.  */
   re_token_t br_token = { .type = SIMPLE_BRACKET, .opr.sbcset = sbcset };
@@ -3709,7 +3581,6 @@ build_charclass_op (re_dfa_t *dfa, RE_TRANSLATE_TYPE 
trans,
   if (__glibc_unlikely (tree == NULL))
     goto build_word_op_espace;
 
-#ifdef RE_ENABLE_I18N
   if (dfa->mb_cur_max > 1)
     {
       bin_tree_t *mbc_tree;
@@ -3730,15 +3601,10 @@ build_charclass_op (re_dfa_t *dfa, RE_TRANSLATE_TYPE 
trans,
       free_charset (mbcset);
       return tree;
     }
-#else /* not RE_ENABLE_I18N */
-  return tree;
-#endif /* not RE_ENABLE_I18N */
 
  build_word_op_espace:
   re_free (sbcset);
-#ifdef RE_ENABLE_I18N
   free_charset (mbcset);
-#endif /* RE_ENABLE_I18N */
   *err = REG_ESPACE;
   return NULL;
 }
@@ -3771,21 +3637,19 @@ fetch_number (re_string_t *input, re_token_t *token, 
reg_syntax_t syntax)
   return num;
 }
 
-#ifdef RE_ENABLE_I18N
 static void
 free_charset (re_charset_t *cset)
 {
   re_free (cset->mbchars);
-# ifdef _LIBC
+#ifdef _LIBC
   re_free (cset->coll_syms);
   re_free (cset->equiv_classes);
-# endif
+#endif
   re_free (cset->range_starts);
   re_free (cset->range_ends);
   re_free (cset->char_classes);
   re_free (cset);
 }
-#endif /* RE_ENABLE_I18N */
 
 /* Functions for binary tree operation.  */
 
@@ -3851,13 +3715,10 @@ mark_opt_subexp (void *extra, bin_tree_t *node)
 static void
 free_token (re_token_t *node)
 {
-#ifdef RE_ENABLE_I18N
   if (node->type == COMPLEX_BRACKET && node->duplicated == 0)
     free_charset (node->opr.mbcset);
-  else
-#endif /* RE_ENABLE_I18N */
-    if (node->type == SIMPLE_BRACKET && node->duplicated == 0)
-      re_free (node->opr.sbcset);
+  else if (node->type == SIMPLE_BRACKET && node->duplicated == 0)
+    re_free (node->opr.sbcset);
 }
 
 /* Worker function for tree walking.  Free the allocated memory inside NODE
diff --git a/lib/regex.c b/lib/regex.c
index d32863972c..ff1176782e 100644
--- a/lib/regex.c
+++ b/lib/regex.c
@@ -1,5 +1,5 @@
 /* Extended regular expression matching and search library.
-   Copyright (C) 2002-2021 Free Software Foundation, Inc.
+   Copyright (C) 2002-2022 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 adb69768ee..a7e0bd0275 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1985, 1989-2022 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 aefcfa2f52..3945ee7ecb 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2002-2022 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>.
 
@@ -30,10 +30,8 @@ static re_dfastate_t *create_cd_newstate (const re_dfa_t 
*dfa,
                                          re_hashval_t hash);
 static reg_errcode_t re_string_realloc_buffers (re_string_t *pstr,
                                                Idx new_buf_len);
-#ifdef RE_ENABLE_I18N
 static void build_wcs_buffer (re_string_t *pstr);
 static reg_errcode_t build_wcs_upper_buffer (re_string_t *pstr);
-#endif /* RE_ENABLE_I18N */
 static void build_upper_buffer (re_string_t *pstr);
 static void re_string_translate_buffer (re_string_t *pstr);
 static unsigned int re_string_context_at (const re_string_t *input, Idx idx,
@@ -91,7 +89,6 @@ re_string_construct (re_string_t *pstr, const char *str, Idx 
len,
 
   if (icase)
     {
-#ifdef RE_ENABLE_I18N
       if (dfa->mb_cur_max > 1)
        {
          while (1)
@@ -109,16 +106,13 @@ re_string_construct (re_string_t *pstr, const char *str, 
Idx len,
            }
        }
       else
-#endif /* RE_ENABLE_I18N  */
        build_upper_buffer (pstr);
     }
   else
     {
-#ifdef RE_ENABLE_I18N
       if (dfa->mb_cur_max > 1)
        build_wcs_buffer (pstr);
       else
-#endif /* RE_ENABLE_I18N  */
        {
          if (trans != NULL)
            re_string_translate_buffer (pstr);
@@ -139,7 +133,6 @@ static reg_errcode_t
 __attribute_warn_unused_result__
 re_string_realloc_buffers (re_string_t *pstr, Idx new_buf_len)
 {
-#ifdef RE_ENABLE_I18N
   if (pstr->mb_cur_max > 1)
     {
       wint_t *new_wcs;
@@ -162,7 +155,6 @@ re_string_realloc_buffers (re_string_t *pstr, Idx 
new_buf_len)
          pstr->offsets = new_offsets;
        }
     }
-#endif /* RE_ENABLE_I18N  */
   if (pstr->mbs_allocated)
     {
       unsigned char *new_mbs = re_realloc (pstr->mbs, unsigned char,
@@ -194,7 +186,6 @@ re_string_construct_common (const char *str, Idx len, 
re_string_t *pstr,
   pstr->raw_stop = pstr->stop;
 }
 
-#ifdef RE_ENABLE_I18N
 
 /* Build wide character buffer PSTR->WCS.
    If the byte sequence of the string are:
@@ -530,7 +521,6 @@ re_string_skip_chars (re_string_t *pstr, Idx new_raw_idx, 
wint_t *last_wc)
   *last_wc = wc;
   return rawbuf_idx;
 }
-#endif /* RE_ENABLE_I18N  */
 
 /* Build the buffer PSTR->MBS, and apply the translation if we need.
    This function is used in case of REG_ICASE.  */
@@ -585,10 +575,8 @@ re_string_reconstruct (re_string_t *pstr, Idx idx, int 
eflags)
   else
     {
       /* Reset buffer.  */
-#ifdef RE_ENABLE_I18N
       if (pstr->mb_cur_max > 1)
        memset (&pstr->cur_state, '\0', sizeof (mbstate_t));
-#endif /* RE_ENABLE_I18N */
       pstr->len = pstr->raw_len;
       pstr->stop = pstr->raw_stop;
       pstr->valid_len = 0;
@@ -608,7 +596,6 @@ re_string_reconstruct (re_string_t *pstr, Idx idx, int 
eflags)
       if (__glibc_likely (offset < pstr->valid_raw_len))
        {
          /* Yes, move them to the front of the buffer.  */
-#ifdef RE_ENABLE_I18N
          if (__glibc_unlikely (pstr->offsets_needed))
            {
              Idx low = 0, high = pstr->valid_len, mid;
@@ -672,15 +659,12 @@ re_string_reconstruct (re_string_t *pstr, Idx idx, int 
eflags)
                }
            }
          else
-#endif
            {
              pstr->tip_context = re_string_context_at (pstr, offset - 1,
                                                        eflags);
-#ifdef RE_ENABLE_I18N
              if (pstr->mb_cur_max > 1)
                memmove (pstr->wcs, pstr->wcs + offset,
                         (pstr->valid_len - offset) * sizeof (wint_t));
-#endif /* RE_ENABLE_I18N */
              if (__glibc_unlikely (pstr->mbs_allocated))
                memmove (pstr->mbs, pstr->mbs + offset,
                         pstr->valid_len - offset);
@@ -691,7 +675,6 @@ re_string_reconstruct (re_string_t *pstr, Idx idx, int 
eflags)
        }
       else
        {
-#ifdef RE_ENABLE_I18N
          /* No, skip all characters until IDX.  */
          Idx prev_valid_len = pstr->valid_len;
 
@@ -701,9 +684,7 @@ re_string_reconstruct (re_string_t *pstr, Idx idx, int 
eflags)
              pstr->stop = pstr->raw_stop - idx + offset;
              pstr->offsets_needed = 0;
            }
-#endif
          pstr->valid_len = 0;
-#ifdef RE_ENABLE_I18N
          if (pstr->mb_cur_max > 1)
            {
              Idx wcs_idx;
@@ -787,7 +768,6 @@ re_string_reconstruct (re_string_t *pstr, Idx idx, int 
eflags)
              pstr->valid_raw_len = pstr->valid_len;
            }
          else
-#endif /* RE_ENABLE_I18N */
            {
              int c = pstr->raw_mbs[pstr->raw_mbs_idx + offset - 1];
              pstr->valid_raw_len = 0;
@@ -807,7 +787,6 @@ re_string_reconstruct (re_string_t *pstr, Idx idx, int 
eflags)
   pstr->stop -= offset;
 
   /* Then build the buffers.  */
-#ifdef RE_ENABLE_I18N
   if (pstr->mb_cur_max > 1)
     {
       if (pstr->icase)
@@ -820,7 +799,6 @@ re_string_reconstruct (re_string_t *pstr, Idx idx, int 
eflags)
        build_wcs_buffer (pstr);
     }
   else
-#endif /* RE_ENABLE_I18N */
     if (__glibc_unlikely (pstr->mbs_allocated))
       {
        if (pstr->icase)
@@ -846,28 +824,22 @@ re_string_peek_byte_case (const re_string_t *pstr, Idx 
idx)
   if (__glibc_likely (!pstr->mbs_allocated))
     return re_string_peek_byte (pstr, idx);
 
-#ifdef RE_ENABLE_I18N
   if (pstr->mb_cur_max > 1
       && ! re_string_is_single_byte_char (pstr, pstr->cur_idx + idx))
     return re_string_peek_byte (pstr, idx);
-#endif
 
   off = pstr->cur_idx + idx;
-#ifdef RE_ENABLE_I18N
   if (pstr->offsets_needed)
     off = pstr->offsets[off];
-#endif
 
   ch = pstr->raw_mbs[pstr->raw_mbs_idx + off];
 
-#ifdef RE_ENABLE_I18N
   /* Ensure that e.g. for tr_TR.UTF-8 BACKSLASH DOTLESS SMALL LETTER I
      this function returns CAPITAL LETTER I instead of first byte of
      DOTLESS SMALL LETTER I.  The latter would confuse the parser,
      since peek_byte_case doesn't advance cur_idx in any way.  */
   if (pstr->offsets_needed && !isascii (ch))
     return re_string_peek_byte (pstr, idx);
-#endif
 
   return ch;
 }
@@ -878,7 +850,6 @@ re_string_fetch_byte_case (re_string_t *pstr)
   if (__glibc_likely (!pstr->mbs_allocated))
     return re_string_fetch_byte (pstr);
 
-#ifdef RE_ENABLE_I18N
   if (pstr->offsets_needed)
     {
       Idx off;
@@ -904,7 +875,6 @@ re_string_fetch_byte_case (re_string_t *pstr)
                            re_string_char_size_at (pstr, pstr->cur_idx));
       return ch;
     }
-#endif
 
   return pstr->raw_mbs[pstr->raw_mbs_idx + pstr->cur_idx++];
 }
@@ -912,10 +882,8 @@ re_string_fetch_byte_case (re_string_t *pstr)
 static void
 re_string_destruct (re_string_t *pstr)
 {
-#ifdef RE_ENABLE_I18N
   re_free (pstr->wcs);
   re_free (pstr->offsets);
-#endif /* RE_ENABLE_I18N  */
   if (pstr->mbs_allocated)
     re_free (pstr->mbs);
 }
@@ -933,7 +901,6 @@ re_string_context_at (const re_string_t *input, Idx idx, 
int eflags)
   if (__glibc_unlikely (idx == input->len))
     return ((eflags & REG_NOTEOL) ? CONTEXT_ENDBUF
            : CONTEXT_NEWLINE | CONTEXT_ENDBUF);
-#ifdef RE_ENABLE_I18N
   if (input->mb_cur_max > 1)
     {
       wint_t wc;
@@ -953,7 +920,6 @@ re_string_context_at (const re_string_t *input, Idx idx, 
int eflags)
              ? CONTEXT_NEWLINE : 0);
     }
   else
-#endif
     {
       c = re_string_byte_at (input, idx);
       if (bitset_contain (input->word_char, c))
@@ -1451,11 +1417,9 @@ re_dfa_add_node (re_dfa_t *dfa, re_token_t token)
     }
   dfa->nodes[dfa->nodes_len] = token;
   dfa->nodes[dfa->nodes_len].constraint = 0;
-#ifdef RE_ENABLE_I18N
   dfa->nodes[dfa->nodes_len].accept_mb =
     ((token.type == OP_PERIOD && dfa->mb_cur_max > 1)
      || token.type == COMPLEX_BRACKET);
-#endif
   dfa->nexts[dfa->nodes_len] = -1;
   re_node_set_init_empty (dfa->edests + dfa->nodes_len);
   re_node_set_init_empty (dfa->eclosures + dfa->nodes_len);
@@ -1651,9 +1615,7 @@ create_ci_newstate (const re_dfa_t *dfa, const 
re_node_set *nodes,
       re_token_type_t type = node->type;
       if (type == CHARACTER && !node->constraint)
        continue;
-#ifdef RE_ENABLE_I18N
       newstate->accept_mb |= node->accept_mb;
-#endif /* RE_ENABLE_I18N */
 
       /* If the state has the halt node, the state is a halt state.  */
       if (type == END_OF_RE)
@@ -1705,9 +1667,7 @@ create_cd_newstate (const re_dfa_t *dfa, const 
re_node_set *nodes,
 
       if (type == CHARACTER && !constraint)
        continue;
-#ifdef RE_ENABLE_I18N
       newstate->accept_mb |= node->accept_mb;
-#endif /* RE_ENABLE_I18N */
 
       /* If the state has the halt node, the state is a halt state.  */
       if (type == END_OF_RE)
diff --git a/lib/regex_internal.h b/lib/regex_internal.h
index 1245e782ff..57a455b1f4 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2002-2022 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>.
 
@@ -116,10 +116,6 @@
 # define gettext_noop(String) String
 #endif
 
-#if (defined MB_CUR_MAX && HAVE_WCTYPE_H && HAVE_ISWCTYPE) || _LIBC
-# define RE_ENABLE_I18N
-#endif
-
 /* Number of ASCII characters.  */
 #define ASCII_CHARS 0x80
 
@@ -150,6 +146,11 @@
 # define __regfree regfree
 #endif /* not _LIBC */
 
+/* Types related to integers.  Unless protected by #ifdef _LIBC, the
+   regex code should avoid exact-width types like int32_t and uint64_t
+   as some non-GCC platforms lack them, an issue when this code is
+   used in Gnulib.  */
+
 #ifndef SSIZE_MAX
 # define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2))
 #endif
@@ -246,10 +247,8 @@ typedef enum
   SIMPLE_BRACKET = 3,
   OP_BACK_REF = 4,
   OP_PERIOD = 5,
-#ifdef RE_ENABLE_I18N
   COMPLEX_BRACKET = 6,
   OP_UTF8_PERIOD = 7,
-#endif /* RE_ENABLE_I18N */
 
   /* We define EPSILON_BIT as a macro so that OP_OPEN_SUBEXP is used
      when the debugger shows values of this enum type.  */
@@ -287,30 +286,29 @@ typedef enum
 
 } re_token_type_t;
 
-#ifdef RE_ENABLE_I18N
 typedef struct
 {
   /* Multibyte characters.  */
   wchar_t *mbchars;
 
+#ifdef _LIBC
   /* Collating symbols.  */
-# ifdef _LIBC
   int32_t *coll_syms;
-# endif
+#endif
 
+#ifdef _LIBC
   /* Equivalence classes. */
-# ifdef _LIBC
   int32_t *equiv_classes;
-# endif
+#endif
 
   /* Range expressions. */
-# ifdef _LIBC
+#ifdef _LIBC
   uint32_t *range_starts;
   uint32_t *range_ends;
-# else /* not _LIBC */
+#else
   wchar_t *range_starts;
   wchar_t *range_ends;
-# endif /* not _LIBC */
+#endif
 
   /* Character classes. */
   wctype_t *char_classes;
@@ -333,7 +331,6 @@ typedef struct
   /* # of character classes. */
   Idx nchar_classes;
 } re_charset_t;
-#endif /* RE_ENABLE_I18N */
 
 typedef struct
 {
@@ -341,9 +338,7 @@ typedef struct
   {
     unsigned char c;           /* for CHARACTER */
     re_bitset_ptr_t sbcset;    /* for SIMPLE_BRACKET */
-#ifdef RE_ENABLE_I18N
     re_charset_t *mbcset;      /* for COMPLEX_BRACKET */
-#endif /* RE_ENABLE_I18N */
     Idx idx;                   /* for BACK_REF */
     re_context_type ctx_type;  /* for ANCHOR */
   } opr;
@@ -355,12 +350,10 @@ typedef struct
   unsigned int constraint : 10;        /* context constraint */
   unsigned int duplicated : 1;
   unsigned int opt_subexp : 1;
-#ifdef RE_ENABLE_I18N
   unsigned int accept_mb : 1;
   /* These 2 bits can be moved into the union if needed (e.g. if running out
      of bits; move opr.c to opr.c.c and move the flags to opr.c.flags).  */
   unsigned int mb_partial : 1;
-#endif
   unsigned int word_char : 1;
 } re_token_t;
 
@@ -375,12 +368,10 @@ struct re_string_t
      REG_ICASE, upper cases of the string are stored, otherwise MBS points
      the same address that RAW_MBS points.  */
   unsigned char *mbs;
-#ifdef RE_ENABLE_I18N
   /* Store the wide character string which is corresponding to MBS.  */
   wint_t *wcs;
   Idx *offsets;
   mbstate_t cur_state;
-#endif
   /* Index in RAW_MBS.  Each character mbs[i] corresponds to
      raw_mbs[raw_mbs_idx + i].  */
   Idx raw_mbs_idx;
@@ -779,7 +770,6 @@ bitset_mask (bitset_t dest, const bitset_t src)
     dest[bitset_i] &= src[bitset_i];
 }
 
-#ifdef RE_ENABLE_I18N
 /* Functions for re_string.  */
 static int
 __attribute__ ((pure, unused))
@@ -803,15 +793,15 @@ re_string_wchar_at (const re_string_t *pstr, Idx idx)
   return (wint_t) pstr->wcs[idx];
 }
 
-# ifdef _LIBC
-#  include <locale/weight.h>
-# endif
+#ifdef _LIBC
+# include <locale/weight.h>
+#endif
 
 static int
 __attribute__ ((pure, unused))
 re_string_elem_size_at (const re_string_t *pstr, Idx idx)
 {
-# ifdef _LIBC
+#ifdef _LIBC
   const unsigned char *p, *extra;
   const int32_t *table, *indirect;
   uint_fast32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
@@ -827,11 +817,10 @@ re_string_elem_size_at (const re_string_t *pstr, Idx idx)
       findidx (table, indirect, extra, &p, pstr->len - idx);
       return p - pstr->mbs - idx;
     }
-  else
-# endif /* _LIBC */
-    return 1;
+#endif /* _LIBC */
+
+  return 1;
 }
-#endif /* RE_ENABLE_I18N */
 
 #ifdef _LIBC
 # if __GNUC__ >= 7
diff --git a/lib/regexec.c b/lib/regexec.c
index 83e9aaf8ca..aea1e7da52 100644
--- a/lib/regexec.c
+++ b/lib/regexec.c
@@ -1,5 +1,5 @@
 /* Extended regular expression matching and search library.
-   Copyright (C) 2002-2021 Free Software Foundation, Inc.
+   Copyright (C) 2002-2022 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>.
 
@@ -67,11 +67,9 @@ static reg_errcode_t set_regs (const regex_t *preg,
                               bool fl_backtrack);
 static reg_errcode_t free_fail_stack_return (struct re_fail_stack_t *fs);
 
-#ifdef RE_ENABLE_I18N
 static int sift_states_iter_mb (const re_match_context_t *mctx,
                                re_sift_context_t *sctx,
                                Idx node_idx, Idx str_idx, Idx max_str_idx);
-#endif /* RE_ENABLE_I18N */
 static reg_errcode_t sift_states_backward (const re_match_context_t *mctx,
                                           re_sift_context_t *sctx);
 static reg_errcode_t build_sifted_states (const re_match_context_t *mctx,
@@ -123,10 +121,8 @@ static re_dfastate_t *transit_state_sb (reg_errcode_t *err,
                                        re_match_context_t *mctx,
                                        re_dfastate_t *pstate);
 #endif
-#ifdef RE_ENABLE_I18N
 static reg_errcode_t transit_state_mb (re_match_context_t *mctx,
                                       re_dfastate_t *pstate);
-#endif /* RE_ENABLE_I18N */
 static reg_errcode_t transit_state_bkref (re_match_context_t *mctx,
                                          const re_node_set *nodes);
 static reg_errcode_t get_subexp (re_match_context_t *mctx,
@@ -156,14 +152,12 @@ static reg_errcode_t expand_bkref_cache 
(re_match_context_t *mctx,
                                         re_node_set *cur_nodes, Idx cur_str,
                                         Idx subexp_num, int type);
 static bool build_trtable (const re_dfa_t *dfa, re_dfastate_t *state);
-#ifdef RE_ENABLE_I18N
 static int check_node_accept_bytes (const re_dfa_t *dfa, Idx node_idx,
                                    const re_string_t *input, Idx idx);
-# ifdef _LIBC
+#ifdef _LIBC
 static unsigned int find_collation_sequence_value (const unsigned char *mbs,
                                                   size_t name_len);
-# endif /* _LIBC */
-#endif /* RE_ENABLE_I18N */
+#endif
 static Idx group_nodes_into_DFAstates (const re_dfa_t *dfa,
                                       const re_dfastate_t *state,
                                       re_node_set *states_node,
@@ -758,10 +752,9 @@ re_search_internal (const regex_t *preg, const char 
*string, Idx length,
 
                  offset = match_first - mctx.input.raw_mbs_idx;
                }
-             /* If MATCH_FIRST is out of the buffer, leave it as '\0'.
-                Note that MATCH_FIRST must not be smaller than 0.  */
-             ch = (match_first >= length
-                   ? 0 : re_string_byte_at (&mctx.input, offset));
+             /* Use buffer byte if OFFSET is in buffer, otherwise '\0'.  */
+             ch = (offset < mctx.input.valid_len
+                   ? re_string_byte_at (&mctx.input, offset) : 0);
              if (fastmap[ch])
                break;
              match_first += incr;
@@ -780,12 +773,10 @@ re_search_internal (const regex_t *preg, const char 
*string, Idx length,
       if (__glibc_unlikely (err != REG_NOERROR))
        goto free_return;
 
-#ifdef RE_ENABLE_I18N
-     /* Don't consider this char as a possible match start if it part,
-       yet isn't the head, of a multibyte character.  */
+      /* Don't consider this char as a possible match start if it part,
+         yet isn't the head, of a multibyte character.  */
       if (!sb && !re_string_first_byte (&mctx.input, 0))
        continue;
-#endif
 
       /* It seems to be appropriate one, then use the matcher.  */
       /* We assume that the matching starts from 0.  */
@@ -859,7 +850,6 @@ re_search_internal (const regex_t *preg, const char 
*string, Idx length,
       for (reg_idx = 0; reg_idx < nmatch; ++reg_idx)
        if (pmatch[reg_idx].rm_so != -1)
          {
-#ifdef RE_ENABLE_I18N
            if (__glibc_unlikely (mctx.input.offsets_needed != 0))
              {
                pmatch[reg_idx].rm_so =
@@ -871,9 +861,6 @@ re_search_internal (const regex_t *preg, const char 
*string, Idx length,
                   ? mctx.input.valid_raw_len
                   : mctx.input.offsets[pmatch[reg_idx].rm_eo]);
              }
-#else
-           DEBUG_ASSERT (mctx.input.offsets_needed == 0);
-#endif
            pmatch[reg_idx].rm_so += match_first;
            pmatch[reg_idx].rm_eo += match_first;
          }
@@ -997,8 +984,7 @@ prune_impossible_nodes (re_match_context_t *mctx)
    We must select appropriate initial state depending on the context,
    since initial states may have constraints like "\<", "^", etc..  */
 
-static inline re_dfastate_t *
-__attribute__ ((always_inline))
+static __always_inline re_dfastate_t *
 acquire_init_state_context (reg_errcode_t *err, const re_match_context_t *mctx,
                            Idx idx)
 {
@@ -1262,12 +1248,9 @@ proceed_next_node (const re_match_context_t *mctx, Idx 
nregs, regmatch_t *regs,
       Idx naccepted = 0;
       re_token_type_t type = dfa->nodes[node].type;
 
-#ifdef RE_ENABLE_I18N
       if (dfa->nodes[node].accept_mb)
        naccepted = check_node_accept_bytes (dfa, node, &mctx->input, *pidx);
-      else
-#endif /* RE_ENABLE_I18N */
-      if (type == OP_BACK_REF)
+      else if (type == OP_BACK_REF)
        {
          Idx subexp_idx = dfa->nodes[node].opr.idx + 1;
          if (subexp_idx < nregs)
@@ -1635,12 +1618,10 @@ build_sifted_states (const re_match_context_t *mctx, 
re_sift_context_t *sctx,
       bool ok;
       DEBUG_ASSERT (!IS_EPSILON_NODE (dfa->nodes[prev_node].type));
 
-#ifdef RE_ENABLE_I18N
       /* If the node may accept "multi byte".  */
       if (dfa->nodes[prev_node].accept_mb)
        naccepted = sift_states_iter_mb (mctx, sctx, prev_node,
                                         str_idx, sctx->last_str_idx);
-#endif /* RE_ENABLE_I18N */
 
       /* We don't check backreferences here.
         See update_cur_sifted_state().  */
@@ -1689,6 +1670,7 @@ clean_state_log_if_needed (re_match_context_t *mctx, Idx 
next_state_log_idx)
 
   if (top < next_state_log_idx)
     {
+      DEBUG_ASSERT (mctx->state_log != NULL);
       memset (mctx->state_log + top + 1, '\0',
              sizeof (re_dfastate_t *) * (next_state_log_idx - top));
       mctx->state_log_top = next_state_log_idx;
@@ -2177,7 +2159,6 @@ sift_states_bkref (const re_match_context_t *mctx, 
re_sift_context_t *sctx,
 }
 
 
-#ifdef RE_ENABLE_I18N
 static int
 sift_states_iter_mb (const re_match_context_t *mctx, re_sift_context_t *sctx,
                     Idx node_idx, Idx str_idx, Idx max_str_idx)
@@ -2197,8 +2178,6 @@ sift_states_iter_mb (const re_match_context_t *mctx, 
re_sift_context_t *sctx,
      'naccepted' bytes input.  */
   return naccepted;
 }
-#endif /* RE_ENABLE_I18N */
-
 
 /* Functions for state transition.  */
 
@@ -2216,7 +2195,6 @@ transit_state (reg_errcode_t *err, re_match_context_t 
*mctx,
   re_dfastate_t **trtable;
   unsigned char ch;
 
-#ifdef RE_ENABLE_I18N
   /* If the current state can accept multibyte.  */
   if (__glibc_unlikely (state->accept_mb))
     {
@@ -2224,7 +2202,6 @@ transit_state (reg_errcode_t *err, re_match_context_t 
*mctx,
       if (__glibc_unlikely (*err != REG_NOERROR))
        return NULL;
     }
-#endif /* RE_ENABLE_I18N */
 
   /* Then decide the next state with the single byte.  */
 #if 0
@@ -2445,7 +2422,6 @@ transit_state_sb (reg_errcode_t *err, re_match_context_t 
*mctx,
 }
 #endif
 
-#ifdef RE_ENABLE_I18N
 static reg_errcode_t
 transit_state_mb (re_match_context_t *mctx, re_dfastate_t *pstate)
 {
@@ -2513,7 +2489,6 @@ transit_state_mb (re_match_context_t *mctx, re_dfastate_t 
*pstate)
     }
   return REG_NOERROR;
 }
-#endif /* RE_ENABLE_I18N */
 
 static reg_errcode_t
 transit_state_bkref (re_match_context_t *mctx, const re_node_set *nodes)
@@ -3003,9 +2978,7 @@ check_arrival_add_next_nodes (re_match_context_t *mctx, 
Idx str_idx,
   const re_dfa_t *const dfa = mctx->dfa;
   bool ok;
   Idx cur_idx;
-#ifdef RE_ENABLE_I18N
   reg_errcode_t err = REG_NOERROR;
-#endif
   re_node_set union_set;
   re_node_set_init_empty (&union_set);
   for (cur_idx = 0; cur_idx < cur_nodes->nelem; ++cur_idx)
@@ -3014,7 +2987,6 @@ check_arrival_add_next_nodes (re_match_context_t *mctx, 
Idx str_idx,
       Idx cur_node = cur_nodes->elems[cur_idx];
       DEBUG_ASSERT (!IS_EPSILON_NODE (dfa->nodes[cur_node].type));
 
-#ifdef RE_ENABLE_I18N
       /* If the node may accept "multi byte".  */
       if (dfa->nodes[cur_node].accept_mb)
        {
@@ -3052,7 +3024,7 @@ check_arrival_add_next_nodes (re_match_context_t *mctx, 
Idx str_idx,
                }
            }
        }
-#endif /* RE_ENABLE_I18N */
+
       if (naccepted
          || check_node_accept (mctx, dfa->nodes + cur_node, str_idx))
        {
@@ -3476,18 +3448,15 @@ group_nodes_into_DFAstates (const re_dfa_t *dfa, const 
re_dfastate_t *state,
        }
       else if (type == OP_PERIOD)
        {
-#ifdef RE_ENABLE_I18N
          if (dfa->mb_cur_max > 1)
            bitset_merge (accepts, dfa->sb_char);
          else
-#endif
            bitset_set_all (accepts);
          if (!(dfa->syntax & RE_DOT_NEWLINE))
            bitset_clear (accepts, '\n');
          if (dfa->syntax & RE_DOT_NOT_NULL)
            bitset_clear (accepts, '\0');
        }
-#ifdef RE_ENABLE_I18N
       else if (type == OP_UTF8_PERIOD)
        {
          if (ASCII_CHARS % BITSET_WORD_BITS == 0)
@@ -3499,7 +3468,6 @@ group_nodes_into_DFAstates (const re_dfa_t *dfa, const 
re_dfastate_t *state,
          if (dfa->syntax & RE_DOT_NOT_NULL)
            bitset_clear (accepts, '\0');
        }
-#endif
       else
        continue;
 
@@ -3530,12 +3498,10 @@ group_nodes_into_DFAstates (const re_dfa_t *dfa, const 
re_dfastate_t *state,
                  bitset_empty (accepts);
                  continue;
                }
-#ifdef RE_ENABLE_I18N
              if (dfa->mb_cur_max > 1)
                for (j = 0; j < BITSET_WORDS; ++j)
                  any_set |= (accepts[j] &= (dfa->word_char[j] | 
~dfa->sb_char[j]));
              else
-#endif
                for (j = 0; j < BITSET_WORDS; ++j)
                  any_set |= (accepts[j] &= dfa->word_char[j]);
              if (!any_set)
@@ -3549,12 +3515,10 @@ group_nodes_into_DFAstates (const re_dfa_t *dfa, const 
re_dfastate_t *state,
                  bitset_empty (accepts);
                  continue;
                }
-#ifdef RE_ENABLE_I18N
              if (dfa->mb_cur_max > 1)
                for (j = 0; j < BITSET_WORDS; ++j)
                  any_set |= (accepts[j] &= ~(dfa->word_char[j] & 
dfa->sb_char[j]));
              else
-#endif
                for (j = 0; j < BITSET_WORDS; ++j)
                  any_set |= (accepts[j] &= ~dfa->word_char[j]);
              if (!any_set)
@@ -3631,7 +3595,6 @@ group_nodes_into_DFAstates (const re_dfa_t *dfa, const 
re_dfastate_t *state,
   return -1;
 }
 
-#ifdef RE_ENABLE_I18N
 /* Check how many bytes the node 'dfa->nodes[node_idx]' accepts.
    Return the number of the bytes the node accepts.
    STR_IDX is the current index of the input string.
@@ -3640,9 +3603,9 @@ group_nodes_into_DFAstates (const re_dfa_t *dfa, const 
re_dfastate_t *state,
    one collating element like '.', '[a-z]', opposite to the other nodes
    can only accept one byte.  */
 
-# ifdef _LIBC
-#  include <locale/weight.h>
-# endif
+#ifdef _LIBC
+# include <locale/weight.h>
+#endif
 
 static int
 check_node_accept_bytes (const re_dfa_t *dfa, Idx node_idx,
@@ -3726,12 +3689,12 @@ check_node_accept_bytes (const re_dfa_t *dfa, Idx 
node_idx,
   if (node->type == COMPLEX_BRACKET)
     {
       const re_charset_t *cset = node->opr.mbcset;
-# ifdef _LIBC
+#ifdef _LIBC
       const unsigned char *pin
        = ((const unsigned char *) re_string_get_buffer (input) + str_idx);
       Idx j;
       uint32_t nrules;
-# endif /* _LIBC */
+#endif
       int match_len = 0;
       wchar_t wc = ((cset->nranges || cset->nchar_classes || cset->nmbchars)
                    ? re_string_wchar_at (input, str_idx) : 0);
@@ -3754,7 +3717,7 @@ check_node_accept_bytes (const re_dfa_t *dfa, Idx 
node_idx,
            }
        }
 
-# ifdef _LIBC
+#ifdef _LIBC
       nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
       if (nrules != 0)
        {
@@ -3843,7 +3806,7 @@ check_node_accept_bytes (const re_dfa_t *dfa, Idx 
node_idx,
            }
        }
       else
-# endif /* _LIBC */
+#endif /* _LIBC */
        {
          /* match with range expression?  */
          for (i = 0; i < cset->nranges; ++i)
@@ -3869,7 +3832,7 @@ check_node_accept_bytes (const re_dfa_t *dfa, Idx 
node_idx,
   return 0;
 }
 
-# ifdef _LIBC
+#ifdef _LIBC
 static unsigned int
 find_collation_sequence_value (const unsigned char *mbs, size_t mbs_len)
 {
@@ -3927,8 +3890,7 @@ find_collation_sequence_value (const unsigned char *mbs, 
size_t mbs_len)
       return UINT_MAX;
     }
 }
-# endif /* _LIBC */
-#endif /* RE_ENABLE_I18N */
+#endif /* _LIBC */
 
 /* Check whether the node accepts the byte which is IDX-th
    byte of the INPUT.  */
@@ -3951,12 +3913,10 @@ check_node_accept (const re_match_context_t *mctx, 
const re_token_t *node,
         return false;
       break;
 
-#ifdef RE_ENABLE_I18N
     case OP_UTF8_PERIOD:
       if (ch >= ASCII_CHARS)
         return false;
       FALLTHROUGH;
-#endif
     case OP_PERIOD:
       if ((ch == '\n' && !(mctx->dfa->syntax & RE_DOT_NEWLINE))
          || (ch == '\0' && (mctx->dfa->syntax & RE_DOT_NOT_NULL)))
@@ -4017,7 +3977,6 @@ extend_buffers (re_match_context_t *mctx, int min_len)
   /* Then reconstruct the buffers.  */
   if (pstr->icase)
     {
-#ifdef RE_ENABLE_I18N
       if (pstr->mb_cur_max > 1)
        {
          ret = build_wcs_upper_buffer (pstr);
@@ -4025,16 +3984,13 @@ extend_buffers (re_match_context_t *mctx, int min_len)
            return ret;
        }
       else
-#endif /* RE_ENABLE_I18N  */
        build_upper_buffer (pstr);
     }
   else
     {
-#ifdef RE_ENABLE_I18N
       if (pstr->mb_cur_max > 1)
        build_wcs_buffer (pstr);
       else
-#endif /* RE_ENABLE_I18N  */
        {
          if (pstr->trans != NULL)
            re_string_translate_buffer (pstr);
diff --git a/lib/root-uid.h b/lib/root-uid.h
index b367d5ab69..b3274e39aa 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-2021 Free Software Foundation, Inc.
+   Copyright 2012-2022 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 9b625c739d..ecaef8974a 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-2021 Free Software
+   Copyright (C) 1995, 1997-1998, 2003-2006, 2009-2022 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 3cefba58c0..7aa124c42f 100644
--- a/lib/save-cwd.h
+++ b/lib/save-cwd.h
@@ -1,6 +1,6 @@
 /* Save and restore current working directory.
 
-   Copyright (C) 1995, 1997-1998, 2003, 2009-2021 Free Software Foundation,
+   Copyright (C) 1995, 1997-1998, 2003, 2009-2022 Free Software Foundation,
    Inc.
 
    This program is free software: you can redistribute it and/or modify
diff --git a/lib/scratch_buffer.h b/lib/scratch_buffer.h
index 88735771d2..f4fe5e8d34 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2017-2022 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 5c837f1238..7a7c5e4ed0 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2002-2003, 2005-2022 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 52b1020319..79e50ba0b0 100644
--- a/lib/sha1.c
+++ b/lib/sha1.c
@@ -1,7 +1,7 @@
 /* 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2000-2001, 2003-2006, 2008-2022 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 e12a23cd4d..098678d8da 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-2021 Free Software
+   Copyright (C) 2000-2001, 2003, 2005-2006, 2008-2022 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 2b8687f1db..c9ca618c67 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2005-2006, 2008-2022 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 e09b3de807..dc9d87e615 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2005-2006, 2008-2022 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 2865d6e588..6776bb464d 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2005-2006, 2008-2022 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 e15afe996e..f38819faf0 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2005-2006, 2008-2022 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 c2cc35d830..f2f01d1f6f 100644
--- a/lib/sig2str.c
+++ b/lib/sig2str.c
@@ -1,6 +1,6 @@
 /* sig2str.c -- convert between signal names and numbers
 
-   Copyright (C) 2002, 2004, 2006, 2009-2021 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2004, 2006, 2009-2022 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 f736aa1b0d..a507170b64 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2005, 2009-2022 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 bf6abe55c4..652bc8d75b 100644
--- a/lib/sigdescr_np.c
+++ b/lib/sigdescr_np.c
@@ -1,5 +1,5 @@
 /* English descriptions of signals.
-   Copyright (C) 2020-2021 Free Software Foundation, Inc.
+   Copyright (C) 2020-2022 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 275da8c817..640b5022f5 100644
--- a/lib/signal.in.h
+++ b/lib/signal.in.h
@@ -1,6 +1,6 @@
 /* A GNU-like <signal.h>.
 
-   Copyright (C) 2006-2021 Free Software Foundation, Inc.
+   Copyright (C) 2006-2022 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 7b92792694..3d48a2b5b0 100644
--- a/lib/stat-time.c
+++ b/lib/stat-time.c
@@ -1,6 +1,6 @@
 /* stat-related time functions.
 
-   Copyright (C) 2012-2021 Free Software Foundation, Inc.
+   Copyright (C) 2012-2022 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 6b2cc686ae..6b0088e328 100644
--- a/lib/stat-time.h
+++ b/lib/stat-time.h
@@ -1,6 +1,6 @@
 /* stat-related time functions.
 
-   Copyright (C) 2005, 2007, 2009-2021 Free Software Foundation, Inc.
+   Copyright (C) 2005, 2007, 2009-2022 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 592d58e372..3b117df11f 100644
--- a/lib/stdalign.in.h
+++ b/lib/stdalign.in.h
@@ -1,6 +1,6 @@
 /* A substitute for ISO C11 <stdalign.h>.
 
-   Copyright 2011-2021 Free Software Foundation, Inc.
+   Copyright 2011-2022 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/stddef.in.h b/lib/stddef.in.h
index 42290d448d..5c9a747d7d 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2009-2022 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 85c5418f14..eaa7874f53 100644
--- a/lib/stdint.in.h
+++ b/lib/stdint.in.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2002, 2004-2021 Free Software Foundation, Inc.
+/* Copyright (C) 2001-2002, 2004-2022 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 3fa94b487e..ed32e6981a 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2007-2008, 2010-2022 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 0ca2c8e10c..7b36dac2f5 100644
--- a/lib/stdio.in.h
+++ b/lib/stdio.in.h
@@ -1,6 +1,6 @@
 /* A GNU-like <stdio.h>.
 
-   Copyright (C) 2004, 2007-2021 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2007-2022 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
@@ -399,7 +399,8 @@ _GL_CXXALIASWARN (fileno);
 #endif
 
 #if @GNULIB_FOPEN@
-# if @REPLACE_FOPEN@
+# if (@GNULIB_FOPEN@ && @REPLACE_FOPEN@) \
+     || (@GNULIB_FOPEN_GNU@ && @REPLACE_FOPEN_FOR_FOPEN_GNU@)
 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
 #   undef fopen
 #   define fopen rpl_fopen
diff --git a/lib/stdlib.in.h b/lib/stdlib.in.h
index 0855112d19..d52c2f7963 100644
--- a/lib/stdlib.in.h
+++ b/lib/stdlib.in.h
@@ -1,6 +1,6 @@
 /* A GNU-like <stdlib.h>.
 
-   Copyright (C) 1995, 2001-2004, 2006-2021 Free Software Foundation, Inc.
+   Copyright (C) 1995, 2001-2004, 2006-2022 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
@@ -260,7 +260,8 @@ _GL_WARN_ON_USE (atoll, "atoll is unportable - "
 #endif
 
 #if @GNULIB_CALLOC_POSIX@
-# if @REPLACE_CALLOC@
+# if (@GNULIB_CALLOC_POSIX@ && @REPLACE_CALLOC_FOR_CALLOC_POSIX@) \
+     || (@GNULIB_CALLOC_GNU@ && @REPLACE_CALLOC_FOR_CALLOC_GNU@)
 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
 #   undef calloc
 #   define calloc rpl_calloc
@@ -474,7 +475,8 @@ _GL_WARN_ON_USE (grantpt, "grantpt is not portable - "
    by never specifying a zero size), so it does not need malloc or
    realloc to be redefined.  */
 #if @GNULIB_MALLOC_POSIX@
-# if @REPLACE_MALLOC@
+# if (@GNULIB_MALLOC_POSIX@ && @REPLACE_MALLOC_FOR_MALLOC_POSIX@) \
+     || (@GNULIB_MALLOC_GNU@ && @REPLACE_MALLOC_FOR_MALLOC_GNU@)
 #  if !((defined __cplusplus && defined GNULIB_NAMESPACE) \
         || _GL_USE_STDLIB_ALLOC)
 #   undef malloc
@@ -828,29 +830,35 @@ _GL_CXXALIASWARN (putenv);
 /* Sort an array of NMEMB elements, starting at address BASE, each element
    occupying SIZE bytes, in ascending order according to the comparison
    function COMPARE.  */
+# ifdef __cplusplus
+extern "C" {
+# endif
+# if !GNULIB_defined_qsort_r_fn_types
+typedef int (*_gl_qsort_r_compar_fn) (void const *, void const *, void *);
+#  define GNULIB_defined_qsort_r_fn_types 1
+# endif
+# ifdef __cplusplus
+}
+# endif
 # if @REPLACE_QSORT_R@
 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
 #   undef qsort_r
 #   define qsort_r rpl_qsort_r
 #  endif
 _GL_FUNCDECL_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size,
-                                  int (*compare) (void const *, void const *,
-                                                  void *),
+                                  _gl_qsort_r_compar_fn compare,
                                   void *arg) _GL_ARG_NONNULL ((1, 4)));
 _GL_CXXALIAS_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size,
-                                  int (*compare) (void const *, void const *,
-                                                  void *),
+                                  _gl_qsort_r_compar_fn compare,
                                   void *arg));
 # else
 #  if !@HAVE_QSORT_R@
 _GL_FUNCDECL_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size,
-                                  int (*compare) (void const *, void const *,
-                                                  void *),
+                                  _gl_qsort_r_compar_fn compare,
                                   void *arg) _GL_ARG_NONNULL ((1, 4)));
 #  endif
 _GL_CXXALIAS_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size,
-                                  int (*compare) (void const *, void const *,
-                                                  void *),
+                                  _gl_qsort_r_compar_fn compare,
                                   void *arg));
 # endif
 _GL_CXXALIASWARN (qsort_r);
@@ -1101,7 +1109,8 @@ _GL_WARN_ON_USE (setstate_r, "setstate_r is unportable - "
 
 
 #if @GNULIB_REALLOC_POSIX@
-# if @REPLACE_REALLOC@
+# if (@GNULIB_REALLOC_POSIX@ && @REPLACE_REALLOC_FOR_REALLOC_POSIX@) \
+     || (@GNULIB_REALLOC_GNU@ && @REPLACE_REALLOC_FOR_REALLOC_GNU@)
 #  if !((defined __cplusplus && defined GNULIB_NAMESPACE) \
         || _GL_USE_STDLIB_ALLOC)
 #   undef realloc
diff --git a/lib/stpcpy.c b/lib/stpcpy.c
index c312fe44ba..434f84ae76 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-2021 Free Software
+   Copyright (C) 1992, 1995, 1997-1998, 2006, 2009-2022 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 fc2db03b7b..7ee344aea1 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2008-2022 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 790a80ed8f..9e5cdc3f32 100644
--- a/lib/strftime.h
+++ b/lib/strftime.h
@@ -1,6 +1,6 @@
 /* declarations for strftime.c
 
-   Copyright (C) 2002, 2004, 2008-2021 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2004, 2008-2022 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 8d77ae3800..03e6a17a36 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1995-1996, 2001-2022 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
@@ -67,6 +67,35 @@
 # include <strings.h>
 #endif
 
+/* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers
+   that can be freed by passing them as the Ith argument to the
+   function F.  */
+#ifndef _GL_ATTRIBUTE_DEALLOC
+# if __GNUC__ >= 11
+#  define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i)))
+# else
+#  define _GL_ATTRIBUTE_DEALLOC(f, i)
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that
+   can be freed via 'free'; it can be used only after declaring 'free'.  */
+/* Applies to: functions.  Cannot be used on inline functions.  */
+#ifndef _GL_ATTRIBUTE_DEALLOC_FREE
+# define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (free, 1)
+#endif
+
+/* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly
+   allocated memory.  */
+/* Applies to: functions.  */
+#ifndef _GL_ATTRIBUTE_MALLOC
+# if __GNUC__ >= 3 || defined __clang__
+#  define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
+# else
+#  define _GL_ATTRIBUTE_MALLOC
+# endif
+#endif
+
 /* The __attribute__ feature is available in gcc versions 2.5 and later.
    The attribute __pure__ was added in gcc 2.96.  */
 #ifndef _GL_ATTRIBUTE_PURE
@@ -83,12 +112,26 @@
 
 /* The definition of _GL_WARN_ON_USE is copied here.  */
 
-/* Declare 'free' if needed for _GL_ATTRIBUTE_DEALLOC_FREE.  */
-_GL_EXTERN_C void free (void *);
+/* Make _GL_ATTRIBUTE_DEALLOC_FREE work, even though <stdlib.h> may not have
+   been included yet.  */
 #if @GNULIB_FREE_POSIX@
 # if (@REPLACE_FREE@ && !defined free \
       && !(defined __cplusplus && defined GNULIB_NAMESPACE))
-#  define free rpl_free
+/* We can't do '#define free rpl_free' here.  */
+_GL_EXTERN_C void rpl_free (void *);
+#  undef _GL_ATTRIBUTE_DEALLOC_FREE
+#  define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (rpl_free, 1)
+# else
+#  if defined _MSC_VER
+_GL_EXTERN_C void __cdecl free (void *);
+#  else
+_GL_EXTERN_C void free (void *);
+#  endif
+# endif
+#else
+# if defined _MSC_VER
+_GL_EXTERN_C void __cdecl free (void *);
+# else
 _GL_EXTERN_C void free (void *);
 # endif
 #endif
diff --git a/lib/strnlen.c b/lib/strnlen.c
index ded06ce23f..c8fc69c6a9 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2005-2007, 2009-2022 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 bf8534a767..d562746ee7 100644
--- a/lib/strtoimax.c
+++ b/lib/strtoimax.c
@@ -1,6 +1,6 @@
 /* Convert string representation of a number into an intmax_t value.
 
-   Copyright (C) 1999, 2001-2004, 2006, 2009-2021 Free Software Foundation,
+   Copyright (C) 1999, 2001-2004, 2006, 2009-2022 Free Software Foundation,
    Inc.
 
    This file is free software: you can redistribute it and/or modify
diff --git a/lib/strtol.c b/lib/strtol.c
index c49321ba0c..457f7a5d64 100644
--- a/lib/strtol.c
+++ b/lib/strtol.c
@@ -1,6 +1,6 @@
 /* Convert string representation of a number into an integer value.
 
-   Copyright (C) 1991-1992, 1994-1999, 2003, 2005-2007, 2009-2021 Free Software
+   Copyright (C) 1991-1992, 1994-1999, 2003, 2005-2007, 2009-2022 Free Software
    Foundation, Inc.
 
    NOTE: The canonical source of this file is maintained with the GNU C
diff --git a/lib/strtoll.c b/lib/strtoll.c
index 8e6f93faeb..5124168c1b 100644
--- a/lib/strtoll.c
+++ b/lib/strtoll.c
@@ -1,5 +1,5 @@
 /* Function to parse a 'long long int' from text.
-   Copyright (C) 1995-1997, 1999, 2001, 2009-2021 Free Software Foundation,
+   Copyright (C) 1995-1997, 1999, 2001, 2009-2022 Free Software Foundation,
    Inc.
    This file is part of the GNU C Library.
 
diff --git a/lib/symlink.c b/lib/symlink.c
index 4bb0884aca..51850b2732 100644
--- a/lib/symlink.c
+++ b/lib/symlink.c
@@ -1,5 +1,5 @@
 /* Stub for symlink().
-   Copyright (C) 2009-2021 Free Software Foundation, Inc.
+   Copyright (C) 2009-2022 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 1abd6c544e..e730e6139f 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2020-2022 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
@@ -23,8 +23,10 @@
 
 #if @HAVE_SYS_RANDOM_H@
 
-/* On uClibc, <sys/random.h> assumes prior inclusion of <stddef.h>.  */
-# if defined __UCLIBC__
+/* On uClibc < 1.0.35, <sys/random.h> assumes prior inclusion of <stddef.h>.
+   Do not use __UCLIBC__ here, as it might not be defined yet.
+   But avoid namespace pollution on glibc systems.  */
+# ifndef __GLIBC__
 #  include <stddef.h>
 # endif
 /* On Mac OS X 10.5, <sys/random.h> assumes prior inclusion of <sys/types.h>.
diff --git a/lib/sys_select.in.h b/lib/sys_select.in.h
index 910bea5d12..2bd0e0f79a 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2007-2022 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
@@ -279,9 +279,13 @@ _GL_FUNCDECL_SYS (pselect, int,
                   (int, fd_set *restrict, fd_set *restrict, fd_set *restrict,
                    struct timespec const *restrict, const sigset_t *restrict));
 #  endif
-_GL_CXXALIAS_SYS (pselect, int,
-                  (int, fd_set *restrict, fd_set *restrict, fd_set *restrict,
-                   struct timespec const *restrict, const sigset_t *restrict));
+/* Need to cast, because on AIX 7, the second, third, fourth argument may be
+                        void *restrict,   void *restrict,   void *restrict.  */
+_GL_CXXALIAS_SYS_CAST (pselect, int,
+                       (int,
+                        fd_set *restrict, fd_set *restrict, fd_set *restrict,
+                        struct timespec const *restrict,
+                        const sigset_t *restrict));
 # endif
 _GL_CXXALIASWARN (pselect);
 #elif defined GNULIB_POSIXCHECK
diff --git a/lib/sys_stat.in.h b/lib/sys_stat.in.h
index babe3dba3e..28ddd42f81 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2005-2022 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 8035fbe7ec..87db1a8874 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2007-2022 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 2079d72efc..698e88d632 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2011-2022 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 7675aa076d..5fc5efe031 100644
--- a/lib/tempname.c
+++ b/lib/tempname.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-2021 Free Software Foundation, Inc.
+/* Copyright (C) 1991-2022 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 795bb49764..c172820f7f 100644
--- a/lib/tempname.h
+++ b/lib/tempname.h
@@ -1,6 +1,6 @@
 /* Create a temporary file or directory.
 
-   Copyright (C) 2006, 2009-2021 Free Software Foundation, Inc.
+   Copyright (C) 2006, 2009-2022 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 6bbd0a727b..e1bb56e53e 100644
--- a/lib/time-internal.h
+++ b/lib/time-internal.h
@@ -1,6 +1,6 @@
 /* Time internal interface
 
-   Copyright 2015-2021 Free Software Foundation, Inc.
+   Copyright 2015-2022 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 a73fe59cbb..6d4c771963 100644
--- a/lib/time.in.h
+++ b/lib/time.in.h
@@ -1,6 +1,6 @@
 /* A more-standard <time.h>.
 
-   Copyright (C) 2007-2021 Free Software Foundation, Inc.
+   Copyright (C) 2007-2022 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
@@ -120,6 +120,17 @@ _GL_CXXALIAS_SYS (timespec_get, int, (struct timespec *ts, 
int base));
 _GL_CXXALIASWARN (timespec_get);
 # endif
 
+/* Set *TS to the current time resolution, and return BASE.
+   Upon failure, return 0.  */
+# if @GNULIB_TIMESPEC_GETRES@
+#  if ! @HAVE_TIMESPEC_GETRES@
+_GL_FUNCDECL_SYS (timespec_getres, int, (struct timespec *ts, int base)
+                                        _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (timespec_getres, int, (struct timespec *ts, int base));
+_GL_CXXALIASWARN (timespec_getres);
+# endif
+
 /* Sleep for at least RQTP seconds unless interrupted,  If interrupted,
    return -1 and store the remaining time into RMTP.  See
    
<https://pubs.opengroup.org/onlinepubs/9699919799/functions/nanosleep.html>.  */
diff --git a/lib/time_r.c b/lib/time_r.c
index 88d3c1c76f..d4b2275545 100644
--- a/lib/time_r.c
+++ b/lib/time_r.c
@@ -1,6 +1,6 @@
 /* Reentrant time functions like localtime_r.
 
-   Copyright (C) 2003, 2006-2007, 2010-2021 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2006-2007, 2010-2022 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 e7722447c0..d0ae717f30 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-2021 Free Software Foundation, Inc.
+   Copyright 2015-2022 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 7e723e1fb8..a1b19efc39 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1994-2022 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 5460a042cc..cd0b5f5f5b 100644
--- a/lib/timespec-add.c
+++ b/lib/timespec-add.c
@@ -1,6 +1,6 @@
 /* Add two struct timespec values.
 
-   Copyright (C) 2011-2021 Free Software Foundation, Inc.
+   Copyright (C) 2011-2022 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 88ef69a817..2b2aaa5937 100644
--- a/lib/timespec-sub.c
+++ b/lib/timespec-sub.c
@@ -1,6 +1,6 @@
 /* Subtract two struct timespec values.
 
-   Copyright (C) 2011-2021 Free Software Foundation, Inc.
+   Copyright (C) 2011-2022 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 957b5fbba4..82630c2f5a 100644
--- a/lib/timespec.c
+++ b/lib/timespec.c
@@ -1,6 +1,6 @@
 /* Inline functions for <timespec.h>.
 
-   Copyright (C) 2012-2021 Free Software Foundation, Inc.
+   Copyright (C) 2012-2022 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 94a5db751f..e130d2c6e2 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-2021 Free Software
+   Copyright (C) 2000, 2002, 2004-2005, 2007, 2009-2022 Free Software
    Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
@@ -88,6 +88,7 @@ timespectod (struct timespec a)
   return a.tv_sec + a.tv_nsec / 1e9;
 }
 
+long int gettime_res (void);
 struct timespec current_timespec (void);
 void gettime (struct timespec *) _GL_ARG_NONNULL ((1));
 int settime (struct timespec const *) _GL_ARG_NONNULL ((1));
diff --git a/lib/u64.c b/lib/u64.c
index c905af626f..0eefeae801 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2012-2022 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 8d21ec17ed..1908e7c389 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2006, 2009-2022 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 0763456021..95978e6ad0 100644
--- a/lib/unistd.c
+++ b/lib/unistd.c
@@ -1,6 +1,6 @@
 /* Inline functions for <unistd.h>.
 
-   Copyright (C) 2012-2021 Free Software Foundation, Inc.
+   Copyright (C) 2012-2022 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 73c882f97b..3386f0b0f7 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2003-2022 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
@@ -1409,7 +1409,8 @@ _GL_WARN_ON_USE (getpagesize, "getpagesize is unportable 
- "
      Read a password from /dev/tty or stdin.
    Function getpass() from module 'getpass-gnu':
      Read a password of arbitrary length from /dev/tty or stdin.  */
-# if @REPLACE_GETPASS@
+# if (@GNULIB_GETPASS@ && @REPLACE_GETPASS@) \
+     || (@GNULIB_GETPASS_GNU@ && @REPLACE_GETPASS_FOR_GETPASS_GNU@)
 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
 #   undef getpass
 #   define getpass rpl_getpass
diff --git a/lib/unlocked-io.h b/lib/unlocked-io.h
index ca184b31fb..ce52f8f977 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2001-2004, 2009-2022 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 a34180050e..f4907ae4e6 100644
--- a/lib/utimens.c
+++ b/lib/utimens.c
@@ -1,6 +1,6 @@
 /* Set file access and modification times.
 
-   Copyright (C) 2003-2021 Free Software Foundation, Inc.
+   Copyright (C) 2003-2022 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 d17953c052..c3054da0c6 100644
--- a/lib/utimens.h
+++ b/lib/utimens.h
@@ -1,6 +1,6 @@
 /* Set file access and modification times.
 
-   Copyright 2012-2021 Free Software Foundation, Inc.
+   Copyright 2012-2022 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 9fdecd681f..2e4c7bf966 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2009-2022 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 a8ca59b093..07b2f4866f 100644
--- a/lib/verify.h
+++ b/lib/verify.h
@@ -1,6 +1,6 @@
 /* Compile-time assert-like macros.
 
-   Copyright (C) 2005-2006, 2009-2021 Free Software Foundation, Inc.
+   Copyright (C) 2005-2006, 2009-2022 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 333b626420..adc8f8f68b 100644
--- a/lib/vla.h
+++ b/lib/vla.h
@@ -1,6 +1,6 @@
 /* vla.h - variable length arrays
 
-   Copyright 2014-2021 Free Software Foundation, Inc.
+   Copyright 2014-2022 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 612937abb0..94f5b9201e 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2010-2022 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
@@ -84,20 +84,20 @@
 # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
 /* A compiler attribute is available in gcc versions 4.3.0 and later.  */
 #  define _GL_WARN_ON_USE(function, message) \
-extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ 
(message)))
 #  define _GL_WARN_ON_USE_ATTRIBUTE(message) \
   __attribute__ ((__warning__ (message)))
 # elif __clang_major__ >= 4
 /* Another compiler attribute is available in clang.  */
 #  define _GL_WARN_ON_USE(function, message) \
-extern __typeof__ (function) function \
+_GL_WARN_EXTERN_C __typeof__ (function) function \
   __attribute__ ((__diagnose_if__ (1, message, "warning")))
 #  define _GL_WARN_ON_USE_ATTRIBUTE(message) \
   __attribute__ ((__diagnose_if__ (1, message, "warning")))
 # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
 /* Verify the existence of the function.  */
 #  define _GL_WARN_ON_USE(function, message) \
-extern __typeof__ (function) function
+_GL_WARN_EXTERN_C __typeof__ (function) function
 #  define _GL_WARN_ON_USE_ATTRIBUTE(message)
 # else /* Unsupported.  */
 #  define _GL_WARN_ON_USE(function, message) \
diff --git a/lib/xalloc-oversized.h b/lib/xalloc-oversized.h
index 4184f33955..aefa6fd804 100644
--- a/lib/xalloc-oversized.h
+++ b/lib/xalloc-oversized.h
@@ -1,6 +1,6 @@
 /* xalloc-oversized.h -- memory allocation size checking
 
-   Copyright (C) 1990-2000, 2003-2004, 2006-2021 Free Software Foundation, Inc.
+   Copyright (C) 1990-2000, 2003-2004, 2006-2022 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 9fda59b63b..2311a9f383 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-2021 Free Software Foundation, Inc.
+  Copyright (C) 1985-1986, 2001-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.10 b/lisp/ChangeLog.10
index c8b0bdabc5..0b97a64109 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-2021 Free Software Foundation, Inc.
+    Copyright (C) 2001-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.11 b/lisp/ChangeLog.11
index 0c72cb4c12..53a83c638c 100644
--- a/lisp/ChangeLog.11
+++ b/lisp/ChangeLog.11
@@ -14321,7 +14321,7 @@ See ChangeLog.10 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2003-2011, 2013-2021 Free Software Foundation, Inc.
+  Copyright (C) 2003-2011, 2013-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.12 b/lisp/ChangeLog.12
index d841a75c5d..c45c8ae735 100644
--- a/lisp/ChangeLog.12
+++ b/lisp/ChangeLog.12
@@ -33334,7 +33334,7 @@ See ChangeLog.11 for earlier changes.
 ;; add-log-time-zone-rule: t
 ;; End:
 
-    Copyright (C) 2005-2021 Free Software Foundation, Inc.
+    Copyright (C) 2005-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.13 b/lisp/ChangeLog.13
index d849bd88fc..369aec81ef 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-2021 Free Software Foundation, Inc.
+  Copyright (C) 2007-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.14 b/lisp/ChangeLog.14
index edd5bdb7f9..c84e44536d 100644
--- a/lisp/ChangeLog.14
+++ b/lisp/ChangeLog.14
@@ -20547,7 +20547,7 @@ See ChangeLog.13 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-    Copyright (C) 2008-2021 Free Software Foundation, Inc.
+    Copyright (C) 2008-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.15 b/lisp/ChangeLog.15
index 29fbe47489..53caf69e1c 100644
--- a/lisp/ChangeLog.15
+++ b/lisp/ChangeLog.15
@@ -22802,7 +22802,7 @@ See ChangeLog.14 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2009-2021 Free Software Foundation, Inc.
+  Copyright (C) 2009-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.16 b/lisp/ChangeLog.16
index 67b62767ed..f0a50bb4bc 100644
--- a/lisp/ChangeLog.16
+++ b/lisp/ChangeLog.16
@@ -25223,7 +25223,7 @@ See ChangeLog.15 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2011-2021 Free Software Foundation, Inc.
+  Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.17 b/lisp/ChangeLog.17
index 14a6c5d06e..6333d1dadd 100644
--- a/lisp/ChangeLog.17
+++ b/lisp/ChangeLog.17
@@ -10766,7 +10766,7 @@
        * emacs-lisp/find-gc.el (find-gc-source-directory): Give it a value.
        (find-gc-source-files): Update some names.
        (trace-call-tree): Simplify and update.
-       Avoid predictable temp-file names.  (http://bugs.debian.org/747100)
+       Avoid predictable temp-file names.  (https://bugs.debian.org/747100)
        This is CVE-2014-3422.
 
 2014-05-08  Stefan Monnier  <monnier@iro.umontreal.ca>
@@ -17742,7 +17742,7 @@
 2013-10-13  Glenn Morris  <rgm@gnu.org>
 
        * progmodes/sh-script.el (sh-mark-line, sh-learn-buffer-indent):
-       Occur buffers are read-only.  http://bugs.debian.org/720775
+       Occur buffers are read-only.  https://bugs.debian.org/720775
 
        * emacs-lisp/authors.el (authors-fixed-entries):
        Comment out old alpha stuff.
@@ -26294,7 +26294,7 @@ See ChangeLog.16 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2011-2021 Free Software Foundation, Inc.
+  Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.2 b/lisp/ChangeLog.2
index ea6ddbb70a..d5b40eb77a 100644
--- a/lisp/ChangeLog.2
+++ b/lisp/ChangeLog.2
@@ -3992,7 +3992,7 @@
 
 See ChangeLog.1 for earlier changes.
 
-    Copyright (C) 1986-1988, 2001-2021 Free Software Foundation, Inc.
+    Copyright (C) 1986-1988, 2001-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.3 b/lisp/ChangeLog.3
index a4470b9cfd..7f5ceb4b85 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-2021 Free Software Foundation, Inc.
+    Copyright (C) 1989, 1993, 2001-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.4 b/lisp/ChangeLog.4
index 47a8bfdff7..e965dbb5ef 100644
--- a/lisp/ChangeLog.4
+++ b/lisp/ChangeLog.4
@@ -8934,7 +8934,7 @@ See ChangeLog.3 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-    Copyright (C) 1993-1994, 2001-2021 Free Software Foundation, Inc.
+    Copyright (C) 1993-1994, 2001-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.5 b/lisp/ChangeLog.5
index 1a3a13c6bb..4c54f148c1 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-2021 Free Software Foundation, Inc.
+    Copyright (C) 1994-1995, 2001-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.6 b/lisp/ChangeLog.6
index 492dae18e0..e2128b94c0 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-2021 Free Software Foundation, Inc.
+    Copyright (C) 1995-1996, 2001-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.7 b/lisp/ChangeLog.7
index 3dd8313c6a..747a9ffab9 100644
--- a/lisp/ChangeLog.7
+++ b/lisp/ChangeLog.7
@@ -23110,7 +23110,7 @@ See ChangeLog.6 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-       Copyright (C) 1997-1998, 2001-2021 Free Software Foundation,
+       Copyright (C) 1997-1998, 2001-2022 Free Software Foundation,
        Inc.
 
   This file is part of GNU Emacs.
diff --git a/lisp/ChangeLog.8 b/lisp/ChangeLog.8
index 39e757bfff..78fc7e2056 100644
--- a/lisp/ChangeLog.8
+++ b/lisp/ChangeLog.8
@@ -9992,7 +9992,7 @@ See ChangeLog.7 for earlier changes.
 ;; add-log-time-zone-rule: t
 ;; End:
 
-    Copyright (C) 1999, 2001-2021 Free Software Foundation, Inc.
+    Copyright (C) 1999, 2001-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/ChangeLog.9 b/lisp/ChangeLog.9
index a8ef2ffa44..00c8133743 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-2021 Free Software Foundation, Inc.
+    Copyright (C) 2000-2011, 2013-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/Makefile.in b/lisp/Makefile.in
index 3e764c5a78..d29dec08a5 100644
--- a/lisp/Makefile.in
+++ b/lisp/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 2000-2021 Free Software Foundation, Inc.
+# Copyright (C) 2000-2022 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
@@ -60,7 +60,7 @@ BYTE_COMPILE_EXTRA_FLAGS =
 # The example above is just for developers, it should not be used by default.
 
 # Those automatically generated autoload files that need special rules
-# to build; ie not including things created via generated-autoload-file
+# to build; i.e. not including things created via generated-autoload-file
 # (eg calc/calc-loaddefs.el).
 LOADDEFS = $(lisp)/calendar/cal-loaddefs.el \
        $(lisp)/calendar/diary-loaddefs.el \
@@ -91,25 +91,14 @@ COMPILE_FIRST = \
        $(lisp)/emacs-lisp/byte-opt.elc \
        $(lisp)/emacs-lisp/bytecomp.elc
 ifeq ($(HAVE_NATIVE_COMP),yes)
-COMPILE_FIRST += \
-       $(lisp)/emacs-lisp/comp.elc \
-       $(lisp)/emacs-lisp/comp-cstr.elc \
-       $(lisp)/emacs-lisp/cl-macs.elc \
-       $(lisp)/emacs-lisp/rx.elc \
-       $(lisp)/emacs-lisp/cl-seq.elc \
-       $(lisp)/help-mode.elc \
-       $(lisp)/emacs-lisp/cl-extra.elc \
-       $(lisp)/emacs-lisp/gv.elc \
-       $(lisp)/emacs-lisp/seq.elc \
-       $(lisp)/emacs-lisp/cl-lib.elc \
-       $(lisp)/emacs-lisp/warnings.elc \
-       $(lisp)/emacs-lisp/subr-x.elc
+COMPILE_FIRST += $(lisp)/emacs-lisp/comp.elc
+COMPILE_FIRST += $(lisp)/emacs-lisp/comp-cstr.elc
 endif
 COMPILE_FIRST += $(lisp)/emacs-lisp/autoload.elc
 
 # Files to compile early in compile-main.  Works around bug#25556.
 MAIN_FIRST = ./emacs-lisp/eieio.el ./emacs-lisp/eieio-base.el \
-  ./cedet/semantic/db.el
+  ./cedet/semantic/db.el ./emacs-lisp/cconv.el
 
 # Prevent any settings in the user environment causing problems.
 unexport EMACSDATA EMACSDOC EMACSPATH
@@ -216,6 +205,9 @@ autoloads-force:
        rm -f $(lisp)/loaddefs.el
        $(MAKE) autoloads
 
+ldefs-boot.el: autoloads-force
+       cp  $(lisp)/loaddefs.el $(lisp)/ldefs-boot.el
+
 # This is required by the bootstrap-emacs target in ../src/Makefile, so
 # we know that if we have an emacs executable, we also have a subdirs.el.
 $(lisp)/subdirs.el:
@@ -263,9 +255,9 @@ ${ETAGS}: FORCE
 ## compile-main.  But maybe this is not even necessary any more now
 ## that this uses relative filenames.
 TAGS: ${ETAGS} ${tagsfiles}
-       $(AM_V_at)rm -f $@
+       $(AM_V_GEN)rm -f $@
        $(AM_V_at)touch $@
-       $(AM_V_GEN)ls ${tagsfiles} | xargs $(XARGS_LIMIT) "${ETAGS}" -a -o $@
+       $(AM_V_at)ls ${tagsfiles} | xargs $(XARGS_LIMIT) "${ETAGS}" -a -o $@
 
 
 # The src/Makefile.in has its own set of dependencies and when they decide
@@ -346,10 +338,10 @@ endif
 
 # Compile all the Elisp files that need it.  Beware: it approximates
 # 'no-byte-compile', so watch out for false-positives!
-compile-main: gen-lisp compile-clean
+compile-main: gen-lisp compile-clean main-first
        @(cd $(lisp) &&                              \
        els=`echo "${SUBDIRS_REL} " | sed -e 's|/\./|/|g' -e 's|/\. | |g' -e 
's| |/*.el |g'`; \
-       for el in ${MAIN_FIRST} $$els; do            \
+       for el in $$els; do            \
          test -f $$el || continue;                  \
          test ! -f $${el}c &&                       \
              GREP_OPTIONS= grep '^;.*[^a-zA-Z]no-byte-compile: *t' $$el > 
/dev/null && \
@@ -362,6 +354,18 @@ compile-main: gen-lisp compile-clean
                  TARGETS="$$chunk";                 \
        done
 
+# Compile some important files first.
+main-first:
+       @(cd $(lisp) &&                              \
+       for el in ${MAIN_FIRST}; do                  \
+         echo "$${el}c";                            \
+       done | xargs $(XARGS_LIMIT) echo) |          \
+       while read chunk; do                         \
+         $(MAKE) compile-targets                    \
+                 NATIVE_DISABLED=$(NATIVE_SKIP_NONDUMP) \
+                 TARGETS="$$chunk";                 \
+       done
+
 .PHONY: compile-clean
 # Erase left-over .elc files that do not have a corresponding .el file.
 compile-clean:
diff --git a/lisp/abbrev.el b/lisp/abbrev.el
index 386aff1627..44328a2b28 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-1987, 1992, 2001-2021 Free Software Foundation,
+;; Copyright (C) 1985-1987, 1992, 2001-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
@@ -67,13 +67,11 @@ be replaced by its expansion."
 
 (define-obsolete-variable-alias 'edit-abbrevs-map
   'edit-abbrevs-mode-map "24.4")
-(defvar edit-abbrevs-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map "\C-x\C-s" 'abbrev-edit-save-buffer)
-    (define-key map "\C-x\C-w" 'abbrev-edit-save-to-file)
-    (define-key map "\C-c\C-c" 'edit-abbrevs-redefine)
-    map)
-  "Keymap used in `edit-abbrevs'.")
+(defvar-keymap edit-abbrevs-mode-map
+  :doc "Keymap used in `edit-abbrevs'."
+  "C-x C-s" #'abbrev-edit-save-buffer
+  "C-x C-w" #'abbrev-edit-save-to-file
+  "C-c C-c" #'edit-abbrevs-redefine)
 
 (defun kill-all-abbrevs ()
   "Undefine all defined abbrevs."
@@ -149,12 +147,18 @@ Otherwise display all abbrevs."
 Selects a buffer containing a list of abbrev definitions with
 point located in the abbrev table for the current buffer, and
 turns on `edit-abbrevs-mode' in that buffer.
-You can edit them and type \\<edit-abbrevs-map>\\[edit-abbrevs-redefine] to 
redefine abbrevs
+
+You can edit them and type \\<edit-abbrevs-mode-map>\\[edit-abbrevs-redefine] \
+to redefine abbrevs
 according to your editing.
+
 The abbrevs editing buffer contains a header line for each
 abbrev table, which is the abbrev table name in parentheses.
+
 This is followed by one line per abbrev in that table:
-NAME   USECOUNT   EXPANSION   HOOK
+
+    NAME   USECOUNT   EXPANSION   HOOK
+
 where NAME and EXPANSION are strings with quotes,
 USECOUNT is an integer, and HOOK is any valid function
 or may be omitted (it is usually omitted)."
@@ -168,7 +172,7 @@ or may be omitted (it is usually omitted)."
 
 (defun edit-abbrevs-redefine ()
   "Redefine abbrevs according to current buffer contents."
-  (interactive)
+  (interactive nil edit-abbrevs-mode)
   (save-restriction
     (widen)
     (define-abbrevs t)
@@ -269,7 +273,8 @@ have been saved."
    (list (read-file-name "Save abbrevs to file: "
                         (file-name-directory
                          (expand-file-name abbrev-file-name))
-                        abbrev-file-name)))
+                         abbrev-file-name))
+   edit-abbrevs-mode)
   (edit-abbrevs-redefine)
   (write-abbrev-file file t))
 
@@ -277,7 +282,7 @@ have been saved."
   "Save all user-level abbrev definitions in current buffer.
 The saved abbrevs are written to the file specified by
 `abbrev-file-name'."
-  (interactive)
+  (interactive nil edit-abbrevs-mode)
   (abbrev-edit-save-to-file abbrev-file-name))
 
 
@@ -1188,7 +1193,8 @@ SORTFUN is passed to `sort' to change the default 
ordering."
 (define-derived-mode edit-abbrevs-mode fundamental-mode "Edit-Abbrevs"
   "Major mode for editing the list of abbrev definitions.
 This mode is for editing abbrevs in a buffer prepared by `edit-abbrevs',
-which see.")
+which see."
+  :interactive nil)
 
 (provide 'abbrev)
 
diff --git a/lisp/align.el b/lisp/align.el
index 2fd6dcda6d..2279c659b4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 f18d488854..736fb7d99d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2022 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 174184fc7a..4624c236f5 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2022 Free Software Foundation, Inc.
 
 ;; Author: Ken Manheimer <ken dot manheimer at gmail...>
 ;; Created: Dec 1991 -- first release to usenet
@@ -133,15 +133,10 @@ respective `allout-mode' keybinding variables, 
`allout-command-prefix',
     (when (boundp 'allout-unprefixed-keybindings)
       (dolist (entry allout-unprefixed-keybindings)
         (define-key map (car (read-from-string (car entry))) (cadr entry))))
-    (substitute-key-definition #'beginning-of-line #'allout-beginning-of-line
-                               map global-map)
-    (substitute-key-definition #'move-beginning-of-line
-                               #'allout-beginning-of-line
-                               map global-map)
-    (substitute-key-definition #'end-of-line #'allout-end-of-line
-                               map global-map)
-    (substitute-key-definition #'move-end-of-line #'allout-end-of-line
-                               map global-map)
+    (define-key map [remap beginning-of-line]      #'allout-beginning-of-line)
+    (define-key map [remap move-beginning-of-line] #'allout-beginning-of-line)
+    (define-key map [remap end-of-line]            #'allout-end-of-line)
+    (define-key map [remap move-end-of-line]       #'allout-end-of-line)
     (allout-institute-keymap map)))
 ;;;_  > allout-institute-keymap (map)
 (defun allout-institute-keymap (map)
diff --git a/lisp/ansi-color.el b/lisp/ansi-color.el
index c962cbd478..3973d9db08 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: Alex Schroeder <alex@gnu.org>
 ;; Version: 3.4.2
diff --git a/lisp/apropos.el b/lisp/apropos.el
index 00919ed91b..6ff444f868 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, 1994-1995, 2001-2021 Free Software Foundation,
+;; Copyright (C) 1989, 1994-1995, 2001-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Joe Wells <jbw@bigbird.bu.edu>
@@ -1322,17 +1322,18 @@ as a heading."
 
 (defun apropos-describe-plist (symbol)
   "Display a pretty listing of SYMBOL's plist."
-  (help-setup-xref (list 'apropos-describe-plist symbol)
-                  (called-interactively-p 'interactive))
-  (with-help-window (help-buffer)
-    (set-buffer standard-output)
-    (princ "Symbol ")
-    (prin1 symbol)
-    (princ (substitute-command-keys "'s plist is\n ("))
-    (put-text-property (+ (point-min) 7) (- (point) 14)
-                      'face 'apropos-symbol)
-    (insert (apropos-format-plist symbol "\n  "))
-    (princ ")")))
+  (let ((help-buffer-under-preparation t))
+    (help-setup-xref (list 'apropos-describe-plist symbol)
+                    (called-interactively-p 'interactive))
+    (with-help-window (help-buffer)
+      (set-buffer standard-output)
+      (princ "Symbol ")
+      (prin1 symbol)
+      (princ (substitute-command-keys "'s plist is\n ("))
+      (put-text-property (+ (point-min) 7) (- (point) 14)
+                        'face 'apropos-symbol)
+      (insert (apropos-format-plist symbol "\n  "))
+      (princ ")"))))
 
 
 (provide 'apropos)
diff --git a/lisp/arc-mode.el b/lisp/arc-mode.el
index 5576ae3505..4f0edbbfa9 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-2021 Free Software Foundation,
+;; Copyright (C) 1995, 1997-1998, 2001-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Morten Welinder <terra@gnu.org>
@@ -431,12 +431,8 @@ be added."
     ;; Let mouse-1 follow the link.
     (define-key map [follow-link] 'mouse-face)
 
-    (if (fboundp 'command-remapping)
-        (progn
-          (define-key map [remap advertised-undo] 'archive-undo)
-          (define-key map [remap undo] 'archive-undo))
-      (substitute-key-definition 'advertised-undo 'archive-undo map global-map)
-      (substitute-key-definition 'undo 'archive-undo map global-map))
+    (define-key map [remap advertised-undo] #'archive-undo)
+    (define-key map [remap undo] #'archive-undo)
 
     (define-key map [mouse-2] 'archive-extract)
 
@@ -621,12 +617,8 @@ OLDMODE will be modified accordingly just like chmod(2) 
would have done."
 
 (defun archive-unixdate (low high)
   "Stringify Unix (LOW HIGH) date."
-  (let* ((time (list high low))
-        (str (current-time-string time)))
-    (format "%s-%s-%s"
-           (substring str 8 10)
-           (substring str 4 7)
-           (format-time-string "%Y" time))))
+  (let ((system-time-locale "C"))
+    (format-time-string "%e-%b-%Y" (list high low))))
 
 (defun archive-unixtime (low high)
   "Stringify Unix (LOW HIGH) time."
diff --git a/lisp/array.el b/lisp/array.el
index 2c9a6815d2..31cf9cf302 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1987, 2000-2022 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 162a3ec23c..86e0b48a79 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015, 2017-2022 Free Software Foundation, Inc.
 
 ;; Author: Damien Cassou <damien@cassou.me>,
 ;;         Nicolas Petton <nicolas@petton.fr>
diff --git a/lisp/auth-source.el b/lisp/auth-source.el
index 3c1a6feaee..046a685d74 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
 
 ;; Author: Ted Zlatanov <tzz@lifelogs.com>
 ;; Keywords: news
@@ -45,6 +45,9 @@
 (require 'cl-lib)
 (require 'eieio)
 
+(declare-function gnutls-symmetric-decrypt "gnutls.c")
+(declare-function gnutls-ciphers "gnutls.c")
+
 (autoload 'secrets-create-item "secrets")
 (autoload 'secrets-delete-item "secrets")
 (autoload 'secrets-get-alias "secrets")
@@ -253,7 +256,7 @@ can get pretty complex."
                         (choice :tag "Authentication backend choice"
                                 (string :tag "Authentication Source (file)")
                                 (list
-                                 :tag "Secret Service API/KWallet/GNOME 
Keyring"
+                                 :tag "Secret Service API/KWallet/GNOME 
Keyring/KeyPassXC"
                                  (const :format "" :value :secrets)
                                  (choice :tag "Collection to use"
                                          (string :tag "Collection name")
@@ -850,15 +853,17 @@ while \(:host t) would find all host entries."
               (cl-return 'no)))
           'no))))
 
-(defun auth-source-pick-first-password (&rest spec)
-  "Pick the first secret found from applying SPEC to `auth-source-search'."
-  (let* ((result (nth 0 (apply #'auth-source-search (plist-put spec :max 1))))
-         (secret (plist-get result :secret)))
-
+(defun auth-info-password (auth-info)
+  "Return the :secret password from the AUTH-INFO."
+  (let ((secret (plist-get auth-info :secret)))
     (if (functionp secret)
         (funcall secret)
       secret)))
 
+(defun auth-source-pick-first-password (&rest spec)
+  "Pick the first secret found from applying SPEC to `auth-source-search'."
+  (auth-info-password (car (apply #'auth-source-search (plist-put spec :max 
1)))))
+
 (defun auth-source-format-prompt (prompt alist)
   "Format PROMPT using %x (for any character x) specifiers in ALIST.
 Remove trailing \": \"."
@@ -1797,10 +1802,9 @@ authentication tokens:
       (plist-put
        artificial
        :save-function
-       (let* ((collection collection)
-              (item (plist-get artificial :label))
-              (secret (plist-get artificial :secret))
-              (secret (if (functionp secret) (funcall secret) secret)))
+       (let ((collection collection)
+             (item (plist-get artificial :label))
+             (secret (auth-info-password artificial)))
          (lambda ()
           (auth-source-secrets-saver collection item secret args)))))
 
@@ -2407,9 +2411,7 @@ MODE can be \"login\" or \"password\"."
                         :require '(:user :secret)
                         :create nil))))
          (user (plist-get auth-info :user))
-         (password (plist-get auth-info :secret)))
-    (when (functionp password)
-      (setq password (funcall password)))
+         (password (auth-info-password auth-info)))
     (list user password auth-info)))
 
 ;;; Tiny mode for editing .netrc/.authinfo modes (that basically just
diff --git a/lisp/autoarg.el b/lisp/autoarg.el
index b52a4305be..b0d6abe020 100644
--- a/lisp/autoarg.el
+++ b/lisp/autoarg.el
@@ -1,6 +1,6 @@
 ;;; autoarg.el --- make digit keys supply prefix args -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 1998, 2000-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2000-2022 Free Software Foundation, Inc.
 
 ;; Author:  Dave Love <fx@gnu.org>
 ;; Created: 1998-09-04
diff --git a/lisp/autoinsert.el b/lisp/autoinsert.el
index b448c0f8da..f60aa9be6f 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-1987, 1994-1995, 1998, 2000-2021 Free Software
+;; Copyright (C) 1985-1987, 1994-1995, 1998, 2000-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Charlie Martin <crm@cs.duke.edu>
diff --git a/lisp/autorevert.el b/lisp/autorevert.el
index 5b1cd32247..97a122b7bc 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1999, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Anders Lindgren
 ;; Keywords: convenience
diff --git a/lisp/avoid.el b/lisp/avoid.el
index 03707d1046..b53d84d2e8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2000-2022 Free Software Foundation, Inc.
 
 ;; Author: Boris Goldowsky <boris@gnu.org>
 ;; Keywords: mouse
diff --git a/lisp/battery.el b/lisp/battery.el
index bf864c2bd4..45334163fa 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2000-2022 Free Software Foundation, Inc.
 
 ;; Author: Ralph Schleicher <rs@ralph-schleicher.de>
 ;; Maintainer: emacs-devel@gnu.org
@@ -113,6 +113,10 @@ Value does not include \".\" or \"..\"."
                   (and (eq (call-process "pmset" nil t nil "-g" "ps") 0)
                        (not (bobp))))))
         #'battery-pmset)
+        ((and (eq system-type 'haiku)
+              ;; TODO: Support the Haiku APM battery driver.
+              (file-directory-p "/dev/power/acpi_battery"))
+         #'battery-haiku-acpi-battery)
        ((fboundp 'w32-battery-status)
         #'w32-battery-status))
   "Function for getting battery status information.
@@ -600,6 +604,103 @@ The following %-sequences are provided:
                      (_ "N/A"))))))
 
 
+;;; `/dev/power/acpi_battery' interface for Haiku.
+
+(defun battery--search-haiku-acpi-status ()
+  "Search forward for battery status in the current buffer.
+Return a property list once all relevant properties are found.
+The following properties may be inside the list:
+
+  - `:capacity' (the current capacity of the battery.)
+  - `:voltage' (the current voltage of the battery.)
+  - `:rate', (the current rate of charge or discharge.)
+  - `:state' (the current state of the battery.)
+  - `:design-capacity' (the design capacity of the battery.)
+  - `:design-voltage' (the design voltage of the battery.)
+  - `:last-full-charge' (the capacity at the last full charge of
+    the battery.)
+
+`:capacity' and `:design-capacity' are both represented in
+terms of milliamp-hours."
+  (let ((state-regexp "State \\([[:digit:]]+\\), Current Rate 
\\([[:digit:]]+\\), \
+Capacity \\([[:digit:]]+\\), Voltage \\([[:digit:]]+\\)")
+        (pu-regexp "Power Unit \\([[:digit:]]\\)+, Design Capacity 
\\([[:digit:]]+\\), \
+Last Full Charge \\([[:digit:]]+\\)")
+        (design-regexp "Design Voltage \\([[:digit:]]+\\)")
+        power-unit last-full-charge state rate capacity
+        voltage design-capacity design-voltage)
+    (when (re-search-forward state-regexp)
+      (setq state (string-to-number (match-string 1)))
+      (setq rate (string-to-number (match-string 2)))
+      (setq capacity (string-to-number (match-string 3)))
+      (setq voltage (/ (string-to-number (match-string 4)) 1000.0)))
+    (when (re-search-forward pu-regexp)
+      (setq power-unit (string-to-number (match-string 1)))
+      (setq design-capacity (string-to-number (match-string 2)))
+      (setq last-full-charge (string-to-number (match-string 3))))
+    (when (re-search-forward design-regexp)
+      (setq design-voltage (/ (string-to-number (match-string 1)) 1000.0)))
+    ;; Convert capacity fields to milliamp-hours if they're
+    ;; specified as miliwatt-hours.
+    (when (eq power-unit 0)
+      (setq capacity (/ capacity voltage))
+      (setq design-capacity (/ design-capacity design-voltage))
+      (setq last-full-charge (/ last-full-charge voltage)))
+    (list :capacity capacity :voltage voltage
+          :rate rate :state (cond
+                             ((not (zerop (logand state 2))) 'charging)
+                             ((not (zerop (logand state 1))) 'discharging)
+                             ((not (zerop (logand state 4))) 'critical)
+                             (t 'fully-charged))
+          :design-capacity design-capacity
+          :design-voltage design-voltage
+          :last-full-charge last-full-charge)))
+
+(defun battery-haiku-acpi-battery ()
+  "Get battery status from `/dev/power/acpi_battery'.
+This function only works on Haiku systems with an ACPI battery.
+
+The following %-sequences are provided:
+%c Current capacity (mAh)
+%r Current rate of charge or discharge
+%L AC line status (verbose)
+%B Battery status (verbose)
+%b Battery status: empty means high, `-' means low,
+   `!' means critical, and `+' means charging
+%p Battery load percentage"
+  (with-temp-buffer
+    (dolist (file (battery--files "/dev/power/acpi_battery"))
+      (insert-file-contents (expand-file-name file "/dev/power/acpi_battery")))
+    ;; I don't think Haiku actually supports multiple batteries yet,
+    ;; since the code in PowerStatus doesn't take care of that
+    ;; situation.
+    (let ((list (ignore-errors (battery--search-haiku-acpi-status))))
+      (if list
+          (list (cons ?c (format "%.0f" (plist-get list :capacity)))
+                (cons ?r (format "%.0f" (plist-get list :rate)))
+                (cons ?B (symbol-name (plist-get list :state)))
+                (cons ?b (let ((state (plist-get list :state)))
+                           (cond
+                            ((eq state 'charging) "+")
+                            ((and (eq state 'discharging)
+                                  (< (/ (plist-get list :capacity)
+                                        (plist-get list :last-full-charge))
+                                     0.15))
+                             "-")
+                            ((eq state 'critical) "!")
+                            (t ""))))
+                (cons ?L (if (not (eq (plist-get list :state) 'discharging))
+                             "on-line" "off-line"))
+                (cons ?p (format "%.0f"
+                                 (* 100 (/ (plist-get list :capacity)
+                                           (plist-get list 
:last-full-charge))))))
+        '((?c . "N/A")
+          (?r . "N/A")
+          (?B . "N/A")
+          (?b . "N/A")
+          (?p . "N/A"))))))
+
+
 ;;; UPower interface.
 
 (defconst battery-upower-interface "org.freedesktop.UPower"
diff --git a/lisp/bindings.el b/lisp/bindings.el
index e28b06a1dc..86c0ea1a90 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-1987, 1992-1996, 1999-2021 Free Software
+;; Copyright (C) 1985-1987, 1992-1996, 1999-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
@@ -288,7 +288,7 @@ mnemonics of the following coding systems:
 Value is used for `mode-line-frame-identification', which see."
   (if (or (null window-system)
          (eq window-system 'pc))
-      "-%F  "
+      " %F  "
     "  "))
 
 ;; We need to defer the call to mode-line-frame-control to the time
@@ -501,7 +501,7 @@ mouse-1: Display Line and Column Mode Menu"))
 
 (defvar mode-line-position
   `((:propertize
-     (" " mode-line-percent-position)
+     ("" mode-line-percent-position)
      local-map ,mode-line-column-line-number-mode-map
      display (min-width (5.0))
      mouse-face mode-line-highlight
@@ -1261,6 +1261,8 @@ if `inhibit-field-text-motion' is non-nil."
 ;; (define-key global-map [kp-9]               'function-key-error)
 ;; (define-key global-map [kp-equal]   'function-key-error)
 
+(define-key global-map [touch-end] 'ignore)
+
 ;; X11 distinguishes these keys from the non-kp keys.
 ;; Make them behave like the non-kp keys unless otherwise bound.
 ;; FIXME: rather than list such mappings for every modifier-combination,
diff --git a/lisp/bookmark.el b/lisp/bookmark.el
index a8fa9ae774..0279d5ea83 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1997, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Karl Fogel <kfogel@red-bean.com>
 ;; Created: July, 1993
@@ -510,8 +510,9 @@ If DEFAULT is nil then return empty string for empty input."
 
 (defmacro bookmark-maybe-historicize-string (string)
   "Put STRING into the bookmark prompt history, if caller non-interactive.
-We need this because sometimes bookmark functions are invoked from
-menus, so `completing-read' never gets a chance to set `bookmark-history'."
+We need this because sometimes bookmark functions are invoked
+from other commands that pass in the bookmark name, so
+`completing-read' never gets a chance to set `bookmark-history'."
   `(or
     (called-interactively-p 'interactive)
     (setq bookmark-history (cons ,string bookmark-history))))
@@ -1154,7 +1155,7 @@ and then show any annotations for this bookmark."
   ;; FIXME: we used to only run bookmark-after-jump-hook in
   ;; `bookmark-jump' itself, but in none of the other commands.
   (when bookmark-set-fringe-mark
-    (let ((overlays (overlays-in (point) (point)))
+    (let ((overlays (overlays-in (point-at-bol) (1+ (point-at-bol))))
           temp found)
       (while (and (not found) (setq temp (pop overlays)))
         (when (eq 'bookmark (overlay-get temp 'category))
diff --git a/lisp/bs.el b/lisp/bs.el
index ccb06bbdba..cff19c81cb 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
 ;; Author: Olaf Sylvester <Olaf.Sylvester@netsurf.de>
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: convenience
diff --git a/lisp/buff-menu.el b/lisp/buff-menu.el
index 1013a7c497..50c2c155ca 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-1987, 1993-1995, 2000-2021 Free Software
+;; Copyright (C) 1985-1987, 1993-1995, 2000-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
@@ -116,43 +116,41 @@ as it is by default."
 This is set by the prefix argument to `buffer-menu' and related
 commands.")
 
-(defvar Buffer-menu-mode-map
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map tabulated-list-mode-map)
-    (define-key map "v" 'Buffer-menu-select)
-    (define-key map "2" 'Buffer-menu-2-window)
-    (define-key map "1" 'Buffer-menu-1-window)
-    (define-key map "f" 'Buffer-menu-this-window)
-    (define-key map "e" 'Buffer-menu-this-window)
-    (define-key map "\C-m" 'Buffer-menu-this-window)
-    (define-key map "o" 'Buffer-menu-other-window)
-    (define-key map "\C-o" 'Buffer-menu-switch-other-window)
-    (define-key map "s" 'Buffer-menu-save)
-    (define-key map "d" 'Buffer-menu-delete)
-    (define-key map "k" 'Buffer-menu-delete)
-    (define-key map "\C-k" 'Buffer-menu-delete)
-    (define-key map "\C-d" 'Buffer-menu-delete-backwards)
-    (define-key map "x" 'Buffer-menu-execute)
-    (define-key map " " 'next-line)
-    (define-key map "\177" 'Buffer-menu-backup-unmark)
-    (define-key map "~" 'Buffer-menu-not-modified)
-    (define-key map "u" 'Buffer-menu-unmark)
-    (define-key map "\M-\177" 'Buffer-menu-unmark-all-buffers)
-    (define-key map "U" 'Buffer-menu-unmark-all)
-    (define-key map "m" 'Buffer-menu-mark)
-    (define-key map "t" 'Buffer-menu-visit-tags-table)
-    (define-key map "%" 'Buffer-menu-toggle-read-only)
-    (define-key map "b" 'Buffer-menu-bury)
-    (define-key map "V" 'Buffer-menu-view)
-    (define-key map "T" 'Buffer-menu-toggle-files-only)
-    (define-key map (kbd "M-s a C-s")   'Buffer-menu-isearch-buffers)
-    (define-key map (kbd "M-s a M-C-s") 'Buffer-menu-isearch-buffers-regexp)
-    (define-key map (kbd "M-s a C-o") 'Buffer-menu-multi-occur)
-
-    (define-key map [mouse-2] 'Buffer-menu-mouse-select)
-    (define-key map [follow-link] 'mouse-face)
-    map)
-  "Local keymap for `Buffer-menu-mode' buffers.")
+(defvar-keymap Buffer-menu-mode-map
+  :doc "Local keymap for `Buffer-menu-mode' buffers."
+  :parent tabulated-list-mode-map
+  "v"           #'Buffer-menu-select
+  "2"           #'Buffer-menu-2-window
+  "1"           #'Buffer-menu-1-window
+  "f"           #'Buffer-menu-this-window
+  "e"           #'Buffer-menu-this-window
+  "C-m"         #'Buffer-menu-this-window
+  "o"           #'Buffer-menu-other-window
+  "C-o"         #'Buffer-menu-switch-other-window
+  "s"           #'Buffer-menu-save
+  "d"           #'Buffer-menu-delete
+  "k"           #'Buffer-menu-delete
+  "C-k"         #'Buffer-menu-delete
+  "C-d"         #'Buffer-menu-delete-backwards
+  "x"           #'Buffer-menu-execute
+  "SPC"         #'next-line
+  "DEL"         #'Buffer-menu-backup-unmark
+  "~"           #'Buffer-menu-not-modified
+  "u"           #'Buffer-menu-unmark
+  "M-DEL"       #'Buffer-menu-unmark-all-buffers
+  "U"           #'Buffer-menu-unmark-all
+  "m"           #'Buffer-menu-mark
+  "t"           #'Buffer-menu-visit-tags-table
+  "%"           #'Buffer-menu-toggle-read-only
+  "b"           #'Buffer-menu-bury
+  "V"           #'Buffer-menu-view
+  "T"           #'Buffer-menu-toggle-files-only
+  "M-s a C-s"   #'Buffer-menu-isearch-buffers
+  "M-s a C-M-s" #'Buffer-menu-isearch-buffers-regexp
+  "M-s a C-o"   #'Buffer-menu-multi-occur
+
+  "<mouse-2>"     #'Buffer-menu-mouse-select
+  "<follow-link>" 'mouse-face)
 
 (easy-menu-define Buffer-menu-mode-menu Buffer-menu-mode-map
   "Menu for `Buffer-menu-mode' buffers."
diff --git a/lisp/button.el b/lisp/button.el
index e3f91cb4a6..8a7751d00d 100644
--- a/lisp/button.el
+++ b/lisp/button.el
@@ -1,6 +1,6 @@
 ;;; button.el --- clickable buttons -*- lexical-binding: t -*-
 ;;
-;; Copyright (C) 2001-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
 ;;
 ;; Author: Miles Bader <miles@gnu.org>
 ;; Keywords: extensions, hypermedia
@@ -604,7 +604,8 @@ When called from Lisp, pass BUTTON-OR-POS as the button to 
describe, or a
 buffer position where a button is present.  If BUTTON-OR-POS is nil, the
 button at point is the button to describe."
   (interactive "d")
-  (let* ((button (cond ((integer-or-marker-p button-or-pos)
+  (let* ((help-buffer-under-preparation t)
+         (button (cond ((integer-or-marker-p button-or-pos)
                         (button-at button-or-pos))
                        ((null button-or-pos) (button-at (point)))
                        ((overlayp button-or-pos) button-or-pos)))
diff --git a/lisp/calc/calc-aent.el b/lisp/calc/calc-aent.el
index 52c024865a..ef3e0d4b67 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 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 162026d092..93ff5ee240 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 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 9787fe0d60..025c1ab7f3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 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 a1f4ca43e7..6c6b22296a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 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 dc95221350..c1352fa324 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 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 03462020ea..a084afde18 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 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 7455140477..9a580d9602 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 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 dbe2f689d8..7ee73d100a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
@@ -1266,27 +1266,23 @@ calc-kill calc-kill-region calc-yank))))
           (math-normalize val)))))
 
 
-(defvar calc-help-map nil)
-
-(if calc-help-map
-    nil
-  (setq calc-help-map (make-keymap))
-  (define-key calc-help-map "b" 'calc-describe-bindings)
-  (define-key calc-help-map "c" 'calc-describe-key-briefly)
-  (define-key calc-help-map "f" 'calc-describe-function)
-  (define-key calc-help-map "h" 'calc-full-help)
-  (define-key calc-help-map "i" 'calc-info)
-  (define-key calc-help-map "k" 'calc-describe-key)
-  (define-key calc-help-map "n" 'calc-view-news)
-  (define-key calc-help-map "s" 'calc-info-summary)
-  (define-key calc-help-map "t" 'calc-tutorial)
-  (define-key calc-help-map "v" 'calc-describe-variable)
-  (define-key calc-help-map "\C-c" 'calc-describe-copying)
-  (define-key calc-help-map "\C-d" 'calc-describe-distribution)
-  (define-key calc-help-map "\C-n" 'calc-view-news)
-  (define-key calc-help-map "\C-w" 'calc-describe-no-warranty)
-  (define-key calc-help-map "?" 'calc-help-for-help)
-  (define-key calc-help-map "\C-h" 'calc-help-for-help))
+(defvar-keymap calc-help-map
+  "b"   'calc-describe-bindings
+  "c"   'calc-describe-key-briefly
+  "f"   'calc-describe-function
+  "h"   'calc-full-help
+  "i"   'calc-info
+  "k"   'calc-describe-key
+  "n"   'calc-view-news
+  "s"   'calc-info-summary
+  "t"   'calc-tutorial
+  "v"   'calc-describe-variable
+  "C-c" 'calc-describe-copying
+  "C-d" 'calc-describe-distribution
+  "C-n" 'calc-view-news
+  "C-w" 'calc-describe-no-warranty
+  "?"   'calc-help-for-help
+  "C-h" 'calc-help-for-help)
 
 (defvar calc-prefix-help-retry nil)
 (defvar calc-prefix-help-phase 0)
diff --git a/lisp/calc/calc-fin.el b/lisp/calc/calc-fin.el
index 76bb53e7b1..1ff6914ebd 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 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 ce8e3579f4..8f5104e9dc 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 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 bf3c16816d..0a2ad52cd6 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 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 053fa2e585..23d33b38a7 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 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 b6ee124a72..a95967bef4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 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 2633d64fe4..a513a7de0c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 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 e27d65092e..5ef3b22470 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 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 acbef27a1d..6144ee1c08 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 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 aef3173f5c..5c36dd30b9 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 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 63258cde50..0d27b627f2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 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 d12d05f305..638a4cdbe8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 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 ba2b6b2ca9..40236e452c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 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 eed20a89a4..9d69e44771 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 1c4438e7f7..bd1635f2bf 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 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 211b8e661f..5690f10118 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 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 9a08b8cb76..d54efb6637 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 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 f676b098e5..2b2abc3fdb 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 5d74a8f106..3e98b0532f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 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 b381f8afcf..dc2a086bbd 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 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 e3d4852a72..5da91b49c8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 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 00080b6989..96264bf18f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 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 18fd483baf..64f8007e52 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 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 3cf9bec834..a7fe36001f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 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 de2f18f394..023dd40c15 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
@@ -163,19 +163,19 @@
                             tag (and (not val) 1))
           (message "Variable \"%s\" changed" (calc-var-name var)))))))
 
-(defvar calc-var-name-map nil "Keymap for reading Calc variable names.")
-(if calc-var-name-map
-    ()
-  (setq calc-var-name-map (copy-keymap minibuffer-local-completion-map))
-  (define-key calc-var-name-map " " 'self-insert-command)
-  (mapc (lambda (x)
-         (define-key calc-var-name-map (char-to-string x)
-            'calcVar-digit))
-       "0123456789")
-  (mapc (lambda (x)
-         (define-key calc-var-name-map (char-to-string x)
-            'calcVar-oper))
-       "+-*/^|"))
+(defvar calc-var-name-map
+  (let ((map (copy-keymap minibuffer-local-completion-map)))
+    (define-key map " " #'self-insert-command)
+    (mapc (lambda (x)
+            (define-key map (char-to-string x)
+                        #'calcVar-digit))
+          "0123456789")
+    (mapc (lambda (x)
+            (define-key map (char-to-string x)
+                        #'calcVar-oper))
+          "+-*/^|")
+    map)
+  "Keymap for reading Calc variable names.")
 
 (defvar calc-store-opers)
 
diff --git a/lisp/calc/calc-stuff.el b/lisp/calc/calc-stuff.el
index 9281666c3b..0e8ea42bed 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 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 2cf5160d5d..d8c6eb615f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 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 4add99a250..9ff5d4dfbb 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 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 f6d749db11..c8405c7d1a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 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 73783dd2c2..3b8629b797 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 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 762adbd407..8c6d3f51e5 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calc.el b/lisp/calc/calc.el
index 9774ddff40..3b1cf248fd 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 ;; Keywords: convenience, extensions
@@ -1423,7 +1423,7 @@ commands given here will actually operate on the 
*Calculator* stack."
     (require 'calc-ext)
     (calc-set-language calc-language calc-language-option t)))
 
-(defcustom calc-make-windows-dedicated t
+(defcustom calc-make-windows-dedicated nil
   "If non-nil, windows displaying Calc buffers will be marked dedicated.
 See `window-dedicated-p' for what that means."
   :version "28.1"
diff --git a/lisp/calc/calcalg2.el b/lisp/calc/calcalg2.el
index 8d93ae987a..0f3f37de76 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calcalg3.el b/lisp/calc/calcalg3.el
index a61cdb5d0e..1d85f3d549 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calccomp.el b/lisp/calc/calccomp.el
index bd81d7fe40..60b25e6441 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calc/calcsel2.el b/lisp/calc/calcsel2.el
index 9c2ac975f0..317a628c6d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 
diff --git a/lisp/calculator.el b/lisp/calculator.el
index 0c255c0cf9..a80437d6ec 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2000-2022 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 f523863440..ebdafb438e 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-2021 Free Software
+;; Copyright (C) 1989-1990, 1994, 1998, 2001-2022 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 350b7e51cb..74ce36d21e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 9a28984a7a..c7f7be0dce 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1997, 2001-2022 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 11785c48f1..4c6aa2a941 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1997, 2001-2022 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 29864110a3..5f601f24d2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1996, 2001-2022 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 1789f16445..d70db8de0c 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-2021 Free
+;; Copyright (C) 1988-1989, 1992, 1994-1995, 1997, 2001-2022 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 50b4fc363b..61ce029e07 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1997, 2001-2022 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 58a5a0f83a..b1c829af48 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 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 45c6ffa7bd..c6afb27b44 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1997, 2001-2022 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 90f57c25e9..880dd539aa 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1997, 2001-2022 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 47880a4e97..e614d3a1f6 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1997, 2001-2022 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 9a22192113..c1f235ae76 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-2021 Free Software
+;; Copyright (C) 1992-1993, 1995, 1997, 2001-2022 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 ef84bfadd3..d66d82d6f4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1995, 2001-2022 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 9294362cb4..4febad53fc 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2001-2022 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 dd005e8660..f38eb8779a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1997, 2001-2022 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 c5b456c4c2..4458fd6d6c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2001-2022 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 ca303ce39a..bbc8f27394 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1995, 2001-2022 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 ebce2ae3dd..48d308afad 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-2021 Free Software Foundation,
+;; Copyright (C) 1988-1995, 1997, 2000-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
@@ -1723,7 +1723,8 @@ COMMAND is a command to run, ECHO is the help-echo text, 
KEY
 is COMMAND's keybinding, STRING describes the binding."
   (propertize (or key
                   (substitute-command-keys
-                   (format "\\<calendar-mode-map>\\[%s] %s" command string)))
+                   (format "\\<calendar-mode-map>\\[%s] %s" command string)
+                   'hands-off-my-face))
               'help-echo (format "mouse-1: %s" echo)
               'mouse-face 'mode-line-highlight
               'keymap (make-mode-line-mouse-map 'mouse-1 command)))
diff --git a/lisp/calendar/diary-lib.el b/lisp/calendar/diary-lib.el
index 2eb7977a16..45df0c6259 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-1990, 1992-1995, 2001-2021 Free Software
+;; Copyright (C) 1989-1990, 1992-1995, 2001-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
diff --git a/lisp/calendar/holidays.el b/lisp/calendar/holidays.el
index bda5dc5a6b..2afa667a56 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-2021 Free Software
+;; Copyright (C) 1989-1990, 1992-1994, 1997, 2001-2022 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 7a483d4062..1a5a071e20 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
 
 ;; Author:         Ulf Jasper <ulf.jasper@web.de>
 ;; Created:        August 2002
@@ -645,10 +645,10 @@ FIXME: multiple comma-separated values should be allowed!"
           (setq second (read (substring isodatetimestring 13 15))))
        ;; FIXME: Support subseconds.
         (when (> (length isodatetimestring) 15)
-          (cl-case (aref isodatetimestring 15)
+         (pcase (aref isodatetimestring 15)
             (?Z
              (setq source-zone t))
-            ((?- ?+)
+           ((or ?- ?+)
              (setq source-zone
                    (concat "UTC" (substring isodatetimestring 15))))))
         ;; shift if necessary
diff --git a/lisp/calendar/iso8601.el b/lisp/calendar/iso8601.el
index 1de1796a05..e31120f52f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
 
 ;; Keywords: dates
 
diff --git a/lisp/calendar/lunar.el b/lisp/calendar/lunar.el
index dd1d923f42..751bfa1cc8 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-2021 Free Software
+;; Copyright (C) 1992-1993, 1995, 1997, 2001-2022 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 5a3d2706af..f3ad513925 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2000-2022 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 b5f2f454ae..8f501824bb 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-2021 Free Software
+;; Copyright (C) 1992-1993, 1995, 1997, 2001-2022 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 155c34927f..51cf7eb213 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Masanobu Umeda <umerin@mse.kyutech.ac.jp>
@@ -69,7 +69,7 @@ list (HIGH LOW MICRO PICO)."
                     (pop elt)))
             (time-value (car elt))
             (gensym (make-symbol "time")))
-       `(let* ,(append `((,gensym (or ,time-value (current-time)))
+       `(let* ,(append `((,gensym (or ,time-value (time-convert nil 'list)))
                          (,gensym
                           (cond
                            ((integerp ,gensym)
@@ -154,7 +154,10 @@ it is assumed that PICO was omitted and should be treated 
as zero."
 DATE should be in one of the forms recognized by `parse-time-string'.
 If DATE lacks timezone information, GMT is assumed."
   (condition-case err
-      (encode-time (parse-time-string date))
+      (let ((parsed (parse-time-string date)))
+       (when (decoded-time-year parsed)
+         (decoded-time-set-defaults parsed))
+       (encode-time parsed))
     (error
      (let ((overflow-error '(error "Specified time is not representable")))
        (if (equal err overflow-error)
diff --git a/lisp/calendar/timeclock.el b/lisp/calendar/timeclock.el
index 0b94bcb77f..1c6a557a0d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 51a2751132..57fcd1b17e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1999, 2001-2022 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 457e026f91..f6f6851dd3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1988, 1994, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Howard Gayle
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/cdl.el b/lisp/cdl.el
index 0f181ac6d4..81d64b10f6 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 2001-2022 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 0fe55739ef..aa54bdd9b0 100644
--- a/lisp/cedet/ChangeLog.1
+++ b/lisp/cedet/ChangeLog.1
@@ -3460,7 +3460,7 @@
 ;; coding: utf-8
 ;; End:
 
-       Copyright (C) 2009-2021 Free Software Foundation, Inc.
+       Copyright (C) 2009-2022 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 6ffc2765d6..454005f864 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-2021  Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 f540fb5540..19a6d3935e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 227ebd54b8..6a147bf430 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 a2b8cb3524..5c500f7e06 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 b6043f1403..e6befb10e9 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 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 d8d1364491..0edc853edd 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 2ec9f5d9d6..4ea14e33c5 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-2005, 2007-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2005, 2007-2022 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 da6a3f3e90..7af9987de1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 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 d6f0a86f9a..faf50edaa1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2000, 2009-2022 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 004da6b95d..9d23909d62 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 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 98a0419e8b..529b96f2b0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2022 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 fd37e53ed4..fe81a4c87d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 ac4f9f6684..2d4f408e96 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 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 c933fc4515..609103566a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2022 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 27735176c2..dc987b2d5d 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-2021 Free Software Foundation,
+;; Copyright (C) 1998-2000, 2003, 2009-2022 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 00496ace16..5a23f504f7 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 6b7e159564..3b9002a6e3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 4537f59ac9..de94808666 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 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 4b5530d6ac..718eaabb7a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 016092cd8b..b9b1194ccc 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 3402020fc4..5db78a1afb 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-2021  Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 709963d6fa..1b424bc6d0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 c5b2ea4cb6..d747326a3a 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-2021  Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 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 fd6918c4e8..9a913109f0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2005, 2007-2022 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 9da6374d09..5de46a4912 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-2021 Free Software Foundation, Inc.
+;;  Copyright (C) 1998-2001, 2009-2022 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 73259558a6..73808da092 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-2021 Free Software Foundation,
+;; Copyright (C) 1998-2000, 2007, 2009-2022 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 0d797aa5fb..ec676ac04b 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-2021 Free Software
+;; Copyright (C) 1999-2001, 2004-2005, 2007, 2009-2022 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 7a3b36f30f..0c65af15c4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2005, 2007-2022 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 dbb86edb21..299b45967a 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-2021  Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 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 068e998d1a..80cbe53475 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2001, 2008-2022 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 1b96376d3e..852bbd643a 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-2021  Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 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 87b2ff7a55..fab1de81a0 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-2021 Free Software Foundation,
+;; Copyright (C) 1998-2001, 2005, 2008-2022 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 b0e287895f..7b3df3ca00 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2000, 2009-2022 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 01f19bc657..84bb7f2f3c 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-2021  Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 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 1352e5c193..7a486754a0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2003, 2007-2022 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 e7f5640c07..2803e1c307 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-2021 Free Software
+;; Copyright (C) 1998-2000, 2003, 2005, 2007-2022 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 371b04f9d2..fcf7294215 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 aaeb3f713c..83b99d9658 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 338b03d25d..e4c8b3cee2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2008-2022 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 b321cb637b..f99a1d114b 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-2021 Free Software
+;; Copyright (C) 1998-2001, 2003, 2005, 2007-2022 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 dd009bfb31..0aab5b3e6b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 1300ba9011..2da16b37d7 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2003, 2009-2022 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 2b2402c642..2a7aecc8bc 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2005, 2009-2022 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 e0717fbfe5..b1a4fe4d54 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2005, 2007-2022 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 b026944029..f7af10887c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 205d6a812a..dc6751db6c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 1a4be11c78..4c60136ca3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2005, 2007-2022 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 5c3228ae16..66ce4ff892 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 69b3b9c832..f750814baa 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 d47e8976e5..7f60162115 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 31cbb9e117..d06962f6fc 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 6be6dfd8df..1e52b1f850 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-2021 Free Software
+;; Copyright (C) 1999-2004, 2006-2007, 2009-2022 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 c7d59def1f..ee1cbcad4d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
@@ -1466,36 +1466,32 @@ Override function for `semantic-tag-protection'."
        (prot nil))
     ;; Check the modifiers for protection if we are not a child
     ;; of some class type.
-    (when (or (not parent) (not (eq (semantic-tag-class parent) 'type)))
-      (while (and (not prot) mods)
-       (if (stringp (car mods))
-           (let ((s (car mods)))
-             ;; A few silly defaults to get things started.
-             (cond ((or (string= s "extern")
-                        (string= s "export"))
-                    'public)
-                   ((string= s "static")
-                    'private))))
-       (setq mods (cdr mods))))
-    ;; If we have a typed parent, look for :public style labels.
-    (when (and parent (eq (semantic-tag-class parent) 'type))
+    (if (not (and parent (eq (semantic-tag-class parent) 'type)))
+       (while (and (not prot) mods)
+         (if (stringp (car mods))
+             (let ((s (car mods)))
+               ;; A few silly defaults to get things started.
+               (setq prot (pcase s
+                            ((or "extern" "export") 'public)
+                            ("static" 'private)))))
+         (setq mods (cdr mods)))
+      ;; If we have a typed parent, look for :public style labels.
       (let ((pp (semantic-tag-type-members parent)))
        (while (and pp (not (semantic-equivalent-tag-p (car pp) tag)))
          (when (eq (semantic-tag-class (car pp)) 'label)
            (setq prot
-                 (cond ((string= (semantic-tag-name (car pp)) "public")
-                        'public)
-                       ((string= (semantic-tag-name (car pp)) "private")
-                        'private)
-                       ((string= (semantic-tag-name (car pp)) "protected")
-                        'protected)))
+                 (pcase (semantic-tag-name (car pp))
+                   ("public" 'public)
+                   ("private" 'private)
+                   ("protected" 'protected)))
            )
          (setq pp (cdr pp)))))
     (when (and (not prot) (eq (semantic-tag-class parent) 'type))
       (setq prot
-           (cond ((string= (semantic-tag-type parent) "class") 'private)
-                 ((string= (semantic-tag-type parent) "struct") 'public)
-                 (t 'unknown))))
+           (pcase (semantic-tag-type parent)
+             ("class" 'private)
+             ("struct" 'public)
+             (_ 'unknown))))
     (or prot
        (if (and parent (semantic-tag-of-class-p parent 'type))
            'public
diff --git a/lisp/cedet/semantic/bovine/debug.el 
b/lisp/cedet/semantic/bovine/debug.el
index 64ccbb4519..880be91547 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2009-2022 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 ebb20448ed..61b400b505 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2005, 2007-2022 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 02bd0defef..01dbec0113 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 a2717d711f..d478b12f64 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 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 bb579cfde3..bfc3de20ff 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2004, 2008-2022 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 0395412069..e1cb07034a 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-2021  Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 0abbe45864..342b03f8bb 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-2021 Free Software
+;; Copyright (C) 1999-2001, 2003, 2005, 2008-2022 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 375b97a7a5..2c608fca38 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2005, 2007-2022 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 17ffaeff5e..57c158fc9c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 d8f7034f03..5ce9717421 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-2021  Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 8bc3b810a6..f0e1d9f029 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2022 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 c9ae68e9fa..73ef37ea2a 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-2021  Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 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 c9007ac7a0..d00ab47ce6 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-2021  Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 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 e6a7879775..3012af41c5 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 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 fad24485ed..1ef97a6036 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2006, 2008-2022 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 bf3d612295..9c62329e43 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
 
 ;; Author: Joakim Verona
 
diff --git a/lisp/cedet/semantic/db-mode.el b/lisp/cedet/semantic/db-mode.el
index 839dcb8172..7c471bee4f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 10108d3977..47fd3a903f 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-2021  Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 03158171a2..38caac2292 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 38e2b34b0d..7f25a84891 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 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 c13952265e..2fe651a559 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2005, 2008-2022 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 3e6651df15..ca2a6de3d3 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-2021  Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 ae2895c2b9..144e2ce018 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 0a234b3000..ad215db0f6 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2005, 2007-2022 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 cae38e6f11..eb922a1250 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2022 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 413ed83a15..32cd63bce9 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-2021 Free Software Foundation,
+;; Copyright (C) 1999-2003, 2005, 2008-2022 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 9a4d412d5d..ff9f991ff4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2004, 2007-2022 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 b2e56360cf..76230d438a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 17fb20fa0a..e894022315 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2005, 2008-2022 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 a68ef8064d..80e7f1117a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2005, 2007-2022 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 16e8ce8de9..fd61751cb5 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-2021  Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
@@ -66,8 +66,6 @@
 
 (defalias 'semantic-mode-line-update #'force-mode-line-update)
 
-;; Since Emacs 22 major mode functions should use `run-mode-hooks' to
-;; run major mode hooks.
 (define-obsolete-function-alias 'semantic-run-mode-hooks #'run-mode-hooks 
"28.1")
 
 ;; Fancy compat usage now handled in cedet-compat
diff --git a/lisp/cedet/semantic/grammar.el b/lisp/cedet/semantic/grammar.el
index 33c66da9a6..74d4a229fa 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2005, 2007-2022 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 ce63421fb3..376fab89c2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 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 ad5d2c798f..718ce3c4c7 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2005, 2007-2022 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 12a2f1db92..25a011188e 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-2021  Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 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 7186a78123..2172085d6b 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-2021  Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 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 a14994424d..1afb1d841d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2006, 2008-2022 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 a5db85bb51..235965a995 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-2021 Free Software
+;; Copyright (C) 2000-2005, 2007-2008, 2010-2022 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 0c2fb843f0..a7c02032e2 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-2021  Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 3297367db9..26a3b39f0d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2022 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 d524b733db..885ffbf5a7 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 2e77e6b75f..9dee0415a3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 fe981d34fb..cf18160ad7 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 2d806e58ee..83e7ed66c1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 19530094fb..ebc4159a4c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 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 b4b09dc02c..1503a766dc 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-2021  Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 701f9ad3e0..ba236059f6 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 bc3f4a248b..f0246c77d2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 7ef3cd90d6..3a8f4ad357 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 23e40349a6..b5de9cb90e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 077a2d4861..27ea80fc32 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 3e3e3b0a94..a8d84c7dec 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 b1b36132b3..7823dad6ef 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 06dd274b32..7a80bccb53 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2005, 2007-2022 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 4bdae58690..244bd57af9 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2004, 2006-2022 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 9d5aeea098..2b2e866524 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 a86ed020bb..16695a108a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2005, 2007-2022 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 5a38280d2a..1917bcb40a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2005, 2007-2022 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 5ce1108044..fdd93c6bcf 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2005, 2007-2022 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 bfc923c75b..69a7c8f59c 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-2021  Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 afcdd14282..55eeef453e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2007, 2009-2022 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 a87ed51890..f842b3c364 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-2021 Free
+;; Copyright (C) 1984, 1986, 1989, 1992, 1995, 2000-2007, 2009-2022 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 c5e4554082..5ca22bac86 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 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 90dd40c51a..de75c0dda8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2006, 2009-2022 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 1932f205ee..cc7ae1b181 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2005, 2009-2022 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 2eeade6646..941efbbbef 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, 2004, 2006-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2004, 2006-2022 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 62d99ef697..a73fb167b1 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-2021  Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 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 83e9754a60..7c054d4c10 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-2021  Free Software Foundation, Inc.
+;; Copyright (C) 2005-2022 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 79d2700c5d..eb141e34ca 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 15107ef1e4..37c83be811 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2005, 2007-2022 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 dc5e8da5cd..ba9e81715a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007, 2009-2022 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 fe887c281c..195b2f433e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 e47a09fd84..5e986827c9 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 270b80d901..8c5f343e98 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 974a4fac72..ebfec20509 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 a40d5aec24..125e841c4d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007, 2009-2022 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 9e6a98fd76..7d4539dcb4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 e65e319432..2fc79d01a7 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 b76ce2c94b..5c11f8c31b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 1c208d0f32..c13342e88f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 ce4c818c70..4623d2cdef 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 f20842b1d8..8dd5d25157 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2005, 2007-2022 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 0f0a80ee29..52a0020320 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 254b15e6e0..32de258827 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 9b1c8491a1..e8c7762c72 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 fbb6984dc1..ea7fda004e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 7157915849..724a6e0a94 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2005, 2007-2022 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 161b5105b5..4b3b5eaeb7 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 7ce5cc73b6..3dfbb9d58b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 1f6f0d345d..7bd142e75d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2005, 2007-2022 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 1312a55a89..50b0e150ff 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/lisp/char-fold.el b/lisp/char-fold.el
index e3ab7d5b64..05ae52cae0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: matching
@@ -26,6 +26,7 @@
 
 (eval-and-compile
   (put 'char-fold-table 'char-table-extra-slots 1)
+  (defconst char-fold--default-override nil)
   (defconst char-fold--default-include
     '((?\" """ "“" "”" "”" "„" "⹂" "〞" "‟" "‟" "❞" "❝" "❠" "“" "„" "〝" "〟" "🙷" 
"🙶" "🙸" "«" "»")
       (?' "❟" "❛" "❜" "‘" "’" "‚" "‛" "‚" "󠀢" "❮" "❯" "‹" "›")
@@ -40,7 +41,8 @@
       ))
   (defconst char-fold--default-symmetric nil)
   (defvar char-fold--previous
-    (list char-fold--default-include
+    (list char-fold--default-override
+          char-fold--default-include
           char-fold--default-exclude
           char-fold--default-symmetric)))
 
@@ -67,48 +69,50 @@
       ;; - A single char of the decomp might be allowed to match the
       ;;   character.
       ;; Some examples in the comments below.
-      (map-char-table
-       (lambda (char decomp)
-         (when (consp decomp)
-           ;; Skip trivial cases like ?a decomposing to (?a).
-           (unless (and (not (cdr decomp))
-                        (eq char (car decomp)))
-             (if (symbolp (car decomp))
-                 ;; Discard a possible formatting tag.
-                 (setq decomp (cdr decomp))
-               ;; If there's no formatting tag, ensure that char matches
-               ;; its decomp exactly.  This is because we want 'ä' to
-               ;; match 'ä', but we don't want '¹' to match '1'.
-               (aset equiv char
-                     (cons (apply #'string decomp)
-                           (aref equiv char))))
-
-             ;; Allow the entire decomp to match char.  If decomp has
-             ;; multiple characters, this is done by adding an entry
-             ;; to the alist of the first character in decomp.  This
-             ;; allows 'ff' to match 'ff', 'ä' to match 'ä', and '1' to
-             ;; match '¹'.
-             (let ((make-decomp-match-char
-                    (lambda (decomp char)
-                      (if (cdr decomp)
-                          (aset equiv-multi (car decomp)
-                                (cons (cons (apply #'string (cdr decomp))
-                                            (regexp-quote (string char)))
-                                      (aref equiv-multi (car decomp))))
-                        (aset equiv (car decomp)
-                              (cons (char-to-string char)
-                                    (aref equiv (car decomp))))))))
-               (funcall make-decomp-match-char decomp char)
-               ;; Check to see if the first char of the decomposition
-               ;; has a further decomposition.  If so, add a mapping
-               ;; back from that second decomposition to the original
-               ;; character.  This allows e.g. 'ι' (GREEK SMALL LETTER
-               ;; IOTA) to match both the Basic Greek block and
-               ;; Extended Greek block variants of IOTA +
-               ;; diacritical(s).  Repeat until there are no more
-               ;; decompositions.
-               (let ((dec decomp)
-                     next-decomp)
+      (unless (or (bound-and-true-p char-fold-override)
+                  char-fold--default-override)
+        (map-char-table
+         (lambda (char decomp)
+           (when (consp decomp)
+             ;; Skip trivial cases like ?a decomposing to (?a).
+             (unless (and (not (cdr decomp))
+                          (eq char (car decomp)))
+               (if (symbolp (car decomp))
+                   ;; Discard a possible formatting tag.
+                   (setq decomp (cdr decomp))
+                 ;; If there's no formatting tag, ensure that char matches
+                 ;; its decomp exactly.  This is because we want 'ä' to
+                 ;; match 'ä', but we don't want '¹' to match '1'.
+                 (aset equiv char
+                       (cons (apply #'string decomp)
+                             (aref equiv char))))
+
+               ;; Allow the entire decomp to match char.  If decomp has
+               ;; multiple characters, this is done by adding an entry
+               ;; to the alist of the first character in decomp.  This
+               ;; allows 'ff' to match 'ff', 'ä' to match 'ä', and '1' to
+               ;; match '¹'.
+               (let ((make-decomp-match-char
+                      (lambda (decomp char)
+                        (if (cdr decomp)
+                            (aset equiv-multi (car decomp)
+                                  (cons (cons (apply #'string (cdr decomp))
+                                              (regexp-quote (string char)))
+                                        (aref equiv-multi (car decomp))))
+                          (aset equiv (car decomp)
+                                (cons (char-to-string char)
+                                      (aref equiv (car decomp))))))))
+                 (funcall make-decomp-match-char decomp char)
+                 ;; Check to see if the first char of the decomposition
+                 ;; has a further decomposition.  If so, add a mapping
+                 ;; back from that second decomposition to the original
+                 ;; character.  This allows e.g. 'ι' (GREEK SMALL LETTER
+                 ;; IOTA) to match both the Basic Greek block and
+                 ;; Extended Greek block variants of IOTA +
+                 ;; diacritical(s).  Repeat until there are no more
+                 ;; decompositions.
+                 (let ((dec decomp)
+                       next-decomp)
                    (while dec
                      (setq next-decomp (char-table-range table (car dec)))
                      (when (consp next-decomp)
@@ -118,24 +122,24 @@
                                     (car next-decomp)))
                            (funcall make-decomp-match-char (list (car 
next-decomp)) char)))
                      (setq dec next-decomp)))
-               ;; Do it again, without the non-spacing characters.
-               ;; This allows 'a' to match 'ä'.
-               (let ((simpler-decomp nil)
-                     (found-one nil))
-                 (dolist (c decomp)
-                   (if (> (get-char-code-property c 
'canonical-combining-class) 0)
-                       (setq found-one t)
-                     (push c simpler-decomp)))
-                 (when (and simpler-decomp found-one)
-                   (funcall make-decomp-match-char simpler-decomp char)
-                   ;; Finally, if the decomp only had one spacing
-                   ;; character, we allow this character to match the
-                   ;; decomp.  This is to let 'a' match 'ä'.
-                   (unless (cdr simpler-decomp)
-                     (aset equiv (car simpler-decomp)
-                           (cons (apply #'string decomp)
-                                 (aref equiv (car simpler-decomp)))))))))))
-       table)
+                 ;; Do it again, without the non-spacing characters.
+                 ;; This allows 'a' to match 'ä'.
+                 (let ((simpler-decomp nil)
+                       (found-one nil))
+                   (dolist (c decomp)
+                     (if (> (get-char-code-property c 
'canonical-combining-class) 0)
+                         (setq found-one t)
+                       (push c simpler-decomp)))
+                   (when (and simpler-decomp found-one)
+                     (funcall make-decomp-match-char simpler-decomp char)
+                     ;; Finally, if the decomp only had one spacing
+                     ;; character, we allow this character to match the
+                     ;; decomp.  This is to let 'a' match 'ä'.
+                     (unless (cdr simpler-decomp)
+                       (aset equiv (car simpler-decomp)
+                             (cons (apply #'string decomp)
+                                   (aref equiv (car simpler-decomp)))))))))))
+         table))
 
       ;; Add some entries to default decomposition
       (dolist (it (or (bound-and-true-p char-fold-include)
@@ -232,7 +236,9 @@ Exceptionally for the space character (32), ALIST is 
ignored.")
 
 (defun char-fold-update-table ()
   "Update char-fold-table only when one of the options changes its value."
-  (let ((new (list (or (bound-and-true-p char-fold-include)
+  (let ((new (list (or (bound-and-true-p char-fold-override)
+                       char-fold--default-override)
+                   (or (bound-and-true-p char-fold-include)
                        char-fold--default-include)
                    (or (bound-and-true-p char-fold-exclude)
                        char-fold--default-exclude)
@@ -242,6 +248,22 @@ Exceptionally for the space character (32), ALIST is 
ignored.")
       (setq char-fold-table (char-fold--make-table)
             char-fold--previous new))))
 
+(defcustom char-fold-override char-fold--default-override
+  "Non-nil means to override the default definitions of equivalent characters.
+When nil (the default), the table of character equivalences used
+for character-folding is populated with the default set of equivalent
+characters; customize `char-fold-exclude' to remove unneeded equivalences,
+and `char-fold-include' to add your own.
+When this variable is non-nil, the table of equivalences starts empty,
+and you can add your own equivalences by customizing `char-fold-include'."
+  :type 'boolean
+  :initialize #'custom-initialize-default
+  :set (lambda (sym val)
+         (custom-set-default sym val)
+         (char-fold-update-table))
+  :group 'isearch
+  :version "29.1")
+
 (defcustom char-fold-include char-fold--default-include
   "Additional character foldings to include.
 Each entry is a list of a character and the strings that fold into it."
diff --git a/lisp/chistory.el b/lisp/chistory.el
index 95c1b49cd8..dd0f499743 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: K. Shane Hartman
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/cmuscheme.el b/lisp/cmuscheme.el
index 47113ad8c2..e64d9d28dd 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1988-2022 Free Software Foundation, Inc.
 
 ;; Author: Olin Shivers <olin.shivers@cs.cmu.edu>
 ;; Maintainer: emacs-devel@gnu.org
@@ -237,7 +237,7 @@ is run).
        (inferior-scheme-mode)))
   (setq scheme-program-name cmd)
   (setq scheme-buffer "*scheme*")
-  (pop-to-buffer-same-window "*scheme*"))
+  (pop-to-buffer "*scheme*" display-comint-buffer-action))
 
 (defun scheme-start-file (prog)
   "Return the name of the start file corresponding to PROG.
@@ -357,7 +357,7 @@ With argument, position cursor at end of buffer."
   (interactive "P")
   (if (or (and scheme-buffer (get-buffer scheme-buffer))
           (scheme-interactively-start-process))
-      (pop-to-buffer-same-window scheme-buffer)
+      (pop-to-buffer scheme-buffer display-comint-buffer-action)
     (error "No current process buffer.  See variable `scheme-buffer'"))
   (when eob-p
     (push-mark)
diff --git a/lisp/color.el b/lisp/color.el
index fec36eecc3..0fe663d97a 100644
--- a/lisp/color.el
+++ b/lisp/color.el
@@ -1,6 +1,6 @@
 ;;; color.el --- Color manipulation library -*- lexical-binding:t -*-
 
-;; Copyright (C) 2010-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 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 544f0b8b82..fdea3e33bb 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1988, 1990, 1992-2022 Free Software Foundation, Inc.
 
 ;; Author: Olin Shivers <shivers@cs.cmu.edu>
 ;;     Simon Marshall <simon@gnu.org>
@@ -730,6 +730,8 @@ Entry to this mode runs the hooks on `comint-mode-hook'."
               (or (file-remote-p default-directory) ""))
   (setq-local comint-accum-marker (make-marker))
   (setq-local font-lock-defaults '(nil t))
+  (add-function :filter-return (local 'filter-buffer-substring-function)
+                #'comint--unmark-string-as-output)
   (add-hook 'change-major-mode-hook 'font-lock-defontify nil t)
   (add-hook 'isearch-mode-hook 'comint-history-isearch-setup nil t)
   (add-hook 'completion-at-point-functions 'comint-completion-at-point nil t)
@@ -1815,7 +1817,8 @@ Ignore duplicates if `comint-input-ignoredups' is 
non-nil."
     (ring-insert comint-input-ring cmd)))
 
 (defconst comint--prompt-rear-nonsticky
-  '(field inhibit-line-move-field-capture read-only font-lock-face)
+  '( field inhibit-line-move-field-capture read-only font-lock-face
+     insert-in-front-hooks)
   "Text properties we set on the prompt and don't want to leak past it.")
 
 (defun comint-send-input (&optional no-newline artificial)
@@ -2033,7 +2036,7 @@ the start, the cdr to the end of the last prompt 
recognized.")
 Freezes the `font-lock-face' text property in place."
   (when comint-last-prompt
     (with-silent-modifications
-      (font-lock-prepend-text-property
+      (font-lock-append-text-property
        (car comint-last-prompt)
        (cdr comint-last-prompt)
        'font-lock-face 'comint-highlight-prompt))
@@ -2152,14 +2155,7 @@ Make backspaces delete the previous character."
            (goto-char (process-mark process)) ; In case a filter moved it.
 
            (unless comint-use-prompt-regexp
-              (with-silent-modifications
-                (add-text-properties comint-last-output-start (point)
-                                     `(rear-nonsticky
-                                      ,comint--prompt-rear-nonsticky
-                                      front-sticky
-                                      (field inhibit-line-move-field-capture)
-                                      field output
-                                      inhibit-line-move-field-capture t))))
+              (comint--mark-as-output comint-last-output-start (point)))
 
            ;; Highlight the prompt, where we define `prompt' to mean
            ;; the most recent output that doesn't end with a newline.
@@ -2191,6 +2187,46 @@ Make backspaces delete the previous character."
                                     ,comint--prompt-rear-nonsticky)))
            (goto-char saved-point)))))))
 
+(defun comint--mark-as-output (beg end)
+  (with-silent-modifications
+    (add-text-properties
+     beg end
+     `(rear-nonsticky
+       ,comint--prompt-rear-nonsticky
+       front-sticky
+       (field inhibit-line-move-field-capture)
+       field output
+       inhibit-line-move-field-capture t
+       ;; Text inserted by a user in the middle of process output
+       ;; should be marked as output.  This is needed for commands
+       ;; such as `yank' or `just-one-space' which don't use
+       ;; `insert-and-inherit' and thus bypass default text property
+       ;; inheritance.
+       insert-in-front-hooks
+       (,#'comint--mark-as-output ,#'comint--mark-yanked-as-output)))))
+
+(defun comint--mark-yanked-as-output (beg end)
+  ;; `yank' removes the field text property from the text it inserts
+  ;; due to `yank-excluded-properties', so arrange for this text
+  ;; property to be reapplied in the `after-change-functions'.
+  (let (fun)
+    (setq
+     fun
+     (lambda (beg1 end1 _len1)
+       (remove-hook 'after-change-functions fun t)
+       (when (and (= beg beg1)
+                  (= end end1))
+         (comint--mark-as-output beg1 end1))))
+    (add-hook 'after-change-functions fun nil t)))
+
+(defun comint--unmark-string-as-output (string)
+  (remove-list-of-text-properties
+   0 (length string)
+   '( rear-nonsticky front-sticky field
+      inhibit-line-move-field-capture insert-in-front-hooks)
+   string)
+  string)
+
 (defun comint-preinput-scroll-to-bottom ()
   "Go to the end of buffer in all windows showing it.
 Movement occurs if point in the selected window is not after the process mark,
diff --git a/lisp/completion.el b/lisp/completion.el
index 643f2da0d2..fb700954b0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: abbrev convenience
@@ -492,7 +492,7 @@ Used to decide whether to save completions.")
     table))
 
 ;; Old name, non-namespace-clean.
-(defvaralias 'cmpl-syntax-table 'completion-syntax-table)
+(define-obsolete-variable-alias 'cmpl-syntax-table 'completion-syntax-table 
"29.1")
 
 (defvar-local completion-syntax-table completion-standard-syntax-table
   "This variable holds the current completion syntax table.")
@@ -2220,7 +2220,7 @@ TYPE is the type of the wrapper to be added.  Can be 
:before or :under."
 (completion-def-wrapper 'delete-backward-char-untabify :backward)
 
 ;; Old name, non-namespace-clean.
-(defalias 'initialize-completions #'completion-initialize)
+(define-obsolete-function-alias 'initialize-completions 
#'completion-initialize "29.1")
 
 (provide 'completion)
 
diff --git a/lisp/composite.el b/lisp/composite.el
index c2289e8998..d7ac75708c 100644
--- a/lisp/composite.el
+++ b/lisp/composite.el
@@ -1,6 +1,6 @@
 ;;; composite.el --- support character composition  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2001-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 31a896088a..87dcbbb004 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2022 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 b7c53a4dfe..3e350c611a 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-1997, 1999-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1997, 1999-2022 Free Software Foundation, Inc.
 ;;
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Maintainer: emacs-devel@gnu.org
@@ -2176,7 +2176,7 @@ and `face'."
 ;;; The `custom' Widget.
 
 (defface custom-button
-  '((((type x w32 ns haiku) (class color))     ; Like default mode line
+  '((((type x w32 ns haiku pgtk) (class color))        ; Like default mode line
      :box (:line-width 2 :style released-button)
      :background "lightgrey" :foreground "black"))
   "Face for custom buffer buttons if `custom-raised-buttons' is non-nil."
@@ -2184,7 +2184,7 @@ and `face'."
   :group 'custom-faces)
 
 (defface custom-button-mouse
-  '((((type x w32 ns haiku) (class color))
+  '((((type x w32 ns haiku pgtk) (class color))
      :box (:line-width 2 :style released-button)
      :background "grey90" :foreground "black")
     (t
@@ -2209,7 +2209,7 @@ and `face'."
       (if custom-raised-buttons 'custom-button-mouse 'highlight))
 
 (defface custom-button-pressed
-  '((((type x w32 ns haiku) (class color))
+  '((((type x w32 ns haiku pgtk) (class color))
      :box (:line-width 2 :style pressed-button)
      :background "lightgrey" :foreground "black")
     (t :inverse-video t))
@@ -3458,6 +3458,10 @@ MS Windows.")
                                           :sibling-args (:help-echo "\
 GNUstep or Macintosh OS Cocoa interface.")
                                           ns)
+                                   (const :format "PGTK "
+                                          :sibling-args (:help-echo "\
+Pure-GTK interface.")
+                                          ns)
                                    (const :format "DOS "
                                           :sibling-args (:help-echo "\
 Plain MS-DOS.")
diff --git a/lisp/cus-face.el b/lisp/cus-face.el
index c78a327fdf..e905a45557 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1997, 1999-2022 Free Software Foundation, Inc.
 ;;
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Keywords: help, faces
@@ -141,7 +141,12 @@
                   (const :format "" :value :style)
                   (choice :tag "Style"
                           (const :tag "Line" line)
-                          (const :tag "Wave" wave))))
+                          (const :tag "Wave" wave))
+                   (const :format "" :value :position)
+                   (choice :tag "Position"
+                           (const :tag "At Default Position" nil)
+                           (const :tag "At Bottom Of Text" t)
+                           (integer :tag "Pixels Above Bottom Of Text"))))
      ;; filter to make value suitable for customize
      (lambda (real-value)
        (and real-value
@@ -151,18 +156,21 @@
                       'foreground-color))
                  (style
                   (or (and (consp real-value) (plist-get real-value :style))
-                      'line)))
-             (list :color color :style style))))
+                      'line))
+                  (position (and (consp real-value)
+                                 (plist-get real-value :style))))
+             (list :color color :style style :position position))))
      ;; filter to make customized-value suitable for storing
      (lambda (cus-value)
        (and cus-value
            (let ((color (plist-get cus-value :color))
-                 (style (plist-get cus-value :style)))
-             (cond ((eq style 'line)
+                 (style (plist-get cus-value :style))
+                  (position (plist-get cus-value :position)))
+             (cond ((and (eq style 'line) (not position))
                     ;; Use simple value for default style
                     (if (eq color 'foreground-color) t color))
                    (t
-                    `(:color ,color :style ,style)))))))
+                    `(:color ,color :style ,style :position ,position)))))))
 
     (:overline
      (choice :tag "Overline"
diff --git a/lisp/cus-start.el b/lisp/cus-start.el
index 68019c038e..cdadf08a89 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Keywords: internal
@@ -572,8 +572,10 @@ Leaving \"Default\" unchecked is equivalent with 
specifying a default of
             (ns-use-native-fullscreen ns boolean "24.4")
              (ns-use-fullscreen-animation ns boolean "25.1")
              (ns-use-srgb-colorspace ns boolean "24.4")
+             (ns-scroll-event-delta-factor ns float "29.1")
             ;; process.c
             (delete-exited-processes processes-basics boolean)
+             (process-error-pause-time processes-basics integer "29.1")
             ;; syntax.c
             (parse-sexp-ignore-comments editing-basics boolean)
             (words-include-escapes editing-basics boolean)
@@ -826,6 +828,8 @@ since it could result in memory overflow and make Emacs 
crash."
             (x-underline-at-descent-line display boolean "22.1")
             (x-stretch-cursor display boolean "21.1")
             (scroll-bar-adjust-thumb-portion windows boolean "24.4")
+             (x-scroll-event-delta-factor mouse float "29.1")
+             (x-gtk-use-native-input keyboard boolean "29.1")
             ;; xselect.c
             (x-select-enable-clipboard-manager killing boolean "24.1")
             ;; xsettings.c
@@ -852,10 +856,18 @@ since it could result in memory overflow and make Emacs 
crash."
                       (featurep 'ns))
                       ((string-match "\\`haiku-" (symbol-name symbol))
                        (featurep 'haiku))
+                      ((eq symbol 'x-gtk-use-native-input)
+                       (and (featurep 'x)
+                            (featurep 'gtk)))
                      ((string-match "\\`x-.*gtk" (symbol-name symbol))
                       (featurep 'gtk))
                      ((string-match "clipboard-manager" (symbol-name symbol))
                       (boundp 'x-select-enable-clipboard-manager))
+                      ((or (equal "scroll-bar-adjust-thumb-portion"
+                                 (symbol-name symbol))
+                           (equal "x-scroll-event-delta-factor"
+                                  (symbol-name symbol)))
+                      (featurep 'x))
                      ((string-match "\\`x-" (symbol-name symbol))
                       (fboundp 'x-create-frame))
                      ((string-match "selection" (symbol-name symbol))
@@ -876,9 +888,6 @@ since it could result in memory overflow and make Emacs 
crash."
                              (symbol-name symbol))
                       ;; Any function from fontset.c will do.
                       (fboundp 'new-fontset))
-                     ((equal "scroll-bar-adjust-thumb-portion"
-                             (symbol-name symbol))
-                      (featurep 'x))
                      (t t))))
     (if (not (boundp symbol))
        ;; If variables are removed from C code, give an error here!
diff --git a/lisp/cus-theme.el b/lisp/cus-theme.el
index f618e3341c..69ec837db8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 9252e80411..76c14831ca 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-2021 Free Software Foundation,
+;; Copyright (C) 1996-1997, 1999, 2001-2022 Free Software Foundation,
 ;; Inc.
 ;;
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
diff --git a/lisp/dabbrev.el b/lisp/dabbrev.el
index 037787797b..220a2f52e9 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-2021 Free
+;; Copyright (C) 1985-1986, 1992, 1994, 1996-1997, 2000-2022 Free
 ;; Software Foundation, Inc.
 
 ;; Author: Don Morrison
diff --git a/lisp/delim-col.el b/lisp/delim-col.el
index ac78e568da..e1e166cc48 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 93fdc6a886..f5fe7cf793 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-2021 Free Software Foundation,
+;; Copyright (C) 1992, 1997-1998, 2001-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Matthieu Devin <devin@lucid.com>
diff --git a/lisp/descr-text.el b/lisp/descr-text.el
index 2a239f8100..a816088932 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1996, 2001-2022 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 3b25713216..e7a368e21f 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-2021 Free Software Foundation,
+;; Copyright (C) 1993-1995, 1997, 2000-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Morten Welinder <terra@diku.dk>
diff --git a/lisp/dframe.el b/lisp/dframe.el
index 1ddf11a8aa..6593708a13 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2022 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 588551a641..637f8695f3 100644
--- a/lisp/dired-aux.el
+++ b/lisp/dired-aux.el
@@ -1,6 +1,6 @@
 ;;; dired-aux.el --- less commonly used parts of dired -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 1985-1986, 1992, 1994, 1998, 2000-2021 Free Software
+;; Copyright (C) 1985-1986, 1992, 1994, 1998, 2000-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Sebastian Kremer <sk@thp.uni-koeln.de>.
@@ -992,12 +992,14 @@ prompted for the shell command to use interactively."
 
 
 (defun dired-check-process (msg program &rest arguments)
-  "Display MSG while running PROGRAM, and check for output.
-Remaining arguments are strings passed as command arguments to PROGRAM.
-On error, insert output
-in a log buffer and return the offending ARGUMENTS or PROGRAM.
-Caller can cons up a list of failed args.
-Else returns nil for success."
+  "Display MSG, then run PROGRAM, and log any error messages from it.
+ARGUMENTS should be strings to be passed to PROGRAM as command-line
+arguments.
+
+If PROGRAM exits successfully, display \"MSG...done\" and return nil.
+If PROGRAM exits abnormally, save in `dired-log-buffer' the command
+that invoked PROGRAM and the messages it emitted, and return either
+the offending ARGUMENTS or PROGRAM if no ARGUMENTS were provided."
   (let (err-buffer err (dir default-directory))
     (message "%s..." msg)
     (save-excursion
@@ -1787,13 +1789,46 @@ Special value `always' suppresses confirmation."
   "Whether Dired should create destination dirs when copying/removing files.
 If nil, don't create them.
 If `always', create them without asking.
-If `ask', ask for user confirmation."
+If `ask', ask for user confirmation.
+
+Also see `dired-create-destination-dirs-on-trailing-dirsep'."
   :type '(choice (const :tag "Never create non-existent dirs" nil)
                 (const :tag "Always create non-existent dirs" always)
                 (const :tag "Ask for user confirmation" ask))
   :group 'dired
   :version "27.1")
 
+(defcustom dired-create-destination-dirs-on-trailing-dirsep nil
+  "If non-nil, treat a trailing slash at queried destination dir specially.
+
+If this variable is non-nil and a single destination filename is
+queried which ends in a directory separator (/), it will be
+treated as a non-existent directory and acted on according to
+`dired-create-destination-dirs'.
+
+This option is only relevant if `dired-create-destination-dirs'
+is non-nil, too.
+
+For example, if both `dired-create-destination-dirs' and this
+option are non-nil, renaming a directory named `old_name' to
+`new_name/' (note the trailing directory separator) where
+`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
+renamed to `new_name'."
+  :type '(choice
+          (const :tag
+                 (concat "Do not treat destination dirs with a "
+                         "trailing directory separator specially")
+                 nil)
+          (const :tag
+                 (concat "Treat destination dirs with trailing "
+                         "directory separator specially")
+                 t))
+  :group 'dired
+  :version "29.1")
+
 (defun dired-maybe-create-dirs (dir)
   "Create DIR if doesn't exist according to `dired-create-destination-dirs'."
   (when (and dired-create-destination-dirs (not (file-exists-p dir)))
@@ -2163,7 +2198,12 @@ Optional arg HOW-TO determines how to treat the target.
                     target-dir op-symbol arg rfn-list default))))
         (into-dir
           (progn
-            (unless dired-one-file (dired-maybe-create-dirs target))
+            (when
+                (or
+                 (not dired-one-file)
+                 (and dired-create-destination-dirs-on-trailing-dirsep
+                      (directory-name-p target)))
+              (dired-maybe-create-dirs target))
             (cond ((null how-to)
                   ;; Allow users to change the letter case of
                   ;; a directory on a case-insensitive
diff --git a/lisp/dired-x.el b/lisp/dired-x.el
index de21dcf7a6..bdf416b3ed 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-1994, 1997, 2001-2021 Free Software Foundation,
+;; Copyright (C) 1993-1994, 1997, 2001-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Sebastian Kremer <sk@thp.uni-koeln.de>
@@ -580,17 +580,18 @@ files in the active region if `dired-mark-region' is 
non-nil."
 
 (defalias 'virtual-dired 'dired-virtual)
 (defun dired-virtual (dirname &optional switches)
-  "Put this Dired buffer into Virtual Dired mode.
+  "Treat the current buffer as a Dired buffer showing directory DIRNAME.
+Interactively, prompt for DIRNAME.
 
-In Virtual Dired mode, all commands that do not actually consult the
-filesystem will work.
+This command is rarely useful, but may be convenient if you want
+to peruse and move around in the output you got from \"ls
+-lR\" (or something similar), without having access to the actual
+file system.
 
-This is useful if you want to peruse and move around in an ls -lR
-output file, for example one you got from an ftp server.  With
-ange-ftp, you can even Dired a directory containing an ls-lR file,
-visit that file and turn on Virtual Dired mode.  But don't try to save
-this file, as `dired-virtual' indents the listing and thus changes the
-buffer.
+Most Dired commands that don't consult the file system will work
+as advertised, but commands that try to alter the file system
+will usually fail.  (However, if the output is from the current
+system, most of those commands will work fine.)
 
 If you have saved a Dired buffer in a file you can use \\[dired-virtual] to
 resume it in a later session.
@@ -1264,13 +1265,21 @@ sure that a trailing letter in STR is one of 
BKkMGTPEZY."
   (let* ((val (string-to-number str))
          (u (unless (zerop val)
               (aref str (1- (length str))))))
-    (when (and u (> u ?9))
-      (when (= u ?k)
-        (setq u ?K))
-      (let ((units '(?B ?K ?M ?G ?T ?P ?E ?Z ?Y)))
-        (while (and units (/= (pop units) u))
-          (setq val (* 1024.0 val)))))
-    val))
+    ;; If we don't have a unit at the end, but we have some
+    ;; non-numeric strings in the string, then the string may be
+    ;; something like "4.134" or "4,134" meant to represent 4134
+    ;; (seen in some locales).
+    (if (and u
+             (<= ?0 u ?9)
+             (string-match-p "[^0-9]" str))
+        (string-to-number (replace-regexp-in-string "[^0-9]+" "" str))
+      (when (and u (> u ?9))
+        (when (= u ?k)
+          (setq u ?K))
+        (let ((units '(?B ?K ?M ?G ?T ?P ?E ?Z ?Y)))
+          (while (and units (/= (pop units) u))
+            (setq val (* 1024.0 val)))))
+      val)))
 
 (defun dired-mark-sexp (predicate &optional unflag-p)
   "Mark files for which PREDICATE returns non-nil.
diff --git a/lisp/dired.el b/lisp/dired.el
index 9280c080a4..9813fca435 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-2021 Free Software
+;; Copyright (C) 1985-1986, 1992-1997, 2000-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Sebastian Kremer <sk@thp.uni-koeln.de>
@@ -209,6 +209,18 @@ If a character, new links are unconditionally marked with 
that character."
                 (character :tag "Mark"))
   :group 'dired-mark)
 
+(defcustom dired-free-space 'first
+  "Whether and how to display the amount of free disk space in Dired buffers.
+If nil, don't display.
+If `separate', display on a separate line (along with used count).
+If `first', display only the free disk space on the first line,
+following the directory name."
+  :type '(choice (const :tag "On a separate line" separate)
+                 (const :tag "On the first line, after directory name" first)
+                 (const :tag "Don't display" nil))
+  :version "29.1"
+  :group 'dired)
+
 (defcustom dired-dwim-target nil
   "If non-nil, Dired tries to guess a default target directory.
 This means: if there is a Dired buffer displayed in some window,
@@ -1253,8 +1265,7 @@ The return value is the target column for the file names."
            ;; Don't try to find a wildcard as a subdirectory.
           (string-equal dirname (file-name-directory dirname)))
       (let* ((cur-buf (current-buffer))
-            (buffers (nreverse
-                      (dired-buffers-for-dir (expand-file-name dirname))))
+            (buffers (nreverse (dired-buffers-for-dir dirname)))
             (cur-buf-matches (and (memq cur-buf buffers)
                                   ;; Wildcards must match, too:
                                   (equal dired-directory dirname))))
@@ -1614,15 +1625,55 @@ see `dired-use-ls-dired' for more details.")
          ;; by its expansion, so it does not matter whether what we insert
          ;; here is fully expanded, but it should be absolute.
          (insert "  " (or (car-safe (insert-directory-wildcard-in-dir-p dir))
-                           (directory-file-name (file-name-directory dir))) 
":\n")
+                           (directory-file-name (file-name-directory dir)))
+                  ":\n")
          (setq content-point (point)))
        (when wildcard
          ;; Insert "wildcard" line where "total" line would be for a full dir.
          (insert "  wildcard " (or (cdr-safe 
(insert-directory-wildcard-in-dir-p dir))
                                     (file-name-nondirectory dir))
-                  "\n")))
+                  "\n"))
+        (setq content-point (dired--insert-disk-space opoint dir)))
       (dired-insert-set-properties content-point (point)))))
 
+(defun dired--insert-disk-space (beg file)
+  ;; Try to insert the amount of free space.
+  (save-excursion
+    (goto-char beg)
+    ;; First find the line to put it on.
+    (if (not (re-search-forward "^ *\\(total\\)" nil t))
+        beg
+      (if (or (not dired-free-space)
+              (eq dired-free-space 'first))
+          (delete-region (match-beginning 0) (line-beginning-position 2))
+        ;; Replace "total" with "total used in directory" to
+        ;; avoid confusion.
+        (replace-match "total used in directory" nil nil nil 1))
+      (if-let ((available (get-free-disk-space file)))
+        (cond
+         ((eq dired-free-space 'separate)
+         (end-of-line)
+         (insert " available " available)
+          (forward-line 1)
+          (point))
+         ((eq dired-free-space 'first)
+          (goto-char beg)
+          (when (and (looking-at
+                      (if (memq system-type '(windows-nt ms-dos))
+                          " *[A-Za-z]:/"
+                        " */"))
+                     (progn
+                       (end-of-line)
+                       (eq (char-after (1- (point))) ?:)))
+            (put-text-property (1- (point)) (point)
+                               'display
+                               (concat ": (" available " available)")))
+          (forward-line 1)
+          (point))
+         (t
+          beg))
+        beg))))
+
 (defun dired-insert-set-properties (beg end)
   "Add various text properties to the lines in the region, from BEG to END."
   (save-excursion
@@ -1869,160 +1920,152 @@ Do so according to the former subdir alist 
OLD-SUBDIR-ALIST."
 
 ;;; Dired mode key bindings and menus
 
-(defvar dired-mode-map
+(defvar-keymap dired-mode-map
+  :doc "Local keymap for Dired mode buffers."
+  :full t
+  :parent special-mode-map
   ;; This looks ugly when substitute-command-keys uses C-d instead d:
-  ;;  (define-key dired-mode-map "\C-d" 'dired-flag-file-deletion)
-  (let ((map (make-keymap)))
-    (set-keymap-parent map special-mode-map)
-    (define-key map [mouse-2] 'dired-mouse-find-file-other-window)
-    (define-key map [follow-link] 'mouse-face)
-    ;; Commands to mark or flag certain categories of files
-    (define-key map "#" 'dired-flag-auto-save-files)
-    (define-key map "." 'dired-clean-directory)
-    (define-key map "~" 'dired-flag-backup-files)
-    ;; Upper case keys (except !) for operating on the marked files
-    (define-key map "A" 'dired-do-find-regexp)
-    (define-key map "C" 'dired-do-copy)
-    (define-key map "B" 'dired-do-byte-compile)
-    (define-key map "D" 'dired-do-delete)
-    (define-key map "G" 'dired-do-chgrp)
-    (define-key map "H" 'dired-do-hardlink)
-    (define-key map "L" 'dired-do-load)
-    (define-key map "M" 'dired-do-chmod)
-    (define-key map "O" 'dired-do-chown)
-    (define-key map "P" 'dired-do-print)
-    (define-key map "Q" 'dired-do-find-regexp-and-replace)
-    (define-key map "R" 'dired-do-rename)
-    (define-key map "S" 'dired-do-symlink)
-    (define-key map "T" 'dired-do-touch)
-    (define-key map "X" 'dired-do-shell-command)
-    (define-key map "Z" 'dired-do-compress)
-    (define-key map "c" 'dired-do-compress-to)
-    (define-key map "!" 'dired-do-shell-command)
-    (define-key map "&" 'dired-do-async-shell-command)
-    ;; Comparison commands
-    (define-key map "=" 'dired-diff)
-    ;; Tree Dired commands
-    (define-key map "\M-\C-?" 'dired-unmark-all-files)
-    (define-key map "\M-\C-d" 'dired-tree-down)
-    (define-key map "\M-\C-u" 'dired-tree-up)
-    (define-key map "\M-\C-n" 'dired-next-subdir)
-    (define-key map "\M-\C-p" 'dired-prev-subdir)
-    ;; move to marked files
-    (define-key map "\M-{" 'dired-prev-marked-file)
-    (define-key map "\M-}" 'dired-next-marked-file)
-    ;; Make all regexp commands share a `%' prefix:
-    ;; We used to get to the submap via a symbol dired-regexp-prefix,
-    ;; but that seems to serve little purpose, and copy-keymap
-    ;; does a better job without it.
-    (define-key map "%" nil)
-    (define-key map "%u" 'dired-upcase)
-    (define-key map "%l" 'dired-downcase)
-    (define-key map "%d" 'dired-flag-files-regexp)
-    (define-key map "%g" 'dired-mark-files-containing-regexp)
-    (define-key map "%m" 'dired-mark-files-regexp)
-    (define-key map "%r" 'dired-do-rename-regexp)
-    (define-key map "%C" 'dired-do-copy-regexp)
-    (define-key map "%H" 'dired-do-hardlink-regexp)
-    (define-key map "%R" 'dired-do-rename-regexp)
-    (define-key map "%S" 'dired-do-symlink-regexp)
-    (define-key map "%&" 'dired-flag-garbage-files)
-    ;; Commands for marking and unmarking.
-    (define-key map "*" nil)
-    (define-key map "**" 'dired-mark-executables)
-    (define-key map "*/" 'dired-mark-directories)
-    (define-key map "*@" 'dired-mark-symlinks)
-    (define-key map "*%" 'dired-mark-files-regexp)
-    (define-key map "*N" 'dired-number-of-marked-files)
-    (define-key map "*c" 'dired-change-marks)
-    (define-key map "*s" 'dired-mark-subdir-files)
-    (define-key map "*m" 'dired-mark)
-    (define-key map "*u" 'dired-unmark)
-    (define-key map "*?" 'dired-unmark-all-files)
-    (define-key map "*!" 'dired-unmark-all-marks)
-    (define-key map "U" 'dired-unmark-all-marks)
-    (define-key map "*\177" 'dired-unmark-backward)
-    (define-key map "*\C-n" 'dired-next-marked-file)
-    (define-key map "*\C-p" 'dired-prev-marked-file)
-    (define-key map "*t" 'dired-toggle-marks)
-    ;; Lower keys for commands not operating on all the marked files
-    (define-key map "a" 'dired-find-alternate-file)
-    (define-key map "d" 'dired-flag-file-deletion)
-    (define-key map "e" 'dired-find-file)
-    (define-key map "f" 'dired-find-file)
-    (define-key map "\C-m" 'dired-find-file)
-    (put 'dired-find-file :advertised-binding "\C-m")
-    (define-key map "g" 'revert-buffer)
-    (define-key map "i" 'dired-maybe-insert-subdir)
-    (define-key map "j" 'dired-goto-file)
-    (define-key map "k" 'dired-do-kill-lines)
-    (define-key map "l" 'dired-do-redisplay)
-    (define-key map "m" 'dired-mark)
-    (define-key map "n" 'dired-next-line)
-    (define-key map "o" 'dired-find-file-other-window)
-    (define-key map "\C-o" 'dired-display-file)
-    (define-key map "p" 'dired-previous-line)
-    (define-key map "s" 'dired-sort-toggle-or-edit)
-    (define-key map "t" 'dired-toggle-marks)
-    (define-key map "u" 'dired-unmark)
-    (define-key map "v" 'dired-view-file)
-    (define-key map "w" 'dired-copy-filename-as-kill)
-    (define-key map "W" 'browse-url-of-dired-file)
-    (define-key map "x" 'dired-do-flagged-delete)
-    (define-key map "y" 'dired-show-file-type)
-    (define-key map "+" 'dired-create-directory)
-    ;; moving
-    (define-key map "<" 'dired-prev-dirline)
-    (define-key map ">" 'dired-next-dirline)
-    (define-key map "^" 'dired-up-directory)
-    (define-key map " " 'dired-next-line)
-    (define-key map [?\S-\ ] 'dired-previous-line)
-    (define-key map [remap next-line] 'dired-next-line)
-    (define-key map [remap previous-line] 'dired-previous-line)
-    ;; hiding
-    (define-key map "$" 'dired-hide-subdir)
-    (define-key map "\M-$" 'dired-hide-all)
-    (define-key map "(" 'dired-hide-details-mode)
-    ;; isearch
-    (define-key map (kbd "M-s a C-s")   'dired-do-isearch)
-    (define-key map (kbd "M-s a M-C-s") 'dired-do-isearch-regexp)
-    (define-key map (kbd "M-s f C-s")   'dired-isearch-filenames)
-    (define-key map (kbd "M-s f M-C-s") 'dired-isearch-filenames-regexp)
-    ;; misc
-    (define-key map [remap read-only-mode] 'dired-toggle-read-only)
-    ;; `toggle-read-only' is an obsolete alias for `read-only-mode'
-    (define-key map [remap toggle-read-only] 'dired-toggle-read-only)
-    (define-key map "?" 'dired-summary)
-    (define-key map "\177" 'dired-unmark-backward)
-    (define-key map [remap undo] 'dired-undo)
-    (define-key map [remap advertised-undo] 'dired-undo)
-    (define-key map [remap vc-next-action] 'dired-vc-next-action)
-    ;; thumbnail manipulation (image-dired)
-    (define-key map "\C-td" 'image-dired-display-thumbs)
-    (define-key map "\C-tt" 'image-dired-tag-files)
-    (define-key map "\C-tr" 'image-dired-delete-tag)
-    (define-key map "\C-tj" 'image-dired-jump-thumbnail-buffer)
-    (define-key map "\C-ti" 'image-dired-dired-display-image)
-    (define-key map "\C-tx" 'image-dired-dired-display-external)
-    (define-key map "\C-ta" 'image-dired-display-thumbs-append)
-    (define-key map "\C-t." 'image-dired-display-thumb)
-    (define-key map "\C-tc" 'image-dired-dired-comment-files)
-    (define-key map "\C-tf" 'image-dired-mark-tagged-files)
-    (define-key map "\C-t\C-t" 'image-dired-dired-toggle-marked-thumbs)
-    (define-key map "\C-te" 'image-dired-dired-edit-comment-and-tags)
-    ;; encryption and decryption (epa-dired)
-    (define-key map ":d" 'epa-dired-do-decrypt)
-    (define-key map ":v" 'epa-dired-do-verify)
-    (define-key map ":s" 'epa-dired-do-sign)
-    (define-key map ":e" 'epa-dired-do-encrypt)
-
-    ;; No need to do this, now that top-level items are fewer.
-    ;;;;
-    ;; Get rid of the Edit menu bar item to save space.
-    ;;(define-key map [menu-bar edit] 'undefined)
-
-    map)
-  "Local keymap for Dired mode buffers.")
+  ;;  "C-d" #'dired-flag-file-deletion
+  "<mouse-2>"     #'dired-mouse-find-file-other-window
+  "<follow-link>" 'mouse-face
+  ;; Commands to mark or flag certain categories of files
+  "#"       #'dired-flag-auto-save-files
+  "."       #'dired-clean-directory
+  "~"       #'dired-flag-backup-files
+  ;; Upper case keys (except !) for operating on the marked files
+  "A"       #'dired-do-find-regexp
+  "C"       #'dired-do-copy
+  "B"       #'dired-do-byte-compile
+  "D"       #'dired-do-delete
+  "G"       #'dired-do-chgrp
+  "H"       #'dired-do-hardlink
+  "L"       #'dired-do-load
+  "M"       #'dired-do-chmod
+  "O"       #'dired-do-chown
+  "P"       #'dired-do-print
+  "Q"       #'dired-do-find-regexp-and-replace
+  "R"       #'dired-do-rename
+  "S"       #'dired-do-symlink
+  "T"       #'dired-do-touch
+  "X"       #'dired-do-shell-command
+  "Z"       #'dired-do-compress
+  "c"       #'dired-do-compress-to
+  "!"       #'dired-do-shell-command
+  "&"       #'dired-do-async-shell-command
+  ;; Comparison commands
+  "="       #'dired-diff
+  ;; Tree Dired commands
+  "M-DEL"   #'dired-unmark-all-files
+  "C-M-d"   #'dired-tree-down
+  "C-M-u"   #'dired-tree-up
+  "C-M-n"   #'dired-next-subdir
+  "C-M-p"   #'dired-prev-subdir
+  ;; move to marked files
+  "M-{"     #'dired-prev-marked-file
+  "M-}"     #'dired-next-marked-file
+  ;; Make all regexp commands share a `%' prefix:
+  ;; We used to get to the submap via a symbol dired-regexp-prefix,
+  ;; but that seems to serve little purpose, and copy-keymap
+  ;; does a better job without it.
+  "% u"     #'dired-upcase
+  "% l"     #'dired-downcase
+  "% d"     #'dired-flag-files-regexp
+  "% g"     #'dired-mark-files-containing-regexp
+  "% m"     #'dired-mark-files-regexp
+  "% r"     #'dired-do-rename-regexp
+  "% C"     #'dired-do-copy-regexp
+  "% H"     #'dired-do-hardlink-regexp
+  "% R"     #'dired-do-rename-regexp
+  "% S"     #'dired-do-symlink-regexp
+  "% &"     #'dired-flag-garbage-files
+  ;; Commands for marking and unmarking.
+  "* *"     #'dired-mark-executables
+  "* /"     #'dired-mark-directories
+  "* @"     #'dired-mark-symlinks
+  "* %"     #'dired-mark-files-regexp
+  "* N"     #'dired-number-of-marked-files
+  "* c"     #'dired-change-marks
+  "* s"     #'dired-mark-subdir-files
+  "* m"     #'dired-mark
+  "* u"     #'dired-unmark
+  "* ?"     #'dired-unmark-all-files
+  "* !"     #'dired-unmark-all-marks
+  "U"       #'dired-unmark-all-marks
+  "* DEL"   #'dired-unmark-backward
+  "* C-n"   #'dired-next-marked-file
+  "* C-p"   #'dired-prev-marked-file
+  "* t"     #'dired-toggle-marks
+  ;; Lower keys for commands not operating on all the marked files
+  "a"       #'dired-find-alternate-file
+  "d"       #'dired-flag-file-deletion
+  "e"       #'dired-find-file
+  "f"       #'dired-find-file
+  "C-m"     #'dired-find-file
+  "g"       #'revert-buffer
+  "i"       #'dired-maybe-insert-subdir
+  "j"       #'dired-goto-file
+  "k"       #'dired-do-kill-lines
+  "l"       #'dired-do-redisplay
+  "m"       #'dired-mark
+  "n"       #'dired-next-line
+  "o"       #'dired-find-file-other-window
+  "C-o"     #'dired-display-file
+  "p"       #'dired-previous-line
+  "s"       #'dired-sort-toggle-or-edit
+  "t"       #'dired-toggle-marks
+  "u"       #'dired-unmark
+  "v"       #'dired-view-file
+  "w"       #'dired-copy-filename-as-kill
+  "W"       #'browse-url-of-dired-file
+  "x"       #'dired-do-flagged-delete
+  "y"       #'dired-show-file-type
+  "+"       #'dired-create-directory
+  ;; moving
+  "<"       #'dired-prev-dirline
+  ">"       #'dired-next-dirline
+  "^"       #'dired-up-directory
+  "SPC"     #'dired-next-line
+  "S-SPC"   #'dired-previous-line
+  "<remap> <next-line>"        #'dired-next-line
+  "<remap> <previous-line>"    #'dired-previous-line
+  ;; hiding
+  "$"       #'dired-hide-subdir
+  "M-$"     #'dired-hide-all
+  "("       #'dired-hide-details-mode
+  ;; isearch
+  "M-s a C-s"   #'dired-do-isearch
+  "M-s a C-M-s" #'dired-do-isearch-regexp
+  "M-s f C-s"   #'dired-isearch-filenames
+  "M-s f C-M-s" #'dired-isearch-filenames-regexp
+  ;; misc
+  "<remap> <read-only-mode>"   #'dired-toggle-read-only
+  ;; `toggle-read-only' is an obsolete alias for `read-only-mode'
+  "<remap> <toggle-read-only>" #'dired-toggle-read-only
+  "?"       #'dired-summary
+  "DEL"     #'dired-unmark-backward
+  "<remap> <undo>"             #'dired-undo
+  "<remap> <advertised-undo>"  #'dired-undo
+  "<remap> <vc-next-action>"   #'dired-vc-next-action
+  ;; thumbnail manipulation (image-dired)
+  "C-t d"   #'image-dired-display-thumbs
+  "C-t t"   #'image-dired-tag-files
+  "C-t r"   #'image-dired-delete-tag
+  "C-t j"   #'image-dired-jump-thumbnail-buffer
+  "C-t i"   #'image-dired-dired-display-image
+  "C-t x"   #'image-dired-dired-display-external
+  "C-t a"   #'image-dired-display-thumbs-append
+  "C-t ."   #'image-dired-display-thumb
+  "C-t c"   #'image-dired-dired-comment-files
+  "C-t f"   #'image-dired-mark-tagged-files
+  "C-t C-t" #'image-dired-dired-toggle-marked-thumbs
+  "C-t e"   #'image-dired-dired-edit-comment-and-tags
+  ;; encryption and decryption (epa-dired)
+  ": d"     #'epa-dired-do-decrypt
+  ": v"     #'epa-dired-do-verify
+  ": s"     #'epa-dired-do-sign
+  ": e"     #'epa-dired-do-encrypt)
+
+(put 'dired-find-file :advertised-binding (kbd "RET"))
 
 (easy-menu-define dired-mode-subdir-menu dired-mode-map
   "Subdir menu for Dired mode."
@@ -2915,7 +2958,7 @@ directories below DIR.
 The list is in reverse order of buffer creation, most recent last.
 As a side effect, killed dired buffers for DIR are removed from
 `dired-buffers'."
-  (setq dir (file-name-as-directory dir))
+  (setq dir (file-name-as-directory (expand-file-name dir)))
   (let (result buf)
     (dolist (elt dired-buffers)
       (setq buf (cdr elt))
@@ -3466,7 +3509,7 @@ If the buffer has a wildcard pattern, check that it 
matches FILE.
 FILE may be nil, in which case ignore it.
 Return list of buffers where FUN succeeded (i.e., returned non-nil)."
   (let (success-list)
-    (dolist (buf (dired-buffers-for-dir (expand-file-name directory) file))
+    (dolist (buf (dired-buffers-for-dir directory file))
       (with-current-buffer buf
        (when (apply fun args)
          (push (buffer-name buf) success-list))))
@@ -3515,8 +3558,7 @@ confirmation.  To disable the confirmation, see
                                      (file-name-nondirectory fn))))
                (not dired-clean-confirm-killing-deleted-buffers))
            (kill-buffer buf)))
-    (let ((buf-list (dired-buffers-for-dir (expand-file-name fn)
-                                           nil 'subdirs)))
+    (let ((buf-list (dired-buffers-for-dir fn nil 'subdirs)))
       (and buf-list
            (or (and dired-clean-confirm-killing-deleted-buffers
                     (y-or-n-p
diff --git a/lisp/dirtrack.el b/lisp/dirtrack.el
index be8db75c96..da60840f8b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2001-2022 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 a7fc8f0a76..422728c61c 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-2021 Free Software
+;; Copyright (C) 1987, 1994-1995, 1999, 2001-2022 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 7e9d62c5d1..a13f6b547f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 72928492bb..860aa758bc 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: convenience
diff --git a/lisp/dnd.el b/lisp/dnd.el
index 44316154b0..97e81e9bf1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2022 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 7e113e4f34..5b462b24f5 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
 ;;
 ;; Author: Tassilo Horn <tsdh@gnu.org>
 ;; Keywords: files, pdf, ps, dvi
@@ -811,9 +811,10 @@ OpenDocument format)."
                  (and doc-view-dvipdfm-program
                       (executable-find doc-view-dvipdfm-program)))))
        ((memq type '(postscript ps eps pdf))
-        ;; FIXME: allow mupdf here
-        (and doc-view-ghostscript-program
-             (executable-find doc-view-ghostscript-program)))
+        (or (and doc-view-ghostscript-program
+                 (executable-find doc-view-ghostscript-program))
+             (and doc-view-pdfdraw-program
+                  (executable-find doc-view-pdfdraw-program))))
        ((eq type 'odf)
         (and doc-view-odf->pdf-converter-program
              (executable-find doc-view-odf->pdf-converter-program)
diff --git a/lisp/dom.el b/lisp/dom.el
index 71793c0d67..f8c794a300 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2022 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 07c77faa23..ea54eea603 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-2021 Free Software
+;; Copyright (C) 1991, 1993, 1995-1996, 2001-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/dos-vars.el b/lisp/dos-vars.el
index 7fcbb56d22..87a758f408 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: internal
diff --git a/lisp/dos-w32.el b/lisp/dos-w32.el
index 45daaad8ef..8bfbf4ffde 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2001-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: Geoff Voelker <voelker@cs.washington.edu>
 ;; Keywords: internal
diff --git a/lisp/double.el b/lisp/double.el
index f9227a8bbd..d990fa8d90 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-2021 Free Software Foundation,
+;; Copyright (C) 1994, 1997-1998, 2001-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
diff --git a/lisp/dynamic-setting.el b/lisp/dynamic-setting.el
index 6b037aa2a6..8ac9a1e9e6 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 7fecf1a504..0c3d4af569 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-2021 Free Software Foundation,
+;; Copyright (C) 1985-1986, 1994, 2001-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Richard Mlynarik <mly@ai.mit.edu>
diff --git a/lisp/echistory.el b/lisp/echistory.el
index 15679b13d5..809010d016 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: K. Shane Hartman
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/ecomplete.el b/lisp/ecomplete.el
index 105edc48a0..260657e0f7 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: mail
diff --git a/lisp/edmacro.el b/lisp/edmacro.el
index 29900a9595..2561994f7b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Dave Gillespie <daveg@synaptics.com>
 ;; Keywords: abbrev
diff --git a/lisp/ehelp.el b/lisp/ehelp.el
index aa809d6f6f..8c1555249c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1986, 1995, 2000-2022 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 f907bba4c6..c3fd90e5bf 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
 
 ;; Author: João Távora <joaotavora@gmail.com>
 
diff --git a/lisp/electric.el b/lisp/electric.el
index a2f24ca05c..905d4a87c7 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-2021 Free Software Foundation,
+;; Copyright (C) 1985-1986, 1995, 2001-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: K. Shane Hartman
diff --git a/lisp/elide-head.el b/lisp/elide-head.el
index c0857e3938..90bf1fe35b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <fx@gnu.org>
 ;; Keywords: outlines tools
@@ -26,12 +26,12 @@
 ;; notices) in file headers to avoid clutter when you know what it
 ;; says.
 ;;
-;; `elide-head-headers-to-hide' controls what is elided by the command
-;; `elide-head'.  A buffer-local invisible overlay manages the
-;; elision.
+;; `elide-head-headers-to-hide' controls what is elided by the minor
+;; mode `elide-head-mode'.  A buffer-local invisible overlay manages
+;; the elision.
 
-;; You might add `elide-head' to appropriate major mode hooks or to
-;; `find-file-hook'.  Please do not do this in site init files.  If
+;; You might add `elide-head-mode' to appropriate major mode hooks or
+;; to `find-file-hook'.  Please do not do this in site init files.  If
 ;; you do, information may be hidden from users who don't know it
 ;; already.
 
@@ -50,24 +50,99 @@
   :group 'tools)
 
 (defcustom elide-head-headers-to-hide
-  '(("is free software[:;] you can redistribute it" . ; GNU boilerplate
-     "\\(Boston, MA 0211\\(1-1307\\|0-1301\\), USA\\|\
-If not, see <https?://www\\.gnu\\.org/licenses/>\\)\\.")
-    ("The Regents of the University of California\\.  All rights reserved\\." .
-     "SUCH DAMAGE\\.")                               ; BSD
-    ("Permission is hereby granted, free of charge" . ; X11
-     "authorization from the X Consortium\\."))
+  `(;; GNU GPL
+    ("is free software[:;] you can redistribute it" .
+     ,(rx (or (seq "If not, see " (? "<")
+                   "http" (? "s") "://www.gnu.org/licenses/"
+                   (? ">") (? " "))
+              (seq "Boston, MA " (? " ")
+                   "0211" (or "1-1307" "0-1301")
+                   (or "  " ", ") "USA")
+              "675 Mass Ave, Cambridge, MA 02139, USA")
+          (? ".")))
+    ;; FreeBSD license / Modified BSD license (3-clause)
+    (,(rx (or "The Regents of the University of California.  All rights 
reserved."
+              "Redistribution and use in source and binary"))
+     . "POSSIBILITY OF SUCH DAMAGE\\.")
+    ;; X11 and Expat
+    ("Permission is hereby granted, free of charge" .
+     ,(rx (or "authorization from the X Consortium."           ; X11
+              "THE USE OR OTHER DEALINGS IN THE SOFTWARE.")))) ; Expat
   "Alist of regexps defining start and end of text to elide.
 
 The cars of elements of the list are searched for in order.  Text is
 elided with an invisible overlay from the end of the line where the
 first match is found to the end of the match for the corresponding
-cdr."
+cdr.
+
+This affects `elide-head-mode'."
   :type '(alist :key-type  (regexp :tag "Start regexp")
-               :value-type (regexp :tag "End regexp")))
+                :value-type (regexp :tag "End regexp"))
+  :version "29.1")
 
 (defvar-local elide-head-overlay nil)
 
+(defun elide-head--delete-overlay ()
+  "Delete the overlay in `elide-head-overlay'."
+  (when (overlayp elide-head-overlay)
+    (delete-overlay elide-head-overlay)))
+
+(defun elide-head--hide ()
+  "Hide elided (hidden) headers."
+  (save-excursion
+    (save-restriction
+      (let ((rest elide-head-headers-to-hide)
+            beg end)
+        (widen)
+        (goto-char (point-min))
+        (while rest
+          (save-excursion
+            (when (re-search-forward (caar rest) nil t)
+              (setq beg (point))
+              (when (re-search-forward (cdar rest) nil t)
+                (setq end (point-marker)
+                      rest nil))))
+          (if rest (setq rest (cdr rest))))
+        (if (not (and beg end))
+            (if (called-interactively-p 'interactive)
+                (message "No header found"))
+          (goto-char beg)
+          (end-of-line)
+          (if (overlayp elide-head-overlay)
+              (move-overlay elide-head-overlay (point-marker) end)
+            (setq elide-head-overlay (make-overlay (point-marker) end)))
+          (overlay-put elide-head-overlay 'invisible t)
+          (overlay-put elide-head-overlay 'evaporate t)
+          (overlay-put elide-head-overlay 'after-string "..."))))))
+
+(defun elide-head--show ()
+  "Show elided (hidden) headers."
+  (if (and (overlayp elide-head-overlay)
+           (overlay-buffer elide-head-overlay))
+      (elide-head--delete-overlay)
+    (if (called-interactively-p 'interactive)
+        (message "No header hidden"))))
+
+;;;###autoload
+(define-minor-mode elide-head-mode
+  "Toggle eliding (hiding) header material in the current buffer.
+
+When Elide Header mode is enabled, headers are hidden according
+to `elide-head-headers-to-hide'.
+
+This is suitable as an entry on `find-file-hook' or appropriate
+mode hooks."
+  :group 'elide-head
+  (if elide-head-mode
+      (progn
+        (elide-head--hide)
+        (add-hook 'change-major-mode-hook 'elide-head--delete-overlay nil 
'local))
+    (elide-head--show)
+    (remove-hook 'change-major-mode-hook 'elide-head--delete-overlay 'local)))
+
+
+;;; Obsolete
+
 ;;;###autoload
 (defun elide-head (&optional arg)
   "Hide header material in buffer according to `elide-head-headers-to-hide'.
@@ -76,43 +151,17 @@ The header is made invisible with an overlay.  With a 
prefix arg, show
 an elided material again.
 
 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
-      (elide-head-show)
-    (save-excursion
-      (save-restriction
-       (let ((rest elide-head-headers-to-hide)
-             beg end)
-         (widen)
-         (goto-char (point-min))
-         (while rest
-           (save-excursion
-             (when (re-search-forward (caar rest) nil t)
-               (setq beg (point))
-               (when (re-search-forward (cdar rest) nil t)
-                 (setq end (point-marker)
-                       rest nil))))
-           (if rest (setq rest (cdr rest))))
-         (if (not (and beg end))
-             (if (called-interactively-p 'interactive)
-                 (message "No header found"))
-           (goto-char beg)
-           (end-of-line)
-           (if (overlayp elide-head-overlay)
-               (move-overlay elide-head-overlay (point-marker) end)
-             (setq elide-head-overlay (make-overlay (point-marker) end)))
-           (overlay-put elide-head-overlay 'invisible t)
-           (overlay-put elide-head-overlay 'evaporate t)
-           (overlay-put elide-head-overlay 'after-string "...")))))))
+      (elide-head-mode -1)
+    (elide-head-mode 1)))
 
 (defun elide-head-show ()
   "Show a header in the current buffer elided by \\[elide-head]."
+  (declare (obsolete elide-head-mode "29.1"))
   (interactive)
-  (if (and (overlayp elide-head-overlay)
-          (overlay-buffer elide-head-overlay))
-      (delete-overlay elide-head-overlay)
-    (if (called-interactively-p 'interactive)
-       (message "No header hidden"))))
+  (elide-head-mode -1))
 
 (provide 'elide-head)
 
diff --git a/lisp/emacs-lisp/advice.el b/lisp/emacs-lisp/advice.el
index 15e413e0e8..8e43ae6807 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-1994, 2000-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2000-2022 Free Software Foundation, Inc.
 
 ;; Author: Hans Chalupsky <hans@cs.buffalo.edu>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/emacs-lisp/autoload.el b/lisp/emacs-lisp/autoload.el
index 148fb70981..a51fd8ca25 100644
--- a/lisp/emacs-lisp/autoload.el
+++ b/lisp/emacs-lisp/autoload.el
@@ -1,6 +1,6 @@
 ;;; autoload.el --- maintain autoloads in loaddefs.el  -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 1991-1997, 2001-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1991-1997, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Roland McGrath <roland@gnu.org>
 ;; Keywords: maint
@@ -32,7 +32,7 @@
 
 (require 'lisp-mode)                   ;for `doc-string-elt' properties.
 (require 'lisp-mnt)
-(eval-when-compile (require 'cl-lib))
+(require 'cl-lib)
 
 (defvar generated-autoload-file nil
   "File into which to write autoload definitions.
@@ -393,7 +393,7 @@ FILE's name."
     (concat ";;; " basename
             " --- automatically extracted " (or type "autoloads")
             "  -*- lexical-binding: t -*-\n"
-            (when (equal basename "loaddefs.el")
+            (when (string-match "/lisp/loaddefs\\.el\\'" file)
               ";; This file will be copied to ldefs-boot.el and checked in 
periodically.\n")
            ";;\n"
            ";;; Code:\n\n"
@@ -1196,9 +1196,17 @@ directory or directories specified."
          (goto-char (point-max))
          (search-backward "\f" nil t)
          (autoload-insert-section-header
-          (current-buffer) nil nil no-autoloads (if autoload-timestamps
-                                                    no-autoloads-time
-                                                  autoload--non-timestamp))
+          (current-buffer) nil nil
+           ;; Filter out the other loaddefs files, because it makes
+           ;; the list unstable (and leads to spurious changes in
+           ;; ldefs-boot.el) since the loaddef files can be created in
+           ;; any order.
+           (seq-filter (lambda (file)
+                         (not (string-match-p "[/-]loaddefs.el" file)))
+                       no-autoloads)
+           (if autoload-timestamps
+              no-autoloads-time
+            autoload--non-timestamp))
          (insert generate-autoload-section-trailer)))
 
       ;; Don't modify the file if its content has not been changed, so `make'
diff --git a/lisp/emacs-lisp/avl-tree.el b/lisp/emacs-lisp/avl-tree.el
index 3f803107a1..8886d84b2d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2007-2022 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 fe39e8d099..3aef4a28bb 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-2021 Free Software Foundation,
+;; Copyright (C) 1990, 1992, 1994, 2001-2022 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 a8b484aee0..3231877a30 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2022 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 64c628822d..c5f621c6c8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2022 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 17a55c7dba..04c5b9f080 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 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 7750f723ba..a0c6dd99a9 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1991, 1994, 2000-2022 Free Software Foundation, Inc.
 
 ;; Author: Jamie Zawinski <jwz@lucid.com>
 ;;     Hallvard Furuseth <hbf@ulrik.uio.no>
@@ -343,8 +343,12 @@ for speeding up processing.")
       (numberp expr)
       (stringp expr)
       (and (consp expr)
-           (memq (car expr) '(quote function))
-           (symbolp (cadr expr)))
+           (or (and (memq (car expr) '(quote function))
+                    (symbolp (cadr expr)))
+               ;; (internal-get-closed-var N) can be considered constant for
+               ;; const-prop purposes.
+               (and (eq (car expr) 'internal-get-closed-var)
+                    (integerp (cadr expr)))))
       (keywordp expr)))
 
 (defmacro byte-optimize--pcase (exp &rest cases)
@@ -1464,6 +1468,7 @@ See Info node `(elisp) Integer Basics'."
 (let ((side-effect-free-fns
        '(% * + - / /= 1+ 1- < <= = > >= abs acos append aref ash asin atan
         assq
+         base64-decode-string base64-encode-string base64url-encode-string
          bool-vector-count-consecutive bool-vector-count-population
          bool-vector-subsetp
         boundp buffer-file-name buffer-local-variables buffer-modified-p
@@ -1620,6 +1625,7 @@ See Info node `(elisp) Integer Basics'."
          assq rassq rassoc
          plist-get lax-plist-get plist-member
          aref elt
+         base64-decode-string base64-encode-string base64url-encode-string
          bool-vector-subsetp
          bool-vector-count-population bool-vector-count-consecutive
          )))
diff --git a/lisp/emacs-lisp/byte-run.el b/lisp/emacs-lisp/byte-run.el
index 813ff53ea7..f324bcd971 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Jamie Zawinski <jwz@lucid.com>
 ;;     Hallvard Furuseth <hbf@ulrik.uio.no>
@@ -134,6 +134,7 @@ The return value of this function is not used."
              :autoload-end
              (eval-and-compile
                (defun ,cfname (,@(car data) ,@args)
+                 (ignore ,@(delq '&rest (delq '&optional (copy-sequence 
args))))
                  ,@(cdr data))))))))
 
 (defalias 'byte-run--set-doc-string
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index 47b5d6ceca..b3197a9702 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-2021 Free Software
+;; Copyright (C) 1985-1987, 1992, 1994, 1998, 2000-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Jamie Zawinski <jwz@lucid.com>
@@ -344,6 +344,7 @@ suppress.  For example, (not mapcar) will suppress warnings 
about mapcar."
        (or (symbolp v)
            (null (delq nil (mapcar (lambda (x) (not (symbolp x))) v))))))
 
+;;;###autoload
 (defun byte-compile-warning-enabled-p (warning &optional symbol)
   "Return non-nil if WARNING is enabled, according to `byte-compile-warnings'."
   (let ((suppress nil))
@@ -516,15 +517,11 @@ Return the compile-time value of FORM."
                               ;; Don't compile here, since we don't know
                               ;; whether to compile as byte-compile-form
                               ;; or byte-compile-file-form.
-                              (let* ((print-symbols-bare t)
-                                     (expanded
-                                      (macroexpand-all
-                                       form
-                                       macroexpand-all-environment)))
-                                (eval
-                                 (macroexp-strip-symbol-positions
-                                      expanded)
-                                 lexical-binding)
+                              (let ((expanded
+                                     (macroexpand--all-toplevel
+                                      form
+                                      macroexpand-all-environment)))
+                                (eval expanded lexical-binding)
                                 expanded)))))
     (with-suppressed-warnings
         . ,(lambda (warnings &rest body)
@@ -1790,7 +1787,7 @@ It is too wide if it has any lines longer than the 
largest of
                           (nth 2 form)))))
       (when (and (consp name) (eq (car name) 'quote))
         (setq name (cadr name)))
-      (setq name (if name (format " `%s'" name) ""))
+      (setq name (if name (format " `%s' " name) ""))
       (when (and kind docs (stringp docs)
                  (byte-compile--wide-docstring-p docs col))
         (byte-compile-warn-x
@@ -2317,8 +2314,7 @@ With argument ARG, insert value in current buffer after 
the form."
        (byte-compile-depth 0)
        (byte-compile-maxdepth 0)
        (byte-compile-output nil)
-       ;; This allows us to get the positions of symbols read; it's
-       ;; new in Emacs 22.1.
+        ;; This allows us to get the positions of symbols read.
        (read-with-symbol-positions inbuffer)
        (read-symbol-positions-list nil)
        ;;        #### This is bound in b-c-close-variables.
@@ -2782,15 +2778,6 @@ list that represents a doc string reference.
            (mapcar 'eval
                    (macroexp-strip-symbol-positions (cdr form))))))
 
-;; This handler is not necessary, but it makes the output from dont-compile
-;; and similar macros cleaner.
-(put 'eval 'byte-hunk-handler 'byte-compile-file-form-eval)
-(defun byte-compile-file-form-eval (form)
-  (if (and (eq (car-safe (nth 1 form)) 'quote)
-           (equal (nth 2 form) lexical-binding))
-      (nth 1 (nth 1 form))
-    (byte-compile-keep-pending form)))
-
 (defun byte-compile-file-form-defmumble (name macro arglist body rest)
   "Process a `defalias' for NAME.
 If MACRO is non-nil, the definition is known to be a macro.
@@ -5080,13 +5067,13 @@ binding slots have been popped."
   ;; if it weren't for the fact that we need to figure out when a defalias
   ;; defines a macro, so as to add it to byte-compile-macro-environment.
   ;;
-  ;; FIXME: we also use this hunk-handler to implement the function's dynamic
-  ;; docstring feature.  We could actually implement it more elegantly in
-  ;; byte-compile-lambda so it applies to all lambdas, but the problem is that
-  ;; the resulting .elc format will not be recognized by make-docfile, so
-  ;; either we stop using DOC for the docstrings of preloaded elc files (at the
-  ;; cost of around 24KB on 32bit hosts, double on 64bit hosts) or we need to
-  ;; build DOC in a more clever way (e.g. handle anonymous elements).
+  ;; FIXME: we also use this hunk-handler to implement the function's
+  ;; dynamic docstring feature (via byte-compile-file-form-defmumble).
+  ;; We should actually implement it (more elegantly) in
+  ;; byte-compile-lambda so it applies to all lambdas.  We did it here
+  ;; so the resulting .elc format was recognizable by make-docfile,
+  ;; but since then we stopped using DOC for the docstrings of
+  ;; preloaded elc files so that obstacle is gone.
   (let ((byte-compile-free-references nil)
         (byte-compile-free-assignments nil))
     (pcase form
@@ -5197,69 +5184,6 @@ binding slots have been popped."
 
 
 
-;; Key syntax warnings.
-
-(mapc
- (lambda (elem)
-   (put (car elem) 'byte-hunk-handler
-        (lambda (form)
-          (dolist (idx (cdr elem))
-            (let ((key (elt form idx)))
-              (when (or (vectorp key)
-                        (and (stringp key)
-                             (not (key-valid-p key))))
-                (byte-compile-warn-x form "Invalid `kbd' syntax: %S" key))))
-          form)))
- ;; Functions and the place(s) for the key definition(s).
- '((keymap-set 2)
-   (keymap-global-set 1)
-   (keymap-local-set 1)
-   (keymap-unset 2)
-   (keymap-global-unset 1)
-   (keymap-local-unset 1)
-   (keymap-substitute 2 3)
-   (keymap-set-after 2)
-   (key-translate 1 2)
-   (keymap-lookup 2)
-   (keymap-global-lookup 1)
-   (keymap-local-lookup 1)))
-
-(put 'define-keymap 'byte-hunk-handler #'byte-compile-define-keymap)
-(defun byte-compile-define-keymap (form)
-  (let ((result nil)
-        (orig-form form))
-    (push (pop form) result)
-    (while (and form
-                (keywordp (car form))
-                (not (eq (car form) :menu)))
-      (unless (memq (car form)
-                    '(:full :keymap :parent :suppress :name :prefix))
-        (byte-compile-warn-x (car form) "Invalid keyword: %s" (car form)))
-      (push (pop form) result)
-      (when (null form)
-        (byte-compile-warn-x orig-form "Uneven number of keywords in %S" form))
-      (push (pop form) result))
-    ;; Bindings.
-    (while form
-      (let ((key (pop form)))
-        (when (stringp key)
-          (unless (key-valid-p key)
-            (byte-compile-warn-x form "Invalid `kbd' syntax: %S" key)))
-          ;; No improvement.
-        (push key result))
-      (when (null form)
-        (byte-compile-warn-x form "Uneven number of key bindings in %S" form))
-      (push (pop form) result))
-    (macroexp-strip-symbol-positions orig-form)))
-
-(put 'define-keymap--define 'byte-hunk-handler
-     #'byte-compile-define-keymap--define)
-(defun byte-compile-define-keymap--define (form)
-  (when (consp (nth 1 form))
-    (byte-compile-define-keymap (nth 1 form)))
-  form)
-
-
 ;;; tags
 
 ;; Note: Most operations will strip off the 'TAG, but it speeds up
diff --git a/lisp/emacs-lisp/cconv.el b/lisp/emacs-lisp/cconv.el
index e12f0a1753..7b22121db0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
 ;; Author: Igor Kuzmin <kzuminig@iro.umontreal.ca>
 ;; Maintainer: emacs-devel@gnu.org
@@ -293,17 +293,31 @@ of converted forms."
                              (cconv-convert form env nil))
                            funcbody))
     (if wrappers
-        (let ((special-forms '()))
-          ;; Keep special forms at the beginning of the body.
-          (while (or (and (cdr funcbody) (stringp (car funcbody))) ;docstring.
-                     (memq (car-safe (car funcbody))
-                           '(interactive declare :documentation)))
-            (push (pop funcbody) special-forms))
-          (let ((body (macroexp-progn funcbody)))
+        (pcase-let ((`(,decls . ,body) (macroexp-parse-body funcbody)))
+          (let ((body (macroexp-progn body)))
             (dolist (wrapper wrappers) (setq body (funcall wrapper body)))
-            `(,@(nreverse special-forms) ,@(macroexp-unprogn body))))
+            `(,@decls ,@(macroexp-unprogn body))))
       funcbody)))
 
+(defun cconv--lifted-arg (var env)
+  "The argument to use for VAR in λ-lifted calls according to ENV.
+This is used when VAR is being shadowed; we may still need its value for
+such calls."
+  (let ((mapping (cdr (assq var env))))
+    (pcase-exhaustive mapping
+      (`(internal-get-closed-var . ,_)
+       ;; The variable is captured.
+       mapping)
+      (`(car-safe ,exp)
+       ;; The variable is mutably captured; skip
+       ;; the indirection step because the variable is
+       ;; passed "by reference" to the λ-lifted function.
+       exp)
+      (_
+       ;; The variable is not captured; use the (shadowed) variable value.
+       ;; (If the mapping is `(car-safe SYMBOL)', SYMBOL is always VAR.
+       var))))
+
 (defun cconv-convert (form env extend)
   ;; This function actually rewrites the tree.
   "Return FORM with all its lambdas changed so they are closed.
@@ -432,10 +446,11 @@ places where they originally did not directly appear."
                  ;; One of the lambda-lifted vars is shadowed, so add
                  ;; a reference to the outside binding and arrange to use
                  ;; that reference.
-                 (let ((closedsym (make-symbol (format "closed-%s" var))))
+                 (let ((var-def (cconv--lifted-arg var env))
+                       (closedsym (make-symbol (format "closed-%s" var))))
                    (setq new-env (cconv--remap-llv new-env var closedsym))
                    (setq new-extend (cons closedsym (remq var new-extend)))
-                   (push `(,closedsym ,var) binders-new)))
+                   (push `(,closedsym ,var-def) binders-new)))
 
                ;; We push the element after redefined free variables are
                ;; processed.  This is important to avoid the bug when free
@@ -453,14 +468,13 @@ places where they originally did not directly appear."
          ;; before we know that the var will be in `new-extend' (bug#24171).
          (dolist (binder binders-new)
            (when (memq (car-safe binder) new-extend)
-             ;; One of the lambda-lifted vars is shadowed, so add
-             ;; a reference to the outside binding and arrange to use
-             ;; that reference.
+             ;; One of the lambda-lifted vars is shadowed.
              (let* ((var (car-safe binder))
+                    (var-def (cconv--lifted-arg var env))
                     (closedsym (make-symbol (format "closed-%s" var))))
                (setq new-env (cconv--remap-llv new-env var closedsym))
                (setq new-extend (cons closedsym (remq var new-extend)))
-               (push `(,closedsym ,var) binders-new)))))
+               (push `(,closedsym ,var-def) binders-new)))))
 
        `(,letsym ,(nreverse binders-new)
                  . ,(mapcar (lambda (form)
diff --git a/lisp/emacs-lisp/chart.el b/lisp/emacs-lisp/chart.el
index 0494497fea..4186a541f8 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, 1998-1999, 2001, 2004-2005, 2007-2021 Free
+;; Copyright (C) 1996, 1998-1999, 2001, 2004-2005, 2007-2022 Free
 ;; Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
diff --git a/lisp/emacs-lisp/check-declare.el b/lisp/emacs-lisp/check-declare.el
index 83a9d3ea6a..eeefb3de10 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 ab2f34c310..334988e713 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-1998, 2001-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Old-Version: 0.6.2
@@ -161,6 +161,7 @@
 
 ;;; Code:
 
+(require 'bytecomp)  ;; for byte-compile-docstring-max-column
 (require 'cl-lib)
 (require 'help-mode) ;; for help-xref-info-regexp
 (require 'thingatpt) ;; for handy thing-at-point-looking-at
diff --git a/lisp/emacs-lisp/cl-extra.el b/lisp/emacs-lisp/cl-extra.el
index 499d26b737..ed9b1b7d83 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 2000-2022 Free Software Foundation, Inc.
 
 ;; Author: Dave Gillespie <daveg@synaptics.com>
 ;; Keywords: extensions
diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el
index 43214aab30..53691881ec 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Version: 1.0
@@ -286,7 +286,9 @@ DEFAULT-BODY, if present, is used as the body of a default 
method.
          (progn
            (defalias ',name
              (cl-generic-define ',name ',args ',(nreverse options))
-             ,(help-add-fundoc-usage doc args))
+             ,(if (consp doc)           ;An expression rather than a constant.
+                  `(help-add-fundoc-usage ,doc ',args)
+                (help-add-fundoc-usage doc args)))
            :autoload-end
            ,@(mapcar (lambda (method) `(cl-defmethod ,name ,@method))
                      (nreverse methods)))
@@ -604,7 +606,9 @@ The set of acceptable TYPEs (also called \"specializers\") 
is defined
 
 (defun cl--generic-get-dispatcher (dispatch)
   (with-memoization
-      (gethash dispatch cl--generic-dispatchers)
+      ;; We need `copy-sequence` here because this `dispatch' object might be
+      ;; modified by side-effect in `cl-generic-define-method' (bug#46722).
+      (gethash (copy-sequence dispatch) cl--generic-dispatchers)
     ;; (message "cl--generic-get-dispatcher (%S)" dispatch)
     (let* ((dispatch-arg (car dispatch))
            (generalizers (cdr dispatch))
diff --git a/lisp/emacs-lisp/cl-indent.el b/lisp/emacs-lisp/cl-indent.el
index 9d8aae2844..213eecf88d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1987, 2000-2022 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 317a4c6230..4e60a3c63d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Dave Gillespie <daveg@synaptics.com>
 ;; Version: 1.0
@@ -560,4 +560,9 @@ of record objects."
    (t
     (advice-remove 'type-of #'cl--old-struct-type-of))))
 
+(defun cl-constantly (value)
+  "Return a function that takes any number of arguments, but returns VALUE."
+  (lambda (&rest _)
+    value))
+
 ;;; cl-lib.el ends here
diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el
index fbcf0020e8..ecfa8801bf 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Dave Gillespie <daveg@synaptics.com>
 ;; Old-Version: 2.02
@@ -301,24 +301,31 @@ FORM is of the form (ARGS . BODY)."
              (t ;; `simple-args' doesn't handle all the parsing that we need,
               ;; so we pass the rest to cl--do-arglist which will do
               ;; "manual" parsing.
-              (let ((slen (length simple-args)))
-                (when (memq '&optional simple-args)
-                  (cl-decf slen))
-                (setq header
+              (let ((slen (length simple-args))
+                    (usage-str
                       ;; Macro expansion can take place in the middle of
                       ;; apparently harmless computation, so it should not
                       ;; touch the match-data.
                       (save-match-data
-                        (cons (help-add-fundoc-usage
-                               (if (stringp (car header)) (pop header))
-                               ;; Be careful with make-symbol and (back)quote,
-                               ;; see bug#12884.
-                               (help--docstring-quote
-                                (let ((print-gensym nil) (print-quoted t)
-                                      (print-escape-newlines t))
-                                  (format "%S" (cons 'fn (cl--make-usage-args
-                                                          orig-args))))))
-                              header)))
+                        (help--docstring-quote
+                         (let ((print-gensym nil) (print-quoted t)
+                               (print-escape-newlines t))
+                           (format "%S" (cons 'fn (cl--make-usage-args
+                                                   orig-args))))))))
+                (when (memq '&optional simple-args)
+                  (cl-decf slen))
+                (setq header
+                      (cons
+                       (if (eq :documentation (car-safe (car header)))
+                           `(:documentation (help-add-fundoc-usage
+                                             ,(cadr (pop header))
+                                             ,usage-str))
+                         (help-add-fundoc-usage
+                          (if (stringp (car header)) (pop header))
+                          ;; Be careful with make-symbol and (back)quote,
+                          ;; see bug#12884.
+                          usage-str))
+                       header))
                 ;; FIXME: we'd want to choose an arg name for the &rest param
                 ;; and pass that as `expr' to cl--do-arglist, but that ends up
                 ;; generating code with a redundant let-binding, so we instead
@@ -2139,9 +2146,14 @@ Like `cl-flet' but the definitions can refer to previous 
ones.
                    ;; setq the fresh new `ofargs' vars instead ;-)
                    (let ((shadowings
                           (mapcar (lambda (b) (if (consp b) (car b) b)) 
bindings)))
-                     ;; If `var' is shadowed, then it clearly can't be
-                     ;; tail-called any more.
-                     (not (memq var shadowings)))))
+                     (and
+                      ;; If `var' is shadowed, then it clearly can't be
+                      ;; tail-called any more.
+                      (not (memq var shadowings))
+                      ;; If any of the new bindings is a dynamic
+                      ;; variable, the body is not in tail position.
+                      (not (delq nil (mapcar #'macroexp--dynamic-variable-p
+                                             shadowings)))))))
              `(,(car exp) ,bindings . ,(funcall opt-exps exps)))
             ((and `(condition-case ,err-var ,bodyform . ,handlers)
                   (guard (not (eq err-var var))))
@@ -3052,7 +3064,7 @@ To see the documentation for a defined struct type, use
                             `(,predicate cl-x))))
     (when pred-form
       (push `(,defsym ,predicate (cl-x)
-               (declare (side-effect-free error-free))
+               (declare (side-effect-free error-free) (pure t))
                ,(if (eq (car pred-form) 'and)
                     (append pred-form '(t))
                   `(and ,pred-form t)))
@@ -3369,6 +3381,7 @@ Of course, we really can't know that for sure, so it's 
just a heuristic."
                  (integer      . integerp)
                  (keyword      . keywordp)
                  (list         . listp)
+                 (natnum       . natnump)
                  (number       . numberp)
                  (null         . null)
                  (real         . numberp)
diff --git a/lisp/emacs-lisp/cl-print.el b/lisp/emacs-lisp/cl-print.el
index 348da59fd9..2aade140e2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 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 329bd7c1b3..64ae05bf2a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 2001-2022 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 5518cdb4c9..ad956dabd8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
 
 ;; Author: Andrea Corallo <akrl@sdf.com>
 ;; Keywords: lisp
@@ -70,7 +70,7 @@
                                        (irange &aux
                                                (range (list irange))
                                                (typeset ())))
-                         (:copier comp-cstr-shallow-copy))
+                         (:copier nil))
   "Internal representation of a type/value constraint."
   (typeset '(t) :type list
            :documentation "List of possible types the mvar can assume.
@@ -133,6 +133,14 @@ Integer values are handled in the `range' slot.")
                     :range (copy-tree (range cstr))
                     :neg (neg cstr))))
 
+(defsubst comp-cstr-shallow-copy (dst src)
+  "Copy the content of SRC into DST."
+  (with-comp-cstr-accessors
+    (setf (range dst) (range src)
+          (valset dst) (valset src)
+          (typeset dst) (typeset src)
+          (neg dst) (neg src))))
+
 (defsubst comp-cstr-empty-p (cstr)
   "Return t if CSTR is equivalent to the nil type specifier or nil otherwise."
   (with-comp-cstr-accessors
@@ -438,10 +446,7 @@ Return them as multiple value."
                                                        ext-range)
                             ext-range)
               (neg dst) nil)
-      (setf (typeset dst) (typeset old-dst)
-            (valset dst) (valset old-dst)
-            (range dst) (range old-dst)
-            (neg dst) (neg old-dst)))))
+      (comp-cstr-shallow-copy dst old-dst))))
 
 (defmacro comp-cstr-set-range-for-arithm (dst src1 src2 &rest range-body)
   ;; Prevent some code duplication for `comp-cstr-add-2'
@@ -581,10 +586,8 @@ DST is returned."
                                                     (when (range pos)
                                                       '(integer)))))
                                  (typeset neg)))
-              (setf (typeset dst) (typeset pos)
-                    (valset dst) (valset pos)
-                    (range dst) (range pos)
-                    (neg dst) nil)
+              (comp-cstr-shallow-copy dst pos)
+              (setf (neg dst) nil)
               (cl-return-from comp-cstr-union-1-no-mem dst))
 
             ;; Verify disjoint condition between positive types and
@@ -631,15 +634,9 @@ DST is returned."
                         (comp-range-negation (range neg))
                         (range pos))))))
 
-            (if (comp-cstr-empty-p neg)
-                (setf (typeset dst) (typeset pos)
-                      (valset dst) (valset pos)
-                      (range dst) (range pos)
-                      (neg dst) nil)
-              (setf (typeset dst) (typeset neg)
-                    (valset dst) (valset neg)
-                    (range dst) (range neg)
-                    (neg dst) (neg neg)))))
+            (comp-cstr-shallow-copy dst (if (comp-cstr-empty-p neg)
+                                            pos
+                                          neg))))
 
         ;; (not null) => t
         (when (and (neg dst)
@@ -663,10 +660,7 @@ DST is returned."
                      (mapcar #'comp-cstr-copy srcs)
                      (apply #'comp-cstr-union-1-no-mem range srcs)
                      mem-h))))
-      (setf (typeset dst) (typeset res)
-            (valset dst) (valset res)
-            (range dst) (range res)
-            (neg dst) (neg res))
+      (comp-cstr-shallow-copy dst res)
       res)))
 
 (cl-defun comp-cstr-intersection-homogeneous (dst &rest srcs)
@@ -753,10 +747,8 @@ Non memoized version of `comp-cstr-intersection-no-mem'."
             ;; In case pos is not relevant return directly the content
             ;; of neg.
             (when (equal (typeset pos) '(t))
-              (setf (typeset dst) (typeset neg)
-                    (valset dst) (valset neg)
-                    (range dst) (range neg)
-                    (neg dst) t)
+              (comp-cstr-shallow-copy dst neg)
+              (setf (neg dst) t)
 
               ;; (not t) => nil
               (when (and (null (valset dst))
@@ -800,10 +792,8 @@ Non memoized version of `comp-cstr-intersection-no-mem'."
                   (cl-set-difference (valset pos) (valset neg)))
 
             ;; Return a non negated form.
-            (setf (typeset dst) (typeset pos)
-                  (valset dst) (valset pos)
-                  (range dst) (range pos)
-                  (neg dst) nil)))
+            (comp-cstr-shallow-copy dst pos)
+            (setf (neg dst) nil)))
         dst))))
 
 
@@ -883,7 +873,7 @@ Non memoized version of `comp-cstr-intersection-no-mem'."
   "Constraint OP1 being = OP2 setting the result into DST."
   (with-comp-cstr-accessors
     (cl-flet ((relax-cstr (cstr)
-                (setf cstr (comp-cstr-shallow-copy cstr))
+                (setf cstr (copy-sequence cstr))
                 ;; If can be any float extend it to all integers.
                 (when (memq 'float (typeset cstr))
                   (setf (range cstr) '((- . +))))
@@ -1008,10 +998,7 @@ DST is returned."
                      (mapcar #'comp-cstr-copy srcs)
                      (apply #'comp-cstr-intersection-no-mem srcs)
                      mem-h))))
-      (setf (typeset dst) (typeset res)
-            (valset dst) (valset res)
-            (range dst) (range res)
-            (neg dst) (neg res))
+      (comp-cstr-shallow-copy dst res)
       res)))
 
 (defun comp-cstr-intersection-no-hashcons (dst &rest srcs)
@@ -1067,10 +1054,9 @@ DST is returned."
             (valset dst) ()
             (range dst) nil
             (neg dst) nil))
-     (t (setf (typeset dst) (typeset src)
-              (valset dst) (valset src)
-              (range dst) (range src)
-              (neg dst) (not (neg src)))))
+     (t
+      (comp-cstr-shallow-copy dst src)
+      (setf (neg dst) (not (neg src)))))
     dst))
 
 (defun comp-cstr-value-negation (dst src)
diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el
index 1912d0d003..225272f020 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
 
 ;; Author: Andrea Corallo <akrl@sdf.com>
 ;; Keywords: lisp
@@ -1181,7 +1181,9 @@ clashes."
                           for i across orig-name
                           for byte = (format "%x" i)
                           do (aset str j (aref byte 0))
-                             (aset str (1+ j) (aref byte 1))
+                             (aset str (1+ j) (if (length> byte 1)
+                                                  (aref byte 1)
+                                                ?\_))
                           finally return str))
          (human-readable (string-replace
                           "-" "_" orig-name))
@@ -3084,13 +3086,6 @@ Forward propagate immediate involed in assignments." ; 
FIXME: Typo.  Involved or
             (`(setimm ,lval ,v)
              (setf (comp-cstr-imm lval) v))))))
 
-(defun comp-mvar-propagate (lval rval)
-  "Propagate into LVAL properties of RVAL."
-  (setf (comp-mvar-typeset lval) (comp-mvar-typeset rval)
-        (comp-mvar-valset lval) (comp-mvar-valset rval)
-        (comp-mvar-range lval) (comp-mvar-range rval)
-        (comp-mvar-neg lval) (comp-mvar-neg rval)))
-
 (defun comp-function-foldable-p (f args)
   "Given function F called with ARGS, return non-nil when optimizable."
   (and (comp-function-pure-p f)
@@ -3140,10 +3135,7 @@ Fold the call in case."
         (when (comp-cstr-empty-p cstr)
           ;; Store it to be rewritten as non local exit.
           (setf (comp-block-lap-non-ret-insn comp-block) insn))
-        (setf (comp-mvar-range lval) (comp-cstr-range cstr)
-              (comp-mvar-valset lval) (comp-cstr-valset cstr)
-              (comp-mvar-typeset lval) (comp-cstr-typeset cstr)
-              (comp-mvar-neg lval) (comp-cstr-neg cstr))))
+        (comp-cstr-shallow-copy lval cstr)))
     (cl-case f
       (+ (comp-cstr-add lval args))
       (- (comp-cstr-sub lval args))
@@ -3161,9 +3153,9 @@ Fold the call in case."
         (let ((f (comp-func-name (gethash f (comp-ctxt-funcs-h comp-ctxt)))))
           (comp-fwprop-call insn lval f args)))
        (_
-        (comp-mvar-propagate lval rval))))
+        (comp-cstr-shallow-copy lval rval))))
     (`(assume ,lval ,(and (pred comp-mvar-p) rval))
-     (comp-mvar-propagate lval rval))
+     (comp-cstr-shallow-copy lval rval))
     (`(assume ,lval (,kind . ,operands))
      (cl-case kind
        (and
@@ -4223,7 +4215,8 @@ variable 'NATIVE_DISABLED' is set, only byte compile."
       (batch-native-compile)
       (pcase byte-to-native-output-file
         (`(,tempfile . ,target-file)
-         (rename-file tempfile target-file t))))))
+         (rename-file tempfile target-file t)))
+      (setq command-line-args-left (cdr command-line-args-left)))))
 
 ;;;###autoload
 (defun native-compile-async (files &optional recursively load selector)
diff --git a/lisp/emacs-lisp/copyright.el b/lisp/emacs-lisp/copyright.el
index 9da370a725..09c6ded295 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-2021 Free Software Foundation,
+;; Copyright (C) 1991-1995, 1998, 2001-2022 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 59cbc0e50d..f3e1981732 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1986, 1993-2022 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 ffeddadd57..a3b40ef8b2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords:
diff --git a/lisp/emacs-lisp/debug.el b/lisp/emacs-lisp/debug.el
index 163528acf6..46b0306d64 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-2021 Free Software Foundation,
+;; Copyright (C) 1985-1986, 1994, 2001-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/emacs-lisp/derived.el b/lisp/emacs-lisp/derived.el
index af5eecc22a..b9958f4951 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-1994, 1999, 2001-2021 Free Software Foundation,
+;; Copyright (C) 1993-1994, 1999, 2001-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: David Megginson (dmeggins@aix1.uottawa.ca)
diff --git a/lisp/emacs-lisp/disass.el b/lisp/emacs-lisp/disass.el
index 6c019e7387..d6a3636e60 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1986, 1991, 2002-2022 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 59038f6e9b..56e84ab339 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2000-2022 Free Software Foundation, Inc.
 
 ;; Author: Georges Brun-Cottan <Georges.Brun-Cottan@inria.fr>
 ;; Maintainer: Stefan Monnier <monnier@gnu.org>
@@ -698,7 +698,7 @@ Valid keywords and arguments are:
   "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
 the constant's documentation."
-  (declare (indent 1))
+  (declare (doc-string 3) (indent 1))
   `(defconst ,m
      (easy-mmode-define-keymap ,bs nil (if (boundp ',m) ,m) ,(cons 'list args))
      ,doc))
@@ -725,7 +725,7 @@ the constant's documentation."
 (defmacro easy-mmode-defsyntax (st css doc &rest args)
   "Define variable ST as a syntax-table.
 CSS contains a list of syntax specifications of the form (CHAR . SYNTAX)."
-  (declare (indent 1))
+  (declare (doc-string 3) (indent 1))
   `(progn
      (autoload 'easy-mmode-define-syntax "easy-mmode")
      (defconst ,st (easy-mmode-define-syntax ,css ,(cons 'list args)) ,doc)))
diff --git a/lisp/emacs-lisp/easymenu.el b/lisp/emacs-lisp/easymenu.el
index 360e685ea0..43ce1872f9 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 1996, 1998-2022 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 a38c8bd5ca..fe97804ec4 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-2021 Free Software Foundation,
+;; Copyright (C) 1988-1995, 1997, 1999-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Daniel LaLiberte <liberte@holonexus.org>
@@ -469,7 +469,7 @@ just FUNCTION is printed."
     (funcall orig-fun nil)))
 
 (defun edebug-eval-defun (edebug-it)
-  (declare (obsolete "use eval-defun or edebug--eval-defun instead" "28.1"))
+  (declare (obsolete "use `eval-defun' or `edebug--eval-defun' instead" 
"28.1"))
   (interactive "P")
   (if (advice-member-p #'edebug--eval-defun 'eval-defun)
       (eval-defun edebug-it)
diff --git a/lisp/emacs-lisp/eieio-base.el b/lisp/emacs-lisp/eieio-base.el
index 5414c32c34..4c702deaa9 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-2021  Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 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 b17ecd34d4..33aabf4a48 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1996, 1998-2022 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Version: 1.4
@@ -450,7 +450,7 @@ See `defclass' for more information."
        ))
 
     ;; Now that everything has been loaded up, all our lists are backwards!
-    ;; Fix that up now and then them into vectors.
+    ;; Fix that up now and turn them into vectors.
     (cl-callf (lambda (slots) (apply #'vector (nreverse slots)))
         (eieio--class-slots newc))
     (cl-callf nreverse (eieio--class-initarg-tuples newc))
@@ -704,11 +704,15 @@ an error."
       nil
     ;; Trim off object IDX junk added in for the object index.
     (setq slot-idx (- slot-idx (eval-when-compile eieio--object-num-slots)))
-    (let ((st (cl--slot-descriptor-type (aref (eieio--class-slots class)
-                                              slot-idx))))
-      (if (not (eieio--perform-slot-validation st value))
-         (signal 'invalid-slot-type
-                  (list (eieio--class-name class) slot st value))))))
+    (let* ((sd (aref (eieio--class-slots class)
+                     slot-idx))
+           (st (cl--slot-descriptor-type sd)))
+      (cond
+       ((not (eieio--perform-slot-validation st value))
+       (signal 'invalid-slot-type
+                (list (eieio--class-name class) slot st value)))
+       ((alist-get :read-only (cl--slot-descriptor-props sd))
+        (signal 'eieio-read-only (list (eieio--class-name class) slot)))))))
 
 (defun eieio--validate-class-slot-value (class slot-idx value slot)
   "Make sure that for CLASS referencing SLOT-IDX, VALUE is valid.
@@ -816,7 +820,7 @@ Fills in CLASS's SLOT with its default value."
 (defun eieio-oset (obj slot value)
   "Do the work for the macro `oset'.
 Fills in OBJ's SLOT with VALUE."
-  (cl-check-type obj eieio-object)
+  (cl-check-type obj (or eieio-object cl-structure-object))
   (cl-check-type slot symbol)
   (let* ((class (eieio--object-class obj))
          (c (eieio--slot-name-index class slot)))
@@ -1068,6 +1072,7 @@ method invocation orders of the involved classes."
 ;;
 (define-error 'invalid-slot-name "Invalid slot name")
 (define-error 'invalid-slot-type "Invalid slot type")
+(define-error 'eieio-read-only "Read-only slot")
 (define-error 'unbound-slot "Unbound slot")
 (define-error 'inconsistent-class-hierarchy "Inconsistent class hierarchy")
 
diff --git a/lisp/emacs-lisp/eieio-custom.el b/lisp/emacs-lisp/eieio-custom.el
index 4813ce8c33..ebb6f2cd8c 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-2021 Free Software Foundation,
+;; Copyright (C) 1999-2001, 2005, 2007-2022 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 9e89ce8917..d10804b36a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 9c842f4682..72108f807f 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-2021 Free Software
+;; Copyright (C) 1996, 1998-2003, 2005, 2008-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
@@ -130,6 +130,7 @@ are not abstract."
 ;;;###autoload
 (defun eieio-help-constructor (ctr)
   "Describe CTR if it is a class constructor."
+  (declare (obsolete "use `describe-function' or `cl--describe-class'." 
"29.1"))
   (when (class-p ctr)
     (erase-buffer)
     (let ((location (find-lisp-object-file-name ctr 'define-type))
diff --git a/lisp/emacs-lisp/eieio-speedbar.el 
b/lisp/emacs-lisp/eieio-speedbar.el
index 86b22cad73..cc201b5d9c 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-2021 Free Software Foundation,
+;; Copyright (C) 1999-2002, 2005, 2007-2022 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 0d0dff6d68..e6a5685b5e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1996, 1998-2022 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Version: 1.4
@@ -994,11 +994,6 @@ of `eq'."
   (error "EIEIO: `change-class' is unimplemented"))
 (define-obsolete-function-alias 'change-class #'eieio-change-class "26.1")
 
-;; Hook ourselves into help system for describing classes and methods.
-;; FIXME: This is not actually needed any more since we can click on the
-;; hyperlink from the constructor's docstring to see the type definition.
-(add-hook 'help-fns-describe-function-functions #'eieio-help-constructor)
-
 (provide 'eieio)
 
 ;;; eieio.el ends here
diff --git a/lisp/emacs-lisp/eldoc.el b/lisp/emacs-lisp/eldoc.el
index cd0e7dca7c..74a20b8a8b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2022 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 32b2cbdb45..ab141489c4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2022 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 fde7947a27..e5c94c09c2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2022 Free Software Foundation, Inc.
 
 ;; Author: Barry A. Warsaw
 ;; Maintainer: emacs-devel@gnu.org
@@ -298,10 +298,18 @@ For example, to instrument all ELP functions, do the 
following:
     'intern
     (all-completions prefix obarray 'elp-profilable-p))))
 
+(defun elp-restore-package (prefix)
+  "Remove instrumentation from functions with names starting with PREFIX."
+  (interactive "SPrefix: ")
+  (elp-restore-list
+   (mapcar #'intern
+           (all-completions (symbol-name prefix)
+                            obarray 'elp-profilable-p))))
+
 (defun elp-restore-list (&optional list)
   "Restore the original definitions for all functions in `elp-function-list'.
 Use optional LIST if provided instead."
-  (interactive "PList of functions to restore: ") ;FIXME: Doesn't work!?
+  (interactive)
   (mapcar #'elp-restore-function (or list elp-function-list)))
 
 (defun elp-restore-all ()
@@ -323,7 +331,7 @@ Use optional LIST if provided instead."
 (defun elp-reset-list (&optional list)
   "Reset the profiling information for all functions in `elp-function-list'.
 Use optional LIST if provided instead."
-  (interactive "PList of functions to reset: ") ;FIXME: Doesn't work!?
+  (interactive)
   (let ((list (or list elp-function-list)))
     (mapcar 'elp-reset-function list)))
 
diff --git a/lisp/emacs-lisp/ert-x.el b/lisp/emacs-lisp/ert-x.el
index 7fc316d146..2818d4b6cc 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008, 2010-2022 Free Software Foundation, Inc.
 
 ;; Author: Lennart Borgman (lennart O borgman A gmail O com)
 ;;         Christian Ohler <ohler@gnu.org>
diff --git a/lisp/emacs-lisp/ert.el b/lisp/emacs-lisp/ert.el
index 946193e40d..e31ebf5f7b 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-2008, 2010-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2008, 2010-2022 Free Software Foundation, Inc.
 
 ;; Author: Christian Ohler <ohler@gnu.org>
 ;; Keywords: lisp, tools
@@ -39,7 +39,7 @@
 ;; but signals a different error when its condition is violated that
 ;; is caught and processed by ERT.  In addition, it analyzes its
 ;; argument form and records information that helps debugging
-;; (`assert' tries to do something similar when its second argument
+;; (`cl-assert' tries to do something similar when its second argument
 ;; SHOW-ARGS is true, but `should' is more sophisticated).  For
 ;; information on `should-not' and `should-error', see their
 ;; docstrings.  `skip-unless' skips the test immediately without
@@ -65,6 +65,8 @@
 (require 'pp)
 (require 'map)
 
+(autoload 'xml-escape-string "xml.el")
+
 ;;; UI customization options.
 
 (defgroup ert ()
@@ -247,7 +249,6 @@ in batch mode, an error is signalled.
           "%s\\(\\s-\\|$\\)")
   "The regexp the `find-function' mechanisms use for finding test 
definitions.")
 
-
 (define-error 'ert-test-failed "Test failed")
 (define-error 'ert-test-skipped "Test skipped")
 
@@ -677,7 +678,6 @@ and is displayed in front of the value of MESSAGE-FORM."
      ,@body))
 
 
-
 ;;; Facilities for running a single test.
 
 (defvar ert-debug-on-error nil
@@ -950,7 +950,8 @@ t    -- Selects UNIVERSE.
 :expected, :unexpected -- Select tests according to their most recent result.
 a string -- A regular expression selecting all tests with matching names.
 a test   -- (i.e., an object of the ert-test data-type) Selects that test.
-a symbol -- Selects the test that the symbol names, errors if none.
+a symbol -- Selects the test that the symbol names, signals an
+    `ert-test-unbound' error if none.
 \(member TESTS...) -- Selects the elements of TESTS, a list of tests
     or symbols naming tests.
 \(eql TEST) -- Selects TEST, a test or a symbol naming a test.
@@ -1012,52 +1013,47 @@ contained in UNIVERSE."
                           universe))))
     ((pred ert-test-p) (list selector))
     ((pred symbolp)
-     (cl-assert (ert-test-boundp selector))
+     (unless (ert-test-boundp selector)
+       (signal 'ert-test-unbound (list selector)))
      (list (ert-get-test selector)))
-    (`(,operator . ,operands)
-     (cl-ecase operator
-       (member
-        (mapcar (lambda (purported-test)
-                  (pcase-exhaustive purported-test
-                    ((pred symbolp)
-                     (cl-assert (ert-test-boundp purported-test))
-                     (ert-get-test purported-test))
-                    ((pred ert-test-p) purported-test)))
-                operands))
-       (eql
-        (cl-assert (eql (length operands) 1))
-        (ert-select-tests `(member ,@operands) universe))
-       (and
-        ;; Do these definitions of AND, NOT and OR satisfy de
-        ;; Morgan's laws?  Should they?
-        (cl-case (length operands)
-          (0 (ert-select-tests 't universe))
-          (t (ert-select-tests `(and ,@(cdr operands))
-                               (ert-select-tests (car operands)
-                                                 universe)))))
-       (not
-        (cl-assert (eql (length operands) 1))
-        (let ((all-tests (ert-select-tests 't universe)))
-          (cl-set-difference all-tests
-                             (ert-select-tests (car operands)
-                                               all-tests))))
-       (or
-        (cl-case (length operands)
-          (0 (ert-select-tests 'nil universe))
-          (t (cl-union (ert-select-tests (car operands) universe)
-                       (ert-select-tests `(or ,@(cdr operands))
-                                         universe)))))
-       (tag
-        (cl-assert (eql (length operands) 1))
-        (let ((tag (car operands)))
-          (ert-select-tests `(satisfies
-                              ,(lambda (test)
-                                 (member tag (ert-test-tags test))))
-                            universe)))
-       (satisfies
-        (cl-assert (eql (length operands) 1))
-        (cl-remove-if-not (car operands)
-                          (ert-select-tests 't universe)))))))
+    (`(member . ,operands)
+     (mapcar (lambda (purported-test)
+               (pcase-exhaustive purported-test
+                 ((pred symbolp)
+                  (unless (ert-test-boundp purported-test)
+                    (signal 'ert-test-unbound
+                            (list purported-test)))
+                  (ert-get-test purported-test))
+                 ((pred ert-test-p) purported-test)))
+             operands))
+    (`(eql ,operand)
+     (ert-select-tests `(member ,operand) universe))
+    ;; Do these definitions of AND, NOT and OR satisfy de Morgan's
+    ;; laws?  Should they?
+    (`(and)
+     (ert-select-tests 't universe))
+    (`(and ,first . ,rest)
+     (ert-select-tests `(and ,@rest)
+                       (ert-select-tests first universe)))
+    (`(not ,operand)
+     (let ((all-tests (ert-select-tests 't universe)))
+       (cl-set-difference all-tests
+                          (ert-select-tests operand all-tests))))
+    (`(or)
+     (ert-select-tests 'nil universe))
+    (`(or ,first . ,rest)
+     (cl-union (ert-select-tests first universe)
+               (ert-select-tests `(or ,@rest) universe)))
+    (`(tag ,tag)
+     (ert-select-tests `(satisfies
+                         ,(lambda (test)
+                            (member tag (ert-test-tags test))))
+                       universe))
+    (`(satisfies ,predicate)
+     (cl-remove-if-not predicate
+                       (ert-select-tests 't universe)))))
+
+(define-error 'ert-test-unbound "ERT test is unbound")
 
 (defun ert--insert-human-readable-selector (selector)
   "Insert a human-readable presentation of SELECTOR into the current buffer."
@@ -1437,7 +1433,9 @@ Returns the stats object."
                                   (if (getenv "EMACS_TEST_VERBOSE")
                                       (ert-reason-for-test-result result)
                                     ""))))
-              (message "%s" "")))))
+              (message "%s" ""))
+            (when (getenv "EMACS_TEST_JUNIT_REPORT")
+              (ert-write-junit-test-report stats)))))
        (test-started)
        (test-ended
         (cl-destructuring-bind (stats test result) event-args
@@ -1525,6 +1523,183 @@ the tests)."
           (backtrace))
       (kill-emacs 2))))
 
+(defvar ert-load-file-name nil
+  "The name of the loaded ERT test file, a string.
+Usually, it is not needed to be defined, but if different ERT
+test packages depend on each other, it might be helpful.")
+
+(defun ert-write-junit-test-report (stats)
+  "Write a JUnit test report, generated from STATS."
+  ;; 
https://www.ibm.com/docs/en/developer-for-zos/14.1.0?topic=formats-junit-xml-format
+  ;; https://llg.cubic.org/docs/junit/
+  (when-let ((symbol (car (apropos-internal "" #'ert-test-boundp)))
+             (test-file (symbol-file symbol 'ert--test))
+             (test-report
+              (file-name-with-extension
+               (or ert-load-file-name test-file) "xml")))
+    (with-temp-file test-report
+      (insert "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n")
+      (insert (format "<testsuites name=\"%s\" tests=\"%s\" errors=\"%s\" 
failures=\"%s\" skipped=\"%s\" time=\"%s\">\n"
+                      (file-name-nondirectory test-report)
+                      (ert-stats-total stats)
+                      (if (ert--stats-aborted-p stats) 1 0)
+                      (ert-stats-completed-unexpected stats)
+                      (ert-stats-skipped stats)
+                      (float-time
+                       (time-subtract
+                        (ert--stats-end-time stats)
+                        (ert--stats-start-time stats)))))
+      (insert (format "  <testsuite id=\"0\" name=\"%s\" tests=\"%s\" 
errors=\"%s\" failures=\"%s\" skipped=\"%s\" time=\"%s\" timestamp=\"%s\">\n"
+                      (file-name-nondirectory test-report)
+                      (ert-stats-total stats)
+                      (if (ert--stats-aborted-p stats) 1 0)
+                      (ert-stats-completed-unexpected stats)
+                      (ert-stats-skipped stats)
+                      (float-time
+                       (time-subtract
+                        (ert--stats-end-time stats)
+                        (ert--stats-start-time stats)))
+                      (ert--format-time-iso8601 (ert--stats-end-time stats))))
+      ;; If the test has aborted, `ert--stats-selector' might return
+      ;; huge junk.  Skip this.
+      (when (< (length (format "%s" (ert--stats-selector stats))) 1024)
+        (insert "    <properties>\n"
+                (format "      <property name=\"selector\" value=\"%s\"/>\n"
+                        (xml-escape-string
+                         (format "%s" (ert--stats-selector stats)) 'noerror))
+                "    </properties>\n"))
+      (cl-loop for test across (ert--stats-tests stats)
+               for result = (ert-test-most-recent-result test) do
+               (insert (format "    <testcase name=\"%s\" status=\"%s\" 
time=\"%s\""
+                               (xml-escape-string
+                                (symbol-name (ert-test-name test)) 'noerror)
+                               (ert-string-for-test-result
+                                result
+                                (ert-test-result-expected-p test result))
+                               (ert-test-result-duration result)))
+               (if (and (ert-test-result-expected-p test result)
+                        (not (ert-test-aborted-with-non-local-exit-p result))
+                        (not (ert-test-skipped-p result))
+                        (zerop (length (ert-test-result-messages result))))
+                   (insert "/>\n")
+                 (insert ">\n")
+                 (cond
+                  ((ert-test-skipped-p result)
+                   (insert (format "      <skipped message=\"%s\" 
type=\"%s\">\n"
+                                   (xml-escape-string
+                                    (string-trim
+                                     (ert-reason-for-test-result result))
+                                    'noerror)
+                                   (ert-string-for-test-result
+                                    result
+                                    (ert-test-result-expected-p
+                                     test result)))
+                           (xml-escape-string
+                            (string-trim
+                             (ert-reason-for-test-result result))
+                            'noerror)
+                           "\n"
+                           "      </skipped>\n"))
+                  ((ert-test-aborted-with-non-local-exit-p result)
+                   (insert (format "      <error message=\"%s\" type=\"%s\">\n"
+                                   (file-name-nondirectory test-report)
+                                   (ert-string-for-test-result
+                                    result
+                                    (ert-test-result-expected-p
+                                     test result)))
+                           (format "Test %s aborted with non-local exit\n"
+                                   (xml-escape-string
+                                    (symbol-name (ert-test-name test)) 
'noerror))
+                           "      </error>\n"))
+                  ((not (ert-test-result-type-p
+                         result (ert-test-expected-result-type test)))
+                   (insert (format "      <failure message=\"%s\" 
type=\"%s\">\n"
+                                   (xml-escape-string
+                                    (string-trim
+                                     (ert-reason-for-test-result result))
+                                    'noerror)
+                                   (ert-string-for-test-result
+                                    result
+                                    (ert-test-result-expected-p
+                                     test result)))
+                           (xml-escape-string
+                            (string-trim
+                             (ert-reason-for-test-result result))
+                            'noerror)
+                           "\n"
+                           "      </failure>\n")))
+                 (unless (zerop (length (ert-test-result-messages result)))
+                   (insert "      <system-out>\n"
+                           (xml-escape-string
+                            (ert-test-result-messages result) 'noerror)
+                           "      </system-out>\n"))
+                 (insert "    </testcase>\n")))
+      (insert "  </testsuite>\n")
+      (insert "</testsuites>\n"))))
+
+(defun ert-write-junit-test-summary-report (&rest logfiles)
+  "Write a JUnit summary test report, generated from LOGFILES."
+  (let ((report (file-name-with-extension
+                 (getenv "EMACS_TEST_JUNIT_REPORT") "xml"))
+        (tests 0) (errors 0) (failures 0) (skipped 0) (time 0) (id 0))
+    (with-temp-file report
+      (dolist (logfile logfiles)
+        (let ((test-report (file-name-with-extension logfile "xml")))
+          (if (not (file-readable-p test-report))
+              (let* ((logfile (file-name-with-extension logfile "log"))
+                     (logfile-contents
+                      (when (file-readable-p logfile)
+                        (with-temp-buffer
+                          (insert-file-contents-literally logfile)
+                          (buffer-string)))))
+                (unless
+                    ;; No defined tests, perhaps a helper file.
+                    (and logfile-contents
+                         (string-match-p "^Running 0 tests" logfile-contents))
+                  (insert (format "  <testsuite id=\"%s\" name=\"%s\" 
tests=\"1\" errors=\"1\" failures=\"0\" skipped=\"0\" time=\"0\" 
timestamp=\"%s\">\n"
+                                  id test-report
+                                  (ert--format-time-iso8601 (current-time))))
+                  (insert (format "    <testcase name=\"Test report missing 
%s\" status=\"error\" time=\"0\">\n"
+                                  (file-name-nondirectory test-report)))
+                  (insert (format "      <error message=\"Test report missing 
%s\" type=\"error\">\n"
+                                  (file-name-nondirectory test-report)))
+                  (when logfile-contents
+                    (insert (xml-escape-string logfile-contents 'noerror)))
+                  (insert "      </error>\n"
+                          "    </testcase>\n"
+                          "  </testsuite>\n")
+                  (cl-incf errors 1)
+                  (cl-incf id 1)))
+
+            (insert-file-contents-literally test-report)
+            (when (looking-at-p
+                   (regexp-quote "<?xml version=\"1.0\" encoding=\"utf-8\"?>"))
+              (delete-region (point) (line-beginning-position 2)))
+            (when (looking-at
+                   "<testsuites name=\".+\" tests=\"\\(.+\\)\" 
errors=\"\\(.+\\)\" failures=\"\\(.+\\)\" skipped=\"\\(.+\\)\" 
time=\"\\(.+\\)\">")
+              (cl-incf tests (string-to-number (match-string 1)))
+              (cl-incf errors  (string-to-number (match-string 2)))
+              (cl-incf failures  (string-to-number (match-string 3)))
+              (cl-incf skipped (string-to-number (match-string 4)))
+              (cl-incf time (string-to-number (match-string 5)))
+              (delete-region (point) (line-beginning-position 2)))
+            (when (looking-at "  <testsuite id=\"\\(0\\)\"")
+              (replace-match (number-to-string id) nil nil nil 1)
+              (cl-incf id 1))
+            (goto-char (point-max))
+            (beginning-of-line 0)
+            (when (looking-at-p "</testsuites>")
+              (delete-region (point) (line-beginning-position 2))))
+
+          (narrow-to-region (point-max) (point-max))))
+
+      (insert "</testsuites>\n")
+      (widen)
+      (goto-char (point-min))
+      (insert "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n")
+      (insert (format "<testsuites name=\"%s\" tests=\"%s\" errors=\"%s\" 
failures=\"%s\" skipped=\"%s\" time=\"%s\">\n"
+                      (file-name-nondirectory report)
+                      tests errors failures skipped time)))))
 
 (defun ert-summarize-tests-batch-and-exit (&optional high)
   "Summarize the results of testing.
@@ -1540,6 +1715,8 @@ If HIGH is a natural number, the HIGH long lasting tests 
are summarized."
   ;; behavior.
   (setq attempt-stack-overflow-recovery nil
         attempt-orderly-shutdown-on-fatal-signal nil)
+  (when (getenv "EMACS_TEST_JUNIT_REPORT")
+    (apply #'ert-write-junit-test-summary-report command-line-args-left))
   (let ((nlogs (length command-line-args-left))
         (ntests 0) (nrun 0) (nexpected 0) (nunexpected 0) (nskipped 0)
         nnotrun logfile notests badtests unexpected skipped tests)
@@ -1855,7 +2032,6 @@ Also sets `ert--results-progress-bar-button-begin'."
      ;; should test it again.)
      "\n")))
 
-
 (defvar ert-test-run-redisplay-interval-secs .1
   "How many seconds ERT should wait between redisplays while running tests.
 
@@ -2037,7 +2213,6 @@ STATS is the stats object; LISTENER is the results 
listener."
           (goto-char (1- (point-max)))
           buffer)))))
 
-
 (defvar ert--selector-history nil
   "List of recent test selectors read from terminal.")
 
diff --git a/lisp/emacs-lisp/ewoc.el b/lisp/emacs-lisp/ewoc.el
index 8636dc92a1..e1acd7e1ba 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1991-2022 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 629029aabc..77689f434c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 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 303039d653..c4f48b8a79 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1999, 2001-2022 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 0e86b923c4..d21e96ca78 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1987, 2001-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: internal
diff --git a/lisp/emacs-lisp/generator.el b/lisp/emacs-lisp/generator.el
index 2075ac472d..8fbc3b0364 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-2021  Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
 
 ;; Author: Daniel Colascione <dancol@dancol.org>
 ;; Keywords: extensions, elisp
@@ -143,8 +143,7 @@ the CPS state machinery."
          (setf ,static-var ,dynamic-var)))))
 
 (defmacro cps--with-dynamic-binding (dynamic-var static-var &rest body)
-  "Evaluate BODY such that generated atomic evaluations run with
-DYNAMIC-VAR bound to STATIC-VAR."
+  "Run BODY's atomic evaluations run with DYNAMIC-VAR bound to STATIC-VAR."
   (declare (indent 2))
   `(cps--with-value-wrapper
        (cps--make-dynamic-binding-wrapper ,dynamic-var ,static-var)
@@ -291,22 +290,28 @@ DYNAMIC-VAR bound to STATIC-VAR."
                         (cps--transform-1 `(progn ,@rest)
                                           next-state)))
 
-    ;; Process `let' in a helper function that transforms it into a
-    ;; let* with temporaries.
+    (`(,(or 'let 'let*) () . ,body)
+      (cps--transform-1 `(progn ,@body) next-state))
+
+    ;; Transform multi-variable `let' into `let*':
+    ;;    (let ((v1 e1) ... (vN eN)) BODY)
+    ;; -> (let* ((t1 e1) ... (tN-1 eN-1) (vN eN) (v1 t1) (vN-1 tN-1)) BODY)
 
     (`(let ,bindings . ,body)
       (let* ((bindings (cl-loop for binding in bindings
                           collect (if (symbolp binding)
                                       (list binding nil)
                                     binding)))
-             (temps (cl-loop for (var _value-form) in bindings
+             (butlast-bindings (butlast bindings))
+             (temps (cl-loop for (var _value-form) in butlast-bindings
                        collect (cps--add-binding var))))
         (cps--transform-1
          `(let* ,(append
-                  (cl-loop for (_var value-form) in bindings
+                  (cl-loop for (_var value-form) in butlast-bindings
                      for temp in temps
                      collect (list temp value-form))
-                  (cl-loop for (var _binding) in bindings
+                  (last bindings)
+                  (cl-loop for (var _binding) in butlast-bindings
                      for temp in temps
                      collect (list var temp)))
             ,@body)
@@ -315,9 +320,6 @@ DYNAMIC-VAR bound to STATIC-VAR."
     ;; Process `let*' binding: process one binding at a time.  Flatten
     ;; lexical bindings.
 
-    (`(let* () . ,body)
-      (cps--transform-1 `(progn ,@body) next-state))
-
     (`(let* (,binding . ,more-bindings) . ,body)
       (let* ((var (if (symbolp binding) binding (car binding)))
              (value-form (car (cdr-safe binding)))
@@ -642,12 +644,11 @@ modified copy."
                          (iter-close iterator)))))
          iterator))))
 
-(defun iter-yield (value)
+(defun iter-yield (_value)
   "When used inside a generator, yield control to caller.
 The caller of `iter-next' receives VALUE, and the next call to
 `iter-next' resumes execution with the form immediately following this
 `iter-yield' call."
-  (identity value)
   (error "`iter-yield' used outside a generator"))
 
 (defmacro iter-yield-from (value)
@@ -689,8 +690,10 @@ of values.  Callers can retrieve each value using 
`iter-next'."
   (declare (indent defun)
            (debug (&define lambda-list lambda-doc &rest sexp)))
   (cl-assert lexical-binding)
-  `(lambda ,arglist
-     ,(cps-generate-evaluator body)))
+  (pcase-let* ((`(,declarations . ,exps) (macroexp-parse-body body)))
+    `(lambda ,arglist
+       ,@declarations
+       ,(cps-generate-evaluator exps))))
 
 (defmacro iter-make (&rest body)
   "Return a new iterator."
diff --git a/lisp/emacs-lisp/generic.el b/lisp/emacs-lisp/generic.el
index 294aba66c3..c6b33b09ba 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1999, 2001-2022 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 eb65e5f104..91538d1f06 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2022 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 a5f21a5592..930dbfe6c4 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, 2001-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 2001-2022 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 58234852a0..6c95d86b47 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
 
 ;; Author: Damien Cassou <damien@cassou.me>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/emacs-lisp/inline.el b/lisp/emacs-lisp/inline.el
index 36d71a8c04..963e117ff3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2022 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 2d634b7b03..6a085f0a8c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2022 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 96ac054a7d..b871a83246 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-2021 Free Software Foundation,
+;; Copyright (C) 1992, 1994, 1997, 2000-2022 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 416d64558d..7df40e36f8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1986, 1999-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: lisp, languages
diff --git a/lisp/emacs-lisp/lisp.el b/lisp/emacs-lisp/lisp.el
index 9b38d86e2c..4aeca9c6b0 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-2021 Free Software Foundation,
+;; Copyright (C) 1985-1986, 1994, 2000-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/emacs-lisp/macroexp.el b/lisp/emacs-lisp/macroexp.el
index 11204f7f7f..663856a8fb 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
 ;;
 ;; Author: Miles Bader <miles@gnu.org>
 ;; Keywords: lisp, compiler, macros
@@ -209,9 +209,12 @@ Other uses risk returning non-nil value that point to the 
wrong file."
 (defvar macroexp--warned (make-hash-table :test #'equal :weakness 'key))
 
 (defun macroexp--warn-wrap (arg msg form category)
-  (let ((when-compiled (lambda ()
-                         (when (byte-compile-warning-enabled-p category)
-                           (byte-compile-warn-x arg "%s" msg)))))
+  (let ((when-compiled
+        (lambda ()
+           (when (if (consp category)
+                     (apply #'byte-compile-warning-enabled-p category)
+                   (byte-compile-warning-enabled-p category))
+             (byte-compile-warn-x arg "%s" msg)))))
     `(progn
        (macroexp--funcall-if-compiled ',when-compiled)
        ,form)))
@@ -294,7 +297,7 @@ is executed without being compiled first."
             fun obsolete
             (if (symbolp (symbol-function fun))
                 "alias" "macro"))
-           new-form 'obsolete))
+           new-form (list 'obsolete fun)))
       new-form)))
 
 (defun macroexp--unfold-lambda (form &optional name)
@@ -361,6 +364,16 @@ is executed without being compiled first."
           `(let ,(nreverse bindings) . ,body)
         (macroexp-progn body)))))
 
+(defun macroexp--dynamic-variable-p (var)
+  "Whether the variable VAR is dynamically scoped.
+Only valid during macro-expansion."
+  (defvar byte-compile-bound-variables)
+  (or (not lexical-binding)
+      (special-variable-p var)
+      (memq var macroexp--dynvars)
+      (and (boundp 'byte-compile-bound-variables)
+           (memq var byte-compile-bound-variables))))
+
 (defun macroexp--expand-all (form)
   "Expand all macros in FORM.
 This is an internal version of `macroexpand-all'.
@@ -388,29 +401,33 @@ Assumes the caller has bound 
`macroexpand-all-environment'."
                                         (cddr form))
                         (cdr form))
         form))
-      (`(,(or 'defvar 'defconst) . ,_) (macroexp--all-forms form 2))
+      (`(,(or 'defvar 'defconst) ,(and name (pred symbolp)) . ,_)
+       (push name macroexp--dynvars)
+       (macroexp--all-forms form 2))
       (`(function ,(and f `(lambda . ,_)))
-       (macroexp--cons 'function
-                       (macroexp--cons (macroexp--all-forms f 2)
-                                       nil
-                                       (cdr form))
-                       form))
+       (let ((macroexp--dynvars macroexp--dynvars))
+         (macroexp--cons 'function
+                         (macroexp--cons (macroexp--all-forms f 2)
+                                         nil
+                                         (cdr form))
+                         form)))
       (`(,(or 'function 'quote) . ,_) form)
       (`(,(and fun (or 'let 'let*)) . ,(or `(,bindings . ,body)
                                            pcase--dontcare))
-       (macroexp--cons
-        fun
-        (macroexp--cons
-         (macroexp--all-clauses bindings 1)
-         (if (null body)
-             (macroexp-unprogn
-              (macroexp-warn-and-return
-               fun
-               (format "Empty %s body" fun)
-               nil nil 'compile-only))
-           (macroexp--all-forms body))
-         (cdr form))
-        form))
+       (let ((macroexp--dynvars macroexp--dynvars))
+         (macroexp--cons
+          fun
+          (macroexp--cons
+           (macroexp--all-clauses bindings 1)
+           (if (null body)
+               (macroexp-unprogn
+                (macroexp-warn-and-return
+                 fun
+                 (format "Empty %s body" fun)
+                 nil nil 'compile-only))
+             (macroexp--all-forms body))
+           (cdr form))
+          form)))
       (`(,(and fun `(lambda . ,_)) . ,args)
        ;; Embedded lambda in function position.
        ;; If the byte-optimizer is loaded, try to unfold this,
@@ -495,6 +512,14 @@ Assumes the caller has bound 
`macroexpand-all-environment'."
 If no macros are expanded, FORM is returned unchanged.
 The second optional arg ENVIRONMENT specifies an environment of macro
 definitions to shadow the loaded ones for use in file byte-compilation."
+  (let ((macroexpand-all-environment environment)
+        (macroexp--dynvars macroexp--dynvars))
+    (macroexp--expand-all form)))
+
+;; This function is like `macroexpand-all' but for use with top-level
+;; forms.  It does not dynbind `macroexp--dynvars' because we want
+;; top-level `defvar' declarations to be recorded in that variable.
+(defun macroexpand--all-toplevel (form &optional environment)
   (let ((macroexpand-all-environment environment))
     (macroexp--expand-all form)))
 
@@ -781,7 +806,7 @@ test of free variables in the following ways:
         (let ((macroexp--pending-eager-loads
                (cons load-file-name macroexp--pending-eager-loads)))
           (if full-p
-              (macroexpand-all form)
+              (macroexpand--all-toplevel form)
             (macroexpand form)))
       (error
        ;; Hopefully this shouldn't happen thanks to the cycle detection,
diff --git a/lisp/emacs-lisp/map-ynp.el b/lisp/emacs-lisp/map-ynp.el
index 2f2f96ca0d..b3e7fca478 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1991-1995, 2000-2022 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 da4502f9ed..dea5b34991 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 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 450cdaa7a8..6cb4cb02e0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
 
 ;; Keywords: lisp, help
 
diff --git a/lisp/emacs-lisp/multisession.el b/lisp/emacs-lisp/multisession.el
new file mode 100644
index 0000000000..e6a2424c51
--- /dev/null
+++ b/lisp/emacs-lisp/multisession.el
@@ -0,0 +1,449 @@
+;;; multisession.el --- Multisession storage for variables  -*- 
lexical-binding: t; -*-
+
+;; Copyright (C) 2021-2022 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 'cl-lib)
+(require 'eieio)
+(require 'sqlite)
+(require 'tabulated-list)
+
+(defcustom multisession-storage 'files
+  "Storage method for multisession variables.
+Valid methods are `sqlite' and `files'."
+  :type '(choice (const :tag "SQLite" sqlite)
+                 (const :tag "Files" files))
+  :version "29.1"
+  :group 'files)
+
+(defcustom multisession-directory (expand-file-name "multisession/"
+                                                    user-emacs-directory)
+  "Directory to store multisession variables."
+  :type 'file
+  :version "29.1"
+  :group 'files)
+
+;;;###autoload
+(defmacro define-multisession-variable (name initial-value &optional doc
+                                             &rest args)
+  "Make NAME into a multisession variable initialized from INITIAL-VALUE.
+DOC should be a doc string, and ARGS are keywords as applicable to
+`make-multisession'."
+  (declare (indent defun))
+  (unless (plist-get args :package)
+    (setq args (nconc (list :package
+                            (replace-regexp-in-string "-.*" ""
+                                                      (symbol-name name)))
+                      args)))
+  `(defvar ,name
+     (make-multisession :key ,(symbol-name name)
+                        :initial-value ,initial-value
+                        ,@args)
+     ,@(list doc)))
+
+(defconst multisession--unbound (make-symbol "unbound"))
+
+(cl-defstruct (multisession
+               (:constructor nil)
+               (:constructor multisession--create)
+               (:conc-name multisession--))
+  "A persistent variable that will live across Emacs invocations."
+  key
+  (initial-value nil)
+  package
+  (storage multisession-storage)
+  (synchronized nil)
+  (cached-value multisession--unbound)
+  (cached-sequence 0))
+
+(cl-defun make-multisession (&key key initial-value package synchronized
+                                  storage)
+  "Create a multisession object."
+  (unless package
+    (error "No package for the multisession object"))
+  (unless key
+    (error "No key for the multisession object"))
+  (unless (stringp package)
+    (error "The package has to be a string"))
+  (unless (stringp key)
+    (error "The key has to be a string"))
+  (multisession--create
+   :key key
+   :synchronized synchronized
+   :initial-value initial-value
+   :package package
+   :storage (or storage multisession-storage)))
+
+(defun multisession-value (object)
+  "Return the value of the multisession OBJECT."
+  (if (null user-init-file)
+      ;; If we don't have storage, then just return the value from the
+      ;; object.
+      (if (eq (multisession--cached-value object) multisession--unbound)
+          (multisession--initial-value object)
+        (multisession--cached-value object))
+    ;; We have storage, so we update from storage.
+    (multisession-backend-value (multisession--storage object) object)))
+
+(defun multisession--set-value (object value)
+  "Set the stored value of OBJECT to VALUE."
+  (if (null user-init-file)
+      ;; We have no backend, so just store the value.
+      (setf (multisession--cached-value object) value)
+    ;; We have a backend.
+    (multisession--backend-set-value (multisession--storage object)
+                                     object value)))
+
+(defun multisession-delete (object)
+  "Delete OBJECT from the backend storage."
+  (multisession--backend-delete (multisession--storage object) object))
+
+(gv-define-simple-setter multisession-value multisession--set-value)
+
+;; SQLite Backend
+
+(declare-function sqlite-execute "sqlite.c")
+(declare-function sqlite-select "sqlite.c")
+(declare-function sqlite-open "sqlite.c")
+(declare-function sqlite-pragma "sqlite.c")
+(declare-function sqlite-transaction "sqlite.c")
+(declare-function sqlite-commit "sqlite.c")
+
+(defvar multisession--db nil)
+
+(defun multisession--ensure-db ()
+  (unless multisession--db
+    (let* ((file (expand-file-name "sqlite/multisession.sqlite"
+                                   multisession-directory))
+           (dir (file-name-directory file)))
+      (unless (file-exists-p dir)
+        (make-directory dir t))
+      (setq multisession--db (sqlite-open file)))
+    (with-sqlite-transaction multisession--db
+      ;; Use a write-ahead-log (available since 2010), which makes
+      ;; writes a lot faster.
+      (sqlite-pragma multisession--db "journal_mode = WAL")
+      (sqlite-pragma multisession--db "synchronous = NORMAL")
+      (unless (sqlite-select
+               multisession--db
+               "select name from sqlite_master where type = 'table' and name = 
'multisession'")
+        ;; Tidy up the database automatically.
+        (sqlite-pragma multisession--db "auto_vacuum = FULL")
+        ;; Create the table.
+        (sqlite-execute
+         multisession--db
+         "create table multisession (package text not null, key text not null, 
sequence number not null default 1, value text not null)")
+        (sqlite-execute
+         multisession--db
+         "create unique index multisession_idx on multisession (package, 
key)")))))
+
+(cl-defmethod multisession-backend-value ((_type (eql 'sqlite)) object)
+  (multisession--ensure-db)
+  (let ((id (list (multisession--package object)
+                  (multisession--key object))))
+    (cond
+     ;; We have no value yet; check the database.
+     ((eq (multisession--cached-value object) multisession--unbound)
+      (let ((stored
+             (car
+              (sqlite-select
+               multisession--db
+               "select value, sequence from multisession where package = ? and 
key = ?"
+               id))))
+        (if stored
+            (let ((value (car (read-from-string (car stored)))))
+              (setf (multisession--cached-value object) value
+                    (multisession--cached-sequence object) (cadr stored))
+              value)
+          ;; Nothing; return the initial value.
+          (multisession--initial-value object))))
+     ;; We have a value, but we want to update in case some other
+     ;; Emacs instance has updated.
+     ((multisession--synchronized object)
+      (let ((stored
+             (car
+              (sqlite-select
+               multisession--db
+               "select value, sequence from multisession where sequence > ? 
and package = ? and key = ?"
+               (cons (multisession--cached-sequence object) id)))))
+        (if stored
+            (let ((value (car (read-from-string (car stored)))))
+              (setf (multisession--cached-value object) value
+                    (multisession--cached-sequence object) (cadr stored))
+              value)
+          ;; Nothing, return the cached value.
+          (multisession--cached-value object))))
+     ;; Just return the cached value.
+     (t
+      (multisession--cached-value object)))))
+
+(cl-defmethod multisession--backend-set-value ((_type (eql 'sqlite))
+                                               object value)
+  (catch 'done
+    (let ((i 0))
+      (while (< i 10)
+        (condition-case nil
+            (throw 'done (multisession--set-value-sqlite object value))
+          (sqlite-locked-error
+           (setq i (1+ i))
+           (sleep-for (+ 0.1 (/ (float (random 10)) 10))))))
+      (signal 'sqlite-locked-error "Database is locked"))))
+
+(defun multisession--set-value-sqlite (object value)
+  (multisession--ensure-db)
+  (with-sqlite-transaction multisession--db
+    (let ((id (list (multisession--package object)
+                    (multisession--key object)))
+          (pvalue
+           (let ((print-length nil)
+                 (print-circle t)
+                 (print-level nil))
+             (prin1-to-string value))))
+      (condition-case nil
+          (ignore (read-from-string pvalue))
+        (error (error "Unable to store unreadable value: %s" pvalue)))
+      (sqlite-execute
+       multisession--db
+       "insert into multisession(package, key, sequence, value) values(?, ?, 
1, ?) on conflict(package, key) do update set sequence = sequence + 1, value = 
?"
+       (append id (list pvalue pvalue)))
+      (setf (multisession--cached-sequence object)
+            (caar (sqlite-select
+                   multisession--db
+                   "select sequence from multisession where package = ? and 
key = ?"
+                   id)))
+      (setf (multisession--cached-value object) value))))
+
+(cl-defmethod multisession--backend-values ((_type (eql 'sqlite)))
+  (multisession--ensure-db)
+  (sqlite-select
+   multisession--db
+   "select package, key, value from multisession order by package, key"))
+
+(cl-defmethod multisession--backend-delete ((_type (eql 'sqlite)) object)
+  (sqlite-execute multisession--db
+                  "delete from multisession where package = ? and key = ?"
+                  (list (multisession--package object)
+                        (multisession--key object))))
+
+;; Files Backend
+
+(defun multisession--encode-file-name (name)
+  (url-hexify-string name))
+
+(defun multisession--read-file-value (file object)
+  (catch 'done
+    (let ((i 0)
+          last-error)
+      (while (< i 10)
+        (condition-case err
+            (throw 'done
+                   (with-temp-buffer
+                     (let* ((time (file-attribute-modification-time
+                                   (file-attributes file)))
+                            (coding-system-for-read 'utf-8-emacs-unix))
+                       (insert-file-contents file)
+                       (let ((stored (read (current-buffer))))
+                         (setf (multisession--cached-value object) stored
+                               (multisession--cached-sequence object) time)
+                         stored))))
+          ;; Windows uses OS-level file locking that may preclude
+          ;; reading the file in some circumstances.  In addition,
+          ;; rename-file is not an atomic operation on MS-Windows,
+          ;; when the target file already exists, so there could be a
+          ;; small race window when the file to read doesn't yet
+          ;; exist.  So when these problems happen, wait a bit and retry.
+          ((permission-denied file-missing)
+           (setq i (1+ i)
+                 last-error err)
+           (sleep-for (+ 0.1 (/ (float (random 10)) 10))))))
+      (signal (car last-error) (cdr last-error)))))
+
+(defun multisession--object-file-name (object)
+  (expand-file-name
+   (concat "files/"
+           (multisession--encode-file-name (multisession--package object))
+           "/"
+           (multisession--encode-file-name (multisession--key object))
+           ".value")
+   multisession-directory))
+
+(cl-defmethod multisession-backend-value ((_type (eql 'files)) object)
+  (let ((file (multisession--object-file-name object)))
+    (cond
+     ;; We have no value yet; see whether it's stored.
+     ((eq (multisession--cached-value object) multisession--unbound)
+      (if (file-exists-p file)
+          (multisession--read-file-value file object)
+        ;; Nope; return the initial value.
+        (multisession--initial-value object)))
+     ;; We have a value, but we want to update in case some other
+     ;; Emacs instance has updated.
+     ((multisession--synchronized object)
+      (if (and (file-exists-p file)
+               (time-less-p (multisession--cached-sequence object)
+                            (file-attribute-modification-time
+                             (file-attributes file))))
+          (multisession--read-file-value file object)
+        ;; Nothing, return the cached value.
+        (multisession--cached-value object)))
+     ;; Just return the cached value.
+     (t
+      (multisession--cached-value object)))))
+
+(cl-defmethod multisession--backend-set-value ((_type (eql 'files))
+                                               object value)
+  (let ((file (multisession--object-file-name object))
+        (time (current-time)))
+    ;; Ensure that the directory exists.
+    (let ((dir (file-name-directory file)))
+      (unless (file-exists-p dir)
+        (make-directory dir t)))
+    (with-temp-buffer
+      (let ((print-length nil)
+            (print-circle t)
+            (print-level nil))
+        (prin1 value (current-buffer)))
+      (goto-char (point-min))
+      (condition-case nil
+          (read (current-buffer))
+        (error (error "Unable to store unreadable value: %s" (buffer-string))))
+      ;; Write to a temp file in the same directory and rename to the
+      ;; file for somewhat better atomicity.
+      (let ((coding-system-for-write 'utf-8-emacs-unix)
+            (create-lockfiles nil)
+            (temp (make-temp-name file))
+            (write-region-inhibit-fsync nil))
+        (write-region (point-min) (point-max) temp nil 'silent)
+        (set-file-times temp time)
+        (rename-file temp file t)))
+    (setf (multisession--cached-sequence object) time
+          (multisession--cached-value object) value)))
+
+(cl-defmethod multisession--backend-values ((_type (eql 'files)))
+  (mapcar (lambda (file)
+            (let ((bits (file-name-split file)))
+              (list (url-unhex-string (car (last bits 2)))
+                    (url-unhex-string
+                     (file-name-sans-extension (car (last bits))))
+                    (with-temp-buffer
+                      (let ((coding-system-for-read 'utf-8-emacs-unix))
+                        (insert-file-contents file)
+                        (read (current-buffer)))))))
+          (directory-files-recursively
+           (expand-file-name "files" multisession-directory)
+           "\\.value\\'")))
+
+(cl-defmethod multisession--backend-delete ((_type (eql 'files)) object)
+  (let ((file (multisession--object-file-name object)))
+    (when (file-exists-p file)
+      (delete-file file))))
+
+;; Mode for editing.
+
+(defvar-keymap multisession-edit-mode-map
+  :parent tabulated-list-mode-map
+  "d" #'multisession-delete-value
+  "e" #'multisession-edit-value)
+
+(define-derived-mode multisession-edit-mode special-mode "Multisession"
+  "This mode lists all elements in the \"multisession\" database."
+  :interactive nil
+  (buffer-disable-undo)
+  (setq-local buffer-read-only t
+              truncate-lines t)
+  (setq tabulated-list-format
+        [("Package" 10)
+         ("Key" 30)
+         ("Value" 30)])
+  (setq-local revert-buffer-function #'multisession-edit-mode--revert))
+
+;;;###autoload
+(defun list-multisession-values (&optional choose-storage)
+  "List all values in the \"multisession\" database.
+If CHOOSE-STORAGE (interactively, the prefix), query for the
+storage method to list."
+  (interactive "P")
+  (let ((storage
+         (if choose-storage
+             (intern (completing-read "Storage method: " '(sqlite files) nil 
t))
+           multisession-storage)))
+    (pop-to-buffer (get-buffer-create (format "*Multisession %s*" storage)))
+    (multisession-edit-mode)
+    (setq-local multisession-storage storage)
+    (multisession-edit-mode--revert)
+    (goto-char (point-min))))
+
+(defun multisession-edit-mode--revert (&rest _)
+  (let ((inhibit-read-only t)
+        (id (get-text-property (point) 'tabulated-list-id)))
+    (erase-buffer)
+    (tabulated-list-init-header)
+    (setq tabulated-list-entries
+          (mapcar (lambda (elem)
+                    (list
+                     (cons (car elem) (cadr elem))
+                     (vector (car elem) (cadr elem)
+                             (string-replace "\n" "\\n"
+                                             (format "%s" (caddr elem))))))
+                  (multisession--backend-values multisession-storage)))
+    (tabulated-list-print t)
+    (goto-char (point-min))
+    (when id
+      (when-let ((match
+                  (text-property-search-forward 'tabulated-list-id id t)))
+        (goto-char (prop-match-beginning match))))))
+
+(defun multisession-delete-value (id)
+  "Delete the value at point."
+  (interactive (list (get-text-property (point) 'tabulated-list-id))
+               multisession-edit-mode)
+  (unless id
+    (error "No value on the current line"))
+  (unless (yes-or-no-p "Really delete this item? ")
+    (user-error "Not deleting"))
+  (multisession--backend-delete multisession-storage
+                                (make-multisession :package (car id)
+                                                   :key (cdr id)))
+  (let ((inhibit-read-only t))
+    (beginning-of-line)
+    (delete-region (point) (progn (forward-line 1) (point)))))
+
+(defun multisession-edit-value (id)
+  "Edit the value at point."
+  (interactive (list (get-text-property (point) 'tabulated-list-id))
+               multisession-edit-mode)
+  (unless id
+    (error "No value on the current line"))
+  (let* ((object (make-multisession
+                  :package (car id)
+                  :key (cdr id)
+                  :storage multisession-storage))
+         (value (multisession-value object)))
+    (setf (multisession-value object)
+          (car (read-from-string
+                (read-string "New value: " (prin1-to-string value))))))
+  (multisession-edit-mode--revert))
+
+(provide 'multisession)
+
+;;; multisession.el ends here
diff --git a/lisp/emacs-lisp/nadvice.el b/lisp/emacs-lisp/nadvice.el
index 8fc2986ab4..77e140dda1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords: extensions, lisp, tools
@@ -480,6 +480,8 @@ is defined as a macro, alias, command, ..."
                           (get symbol 'advice--pending))
                          (t (symbol-function symbol)))
                   function props)
+    ;; FIXME: We could use a defmethod on `function-docstring' instead,
+    ;; except when (or (not nf) (autoloadp nf))!
     (put symbol 'function-documentation `(advice--make-docstring ',symbol))
     (add-function :around (get symbol 'defalias-fset-function)
                   #'advice--defalias-fset))
diff --git a/lisp/emacs-lisp/package-x.el b/lisp/emacs-lisp/package-x.el
index 0175857b7f..78f2d36c6f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 08dfe504d2..aa3e48155c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
 
 ;; Author: Tom Tromey <tromey@redhat.com>
 ;;         Daniel Hackney <dan@haxney.org>
@@ -397,7 +397,13 @@ a sane initial value."
   :type '(repeat symbol))
 
 (defcustom package-native-compile nil
-  "Non-nil means to native compile packages on installation."
+  "Non-nil means to natively compile packages as part of their installation.
+This controls ahead-of-time compilation of packages when they are
+installed.  If this option is nil, packages will be natively
+compiled when they are loaded for the first time.
+
+This option does not have any effect if Emacs was not built with
+native compilation support."
   :type '(boolean)
   :risky t
   :version "28.1")
@@ -1181,13 +1187,17 @@ The return result is a `package-desc'."
             info)
         (while files
           (with-temp-buffer
-            (insert-file-contents (pop files))
-            ;; When we find the file with the data,
-            (when (setq info (ignore-errors (package-buffer-info)))
-              ;; stop looping,
-              (setq files nil)
-              ;; set the 'dir kind,
-              (setf (package-desc-kind info) 'dir))))
+            (let ((file (pop files)))
+              ;; The file may be a link to a nonexistent file; e.g., a
+              ;; lock file.
+              (when (file-exists-p file)
+                (insert-file-contents file)
+                ;; When we find the file with the data,
+                (when (setq info (ignore-errors (package-buffer-info)))
+                  ;; stop looping,
+                  (setq files nil)
+                  ;; set the 'dir kind,
+                  (setf (package-desc-kind info) 'dir))))))
         (unless info
           (error "No .el files with package headers in `%s'" 
default-directory))
         ;; and return the info.
@@ -2764,35 +2774,33 @@ either a full name or nil, and EMAIL is a valid email 
address."
 
 ;;;; Package menu mode.
 
-(defvar package-menu-mode-map
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map tabulated-list-mode-map)
-    (define-key map "\C-m" 'package-menu-describe-package)
-    (define-key map "u" 'package-menu-mark-unmark)
-    (define-key map "\177" 'package-menu-backup-unmark)
-    (define-key map "d" 'package-menu-mark-delete)
-    (define-key map "i" 'package-menu-mark-install)
-    (define-key map "U" 'package-menu-mark-upgrades)
-    (define-key map "r" 'revert-buffer)
-    (define-key map "~" 'package-menu-mark-obsolete-for-deletion)
-    (define-key map "w" 'package-browse-url)
-    (define-key map "x" 'package-menu-execute)
-    (define-key map "h" 'package-menu-quick-help)
-    (define-key map "H" #'package-menu-hide-package)
-    (define-key map "?" 'package-menu-describe-package)
-    (define-key map "(" #'package-menu-toggle-hiding)
-    (define-key map (kbd "/ /") 'package-menu-clear-filter)
-    (define-key map (kbd "/ a") 'package-menu-filter-by-archive)
-    (define-key map (kbd "/ d") 'package-menu-filter-by-description)
-    (define-key map (kbd "/ k") 'package-menu-filter-by-keyword)
-    (define-key map (kbd "/ N") 'package-menu-filter-by-name-or-description)
-    (define-key map (kbd "/ n") 'package-menu-filter-by-name)
-    (define-key map (kbd "/ s") 'package-menu-filter-by-status)
-    (define-key map (kbd "/ v") 'package-menu-filter-by-version)
-    (define-key map (kbd "/ m") 'package-menu-filter-marked)
-    (define-key map (kbd "/ u") 'package-menu-filter-upgradable)
-    map)
-  "Local keymap for `package-menu-mode' buffers.")
+(defvar-keymap package-menu-mode-map
+  :doc "Local keymap for `package-menu-mode' buffers."
+  :parent tabulated-list-mode-map
+  "C-m"   #'package-menu-describe-package
+  "u"     #'package-menu-mark-unmark
+  "DEL"   #'package-menu-backup-unmark
+  "d"     #'package-menu-mark-delete
+  "i"     #'package-menu-mark-install
+  "U"     #'package-menu-mark-upgrades
+  "r"     #'revert-buffer
+  "~"     #'package-menu-mark-obsolete-for-deletion
+  "w"     #'package-browse-url
+  "x"     #'package-menu-execute
+  "h"     #'package-menu-quick-help
+  "H"     #'package-menu-hide-package
+  "?"     #'package-menu-describe-package
+  "("     #'package-menu-toggle-hiding
+  "/ /"   #'package-menu-clear-filter
+  "/ a"   #'package-menu-filter-by-archive
+  "/ d"   #'package-menu-filter-by-description
+  "/ k"   #'package-menu-filter-by-keyword
+  "/ N"   #'package-menu-filter-by-name-or-description
+  "/ n"   #'package-menu-filter-by-name
+  "/ s"   #'package-menu-filter-by-status
+  "/ v"   #'package-menu-filter-by-version
+  "/ m"   #'package-menu-filter-marked
+  "/ u"   #'package-menu-filter-upgradable)
 
 (easy-menu-define package-menu-mode-menu package-menu-mode-map
   "Menu for `package-menu-mode'."
@@ -4074,7 +4082,9 @@ The list is displayed in a buffer named `*Packages*'."
   "Return the version number of the package in which this is used.
 Assumes it is used from an Elisp file placed inside the top-level directory
 of an installed ELPA package.
-The return value is a string (or nil in case we can't find it)."
+The return value is a string (or nil in case we can't find it).
+It works in more cases if the call is in the file which contains
+the `Version:' header."
   ;; In a sense, this is a lie, but it does just what we want: precompute
   ;; the version at compile time and hardcodes it into the .elc file!
   (declare (pure t))
@@ -4093,6 +4103,7 @@ The return value is a string (or nil in case we can't 
find it)."
       (let* ((pkgdir (file-name-directory file))
              (pkgname (file-name-nondirectory (directory-file-name pkgdir)))
              (mainfile (expand-file-name (concat pkgname ".el") pkgdir)))
+        (unless (file-readable-p mainfile) (setq mainfile file))
         (when (file-readable-p mainfile)
           (require 'lisp-mnt)
           (with-temp-buffer
diff --git a/lisp/emacs-lisp/pcase.el b/lisp/emacs-lisp/pcase.el
index 81280d4e04..c3dbfe2947 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 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 8464b5a519..d199716b2c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1989, 1993, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Randal Schwartz <merlyn@stonehenge.com>
 ;; Keywords: lisp
@@ -24,6 +24,7 @@
 
 ;;; Code:
 
+(require 'cl-lib)
 (defvar font-lock-verbose)
 
 (defgroup pp nil
@@ -233,13 +234,14 @@ Use the `pp-max-width' variable to control the desired 
line length."
     (cons (cond
            ((consp (cdr sexp))
             (if (and (length= sexp 2)
-                     (eq (car sexp) 'quote))
+                     (memq (car sexp) '(quote function)))
                 (cond
                  ((symbolp (cadr sexp))
                   (let ((print-quoted t))
                     (prin1 sexp (current-buffer))))
                  ((consp (cadr sexp))
-                  (insert "'")
+                  (insert (if (eq (car sexp) 'quote)
+                              "'" "#'"))
                   (pp--format-list (cadr sexp)
                                    (set-marker (make-marker) (1- (point))))))
               (pp--format-list sexp)))
diff --git a/lisp/emacs-lisp/radix-tree.el b/lisp/emacs-lisp/radix-tree.el
index a529ed025d..dbf8558d2f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords:
diff --git a/lisp/emacs-lisp/re-builder.el b/lisp/emacs-lisp/re-builder.el
index 5516b2a81f..38726ca048 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: Detlev Zundel <dzu@gnu.org>
 ;; Keywords: matching, lisp, tools
@@ -274,8 +274,8 @@ Except for Lisp syntax this is the same as `reb-regexp'.")
   emacs-lisp-mode "RE Builder Lisp"
   "Major mode for interactively building symbolic Regular Expressions."
   ;; Pull in packages as needed
-  (cond        ((memq reb-re-syntax '(sregex rx)) ; rx-to-string is autoloaded
-        (require 'rx)))                   ; require rx anyway
+  (when (eq reb-re-syntax 'rx)          ; rx-to-string is autoloaded
+    (require 'rx))                      ; require rx anyway
   (reb-mode-common))
 
 (defvar reb-subexp-mode-map
@@ -307,8 +307,8 @@ Except for Lisp syntax this is the same as `reb-regexp'.")
   (eq 'color (frame-parameter nil 'display-type)))
 
 (defsubst reb-lisp-syntax-p ()
-  "Return non-nil if RE Builder uses a Lisp syntax."
-  (memq reb-re-syntax '(sregex rx)))
+  "Return non-nil if RE Builder uses `rx' syntax."
+  (eq reb-re-syntax 'rx))
 
 (defmacro reb-target-binding (symbol)
   "Return binding for SYMBOL in the RE Builder target buffer."
@@ -483,11 +483,11 @@ Optional argument SYNTAX must be specified if called 
non-interactively."
    (list (intern
          (completing-read
           (format-prompt "Select syntax" reb-re-syntax)
-          '(read string sregex rx)
+           '(read string rx)
           nil t nil nil (symbol-name reb-re-syntax)
            'reb-change-syntax-hist))))
 
-  (if (memq syntax '(read string sregex rx))
+  (if (memq syntax '(read string rx))
       (let ((buffer (get-buffer reb-buffer)))
        (setq reb-re-syntax syntax)
        (when buffer
@@ -606,9 +606,9 @@ optional fourth argument FORCE is non-nil."
 
 (defun reb-cook-regexp (re)
   "Return RE after processing it according to `reb-re-syntax'."
-  (cond ((memq reb-re-syntax '(sregex rx))
-        (rx-to-string (eval (car (read-from-string re)))))
-       (t re)))
+  (if (eq reb-re-syntax 'rx)
+      (rx-to-string (eval (car (read-from-string re))))
+    re))
 
 (defun reb-update-regexp ()
   "Update the regexp for the target buffer.
diff --git a/lisp/emacs-lisp/regexp-opt.el b/lisp/emacs-lisp/regexp-opt.el
index 2a40290249..cae5dd00d1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2022 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 527af1ddf2..0099d157e4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 2001-2022 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 ea27bb3c31..2b2039f9d1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 2001-2022 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 8abe570e64..e635c7f200 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 
@@ -25,8 +25,101 @@
 
 (require 'seq)
 
+(defun rmc--add-key-description (elem)
+  (let* ((char (car elem))
+         (name (cadr elem))
+         (pos (seq-position name char))
+         (desc (key-description (char-to-string char)))
+         (graphical-terminal
+          (display-supports-face-attributes-p
+           '(:underline t) (window-frame)))
+         (altered-name
+          (cond
+           ;; Not in the name string, or a special character.
+           ((or (not pos)
+                (member desc '("ESC" "TAB" "RET" "DEL" "SPC")))
+            (format "%s %s"
+                    (if graphical-terminal
+                        (propertize desc 'face 'read-multiple-choice-face)
+                      (propertize desc 'face 'help-key-binding))
+                    name))
+           ;; The prompt character is in the name, so highlight
+           ;; it on graphical terminals.
+           (graphical-terminal
+            (setq name (copy-sequence name))
+            (put-text-property pos (1+ pos)
+                               'face 'read-multiple-choice-face
+                               name)
+            name)
+           ;; And put it in [bracket] on non-graphical terminals.
+           (t
+            (concat
+             (substring name 0 pos)
+             "["
+             (upcase (substring name pos (1+ pos)))
+             "]"
+             (substring name (1+ pos)))))))
+    (cons char altered-name)))
+
+(defun rmc--show-help (prompt help-string show-help choices altered-names)
+  (let* ((buf-name (if (stringp show-help)
+                       show-help
+                     "*Multiple Choice Help*"))
+         (buf (get-buffer-create buf-name)))
+    (if (stringp help-string)
+        (with-help-window buf
+          (with-current-buffer buf
+            (insert help-string)))
+      (with-help-window buf
+        (with-current-buffer buf
+          (erase-buffer)
+          (pop-to-buffer buf)
+          (insert prompt "\n\n")
+          (let* ((columns (/ (window-width) 25))
+                 (fill-column 21)
+                 (times 0)
+                 (start (point)))
+            (dolist (elem choices)
+              (goto-char start)
+              (unless (zerop times)
+                (if (zerop (mod times columns))
+                    ;; Go to the next "line".
+                    (goto-char (setq start (point-max)))
+                  ;; Add padding.
+                  (while (not (eobp))
+                    (end-of-line)
+                    (insert (make-string (max (- (* (mod times columns)
+                                                    (+ fill-column 4))
+                                                 (current-column))
+                                              0)
+                                         ?\s))
+                    (forward-line 1))))
+              (setq times (1+ times))
+              (let ((text
+                     (with-temp-buffer
+                       (insert (format
+                                "%c: %s\n"
+                                (car elem)
+                                (cdr (assq (car elem) altered-names))))
+                       (fill-region (point-min) (point-max))
+                       (when (nth 2 elem)
+                         (let ((start (point)))
+                           (insert (nth 2 elem))
+                           (unless (bolp)
+                             (insert "\n"))
+                           (fill-region start (point-max))))
+                       (buffer-string))))
+                (goto-char start)
+                (dolist (line (split-string text "\n"))
+                  (end-of-line)
+                  (if (bolp)
+                      (insert line "\n")
+                    (insert line))
+                  (forward-line 1))))))))
+    buf))
+
 ;;;###autoload
-(defun read-multiple-choice (prompt choices &optional help-string)
+(defun read-multiple-choice (prompt choices &optional help-string show-help)
   "Ask user to select an entry from CHOICES, promting with PROMPT.
 This function allows to ask the user a multiple-choice question.
 
@@ -42,6 +135,9 @@ the optional argument HELP-STRING.  This argument is a 
string that
 should contain a more detailed description of all of the possible
 choices.  `read-multiple-choice' will display that description in a
 help buffer if the user requests that.
+If optional argument SHOW-HELP is non-nil, show the help screen
+immediately, before any user input.  If SHOW-HELP is a string,
+use it as the name of the help buffer.
 
 This function translates user input into responses by consulting
 the bindings in `query-replace-map'; see the documentation of
@@ -67,45 +163,19 @@ Usage example:
                       \\='((?a \"always\")
                         (?s \"session only\")
                         (?n \"no\")))"
-  (let* ((altered-names nil)
+  (let* ((choices (if show-help choices (append choices '((?? "?")))))
+         (altered-names (mapcar #'rmc--add-key-description choices))
          (full-prompt
           (format
            "%s (%s): "
            prompt
-           (mapconcat
-            (lambda (elem)
-              (let* ((name (cadr elem))
-                     (pos (seq-position name (car elem)))
-                     (altered-name
-                      (cond
-                       ;; Not in the name string.
-                       ((not pos)
-                        (format "[%c] %s" (car elem) name))
-                       ;; The prompt character is in the name, so highlight
-                       ;; it on graphical terminals...
-                       ((display-supports-face-attributes-p
-                         '(:underline t) (window-frame))
-                        (setq name (copy-sequence name))
-                        (put-text-property pos (1+ pos)
-                                           'face 'read-multiple-choice-face
-                                           name)
-                        name)
-                       ;; And put it in [bracket] on non-graphical terminals.
-                       (t
-                        (concat
-                         (substring name 0 pos)
-                         "["
-                         (upcase (substring name pos (1+ pos)))
-                         "]"
-                         (substring name (1+ pos)))))))
-                (push (cons (car elem) altered-name)
-                      altered-names)
-                altered-name))
-            (append choices '((?? "?")))
-            ", ")))
+           (mapconcat (lambda (e) (cdr e)) altered-names ", ")))
          tchar buf wrong-char answer)
     (save-window-excursion
       (save-excursion
+        (if show-help
+            (setq buf (rmc--show-help prompt help-string show-help
+                                   choices altered-names)))
        (while (not tchar)
          (message "%s%s"
                    (if wrong-char
@@ -161,57 +231,8 @@ Usage example:
                   tchar nil)
             (when wrong-char
               (ding))
-            (setq buf (get-buffer-create "*Multiple Choice Help*"))
-            (if (stringp help-string)
-                (with-help-window buf
-                  (with-current-buffer buf
-                    (insert help-string)))
-              (with-help-window buf
-                (with-current-buffer buf
-                  (erase-buffer)
-                  (pop-to-buffer buf)
-                  (insert prompt "\n\n")
-                  (let* ((columns (/ (window-width) 25))
-                         (fill-column 21)
-                         (times 0)
-                         (start (point)))
-                    (dolist (elem choices)
-                      (goto-char start)
-                      (unless (zerop times)
-                        (if (zerop (mod times columns))
-                            ;; Go to the next "line".
-                            (goto-char (setq start (point-max)))
-                          ;; Add padding.
-                          (while (not (eobp))
-                            (end-of-line)
-                            (insert (make-string (max (- (* (mod times columns)
-                                                            (+ fill-column 4))
-                                                         (current-column))
-                                                      0)
-                                                 ?\s))
-                            (forward-line 1))))
-                      (setq times (1+ times))
-                      (let ((text
-                             (with-temp-buffer
-                               (insert (format
-                                        "%c: %s\n"
-                                        (car elem)
-                                        (cdr (assq (car elem) altered-names))))
-                               (fill-region (point-min) (point-max))
-                               (when (nth 2 elem)
-                                 (let ((start (point)))
-                                   (insert (nth 2 elem))
-                                   (unless (bolp)
-                                     (insert "\n"))
-                                   (fill-region start (point-max))))
-                               (buffer-string))))
-                        (goto-char start)
-                        (dolist (line (split-string text "\n"))
-                          (end-of-line)
-                          (if (bolp)
-                              (insert line "\n")
-                            (insert line))
-                          (forward-line 1))))))))))))
+            (setq buf (rmc--show-help prompt help-string show-help
+                                   choices altered-names))))))
     (when (buffer-live-p buf)
       (kill-buffer buf))
     (assq tchar choices)))
diff --git a/lisp/emacs-lisp/rx.el b/lisp/emacs-lisp/rx.el
index c48052dee9..aa2486b47e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/lisp/emacs-lisp/seq.el b/lisp/emacs-lisp/seq.el
index 451ff19631..abfe51d32b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2022 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 e2a24e9949..8cd371321a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Terry Jones <terry@santafe.edu>
 ;; Keywords: lisp
@@ -151,9 +151,6 @@ See the documentation for `list-load-path-shadows' for 
further information."
     ;; Return the list of shadowings.
     shadows))
 
-(define-obsolete-function-alias 'find-emacs-lisp-shadows
-  'load-path-shadows-find "23.3")
-
 ;; Return true if neither file exists, or if both exist and have identical
 ;; contents.
 (defun load-path-shadows-same-file-or-nonexistent (f1 f2)
diff --git a/lisp/emacs-lisp/shortdoc.el b/lisp/emacs-lisp/shortdoc.el
index ba08e68af5..870d34527b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
 
 ;; Keywords: lisp, help
 ;; Package: emacs
@@ -1232,7 +1232,7 @@ There can be any number of :example/:result elements."
   (define-keymap
     :no-eval (define-keymap "C-c C-c" #'quit-buffer))
   (defvar-keymap
-      :no-eval (defvar-keymap my-keymap "C-c C-c" map #'quit-buffer))
+      :no-eval (defvar-keymap my-keymap "C-c C-c" #'quit-buffer))
   "Setting keys"
   (keymap-set
    :no-eval (keymap-set map "C-c C-c" #'quit-buffer))
@@ -1423,14 +1423,12 @@ Example:
         (setq slist (cdr slist)))
       (setcdr slist (cons elem (cdr slist))))))
 
-(defvar shortdoc-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map (kbd "n") 'shortdoc-next)
-    (define-key map (kbd "p") 'shortdoc-previous)
-    (define-key map (kbd "C-c C-n") 'shortdoc-next-section)
-    (define-key map (kbd "C-c C-p") 'shortdoc-previous-section)
-    map)
-  "Keymap for `shortdoc-mode'.")
+(defvar-keymap shortdoc-mode-map
+  :doc "Keymap for `shortdoc-mode'."
+  "n"       #'shortdoc-next
+  "p"       #'shortdoc-previous
+  "C-c C-n" #'shortdoc-next-section
+  "C-c C-p" #'shortdoc-previous-section)
 
 (define-derived-mode shortdoc-mode special-mode "shortdoc"
   "Mode for shortdoc."
diff --git a/lisp/emacs-lisp/shorthands.el b/lisp/emacs-lisp/shorthands.el
index e9f5880ab2..a9e4343715 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 8e14faea3a..b2283e66e4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 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 b53245b9b5..43e0fc4c9d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: convenience
diff --git a/lisp/emacs-lisp/syntax.el b/lisp/emacs-lisp/syntax.el
index 0bb1b8916b..7cc076cd80 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 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 8f6c655dbe..4a9814b5da 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
 ;; Author: Chong Yidong <cyd@stupidchicken.com>
 ;; Keywords: extensions, lisp
@@ -596,8 +596,7 @@ Return the column number after insertion."
       (when not-last-col
         (when (> pad-right 0) (insert (make-string pad-right ?\s)))
         (insert (propertize
-                 ;; We need at least one space to align correctly.
-                 (make-string (- width (min 1 width label-width)) ?\s)
+                 (make-string (- width (min width label-width)) ?\s)
                  'display `(space :align-to ,next-x))))
       (put-text-property opoint (point) 'tabulated-list-column-name name)
       next-x)))
@@ -684,6 +683,10 @@ With a numeric prefix argument N, sort the Nth column.
 If the numeric prefix is -1, restore order the list was
 originally displayed in."
   (interactive "P")
+  (when (and n
+             (or (>= n (length tabulated-list-format))
+                 (< n -1)))
+    (user-error "Invalid column number"))
   (if (equal n -1)
       ;; Restore original order.
       (progn
diff --git a/lisp/emacs-lisp/tcover-ses.el b/lisp/emacs-lisp/tcover-ses.el
index 4460fef97b..2b1672ffd6 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 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 cdd966e51c..33628d8f47 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 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 7da02a9cb2..9f86a28eb6 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2022 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 6f2e42af50..2d1efadb7f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 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 d5bbe7d72c..c93a50cabf 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 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 1ef4931b7b..fd29abf40a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2001-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Package: emacs
@@ -314,7 +314,7 @@ This function is called, by name, directly by the C code."
                          (not (timer--idle-delay timer)))
                 (setf (timer--time timer)
                       (timer-next-integral-multiple-of-time
-                       (current-time) (timer--repeat-delay timer))))
+                      nil (timer--repeat-delay timer))))
               ;; Place it back on the timer-list before running
               ;; timer--function, so it can cancel-timer itself.
               (timer-activate timer t cell)
@@ -351,19 +351,27 @@ This function is called, by name, directly by the C code."
 Repeat the action every REPEAT seconds, if REPEAT is non-nil.
 REPEAT may be an integer or floating point number.
 TIME should be one of:
+
 - a string giving today's time like \"11:23pm\"
   (the acceptable formats are HHMM, H:MM, HH:MM, HHam, HHAM,
   HHpm, HHPM, HH:MMam, HH:MMAM, HH:MMpm, or HH:MMPM;
   a period `.' can be used instead of a colon `:' to separate
   the hour and minute parts);
+
 - a string giving a relative time like \"90\" or \"2 hours 35 minutes\"
   (the acceptable forms are a number of seconds without units
   or some combination of values using units in `timer-duration-words');
+
 - nil, meaning now;
+
 - a number of seconds from now;
+
 - a value from `encode-time';
-- or t (with non-nil REPEAT) meaning the next integral
-  multiple of REPEAT.
+
+- or t (with non-nil REPEAT) meaning the next integral multiple
+  of REPEAT.  This is handy when you want the function to run at
+  a certain \"round\" number.  For instance, (run-at-time t 60 ...)
+  will run at 11:04:00, 11:05:00, etc.
 
 The action is to call FUNCTION with arguments ARGS.
 
@@ -383,7 +391,7 @@ This function returns a timer object which you can use in
 
     ;; Special case: t means the next integral multiple of REPEAT.
     (when (and (eq time t) repeat)
-      (setq time (timer-next-integral-multiple-of-time (current-time) repeat))
+      (setq time (timer-next-integral-multiple-of-time nil repeat))
       (setf (timer--integral-multiple timer) t))
 
     ;; Handle numbers as relative times in seconds.
diff --git a/lisp/emacs-lisp/tq.el b/lisp/emacs-lisp/tq.el
index e02f4e4f25..d28f6bbf06 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-2021 Free Software Foundation,
+;; Copyright (C) 1985-1987, 1992, 2001-2022 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 9354687b08..71eca5a323 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, 1998, 2000-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1998, 2000-2022 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 fa4e0583ed..88900dd565 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
 
 ;; Author: Jonathan Yavner <jyavner@member.fsf.org>
 ;; Keywords: safety lisp utility
diff --git a/lisp/emacs-lisp/warnings.el b/lisp/emacs-lisp/warnings.el
index 36b275e2d3..23e20c3b10 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: internal
@@ -307,7 +307,9 @@ entirely by setting `warning-suppress-types' or
                                'type 'warning-suppress-log-warning
                                'warning-type type))
               (funcall newline)
-             (when (and warning-fill-prefix (not (string-search "\n" message)))
+             (when (and warning-fill-prefix
+                         (not (string-search "\n" message))
+                         (not noninteractive))
                (let ((fill-prefix warning-fill-prefix)
                      (fill-column warning-fill-column))
                  (fill-region start (point))))
diff --git a/lisp/emacs-lock.el b/lisp/emacs-lock.el
index 5c436f599e..3d2eda99a9 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 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 befcb42382..162d1bb641 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2022 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 7014330b6e..1e7cc45c88 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2022 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 65ae2f192f..e399fd0fbf 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
 
 ;; Author: Kim F. Storm <storm@cua.dk>
 ;; Keywords: keyboard emulations convenience CUA
@@ -486,10 +486,8 @@ Activates the region if needed.  Only lasts until the 
region is deactivated."
     (cua--deactivate t))
   (setq cua--last-rectangle nil)
   (mouse-set-point event)
-  ;; FIX ME -- need to calculate virtual column.
-  (cua-set-rectangle-mark)
-  (setq cua--buffer-and-point-before-command nil)
-  (setq cua--mouse-last-pos nil))
+  (activate-mark)
+  (cua-rectangle-mark-mode))
 
 (defun cua-mouse-save-then-kill-rectangle (event arg)
   "Expand rectangle to mouse click position and copy rectangle.
diff --git a/lisp/emulation/edt-lk201.el b/lisp/emulation/edt-lk201.el
index b616fdf429..208cfda440 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-2021 Free Software
+;; Copyright (C) 1986, 1992-1993, 1995, 2001-2022 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 8a42f89315..ed76d7108f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1995, 2000-2022 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 3131c8f873..13804d11f5 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-2021 Free Software Foundation,
+;; Copyright (C) 1986, 1994-1995, 2001-2022 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 8174d83eaa..e1ad70393c 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-2021 Free Software
+;; Copyright (C) 1986, 1992-1993, 1995, 2002-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Kevin Gallagher <kevin.gal@verizon.net>
diff --git a/lisp/emulation/edt.el b/lisp/emulation/edt.el
index f11afb1d02..3f8113dea3 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-2021 Free Software Foundation,
+;; Copyright (C) 1986, 1992-1995, 2000-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Kevin Gallagher <kevin.gal@verizon.net>
diff --git a/lisp/emulation/keypad.el b/lisp/emulation/keypad.el
index 4500faae57..da26e81df5 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 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 849ad3d824..83944285e9 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2022 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 85c8b87b9a..d1bf5e38d5 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1998, 2000-2022 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 368a5dc40a..5430cd700b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2022 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 2f7d17351d..ca175c140c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1997, 2000-2022 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 fb60f6a545..c4eb183ce4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1997, 2000-2022 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 879d8edca6..7581ece214 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1997, 2001-2022 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 71043b189d..6d23ae9a0f 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-1997, 1999-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1997, 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 ;; Package: viper
@@ -79,9 +79,6 @@
 (defmacro viper-frame-value (variable)
   "Return the value of VARIABLE local to the current frame, if there is one.
 Otherwise return the normal value."
-  ;; Frame-local variables are obsolete from Emacs 22.2 onwards,
-  ;; so we do it by hand instead.
-  ;; Buffer-local values take precedence over frame-local ones.
   `(if (local-variable-p ',variable)
        ,variable
      ;; Distinguish between no frame parameter and a frame parameter
diff --git a/lisp/emulation/viper.el b/lisp/emulation/viper.el
index 1ee5365126..b1c361145c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2022 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 ;; Keywords: emulations
diff --git a/lisp/env.el b/lisp/env.el
index fc48059cfd..a630bf120f 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, 1994, 2000-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1991, 1994, 2000-2022 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 18f3f05574..f4dee5f58f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2022 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 fe187589aa..be22b320a2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2022 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 5b250af6d7..18e47c682e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2022 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 5dd6ad34d7..1078c209ae 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 ;; Author: Philip K. <philipk@posteo.net>
 ;; Keywords: PGP, GnuPG
@@ -295,12 +295,12 @@ enough, since keyservers have strict timeout settings."
                :created
                (and  (match-string 4)
                      (not (string-empty-p (match-string 4)))
-                     (seconds-to-time
+                    (time-convert
                       (string-to-number (match-string 4))))
                :expires
                (and (match-string 5)
                     (not (string-empty-p (match-string 5)))
-                    (seconds-to-time
+                   (time-convert
                      (string-to-number (match-string 5))))
                :flags
                (mapcar (lambda (flag)
@@ -319,15 +319,11 @@ enough, since keyservers have strict timeout settings."
                :created
                (and (match-string 2)
                     (not (string-empty-p (match-string 2)))
-                    (decode-time (seconds-to-time
-                                  (string-to-number
-                                   (match-string 2)))))
+                   (decode-time (string-to-number (match-string 2))))
                :expires
                (and (match-string 3)
                     (not (string-empty-p (match-string 3)))
-                    (decode-time (seconds-to-time
-                                  (string-to-number
-                                   (match-string 3)))))
+                   (decode-time (string-to-number (match-string 3))))
                :flags
                (mapcar (lambda (flag)
                          (cdr (assq flag '((?r revoked)
diff --git a/lisp/epa-mail.el b/lisp/epa-mail.el
index 9b3aa0c7fd..6170dcb611 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2022 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 e4b89e984d..742c37d085 100644
--- a/lisp/epa.el
+++ b/lisp/epa.el
@@ -1,6 +1,6 @@
 ;;; epa.el --- the EasyPG Assistant -*- lexical-binding: t -*-
 
-;; Copyright (C) 2006-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <ueno@unixuser.org>
 ;; Keywords: PGP, GnuPG
@@ -235,11 +235,6 @@ You should bind this variable with `let', but do not set 
it globally.")
     (define-key keymap "q" 'epa-exit-buffer)
     keymap))
 
-(defvar epa-info-mode-map
-  (let ((keymap (make-sparse-keymap)))
-    (define-key keymap "q" 'delete-window)
-    keymap))
-
 (defvar epa-exit-buffer-function #'quit-window)
 
 (defun epa--button-key-text (key)
@@ -607,7 +602,11 @@ If SECRET is non-nil, list secret keys instead of public 
keys."
                       (_ "Error while executing \"%s\":\n\n"))
                     (epg-context-program context))
                    "\n\n"
-                   (epg-context-error-output context)))
+                   (epg-context-error-output context)
+                    (if (string-search "Unexpected error"
+                                       (epg-context-error-output context))
+                        "\n(File possibly not an encrypted file, but is 
perhaps a key ring file?)\n"
+                      "")))
          (epa-info-mode)
          (goto-char (point-min)))
        (display-buffer buffer)))))
diff --git a/lisp/epg-config.el b/lisp/epg-config.el
index d32c8c897c..28003eaf71 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <ueno@unixuser.org>
 ;; Keywords: PGP, GnuPG
diff --git a/lisp/epg.el b/lisp/epg.el
index 3354eb2c1e..c5d946cb76 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2000, 2002-2022 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 26c1bd689e..0ea7ef09aa 100644
--- a/lisp/erc/ChangeLog.1
+++ b/lisp/erc/ChangeLog.1
@@ -11702,7 +11702,7 @@
 
        * erc-speak.el, erc.el: New file.
 
-  Copyright (C) 2001-2021 Free Software Foundation, Inc.
+  Copyright (C) 2001-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/erc/ChangeLog.2 b/lisp/erc/ChangeLog.2
index b54e3b9af2..86b6e5534c 100644
--- a/lisp/erc/ChangeLog.2
+++ b/lisp/erc/ChangeLog.2
@@ -757,7 +757,7 @@
 
 See ChangeLog.1 for earlier changes.
 
-  Copyright (C) 2009-2021 Free Software Foundation, Inc.
+  Copyright (C) 2009-2022 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 f7de61ce79..979f93f693 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2004, 2006-2022 Free Software Foundation, Inc.
 
 ;; Author: Jorgen Schaefer <forcer@forcix.cx>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>
diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el
index 69f63dfbc4..d54e92011b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
 
 ;; Filename: erc-backend.el
 ;; Author: Lawrence Mitchell <wence@gmx.li>
diff --git a/lisp/erc/erc-button.el b/lisp/erc/erc-button.el
index 69972856d1..680de6d5aa 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2004, 2006-2022 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <mlang@delysid.org>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>
diff --git a/lisp/erc/erc-capab.el b/lisp/erc/erc-capab.el
index 19bc2dbb8e..7b7773d5e1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: Amin Bandali <bandali@gnu.org>
 
diff --git a/lisp/erc/erc-compat.el b/lisp/erc/erc-compat.el
index 9bbc1f6a0d..00addde275 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2003, 2005-2022 Free Software Foundation, Inc.
 
 ;; Author: Alex Schroeder <alex@gnu.org>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>
diff --git a/lisp/erc/erc-dcc.el b/lisp/erc/erc-dcc.el
index f27425ac8a..9654cab6e5 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993-2022 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 9838b23953..8ece765ef0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
 
 ;; Author: Julien Danjou <julien@danjou.info>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>
diff --git a/lisp/erc/erc-ezbounce.el b/lisp/erc/erc-ezbounce.el
index 331d29a7b5..8f46a1c8dd 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2004, 2006-2022 Free Software Foundation, Inc.
 
 ;; Author: Andreas Fuchs <asf@void.at>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>
diff --git a/lisp/erc/erc-fill.el b/lisp/erc/erc-fill.el
index 9f29b9dad9..492830c3e1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2004, 2006-2022 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 683ac2d37c..9b9f19a0db 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Jorgen Schaefer <forcer@forcix.cx>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>
diff --git a/lisp/erc/erc-ibuffer.el b/lisp/erc/erc-ibuffer.el
index 95eab04044..f1184ff5eb 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2004, 2006-2022 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <mlang@delysid.org>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>
diff --git a/lisp/erc/erc-identd.el b/lisp/erc/erc-identd.el
index 8003900552..eab219f4c1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2006-2022 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>
diff --git a/lisp/erc/erc-imenu.el b/lisp/erc/erc-imenu.el
index 522bc805f8..ea4f44b91c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <mlang@delysid.org>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>
diff --git a/lisp/erc/erc-join.el b/lisp/erc/erc-join.el
index 2ed8622b85..175e83f3c9 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2004, 2006-2022 Free Software Foundation, Inc.
 
 ;; Author: Alex Schroeder <alex@gnu.org>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>
diff --git a/lisp/erc/erc-lang.el b/lisp/erc/erc-lang.el
index 136131ca36..354203aa09 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2004, 2006-2022 Free Software Foundation, Inc.
 
 ;; Author: Alex Schroeder <alex@gnu.org>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>
diff --git a/lisp/erc/erc-list.el b/lisp/erc/erc-list.el
index 31693a7b77..c7cd0ceba8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
 
 ;; Author: Tom Tromey <tromey@redhat.com>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>
diff --git a/lisp/erc/erc-log.el b/lisp/erc/erc-log.el
index 7c5c495f9e..056701d620 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
 
 ;; Author: Lawrence Mitchell <wence@gmx.li>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>
diff --git a/lisp/erc/erc-match.el b/lisp/erc/erc-match.el
index 01d6e44d59..aa78590539 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
 
 ;; Author: Andreas Fuchs <asf@void.at>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>
diff --git a/lisp/erc/erc-menu.el b/lisp/erc/erc-menu.el
index 2da1abb29a..fd14d8b0ad 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2002, 2004-2022 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <mlang@delysid.org>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>
diff --git a/lisp/erc/erc-netsplit.el b/lisp/erc/erc-netsplit.el
index 994f2d07c3..30bb18344d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2004, 2006-2022 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <mlang@delysid.org>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>
diff --git a/lisp/erc/erc-networks.el b/lisp/erc/erc-networks.el
index 678c596760..9377e701c3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2004-2022 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <mlang@lexx.delysid.org>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>
diff --git a/lisp/erc/erc-notify.el b/lisp/erc/erc-notify.el
index d4f22ca0f5..a3fe04d392 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2004, 2006-2022 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <mlang@lexx.delysid.org>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>
diff --git a/lisp/erc/erc-page.el b/lisp/erc/erc-page.el
index 457e8cd468..e53178ce63 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2004, 2006-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: Amin Bandali <bandali@gnu.org>
 
diff --git a/lisp/erc/erc-pcomplete.el b/lisp/erc/erc-pcomplete.el
index c846a1f003..384be500ad 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2004, 2006-2022 Free Software Foundation, Inc.
 
 ;; Author: Sacha Chua <sacha@free.net.ph>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>
diff --git a/lisp/erc/erc-replace.el b/lisp/erc/erc-replace.el
index b2e9047ce7..ec4bf3ae53 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Andreas Fuchs <asf@void.at>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>
diff --git a/lisp/erc/erc-ring.el b/lisp/erc/erc-ring.el
index 52285a8343..0f6851a98a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2004, 2006-2022 Free Software Foundation, Inc.
 
 ;; Author: Alex Schroeder <alex@gnu.org>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>
diff --git a/lisp/erc/erc-services.el b/lisp/erc/erc-services.el
index 5e4cef5253..4b3ca7d23f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2004, 2006-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: Amin Bandali <bandali@gnu.org>
 ;; URL: https://www.emacswiki.org/emacs/ErcNickserv
@@ -444,15 +444,12 @@ it returns nil."
                           (cl-second (assoc network
                                             erc-nickserv-passwords)))))
             (when erc-use-auth-source-for-nickserv-password
-              (let ((secret (cl-first (auth-source-search
-                                       :max 1 :require '(:secret)
-                                       :host server
-                                       ;; Ensure a string for :port
-                                       :port (format "%s" port)
-                                       :user nick))))
-                (when secret
-                  (let ((passwd (plist-get secret :secret)))
-                    (if (functionp passwd) (funcall passwd) passwd)))))
+              (auth-source-pick-first-password
+               :require '(:secret)
+               :host server
+               ;; Ensure a string for :port
+               :port (format "%s" port)
+               :user nick))
             (when erc-prompt-for-nickserv-password
               (read-passwd
                (format "NickServ password for %s on %s (RET to cancel): "
diff --git a/lisp/erc/erc-sound.el b/lisp/erc/erc-sound.el
index cb4c232aba..86978f9d79 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2003, 2006-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: Amin Bandali <bandali@gnu.org>
 ;; URL: https://www.emacswiki.org/emacs/ErcSound
diff --git a/lisp/erc/erc-speedbar.el b/lisp/erc/erc-speedbar.el
index 84854e3be5..ead0d374b1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2004, 2006-2022 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 ddfaafb048..d9cfc9bc98 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2022 Free Software Foundation, Inc.
 
 ;; Author: Jorgen Schaefer <forcer@forcix.cx>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>
diff --git a/lisp/erc/erc-stamp.el b/lisp/erc/erc-stamp.el
index 7d31bc971e..d74a53bc71 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2004, 2006-2022 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <mlang@delysid.org>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>
diff --git a/lisp/erc/erc-status-sidebar.el b/lisp/erc/erc-status-sidebar.el
index a6ad856bfd..39430ee659 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017, 2020-2022 Free Software Foundation, Inc.
 
 ;; Author: Andrew Barbarello
 ;; Maintainer: Amin Bandali <bandali@gnu.org>
diff --git a/lisp/erc/erc-track.el b/lisp/erc/erc-track.el
index 5755384490..2196c5411e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <mlang@delysid.org>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>
diff --git a/lisp/erc/erc-truncate.el b/lisp/erc/erc-truncate.el
index 2c4002f0ee..8a8842bc48 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2004, 2006-2022 Free Software Foundation, Inc.
 
 ;; Author: Andreas Fuchs <asf@void.at>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>
diff --git a/lisp/erc/erc-xdcc.el b/lisp/erc/erc-xdcc.el
index c17eb59da3..ee2a8c936f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2004, 2006-2022 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <mlang@delysid.org>
 ;; Maintainer: Amin Bandali <bandali@gnu.org>
diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el
index df6c3c09d9..5faeda9a13 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
 
 ;; Author: Alexander L. Belikoff (alexander@belikoff.net)
 ;; Maintainer: Amin Bandali <bandali@gnu.org>
@@ -2062,19 +2062,12 @@ Returns the buffer for the given server or channel."
     ;; password stuff
     (setq erc-session-password
           (or passwd
-              (let ((secret
-                     (plist-get
-                      (nth 0
-                           (auth-source-search :host server
-                                               :max 1
-                                               :user nick
-                                               ;; secrets.el wouldn’t accept a 
number
-                                               :port (if (numberp port) 
(number-to-string port) port)
-                                               :require '(:secret)))
-                      :secret)))
-                (if (functionp secret)
-                    (funcall secret)
-                  secret))))
+              (auth-source-pick-first-password
+               :host server
+               :user nick
+               ;; secrets.el wouldn’t accept a number
+               :port (if (numberp port) (number-to-string port) port)
+               :require '(:secret))))
     ;; client certificate (only useful if connecting over TLS)
     (setq erc-session-client-certificate client-certificate)
     ;; debug output buffer
@@ -3187,16 +3180,12 @@ For a list of user commands (/join /part, ...):
 (put 'erc-cmd-HELP 'process-not-needed t)
 
 (defun erc-server-join-channel (server channel &optional secret)
-  (let* ((secret (or secret
-                    (plist-get (nth 0 (auth-source-search
-                                       :max 1
-                                       :host server
-                                       :port "irc"
-                                       :user channel))
-                               :secret)))
-        (password (if (functionp secret)
-                      (funcall secret)
-                    secret)))
+  (let ((password
+         (or secret
+             (auth-source-pick-first-password
+             :host server
+             :port "irc"
+             :user channel))))
     (erc-log (format "cmd: JOIN: %s" channel))
     (erc-server-send (concat "JOIN " channel
                             (if password
diff --git a/lisp/eshell/em-alias.el b/lisp/eshell/em-alias.el
index ee7f4633e7..5d3aaf7c81 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 034fa059b1..a2f8a58220 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
@@ -61,10 +61,9 @@ modules may have a simple template to begin with."
   "The banner message to be displayed when Eshell is loaded.
 This can be any sexp, and should end with at least two newlines."
   :type 'sexp
+  :risky t
   :group 'eshell-banner)
 
-(put 'eshell-banner-message 'risky-local-variable t)
-
 (defcustom eshell-banner-load-hook nil
   "A list of functions to run when `eshell-banner' is loaded."
   :version "24.1"                       ; removed eshell-banner-initialize
diff --git a/lisp/eshell/em-basic.el b/lisp/eshell/em-basic.el
index af5550b11d..27b343ad39 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 4fd0afbeb8..c6a51b1793 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
@@ -226,19 +226,17 @@ to writing a completion function."
   (let ((completion-at-point-functions '(elisp-completion-at-point)))
     (completion-at-point)))
 
-(defvar eshell-cmpl-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [(control ?i)] #'completion-at-point)
-    ;; jww (1999-10-19): Will this work on anything but X?
-    (define-key map [backtab] #'pcomplete-reverse)
-    (define-key map [(meta ??)] #'completion-help-at-point)
-    (define-key map [(meta control ?i)] #'eshell-complete-lisp-symbol)
-    ;; C-c prefix:
-    (define-key map (kbd "C-c M-h") #'eshell-completion-help)
-    (define-key map (kbd "C-c TAB") #'pcomplete-expand-and-complete)
-    (define-key map (kbd "C-c C-i") #'pcomplete-expand-and-complete)
-    (define-key map (kbd "C-c SPC") #'pcomplete-expand)
-    map))
+(defvar-keymap eshell-cmpl-mode-map
+  "C-i"       #'completion-at-point
+  ;; jww (1999-10-19): Will this work on anything but X?
+  "<backtab>" #'pcomplete-reverse
+  "M-?"       #'completion-help-at-point
+  "C-M-i"     #'eshell-complete-lisp-symbol
+  ;; C-c prefix:
+  "C-c M-h"   #'eshell-completion-help
+  "C-c TAB"   #'pcomplete-expand-and-complete
+  "C-c C-i"   #'pcomplete-expand-and-complete
+  "C-c SPC"   #'pcomplete-expand)
 
 (define-minor-mode eshell-cmpl-mode
   "Minor mode that provides a keymap when `eshell-cmpl' active.
@@ -382,7 +380,7 @@ to writing a completion function."
                       (setq val (number-to-string val)))
                      ;; expand .../ etc that only eshell understands to
                      ;; standard ../../
-                     ((string-match "\\.\\.\\.+/" val)
+                     ((and (stringp val)) (string-match "\\.\\.\\.+/" val)
                       (setq val (eshell-expand-multiple-dots val))))
                (or val "")))
           args)
diff --git a/lisp/eshell/em-dirs.el b/lisp/eshell/em-dirs.el
index ee9057f50e..893cad7b4f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
diff --git a/lisp/eshell/em-glob.el b/lisp/eshell/em-glob.el
index ba12e43a3c..842f27a492 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 aa158fa24c..16abf04489 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
@@ -125,16 +125,34 @@ the input history list.  Default is to save anything that 
isn't all
 whitespace."
   :type '(radio (function-item eshell-input-filter-default)
                 (function-item eshell-input-filter-initial-space)
-                (function :tag "Other function")))
-
-(put 'eshell-input-filter 'risky-local-variable t)
+                (function :tag "Other function"))
+  :risky t)
+
+(defun eshell-hist--update-keymap (symbol value)
+  "Update `eshell-hist-mode-map' for `eshell-hist-match-partial'."
+  ;; Don't try to set this before it is bound.  See below.
+  (when (and (boundp 'eshell-hist-mode-map)
+             (eq symbol 'eshell-hist-match-partial))
+    (dolist (keyb
+             (if value
+                 `(("M-p"     . ,#'eshell-previous-matching-input-from-input)
+                   ("M-n"     . ,#'eshell-next-matching-input-from-input)
+                   ("C-c M-p" . ,#'eshell-previous-input)
+                   ("C-c M-n" . ,#'eshell-next-input))
+               `(("M-p"     . ,#'eshell-previous-input)
+                 ("M-n"     . ,#'eshell-next-input)
+                 ("C-c M-p" . ,#'eshell-previous-matching-input-from-input)
+                 ("C-c M-n" . ,#'eshell-next-matching-input-from-input))))
+      (keymap-set eshell-hist-mode-map (car keyb) (cdr keyb))))
+  (set-default symbol value))
 
 (defcustom eshell-hist-match-partial t
   "If non-nil, movement through history is constrained by current input.
-Otherwise, typing <M-p> and <M-n> will always go to the next history
+Otherwise, typing \\`M-p' and \\`M-n' will always go to the next history
 element, regardless of any text on the command line.  In that case,
-<C-c M-r> and <C-c M-s> still offer that functionality."
-  :type 'boolean)
+\\`C-c M-r' and \\`C-c M-s' still offer that functionality."
+  :type 'boolean
+  :set 'eshell-hist--update-keymap)
 
 (defcustom eshell-hist-move-to-end t
   "If non-nil, move to the end of the buffer before cycling history."
@@ -180,43 +198,31 @@ element, regardless of any text on the command line.  In 
that case,
 (defvar eshell-matching-input-from-input-string "")
 (defvar eshell-save-history-index nil)
 
-(defvar eshell-isearch-map
-  (let ((map (copy-keymap isearch-mode-map)))
-    (define-key map [(control ?m)] 'eshell-isearch-return)
-    (define-key map [(control ?r)] 'eshell-isearch-repeat-backward)
-    (define-key map [(control ?s)] 'eshell-isearch-repeat-forward)
-    (define-key map [(control ?g)] 'eshell-isearch-abort)
-    (define-key map [backspace] 'eshell-isearch-delete-char)
-    (define-key map [delete] 'eshell-isearch-delete-char)
-    (define-key map "\C-c\C-c" 'eshell-isearch-cancel)
-    map)
-  "Keymap used in isearch in Eshell.")
-
-(defvar eshell-hist-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [up] #'eshell-previous-matching-input-from-input)
-    (define-key map [down] #'eshell-next-matching-input-from-input)
-    (define-key map [(control up)] #'eshell-previous-input)
-    (define-key map [(control down)] #'eshell-next-input)
-    (define-key map [(meta ?r)] #'eshell-previous-matching-input)
-    (define-key map [(meta ?s)] #'eshell-next-matching-input)
-    (define-key map (kbd "C-c M-r") 
#'eshell-previous-matching-input-from-input)
-    (define-key map (kbd "C-c M-s") #'eshell-next-matching-input-from-input)
-    ;; FIXME: Relies on `eshell-hist-match-partial' being set _before_
-    ;; em-hist is loaded and won't respect changes.
-    (if eshell-hist-match-partial
-       (progn
-         (define-key map [(meta ?p)] 
'eshell-previous-matching-input-from-input)
-         (define-key map [(meta ?n)] 'eshell-next-matching-input-from-input)
-         (define-key map (kbd "C-c M-p") #'eshell-previous-input)
-         (define-key map (kbd "C-c M-n") #'eshell-next-input))
-      (define-key map [(meta ?p)] #'eshell-previous-input)
-      (define-key map [(meta ?n)] #'eshell-next-input)
-      (define-key map (kbd "C-c M-p") 
#'eshell-previous-matching-input-from-input)
-      (define-key map (kbd "C-c M-n") #'eshell-next-matching-input-from-input))
-    (define-key map (kbd "C-c C-l") #'eshell-list-history)
-    (define-key map (kbd "C-c C-x") #'eshell-get-next-from-history)
-    map))
+(defvar-keymap eshell-isearch-map
+  :doc "Keymap used in isearch in Eshell."
+  :parent isearch-mode-map
+  "C-m"         #'eshell-isearch-return
+  "C-r"         #'eshell-isearch-repeat-backward
+  "C-s"         #'eshell-isearch-repeat-forward
+  "C-g"         #'eshell-isearch-abort
+  "<backspace>" #'eshell-isearch-delete-char
+  "<delete>"    #'eshell-isearch-delete-char
+  "C-c C-c"     #'eshell-isearch-cancel)
+
+(defvar-keymap eshell-hist-mode-map
+  "<up>"     #'eshell-previous-matching-input-from-input
+  "<down>"   #'eshell-next-matching-input-from-input
+  "C-<up>"   #'eshell-previous-input
+  "C-<down>" #'eshell-next-input
+  "M-r"      #'eshell-previous-matching-input
+  "M-s"      #'eshell-next-matching-input
+  "C-c M-r"  #'eshell-previous-matching-input-from-input
+  "C-c M-s"  #'eshell-next-matching-input-from-input
+  "C-c C-l"  #'eshell-list-history
+  "C-c C-x"  #'eshell-get-next-from-history)
+;; Update `eshell-hist-mode-map' for `eshell-hist-match-partial'.
+(eshell-hist--update-keymap 'eshell-hist-match-partial
+                            eshell-hist-match-partial)
 
 (defvar eshell-rebind-keys-alist)
 
diff --git a/lisp/eshell/em-ls.el b/lisp/eshell/em-ls.el
index 57146bb126..846f3d5e29 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 75a803d3ad..216c71f59e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
@@ -107,9 +107,8 @@ ordinary strings."
 The format of each entry is
 
   (CHAR . PREDICATE-FUNC-SEXP)"
-  :type '(repeat (cons character sexp)))
-
-(put 'eshell-predicate-alist 'risky-local-variable t)
+  :type '(repeat (cons character sexp))
+  :risky t)
 
 (defcustom eshell-modifier-alist
   '((?E . (lambda (lst)
@@ -144,9 +143,8 @@ The format of each entry is
 The format of each entry is
 
   (CHAR ENTRYWISE-P MODIFIER-FUNC-SEXP)"
-  :type '(repeat (cons character sexp)))
-
-(put 'eshell-modifier-alist 'risky-local-variable t)
+  :type '(repeat (cons character sexp))
+  :risky t)
 
 (defvar eshell-predicate-help-string
   "Eshell predicate quick reference:
@@ -225,11 +223,9 @@ FOR LISTS OF ARGUMENTS:
 EXAMPLES:
   *.c(:o)  sorted list of .c files")
 
-(defvar eshell-pred-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map (kbd "C-c M-q") #'eshell-display-predicate-help)
-    (define-key map (kbd "C-c M-m") #'eshell-display-modifier-help)
-    map))
+(defvar-keymap eshell-pred-mode-map
+  "C-c M-q" #'eshell-display-predicate-help
+  "C-c M-m" #'eshell-display-modifier-help)
 
 ;;; Functions:
 
diff --git a/lisp/eshell/em-prompt.el b/lisp/eshell/em-prompt.el
index aa96166087..a1a91e7d63 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
@@ -96,11 +96,9 @@ arriving, or after."
   :options '(eshell-show-maximum-output)
   :group 'eshell-prompt)
 
-(defvar eshell-prompt-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map (kbd "C-c C-n") #'eshell-next-prompt)
-    (define-key map (kbd "C-c C-p") #'eshell-previous-prompt)
-    map))
+(defvar-keymap eshell-prompt-mode-map
+  "C-c C-n" #'eshell-next-prompt
+  "C-c C-p" #'eshell-previous-prompt)
 
 ;;; Functions:
 
diff --git a/lisp/eshell/em-rebind.el b/lisp/eshell/em-rebind.el
index d70444ea10..f24758d4e3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
@@ -136,10 +136,8 @@ This is default behavior of shells like bash."
   :type '(repeat function)
   :group 'eshell-rebind)
 
-(defvar eshell-rebind-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map (kbd "C-c M-l") #'eshell-lock-local-map)
-    map))
+(defvar-keymap eshell-rebind-mode-map
+  "C-c M-l" #'eshell-lock-local-map)
 
 ;; Internal Variables:
 
diff --git a/lisp/eshell/em-script.el b/lisp/eshell/em-script.el
index 1f08e89191..e8459513f3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 dffc8f804b..6768cee4c3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 f9d8acccf2..e34c5ae47c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 e29e9e3e3a..e9018bdb93 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: Aidan Gauland <aidalgol@no8wireless.co.nz>
 
diff --git a/lisp/eshell/em-unix.el b/lisp/eshell/em-unix.el
index e71edaf476..3967817b0e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 f58e1b85cb..2583738d55 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 1990c0cfa5..1a2f2a57e8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
@@ -152,10 +152,8 @@ treated as a literal character."
   :type 'hook
   :group 'eshell-arg)
 
-(defvar eshell-arg-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map (kbd "C-c M-b") #'eshell-insert-buffer-name)
-    map))
+(defvar-keymap eshell-arg-mode-map
+  "C-c M-b" #'eshell-insert-buffer-name)
 
 ;;; Functions:
 
diff --git a/lisp/eshell/esh-cmd.el b/lisp/eshell/esh-cmd.el
index a2464ad4a9..a2d7d9431a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
@@ -258,9 +258,8 @@ the command."
     (default-directory default-directory)
     (process-environment (eshell-copy-environment)))
   "A list of `let' bindings for subcommand environments."
-  :type 'sexp)
-
-(put 'risky-local-variable 'eshell-subcommand-bindings t)
+  :type 'sexp
+  :risky t)
 
 (defvar eshell-ensure-newline-p nil
   "If non-nil, ensure that a newline is emitted after a Lisp form.
@@ -945,12 +944,12 @@ at the moment are:
       ;; In that case, unwrap the value before checking the delimiter
       ;; value.
       (if (and val
-               (not (processp val))
+               (not (eshell-processp val))
                (not (eq val t)))
           (error "Unmatched delimiter: %S" val)
         ;; Eshell-command expect a list like (<process>) to know if the
         ;; command should be async or not.
-        (or (and (processp val) delim) val)))))
+        (or (and (eshell-processp val) delim) val)))))
 
 (defun eshell-resume-command (proc status)
   "Resume the current command when a process ends."
diff --git a/lisp/eshell/esh-ext.el b/lisp/eshell/esh-ext.el
index fa149dd46e..fc023f23ce 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 c2471912ab..2e0f312f4a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
@@ -147,10 +147,9 @@ not be added to this variable."
                function
                (choice (const :tag "Func returns output-func" t)
                        (const :tag "Func is output-func" nil))))
+  :risky t
   :group 'eshell-io)
 
-(put 'eshell-virtual-targets 'risky-local-variable t)
-
 ;;; Internal Variables:
 
 (defvar eshell-current-handles nil)
diff --git a/lisp/eshell/esh-mode.el b/lisp/eshell/esh-mode.el
index cae5236d89..8302eefe1e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
@@ -260,31 +260,28 @@ This is used by `eshell-watch-for-password-prompt'."
      (standard-syntax-table))
     st))
 
-(defvar eshell-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [(control ?c)] 'eshell-command-map)
-    (define-key map "\r" #'eshell-send-input)
-    (define-key map "\M-\r" #'eshell-queue-input)
-    (define-key map [(meta control ?l)] #'eshell-show-output)
-    (define-key map [(control ?a)] #'eshell-bol)
-    map))
-
-(defvar eshell-command-map
-  (let ((map (define-prefix-command 'eshell-command-map)))
-    (define-key map [(meta ?o)] #'eshell-mark-output)
-    (define-key map [(meta ?d)] #'eshell-toggle-direct-send)
-    (define-key map [(control ?a)] #'eshell-bol)
-    (define-key map [(control ?b)] #'eshell-backward-argument)
-    (define-key map [(control ?e)] #'eshell-show-maximum-output)
-    (define-key map [(control ?f)] #'eshell-forward-argument)
-    (define-key map [(control ?m)] #'eshell-copy-old-input)
-    (define-key map [(control ?o)] #'eshell-kill-output)
-    (define-key map [(control ?r)] #'eshell-show-output)
-    (define-key map [(control ?t)] #'eshell-truncate-buffer)
-    (define-key map [(control ?u)] #'eshell-kill-input)
-    (define-key map [(control ?w)] #'backward-kill-word)
-    (define-key map [(control ?y)] #'eshell-repeat-argument)
-    map))
+(defvar-keymap eshell-mode-map
+  "C-c"   'eshell-command-map
+  "RET"   #'eshell-send-input
+  "M-RET" #'eshell-queue-input
+  "C-M-l" #'eshell-show-output
+  "C-a"   #'eshell-bol)
+
+(defvar-keymap eshell-command-map
+  :prefix 'eshell-command-map
+  "M-o" #'eshell-mark-output
+  "M-d" #'eshell-toggle-direct-send
+  "C-a" #'eshell-bol
+  "C-b" #'eshell-backward-argument
+  "C-e" #'eshell-show-maximum-output
+  "C-f" #'eshell-forward-argument
+  "C-m" #'eshell-copy-old-input
+  "C-o" #'eshell-kill-output
+  "C-r" #'eshell-show-output
+  "C-t" #'eshell-truncate-buffer
+  "C-u" #'eshell-kill-input
+  "C-w" #'backward-kill-word
+  "C-y" #'eshell-repeat-argument)
 
 ;;; User Functions:
 
diff --git a/lisp/eshell/esh-module.el b/lisp/eshell/esh-module.el
index 97ffedae62..ade151d7cd 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2000, 2002-2022 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 7d31845528..d96b77ddd3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 7a0b26a065..5ed692fb5a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
@@ -101,15 +101,13 @@ information, for example."
 (defvar eshell-process-list nil
   "A list of the current status of subprocesses.")
 
-(defvar eshell-proc-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map (kbd "C-c M-i") #'eshell-insert-process)
-    (define-key map (kbd "C-c C-c") #'eshell-interrupt-process)
-    (define-key map (kbd "C-c C-k") #'eshell-kill-process)
-    (define-key map (kbd "C-c C-d") #'eshell-send-eof-to-process)
-    (define-key map (kbd "C-c C-s") #'list-processes)
-    (define-key map (kbd "C-c C-\\") #'eshell-quit-process)
-    map))
+(defvar-keymap eshell-proc-mode-map
+  "C-c M-i"  #'eshell-insert-process
+  "C-c C-c"  #'eshell-interrupt-process
+  "C-c C-k"  #'eshell-kill-process
+  "C-c C-d"  #'eshell-send-eof-to-process
+  "C-c C-s"  #'list-processes
+  "C-c C-\\" #'eshell-quit-process)
 
 ;;; Functions:
 
diff --git a/lisp/eshell/esh-util.el b/lisp/eshell/esh-util.el
index 72de6b13e2..0e04dbc7c9 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
@@ -63,11 +63,11 @@ has no effect."
 Setting this to nil is offered as an aid to debugging only."
   :type 'boolean)
 
-(defcustom eshell-private-file-modes 384 ; umask 177
+(defcustom eshell-private-file-modes #o600 ; umask 177
   "The file-modes value to use for creating \"private\" files."
   :type 'integer)
 
-(defcustom eshell-private-directory-modes 448 ; umask 077
+(defcustom eshell-private-directory-modes #o700 ; umask 077
   "The file-modes value to use for creating \"private\" directories."
   :type 'integer)
 
diff --git a/lisp/eshell/esh-var.el b/lisp/eshell/esh-var.el
index fa9853ae00..5c8dacd980 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
@@ -205,14 +205,11 @@ Additionally, each member may specify if it should be 
copied to the
 environment of created subprocesses."
   :type '(repeat (list string sexp
                       (choice (const :tag "Copy to environment" t)
-                              (const :tag "Use only in Eshell" nil)))))
+                               (const :tag "Use only in Eshell" nil))))
+  :risky t)
 
-(put 'eshell-variable-aliases-list 'risky-local-variable t)
-
-(defvar eshell-var-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map (kbd "C-c M-v") #'eshell-insert-envvar)
-    map))
+(defvar-keymap eshell-var-mode-map
+  "C-c M-v" #'eshell-insert-envvar)
 
 ;;; Functions:
 
diff --git a/lisp/eshell/eshell.el b/lisp/eshell/eshell.el
index c66ad00072..5c356e8928 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 ;; Version: 2.4.2
@@ -260,7 +260,7 @@ information on Eshell, see Info node `(eshell)Top'."
                   (t
                    (get-buffer-create eshell-buffer-name)))))
     (cl-assert (and buf (buffer-live-p buf)))
-    (pop-to-buffer-same-window buf)
+    (pop-to-buffer buf display-comint-buffer-action)
     (unless (derived-mode-p 'eshell-mode)
       (eshell-mode))
     buf))
diff --git a/lisp/expand.el b/lisp/expand.el
index deeec8c59d..44f41c5e1e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1996, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Frederic Lepied <Frederic.Lepied@sugix.frmug.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/ezimage.el b/lisp/ezimage.el
index 57033cde05..9e5a08e682 100644
--- a/lisp/ezimage.el
+++ b/lisp/ezimage.el
@@ -1,6 +1,6 @@
 ;;; ezimage.el --- Generalized Image management  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1999-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 50302b9682..00560f9d2e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
 ;;
 ;; Author: Miles Bader <miles@gnu.org>
 ;; Keywords: faces, face remapping, display, user commands
@@ -390,6 +390,31 @@ a top-level keymap, `text-scale-increase' or
                (lambda () (interactive) (text-scale-adjust (abs inc))))))
          map))))) ;; )
 
+(defvar-local text-scale--pinch-start-scale 0
+  "The text scale at the start of a pinch sequence.")
+
+;;;###autoload (define-key global-map [pinch] 'text-scale-pinch)
+;;;###autoload
+(defun text-scale-pinch (event)
+  "Adjust the height of the default face by the scale in the pinch event 
EVENT."
+  (interactive "e")
+  (when (not (eq (event-basic-type event) 'pinch))
+    (error "`text-scale-pinch' bound to bad event type"))
+  (let ((window (posn-window (nth 1 event)))
+        (scale (nth 4 event))
+        (dx (nth 2 event))
+        (dy (nth 3 event))
+        (angle (nth 5 event)))
+    (with-selected-window window
+      (when (and (zerop dx)
+                 (zerop dy)
+                 (zerop angle))
+        (setq text-scale--pinch-start-scale
+              (if text-scale-mode text-scale-mode-amount 0)))
+      (text-scale-set
+       (+ text-scale--pinch-start-scale
+          (round (log scale text-scale-mode-step)))))))
+
 
 ;; ----------------------------------------------------------------
 ;; buffer-face-mode
diff --git a/lisp/facemenu.el b/lisp/facemenu.el
index fe458b8c07..b3e0169632 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1996, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Boris Goldowsky <boris@gnu.org>
 ;; Keywords: faces
diff --git a/lisp/faces.el b/lisp/faces.el
index 5ed6bd1766..df09978769 100644
--- a/lisp/faces.el
+++ b/lisp/faces.el
@@ -1,6 +1,6 @@
 ;;; faces.el --- Lisp faces -*- lexical-binding: t -*-
 
-;; Copyright (C) 1992-1996, 1998-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1992-1996, 1998-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: internal
@@ -686,8 +686,10 @@ and `?' are allowed.
 
 VALUE specifies the relative proportionate width of the font to use.
 It must be one of the symbols `ultra-condensed', `extra-condensed',
-`condensed', `semi-condensed', `normal', `semi-expanded', `expanded',
-`extra-expanded', or `ultra-expanded'.
+`condensed' (a.k.a. `compressed', a.k.a. `narrow'),
+`semi-condensed' (a.k.a. `demi-condensed'), `normal' (a.k.a. `medium',
+a.k.a. `regular'), `semi-expanded' (a.k.a. `demi-expanded'),
+`expanded', `extra-expanded', or `ultra-expanded' (a.k.a. `wide').
 
 `:height'
 
@@ -703,9 +705,11 @@ for it to be relative to).
 `:weight'
 
 VALUE specifies the weight of the font to use.  It must be one of
-the symbols `ultra-heavy', `heavy', `ultra-bold', `extra-bold',
-`bold', `semi-bold', `medium', `normal', `book', `semi-light',
-`light', `extra-light', `ultra-light', or `thin'.
+the symbols `ultra-heavy', `heavy' (a.k.a. `black'),
+`ultra-bold' (a.k.a. `extra-bold'), `bold',
+`semi-bold' (a.k.a. `demi-bold'), `medium', `normal' (a.k.a. `regular',
+a.k.a. `book'), `semi-light' (a.k.a. `demi-light'),
+`light', `extra-light' (a.k.a. `ultra-light'), or `thin'.
 
 `:slant'
 
@@ -1172,13 +1176,13 @@ an integer value."
            (:height
             'integerp)
            (:stipple
-            (and (memq (window-system frame) '(x ns)) ; No stipple on w32 or 
haiku
+            (and (memq (window-system frame) '(x ns pgtk)) ; No stipple on w32 
or haiku
                  (mapcar #'list
                          (apply #'nconc
                                 (mapcar (lambda (dir)
                                           (and (file-readable-p dir)
                                                (file-directory-p dir)
-                                               (directory-files dir)))
+                                               (directory-files dir 'full)))
                                         x-bitmap-file-path)))))
            (:inherit
             (cons '("none" . nil)
@@ -1516,7 +1520,7 @@ If FRAME is nil, the current FRAME is used."
            match (cond ((eq req 'type)
                         (or (memq (window-system frame) options)
                             (and (memq 'graphic options)
-                                 (memq (window-system frame) '(x w32 ns)))
+                                 (memq (window-system frame) '(x w32 ns pgtk)))
                             ;; FIXME: This should be revisited to use
                             ;; display-graphic-p, provided that the
                             ;; color selection depends on the number
@@ -2381,6 +2385,15 @@ If you set `term-file-prefix' to nil, this function does 
nothing."
   "The basic variable-pitch face."
   :group 'basic-faces)
 
+(defface variable-pitch-text
+  '((t :inherit variable-pitch
+       :height 1.1))
+  "The proportional face used for longer texts.
+This is like the `variable-pitch' face, but is slightly bigger by
+default."
+  :version "29.1"
+  :group 'basic-faces)
+
 (defface shadow
   '((((class color grayscale) (min-colors 88) (background light))
      :foreground "grey50")
@@ -2621,7 +2634,7 @@ See `mode-line-display' for the face used on mode lines."
   :group 'basic-faces)
 
 (defface mode-line-active
-  '((t :inherit (mode-line variable-pitch)))
+  '((t :inherit mode-line))
   "Face for the selected mode line.
 This inherits from the `mode-line' face."
   :version "29.1"
@@ -2630,7 +2643,7 @@ This inherits from the `mode-line' face."
 
 (defface mode-line-inactive
   '((default
-     :inherit (mode-line variable-pitch))
+     :inherit mode-line)
     (((class color) (min-colors 88) (background light))
      :weight light
      :box (:line-width -1 :color "grey75" :style nil)
@@ -2831,7 +2844,7 @@ Note: Other faces cannot inherit from the cursor face."
   '((default
      :box (:line-width 1 :style released-button)
      :foreground "black")
-    (((type x w32 ns haiku) (class color))
+    (((type x w32 ns haiku pgtk) (class color))
      :background "grey75")
     (((type x) (class mono))
      :background "grey"))
@@ -2954,7 +2967,7 @@ It is used for characters of no fonts too."
   :group 'basic-faces)
 
 (defface read-multiple-choice-face
-  '((t (:inherit underline
+  '((t (:inherit (help-key-binding underline)
         :weight bold)))
   "Face for the symbol name in `read-multiple-choice' output."
   :group 'basic-faces
diff --git a/lisp/ffap.el b/lisp/ffap.el
index 5d3cee591b..f9220817a7 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-1997, 2000-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1997, 2000-2022 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 4223878b0e..8232357982 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2000-2022 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 cd60600a25..b4f6179a93 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 
diff --git a/lisp/filenotify.el b/lisp/filenotify.el
index 26954cc73f..94e07289e3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 
diff --git a/lisp/files-x.el b/lisp/files-x.el
index c7cc076f84..e86ba8f8d0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 f72723ab7d..48e0252e06 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1987, 1992-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Package: emacs
@@ -2010,12 +2010,14 @@ otherwise a string <2> or <3> or ... is appended to get 
an unused name.
 Emacs treats buffers whose names begin with a space as internal buffers.
 To avoid confusion when visiting a file whose name begins with a space,
 this function prepends a \"|\" to the final result if necessary."
-  (let ((lastname (file-name-nondirectory filename)))
-    (if (string= lastname "")
-       (setq lastname filename))
-    (generate-new-buffer (if (string-prefix-p " " lastname)
-                            (concat "|" lastname)
-                          lastname))))
+  (let* ((lastname (file-name-nondirectory filename))
+        (lastname (if (string= lastname "")
+                      filename lastname))
+        (buf (generate-new-buffer (if (string-prefix-p " " lastname)
+                                      (concat "|" lastname)
+                                    lastname))))
+    (uniquify--create-file-buffer-advice buf filename)
+    buf))
 
 (defcustom automount-dir-prefix (purecopy "^/tmp_mnt/")
   "Regexp to match the automounter prefix in a directory name."
@@ -4081,11 +4083,8 @@ It is dangerous if either of these conditions are met:
 (defun hack-one-local-variable-quotep (exp)
   (and (consp exp) (eq (car exp) 'quote) (consp (cdr exp))))
 
-(defun hack-one-local-variable-constantp (exp)
-  (or (and (not (symbolp exp)) (not (consp exp)))
-      (memq exp '(t nil))
-      (keywordp exp)
-      (hack-one-local-variable-quotep exp)))
+(define-obsolete-function-alias 'hack-one-local-variable-constantp
+  #'macroexp-const-p "29.1")
 
 (defun hack-one-local-variable-eval-safep (exp)
   "Return non-nil if it is safe to eval EXP when it is found in a file."
@@ -4123,7 +4122,7 @@ It is dangerous if either of these conditions are met:
                 (cond ((eq prop t)
                        (let ((ok t))
                          (dolist (arg (cdr exp))
-                           (unless (hack-one-local-variable-constantp arg)
+                           (unless (macroexp-const-p arg)
                              (setq ok nil)))
                          ok))
                       ((functionp prop)
@@ -4745,7 +4744,6 @@ using \\<minibuffer-local-map>\\[next-history-element].
 If optional second arg CONFIRM is non-nil, this function
 asks for confirmation before overwriting an existing file.
 Interactively, confirmation is required unless you supply a prefix argument."
-;;  (interactive "FWrite file: ")
   (interactive
    (list (if buffer-file-name
             (read-file-name "Write file: "
@@ -4756,33 +4754,44 @@ Interactively, confirmation is required unless you 
supply a prefix argument."
                            default-directory)
                           nil nil))
         (not current-prefix-arg)))
-  (or (null filename) (string-equal filename "")
-      (progn
-       ;; If arg is a directory name,
-       ;; use the default file name, but in that directory.
-       (if (directory-name-p filename)
-           (setq filename (concat filename
-                                  (file-name-nondirectory
-                                   (or buffer-file-name (buffer-name))))))
-       (and confirm
-            (file-exists-p filename)
-            ;; NS does its own confirm dialog.
-            (not (and (eq (framep-on-display) 'ns)
-                      (listp last-nonmenu-event)
-                      use-dialog-box))
-            (or (y-or-n-p (format-message
-                            "File `%s' exists; overwrite? " filename))
-                (user-error "Canceled")))
-       (set-visited-file-name filename (not confirm))))
-  (set-buffer-modified-p t)
-  ;; Make buffer writable if file is writable.
-  (and buffer-file-name
-       (file-writable-p buffer-file-name)
-       (setq buffer-read-only nil))
-  (save-buffer)
-  ;; It's likely that the VC status at the new location is different from
-  ;; the one at the old location.
-  (vc-refresh-state))
+  (let ((old-modes
+         (and buffer-file-name
+              ;; File may have gone away; ignore errors in that case.
+              (ignore-errors (file-modes buffer-file-name)))))
+    (or (null filename) (string-equal filename "")
+        (progn
+         ;; If arg is a directory name,
+         ;; use the default file name, but in that directory.
+         (if (directory-name-p filename)
+             (setq filename (concat filename
+                                    (file-name-nondirectory
+                                     (or buffer-file-name (buffer-name))))))
+         (and confirm
+              (file-exists-p filename)
+              ;; NS does its own confirm dialog.
+              (not (and (eq (framep-on-display) 'ns)
+                        (listp last-nonmenu-event)
+                        use-dialog-box))
+              (or (y-or-n-p (format-message
+                              "File `%s' exists; overwrite? " filename))
+                  (user-error "Canceled")))
+         (set-visited-file-name filename (not confirm))))
+    (set-buffer-modified-p t)
+    ;; Make buffer writable if file is writable.
+    (and buffer-file-name
+         (file-writable-p buffer-file-name)
+         (setq buffer-read-only nil))
+    (save-buffer)
+    ;; If the old file was executable, then make the new file
+    ;; executable, too.
+    (when (and old-modes
+               (not (zerop (logand #o111 old-modes))))
+      (set-file-modes buffer-file-name
+                      (logior (logand #o111 old-modes)
+                              (file-modes buffer-file-name))))
+    ;; It's likely that the VC status at the new location is different from
+    ;; the one at the old location.
+    (vc-refresh-state)))
 
 (defun file-extended-attributes (filename)
   "Return an alist of extended attributes of file FILENAME.
@@ -5787,7 +5796,7 @@ to return a predicate used to check buffers."
   ;; FIXME nil should not be a valid option, let alone the default,
   ;; eg so that add-function can be used.
   :type '(choice (const :tag "Default" nil)
-                 (function :tag "Only in subdirs of root"
+                 (function :tag "Only in subdirs of current project"
                            save-some-buffers-root)
                  (function :tag "Custom function"))
   :version "26.1")
@@ -5823,21 +5832,22 @@ all with no questions.
 Optional second argument PRED determines which buffers are considered:
 If PRED is nil, all the file-visiting buffers are considered.
 If PRED is t, then certain non-file buffers will also be considered.
-If PRED is a zero-argument function, it indicates for each buffer whether
-to consider it or not when called with that buffer current.
+If PRED is a function, it is called with no argument in each buffer and
+should return non-nil if that buffer should be considered.
 PRED defaults to the value of `save-some-buffers-default-predicate'.
 
 See `save-some-buffers-action-alist' if you want to
 change the additional actions you can take on files."
   (interactive "P")
   (unless pred
-    (setq pred save-some-buffers-default-predicate))
-  ;; Allow `pred' to be a function that returns a predicate
-  ;; with lexical bindings in its original environment (bug#46374).
-  (when (and (symbolp pred) (get pred 'save-some-buffers-function))
-    (let ((pred-fun (and (functionp pred) (funcall pred))))
-      (when (functionp pred-fun)
-        (setq pred pred-fun))))
+    (setq pred
+          ;; Allow `pred' to be a function that returns a predicate
+          ;; with lexical bindings in its original environment (bug#46374).
+          (if (and (symbolp save-some-buffers-default-predicate)
+                   (get save-some-buffers-default-predicate
+                        'save-some-buffers-function))
+              (funcall save-some-buffers-default-predicate)
+            save-some-buffers-default-predicate)))
   (let* ((switched-buffer nil)
          (save-some-buffers--switch-window-callback
           (lambda (buffer)
@@ -7211,11 +7221,18 @@ DIRNAME is globbed by the shell if necessary.
 Prefix arg (second arg if noninteractive) means supply -l switch to `ls'.
 Actions controlled by variables `list-directory-brief-switches'
 and `list-directory-verbose-switches'."
-  (interactive (let ((pfx current-prefix-arg))
-                (list (read-directory-name (if pfx "List directory (verbose): "
-                                        "List directory (brief): ")
-                                      nil default-directory nil)
-                      pfx)))
+  (interactive
+   (let ((pfx current-prefix-arg))
+     (list (read-file-name
+            (if pfx "List directory (verbose): "
+             "List directory (brief): ")
+           nil default-directory t
+            nil
+            (lambda (file)
+              (or (file-directory-p file)
+                  (insert-directory-wildcard-in-dir-p
+                   (expand-file-name file)))))
+           pfx)))
   (let ((switches (if verbose list-directory-verbose-switches
                    list-directory-brief-switches))
        buffer)
@@ -7666,21 +7683,7 @@ normally equivalent short `-D' option is just passed on 
to
                                            (if val coding-no-eol coding))
                      (if val
                          (put-text-property pos (point)
-                                            'dired-filename t)))))))
-
-         (if full-directory-p
-             ;; Try to insert the amount of free space.
-             (save-excursion
-               (goto-char beg)
-               ;; First find the line to put it on.
-               (when (re-search-forward "^ *\\(total\\)" nil t)
-                 ;; Replace "total" with "total used in directory" to
-                 ;; avoid confusion.
-                 (replace-match "total used in directory" nil nil nil 1)
-                 (let ((available (get-free-disk-space file)))
-                   (when available
-                     (end-of-line)
-                     (insert " available " available))))))))))
+                                            'dired-filename t)))))))))))
 
 (defun insert-directory-adj-pos (pos error-lines)
   "Convert `ls --dired' file name position value POS to a buffer position.
diff --git a/lisp/filesets.el b/lisp/filesets.el
index 9182c53945..0bc44ecd91 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 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 bb2e97d866..e33a4ee61b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 ebdb10ae9f..c67138a800 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, 1994-1995, 2000-2021 Free Software Foundation,
+;; Copyright (C) 1992, 1994-1995, 2000-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Roland McGrath <roland@gnu.org>,
diff --git a/lisp/find-file.el b/lisp/find-file.el
index afe6cb5150..809592413d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1995, 2001-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/lisp/find-lisp.el b/lisp/find-lisp.el
index 6062bd2643..d4d899aced 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/lisp/finder.el b/lisp/finder.el
index 00f321b802..5a6fe45192 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, 1997-1999, 2001-2021 Free Software Foundation,
+;; Copyright (C) 1992, 1997-1999, 2001-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Eric S. Raymond <esr@snark.thyrsus.com>
diff --git a/lisp/flow-ctrl.el b/lisp/flow-ctrl.el
index adb52d7253..3ee33c0d14 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-2021 Free Software Foundation,
+;; Copyright (C) 1990-1991, 1994, 2001-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Kevin Gallagher
diff --git a/lisp/foldout.el b/lisp/foldout.el
index 8925241df3..4b192a7b6a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 2001-2022 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 3761275bbf..6c721899d4 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-2021 Free Software Foundation,
+;; Copyright (C) 1995-1997, 1999, 2001-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Anders Lindgren
diff --git a/lisp/font-core.el b/lisp/font-core.el
index 95bf46c9b8..2b75309ff3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: languages, faces
@@ -66,7 +66,6 @@ Other variables include that for syntactic keyword 
fontification,
 functions, `font-lock-fontify-buffer-function',
 `font-lock-unfontify-buffer-function', `font-lock-fontify-region-function',
 `font-lock-unfontify-region-function', and `font-lock-inhibit-thing-lock'.")
-;;;###autoload
 (put 'font-lock-defaults 'risky-local-variable t)
 
 (defvar font-lock-function 'font-lock-default-function
diff --git a/lisp/font-lock.el b/lisp/font-lock.el
index c2590eb3c1..083bfb8626 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2022 Free Software Foundation, Inc.
 
 ;; Author: Jamie Zawinski
 ;;     Richard Stallman
diff --git a/lisp/format-spec.el b/lisp/format-spec.el
index 202d65d8fc..45c19aebc8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: tools
diff --git a/lisp/format.el b/lisp/format.el
index 8ae51f19eb..6c7524891e 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-2021 Free Software
+;; Copyright (C) 1994-1995, 1997, 1999, 2001-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Boris Goldowsky <boris@gnu.org>
diff --git a/lisp/forms.el b/lisp/forms.el
index 551a1ba3c9..8bfeaad1c1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1991-2022 Free Software Foundation, Inc.
 
 ;; Author: Johan Vromans <jvromans@squirrel.nl>
 
diff --git a/lisp/frame.el b/lisp/frame.el
index 1319759e74..62b73f3157 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-2021 Free Software
+;; Copyright (C) 1993-1994, 1996-1997, 2000-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
@@ -808,12 +808,16 @@ also select the new frame."
     new-frame))
 
 (defvar before-make-frame-hook nil
-  "Functions to run before `make-frame' creates a new frame.")
+  "Functions to run before `make-frame' creates a new frame.
+Note that these functions are usually not run for the initial
+frame, unless you add them to the hook in your early-init file.")
 
 (defvar after-make-frame-functions nil
   "Functions to run after `make-frame' created a new frame.
 The functions are run with one argument, the newly created
-frame.")
+frame.
+Note that these functions are usually not run for the initial
+frame, unless you add them to the hook in your early-init file.")
 
 (defvar after-setting-font-hook nil
   "Functions to run after a frame's font has been changed.")
@@ -1633,6 +1637,7 @@ live frame and defaults to the selected one."
 (declare-function x-frame-geometry "xfns.c" (&optional frame))
 (declare-function w32-frame-geometry "w32fns.c" (&optional frame))
 (declare-function ns-frame-geometry "nsfns.m" (&optional frame))
+(declare-function pgtk-frame-geometry "pgtkfns.c" (&optional frame))
 (declare-function haiku-frame-geometry "haikufns.c" (&optional frame))
 
 (defun frame-geometry (&optional frame)
@@ -1683,6 +1688,8 @@ and width values are in pixels.
       (w32-frame-geometry frame))
      ((eq frame-type 'ns)
       (ns-frame-geometry frame))
+     ((eq frame-type 'pgtk)
+      (pgtk-frame-geometry frame))
      ((eq frame-type 'haiku)
       (haiku-frame-geometry frame))
      (t
@@ -1809,6 +1816,7 @@ of frames like calls to map a frame or change its 
visibility."
 (declare-function x-frame-edges "xfns.c" (&optional frame type))
 (declare-function w32-frame-edges "w32fns.c" (&optional frame type))
 (declare-function ns-frame-edges "nsfns.m" (&optional frame type))
+(declare-function pgtk-frame-edges "pgtkfns.c" (&optional frame type))
 (declare-function haiku-frame-edges "haikufns.c" (&optional frame type))
 
 (defun frame-edges (&optional frame type)
@@ -1833,6 +1841,8 @@ FRAME."
       (w32-frame-edges frame type))
      ((eq frame-type 'ns)
       (ns-frame-edges frame type))
+     ((eq frame-type 'pgtk)
+      (pgtk-frame-edges frame type))
      ((eq frame-type 'haiku)
       (haiku-frame-edges frame type))
      (t
@@ -1841,6 +1851,7 @@ FRAME."
 (declare-function w32-mouse-absolute-pixel-position "w32fns.c")
 (declare-function x-mouse-absolute-pixel-position "xfns.c")
 (declare-function ns-mouse-absolute-pixel-position "nsfns.m")
+(declare-function pgtk-mouse-absolute-pixel-position "pgtkfns.c")
 (declare-function haiku-mouse-absolute-pixel-position "haikufns.c")
 
 (defun mouse-absolute-pixel-position ()
@@ -1856,11 +1867,14 @@ position (0, 0) of the selected frame's terminal."
       (w32-mouse-absolute-pixel-position))
      ((eq frame-type 'ns)
       (ns-mouse-absolute-pixel-position))
+     ((eq frame-type 'pgtk)
+      (pgtk-mouse-absolute-pixel-position))
      ((eq frame-type 'haiku)
       (haiku-mouse-absolute-pixel-position))
      (t
       (cons 0 0)))))
 
+(declare-function pgtk-set-mouse-absolute-pixel-position "pgtkfns.c" (x y))
 (declare-function ns-set-mouse-absolute-pixel-position "nsfns.m" (x y))
 (declare-function w32-set-mouse-absolute-pixel-position "w32fns.c" (x y))
 (declare-function x-set-mouse-absolute-pixel-position "xfns.c" (x y))
@@ -1872,6 +1886,8 @@ The coordinates X and Y are interpreted in pixels 
relative to a
 position (0, 0) of the selected frame's terminal."
   (let ((frame-type (framep-on-display)))
     (cond
+     ((eq frame-type 'pgtk)
+      (pgtk-set-mouse-absolute-pixel-position x y))
      ((eq frame-type 'ns)
       (ns-set-mouse-absolute-pixel-position x y))
      ((eq frame-type 'x)
@@ -1972,6 +1988,7 @@ workarea attribute."
 (declare-function x-frame-list-z-order "xfns.c" (&optional display))
 (declare-function w32-frame-list-z-order "w32fns.c" (&optional display))
 (declare-function ns-frame-list-z-order "nsfns.m" (&optional display))
+(declare-function pgtk-frame-list-z-order "pgtkfns.c" (&optional display))
 (declare-function haiku-frame-list-z-order "haikufns.c" (&optional display))
 
 (defun frame-list-z-order (&optional display)
@@ -1993,12 +2010,16 @@ Return nil if DISPLAY contains no Emacs frame."
       (w32-frame-list-z-order display))
      ((eq frame-type 'ns)
       (ns-frame-list-z-order display))
+     ((eq frame-type 'pgtk)
+      (pgtk-frame-list-z-order display))
      ((eq frame-type 'haiku)
       (haiku-frame-list-z-order display)))))
 
 (declare-function x-frame-restack "xfns.c" (frame1 frame2 &optional above))
 (declare-function w32-frame-restack "w32fns.c" (frame1 frame2 &optional above))
 (declare-function ns-frame-restack "nsfns.m" (frame1 frame2 &optional above))
+(declare-function pgtk-frame-restack "pgtkfns.c" (frame1 frame2 &optional 
above))
+(declare-function haiku-frame-restack "haikufns.c" (frame1 frame2 &optional 
above))
 
 (defun frame-restack (frame1 frame2 &optional above)
   "Restack FRAME1 below FRAME2.
@@ -2028,7 +2049,11 @@ Some window managers may refuse to restack windows."
          ((eq frame-type 'w32)
           (w32-frame-restack frame1 frame2 above))
          ((eq frame-type 'ns)
-          (ns-frame-restack frame1 frame2 above))))
+          (ns-frame-restack frame1 frame2 above))
+         ((eq frame-type 'haiku)
+          (haiku-frame-restack frame1 frame2 above))
+         ((eq frame-type 'pgtk)
+          (pgtk-frame-restack frame1 frame2 above))))
     (error "Cannot restack frames")))
 
 (defun frame-size-changed-p (&optional frame)
@@ -2075,8 +2100,8 @@ frame's display)."
      ((eq frame-type 'w32)
       (with-no-warnings
        (> w32-num-mouse-buttons 0)))
-     ((memq frame-type '(x ns haiku))
-      t)    ;; We assume X, NeXTstep and Haiku *always* have a pointing device
+     ((memq frame-type '(x ns haiku pgtk))
+      t)    ;; We assume X, NeXTstep, GTK, and Haiku *always* have a pointing 
device
      (t
       (or (and (featurep 'xt-mouse)
               xterm-mouse-mode)
@@ -2101,7 +2126,7 @@ frames and several different fonts at once.  This is true 
for displays
 that use a window system such as X, and false for text-only terminals.
 DISPLAY can be a display name, a frame, or nil (meaning the selected
 frame's display)."
-  (not (null (memq (framep-on-display display) '(x w32 ns haiku)))))
+  (not (null (memq (framep-on-display display) '(x w32 ns pgtk haiku)))))
 
 (defun display-images-p (&optional display)
   "Return non-nil if DISPLAY can display images.
@@ -2129,7 +2154,7 @@ frame's display)."
       ;; a Windows DOS Box.
       (with-no-warnings
        (not (null dos-windows-version))))
-     ((memq frame-type '(x w32 ns))
+     ((memq frame-type '(x w32 ns pgtk))
       t)
      (t
       nil))))
@@ -2139,7 +2164,7 @@ frame's display)."
 This means that, for example, DISPLAY can differentiate between
 the keybinding RET and [return]."
   (let ((frame-type (framep-on-display display)))
-    (or (memq frame-type '(x w32 ns pc))
+    (or (memq frame-type '(x w32 ns pc pgtk))
         ;; MS-DOS and MS-Windows terminals have built-in support for
         ;; function (symbol) keys
         (memq system-type '(ms-dos windows-nt)))))
@@ -2152,7 +2177,7 @@ DISPLAY should be either a frame or a display name (a 
string).
 If DISPLAY is omitted or nil, it defaults to the selected frame's display."
   (let ((frame-type (framep-on-display display)))
     (cond
-     ((memq frame-type '(x w32 ns haiku))
+     ((memq frame-type '(x w32 ns haiku pgtk))
       (x-display-screens display))
      (t
       1))))
@@ -2172,7 +2197,7 @@ with DISPLAY.  To get information for each physical 
monitor, use
 `display-monitor-attributes-list'."
   (let ((frame-type (framep-on-display display)))
     (cond
-     ((memq frame-type '(x w32 ns haiku))
+     ((memq frame-type '(x w32 ns haiku pgtk))
       (x-display-pixel-height display))
      (t
       (frame-height (if (framep display) display (selected-frame)))))))
@@ -2192,7 +2217,7 @@ with DISPLAY.  To get information for each physical 
monitor, use
 `display-monitor-attributes-list'."
   (let ((frame-type (framep-on-display display)))
     (cond
-     ((memq frame-type '(x w32 ns haiku))
+     ((memq frame-type '(x w32 ns haiku pgtk))
       (x-display-pixel-width display))
      (t
       (frame-width (if (framep display) display (selected-frame)))))))
@@ -2230,7 +2255,7 @@ For graphical terminals, note that on \"multi-monitor\" 
setups this
 refers to the height in millimeters for all physical monitors
 associated with DISPLAY.  To get information for each physical
 monitor, use `display-monitor-attributes-list'."
-  (and (memq (framep-on-display display) '(x w32 ns haiku))
+  (and (memq (framep-on-display display) '(x w32 ns haiku pgtk))
        (or (cddr (assoc (or display (frame-parameter nil 'display))
                        display-mm-dimensions-alist))
           (cddr (assoc t display-mm-dimensions-alist))
@@ -2251,7 +2276,7 @@ For graphical terminals, note that on \"multi-monitor\" 
setups this
 refers to the width in millimeters for all physical monitors
 associated with DISPLAY.  To get information for each physical
 monitor, use `display-monitor-attributes-list'."
-  (and (memq (framep-on-display display) '(x w32 ns haiku))
+  (and (memq (framep-on-display display) '(x w32 ns haiku pgtk))
        (or (cadr (assoc (or display (frame-parameter nil 'display))
                        display-mm-dimensions-alist))
           (cadr (assoc t display-mm-dimensions-alist))
@@ -2269,7 +2294,7 @@ DISPLAY can be a display name or a frame.
 If DISPLAY is omitted or nil, it defaults to the selected frame's display."
   (let ((frame-type (framep-on-display display)))
     (cond
-     ((memq frame-type '(x w32 ns haiku))
+     ((memq frame-type '(x w32 ns haiku pgtk))
       (x-display-backing-store display))
      (t
       'not-useful))))
@@ -2282,7 +2307,7 @@ DISPLAY can be a display name or a frame.
 If DISPLAY is omitted or nil, it defaults to the selected frame's display."
   (let ((frame-type (framep-on-display display)))
     (cond
-     ((memq frame-type '(x w32 ns haiku))
+     ((memq frame-type '(x w32 ns haiku pgtk))
       (x-display-save-under display))
      (t
       'not-useful))))
@@ -2295,7 +2320,7 @@ DISPLAY can be a display name or a frame.
 If DISPLAY is omitted or nil, it defaults to the selected frame's display."
   (let ((frame-type (framep-on-display display)))
     (cond
-     ((memq frame-type '(x w32 ns haiku))
+     ((memq frame-type '(x w32 ns haiku pgtk))
       (x-display-planes display))
      ((eq frame-type 'pc)
       4)
@@ -2310,7 +2335,7 @@ DISPLAY can be a display name or a frame.
 If DISPLAY is omitted or nil, it defaults to the selected frame's display."
   (let ((frame-type (framep-on-display display)))
     (cond
-     ((memq frame-type '(x w32 ns haiku))
+     ((memq frame-type '(x w32 ns haiku pgtk))
       (x-display-color-cells display))
      ((eq frame-type 'pc)
       16)
@@ -2327,7 +2352,7 @@ DISPLAY can be a display name or a frame.
 If DISPLAY is omitted or nil, it defaults to the selected frame's display."
   (let ((frame-type (framep-on-display display)))
     (cond
-     ((memq frame-type '(x w32 ns haiku))
+     ((memq frame-type '(x w32 ns haiku pgtk))
       (x-display-visual-class display))
      ((and (memq frame-type '(pc t))
           (tty-display-color-p display))
@@ -2341,6 +2366,8 @@ If DISPLAY is omitted or nil, it defaults to the selected 
frame's display."
                  (&optional display))
 (declare-function ns-display-monitor-attributes-list "nsfns.m"
                  (&optional terminal))
+(declare-function pgtk-display-monitor-attributes-list "pgtkfns.c"
+                 (&optional terminal))
 
 (defun display-monitor-attributes-list (&optional display)
   "Return a list of physical monitor attributes on DISPLAY.
@@ -2358,6 +2385,7 @@ of attribute keys and values as follows:
  mm-size  -- Width and height in millimeters in the form of
             (WIDTH HEIGHT)
  frames   -- List of frames dominated by the physical monitor
+ scale-factor (*) -- Scale factor (float)
  name (*) -- Name of the physical monitor as a string
  source (*) -- Source of multi-monitor information as a string
 
@@ -2389,6 +2417,8 @@ monitors."
       (w32-display-monitor-attributes-list display))
      ((eq frame-type 'ns)
       (ns-display-monitor-attributes-list display))
+     ((eq frame-type 'pgtk)
+      (pgtk-display-monitor-attributes-list display))
      (t
       (let ((geometry (list 0 0 (display-pixel-width display)
                            (display-pixel-height display))))
diff --git a/lisp/frameset.el b/lisp/frameset.el
index 998f4fb4ca..10714af1fa 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
 
 ;; Author: Juanma Barranquero <lekktu@gmail.com>
 ;; Keywords: convenience
diff --git a/lisp/fringe.el b/lisp/fringe.el
index 82cfacc6b6..8c833f0242 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 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 4505d8513f..ecfa8aab84 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2022 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 6ad87f06f2..1949f62609 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-2021 Free Software Foundation, Inc.
+  Copyright (C) 1997-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/gnus/ChangeLog.2 b/lisp/gnus/ChangeLog.2
index 35402dffd0..fd5fa0542f 100644
--- a/lisp/gnus/ChangeLog.2
+++ b/lisp/gnus/ChangeLog.2
@@ -1759,7 +1759,7 @@
 
        * pgg-gpg.el, pgg-pgp.el, pgg-pgp5.el, pgg.el: Reapply changes
        from 2003-04-03 to fix security problem.
-       See http://www.debian.org/security/2003/dsa-339.
+       See https://www.debian.org/security/2003/dsa-339.
 
 2003-07-23  Teodor Zlatanov  <tzz@lifelogs.com>
 
@@ -18538,7 +18538,7 @@
 
 See ChangeLog.1 for earlier changes.
 
-  Copyright (C) 2000-2002, 2004-2021 Free Software Foundation, Inc.
+  Copyright (C) 2000-2002, 2004-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/gnus/ChangeLog.3 b/lisp/gnus/ChangeLog.3
index 2aba3a5706..c75f5354ca 100644
--- a/lisp/gnus/ChangeLog.3
+++ b/lisp/gnus/ChangeLog.3
@@ -655,7 +655,7 @@
 2014-05-08  Glenn Morris  <rgm@gnu.org>
 
        * gnus-fun.el (gnus-grab-cam-face):
-       Do not use predictable temp-file name.  (http://bugs.debian.org/747100)
+       Do not use predictable temp-file name.  (https://bugs.debian.org/747100)
        This is CVE-2014-3421.
 
 2014-05-04  Glenn Morris  <rgm@gnu.org>
@@ -26325,7 +26325,7 @@
 
 See ChangeLog.2 for earlier changes.
 
-  Copyright (C) 2004-2021 Free Software Foundation, Inc.
+  Copyright (C) 2004-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lisp/gnus/canlock.el b/lisp/gnus/canlock.el
index dbdbaa83d7..71ed015e2c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-1999, 2001-2022 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 e6c4630a67..d2edfdf09f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 68a9098904..697ce01343 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2022 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 169a351c2c..fd66135b5c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2022 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 9a56e3a901..f26ab6ab4c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -769,7 +769,7 @@ Obsolete; use the face `gnus-signature' for customizations 
instead."
   :group 'gnus-article-signature)
 
 (defface gnus-header
-  '((t nil))
+  '((t :inherit variable-pitch-text))
   "Base face used for all Gnus header faces.
 All the other `gnus-header-' faces inherit from this face."
   :version "29.1"
@@ -1383,11 +1383,11 @@ This variable has no effect if 
`gnus-treat-unfold-headers' is nil."
                 (const :tag "all" t)
                 (regexp)))
 
-(defcustom gnus-treat-fold-headers nil
+(defcustom gnus-treat-fold-headers 'head
   "Fold headers.
 Valid values are nil, t, `head', `first', `last', an integer or a
 predicate.  See Info node `(gnus)Customizing Articles'."
-  :version "22.1"
+  :version "29.1"
   :group 'gnus-article-treat
   :link '(custom-manual "(gnus)Customizing Articles")
   :type gnus-article-treat-custom)
@@ -2212,6 +2212,14 @@ unfolded."
                (replace-match " " t t))))
          (goto-char (point-max)))))))
 
+(defun gnus--variable-pitch-p (face)
+  (when face
+    (or (eq face 'variable-pitch)
+        (let ((parent (face-attribute face :inherit)))
+          (if (eq parent 'unspecified)
+              nil
+            (seq-some #'gnus--variable-pitch-p (ensure-list parent)))))))
+
 (defun gnus-article-treat-fold-headers ()
   "Fold message headers."
   (interactive nil gnus-article-mode gnus-summary-mode)
@@ -2219,7 +2227,10 @@ unfolded."
     (while (not (eobp))
       (save-restriction
        (mail-header-narrow-to-field)
-       (mail-header-fold-field)
+        (if (not (gnus--variable-pitch-p (get-text-property (point) 'face)))
+           (mail-header-fold-field)
+          (forward-char 1)
+          (pixel-fill-region (point) (point-max) (pixel-fill-width)))
        (goto-char (point-max))))))
 
 (defun gnus-treat-smiley ()
@@ -4440,7 +4451,7 @@ If variable `gnus-use-long-file-name' is non-nil, it is
   "?" #'gnus-article-describe-briefly
   "<" #'beginning-of-buffer
   ">" #'end-of-buffer
-  "C-c TAB" #'gnus-info-find-node
+  "C-c C-i" #'gnus-info-find-node
   "C-c C-b" #'gnus-bug
   "R" #'gnus-article-reply-with-original
   "F" #'gnus-article-followup-with-original
@@ -6073,6 +6084,34 @@ If nil, don't show those extra buttons."
    ((equal (car handle) "multipart/encrypted")
     (gnus-add-wash-type 'encrypted)
     (gnus-mime-display-security handle))
+   ;; pkcs7-mime handling:
+   ;;
+   ;; although not really multipart these are structured internally by
+   ;; mm-dissect-buffer like multipart to not discard the decryption
+   ;; and verification results
+   ;;
+   ;; application/pkcs7-mime
+   ((and (equal (car handle) "application/pkcs7-mime")
+         (equal (mm-handle-multipart-ctl-parameter handle 'protocol)
+                "application/pkcs7-mime_signed-data"))
+    (gnus-add-wash-type 'signed)
+    (gnus-mime-display-security handle))
+   ((and (equal (car handle) "application/pkcs7-mime")
+         (equal (mm-handle-multipart-ctl-parameter handle 'protocol)
+                "application/pkcs7-mime_enveloped-data"))
+    (gnus-add-wash-type 'encrypted)
+    (gnus-mime-display-security handle))
+   ;; application/x-pkcs7-mime
+   ((and (equal (car handle) "application/x-pkcs7-mime")
+         (equal (mm-handle-multipart-ctl-parameter handle 'protocol)
+                "application/x-pkcs7-mime_signed-data"))
+    (gnus-add-wash-type 'signed)
+    (gnus-mime-display-security handle))
+   ((and (equal (car handle) "application/x-pkcs7-mime")
+         (equal (mm-handle-multipart-ctl-parameter handle 'protocol)
+                "application/x-pkcs7-mime_enveloped-data"))
+    (gnus-add-wash-type 'encrypted)
+    (gnus-mime-display-security handle))
    ;; Other multiparts are handled like multipart/mixed.
    (t
     (gnus-mime-display-mixed (cdr handle)))))
@@ -7896,8 +7935,8 @@ variable is the real callback function."
                       (function :tag "Callback")
                       (repeat :tag "Par"
                               :inline t
-                              (integer :tag "Regexp group")))))
-(put 'gnus-button-alist 'risky-local-variable t)
+                               (integer :tag "Regexp group"))))
+  :risky t)
 
 (defcustom gnus-header-button-alist
   '(("^\\(References\\|Message-I[Dd]\\|^In-Reply-To\\):" "<[^<>]+>"
@@ -7936,8 +7975,8 @@ HEADER is a regexp to match a header.  For a fuller 
explanation, see
                       (function :tag "Callback")
                       (repeat :tag "Par"
                               :inline t
-                              (integer :tag "Regexp group")))))
-(put 'gnus-header-button-alist 'risky-local-variable t)
+                               (integer :tag "Regexp group"))))
+  :risky t)
 
 ;;; Commands:
 
@@ -8822,11 +8861,19 @@ For example:
     (setq point (point))
     (with-current-buffer (mm-handle-multipart-original-buffer handle)
       (let* ((mm-verify-option 'known)
-            (mm-decrypt-option 'known)
-            (nparts (mm-possibly-verify-or-decrypt (cdr handle) handle)))
-       (unless (eq nparts (cdr handle))
-         (mm-destroy-parts (cdr handle))
-         (setcdr handle nparts))))
+             (mm-decrypt-option 'known)
+             (pkcs7-mime-p (or (equal (car handle) "application/pkcs7-mime")
+                               (equal (car handle) 
"application/x-pkcs7-mime")))
+             (nparts (if pkcs7-mime-p
+                         (list (mm-possibly-verify-or-decrypt
+                                (cadr handle) (cadadr handle)))
+                       (mm-possibly-verify-or-decrypt (cdr handle) handle))))
+        (unless (eq nparts (cdr handle))
+          ;; if pkcs7-mime don't destroy the parts as the buffer in
+          ;; the cdr still needs to be accessible
+          (when (not pkcs7-mime-p)
+            (mm-destroy-parts (cdr handle)))
+          (setcdr handle nparts))))
     (gnus-mime-display-security handle)
     (when region
       (delete-region (point) (cdr region))
@@ -8880,14 +8927,35 @@ For example:
   (let* ((protocol (mm-handle-multipart-ctl-parameter handle 'protocol))
         (gnus-tmp-type
          (concat
-          (or (nth 2 (assoc protocol mm-verify-function-alist))
-              (nth 2 (assoc protocol mm-decrypt-function-alist))
-              "Unknown")
-          (if (equal (car handle) "multipart/signed")
-              " Signed" " Encrypted")
-          " Part"))
-        (gnus-tmp-info
-         (or (mm-handle-multipart-ctl-parameter handle 'gnus-info)
+           (or (nth 2 (assoc protocol mm-verify-function-alist))
+               (nth 2 (assoc protocol mm-decrypt-function-alist))
+               "Unknown")
+           (cond ((equal (car handle) "multipart/signed") " Signed")
+                 ((equal (car handle) "multipart/encrypted") " Encrypted")
+                 ((and (equal (car handle) "application/pkcs7-mime")
+                       (equal
+                        (mm-handle-multipart-ctl-parameter handle 'protocol)
+                        "application/pkcs7-mime_signed-data"))
+                  " Signed")
+                 ((and (equal (car handle) "application/pkcs7-mime")
+                       (equal
+                        (mm-handle-multipart-ctl-parameter handle 'protocol)
+                        "application/pkcs7-mime_enveloped-data"))
+                  " Encrypted")
+                 ;; application/x-pkcs7-mime
+                 ((and (equal (car handle) "application/x-pkcs7-mime")
+                       (equal
+                        (mm-handle-multipart-ctl-parameter handle 'protocol)
+                        "application/x-pkcs7-mime_signed-data"))
+                  " Signed")
+                 ((and (equal (car handle) "application/x-pkcs7-mime")
+                       (equal
+                        (mm-handle-multipart-ctl-parameter handle 'protocol)
+                        "application/x-pkcs7-mime_enveloped-data"))
+                  " Encrypted"))
+           " Part"))
+         (gnus-tmp-info
+          (or (mm-handle-multipart-ctl-parameter handle 'gnus-info)
              "Undecided"))
         (gnus-tmp-details
          (mm-handle-multipart-ctl-parameter handle 'gnus-details))
diff --git a/lisp/gnus/gnus-async.el b/lisp/gnus/gnus-async.el
index fefd02c7bf..a1dc2b46e6 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2022 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 6c7ad0c474..173d2f0633 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2022 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 e9696b66a9..4f5b9bd342 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2022 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 34dba54c11..ee20ba3c7f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2022 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 e9c912109e..3ba2bbd6fe 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2022 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 3bc94f11e7..6ed9e32c91 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2022 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 e7af94ff50..f8714a95d4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1999-2022 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 12bf7bb926..15d0e6e191 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 944fd9795a..1b54344e12 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 e99247c0ca..d9da8529eb 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2022 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 7ecc97262a..cd2b53064b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 00769a5da6..3d8882b1a5 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2001-2022 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 7c56db0ba4..cd9b025ff0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2022 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 e4f3da9457..4bd2a4640a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2022 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 c727926731..300532de28 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2022 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 0754d7aa7b..0402837187 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 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 be57774fe9..d64e000d70 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 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 2ec001faee..ab874dd060 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -380,8 +380,8 @@ variables in the Lisp expression:
 `group-age': Time in seconds since the group was last read
            (see info node `(gnus)Group Timestamp')."
   :group 'gnus-group-visual
-  :type '(repeat (cons (sexp :tag "Form") face)))
-(put 'gnus-group-highlight 'risky-local-variable t)
+  :type '(repeat (cons (sexp :tag "Form") face))
+  :risky t)
 
 (defcustom gnus-new-mail-mark ?%
   "Mark used for groups with new mail."
@@ -409,8 +409,8 @@ requires an understanding of Lisp expressions.  Hopefully 
this will
 change in a future release.  For now, you can use the same
 variables in the Lisp expression as in `gnus-group-highlight'."
   :group 'gnus-group-icons
-  :type '(repeat (cons (sexp :tag "Form") file)))
-(put 'gnus-group-icon-list 'risky-local-variable t)
+  :type '(repeat (cons (sexp :tag "Form") file))
+  :risky t)
 
 (defcustom gnus-group-name-charset-method-alist nil
   "Alist of method and the charset for group names.
diff --git a/lisp/gnus/gnus-html.el b/lisp/gnus/gnus-html.el
index ef376f138e..45f1e6099e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 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 81e46d7a51..754a1d91cb 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
 
 ;; Author: Jan Tatarik <Jan.Tatarik@gmail.com>
 ;; Keywords: mail, icalendar, org
diff --git a/lisp/gnus/gnus-int.el b/lisp/gnus/gnus-int.el
index 255c11f137..5a619e8f07 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2022 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 7137efd730..bee7860efd 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2022 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 cdfdc9b731..3fb2ed3c62 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2022 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 df076c1175..bfe22be45f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2022 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 a5358e9ff4..211980aa9e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 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 878e879cd7..1223e38104 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 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 bb265642bc..f38f6f4ee2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2022 Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -1748,7 +1748,7 @@ this is a reply."
                            (concat "\"" str "\"")
                          str)))
              (when groups
-               (insert " ")))
+               (insert ",")))
            (insert "\n")))))))
 
 (defun gnus-mailing-list-followup-to ()
diff --git a/lisp/gnus/gnus-notifications.el b/lisp/gnus/gnus-notifications.el
index 8646904637..ec3892c991 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2022 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 fd4d3b8a76..d0edf2cba8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2022 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 a8f09b6371..da3ff47372 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2022 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 8ce88dc81e..0c281a997f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
 
 ;; Author: Ted Zlatanov <tzz@lifelogs.com>
 ;; Keywords: news registry
@@ -847,7 +847,8 @@ Overrides existing keywords with FORCE set non-nil."
 (defun gnus-registry-register-message-ids ()
   "Register the Message-ID of every article in the group."
   (unless (or (gnus-parameter-registry-ignore gnus-newsgroup-name)
-             (null gnus-registry-register-all))
+             (null gnus-registry-register-all)
+              (null (eieio-object-p gnus-registry-db)))
     (dolist (article gnus-newsgroup-articles)
       (let* ((id (gnus-registry-fetch-message-id-fast article))
              (groups (gnus-registry-get-id-key id 'group)))
diff --git a/lisp/gnus/gnus-rfc1843.el b/lisp/gnus/gnus-rfc1843.el
index c135ecea36..9872f7b994 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 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
new file mode 100644
index 0000000000..15ead1add4
--- /dev/null
+++ b/lisp/gnus/gnus-rmail.el
@@ -0,0 +1,142 @@
+;;; gnus-rmail.el --- Saving to rmail/babyl files  -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2021-2022 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:
+
+;;; Functions for saving to babyl/mail files.
+
+(require 'rmail)
+(require 'rmailsum)
+(require 'nnmail)
+
+(defun gnus-output-to-rmail (filename &optional ask)
+  "Append the current article to an Rmail file named FILENAME.
+In Emacs 22 this writes Babyl format; in Emacs 23 it writes mbox unless
+FILENAME exists and is Babyl format."
+  ;; Some of this codes is borrowed from rmailout.el.
+  (setq filename (expand-file-name filename))
+  ;; FIXME should we really be messing with this defcustom?
+  ;; It is not needed for the operation of this function.
+  (if (boundp 'rmail-default-rmail-file)
+      (setq rmail-default-rmail-file filename) ; 22
+    (setq rmail-default-file filename))        ; 23
+  (let ((artbuf (current-buffer))
+       (tmpbuf (gnus-get-buffer-create " *Gnus-output*"))
+        ;; Babyl rmail.el defines this, mbox does not.
+        (babyl (fboundp 'rmail-insert-rmail-file-header)))
+    (save-excursion
+      ;; Note that we ignore the possibility of visiting a Babyl
+      ;; format buffer in Emacs 23, since Rmail no longer supports that.
+     (or (get-file-buffer filename)
+         (progn
+           ;; In case someone wants to write to a Babyl file from Emacs 23.
+           (when (file-exists-p filename)
+             (setq babyl (mail-file-babyl-p filename))
+             t))
+         (if (or (not ask)
+                 (gnus-yes-or-no-p
+                  (concat "\"" filename "\" does not exist, create it? ")))
+             (let ((file-buffer (create-file-buffer filename)))
+               (with-current-buffer file-buffer
+                  (if (fboundp 'rmail-insert-rmail-file-header)
+                      (rmail-insert-rmail-file-header))
+                 (let ((require-final-newline nil)
+                       (coding-system-for-write mm-text-coding-system))
+                   (gnus-write-buffer filename)))
+               (kill-buffer file-buffer))
+           (error "Output file does not exist")))
+      (set-buffer tmpbuf)
+      (erase-buffer)
+      (insert-buffer-substring artbuf)
+      (if babyl
+          (gnus-convert-article-to-rmail)
+        ;; Non-Babyl case copied from gnus-output-to-mail.
+        (goto-char (point-min))
+        (if (looking-at "From ")
+            (forward-line 1)
+          (insert "From nobody " (current-time-string) "\n"))
+        (let (case-fold-search)
+          (while (re-search-forward "^From " nil t)
+            (beginning-of-line)
+            (insert ">"))))
+      ;; Decide whether to append to a file or to an Emacs buffer.
+      (let ((outbuf (get-file-buffer filename)))
+       (if (not outbuf)
+            (progn
+              (unless babyl             ; from gnus-output-to-mail
+                (let ((buffer-read-only nil))
+                  (goto-char (point-max))
+                  (forward-char -2)
+                  (unless (looking-at "\n\n")
+                    (goto-char (point-max))
+                    (unless (bolp)
+                      (insert "\n"))
+                    (insert "\n"))))
+              (let ((file-name-coding-system nnmail-pathname-coding-system))
+                (mm-append-to-file (point-min) (point-max) filename)))
+         ;; File has been visited, in buffer OUTBUF.
+         (set-buffer outbuf)
+         (let ((buffer-read-only nil)
+               (msg (and (boundp 'rmail-current-message)
+                         (symbol-value 'rmail-current-message))))
+           ;; If MSG is non-nil, buffer is in RMAIL mode.
+            ;; Compare this with rmail-output-to-rmail-buffer in Emacs 23.
+           (when msg
+              (unless babyl
+                (rmail-swap-buffers-maybe)
+                (rmail-maybe-set-message-counters))
+              (widen)
+              (unless babyl
+               (goto-char (point-max))
+               ;; Ensure we have a blank line before the next message.
+               (unless (bolp)
+                 (insert "\n"))
+               (insert "\n"))
+              (narrow-to-region (point-max) (point-max)))
+           (insert-buffer-substring tmpbuf)
+           (when msg
+              (when babyl
+                (goto-char (point-min))
+                (widen)
+                (search-backward "\n\^_")
+                (narrow-to-region (point) (point-max)))
+             (rmail-count-new-messages t)
+             (when (rmail-summary-exists)
+               (rmail-select-summary
+                (rmail-update-summary)))
+             (rmail-show-message msg))
+           (save-buffer)))))
+    (kill-buffer tmpbuf)))
+
+(defun gnus-convert-article-to-rmail ()
+  "Convert article in current buffer to Rmail message format."
+  (let ((buffer-read-only nil))
+    ;; Convert article directly into Babyl format.
+    (goto-char (point-min))
+    (insert "\^L\n0, unseen,,\n*** EOOH ***\n")
+    (while (search-forward "\n\^_" nil t) ;single char
+      (replace-match "\n^_" t t))      ;2 chars: "^" and "_"
+    (goto-char (point-max))
+    (insert "\^_")))
+
+;;; gnus-rmail.el ends here
diff --git a/lisp/gnus/gnus-salt.el b/lisp/gnus/gnus-salt.el
index 205e936bc7..3189655c8a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2001-2022 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 d031047804..c852986ae6 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2022 Free Software Foundation, Inc.
 
 ;; Author: Per Abrahamsen <amanda@iesd.auc.dk>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -1749,7 +1749,7 @@ score in `gnus-newsgroup-scored' by SCORE."
            (setq type 'after
                  match-func 'string<
                  match (gnus-time-iso8601
-                        (time-subtract (current-time)
+                        (time-subtract nil
                                        (* 86400 (nth 0 kill))))))
           ((eq type 'before)
            (setq match-func 'gnus-string>
@@ -1758,7 +1758,7 @@ score in `gnus-newsgroup-scored' by SCORE."
            (setq type 'before
                  match-func 'gnus-string>
                  match (gnus-time-iso8601
-                        (time-subtract (current-time)
+                        (time-subtract nil
                                        (* 86400 (nth 0 kill))))))
           ((eq type 'at)
            (setq match-func 'string=
diff --git a/lisp/gnus/gnus-search.el b/lisp/gnus/gnus-search.el
index 3157358804..bf88abae76 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
 
 ;; Author: Eric Abrahamsen <eric@ericabrahamsen.net>
 
@@ -105,9 +105,13 @@
 
 (gnus-add-shutdown #'gnus-search-shutdown 'gnus)
 
-(define-error 'gnus-search-parse-error "Gnus search parsing error")
+(define-error 'gnus-search-error "Gnus search error")
 
-(define-error 'gnus-search-config-error "Gnus search configuration error")
+(define-error 'gnus-search-parse-error "Gnus search parsing error"
+              'gnus-search-error)
+
+(define-error 'gnus-search-config-error "Gnus search configuration error"
+              'gnus-search-error)
 
 ;;; User Customizable Variables:
 
@@ -568,15 +572,13 @@ REL-DATE, or (current-time) if REL-DATE is nil."
   ;; Time parsing doesn't seem to work with slashes.
   (let ((value (string-replace "/" "-" value))
        (now (append '(0 0 0)
-                    (seq-subseq (decode-time (or rel-date
-                                                 (current-time)))
-                                3))))
+                    (seq-subseq (decode-time rel-date) 3))))
     ;; Check for relative time parsing.
     (if (string-match "\\([[:digit:]]+\\)\\([dwmy]\\)" value)
        (seq-subseq
         (decode-time
          (time-subtract
-          (apply #'encode-time now)
+          (encode-time now)
           (days-to-time
            (* (string-to-number (match-string 1 value))
               (cdr (assoc (match-string 2 value)
@@ -595,7 +597,7 @@ REL-DATE, or (current-time) if REL-DATE is nil."
             ;; If DOW is given, handle that specially.
             (if (and (seq-elt d-time 6) (null (seq-elt d-time 3)))
                 (decode-time
-                 (time-subtract (apply #'encode-time now)
+                 (time-subtract (encode-time now)
                                 (days-to-time
                                  (+ (if (> (seq-elt d-time 6)
                                            (seq-elt now 6))
@@ -1018,7 +1020,7 @@ Responsible for handling and, or, and parenthetical 
expressions.")
          (single-search (gnus-search-single-p query))
          (grouplist (or groups (gnus-search-get-active srv)))
          q-string artlist group)
-      (message "Opening server %s" server)
+      (gnus-message 7 "Opening server %s" server)
       (gnus-open-server srv)
       ;; We should only be doing this once, in
       ;; `nnimap-open-connection', but it's too frustrating to try to
@@ -1058,11 +1060,11 @@ Responsible for handling and, or, and parenthetical 
expressions.")
               q-string)))
 
       (while (and (setq group (pop grouplist))
-                 (or (null single-search) (null artlist)))
+                 (or (null single-search) (= 0 (length artlist))))
        (when (nnimap-change-group
               (gnus-group-short-name group) server)
          (with-current-buffer (nnimap-buffer)
-           (message "Searching %s..." group)
+           (gnus-message 7 "Searching %s..." group)
            (let ((result
                   (gnus-search-imap-search-command engine q-string)))
              (when (car result)
@@ -1075,7 +1077,7 @@ Responsible for handling and, or, and parenthetical 
expressions.")
                              (vector group artn 100))))
                        (cdr (assoc "SEARCH" (cdr result))))
                       artlist))))
-           (message "Searching %s...done" group))))
+           (gnus-message 7 "Searching %s...done" group))))
       (nreverse artlist))))
 
 (cl-defmethod gnus-search-imap-search-command ((engine gnus-search-imap)
@@ -1235,8 +1237,7 @@ nil (except that (dd nil yyyy) is not allowed).  Massage 
those
 numbers into the most recent past occurrence of whichever date
 elements are present."
   (pcase-let ((`(,nday ,nmonth ,nyear)
-              (seq-subseq (decode-time (current-time))
-                          3 6))
+              (seq-subseq (decode-time) 3 6))
              (`(,dday ,dmonth ,dyear) date))
     (unless (and dday dmonth dyear)
       (unless dday (setq dday 1))
@@ -1256,9 +1257,7 @@ elements are present."
          (setq dmonth 1))))
     (format-time-string
      "%e-%b-%Y"
-     (apply #'encode-time
-           (append '(0 0 0)
-                   (list dday dmonth dyear))))))
+     (encode-time 0 0 0 dday dmonth dyear))))
 
 (cl-defmethod gnus-search-imap-handle-string ((engine gnus-search-imap)
                                              (str string))
@@ -1330,8 +1329,8 @@ Returns a list of [group article score] vectors."
       (erase-buffer)
 
       (if groups
-         (message "Doing %s query on %s..." program groups)
-       (message "Doing %s query..." program))
+         (gnus-message 7 "Doing %s query on %s..." program groups)
+       (gnus-message 7 "Doing %s query..." program))
       (setq proc (apply #'start-process (format "search-%s" server)
                        buffer program cp-list))
       (while (process-live-p proc)
@@ -1837,8 +1836,8 @@ Assume \"size\" key is equal to \"larger\"."
      (mapcar (lambda (x)
               (let ((group x)
                     artlist)
-                (message "Searching %s using find-grep..."
-                         (or group server))
+                (gnus-message 7 "Searching %s using find-grep..."
+                              (or group server))
                 (save-window-excursion
                   (set-buffer buffer)
                   (if (> gnus-verbose 6)
@@ -1893,8 +1892,8 @@ Assume \"size\" key is equal to \"larger\"."
                          (vector (gnus-group-full-name group server) art 0)
                          artlist))
                       (forward-line 1)))
-                  (message "Searching %s using find-grep...done"
-                           (or group server))
+                  (gnus-message 7 "Searching %s using find-grep...done"
+                                (or group server))
                   artlist)))
             grouplist))))
 
@@ -1927,7 +1926,7 @@ Assume \"size\" key is equal to \"larger\"."
              (apply #'nnheader-message 4
                     "Search engine for %s improperly configured: %s"
                     server (cdr err))
-           (signal 'gnus-search-config-error err)))))
+           (signal (car err) (cdr err))))))
      (alist-get 'search-group-spec specs))
     ;; Some search engines do their own limiting, but some don't, so
     ;; do it again here.  This is bad because, if the user is
diff --git a/lisp/gnus/gnus-sieve.el b/lisp/gnus/gnus-sieve.el
index d173decbb6..2d8552d42d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 59c6956ac2..984774dc6a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2022 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 fa880b7edd..a520bfcd8b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2022 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 606bd3a39a..252e6e2229 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2022 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 dcdf3d977d..d3e476b5d6 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -1182,8 +1182,8 @@ mark:         The article's mark.
 uncached:     Non-nil if the article is uncached."
   :group 'gnus-summary-visual
   :type '(repeat (cons (sexp :tag "Form" nil)
-                      face)))
-(put 'gnus-summary-highlight 'risky-local-variable t)
+                       face))
+  :risky t)
 
 (defcustom gnus-alter-header-function nil
   "Function called to allow alteration of article header structures.
@@ -3968,10 +3968,9 @@ Returns \"  ?  \" if there's bad input or if another 
error occurs.
 Input should look like this: \"Sun, 14 Oct 2001 13:34:39 +0200\"."
   (condition-case ()
       (let* ((messy-date (gnus-date-get-time messy-date))
-            (now (current-time))
             ;;If we don't find something suitable we'll use this one
             (my-format "%b %d '%y"))
-       (let* ((difference (time-subtract now messy-date))
+       (let* ((difference (time-subtract nil messy-date))
               (templist gnus-user-date-format-alist)
               (top (eval (caar templist) t)))
          (while (if (numberp top) (time-less-p top difference) (not top))
@@ -5002,23 +5001,13 @@ If LINE, insert the rebuilt thread starting on line 
LINE."
                              gnus-article-sort-functions)))
       (gnus-message 7 "Sorting articles...done"))))
 
-;; Written by Hallvard B Furuseth <h.b.furuseth@usit.uio.no>.
-(defmacro gnus-thread-header (thread)
-  "Return header of first article in THREAD.
-Note that THREAD must never, ever be anything else than a variable -
-using some other form will lead to serious barfage."
-  (or (symbolp thread) (signal 'wrong-type-argument '(symbolp thread)))
-  ;; (8% speedup to gnus-summary-prepare, just for fun :-)
-  (cond
-   ((and (boundp 'lexical-binding) lexical-binding)
-    ;; FIXME: This version could be a "defsubst" rather than a macro.
-    `(#[257 "\211:\203\16\0\211@;\203\15\0A@@\207"
-            [] 2]
-      ,thread))
-   (t
-    ;; Not sure how XEmacs handles these things, so let's keep the old code.
-    (list 'byte-code "\10\211:\203\17\0\211@;\203\16\0A@@\207"
-          (vector thread) 2))))
+(defsubst gnus-thread-header (thread)
+  "Return header of first article in THREAD."
+  (if (consp thread)
+      (car (if (stringp (car thread))
+               (cadr thread)
+             thread))
+    thread))
 
 (defsubst gnus-article-sort-by-number (h1 h2)
   "Sort articles by article number."
@@ -8669,20 +8658,20 @@ these articles."
        (gnus-fetch-old-headers nil)
        (gnus-build-sparse-threads nil))
     (prog1
-       (gnus-summary-limit (if thread-only articles
-                             (nconc articles gnus-newsgroup-limit)))
-      (gnus-summary-limit-include-matching-articles
-       "subject"
-       (regexp-quote (gnus-general-simplify-subject
-                     (mail-header-subject (gnus-id-to-header id)))))
-      ;; the previous two calls each push a limit onto the limit
-      ;; stack. the first pop remove the articles that match the
-      ;; subject, while the second pop gets us back to the state
-      ;; before we started to deal with the thread. presumably we want
-      ;; to think of the thread and its associated subject matches as
-      ;; a single thing so that we need to pop only once to get back
-      ;; to the original view.
-      (pop gnus-newsgroup-limits)
+        (gnus-summary-limit (if thread-only articles
+                              (nconc articles gnus-newsgroup-limit)))
+      (let ((matching-subject (gnus-general-simplify-subject
+                              (mail-header-subject (gnus-id-to-header id)))))
+        (when matching-subject
+          (gnus-summary-limit-include-matching-articles
+           "subject"
+           matching-subject)
+          ;; Each of the previous two limit calls push a limit onto
+          ;; the limit stack. Presumably we want to think of the
+          ;; thread and its associated subject matches as a single
+          ;; thing so we probably want a single pop to restore the
+          ;; original view. Hence we pop this last limit off.
+          (pop gnus-newsgroup-limits)))
       (gnus-summary-position-point))))
 
 (defun gnus-summary-limit-include-matching-articles (header regexp)
@@ -10496,7 +10485,6 @@ latter case, they will be copied into the relevant 
groups."
   "Create an article in a mail newsgroup."
   (interactive nil gnus-summary-mode)
   (let ((group gnus-newsgroup-name)
-       (now (current-time))
        group-art)
     (unless (gnus-check-backend-function 'request-accept-article group)
       (error "%s does not support article importing" group))
@@ -10506,7 +10494,7 @@ latter case, they will be copied into the relevant 
groups."
       ;; This doesn't look like an article, so we fudge some headers.
       (insert "From: " (read-string "From: ") "\n"
              "Subject: " (read-string "Subject: ") "\n"
-             "Date: " (message-make-date now) "\n"
+             "Date: " (message-make-date) "\n"
              "Message-ID: " (message-make-message-id) "\n")
       (setq group-art (gnus-request-accept-article group nil t))
       (kill-buffer (current-buffer)))
diff --git a/lisp/gnus/gnus-topic.el b/lisp/gnus/gnus-topic.el
index 0855e98917..c079d889d9 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2022 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 a82b1f87a3..8c2be7b07e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2022 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 a777157f89..6150781fec 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -858,126 +858,9 @@ variables and then do only the assignment atomically."
   `(let ((inhibit-quit gnus-atomic-be-safe))
      ,@forms))
 
-;;; Functions for saving to babyl/mail files.
-
-(require 'rmail)
-(autoload 'rmail-update-summary "rmailsum")
-
 (defvar mm-text-coding-system)
-
 (declare-function mm-append-to-file "mm-util"
                   (start end filename &optional codesys inhibit))
-(declare-function rmail-swap-buffers-maybe "rmail" ())
-(declare-function rmail-maybe-set-message-counters "rmail" ())
-(declare-function rmail-count-new-messages "rmail" (&optional nomsg))
-(declare-function rmail-summary-exists "rmail" ())
-(declare-function rmail-show-message "rmail" (&optional n no-summary))
-;; Macroexpansion of rmail-select-summary:
-(declare-function rmail-summary-displayed "rmail" ())
-(declare-function rmail-pop-to-buffer "rmail" (&rest args))
-(declare-function rmail-maybe-display-summary "rmail" ())
-
-(defun gnus-output-to-rmail (filename &optional ask)
-  "Append the current article to an Rmail file named FILENAME.
-In Emacs 22 this writes Babyl format; in Emacs 23 it writes mbox unless
-FILENAME exists and is Babyl format."
-  (require 'rmail)
-  (require 'mm-util)
-  (require 'nnmail)
-  ;; Some of this codes is borrowed from rmailout.el.
-  (setq filename (expand-file-name filename))
-  ;; FIXME should we really be messing with this defcustom?
-  ;; It is not needed for the operation of this function.
-  (if (boundp 'rmail-default-rmail-file)
-      (setq rmail-default-rmail-file filename) ; 22
-    (setq rmail-default-file filename))        ; 23
-  (let ((artbuf (current-buffer))
-       (tmpbuf (gnus-get-buffer-create " *Gnus-output*"))
-        ;; Babyl rmail.el defines this, mbox does not.
-        (babyl (fboundp 'rmail-insert-rmail-file-header)))
-    (save-excursion
-      ;; Note that we ignore the possibility of visiting a Babyl
-      ;; format buffer in Emacs 23, since Rmail no longer supports that.
-     (or (get-file-buffer filename)
-         (progn
-           ;; In case someone wants to write to a Babyl file from Emacs 23.
-           (when (file-exists-p filename)
-             (setq babyl (mail-file-babyl-p filename))
-             t))
-         (if (or (not ask)
-                 (gnus-yes-or-no-p
-                  (concat "\"" filename "\" does not exist, create it? ")))
-             (let ((file-buffer (create-file-buffer filename)))
-               (with-current-buffer file-buffer
-                  (if (fboundp 'rmail-insert-rmail-file-header)
-                      (rmail-insert-rmail-file-header))
-                 (let ((require-final-newline nil)
-                       (coding-system-for-write mm-text-coding-system))
-                   (gnus-write-buffer filename)))
-               (kill-buffer file-buffer))
-           (error "Output file does not exist")))
-      (set-buffer tmpbuf)
-      (erase-buffer)
-      (insert-buffer-substring artbuf)
-      (if babyl
-          (gnus-convert-article-to-rmail)
-        ;; Non-Babyl case copied from gnus-output-to-mail.
-        (goto-char (point-min))
-        (if (looking-at "From ")
-            (forward-line 1)
-          (insert "From nobody " (current-time-string) "\n"))
-        (let (case-fold-search)
-          (while (re-search-forward "^From " nil t)
-            (beginning-of-line)
-            (insert ">"))))
-      ;; Decide whether to append to a file or to an Emacs buffer.
-      (let ((outbuf (get-file-buffer filename)))
-       (if (not outbuf)
-            (progn
-              (unless babyl             ; from gnus-output-to-mail
-                (let ((buffer-read-only nil))
-                  (goto-char (point-max))
-                  (forward-char -2)
-                  (unless (looking-at "\n\n")
-                    (goto-char (point-max))
-                    (unless (bolp)
-                      (insert "\n"))
-                    (insert "\n"))))
-              (let ((file-name-coding-system nnmail-pathname-coding-system))
-                (mm-append-to-file (point-min) (point-max) filename)))
-         ;; File has been visited, in buffer OUTBUF.
-         (set-buffer outbuf)
-         (let ((buffer-read-only nil)
-               (msg (and (boundp 'rmail-current-message)
-                         (symbol-value 'rmail-current-message))))
-           ;; If MSG is non-nil, buffer is in RMAIL mode.
-            ;; Compare this with rmail-output-to-rmail-buffer in Emacs 23.
-           (when msg
-              (unless babyl
-                (rmail-swap-buffers-maybe)
-                (rmail-maybe-set-message-counters))
-              (widen)
-              (unless babyl
-               (goto-char (point-max))
-               ;; Ensure we have a blank line before the next message.
-               (unless (bolp)
-                 (insert "\n"))
-               (insert "\n"))
-              (narrow-to-region (point-max) (point-max)))
-           (insert-buffer-substring tmpbuf)
-           (when msg
-              (when babyl
-                (goto-char (point-min))
-                (widen)
-                (search-backward "\n\^_")
-                (narrow-to-region (point) (point-max)))
-             (rmail-count-new-messages t)
-             (when (rmail-summary-exists)
-               (rmail-select-summary
-                (rmail-update-summary)))
-             (rmail-show-message msg))
-           (save-buffer)))))
-    (kill-buffer tmpbuf)))
 
 (defun gnus-output-to-mail (filename &optional ask)
   "Append the current article to a mail file named FILENAME."
@@ -1035,17 +918,6 @@ FILENAME exists and is Babyl format."
            (insert-buffer-substring tmpbuf)))))
     (kill-buffer tmpbuf)))
 
-(defun gnus-convert-article-to-rmail ()
-  "Convert article in current buffer to Rmail message format."
-  (let ((buffer-read-only nil))
-    ;; Convert article directly into Babyl format.
-    (goto-char (point-min))
-    (insert "\^L\n0, unseen,,\n*** EOOH ***\n")
-    (while (search-forward "\n\^_" nil t) ;single char
-      (replace-match "\n^_" t t))      ;2 chars: "^" and "_"
-    (goto-char (point-max))
-    (insert "\^_")))
-
 (defun gnus-map-function (funs arg)
   "Apply the result of the first function in FUNS to the second, and so on.
 ARG is passed to the first function."
@@ -1675,6 +1547,11 @@ lists of strings."
     (while overlays
       (delete-overlay (pop overlays)))))
 
+;; This function used to live in this file, but was moved to a
+;; separate file to avoid pulling in rmail.el when requiring
+;; gnus-util.
+(autoload 'gnus-output-to-rmail "gnus-rmail")
+
 (provide 'gnus-util)
 
 ;;; gnus-util.el ends here
diff --git a/lisp/gnus/gnus-uu.el b/lisp/gnus/gnus-uu.el
index 778a8a3ea0..6990d8ee77 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-2021 Free Software
+;; Copyright (C) 1985-1987, 1993-1998, 2000-2022 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 ec3601109e..5641442ed2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2022 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 8ac4e39fa5..88d24cf0f3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2022 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 56934dfa15..0daecf7df5 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-2021 Free Software
+;; Copyright (C) 1987-1990, 1993-1998, 2000-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
@@ -2528,14 +2528,6 @@ are always t.")
      ("babel" babel-as-string)
      ("nnmail" nnmail-split-fancy nnmail-article-group)
      ("nnvirtual" nnvirtual-catchup-group nnvirtual-convert-headers)
-     ;; This is only used in message.el, which has an autoload.
-     ("rmailout" rmail-output)
-     ;; Next two used in gnus-util, which has autoloads, and contrib/sendmail.
-     ("rmail" rmail-count-new-messages rmail-show-message
-      ;; Next two only used in gnus-util.
-      rmail-summary-exists rmail-select-summary)
-     ;; Only used in gnus-util, which has an autoload.
-     ("rmailsum" rmail-update-summary)
      ("gnus-xmas" gnus-xmas-splash)
      ("score-mode" :interactive t gnus-score-mode gnus-score-edit-all-score)
      ("gnus-mh" gnus-summary-save-article-folder
@@ -3150,9 +3142,9 @@ g -- Group name."
   "Check whether GROUP supports function FUNC.
 GROUP can either be a string (a group name) or a select method."
   (ignore-errors
-    (let ((method (if (stringp group)
-                     (car (gnus-find-method-for-group group))
-                   group)))
+    (when-let ((method (if (stringp group)
+                          (car (gnus-find-method-for-group group))
+                        group)))
       (unless (featurep method)
        (require method))
       (fboundp (intern (format "%s-%s" method func))))))
diff --git a/lisp/gnus/gssapi.el b/lisp/gnus/gssapi.el
index 6ff2a4e285..6ace5f12ca 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 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 4f800891b2..7866543564 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2022 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 af0a198376..9a48f710e5 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news, mail
@@ -224,12 +224,9 @@ Leave mails for this many days" :value 14)))))
                                           (const :format "" :value :plugged)
                                           (boolean :tag "Plugged"))))))))
 
-(defcustom mail-source-ignore-errors nil
-  "Ignore errors when querying mail sources.
-If nil, the user will be prompted when an error occurs.  If non-nil,
-the error will be ignored."
-  :version "22.1"
-  :type 'boolean)
+(make-obsolete-variable 'mail-source-ignore-errors
+                        "configure `gnus-verbose' instead"
+                        "29.1")
 
 (defcustom mail-source-primary-source nil
   "Primary source for incoming mail.
@@ -457,7 +454,7 @@ the `mail-source-keyword-map' variable."
                                                   search))))
                     :user)))
              user-auth)
-            ((and
+            ((and               ; cf. 'auth-source-pick-first-password'
               (eq keyword :password)
               (setq pass-auth
                     (plist-get
@@ -554,18 +551,16 @@ Return the number of files that were found."
                 (condition-case err
                     (funcall function source callback)
                   (error
-                   (if (and (not mail-source-ignore-errors)
-                            (not
-                             (yes-or-no-p
-                              (format "Mail source %s error (%s).  Continue? "
+                    (gnus-error
+                     5
+                     (format "Mail source %s error (%s)"
                                       (if (memq ':password source)
                                           (let ((s (copy-sequence source)))
                                             (setcar (cdr (memq ':password s))
                                                     "********")
                                             s)
                                         source)
-                                      (cadr err)))))
-                     (error "Cannot get new mail"))
+                                      (cadr err)))
                    0)))))))))
 
 (declare-function gnus-message "gnus-util" (level &rest args))
diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el
index 562bc64f6f..8f11e538c5 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: mail, news
@@ -2053,7 +2053,7 @@ You must have the \"hashcash\" binary installed, see 
`hashcash-path'."
 (autoload 'gnus-groups-from-server "gnus")
 (autoload 'gnus-open-server "gnus-int")
 (autoload 'gnus-output-to-mail "gnus-util")
-(autoload 'gnus-output-to-rmail "gnus-util")
+(autoload 'gnus-output-to-rmail "gnus-rmail")
 (autoload 'gnus-request-post "gnus-int")
 (autoload 'gnus-server-string "gnus")
 (autoload 'message-setup-toolbar "messagexmas")
@@ -4335,6 +4335,44 @@ Instead, just auto-save the buffer and then bury it."
 
 (autoload 'mml-secure-bcc-is-safe "mml-sec")
 
+(defcustom message-server-alist nil
+  "Alist of rules to generate \"X-Message-SMTP-Method\" header.
+The header will be inserted just before the message is sent.
+Elements should be of the form (COND . METHOD).
+If COND is a string, METHOD will be inserted if the \"From\"
+address compares equal with COND.
+If COND is a function, METHOD will be inserted if COND returns
+a non-nil value when called in the message buffer without any
+arguments.  If METHOD is nil in this case, the return value of
+the function will be inserted instead.
+If the buffer already has a\"X-Message-SMTP-Method\" header,
+it is left unchanged."
+  :type '(alist :key-type '(choice
+                            (string :tag "From Address")
+                            (function :tag "Predicate"))
+                :value-type 'string)
+  :version "29.1"
+  :group 'message-sending)
+
+(defun message-update-smtp-method-header ()
+  "Insert an X-Message-SMTP-Method header according to `message-server-alist'."
+  (unless (message-fetch-field "X-Message-SMTP-Method")
+    (let ((from (cadr (mail-extract-address-components (message-fetch-field 
"From"))))
+          method)
+      (catch 'exit
+        (dolist (server message-server-alist)
+          (cond ((functionp (car server))
+                 (let ((res (funcall (car server))))
+                   (when res
+                     (setq method (or (cdr server) res))
+                     (throw 'exit nil))))
+                ((and (stringp (car server))
+                      (string= (car server) from))
+                 (setq method (cdr server))
+                 (throw 'exit nil)))))
+      (when method
+        (message-add-header (concat "X-Message-SMTP-Method: " method))))))
+
 (defun message-send (&optional arg)
   "Send the message in the current buffer.
 If `message-interactive' is non-nil, wait for success indication or
@@ -4348,6 +4386,7 @@ It should typically alter the sending method in some way 
or other."
   (undo-boundary)
   (let ((inhibit-read-only t))
     (put-text-property (point-min) (point-max) 'read-only nil))
+  (message-update-smtp-method-header)
   (message-fix-before-sending)
   (run-hooks 'message-send-hook)
   (mml-secure-bcc-is-safe)
@@ -5828,15 +5867,15 @@ In posting styles use `(\"Expires\" (make-expires-date 
30))'."
 ;; You might for example insert a "." somewhere (not next to another dot
 ;; or string boundary), or modify the "fsf" string.
 (defun message-unique-id ()
-  ;; Don't use microseconds from (current-time), they may be unsupported.
+  ;; Don't use fractional seconds from timestamp; they may be unsupported.
   ;; Instead we use this randomly inited counter.
   (setq message-unique-id-char
-       (% (1+ (or message-unique-id-char
-                  (random (ash 1 20))))
-          ;; (current-time) returns 16-bit ints,
-          ;; and 2^16*25 just fits into 4 digits i base 36.
-          (* 25 25)))
-  (let ((tm (current-time)))
+       ;; 2^16 * 25 just fits into 4 digits i base 36.
+       (let ((base (* 25 25)))
+         (if message-unique-id-char
+             (% (1+ message-unique-id-char) base)
+           (random base))))
+  (let ((tm (time-convert nil 'integer)))
     (concat
      (if (or (eq system-type 'ms-dos)
             ;; message-number-base36 doesn't handle bigints.
@@ -5846,10 +5885,12 @@ In posting styles use `(\"Expires\" (make-expires-date 
30))'."
             (aset user (match-beginning 0) ?_))
           user)
        (message-number-base36 (user-uid) -1))
-     (message-number-base36 (+ (car tm)
-                              (ash (% message-unique-id-char 25) 16)) 4)
-     (message-number-base36 (+ (nth 1 tm)
-                              (ash (/ message-unique-id-char 25) 16)) 4)
+     (message-number-base36 (+ (ash tm -16)
+                              (ash (% message-unique-id-char 25) 16))
+                           4)
+     (message-number-base36 (+ (logand tm #xffff)
+                              (ash (/ message-unique-id-char 25) 16))
+                           4)
      ;; Append a given name, because while the generated ID is unique
      ;; to this newsreader, other newsreaders might otherwise generate
      ;; the same ID via another algorithm.
@@ -5946,12 +5987,9 @@ In posting styles use `(\"Expires\" (make-expires-date 
30))'."
 
 (defun message-make-expires ()
   "Return an Expires header based on `message-expires'."
-  (let ((current (current-time))
-       (future (* 1.0 message-expires 60 60 24)))
+  (let ((future (* 60 60 24 message-expires)))
     ;; Add the future to current.
-    (setcar current (+ (car current) (round (/ future (expt 2 16)))))
-    (setcar (cdr current) (+ (nth 1 current) (% (round future) (expt 2 16))))
-    (message-make-date current)))
+    (message-make-date (time-add nil future))))
 
 (defun message-make-path ()
   "Return uucp path."
diff --git a/lisp/gnus/mm-archive.el b/lisp/gnus/mm-archive.el
index fdc83e1de6..e73daf2db7 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2022 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 d6b71f15e5..956449dac1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 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 d781407cdc..7256e5a2f7 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     MORIOKA Tomohiko <morioka@jaist.ac.jp>
@@ -474,6 +474,7 @@ The file will be saved in the directory 
`mm-tmp-directory'.")
 (autoload 'mml2015-verify-test "mml2015")
 (autoload 'mml-smime-verify "mml-smime")
 (autoload 'mml-smime-verify-test "mml-smime")
+(autoload 'mm-view-pkcs7-verify "mm-view")
 
 (defvar mm-verify-function-alist
   '(("application/pgp-signature" mml2015-verify "PGP" mml2015-verify-test)
@@ -482,7 +483,15 @@ The file will be saved in the directory 
`mm-tmp-directory'.")
     ("application/pkcs7-signature" mml-smime-verify "S/MIME"
      mml-smime-verify-test)
     ("application/x-pkcs7-signature" mml-smime-verify "S/MIME"
-     mml-smime-verify-test)))
+     mml-smime-verify-test)
+    ("application/x-pkcs7-signature" mml-smime-verify "S/MIME"
+     mml-smime-verify-test)
+    ;; these are only used for security-buttons and contain the
+    ;; smime-type after the underscore
+    ("application/pkcs7-mime_signed-data" mm-view-pkcs7-verify "S/MIME"
+     nil)
+    ("application/x-pkcs7-mime_signed-data" mml-view-pkcs7-verify "S/MIME"
+     nil)))
 
 (defcustom mm-verify-option 'never
   "Option of verifying signed parts.
@@ -501,11 +510,17 @@ result of the verification."
 
 (autoload 'mml2015-decrypt "mml2015")
 (autoload 'mml2015-decrypt-test "mml2015")
+(autoload 'mm-view-pkcs7-decrypt "mm-view")
 
 (defvar mm-decrypt-function-alist
   '(("application/pgp-encrypted" mml2015-decrypt "PGP" mml2015-decrypt-test)
     ("application/x-gnus-pgp-encrypted" mm-uu-pgp-encrypted-extract-1 "PGP"
-     mm-uu-pgp-encrypted-test)))
+     mm-uu-pgp-encrypted-test)
+    ;; these are only used for security-buttons and contain the
+    ;; smime-type after the underscore
+    ("application/pkcs7-mime_enveloped-data" mm-view-pkcs7-decrypt "S/MIME" 
nil)
+    ("application/x-pkcs7-mime_enveloped-data"
+     mm-view-pkcs7-decrypt "S/MIME" nil)))
 
 (defcustom mm-decrypt-option nil
   "Option of decrypting encrypted parts.
@@ -682,18 +697,35 @@ MIME-Version header before proceeding."
                                        'start start)
                                  (car ctl))
             (cons (car ctl) (mm-dissect-multipart ctl from))))
-         (t
-          (mm-possibly-verify-or-decrypt
-           (mm-dissect-singlepart
-            ctl
-            (and cte (intern (downcase (mail-header-strip-cte cte))))
-            no-strict-mime
-            (and cd (mail-header-parse-content-disposition cd))
-            description id)
-           ctl from))))
-       (when id
-         (when (string-match " *<\\(.*\\)> *" id)
-           (setq id (match-string 1 id)))
+          (t
+           (let* ((handle
+                   (mm-dissect-singlepart
+                    ctl
+                    (and cte (intern (downcase (mail-header-strip-cte cte))))
+                    no-strict-mime
+                    (and cd (mail-header-parse-content-disposition cd))
+                    description id))
+                  (intermediate-result
+                   (mm-possibly-verify-or-decrypt handle ctl from)))
+             (when (and (equal type "application")
+                        (or (equal subtype "pkcs7-mime")
+                            (equal subtype "x-pkcs7-mime")))
+               (add-text-properties
+                0 (length (car ctl))
+                (list 'protocol
+                      (concat (substring-no-properties (car ctl))
+                              "_"
+                              (cdr (assoc 'smime-type ctl))))
+                (car ctl))
+               ;; If this is a pkcs7-mime lets treat this special and
+               ;; more like multipart so the pkcs7-mime part does not
+               ;; get ignored.
+               (setq intermediate-result
+                     (cons (car ctl) (list intermediate-result))))
+             intermediate-result))))
+        (when id
+          (when (string-match " *<\\(.*\\)> *" id)
+            (setq id (match-string 1 id)))
          (push (cons id result) mm-content-id-alist))
        result))))
 
@@ -1677,43 +1709,40 @@ If RECURSIVE, search recursively."
     (cond
      ((or (equal type "application/x-pkcs7-mime")
          (equal type "application/pkcs7-mime"))
-      (with-temp-buffer
-       (when (and (cond
-                   ((equal smime-type "signed-data") t)
-                   ((eq mm-decrypt-option 'never) nil)
-                   ((eq mm-decrypt-option 'always) t)
-                   ((eq mm-decrypt-option 'known) t)
-                   (t (y-or-n-p "Decrypt (S/MIME) part? ")))
-                  (mm-view-pkcs7 parts from))
-         (goto-char (point-min))
-         ;; The encrypted document is a MIME part, and may use either
-         ;; CRLF (Outlook and the like) or newlines for end-of-line
-         ;; markers.  Translate from CRLF.
-         (while (search-forward "\r\n" nil t)
-           (replace-match "\n"))
-         ;; Normally there will be a Content-type header here, but
-         ;; some mailers don't add that to the encrypted part, which
-         ;; makes the subsequent re-dissection fail here.
-         (save-restriction
-           (mail-narrow-to-head)
-           (unless (mail-fetch-field "content-type")
-             (goto-char (point-max))
-             (insert "Content-type: text/plain\n\n")))
-         (setq parts
-               (if (equal smime-type "signed-data")
-                   (list (propertize
-                          "multipart/signed"
-                          'protocol "application/pkcs7-signature"
-                          'gnus-info
-                          (format
-                           "%s:%s"
-                           (get-text-property 0 'gnus-info
-                                              (car mm-security-handle))
-                           (get-text-property 0 'gnus-details
-                                              (car mm-security-handle))))
-                         (mm-dissect-buffer t)
-                         parts)
-                 (mm-dissect-buffer t))))))
+      (add-text-properties 0 (length (car ctl))
+                           (list 'buffer (car parts))
+                           (car ctl))
+      (let* ((envelope-p (string= smime-type "enveloped-data"))
+             (decrypt-or-verify-option (if envelope-p
+                                           mm-decrypt-option
+                                         mm-verify-option))
+             (question (if envelope-p
+                           "Decrypt (S/MIME) part? "
+                         "Verify signed (S/MIME) part? ")))
+        (with-temp-buffer
+         (when (and (cond
+                     ((equal smime-type "signed-data") t)
+                     ((eq decrypt-or-verify-option 'never) nil)
+                     ((eq decrypt-or-verify-option 'always) t)
+                     ((eq decrypt-or-verify-option 'known) t)
+                     (t (y-or-n-p (format question))))
+                     (mm-view-pkcs7 parts from))
+
+           (goto-char (point-min))
+           ;; The encrypted document is a MIME part, and may use either
+           ;; CRLF (Outlook and the like) or newlines for end-of-line
+           ;; markers.  Translate from CRLF.
+           (while (search-forward "\r\n" nil t)
+             (replace-match "\n"))
+           ;; Normally there will be a Content-type header here, but
+           ;; some mailers don't add that to the encrypted part, which
+           ;; makes the subsequent re-dissection fail here.
+           (save-restriction
+             (mail-narrow-to-head)
+             (unless (mail-fetch-field "content-type")
+               (goto-char (point-max))
+               (insert "Content-type: text/plain\n\n")))
+           (setq parts (mm-dissect-buffer t))))))
      ((equal subtype "signed")
       (unless (and (setq protocol
                         (mm-handle-multipart-ctl-parameter ctl 'protocol))
@@ -1840,7 +1869,7 @@ If RECURSIVE, search recursively."
   ;; Require since we bind its variables.
   (require 'shr)
   (let ((shr-width (if shr-use-fonts
-                      nil
+                      shr-width
                     fill-column))
        (shr-content-function (lambda (id)
                                (let ((handle (mm-get-content-id id)))
diff --git a/lisp/gnus/mm-encode.el b/lisp/gnus/mm-encode.el
index 84a3b0a8d1..ead3bae219 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 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 4099a10eb3..abcd0b604c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 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 0c628055ac..a66fafe194 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 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 3d58738d63..e4d686ac83 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
 
@@ -34,8 +34,6 @@
 (require 'gnus)
 
 (defvar url-current-object)
-(defvar url-package-name)
-(defvar url-package-version)
 
 (defgroup mm-url nil
   "A wrapper of url package and external url command for Gnus."
diff --git a/lisp/gnus/mm-util.el b/lisp/gnus/mm-util.el
index 92e04f9d2e..31cf92e617 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     MORIOKA Tomohiko <morioka@jaist.ac.jp>
@@ -31,7 +31,7 @@
 
 (defun mm-ucs-to-char (codepoint)
   "Convert Unicode codepoint to character."
-  (or (decode-char 'ucs codepoint) ?#))
+  (or codepoint ?#))
 
 (defvar mm-coding-system-list nil)
 (defun mm-get-coding-system-list ()
@@ -101,9 +101,9 @@ version, you could use `autoload-coding-system' here."
   :type '(list (repeat :inline t
                       :tag "Other options"
                       (cons (symbol :tag "charset")
-                            (symbol :tag "form"))))
+                             (symbol :tag "form"))))
+  :risky t
   :group 'mime)
-(put 'mm-charset-eval-alist 'risky-local-variable t)
 
 (defvar mm-charset-override-alist)
 
diff --git a/lisp/gnus/mm-uu.el b/lisp/gnus/mm-uu.el
index a52613a092..9fe41f6786 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 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 d2a6d2cf5d..b110750c09 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; This file is part of GNU Emacs.
@@ -634,12 +634,9 @@ If MODE is not set, try to find mode automatically."
                 (context (epg-make-context 'CMS)))
             (prog1
                 (epg-verify-string context part)
-              (let ((result (car (epg-context-result-for context 'verify))))
+              (let ((result (epg-context-result-for context 'verify)))
                 (mm-sec-status
-                 'gnus-info (epg-signature-status result)
-                 'gnus-details
-                 (format "%s:%s" (epg-signature-validity result)
-                         (epg-signature-key-id result))))))))
+                 'gnus-info (epg-verify-result-to-string result)))))))
       (with-temp-buffer
        (insert "MIME-Version: 1.0\n")
        (mm-insert-headers "application/pkcs7-mime" "base64" "smime.p7m")
@@ -659,7 +656,11 @@ If MODE is not set, try to find mode automatically."
       ;; Use EPG/gpgsm
       (let ((part (base64-decode-string (buffer-string))))
        (erase-buffer)
-       (insert (epg-decrypt-string (epg-make-context 'CMS) part)))
+       (insert
+         (let ((context (epg-make-context 'CMS)))
+           (prog1
+               (epg-decrypt-string context part)
+             (mm-sec-status 'gnus-info "OK")))))
     ;; Use openssl
     (insert "MIME-Version: 1.0\n")
     (mm-insert-headers "application/pkcs7-mime" "base64" "smime.p7m")
diff --git a/lisp/gnus/mml-sec.el b/lisp/gnus/mml-sec.el
index f72d76ac02..2ebc44d632 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 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 b81dd2dae4..6c43ded24f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 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 e60d777e0d..5a52602506 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 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 55ef9cf7b3..9bbe643206 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 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 239738114b..a373b7999e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 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 76a7e21567..60140a4641 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2022 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 5f486f4970..ff0dea8ecd 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2022 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 133e0307a5..bd60c43f59 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Author:        Didier Verna <didier@didierverna.net>
 ;; Created:       Fri Jul 16 18:55:42 1999
@@ -1308,7 +1308,7 @@ all.  This may very well take some time.")
   (let ((minute (nndiary-max (nth 0 sched)))
        (hour (nndiary-max (nth 1 sched)))
        (year (nndiary-max (nth 4 sched)))
-       (time-zone (or (and (nth 6 sched) (car (nth 6 sched)))
+       (time-zone (or (car (nth 6 sched))
                       (current-time-zone))))
     (when year
       (or minute (setq minute 59))
@@ -1405,7 +1405,7 @@ all.  This may very well take some time.")
                  t))
         (dow-list (nth 5 sched))
         (year (1- this-year))
-        (time-zone (or (and (nth 6 sched) (car (nth 6 sched)))
+        (time-zone (or (car (nth 6 sched))
                        (current-time-zone))))
     ;; Special case: an asterisk in one of the days specifications means that
     ;; only the other should be taken into account. If both are unspecified,
diff --git a/lisp/gnus/nndir.el b/lisp/gnus/nndir.el
index bfc2283658..2ca25534ce 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2022 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 172433ef3b..19ccce47b5 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2022 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 394b6fcc4f..fa88b8a87e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2022 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 d881d6ce05..829d912cb2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2022 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 2de5b83a7b..5dc8e5c30d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2022 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 c10989aa1e..8b6904aa36 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2022 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 c35e89289a..8b3718ed7e 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-2021 Free Software
+;; Copyright (C) 1987-1990, 1993-1998, 2000-2022 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 b7082696b2..090cb9b245 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;         Simon Josefsson <simon@josefsson.org>
@@ -40,6 +40,7 @@
 
 (autoload 'auth-source-forget+ "auth-source")
 (autoload 'auth-source-search "auth-source")
+(autoload 'auth-info-password "auth-source")
 
 (nnoo-declare nnimap)
 
@@ -407,10 +408,7 @@ during splitting, which may be slow."
                                            :create t))))
     (if found
         (list (plist-get found :user)
-             (let ((secret (plist-get found :secret)))
-               (if (functionp secret)
-                   (funcall secret)
-                 secret))
+             (auth-info-password found)
              (plist-get found :save-function))
       nil)))
 
diff --git a/lisp/gnus/nnmail.el b/lisp/gnus/nnmail.el
index bcf01cfa9e..c71627f83a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2022 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news, mail
diff --git a/lisp/gnus/nnmairix.el b/lisp/gnus/nnmairix.el
index 92944887f4..8ca1cf0fe8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 66c22670b2..5a350aac74 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2022 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 0923b8eff3..5d016267bc 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2022 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 18acc73aad..afdb0c780a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2022 Free Software Foundation, Inc.
 
 ;; Authors: Didier Verna <didier@didierverna.net> (adding compaction)
 ;;     Simon Josefsson <simon@josefsson.org>
diff --git a/lisp/gnus/nnnil.el b/lisp/gnus/nnnil.el
index 36a8bc4581..092b53298a 100644
--- a/lisp/gnus/nnnil.el
+++ b/lisp/gnus/nnnil.el
@@ -40,7 +40,7 @@
 (defun nnnil-open-server (_server &optional _definitions)
   t)
 
-(defun nnnil-close-server (&optional _server)
+(defun nnnil-close-server (&optional _server _defs)
   t)
 
 (defun nnnil-request-close ()
diff --git a/lisp/gnus/nnoo.el b/lisp/gnus/nnoo.el
index 4e8490125f..a93759721a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2022 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 15e41e9d42..d042981ca9 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 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 0ac57e9e17..4ca53f108f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
 ;; Keywords: RSS
@@ -450,7 +450,7 @@ nnrss: %s: Not valid XML %s and libxml-parse-html-region 
doesn't work %s"
 This function handles the ISO 8601 date format described in
 URL `https://www.w3.org/TR/NOTE-datetime', and also the RFC 822 style
 which RSS 2.0 allows."
-  (let (case-fold-search vector year month day time zone cts given)
+  (let (case-fold-search vector year month day time zone given)
     (cond ((null date))                        ; do nothing for this case
          ;; if the date is just digits (unix time stamp):
          ((string-match "^[0-9]+$" date)
@@ -481,13 +481,13 @@ which RSS 2.0 allows."
                            0
                          (decoded-time-zone decoded))))))
     (if month
-       (progn
-         (setq cts (current-time-string (encode-time 0 0 0 day month year)))
-         (format "%s, %02d %s %04d %s%s"
-                 (substring cts 0 3) day (substring cts 4 7) year time
-                 (if zone
-                     (concat " " (format-time-string "%z" nil zone))
-                   "")))
+       (concat (let ((system-time-locale "C"))
+                 (format-time-string "%a, %d %b %Y "
+                                     (encode-time 0 0 0 day month year)))
+               time
+               (if zone
+                   (format-time-string " %z" nil zone)
+                 ""))
       (message-make-date given))))
 
 ;;; data functions
diff --git a/lisp/gnus/nnselect.el b/lisp/gnus/nnselect.el
index ecec705b32..9d744ea411 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
 
 ;; Author: Andrew Cohen <cohen@andy.bu.edu>
 ;; Keywords: news mail
@@ -395,8 +395,7 @@ If this variable is nil, or if the provided function 
returns nil,
            (gnus-search-run-query
             (list
              (cons 'search-query-spec
-                   (list (cons 'query `((id . ,article)))
-                         (cons 'criteria "")  (cons 'shortcut t)))
+                   (list (cons 'query (format "id:%s" article))))
              (cons 'search-group-spec servers))))
       (unless (zerop (nnselect-artlist-length artlist))
        (setq
@@ -779,6 +778,10 @@ Return an article list."
        (args (alist-get 'nnselect-args specs)))
     (condition-case-unless-debug err
        (funcall func args)
+      ;; Don't swallow gnus-search errors; the user should be made
+      ;; aware of them.
+      (gnus-search-error
+       (signal (car err) (cdr err)))
       (error (gnus-error 3 "nnselect-run: %s on %s gave error %s" func args 
err)
             []))))
 
@@ -901,7 +904,7 @@ article came from is also searched."
                ;; make sure
                (setq list
                      (sort (map-merge
-                            'list list
+                            'alist list
                             (alist-get type (gnus-info-marks group-info)))
                            (lambda (elt1 elt2)
                              (< (car elt1) (car elt2))))))
diff --git a/lisp/gnus/nnspool.el b/lisp/gnus/nnspool.el
index ce9ab3c53c..39b89abb88 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-2021 Free Software
+;; Copyright (C) 1988-1990, 1993-1998, 2000-2022 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 25289655bf..624c64d4d7 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-2021 Free Software
+;; Copyright (C) 1987-1990, 1992-1998, 2000-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -36,6 +36,7 @@
 (eval-when-compile (require 'cl-lib))
 
 (autoload 'auth-source-search "auth-source")
+(autoload 'auth-info-password "auth-source")
 
 (defgroup nntp nil
   "NNTP access for Gnus."
@@ -1175,10 +1176,7 @@ If SEND-IF-FORCE, only send authinfo to the server if the
                          "563" "nntps" "snews"))))
          (auth-user (plist-get auth-info :user))
          (auth-force (plist-get auth-info :force))
-         (auth-passwd (plist-get auth-info :secret))
-         (auth-passwd (if (functionp auth-passwd)
-                          (funcall auth-passwd)
-                        auth-passwd))
+         (auth-passwd (auth-info-password auth-info))
         (force (or (netrc-get alist "force")
                     nntp-authinfo-force
                     auth-force))
diff --git a/lisp/gnus/nnvirtual.el b/lisp/gnus/nnvirtual.el
index 41a2da958a..7478a2dd0a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2022 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 f08dc47e31..23c104da77 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2022 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 5140861890..8e27e87939 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2001-2022 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 32283af52b..3f83b77425 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 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 e9f703e90c..ac1e081041 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 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 5fa280ea05..334204768b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 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 ab9be0da89..b0d258d67a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 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 bb2a1b97ad..023f646e25 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004, 2007-2022 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 508ef5424e..297576288b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 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 8eb397bc82..c5a9a93482 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2022 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 17fabe4f63..d408efeeb9 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-2021 Free Software
+;; Copyright (C) 1985-1986, 1993-1994, 1998-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
@@ -249,7 +249,8 @@ handling of autoloaded functions."
   ;; calling that.
   (let ((describe-function-orig-buffer
          (or describe-function-orig-buffer
-             (current-buffer))))
+             (current-buffer)))
+        (help-buffer-under-preparation t))
 
     (help-setup-xref
      (list (lambda (function buffer)
@@ -1078,7 +1079,8 @@ it is displayed along with the global value."
                 (if (symbolp v) (symbol-name v))))
      (list (if (equal val "")
               v (intern val)))))
-  (let (file-name)
+  (let (file-name
+        (help-buffer-under-preparation t))
     (unless (buffer-live-p buffer) (setq buffer (current-buffer)))
     (unless (frame-live-p frame) (setq frame (selected-frame)))
     (if (not (symbolp variable))
@@ -1461,77 +1463,78 @@ If FRAME is omitted or nil, use the selected frame."
   (interactive (list (read-face-name "Describe face"
                                      (or (face-at-point t) 'default)
                                      t)))
-  (help-setup-xref (list #'describe-face face)
-                  (called-interactively-p 'interactive))
-  (unless face
-    (setq face 'default))
-  (if (not (listp face))
-      (setq face (list face)))
-  (with-help-window (help-buffer)
-    (with-current-buffer standard-output
-      (dolist (f face (buffer-string))
-       (if (stringp f) (setq f (intern f)))
-       ;; We may get called for anonymous faces (i.e., faces
-       ;; expressed using prop-value plists).  Those can't be
-       ;; usefully customized, so ignore them.
-       (when (symbolp f)
-         (insert "Face: " (symbol-name f))
-         (if (not (facep f))
-             (insert "   undefined face.\n")
-           (let ((customize-label "customize this face")
-                 file-name)
-             (insert (concat " (" (propertize "sample" 'font-lock-face f) ")"))
-             (princ (concat " (" customize-label ")\n"))
-             ;; FIXME not sure how much of this belongs here, and
-             ;; how much in `face-documentation'.  The latter is
-             ;; not used much, but needs to return nil for
-             ;; undocumented faces.
-             (let ((alias (get f 'face-alias))
-                   (face f)
-                   obsolete)
-               (when alias
-                 (setq face alias)
-                 (insert
-                  (format-message
-                    "\n  %s is an alias for the face `%s'.\n%s"
-                    f alias
-                    (if (setq obsolete (get f 'obsolete-face))
-                        (format-message
-                         "  This face is obsolete%s; use `%s' instead.\n"
-                         (if (stringp obsolete)
-                             (format " since %s" obsolete)
-                           "")
-                         alias)
-                      ""))))
-               (insert "\nDocumentation:\n"
-                        (substitute-command-keys
-                         (or (face-documentation face)
-                             "Not documented as a face."))
-                       "\n\n"))
-             (with-current-buffer standard-output
-               (save-excursion
-                 (re-search-backward
-                  (concat "\\(" customize-label "\\)") nil t)
-                 (help-xref-button 1 'help-customize-face f)))
-             (setq file-name (find-lisp-object-file-name f 'defface))
-             (if (not file-name)
-                  (setq help-mode--current-data (list :symbol f))
-                (setq help-mode--current-data (list :symbol f
-                                                    :file file-name))
-               (princ (substitute-command-keys "Defined in `"))
-               (princ (help-fns-short-filename file-name))
-               (princ (substitute-command-keys "'"))
-               ;; Make a hyperlink to the library.
-               (save-excursion
-                 (re-search-backward
-                   (substitute-command-keys "`\\([^`']+\\)'") nil t)
-                 (help-xref-button 1 'help-face-def f file-name))
-               (princ ".")
-               (terpri)
-               (terpri))))
-         (terpri)
-          (help-fns--run-describe-functions
-           help-fns-describe-face-functions f frame))))))
+  (let ((help-buffer-under-preparation t))
+    (help-setup-xref (list #'describe-face face)
+                    (called-interactively-p 'interactive))
+    (unless face
+      (setq face 'default))
+    (if (not (listp face))
+        (setq face (list face)))
+    (with-help-window (help-buffer)
+      (with-current-buffer standard-output
+        (dolist (f face (buffer-string))
+         (if (stringp f) (setq f (intern f)))
+         ;; We may get called for anonymous faces (i.e., faces
+         ;; expressed using prop-value plists).  Those can't be
+         ;; usefully customized, so ignore them.
+         (when (symbolp f)
+           (insert "Face: " (symbol-name f))
+           (if (not (facep f))
+               (insert "   undefined face.\n")
+             (let ((customize-label "customize this face")
+                   file-name)
+               (insert (concat " (" (propertize "sample" 'font-lock-face f) 
")"))
+               (princ (concat " (" customize-label ")\n"))
+               ;; FIXME not sure how much of this belongs here, and
+               ;; how much in `face-documentation'.  The latter is
+               ;; not used much, but needs to return nil for
+               ;; undocumented faces.
+               (let ((alias (get f 'face-alias))
+                     (face f)
+                     obsolete)
+                 (when alias
+                   (setq face alias)
+                   (insert
+                    (format-message
+                      "\n  %s is an alias for the face `%s'.\n%s"
+                      f alias
+                      (if (setq obsolete (get f 'obsolete-face))
+                          (format-message
+                           "  This face is obsolete%s; use `%s' instead.\n"
+                           (if (stringp obsolete)
+                               (format " since %s" obsolete)
+                             "")
+                           alias)
+                        ""))))
+                 (insert "\nDocumentation:\n"
+                          (substitute-command-keys
+                           (or (face-documentation face)
+                               "Not documented as a face."))
+                         "\n\n"))
+               (with-current-buffer standard-output
+                 (save-excursion
+                   (re-search-backward
+                    (concat "\\(" customize-label "\\)") nil t)
+                   (help-xref-button 1 'help-customize-face f)))
+               (setq file-name (find-lisp-object-file-name f 'defface))
+               (if (not file-name)
+                    (setq help-mode--current-data (list :symbol f))
+                  (setq help-mode--current-data (list :symbol f
+                                                      :file file-name))
+                 (princ (substitute-command-keys "Defined in `"))
+                 (princ (help-fns-short-filename file-name))
+                 (princ (substitute-command-keys "'"))
+                 ;; Make a hyperlink to the library.
+                 (save-excursion
+                   (re-search-backward
+                     (substitute-command-keys "`\\([^`']+\\)'") nil t)
+                   (help-xref-button 1 'help-face-def f file-name))
+                 (princ ".")
+                 (terpri)
+                 (terpri))))
+           (terpri)
+            (help-fns--run-describe-functions
+             help-fns-describe-face-functions f frame)))))))
 
 (add-hook 'help-fns-describe-face-functions
           #'help-fns--face-custom-version-info)
@@ -1602,43 +1605,44 @@ current buffer and the selected frame, respectively."
                                (if found (symbol-name v-or-f)))))
      (list (if (equal val "")
               (or v-or-f "") (intern val)))))
-  (if (not (symbolp symbol))
-      (user-error "You didn't specify a function or variable"))
-  (unless (buffer-live-p buffer) (setq buffer (current-buffer)))
-  (unless (frame-live-p frame) (setq frame (selected-frame)))
-  (with-current-buffer (help-buffer)
-    ;; Push the previous item on the stack before clobbering the output buffer.
-    (help-setup-xref nil nil)
-    (let* ((docs
-            (nreverse
-             (delq nil
-                   (mapcar (pcase-lambda (`(,name ,testfn ,descfn))
-                             (when (funcall testfn symbol)
-                               ;; Don't record the current entry in the stack.
-                               (setq help-xref-stack-item nil)
-                               (cons name
-                                     (funcall descfn symbol buffer frame))))
-                           describe-symbol-backends))))
-           (single (null (cdr docs))))
-      (while (cdr docs)
-        (goto-char (point-min))
-        (let ((inhibit-read-only t)
-              (name (caar docs))        ;Name of doc currently at BOB.
-              (doc (cdr (cadr docs))))  ;Doc to add at BOB.
-          (when doc
-            (insert doc)
-            (delete-region (point)
-                           (progn (skip-chars-backward " \t\n") (point)))
-            (insert "\n\n" (make-separator-line) "\n")
-            (when name
-              (insert (symbol-name symbol)
-                      " is also a " name "." "\n\n"))))
-        (setq docs (cdr docs)))
-      (unless single
-        ;; Don't record the `describe-variable' item in the stack.
-        (setq help-xref-stack-item nil)
-        (help-setup-xref (list #'describe-symbol symbol) nil))
-      (goto-char (point-min)))))
+  (let ((help-buffer-under-preparation t))
+    (if (not (symbolp symbol))
+        (user-error "You didn't specify a function or variable"))
+    (unless (buffer-live-p buffer) (setq buffer (current-buffer)))
+    (unless (frame-live-p frame) (setq frame (selected-frame)))
+    (with-current-buffer (help-buffer)
+      ;; Push the previous item on the stack before clobbering the output 
buffer.
+      (help-setup-xref nil nil)
+      (let* ((docs
+              (nreverse
+               (delq nil
+                     (mapcar (pcase-lambda (`(,name ,testfn ,descfn))
+                               (when (funcall testfn symbol)
+                                 ;; Don't record the current entry in the 
stack.
+                                 (setq help-xref-stack-item nil)
+                                 (cons name
+                                       (funcall descfn symbol buffer frame))))
+                             describe-symbol-backends))))
+             (single (null (cdr docs))))
+        (while (cdr docs)
+          (goto-char (point-min))
+          (let ((inhibit-read-only t)
+                (name (caar docs))        ;Name of doc currently at BOB.
+                (doc (cdr (cadr docs))))  ;Doc to add at BOB.
+            (when doc
+              (insert doc)
+              (delete-region (point)
+                             (progn (skip-chars-backward " \t\n") (point)))
+              (insert "\n\n" (make-separator-line) "\n")
+              (when name
+                (insert (symbol-name symbol)
+                        " is also a " name "." "\n\n"))))
+          (setq docs (cdr docs)))
+        (unless single
+          ;; Don't record the `describe-variable' item in the stack.
+          (setq help-xref-stack-item nil)
+          (help-setup-xref (list #'describe-symbol symbol) nil))
+        (goto-char (point-min))))))
 
 ;;;###autoload
 (defun describe-syntax (&optional buffer)
@@ -1647,15 +1651,16 @@ The descriptions are inserted in a help buffer, which 
is then displayed.
 BUFFER defaults to the current buffer."
   (interactive)
   (setq buffer (or buffer (current-buffer)))
-  (help-setup-xref (list #'describe-syntax buffer)
-                  (called-interactively-p 'interactive))
-  (with-help-window (help-buffer)
-    (let ((table (with-current-buffer buffer (syntax-table))))
-      (with-current-buffer standard-output
-       (describe-vector table 'internal-describe-syntax-value)
-       (while (setq table (char-table-parent table))
-         (insert "\nThe parent syntax table is:")
-         (describe-vector table 'internal-describe-syntax-value))))))
+  (let ((help-buffer-under-preparation t))
+    (help-setup-xref (list #'describe-syntax buffer)
+                    (called-interactively-p 'interactive))
+    (with-help-window (help-buffer)
+      (let ((table (with-current-buffer buffer (syntax-table))))
+        (with-current-buffer standard-output
+         (describe-vector table 'internal-describe-syntax-value)
+         (while (setq table (char-table-parent table))
+           (insert "\nThe parent syntax table is:")
+           (describe-vector table 'internal-describe-syntax-value)))))))
 
 (defun help-describe-category-set (value)
   (insert (cond
@@ -1672,59 +1677,60 @@ The descriptions are inserted in a buffer, which is 
then displayed.
 If BUFFER is non-nil, then describe BUFFER's category table instead.
 BUFFER should be a buffer or a buffer name."
   (interactive)
-  (setq buffer (or buffer (current-buffer)))
-  (help-setup-xref (list #'describe-categories buffer)
-                  (called-interactively-p 'interactive))
-  (with-help-window (help-buffer)
-    (let* ((table (with-current-buffer buffer (category-table)))
-          (docs (char-table-extra-slot table 0)))
-      (if (or (not (vectorp docs)) (/= (length docs) 95))
-         (error "Invalid first extra slot in this category table\n"))
-      (with-current-buffer standard-output
-        (setq-default help-button-cache (make-marker))
-       (insert "Legend of category mnemonics ")
-        (insert-button "(longer descriptions at the bottom)"
-                       'action help-button-cache
-                       'follow-link t
-                       'help-echo "mouse-2, RET: show full legend")
-        (insert "\n")
-       (let ((pos (point)) (items 0) lines n)
-         (dotimes (i 95)
-           (if (aref docs i) (setq items (1+ items))))
-         (setq lines (1+ (/ (1- items) 4)))
-         (setq n 0)
+  (let ((help-buffer-under-preparation t))
+    (setq buffer (or buffer (current-buffer)))
+    (help-setup-xref (list #'describe-categories buffer)
+                    (called-interactively-p 'interactive))
+    (with-help-window (help-buffer)
+      (let* ((table (with-current-buffer buffer (category-table)))
+            (docs (char-table-extra-slot table 0)))
+        (if (or (not (vectorp docs)) (/= (length docs) 95))
+           (error "Invalid first extra slot in this category table\n"))
+        (with-current-buffer standard-output
+          (setq-default help-button-cache (make-marker))
+         (insert "Legend of category mnemonics ")
+          (insert-button "(longer descriptions at the bottom)"
+                         'action help-button-cache
+                         'follow-link t
+                         'help-echo "mouse-2, RET: show full legend")
+          (insert "\n")
+         (let ((pos (point)) (items 0) lines n)
+           (dotimes (i 95)
+             (if (aref docs i) (setq items (1+ items))))
+           (setq lines (1+ (/ (1- items) 4)))
+           (setq n 0)
+           (dotimes (i 95)
+             (let ((elt (aref docs i)))
+               (when elt
+                 (string-match ".*" elt)
+                 (setq elt (match-string 0 elt))
+                 (if (>= (length elt) 17)
+                     (setq elt (concat (substring elt 0 14) "...")))
+                 (if (< (point) (point-max))
+                     (move-to-column (* 20 (/ n lines)) t))
+                 (insert (+ i ?\s) ?: elt)
+                 (if (< (point) (point-max))
+                     (forward-line 1)
+                   (insert "\n"))
+                 (setq n (1+ n))
+                 (if (= (% n lines) 0)
+                     (goto-char pos))))))
+         (goto-char (point-max))
+         (insert "\n"
+                 "character(s)\tcategory mnemonics\n"
+                 "------------\t------------------")
+         (describe-vector table 'help-describe-category-set)
+          (set-marker help-button-cache (point))
+         (insert "Legend of category mnemonics:\n")
          (dotimes (i 95)
            (let ((elt (aref docs i)))
              (when elt
-               (string-match ".*" elt)
-               (setq elt (match-string 0 elt))
-               (if (>= (length elt) 17)
-                   (setq elt (concat (substring elt 0 14) "...")))
-               (if (< (point) (point-max))
-                   (move-to-column (* 20 (/ n lines)) t))
-               (insert (+ i ?\s) ?: elt)
-               (if (< (point) (point-max))
-                   (forward-line 1)
-                 (insert "\n"))
-               (setq n (1+ n))
-               (if (= (% n lines) 0)
-                   (goto-char pos))))))
-       (goto-char (point-max))
-       (insert "\n"
-               "character(s)\tcategory mnemonics\n"
-               "------------\t------------------")
-       (describe-vector table 'help-describe-category-set)
-        (set-marker help-button-cache (point))
-       (insert "Legend of category mnemonics:\n")
-       (dotimes (i 95)
-         (let ((elt (aref docs i)))
-           (when elt
-             (if (string-match "\n" elt)
-                 (setq elt (substring elt (match-end 0))))
-             (insert (+ i ?\s) ": " elt "\n"))))
-       (while (setq table (char-table-parent table))
-         (insert "\nThe parent category table is:")
-         (describe-vector table 'help-describe-category-set))))))
+               (if (string-match "\n" elt)
+                   (setq elt (substring elt (match-end 0))))
+               (insert (+ i ?\s) ": " elt "\n"))))
+         (while (setq table (char-table-parent table))
+           (insert "\nThe parent category table is:")
+           (describe-vector table 'help-describe-category-set)))))))
 
 (defun help-fns-find-keymap-name (keymap)
   "Find the name of the variable with value KEYMAP.
@@ -1778,7 +1784,8 @@ keymap value."
      (unless (and km (keymapp (symbol-value km)))
        (user-error "Not a keymap: %s" km))
      (list km)))
-  (let (used-gentemp)
+  (let (used-gentemp
+        (help-buffer-under-preparation t))
     (unless (and (symbolp keymap)
                  (boundp keymap)
                  (keymapp (symbol-value keymap)))
@@ -1844,106 +1851,107 @@ whose documentation describes the minor mode.
 If called from Lisp with a non-nil BUFFER argument, display
 documentation for the major and minor modes of that buffer."
   (interactive "@")
-  (unless buffer (setq buffer (current-buffer)))
-  (help-setup-xref (list #'describe-mode buffer)
-                  (called-interactively-p 'interactive))
-  ;; For the sake of help-do-xref and help-xref-go-back,
-  ;; don't switch buffers before calling `help-buffer'.
-  (with-help-window (help-buffer)
-    (with-current-buffer buffer
-      (let (minors)
-       ;; Older packages do not register in minor-mode-list but only in
-       ;; minor-mode-alist.
-       (dolist (x minor-mode-alist)
-         (setq x (car x))
-         (unless (memq x minor-mode-list)
-           (push x minor-mode-list)))
-       ;; Find enabled minor mode we will want to mention.
-       (dolist (mode minor-mode-list)
-         ;; Document a minor mode if it is listed in minor-mode-alist,
-         ;; non-nil, and has a function definition.
-         (let ((fmode (or (get mode :minor-mode-function) mode)))
-           (and (boundp mode) (symbol-value mode)
-                (fboundp fmode)
-                (let ((pretty-minor-mode
-                       (if (string-match "\\(\\(-minor\\)?-mode\\)?\\'"
-                                         (symbol-name fmode))
-                           (capitalize
-                            (substring (symbol-name fmode)
-                                       0 (match-beginning 0)))
-                         fmode)))
-                  (push (list fmode pretty-minor-mode
-                              (format-mode-line (assq mode minor-mode-alist)))
-                        minors)))))
-       ;; Narrowing is not a minor mode, but its indicator is part of
-       ;; mode-line-modes.
-       (when (buffer-narrowed-p)
-         (push '(narrow-to-region "Narrow" " Narrow") minors))
-       (setq minors
-             (sort minors
-                   (lambda (a b) (string-lessp (cadr a) (cadr b)))))
-       (when minors
-         (princ "Enabled minor modes:\n")
-         (make-local-variable 'help-button-cache)
-         (with-current-buffer standard-output
-           (dolist (mode minors)
-             (let ((mode-function (nth 0 mode))
-                   (pretty-minor-mode (nth 1 mode))
-                   (indicator (nth 2 mode)))
-               (save-excursion
-                 (goto-char (point-max))
-                 (princ "\n\f\n")
-                 (push (point-marker) help-button-cache)
-                 ;; Document the minor modes fully.
-                  (insert-text-button
-                   pretty-minor-mode 'type 'help-function
-                   'help-args (list mode-function)
-                   'button '(t))
-                 (princ (format " minor mode (%s):\n"
-                                (if (zerop (length indicator))
-                                    "no indicator"
-                                  (format "indicator%s"
-                                          indicator))))
-                 (princ (help-split-fundoc (documentation mode-function)
-                                            nil 'doc)))
-               (insert-button pretty-minor-mode
-                              'action (car help-button-cache)
-                              'follow-link t
-                              'help-echo "mouse-2, RET: show full information")
-               (newline)))
-           (forward-line -1)
-           (fill-paragraph nil)
-           (forward-line 1))
-
-         (princ "\n(Information about these minor modes follows the major mode 
info.)\n\n"))
-       ;; Document the major mode.
-       (let ((mode mode-name))
-         (with-current-buffer standard-output
-            (let ((start (point)))
-              (insert (format-mode-line mode nil nil buffer))
-              (add-text-properties start (point) '(face bold)))))
-       (princ " mode")
-       (let* ((mode major-mode)
-              (file-name (find-lisp-object-file-name mode nil)))
-         (if (not file-name)
-              (setq help-mode--current-data (list :symbol mode))
-           (princ (format-message " defined in `%s'"
-                                   (help-fns-short-filename file-name)))
-           ;; Make a hyperlink to the library.
+  (let ((help-buffer-under-preparation t))
+    (unless buffer (setq buffer (current-buffer)))
+    (help-setup-xref (list #'describe-mode buffer)
+                    (called-interactively-p 'interactive))
+    ;; For the sake of help-do-xref and help-xref-go-back,
+    ;; don't switch buffers before calling `help-buffer'.
+    (with-help-window (help-buffer)
+      (with-current-buffer buffer
+       (let (minors)
+         ;; Older packages do not register in minor-mode-list but only in
+         ;; minor-mode-alist.
+         (dolist (x minor-mode-alist)
+           (setq x (car x))
+           (unless (memq x minor-mode-list)
+             (push x minor-mode-list)))
+         ;; Find enabled minor mode we will want to mention.
+         (dolist (mode minor-mode-list)
+           ;; Document a minor mode if it is listed in minor-mode-alist,
+           ;; non-nil, and has a function definition.
+           (let ((fmode (or (get mode :minor-mode-function) mode)))
+             (and (boundp mode) (symbol-value mode)
+                  (fboundp fmode)
+                  (let ((pretty-minor-mode
+                         (if (string-match "\\(\\(-minor\\)?-mode\\)?\\'"
+                                           (symbol-name fmode))
+                             (capitalize
+                              (substring (symbol-name fmode)
+                                         0 (match-beginning 0)))
+                           fmode)))
+                    (push (list fmode pretty-minor-mode
+                                (format-mode-line (assq mode 
minor-mode-alist)))
+                          minors)))))
+         ;; Narrowing is not a minor mode, but its indicator is part of
+         ;; mode-line-modes.
+         (when (buffer-narrowed-p)
+           (push '(narrow-to-region "Narrow" " Narrow") minors))
+         (setq minors
+               (sort minors
+                     (lambda (a b) (string-lessp (cadr a) (cadr b)))))
+         (when minors
+           (princ "Enabled minor modes:\n")
+           (make-local-variable 'help-button-cache)
            (with-current-buffer standard-output
-             (save-excursion
-               (re-search-backward (substitute-command-keys "`\\([^`']+\\)'")
-                                    nil t)
-                (setq help-mode--current-data (list :symbol mode
-                                                    :file file-name))
-                (help-xref-button 1 'help-function-def mode file-name)))))
-        (let ((fundoc (help-split-fundoc (documentation major-mode) nil 'doc)))
-          (with-current-buffer standard-output
-            (insert ":\n")
-            (insert fundoc)
-            (insert (help-fns--list-local-commands)))))))
-  ;; For the sake of IELM and maybe others
-  nil)
+             (dolist (mode minors)
+               (let ((mode-function (nth 0 mode))
+                     (pretty-minor-mode (nth 1 mode))
+                     (indicator (nth 2 mode)))
+                 (save-excursion
+                   (goto-char (point-max))
+                   (princ "\n\f\n")
+                   (push (point-marker) help-button-cache)
+                   ;; Document the minor modes fully.
+                    (insert-text-button
+                     pretty-minor-mode 'type 'help-function
+                     'help-args (list mode-function)
+                     'button '(t))
+                   (princ (format " minor mode (%s):\n"
+                                  (if (zerop (length indicator))
+                                      "no indicator"
+                                    (format "indicator%s"
+                                            indicator))))
+                   (princ (help-split-fundoc (documentation mode-function)
+                                              nil 'doc)))
+                 (insert-button pretty-minor-mode
+                                'action (car help-button-cache)
+                                'follow-link t
+                                'help-echo "mouse-2, RET: show full 
information")
+                 (newline)))
+             (forward-line -1)
+             (fill-paragraph nil)
+             (forward-line 1))
+
+           (princ "\n(Information about these minor modes follows the major 
mode info.)\n\n"))
+         ;; Document the major mode.
+         (let ((mode mode-name))
+           (with-current-buffer standard-output
+              (let ((start (point)))
+               (insert (format-mode-line mode nil nil buffer))
+               (add-text-properties start (point) '(face bold)))))
+         (princ " mode")
+         (let* ((mode major-mode)
+                (file-name (find-lisp-object-file-name mode nil)))
+           (if (not file-name)
+               (setq help-mode--current-data (list :symbol mode))
+             (princ (format-message " defined in `%s'"
+                                     (help-fns-short-filename file-name)))
+             ;; Make a hyperlink to the library.
+             (with-current-buffer standard-output
+               (save-excursion
+                 (re-search-backward (substitute-command-keys "`\\([^`']+\\)'")
+                                      nil t)
+                  (setq help-mode--current-data (list :symbol mode
+                                                      :file file-name))
+                  (help-xref-button 1 'help-function-def mode file-name)))))
+          (let ((fundoc (help-split-fundoc (documentation major-mode) nil 
'doc)))
+            (with-current-buffer standard-output
+              (insert ":\n")
+              (insert fundoc)
+              (insert (help-fns--list-local-commands))))))))
+    ;; For the sake of IELM and maybe others
+    nil)
 
 (defun help-fns--list-local-commands ()
   (let ((functions nil))
@@ -1998,7 +2006,8 @@ one of them returns non-nil."
              (event-end key))
             ((eq key ?\C-g) (signal 'quit nil))
             (t (user-error "You didn't specify a widget"))))))
-  (let (buf)
+  (let (buf
+        (help-buffer-under-preparation t))
     ;; Allow describing a widget in a different window.
     (when (posnp pos)
       (setq buf (window-buffer (posn-window pos))
diff --git a/lisp/help-macro.el b/lisp/help-macro.el
index 588efee66b..91c2a80400 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Lynn Slater <lrs@indetech.com>
 ;; Maintainer: emacs-devel@gnu.org
@@ -93,7 +93,8 @@ and then returns."
      "Help command."
      (interactive)
      (let ((line-prompt
-            (substitute-command-keys ,help-line)))
+            (substitute-command-keys ,help-line))
+           (help-buffer-under-preparation t))
        (when three-step-help
          (message "%s" line-prompt))
        (let* ((help-screen ,help-text)
@@ -166,14 +167,18 @@ and then returns."
                    (let ((cursor-in-echo-area t)
                          (overriding-local-map local-map))
                      (setq key (read-key-sequence
-                                (format "Type one of the options listed%s: "
+                                (format "Type one of listed options%s: "
                                         (if (pos-visible-in-window-p
                                              (point-max))
                                             ""
                                           (concat  ", or "
                                                    
(help--key-description-fontified (kbd "<PageDown>"))
-                                                   " or "
+                                                   "/"
                                                    
(help--key-description-fontified (kbd "<PageUp>"))
+                                                   "/"
+                                                   
(help--key-description-fontified (kbd "SPC"))
+                                                   "/"
+                                                   
(help--key-description-fontified (kbd "DEL"))
                                                    " to scroll"))))
                            char (aref key 0)))
 
diff --git a/lisp/help-mode.el b/lisp/help-mode.el
index 792f2e5af3..894b2a50aa 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-2021 Free Software
+;; Copyright (C) 1985-1986, 1993-1994, 1998-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/help.el b/lisp/help.el
index 9122d96271..b142cce845 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-2021 Free Software
+;; Copyright (C) 1985-1986, 1993-1994, 1998-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
@@ -50,6 +50,11 @@
 (defvar help-window-old-frame nil
   "Frame selected at the time `with-help-window' is invoked.")
 
+(defvar help-buffer-under-preparation nil
+  "Whether a *Help* buffer is being prepared.
+This variable is bound to t during the preparation of a *Help*
+buffer.")
+
 (defvar help-map
   (let ((map (make-sparse-keymap)))
     (define-key map (char-to-string help-char) 'help-for-help)
@@ -524,30 +529,31 @@ See `lossage-size' to update the number of recorded 
keystrokes.
 
 To record all your input, use `open-dribble-file'."
   (interactive)
-  (help-setup-xref (list #'view-lossage)
-                  (called-interactively-p 'interactive))
-  (with-help-window (help-buffer)
-    (princ " ")
-    (princ (mapconcat (lambda (key)
-                       (cond
-                        ((and (consp key) (null (car key)))
-                         (format ";; %s\n" (if (symbolp (cdr key)) (cdr key)
-                                             "anonymous-command")))
-                        ((or (integerp key) (symbolp key) (listp key))
-                         (single-key-description key))
-                        (t
-                         (prin1-to-string key nil))))
-                     (recent-keys 'include-cmds)
-                     " "))
-    (with-current-buffer standard-output
-      (goto-char (point-min))
-      (let ((comment-start ";; ")
-            (comment-column 24))
-        (while (not (eobp))
-          (comment-indent)
-         (forward-line 1)))
-      ;; Show point near the end of "lossage", as we did in Emacs 24.
-      (set-marker help-window-point-marker (point)))))
+  (let ((help-buffer-under-preparation t))
+    (help-setup-xref (list #'view-lossage)
+                    (called-interactively-p 'interactive))
+    (with-help-window (help-buffer)
+      (princ " ")
+      (princ (mapconcat (lambda (key)
+                         (cond
+                          ((and (consp key) (null (car key)))
+                           (format ";; %s\n" (if (symbolp (cdr key)) (cdr key)
+                                               "anonymous-command")))
+                          ((or (integerp key) (symbolp key) (listp key))
+                           (single-key-description key))
+                          (t
+                           (prin1-to-string key nil))))
+                       (recent-keys 'include-cmds)
+                       " "))
+      (with-current-buffer standard-output
+       (goto-char (point-min))
+       (let ((comment-start ";; ")
+              (comment-column 24))
+          (while (not (eobp))
+            (comment-indent)
+           (forward-line 1)))
+       ;; Show point near the end of "lossage", as we did in Emacs 24.
+       (set-marker help-window-point-marker (point))))))
 
 
 ;; Key bindings
@@ -579,31 +585,32 @@ The optional argument BUFFER specifies which buffer's 
bindings
 to display (default, the current buffer).  BUFFER can be a buffer
 or a buffer name."
   (interactive)
-  (or buffer (setq buffer (current-buffer)))
-  (help-setup-xref (list #'describe-bindings prefix buffer)
-                  (called-interactively-p 'interactive))
-  (with-help-window (help-buffer)
-    (with-current-buffer (help-buffer)
-      (describe-buffer-bindings buffer prefix)
-
-      (when describe-bindings-outline
-        (setq-local outline-regexp ".*:$")
-        (setq-local outline-heading-end-regexp ":\n")
-        (setq-local outline-level (lambda () 1))
-        (setq-local outline-minor-mode-cycle t
-                    outline-minor-mode-highlight t)
-        (setq-local outline-minor-mode-use-buttons t)
-        (outline-minor-mode 1)
-        (save-excursion
-          (goto-char (point-min))
-          (let ((inhibit-read-only t))
-            ;; Hide the longest body.
-            (when (re-search-forward "Key translations" nil t)
-              (outline-hide-subtree))
-            ;; Hide ^Ls.
-            (while (search-forward "\n\f\n" nil t)
-              (put-text-property (1+ (match-beginning 0)) (1- (match-end 0))
-                                 'invisible t))))))))
+  (let ((help-buffer-under-preparation t))
+    (or buffer (setq buffer (current-buffer)))
+    (help-setup-xref (list #'describe-bindings prefix buffer)
+                    (called-interactively-p 'interactive))
+    (with-help-window (help-buffer)
+      (with-current-buffer (help-buffer)
+       (describe-buffer-bindings buffer prefix)
+
+       (when describe-bindings-outline
+          (setq-local outline-regexp ".*:$")
+          (setq-local outline-heading-end-regexp ":\n")
+          (setq-local outline-level (lambda () 1))
+          (setq-local outline-minor-mode-cycle t
+                      outline-minor-mode-highlight t)
+          (setq-local outline-minor-mode-use-buttons t)
+          (outline-minor-mode 1)
+          (save-excursion
+            (goto-char (point-min))
+            (let ((inhibit-read-only t))
+              ;; Hide the longest body.
+              (when (re-search-forward "Key translations" nil t)
+               (outline-hide-subtree))
+              ;; Hide ^Ls.
+              (while (search-forward "\n\f\n" nil t)
+               (put-text-property (1+ (match-beginning 0)) (1- (match-end 0))
+                                   'invisible t)))))))))
 
 (defun where-is (definition &optional insert)
   "Print message listing key sequences that invoke the command DEFINITION.
@@ -697,18 +704,14 @@ in the selected window."
         (mouse-msg (if (or (memq 'click modifiers) (memq 'down modifiers)
                            (memq 'drag modifiers))
                         " at that spot" ""))
-         ;; Use `mouse-set-point' to handle the case when a menu item
+         ;; Use `posn-set-point' to handle the case when a menu item
          ;; is selected from the context menu that should describe KEY
          ;; at the position of mouse click that opened the context menu.
-         ;; When no mouse was involved, don't use `mouse-set-point'.
-         (defn (if (or buffer
-                       ;; Clicks on the menu bar produce "event" that
-                       ;; is just '(menu-bar)', for which
-                       ;; `mouse-set-point' is not useful.
-                       (and (not (windowp (posn-window (event-start event))))
-                            (not (framep (posn-window (event-start event))))))
+         ;; When no mouse was involved, don't use `posn-set-point'.
+         (defn (if buffer
                    (key-binding key t)
-                 (save-excursion (mouse-set-point event) (key-binding key 
t)))))
+                 (save-excursion (posn-set-point (event-end event))
+                                 (key-binding key t)))))
     ;; Handle the case where we faked an entry in "Select and Paste" menu.
     (when (and (eq defn nil)
               (stringp (aref key (1- (length key))))
@@ -907,7 +910,8 @@ current buffer."
       (let ((raw (if (numberp buffer) (this-single-command-raw-keys) buffer)))
         (setf (cdar (last key-list)) raw)))
     (setq buffer nil))
-  (let* ((buf (or buffer (current-buffer)))
+  (let* ((help-buffer-under-preparation t)
+         (buf (or buffer (current-buffer)))
          (on-link
           (mapcar (lambda (kr)
                     (let ((raw (cdr kr)))
@@ -1072,11 +1076,12 @@ strings done by `substitute-command-keys'."
   :version "29.1"
   :group 'help)
 
-(defun substitute-command-keys (string)
+(defun substitute-command-keys (string &optional no-face)
   "Substitute key descriptions for command names in STRING.
 Each substring of the form \\\\=[COMMAND] is replaced by either a
 keystroke sequence that invokes COMMAND, or \"M-x COMMAND\" if COMMAND
-is not on any keys.  Keybindings will use the face `help-key-binding'.
+is not on any keys.  Keybindings will use the face `help-key-binding',
+unless the optional argument NO-FACE is non-nil.
 
 Each substring of the form \\\\=`KEYBINDING' will be replaced by
 KEYBINDING and use the `help-key-binding' face.
@@ -1173,20 +1178,27 @@ Otherwise, return a new string."
                       (let ((op (point)))
                         (insert "M-x ")
                         (goto-char (+ end-point 3))
-                        (add-text-properties op (point)
-                                             '( face help-key-binding
-                                                font-lock-face 
help-key-binding))
+                        (or no-face
+                            (add-text-properties
+                             op (point)
+                             '( face help-key-binding
+                                font-lock-face help-key-binding)))
                         (delete-char 1))
                     ;; Function is on a key.
                     (delete-char (- end-point (point)))
-                    (let ((key (help--key-description-fontified key)))
-                      (insert (if (and help-link-key-to-documentation
-                                       (functionp fun))
-                                  ;; The `fboundp' fixes bootstrap.
-                                  (if (fboundp 'help-mode--add-function-link)
-                                      (help-mode--add-function-link key fun)
-                                    key)
-                                key))))))
+
+                    (insert
+                     (if no-face
+                         (key-description key)
+                       (let ((key (help--key-description-fontified key)))
+                         (if (and help-link-key-to-documentation
+                                  help-buffer-under-preparation
+                                  (functionp fun))
+                             ;; The `fboundp' fixes bootstrap.
+                             (if (fboundp 'help-mode--add-function-link)
+                                 (help-mode--add-function-link key fun)
+                               key)
+                           key)))))))
                ;; 1D. \{foo} is replaced with a summary of the keymap
                ;;            (symbol-value foo).
                ;;     \<foo> just sets the keymap used for \[cmd].
@@ -1348,7 +1360,8 @@ Return nil if the key sequence is too long."
 
 (defun help--describe-command (definition &optional translation)
   (cond ((symbolp definition)
-         (if (fboundp definition)
+         (if (and (fboundp definition)
+                  help-buffer-under-preparation)
              (insert-text-button (symbol-name definition)
                                  'type 'help-function
                                  'help-args (list definition))
diff --git a/lisp/hex-util.el b/lisp/hex-util.el
index 41bdc39875..0858e46ec5 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2001-2022 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 79dd5c40c6..7f965486ea 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-2021 Free Software Foundation,
+;; Copyright (C) 1989, 1994, 1998, 2001-2022 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 b7de65f5b7..258502bfe7 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2003, 2009-2022 Free Software Foundation, Inc.
 
 ;; Emacs Lisp Archive Entry
 ;; Package: htmlfontify
diff --git a/lisp/hi-lock.el b/lisp/hi-lock.el
index 7d126cb558..fbd698e234 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
 
 ;; Author: David M. Koppelman <koppel@ece.lsu.edu>
 ;; Keywords: faces, minor-mode, matching, display
diff --git a/lisp/hilit-chg.el b/lisp/hilit-chg.el
index d9fab6b875..10e2512e9d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2000-2022 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 9720709038..9a6bfc604e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 2001-2022 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 26cfcc3f9c..8e60ddf6b0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2000-2022 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 9fe6e825f7..9ea27f2465 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2003, 2009-2022 Free Software Foundation, Inc.
 
 ;; Emacs Lisp Archive Entry
 ;; Package: htmlfontify
@@ -77,6 +77,7 @@
 ;; Changes: moved to changelog (CHANGES) file.
 
 ;;; Code:
+
 (eval-when-compile (require 'cl-lib))
 (require 'cus-edit)
 
@@ -2307,10 +2308,6 @@ See also `hfy-load-tags-cache'."
   (interactive "D source directory: ")
   (hfy-load-tags-cache (directory-file-name srcdir)))
 
-;;(defun hfy-test-read-args (foo bar)
-;;  (interactive "D source directory: \nD target directory: ")
-;;  (message "foo: %S\nbar: %S" foo bar))
-
 (defun hfy-save-kill-buffers (buffer-list &optional dstdir)
   (dolist (B buffer-list)
     (set-buffer B)
diff --git a/lisp/ibuf-ext.el b/lisp/ibuf-ext.el
index 2d2365dc34..30b494f573 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 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 fcc4f9e751..5d2dd47945 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 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 b461197abe..7cfa428e9b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 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 f909a3b177..2986aa192c 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-1994, 1997, 1999, 2001-2021 Free Software
+;; Copyright (C) 1992-1994, 1997, 1999, 2001-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Ken Manheimer <ken dot manheimer at gmail...>
diff --git a/lisp/ido.el b/lisp/ido.el
index 6767d66988..58cec3deb0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
 
 ;; Author: Kim F. Storm <storm@cua.dk>
 ;; Based on: iswitchb by Stephen Eglen <stephen@cns.ed.ac.uk>
@@ -920,85 +920,77 @@ The fallback command is passed as an argument to the 
functions."
 
 ;;;; Keymaps
 
-(defvar ido-common-completion-map
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map minibuffer-local-map)
-    (define-key map "\C-a" 'ido-toggle-ignore)
-    (define-key map "\C-c" 'ido-toggle-case)
-    (define-key map "\C-e" 'ido-edit-input)
-    (define-key map "\t" 'ido-complete)
-    (define-key map " " 'ido-complete-space)
-    (define-key map "\C-j" 'ido-select-text)
-    (define-key map "\C-m" 'ido-exit-minibuffer)
-    (define-key map "\C-p" 'ido-toggle-prefix)
-    (define-key map "\C-r" 'ido-prev-match)
-    (define-key map "\C-s" 'ido-next-match)
-    (define-key map [?\C-.] 'ido-next-match)
-    (define-key map [?\C-,] 'ido-prev-match)
-    (define-key map "\C-t" 'ido-toggle-regexp)
-    (define-key map "\C-z" 'ido-undo-merge-work-directory)
-    (define-key map [(control ?\s)] 'ido-restrict-to-matches)
-    (define-key map [(meta ?\s)] 'ido-take-first-match)
-    (define-key map [(control ?@)] 'ido-restrict-to-matches)
-    (define-key map [right] 'ido-next-match)
-    (define-key map [left] 'ido-prev-match)
-    (define-key map "?" 'ido-completion-help)
-    (define-key map "\C-b" 'ido-magic-backward-char)
-    (define-key map "\C-f" 'ido-magic-forward-char)
-    (define-key map "\C-d" 'ido-magic-delete-char)
-    map)
-  "Keymap for all Ido commands.")
-
-(defvar ido-file-dir-completion-map
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map ido-common-completion-map)
-    (define-key map "\C-x\C-b" 'ido-enter-switch-buffer)
-    (define-key map "\C-x\C-f" 'ido-fallback-command)
-    (define-key map "\C-x\C-d" 'ido-enter-dired)
-    (define-key map [down] 'ido-next-match-dir)
-    (define-key map [up]   'ido-prev-match-dir)
-    (define-key map [(meta up)] 'ido-prev-work-directory)
-    (define-key map [(meta down)] 'ido-next-work-directory)
-    (define-key map [backspace] 'ido-delete-backward-updir)
-    (define-key map "\d"        'ido-delete-backward-updir)
-    (define-key map [remap delete-backward-char] 'ido-delete-backward-updir) ; 
BS
-    (define-key map [remap backward-kill-word] 
'ido-delete-backward-word-updir)  ; M-DEL
-    (define-key map [(control backspace)] 'ido-up-directory)
-    (define-key map "\C-l" 'ido-reread-directory)
-    (define-key map [(meta ?d)] 'ido-wide-find-dir-or-delete-dir)
-    (define-key map [(meta ?b)] 'ido-push-dir)
-    (define-key map [(meta ?v)] 'ido-push-dir-first)
-    (define-key map [(meta ?f)] 'ido-wide-find-file-or-pop-dir)
-    (define-key map [(meta ?k)] 'ido-forget-work-directory)
-    (define-key map [(meta ?m)] 'ido-make-directory)
-    (define-key map [(meta ?n)] 'ido-next-work-directory)
-    (define-key map [(meta ?o)] 'ido-prev-work-file)
-    (define-key map [(meta control ?o)] 'ido-next-work-file)
-    (define-key map [(meta ?p)] 'ido-prev-work-directory)
-    (define-key map [(meta ?s)] 'ido-merge-work-directories)
-    map)
-  "Keymap for Ido file and directory commands.")
-
-(defvar ido-file-completion-map
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map ido-file-dir-completion-map)
-    (define-key map "\C-k" 'ido-delete-file-at-head)
-    (define-key map "\C-o" 'ido-copy-current-word)
-    (define-key map "\C-w" 'ido-copy-current-file-name)
-    (define-key map [(meta ?l)] 'ido-toggle-literal)
-    map)
-  "Keymap for Ido file commands.")
-
-(defvar ido-buffer-completion-map
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map ido-common-completion-map)
-    (define-key map "\C-x\C-f" 'ido-enter-find-file)
-    (define-key map "\C-x\C-b" 'ido-fallback-command)
-    (define-key map "\C-k" 'ido-kill-buffer-at-head)
-    (define-key map [?\C-\S-b] 'ido-bury-buffer-at-head)
-    (define-key map "\C-o" 'ido-toggle-virtual-buffers)
-    map)
-  "Keymap for Ido buffer commands.")
+(defvar-keymap ido-common-completion-map
+  :doc "Keymap for all Ido commands."
+  :parent minibuffer-local-map
+  "C-a"     #'ido-toggle-ignore
+  "C-c"     #'ido-toggle-case
+  "C-e"     #'ido-edit-input
+  "TAB"     #'ido-complete
+  "SPC"     #'ido-complete-space
+  "C-j"     #'ido-select-text
+  "C-m"     #'ido-exit-minibuffer
+  "C-p"     #'ido-toggle-prefix
+  "C-r"     #'ido-prev-match
+  "C-s"     #'ido-next-match
+  "C-."     #'ido-next-match
+  "C-,"     #'ido-prev-match
+  "C-t"     #'ido-toggle-regexp
+  "C-z"     #'ido-undo-merge-work-directory
+  "C-SPC"   #'ido-restrict-to-matches
+  "M-SPC"   #'ido-take-first-match
+  "C-@"     #'ido-restrict-to-matches
+  "<right>" #'ido-next-match
+  "<left>"  #'ido-prev-match
+  "?"       #'ido-completion-help
+  "C-b"     #'ido-magic-backward-char
+  "C-f"     #'ido-magic-forward-char
+  "C-d"     #'ido-magic-delete-char)
+
+(defvar-keymap ido-file-dir-completion-map
+  :doc "Keymap for Ido file and directory commands."
+  :parent ido-common-completion-map
+  "C-x C-b"     #'ido-enter-switch-buffer
+  "C-x C-f"     #'ido-fallback-command
+  "C-x C-d"     #'ido-enter-dired
+  "<down>"      #'ido-next-match-dir
+  "<up>"        #'ido-prev-match-dir
+  "M-<up>"      #'ido-prev-work-directory
+  "M-<down>"    #'ido-next-work-directory
+  "<backspace>" #'ido-delete-backward-updir
+  "DEL"         #'ido-delete-backward-updir
+  "<remap> <delete-backward-char>" #'ido-delete-backward-updir
+  "<remap> <backward-kill-word>"   #'ido-delete-backward-word-updir
+  "C-<backspace>" #'ido-up-directory
+  "C-l"   #'ido-reread-directory
+  "M-d"   #'ido-wide-find-dir-or-delete-dir
+  "M-b"   #'ido-push-dir
+  "M-v"   #'ido-push-dir-first
+  "M-f"   #'ido-wide-find-file-or-pop-dir
+  "M-k"   #'ido-forget-work-directory
+  "M-m"   #'ido-make-directory
+  "M-n"   #'ido-next-work-directory
+  "M-o"   #'ido-prev-work-file
+  "C-M-o" #'ido-next-work-file
+  "M-p"   #'ido-prev-work-directory
+  "M-s"   #'ido-merge-work-directories)
+
+(defvar-keymap ido-file-completion-map
+  :doc "Keymap for Ido file commands."
+  :parent ido-file-dir-completion-map
+  "C-k" #'ido-delete-file-at-head
+  "C-o" #'ido-copy-current-word
+  "C-w" #'ido-copy-current-file-name
+  "M-l" #'ido-toggle-literal)
+
+(defvar-keymap ido-buffer-completion-map
+  :doc "Keymap for Ido buffer commands."
+  :parent ido-common-completion-map
+  "C-x C-f" #'ido-enter-find-file
+  "C-x C-b" #'ido-fallback-command
+  "C-k"     #'ido-kill-buffer-at-head
+  "C-S-b"   #'ido-bury-buffer-at-head
+  "C-o"     #'ido-toggle-virtual-buffers)
 
 ;;;; Persistent variables
 
diff --git a/lisp/ielm.el b/lisp/ielm.el
index 39820a893a..47c1792118 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: David Smith <maa036@lancaster.ac.uk>
 ;; Maintainer: emacs-devel@gnu.org
@@ -148,28 +148,28 @@ such as `edebug-defun' to work with such inputs."
 This variable is buffer-local.")
 
 (defvar ielm-header
-  "*** Welcome to IELM ***  Type (describe-mode) for help.\n"
+  (substitute-command-keys
+   "*** Welcome to IELM ***  Type (describe-mode) or press \
+\\[describe-mode] for help.\n")
   "Message to display when IELM is started.")
 
 (defvaralias 'inferior-emacs-lisp-mode-map 'ielm-map)
-(defvar ielm-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map "\t" 'ielm-tab)
-    (define-key map "\C-m" 'ielm-return)
-    (define-key map "\e\C-m" 'ielm-return-for-effect)
-    (define-key map "\C-j" 'ielm-send-input)
-    (define-key map "\e\C-x" 'eval-defun)         ; for consistency with
-    (define-key map "\e\t" 'completion-at-point)  ; lisp-interaction-mode
-    ;; These bindings are from `lisp-mode-shared-map' -- can you inherit
-    ;; from more than one keymap??
-    (define-key map "\e\C-q" 'indent-sexp)
-    (define-key map "\177" 'backward-delete-char-untabify)
-    ;; Some convenience bindings for setting the working buffer
-    (define-key map "\C-c\C-b" 'ielm-change-working-buffer)
-    (define-key map "\C-c\C-f" 'ielm-display-working-buffer)
-    (define-key map "\C-c\C-v" 'ielm-print-working-buffer)
-    map)
-  "Keymap for IELM mode.")
+(defvar-keymap ielm-map
+  :doc "Keymap for IELM mode."
+  "TAB"     #'ielm-tab
+  "RET"     #'ielm-return
+  "M-RET"   #'ielm-return-for-effect
+  "C-j"     #'ielm-send-input
+  "C-M-x"   #'eval-defun                ; for consistency with
+  "M-TAB"   #'completion-at-point       ; lisp-interaction-mode
+  ;; These bindings are from `lisp-mode-shared-map' -- can you inherit
+  ;; from more than one keymap??
+  "C-M-q"   #'indent-sexp
+  "DEL"     #'backward-delete-char-untabify
+  ;; Some convenience bindings for setting the working buffer
+  "C-c C-b" #'ielm-change-working-buffer
+  "C-c C-f" #'ielm-display-working-buffer
+  "C-c C-v" #'ielm-print-working-buffer)
 
 (easy-menu-define ielm-menu ielm-map
   "IELM mode menu."
diff --git a/lisp/iimage.el b/lisp/iimage.el
index b18dd841fc..2fe50d3e3f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
 
 ;; Author: KOSEKI Yoshinori <kose@meadowy.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/image-dired.el b/lisp/image-dired.el
index 47a44a4a60..536f29441a 100644
--- a/lisp/image-dired.el
+++ b/lisp/image-dired.el
@@ -1,6 +1,6 @@
 ;;; image-dired.el --- use dired to browse and manipulate your images -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2005-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2022 Free Software Foundation, Inc.
 
 ;; Version: 0.4.11
 ;; Keywords: multimedia
@@ -41,7 +41,7 @@
 ;;
 ;;  I briefly tried out thumbs.el, and although it seemed more
 ;; powerful than this package, it did not work the way I wanted to.  It
-;; was too slow to created thumbnails of all files in a directory (I
+;; was too slow to create thumbnails of all files in a directory (I
 ;; currently keep all my 2000+ images in the same directory) and
 ;; browsing the thumbnail buffer was slow too.  image-dired.el will not
 ;; create thumbnails until they are needed and the browsing is done
@@ -103,9 +103,6 @@
 ;; TODO
 ;; ====
 ;;
-;; * Some sort of auto-rotate function based on rotate info in the
-;;   EXIF data.
-;;
 ;; * Investigate if it is possible to also write the tags to the image
 ;;   files.
 ;;
@@ -114,12 +111,6 @@
 ;;
 ;; * From thumbs.el: Add setroot function.
 ;;
-;; * From thumbs.el: Add image resizing, if useful (image-dired's automatic
-;;  "image fit" might be enough)
-;;
-;; * From thumbs.el: Add the "modify" commands (emboss, negate,
-;;   monochrome etc).
-;;
 ;; * Add `image-dired-display-thumbs-ring' and functions to cycle that.  Find 
out
 ;;   which is best, saving old batch just before inserting new, or
 ;;   saving the current batch in the ring when inserting it.  Adding
@@ -499,6 +490,17 @@ variable is nil, it will never ask."
                  (const :tag "Disable warning" nil))
   :version "29.1")
 
+(defcustom image-dired-marking-shows-next t
+  "If non-nil, marking, unmarking or flagging an image shows the next image.
+
+This affects the following commands:
+\\<image-dired-thumbnail-mode-map>
+    `image-dired-flag-thumb-original-file'   (bound to 
\\[image-dired-flag-thumb-original-file])
+    `image-dired-mark-thumb-original-file'   (bound to 
\\[image-dired-mark-thumb-original-file])
+    `image-dired-unmark-thumb-original-file' (bound to 
\\[image-dired-unmark-thumb-original-file])"
+  :type 'boolean
+  :version "29.1")
+
 
 ;;; Util functions
 
@@ -540,7 +542,7 @@ Create the thumbnail directory if it does not exist."
 
 (defun image-dired-get-thumbnail-image (file)
   "Return the image descriptor for a thumbnail of image file FILE."
-  (unless (string-match (image-file-name-regexp) file)
+  (unless (string-match-p (image-file-name-regexp) file)
     (error "%s is not a valid image file" file))
   (let* ((thumb-file (image-dired-thumb-name file))
         (thumb-attr (file-attributes thumb-file)))
@@ -768,7 +770,7 @@ and remove the cached thumbnail files between each trial 
run.")
               (image-dired-debug-message
                (format-time-string
                 "Generated thumbnails in %s.%3N seconds"
-                (time-subtract (current-time)
+               (time-subtract nil
                                image-dired--generate-thumbs-start))))
             (if (not (and (eq (process-status process) 'exit)
                           (zerop (process-exit-status process))))
@@ -1280,7 +1282,7 @@ but the other way around."
         (when found
           (if (setq window (image-dired-thumbnail-window))
               (set-window-point window (point)))
-          (image-dired-display-thumb-properties))))))
+          (image-dired-update-header-line))))))
 
 (defun image-dired-dired-next-line (&optional arg)
   "Call `dired-next-line', then track thumbnail.
@@ -1307,7 +1309,7 @@ With prefix argument, move ARG lines."
       (when (and (equal (current-buffer) old-buf)
                  (= (point) old-point))
         (ignore-errors
-          (image-dired-display-thumb-properties))))))
+          (image-dired-update-header-line))))))
 
 (defun image-dired-forward-image (&optional arg wrap-around)
   "Move to next image and display properties.
@@ -1330,13 +1332,13 @@ point is on the last image, move to the last one and 
vice versa."
                  (setq pos (point))
                  (image-dired-image-at-point-p)))
           (progn (goto-char pos)
-                 (image-dired-display-thumb-properties))
+                 (image-dired-update-header-line))
         (if wrap-around
             (progn (goto-char (if (> arg 0)
                                   (point-min)
                                 ;; There are two spaces after the last image.
                                 (- (point-max) 2)))
-                   (image-dired-display-thumb-properties))
+                   (image-dired-update-header-line))
           (message "At %s image" (if (> arg 0) "last" "first"))
           (run-at-time 1 nil (image-dired--display-thumb-properties-fun))))))
   (when image-dired-track-movement
@@ -1361,7 +1363,7 @@ On reaching end or beginning of buffer, stop and show a 
message."
       (image-dired-backward-image))
   (if image-dired-track-movement
       (image-dired-track-original-file))
-  (image-dired-display-thumb-properties))
+  (image-dired-update-header-line))
 
 
 (defun image-dired-previous-line ()
@@ -1378,7 +1380,7 @@ On reaching end or beginning of buffer, stop and show a 
message."
       (image-dired-backward-image))
   (if image-dired-track-movement
       (image-dired-track-original-file))
-  (image-dired-display-thumb-properties))
+  (image-dired-update-header-line))
 
 (defun image-dired-beginning-of-buffer ()
   "Move to the first image in the buffer and display properties."
@@ -1389,7 +1391,7 @@ On reaching end or beginning of buffer, stop and show a 
message."
     (forward-char 1))
   (when image-dired-track-movement
     (image-dired-track-original-file))
-  (image-dired-display-thumb-properties))
+  (image-dired-update-header-line))
 
 (defun image-dired-end-of-buffer ()
   "Move to the last image in the buffer and display properties."
@@ -1400,7 +1402,7 @@ On reaching end or beginning of buffer, stop and show a 
message."
     (forward-char -1))
   (when image-dired-track-movement
     (image-dired-track-original-file))
-  (image-dired-display-thumb-properties))
+  (image-dired-update-header-line))
 
 (defun image-dired-format-properties-string (buf file props comment)
   "Format display properties.
@@ -1415,21 +1417,23 @@ comment."
     (cons ?t (or props ""))
     (cons ?c (or comment "")))))
 
-(defun image-dired-display-thumb-properties ()
-  "Display thumbnail properties in the echo area."
-  (if (not (eobp))
-      (let ((file-name (file-name-nondirectory 
(image-dired-original-file-name)))
-            (dired-buf (buffer-name (image-dired-associated-dired-buffer)))
-            (props (mapconcat #'identity (get-text-property (point) 'tags) ", 
"))
-            (comment (get-text-property (point) 'comment))
-            (message-log-max nil))
-        (if file-name
-             (message "%s"
-             (image-dired-format-properties-string
-              dired-buf
-              file-name
-              props
-              comment))))))
+(defun image-dired-update-header-line ()
+  "Update image information in the header line."
+  (when (and (not (eobp))
+             (memq major-mode '(image-dired-thumbnail-mode
+                                image-dired-display-image-mode)))
+    (let ((file-name (file-name-nondirectory (image-dired-original-file-name)))
+          (dired-buf (buffer-name (image-dired-associated-dired-buffer)))
+          (props (mapconcat #'identity (get-text-property (point) 'tags) ", "))
+          (comment (get-text-property (point) 'comment))
+          (message-log-max nil))
+      (if file-name
+          (setq header-line-format
+                (image-dired-format-properties-string
+                 dired-buf
+                 file-name
+                 props
+                 comment))))))
 
 (defun image-dired-dired-file-marked-p (&optional marker)
   "In Dired, return t if file on current line is marked.
@@ -1445,11 +1449,20 @@ for.  The default is to look for `dired-marker-char'."
   "In Dired, return t if file on current line is flagged for deletion."
   (image-dired-dired-file-marked-p dired-del-marker))
 
+(defmacro image-dired--with-thumbnail-buffer (&rest body)
+  (declare (indent defun) (debug t))
+  `(if-let ((buf (get-buffer image-dired-thumbnail-buffer)))
+       (with-current-buffer buf
+         (if-let ((win (get-buffer-window buf)))
+             (with-selected-window win
+               ,@body)
+           ,@body))
+     (user-error "No such buffer: %s" image-dired-thumbnail-buffer)))
+
 (defmacro image-dired--on-file-in-dired-buffer (&rest body)
   "Run BODY with point on file at point in Dired buffer.
 Should be called from commands in `image-dired-thumbnail-mode'."
-  (declare (indent defun)
-           (debug 1))
+  (declare (indent defun) (debug t))
   `(let ((file-name (image-dired-original-file-name))
          (dired-buf (image-dired-associated-dired-buffer)))
      (if (not (and dired-buf file-name))
@@ -1459,31 +1472,42 @@ Should be called from commands in 
`image-dired-thumbnail-mode'."
            ,@body
            (image-dired-thumb-update-marks))))))
 
+(defmacro image-dired--do-mark-command (maybe-next &rest body)
+  "Helper macro for the mark, unmark and flag commands.
+Run BODY in Dired buffer.
+If optional argument MAYBE-NEXT is non-nil, show next image
+according to `image-dired-marking-shows-next'."
+  (declare (indent defun) (debug t))
+  `(image-dired--with-thumbnail-buffer
+     (image-dired--on-file-in-dired-buffer
+       ,@body)
+     ,(when maybe-next
+        '(if image-dired-marking-shows-next
+             (image-dired-display-next-thumbnail-original)
+           (image-dired-next-line)))))
+
 (defun image-dired-mark-thumb-original-file ()
   "Mark original image file in associated Dired buffer."
-  (interactive nil image-dired-thumbnail-mode)
-  (image-dired--on-file-in-dired-buffer
-    (dired-mark 1))
-  (image-dired-forward-image))
+  (interactive nil image-dired-thumbnail-mode image-dired-display-image-mode)
+  (image-dired--do-mark-command t
+    (dired-mark 1)))
 
 (defun image-dired-unmark-thumb-original-file ()
   "Unmark original image file in associated Dired buffer."
-  (interactive nil image-dired-thumbnail-mode)
-  (image-dired--on-file-in-dired-buffer
-    (dired-unmark 1))
-  (image-dired-forward-image))
+  (interactive nil image-dired-thumbnail-mode image-dired-display-image-mode)
+  (image-dired--do-mark-command t
+    (dired-unmark 1)))
 
 (defun image-dired-flag-thumb-original-file ()
   "Flag original image file for deletion in associated Dired buffer."
-  (interactive nil image-dired-thumbnail-mode)
-  (image-dired--on-file-in-dired-buffer
-    (dired-flag-file-deletion 1))
-  (image-dired-forward-image))
+  (interactive nil image-dired-thumbnail-mode image-dired-display-image-mode)
+  (image-dired--do-mark-command t
+    (dired-flag-file-deletion 1)))
 
 (defun image-dired-toggle-mark-thumb-original-file ()
   "Toggle mark on original image file in associated Dired buffer."
-  (interactive nil image-dired-thumbnail-mode)
-  (image-dired--on-file-in-dired-buffer
+  (interactive nil image-dired-thumbnail-mode image-dired-display-image-mode)
+  (image-dired--do-mark-command nil
     (if (image-dired-dired-file-marked-p)
         (dired-unmark 1)
       (dired-mark 1))))
@@ -1491,10 +1515,11 @@ Should be called from commands in 
`image-dired-thumbnail-mode'."
 (defun image-dired-unmark-all-marks ()
   "Remove all marks from all files in associated Dired buffer.
 Also update the marks in the thumbnail buffer."
-  (interactive nil image-dired-thumbnail-mode)
-  (with-current-buffer (image-dired-associated-dired-buffer)
+  (interactive nil image-dired-thumbnail-mode image-dired-display-image-mode)
+  (image-dired--do-mark-command nil
     (dired-unmark-all-marks))
-  (image-dired-thumb-update-marks))
+  (image-dired--with-thumbnail-buffer
+    (image-dired-thumb-update-marks)))
 
 (defun image-dired-jump-original-dired-buffer ()
   "Jump to the Dired buffer associated with the current image file.
@@ -1593,11 +1618,6 @@ You probably want to use this together with
     (define-key map [down-mouse-1] #'image-dired-mouse-select-thumbnail)
     (define-key map [down-mouse-2] #'image-dired-mouse-select-thumbnail)
     (define-key map [down-mouse-3] #'image-dired-mouse-select-thumbnail)
-    ;; Let's disable mouse dragging, as it currently doesn't do
-    ;; anything useful.
-    (define-key map [drag-mouse-1] #'ignore)
-    (define-key map [drag-mouse-2] #'ignore)
-    (define-key map [drag-mouse-3] #'ignore)
     ;; Seems I must first set C-down-mouse-1 to undefined, or else it
     ;; will trigger the buffer menu. If I try to instead bind
     ;; C-down-mouse-1 to `image-dired-mouse-toggle-mark', I get a message
@@ -1643,16 +1663,16 @@ You probably want to use this together with
 (defvar image-dired-display-image-mode-map
   (let ((map (make-sparse-keymap)))
     (define-key map "S" #'image-dired-slideshow-start)
+    (define-key map (kbd "SPC") #'image-dired-display-next-thumbnail-original)
+    (define-key map (kbd "DEL") 
#'image-dired-display-previous-thumbnail-original)
+    (define-key map "n" #'image-dired-display-next-thumbnail-original)
+    (define-key map "p" #'image-dired-display-previous-thumbnail-original)
+    (define-key map "m" #'image-dired-mark-thumb-original-file)
+    (define-key map "d" #'image-dired-flag-thumb-original-file)
+    (define-key map "u" #'image-dired-unmark-thumb-original-file)
+    (define-key map "U" #'image-dired-unmark-all-marks)
     ;; Disable keybindings from `image-mode-map' that doesn't make sense here.
     (define-key map "o" nil) ; image-save
-    (define-key map "n" nil) ; image-next-file
-    (define-key map "p" nil) ; image-previous-file
-    ;; FIXME: Should be replaced with image-dired commands.
-    (define-key map (kbd "DEL") nil) ; image-next-file
-    (define-key map (kbd "SPC") nil) ; image-next-file
-    ;; FIXME: Should be replaced with image-dired commands.
-    (define-key map "m" nil) ; image-mode-mark-file
-    (define-key map "u" nil) ; image-mode-unmark-file
     map)
   "Keymap for `image-dired-display-image-mode'.")
 
@@ -1782,21 +1802,22 @@ This is used by `image-dired-slideshow-start'."
     (image-dired-slideshow-stop)))
 
 (defun image-dired-slideshow-start (&optional arg)
-  "Start a slideshow.
-Wait `image-dired-slideshow-delay' seconds before showing the
-next image.
+  "Start a slideshow, waiting `image-dired-slideshow-delay' between images.
 
 With prefix argument ARG, wait that many seconds before going to
 the next image.
 
 With a negative prefix argument, prompt user for the delay."
   (interactive "P" image-dired-thumbnail-mode image-dired-display-image-mode)
-  (let ((delay (if (> arg 0)
-                   arg
-                 (string-to-number
-                  (read-string
-                   (let ((delay (number-to-string 
image-dired-slideshow-delay)))
-                     (format-prompt "Delay, in seconds. Decimals are accepted" 
delay) delay))))))
+  (let ((delay (if (not arg)
+                   image-dired-slideshow-delay
+                 (if (> arg 0)
+                     arg
+                   (string-to-number
+                    (let ((delay (number-to-string 
image-dired-slideshow-delay)))
+                      (read-string
+                       (format-prompt "Delay, in seconds. Decimals are 
accepted" delay))
+                      delay))))))
     (setq image-dired--slideshow-timer
           (run-with-timer
            0 delay
@@ -2133,16 +2154,17 @@ function.  The result is a couple of new files in
 ;;; Thumbnail mode (cont.)
 
 (defun image-dired-display-next-thumbnail-original (&optional arg)
-  "In thumbnail buffer, move to next thumbnail and display the image.
+  "Move to the next image in the thumbnail buffer and display it.
 With prefix ARG, move that many thumbnails."
-  (interactive "p" image-dired-thumbnail-mode)
-  (image-dired-forward-image arg t)
-  (image-dired-display-thumbnail-original-image))
+  (interactive "p" image-dired-thumbnail-mode image-dired-display-image-mode)
+  (image-dired--with-thumbnail-buffer
+    (image-dired-forward-image arg t)
+    (image-dired-display-thumbnail-original-image)))
 
 (defun image-dired-display-previous-thumbnail-original (arg)
-  "In thumbnail buffer, move to previous thumbnail and display image.
+  "Move to the previous image in the thumbnail buffer and display it.
 With prefix ARG, move that many thumbnails."
-  (interactive "p" image-dired-thumbnail-mode)
+  (interactive "p" image-dired-thumbnail-mode image-dired-display-image-mode)
   (image-dired-display-next-thumbnail-original (- arg)))
 
 
@@ -2211,7 +2233,7 @@ FILE-COMMENTS is an alist on the following form:
          (comment (image-dired-read-comment file)))
     (image-dired-write-comments (list (cons file comment)))
     (image-dired-update-property 'comment comment))
-  (image-dired-display-thumb-properties))
+  (image-dired-update-header-line))
 
 (defun image-dired-read-comment (&optional file)
   "Read comment for an image.
@@ -2304,7 +2326,7 @@ non-nil."
     (image-dired-backward-image))
   (if image-dired-track-movement
       (image-dired-track-original-file))
-  (image-dired-display-thumb-properties))
+  (image-dired-update-header-line))
 
 
 
@@ -2995,6 +3017,11 @@ Dired."
                   (cons (list tag file) (cdr image-dired-tag-file-list))))
       (setq image-dired-tag-file-list (list (list tag file))))))
 
+(defun image-dired-display-thumb-properties ()
+  "Display thumbnail properties in the echo area."
+  (declare (obsolete image-dired-update-header-line "29.1"))
+  (image-dired-update-header-line))
+
 (defvar image-dired-slideshow-count 0
   "Keeping track on number of images in slideshow.")
 (make-obsolete-variable 'image-dired-slideshow-count "no longer used." "29.1")
diff --git a/lisp/image-file.el b/lisp/image-file.el
index 6df43f737d..0ed88e8e74 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 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 624c852cb8..5bee155460 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2022 Free Software Foundation, Inc.
 ;;
 ;; Author: Richard Stallman <rms@gnu.org>
 ;; Keywords: multimedia
@@ -60,15 +60,11 @@ Its value should be one of the following:
  - nil, meaning no resizing.
  - t, meaning to scale the image down to fit in the window.
  - `fit-window', meaning to fit the image to the window.
- - `fit-height', meaning to fit the image to the window height.
- - `fit-width', meaning to fit the image to the window width.
  - A number, which is a scale factor (the default size is 1).
 
 Resizing will always preserve the aspect ratio of the image."
   :type '(choice (const :tag "No resizing" nil)
                  (const :tag "Fit to window" fit-window)
-                 (const :tag "Fit to window height" fit-height)
-                 (const :tag "Fit to window width" fit-width)
                  (other :tag "Scale down to fit window" t)
                  (number :tag "Scale factor" 1))
   :version "29.1"
@@ -78,7 +74,7 @@ Resizing will always preserve the aspect ratio of the image."
   "Max size (in percent) to scale up to when `image-auto-resize' is 
`fit-window'.
 Can be either a number larger than 100, or nil, which means no
 max size."
-  :type '(choice (const nil "No max")
+  :type '(choice (const :tag "No max" nil)
                  natnum)
   :version "29.1"
   :group 'image)
@@ -100,9 +96,11 @@ Its value should be one of the following:
  - nil, meaning no resizing.
  - t, meaning to scale the image down to fit in the window.
  - `fit-window', meaning to fit the image to the window.
+ - A number, which is a scale factor (the default size is 1).
+
+There is also support for these values, obsolete since Emacs 29.1:
  - `fit-height', meaning to fit the image to the window height.
  - `fit-width', meaning to fit the image to the window width.
- - A number, which is a scale factor (the default size is 1).
 
 Resizing will always preserve the aspect ratio of the image.")
 
@@ -457,6 +455,15 @@ call."
 
 ;;; Image Mode setup
 
+(defcustom image-text-based-formats '(svg xpm)
+  "List of image formats that use a plain text format.
+For such formats, display a message that explains how to edit the
+image as text, when opening such images in `image-mode'."
+  :type '(choice (const :tag "Disable completely" nil)
+                 (repeat :tag "List of formats" sexp))
+  :version "29.1"
+  :group 'image)
+
 (defvar-local image-type nil
   "The image type for the current Image mode buffer.")
 
@@ -621,8 +628,9 @@ call."
 ;;;###autoload
 (defun image-mode ()
   "Major mode for image files.
-You can use \\<image-mode-map>\\[image-toggle-display] or 
\\<image-mode-map>\\[image-toggle-hex-display]
-to toggle between display as an image and display as text or hex.
+You can use \\<image-mode-map>\\[image-toggle-display] or \
+\\[image-toggle-hex-display] to toggle between display
+as an image and display as text or hex.
 
 Key bindings:
 \\{image-mode-map}"
@@ -694,12 +702,10 @@ Key bindings:
 
   (run-mode-hooks 'image-mode-hook)
   (let ((image (image-get-display-property))
-       (msg1 (substitute-command-keys
-               "Type \\[image-toggle-display] or \\[image-toggle-hex-display] 
to view the image as "))
-       animated)
+        msg animated)
     (cond
      ((null image)
-      (message "%s" (concat msg1 "an image.")))
+      (setq msg "an image"))
      ((setq animated (image-multi-frame-p image))
       (setq image-multi-frame t
            mode-line-process
@@ -717,10 +723,13 @@ Key bindings:
                          keymap
                          (down-mouse-1 . image-next-frame)
                          (down-mouse-3 . image-previous-frame)))))))
-      (message "%s"
-              (concat msg1 "text.  This image has multiple frames.")))
+      (setq msg "text.  This image has multiple frames"))
      (t
-      (message "%s" (concat msg1 "text or hex."))))))
+      (setq msg "text")))
+    (when (memq (plist-get (cdr image) :type) image-text-based-formats)
+      (message (substitute-command-keys
+                "Type \\[image-toggle-display] to view the image as %s")
+               msg))))
 
 ;;;###autoload
 (define-minor-mode image-minor-mode
@@ -767,11 +776,11 @@ on these modes."
   (image-mode-to-text)
   ;; Turn on hexl-mode
   (hexl-mode)
-  (message "%s" (concat
-                 (substitute-command-keys
-                  "Type \\[image-toggle-hex-display] or 
\\[image-toggle-display] to view the image as ")
-                 (if (image-get-display-property)
-                     "hex" "an image or text") ".")))
+  (message (substitute-command-keys
+            "Type \\[image-toggle-hex-display] or \
+\\[image-toggle-display] to view the image as %s")
+           (if (image-get-display-property)
+               "hex" "an image or text")))
 
 (defun image-mode-as-text ()
   "Set a non-image mode as major mode in combination with image minor mode.
@@ -787,11 +796,10 @@ See commands `image-mode' and `image-minor-mode' for more 
information
 on these modes."
   (interactive)
   (image-mode-to-text)
-  (message "%s" (concat
-                 (substitute-command-keys
-                  "Type \\[image-toggle-display] or 
\\[image-toggle-hex-display] to view the image as ")
-                 (if (image-get-display-property)
-                     "text" "an image or hex") ".")))
+  (message (substitute-command-keys
+            "Type \\[image-toggle-display] to view the image as %s")
+           (if (image-get-display-property)
+               "text" "an image")))
 
 (defun image-toggle-display-text ()
   "Show the image file as text.
diff --git a/lisp/image.el b/lisp/image.el
index edbf6c54df..c9165f7781 100644
--- a/lisp/image.el
+++ b/lisp/image.el
@@ -1,6 +1,6 @@
 ;;; image.el --- image API  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1998-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: multimedia
@@ -27,6 +27,8 @@
 
 (defgroup image ()
   "Image support."
+  :prefix "image-"
+  :link '(info-link "(emacs) Image Mode")
   :group 'multimedia)
 
 (declare-function image-flush "image.c" (spec &optional frame))
@@ -56,7 +58,7 @@ static \\(unsigned \\)?char \\1_bits" . xbm)
                "\\(?:!DOCTYPE[ \t\r\n]+[^>]*>[ \t\r\n]*<[ \t\r\n]*" comment-re 
"*\\)?"
                "[Ss][Vv][Gg]"))
      . svg)
-    )
+    
("\\`....ftyp\\(heic\\|heix\\|hevc\\|heim\\|heis\\|hevm\\|hevs\\|mif1\\|msf1\\)"
 . heic))
   "Alist of (REGEXP . IMAGE-TYPE) pairs used to auto-detect image types.
 When the first bytes of an image file match REGEXP, it is assumed to
 be of image type IMAGE-TYPE if IMAGE-TYPE is a symbol.  If not a symbol,
@@ -76,7 +78,7 @@ a non-nil value, TYPE is the image's type.")
     ("\\.ps\\'" . postscript)
     ("\\.tiff?\\'" . tiff)
     ("\\.svgz?\\'" . svg)
-    )
+    ("\\.hei[cf]s?\\'" . heic))
   "Alist of (REGEXP . IMAGE-TYPE) pairs used to identify image files.
 When the name of an image file match REGEXP, it is assumed to
 be of image type IMAGE-TYPE.")
@@ -95,7 +97,8 @@ be of image type IMAGE-TYPE.")
     (tiff . maybe)
     (svg . maybe)
     (webp . maybe)
-    (postscript . nil))
+    (postscript . nil)
+    (heic . maybe))
   "Alist of (IMAGE-TYPE . AUTODETECT) pairs used to auto-detect image files.
 \(See `image-type-auto-detected-p').
 
@@ -951,9 +954,9 @@ for the animation speed.  A negative value means to animate 
in reverse."
                   (progn
                     (message "Stopping animation; animation possibly too big")
                     nil)))
-      (image-show-frame image n t)
-      (let* ((speed (image-animate-get-speed image))
-            (time (current-time))
+      (let* ((time (prog1 (current-time)
+                    (image-show-frame image n t)))
+            (speed (image-animate-get-speed image))
             (time-to-load-image (time-since time))
             (stated-delay-time
               (/ (or (cdr (plist-get (cdr image) :animate-multi-frame-data))
diff --git a/lisp/image/compface.el b/lisp/image/compface.el
index 6519615f4e..b8bb7a83bc 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 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 372e2d2555..35666b954c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 f6f056a2ba..78a2df72c4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
 
 ;; Author: Julien Danjou <julien@danjou.info>
 ;; Keywords: comm, multimedia
@@ -277,7 +277,7 @@ where GRAVATAR is either an image descriptor, or the symbol
               ;; Store the image in the cache.
               (when image
                 (setf (gethash mail-address gravatar--cache)
-                      (cons (time-convert (current-time) 'integer)
+                     (cons (time-convert nil 'integer)
                             image)))
               (prog1
                   (apply callback (if data image 'error) cbargs)
@@ -286,7 +286,7 @@ where GRAVATAR is either an image descriptor, or the symbol
 
 (defun gravatar--prune-cache ()
   (let ((expired nil)
-        (time (- (time-convert (current-time) 'integer)
+       (time (- (time-convert nil 'integer)
                  ;; Twelve hours.
                  (* 12 60 60))))
     (maphash (lambda (key val)
diff --git a/lisp/image/image-converter.el b/lisp/image/image-converter.el
index 75d2e6692c..460ff16adb 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: images
diff --git a/lisp/imenu.el b/lisp/imenu.el
index 22412d5f88..a87860f006 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1998, 2001-2022 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 ec01733d12..40669b3842 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1995, 2001-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Package: emacs
diff --git a/lisp/info-look.el b/lisp/info-look.el
index 4812035919..64f16df4dc 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1999, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Ralph Schleicher <rs@ralph-schleicher.de>
 ;; Keywords: help languages
@@ -94,7 +94,10 @@ HELP-DATA is a HELP-TOPIC's public data set.
 
     (HELP-MODE REGEXP IGNORE-CASE DOC-SPEC PARSE-RULE OTHER-MODES)
 
-HELP-MODE is a mode's symbol.
+HELP-MODE is either a mode's symbol, or a cons cell of the
+form (HELP-MODE . SYMBOL-PREFIX), where SYMBOL-PREFIX is the
+prefix (the part up to the first dash) of names of symbols whose
+documentation is specified by DOC-SPEC.
 REGEXP is a regular expression matching those help items whose
  documentation can be looked up via DOC-SPEC.
 IGNORE-CASE is non-nil if help items are case insensitive.
@@ -159,8 +162,10 @@ KEYWORD is either `:topic', `:mode', `:regexp', 
`:ignore-case',
   doing so at load time, this is done when the user asks for info on
   the mode in question.
 
-ARGUMENT has a value as explained in the documentation of the
- variable `info-lookup-alist'.
+ARGUMENT is the value corresponding to KEYWORD.  The meaning of the values
+is explained in the documentation of the variable `info-lookup-alist': for
+example, the value corresponding to `:topic' is documented as HELP-TOPIC,
+the value of `:mode' as HELP-MODE, etc..
 
 If no topic or mode option has been specified, then the help topic defaults
 to `symbol', and the help mode defaults to the current major mode."
@@ -276,14 +281,19 @@ system."
 ;;;###autoload (put 'info-lookup-symbol 'info-file "emacs")
 ;;;###autoload
 (defun info-lookup-symbol (symbol &optional mode)
-  "Display the definition of SYMBOL, as found in the relevant manual.
-When this command is called interactively, it reads SYMBOL from the
-minibuffer.  In the minibuffer, use \\<minibuffer-local-completion-map>\
-\\[next-history-element] to yank the default argument
-value into the minibuffer so you can edit it.  The default symbol is the
-one found at point.
-
-With prefix arg MODE a query for the symbol help mode is offered."
+  "Look up and display documentation of SYMBOL in the relevant Info manual.
+SYMBOL should be an identifier: a function or method, a macro, a variable,
+a data type, a class, etc.
+
+Interactively, prompt for SYMBOL; you can use 
\\<minibuffer-local-completion-map>\\[next-history-element] in the minibuffer
+to yank the default argument value into the minibuffer so you can edit it.
+The default symbol is the one found at point.
+
+MODE is the major mode whose Info manuals to search for the documentation
+of SYMBOL.  It defaults to the current buffer's `major-mode'; if that
+mode doesn't have any Info manuals known to Emacs, the command will
+prompt for MODE to use, with completion.  With prefix arg, the command
+always prompts for MODE."
   (interactive
    (info-lookup-interactive-arguments 'symbol current-prefix-arg))
   (info-lookup 'symbol symbol mode))
@@ -291,20 +301,28 @@ With prefix arg MODE a query for the symbol help mode is 
offered."
 ;;;###autoload (put 'info-lookup-file 'info-file "emacs")
 ;;;###autoload
 (defun info-lookup-file (file &optional mode)
-  "Display the documentation of a file.
-When this command is called interactively, it reads FILE from the minibuffer.
-In the minibuffer, use \\<minibuffer-local-completion-map>\
-\\[next-history-element] to yank the default file name
-into the minibuffer so you can edit it.
+  "Look up and display documentation of FILE in the relevant Info manual.
+FILE should be the name of a file; a notable example is a standard header
+file that is part of the C or C++ standard library.
+
+Interactively, prompt for FILE; you can use 
\\<minibuffer-local-completion-map>\\[next-history-element] in the minibuffer
+to yank the default argument value into the minibuffer so you can edit it.
 The default file name is the one found at point.
 
-With prefix arg MODE a query for the file help mode is offered."
+MODE is the major mode whose Info manuals to search for the documentation
+of FILE.  It defaults to the current buffer's `major-mode'; if that
+mode doesn't have any Info manuals known to Emacs, the command will
+prompt for MODE to use, with completion.  With prefix arg, the command
+always prompts for MODE."
   (interactive
    (info-lookup-interactive-arguments 'file current-prefix-arg))
   (info-lookup 'file file mode))
 
 (defun info-lookup-interactive-arguments (topic &optional query)
-  "Read and return argument value (and help mode) for help topic TOPIC.
+  "Read and return argument value (and help mode) for help TOPIC.
+TOPIC should be any known symbol of a help topic, such as `file'
+or `symbol'.  See the documentation of HELP-TOPIC in the doc
+string of `info-lookup-alist'.
 If optional argument QUERY is non-nil, query for the help mode."
   (let* ((mode (cond (query
                      (info-lookup-change-mode topic))
@@ -347,7 +365,10 @@ If optional argument QUERY is non-nil, query for the help 
mode."
 
 (defun info-lookup-change-mode (topic)
   (let* ((completions (mapcar (lambda (arg)
-                               (cons (symbol-name (car arg)) (car arg)))
+                                (let ((mode-spec (car arg)))
+                                  (and (consp mode-spec)
+                                       (setq mode-spec (car mode-spec)))
+                                 (cons (symbol-name mode-spec) mode-spec)))
                              (info-lookup->topic-value topic)))
         (mode (completing-read
                (format "Use %s help mode: " topic)
@@ -368,7 +389,15 @@ If optional argument QUERY is non-nil, query for the help 
mode."
       mode)))
 
 (defun info-lookup (topic item mode)
-  "Display the documentation of a help item."
+  "Display the documentation of TOPIC whose name is ITEM, using MODE's manuals.
+TOPIC should be any known symbol of a help topic type, such as `file'
+or `symbol'.  See the documentation of HELP-TOPIC in the doc
+string of `info-lookup-alist'.
+ITEM is the item whose documentation to search: file name if
+TOPIC is `file', a symbol if TOPIC is `symbol', etc.
+MODE is the `major-mode' whose Info manuals to search for documentation
+of ITEM; if it's nil, the function uses `info-lookup-file-name-alist'
+and the current buffer's file name to guess the mode.."
   (or mode (setq mode (info-lookup-select-mode)))
   (setq mode (info-lookup--item-to-mode item mode))
   (if-let ((info (info-lookup->mode-value topic mode)))
diff --git a/lisp/info-xref.el b/lisp/info-xref.el
index f791927ee1..d3f603ee5b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
 
 ;; Author: Kevin Ryde <user42@zip.com.au>
 ;; Keywords: docs
diff --git a/lisp/info.el b/lisp/info.el
index 94537c2417..f4f0f9790c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1986, 1992-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: help
@@ -115,7 +115,9 @@ The Lisp code is executed when the node is selected.")
 (defface info-menu-star
   '((((class color)) :foreground "red1")
     (t :underline t))
-  "Face for every third `*' in an Info menu.")
+  "Face used to emphasize `*' in an Info menu.
+The face is assigned to the third, sixth, and ninth `*' for easier
+orientation.  See `Info-nth-menu-item'.")
 
 (defface info-xref
   '((t :inherit link))
diff --git a/lisp/informat.el b/lisp/informat.el
index b552e8532a..e7595fa541 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1986, 2001-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: help
diff --git a/lisp/international/ccl.el b/lisp/international/ccl.el
index 883b0b60fc..9188e3d6ae 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2022 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 ec995743f5..080e7898c4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2000-2022 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)
@@ -1493,6 +1493,9 @@ Setup `char-width-table' appropriate for non-CJK language 
environment."
 (aset char-acronym-table #x202D "LRO")    ; LEFT-TO-RIGHT OVERRIDE
 (aset char-acronym-table #x202E "RLO")    ; RIGHT-TO-LEFT OVERRIDE
 (aset char-acronym-table #x2060 "WJ")     ; WORD JOINER
+(aset char-acronym-table #x2066 "LRI")    ; LEFT-TO-RIGHT ISOLATE
+(aset char-acronym-table #x2067 "RLI")    ; RIGHT-TO-LEFT ISOLATE
+(aset char-acronym-table #x2069 "PDI")    ; POP DIRECTIONAL ISOLATE
 (aset char-acronym-table #x206A "ISS")    ; INHIBIT SYMMETRIC SWAPPING
 (aset char-acronym-table #x206B "ASS")    ; ACTIVATE SYMMETRIC SWAPPING
 (aset char-acronym-table #x206C "IAFS")    ; INHIBIT ARABIC FORM SHAPING
@@ -1517,18 +1520,32 @@ Setup `char-width-table' appropriate for non-CJK 
language environment."
   (aset char-acronym-table (+ #xE0021 i) (format " %c TAG" (+ 33 i))))
 (aset char-acronym-table #xE007F "->|TAG") ; CANCEL TAG
 
+;; We can't use the \N{name} things here, because this file is used
+;; too early in the build process.
+(defvar glyphless--bidi-control-characters
+  '(#x202a                          ; ?\N{left-to-right embedding}
+    #x202b                          ; ?\N{right-to-left embedding}
+    #x202d                          ; ?\N{left-to-right override}
+    #x202e                          ; ?\N{right-to-left override}
+    #x2066                          ; ?\N{left-to-right isolate}
+    #x2067                          ; ?\N{right-to-left isolate}
+    #x2068                          ; ?\N{first strong isolate}
+    #x202c                          ; ?\N{pop directional formatting}
+    #x2069))                         ; ?\N{pop directional isolate})
+
 (defun update-glyphless-char-display (&optional variable value)
   "Make the setting of `glyphless-char-display-control' take effect.
 This function updates the char-table `glyphless-char-display',
 and is intended to be used in the `:set' attribute of the
 option `glyphless-char-display'."
-  (when value
+  (when variable
     (set-default variable value))
   (dolist (elt value)
     (let ((target (car elt))
          (method (cdr elt)))
-      (or (memq method '(zero-width thin-space empty-box acronym hex-code))
-         (error "Invalid glyphless character display method: %s" method))
+      (unless (memq method '( zero-width thin-space empty-box
+                              acronym hex-code bidi-control))
+       (error "Invalid glyphless character display method: %s" method))
       (cond ((eq target 'c0-control)
             (glyphless-set-char-table-range glyphless-char-display
                                             #x00 #x1F method)
@@ -1543,24 +1560,29 @@ option `glyphless-char-display'."
            ((eq target 'variation-selectors)
             (glyphless-set-char-table-range glyphless-char-display
                                             #xFE00 #xFE0F method))
-           ((eq target 'format-control)
+           ((or (eq target 'format-control)
+                 (eq target 'bidi-control))
             (when unicode-category-table
               (map-char-table
                 (lambda (char category)
-                  (if (eq category 'Cf)
-                      (let ((this-method method)
-                            from to)
-                        (if (consp char)
-                            (setq from (car char) to (cdr char))
-                          (setq from char to char))
-                        (while (<= from to)
-                          (when (/= from #xAD)
-                            (if (eq method 'acronym)
-                                (setq this-method
-                                      (aref char-acronym-table from)))
+                  (when (eq category 'Cf)
+                    (let ((this-method method)
+                          from to)
+                      (if (consp char)
+                          (setq from (car char) to (cdr char))
+                        (setq from char to char))
+                      (while (<= from to)
+                        (when (/= from #xAD)
+                          (when (eq method 'acronym)
+                            (setq this-method
+                                  (or (aref char-acronym-table from)
+                                      "UNK")))
+                          (when (or (eq target 'format-control)
+                                    (memq from
+                                          glyphless--bidi-control-characters))
                             (set-char-table-range glyphless-char-display
-                                                  from this-method))
-                          (setq from (1+ from))))))
+                                                  from this-method)))
+                        (setq from (1+ from))))))
                unicode-category-table)))
            ((eq target 'no-font)
             (set-char-table-extra-slot glyphless-char-display 0 method))
@@ -1576,6 +1598,19 @@ option `glyphless-char-display'."
     (set-char-table-range chartable (cons from to) method)))
 
 ;;; Control of displaying glyphless characters.
+(define-widget 'glyphless-char-display-method 'lazy
+  "Display method for glyphless characters."
+  :group 'mule
+  :format "%v"
+  :value 'thin-space
+  :type
+  '(choice
+    (const :tag "Don't display" zero-width)
+    (const :tag "Display as thin space" thin-space)
+    (const :tag "Display as empty box" empty-box)
+    (const :tag "Display acronym" acronym)
+    (const :tag "Display hex code in a box" hex-code)))
+
 (defcustom glyphless-char-display-control
   '((format-control . thin-space)
     (variation-selectors . thin-space)
@@ -1594,12 +1629,17 @@ GROUP must be one of these symbols:
                     such as U+200C (ZWNJ), U+200E (LRM), but
                     excluding characters that have graphic images,
                     such as U+00AD (SHY).
-  `variation-selectors': U+FE00..U+FE0F, used for choosing between
-                         glyph variations (e.g. Emoji vs Text
-                         presentation).
-  `no-font':        characters for which no suitable font is found.
-                    For character terminals, characters that cannot
-                    be encoded by `terminal-coding-system'.
+  `bidi-control':   A subset of `format-control', but only characters
+                    that are relevant for bidirectional formatting control,
+                    like U+2069 (PDI) and U+202B (RLE).
+  `variation-selectors':
+                    Characters in the range U+FE00..U+FE0F, used for
+                    selecting alternate glyph presentations, such as
+                    Emoji vs Text presentation, of the preceding
+                    character(s).
+  `no-font':        For GUI frames, characters for which no suitable
+                    font is found; for text-mode frames, characters
+                    that cannot be encoded by `terminal-coding-system'.
 
 METHOD must be one of these symbols:
   `zero-width': don't display.
@@ -1617,41 +1657,12 @@ function (`update-glyphless-char-display'), which 
updates
   :version "28.1"
   :type '(alist :key-type (symbol :tag "Character Group")
                :value-type (symbol :tag "Display Method"))
-  :options '((c0-control
-             (choice :value thin-space
-                      (const :tag "Don't display" zero-width)
-                     (const :tag "Display as thin space" thin-space)
-                     (const :tag "Display as empty box" empty-box)
-                     (const :tag "Display acronym" acronym)
-                     (const :tag "Display hex code in a box" hex-code)))
-            (c1-control
-             (choice :value thin-space
-                      (const :tag "Don't display" zero-width)
-                     (const :tag "Display as thin space" thin-space)
-                     (const :tag "Display as empty box" empty-box)
-                     (const :tag "Display acronym" acronym)
-                     (const :tag "Display hex code in a box" hex-code)))
-            (format-control
-             (choice :value thin-space
-                      (const :tag "Don't display" zero-width)
-                     (const :tag "Display as thin space" thin-space)
-                     (const :tag "Display as empty box" empty-box)
-                     (const :tag "Display acronym" acronym)
-                     (const :tag "Display hex code in a box" hex-code)))
-            (variation-selectors
-             (choice :value thin-space
-                      (const :tag "Don't display" zero-width)
-                     (const :tag "Display as thin space" thin-space)
-                     (const :tag "Display as empty box" empty-box)
-                     (const :tag "Display acronym" acronym)
-                     (const :tag "Display hex code in a box" hex-code)))
-            (no-font
-             (choice :value hex-code
-                      (const :tag "Don't display" zero-width)
-                     (const :tag "Display as thin space" thin-space)
-                     (const :tag "Display as empty box" empty-box)
-                     (const :tag "Display acronym" acronym)
-                     (const :tag "Display hex code in a box" hex-code))))
+  :options '((c0-control glyphless-char-display-method)
+            (c1-control glyphless-char-display-method)
+            (format-control glyphless-char-display-method)
+            (bidi-control glyphless-char-display-method)
+            (variation-selectors glyphless-char-display-method)
+            (no-font (glyphless-char-display-method :value hex-code)))
   :set 'update-glyphless-char-display
   :group 'display)
 
diff --git a/lisp/international/emoji.el b/lisp/international/emoji.el
index 5f8c358caa..264a1f09dc 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 ;; Author: Lars Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: fun
@@ -30,6 +30,7 @@
 (require 'cl-lib)
 (require 'cl-extra)
 (require 'transient)
+(require 'multisession)
 
 (defgroup emoji nil
   "Inserting Emojis."
@@ -59,14 +60,15 @@
 (defvar emoji--derived nil)
 (defvar emoji--names (make-hash-table :test #'equal))
 (defvar emoji--done-derived nil)
-(defvar emoji--recent (list "😀" "😖"))
+(define-multisession-variable emoji--recent (list "😀" "😖"))
 (defvar emoji--insert-buffer)
 
 ;;;###autoload
 (defun emoji-insert (&optional text)
   "Choose and insert an emoji glyph.
-If TEXT (interactively, the prefix), use a textual search instead
-of a visual interface."
+If TEXT (interactively, the prefix argument), choose the emoji
+by typing its Unicode Standard name (with completion), instead
+of selecting from emoji display."
   (interactive "*P")
   (emoji--init)
   (if text
@@ -77,17 +79,19 @@ of a visual interface."
 
 ;;;###autoload
 (defun emoji-recent ()
-  "Choose and insert a recently used emoji glyph."
+  "Choose and insert one of the recently-used emoji glyphs."
   (interactive "*")
   (emoji--init)
   (unless (fboundp 'emoji--command-Emoji)
     (emoji--define-transient))
   (funcall (emoji--define-transient
-            (cons "Recent" emoji--recent) t)))
+            (cons "Recent" (multisession-value emoji--recent)) t)))
 
 ;;;###autoload
 (defun emoji-search ()
-  "Choose and insert an emoji glyph by searching for an emoji name."
+  "Choose and insert an emoji glyph by typing its Unicode name.
+This command prompts for an emoji name, with completion, and inserts it.
+It recognizes the Unicode Standard names of emoji."
   (interactive "*")
   (emoji--init)
   (emoji--choose-emoji))
@@ -95,8 +99,9 @@ of a visual interface."
 ;;;###autoload
 (defun emoji-list ()
   "List emojis and insert the one that's selected.
-The character will be inserted into the buffer that was selected
-when the command was issued."
+Select the emoji by typing \\<emoji-list-mode-map>\\[emoji-list-select] on its 
picture.
+The glyph will be inserted into the buffer that was current
+when the command was invoked."
   (interactive "*")
   (let ((buf (current-buffer)))
     (emoji--init)
@@ -112,11 +117,13 @@ when the command was issued."
 
 ;;;###autoload
 (defun emoji-describe (glyph &optional interactive)
-  "Say what the name of the composed grapheme cluster GLYPH is.
-If it's not known, this function returns nil.
+  "Display the name of the grapheme cluster composed from GLYPH.
+GLYPH should be a string of one or more characters which together
+produce an emoji.  Interactively, GLYPH is the emoji at point (it
+could also be any character, not just emoji).
 
-Interactively, it will message what the name of the emoji (or
-character) under point is."
+If called from Lisp, return the name as a string; return nil if
+the name is not known."
   (interactive
    (list (if (eobp)
              (error "No glyph under point")
@@ -223,14 +230,14 @@ character) under point is."
                                     nil end-func)))))))
 
 (defun emoji-list-help ()
-  "Say what the emoji under point is."
+  "Display the name of the emoji at point."
   (interactive nil emoji-list-mode)
   (let ((glyph (get-text-property (point) 'emoji-glyph)))
     (unless glyph
-      (error "No emoji under point"))
+      (error "No emoji here"))
     (let ((name (emoji--name glyph)))
       (if (not name)
-          (error "Unknown name")
+          (error "Emoji name is unknown")
         (message "%s" name)))))
 
 (defun emoji--init (&optional force inhibit-adjust)
@@ -298,6 +305,7 @@ character) under point is."
     (setq emoji--names (make-hash-table :test #'equal))
     (let ((derivations (make-hash-table :test #'equal))
           (case-fold-search t)
+          (glyphs nil)
           group subgroup)
       (while (not (eobp))
         (cond
@@ -311,27 +319,40 @@ character) under point is."
           (let* ((codes (match-string 1))
                  (qualification (match-string 2))
                  (name (match-string 3))
-                 (base (emoji--base-name name derivations))
                  (glyph (mapconcat
                          (lambda (code)
                            (string (string-to-number code 16)))
                          (split-string codes))))
-            ;; Special-case flags.
-            (when (equal base "flag")
-              (setq base name))
-            ;; Register all glyphs to that we can look up their names
-            ;; later.
-            (setf (gethash glyph emoji--names) name)
-            ;; For the interface, we only care about the fully qualified
-            ;; emojis.
-            (when (equal qualification "fully-qualified")
-              (when (equal base name)
-                (emoji--add-to-group group subgroup glyph))
-              ;; Create mapping from base glyph name to name of
-              ;; derived glyphs.
-              (setf (gethash base derivations)
-                    (nconc (gethash base derivations) (list glyph)))))))
+            (push (list name qualification group subgroup glyph) glyphs))))
         (forward-line 1))
+      ;; We sort the data so that the "person foo" variant comes
+      ;; first, so that that becomes the key.
+      (setq glyphs
+            (sort (nreverse glyphs)
+                  (lambda (g1 g2)
+                    (and (equal (nth 2 g1) (nth 2 g2))
+                         (equal (nth 3 g1) (nth 3 g2))
+                         (< (emoji--score (car g1))
+                            (emoji--score (car g2)))))))
+      ;; Get the derivations.
+      (cl-loop for (name qualification group subgroup glyph) in glyphs
+               for base = (emoji--base-name name derivations)
+               do
+               ;; Special-case flags.
+               (when (equal base "flag")
+                 (setq base name))
+               ;; Register all glyphs to that we can look up their names
+               ;; later.
+               (setf (gethash glyph emoji--names) name)
+               ;; For the interface, we only care about the fully qualified
+               ;; emojis.
+               (when (equal qualification "fully-qualified")
+                 (when (equal base name)
+                   (emoji--add-to-group group subgroup glyph))
+                 ;; Create mapping from base glyph name to name of
+                 ;; derived glyphs.
+                 (setf (gethash base derivations)
+                       (nconc (gethash base derivations) (list glyph)))))
       ;; Finally create the mapping from the base glyphs to derived ones.
       (setq emoji--derived (make-hash-table :test #'equal))
       (maphash (lambda (_k v)
@@ -339,6 +360,12 @@ character) under point is."
                        (cdr v)))
                derivations))))
 
+(defun emoji--score (string)
+  (if (string-match-p "person\\|people"
+                      (replace-regexp-in-string ":.*" "" string))
+      0
+    1))
+
 (defun emoji--add-to-group (group subgroup glyph)
   ;; "People & Body" is very large; split it up.
   (cond
@@ -399,20 +426,31 @@ character) under point is."
 ;; no-update-autoloads: t
 ;; End:
 
-(provide 'emoji-labels)
+\(provide 'emoji-labels)
 
-;;; emoji-labels.el ends here\n")
+\;;; emoji-labels.el ends here\n")
     (write-region (point-min) (point-max) file)))
 
 (defun emoji--base-name (name derivations)
-  (let* ((base (replace-regexp-in-string ":.*" "" name))
-         (non-binary (replace-regexp-in-string "\\`\\(man\\|woman\\) " ""
-                                               base)))
-    ;; If we have (for instance) "person golfing", and we're adding
-    ;; "man golfing", make the latter a derivation of the former.
-    (if (or (gethash (concat "person " non-binary) derivations)
-            (gethash non-binary derivations))
-        non-binary
+  (let* ((base (replace-regexp-in-string ":.*" "" name)))
+    (catch 'found
+      ;; If we have (for instance) "person golfing", and we're adding
+      ;; "man golfing", make the latter a derivation of the former.
+      (let ((non-binary (replace-regexp-in-string
+                         "\\`\\(m[ae]n\\|wom[ae]n\\) " "" base)))
+        (dolist (prefix '("person " "people " ""))
+          (let ((key (concat prefix non-binary)))
+            (when (gethash key derivations)
+              (throw 'found key)))))
+      ;; We can also have the gender at the end of the string, like
+      ;; "merman" and "pregnant woman".
+      (let ((non-binary (replace-regexp-in-string
+                         "\\(m[ae]n\\|wom[ae]n\\|maid\\)\\'" "" base)))
+        (dolist (suffix '(" person" "person" ""))
+          (let ((key (concat non-binary suffix)))
+            (when (gethash key derivations)
+              (throw 'found key)))))
+      ;; Just return the base.
       base)))
 
 (defun emoji--split-subgroup (subgroup)
@@ -497,7 +535,7 @@ character) under point is."
                                          t end-function))
                                     ;; Insert the emoji.
                                     (lambda ()
-                                      (interactive)
+                                      (interactive nil not-a-mode)
                                       ;; Allow switching to the correct
                                       ;; buffer.
                                       (when end-function
@@ -510,7 +548,7 @@ character) under point is."
     ;; There's probably a better way to do this...
     (setf (symbol-function name)
           (lambda ()
-            (interactive)
+            (interactive nil not-a-mode)
             (transient-setup name)))
     (pcase-let ((`(,class ,slots ,suffixes ,docstr ,_body)
                  (transient--expand-define-args (list args))))
@@ -529,15 +567,18 @@ character) under point is."
   (lambda ()
     (interactive)
     (funcall (emoji--define-transient
-              (cons "Recent" emoji--recent) t end-function))))
+              (cons "Recent" (multisession-value emoji--recent))
+              t end-function))))
 
 (defun emoji--add-recent (glyph)
   "Add GLYPH to the set of recently used emojis."
-  (setq emoji--recent (delete glyph emoji--recent))
-  (push glyph emoji--recent)
-  ;; Shorten the list.
-  (when-let ((tail (nthcdr 30 emoji--recent)))
-    (setcdr tail nil)))
+  (let ((recent (multisession-value emoji--recent)))
+    (setq recent (delete glyph recent))
+    (push glyph recent)
+    ;; Shorten the list.
+    (when-let ((tail (nthcdr 30 recent)))
+      (setcdr tail nil))
+    (setf (multisession-value emoji--recent) recent)))
 
 (defun emoji--columnize (list columns)
   "Split LIST into COLUMN columns."
diff --git a/lisp/international/fontset.el b/lisp/international/fontset.el
index 7c3a7cd1a9..a2e0838a42 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2022 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 b890bde48d..76190b8fc0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2022 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 f8cb61c08f..6fbe930334 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-2021 Free Software Foundation,
+;; Copyright (C) 1987, 1995, 1998, 2001-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Howard Gayle
diff --git a/lisp/international/iso-cvt.el b/lisp/international/iso-cvt.el
index f0bfe9f682..614d42e521 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1998, 2000-2022 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 2c7da2b7cd..10f8ce6efb 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-2021 Free Software Foundation,
+;; Copyright (C) 1987, 1993-1999, 2001-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Howard Gayle
@@ -86,33 +86,46 @@
     ("\"y"  . [?ÿ])
     ("''"   . [?´])
     ("'A"   . [?Á])
+    ("'C"   . [?Ć])
     ("'E"   . [?É])
     ("'I"   . [?Í])
+    ("'N"   . [?Ń])
     ("'O"   . [?Ó])
+    ("'S"   . [?Ś])
     ("'U"   . [?Ú])
     ("'Y"   . [?Ý])
+    ("'Z"   . [?Ź])
     ("'a"   . [?á])
+    ("'c"   . [?ć])
     ("'e"   . [?é])
     ("'i"   . [?í])
+    ("'n"   . [?ń])
     ("'o"   . [?ó])
+    ("'s"   . [?ś])
     ("'u"   . [?ú])
     ("'y"   . [?ý])
+    ("'z"   . [?ź])
     ("*$"   . [?¤])
     ("$"    . [?¤])
     ("*+"   . [?±])
     ("+"    . [?±])
     (",,"   . [?¸])
+    (",A"   . [?Ą])
     (",C"   . [?Ç])
+    (",a"   . [?ą])
     (",c"   . [?ç])
     ("*-"   . [?­])
     ("-"    . [?­])
     ("*."   . [?·])
-    ("."    . [?·])
+    (".."   . [?·])
+    (".z"   . [?ż])
     ("//"   . [?÷])
     ("/A"   . [?Å])
+    ("/L"   . [?Ł])
     ("/E"   . [?Æ])
     ("/O"   . [?Ø])
     ("/a"   . [?å])
+    ("/l"   . [?ł])
     ("/e"   . [?æ])
     ("/o"   . [?ø])
     ("1/2"  . [?½])
@@ -294,6 +307,14 @@ sequence VECTOR.  (VECTOR is normally one character 
long.)")
     (setq alist (cdr alist))))
 
 (defun iso-transl-set-language (lang)
+  "Set shorter key bindings for some characters relevant for LANG.
+This affects the `C-x 8' prefix.
+
+Note that only a few languages are supported, and for more
+rigorous support it is recommended to use an input method
+instead.  Also note that many of these characters can be input
+with the regular `C-x 8' map without having to specify a language
+here."
   (interactive (list (let ((completion-ignore-case t))
                       (completing-read "Set which language? "
                                        iso-transl-language-alist nil t))))
diff --git a/lisp/international/ja-dic-cnv.el b/lisp/international/ja-dic-cnv.el
index 793508cae4..704f1a1ae6 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 05179a98ac..6896bd4d7b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2022 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 87f73897bf..0e1cec5ee7 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2022 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 9449b3bb85..c7a2e150cd 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2022 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 b3d6a635b1..c8ff93aeb2 100644
--- a/lisp/international/latin1-disp.el
+++ b/lisp/international/latin1-disp.el
@@ -1,6 +1,6 @@
 ;;; latin1-disp.el --- display tables for other ISO 8859 on Latin-1 terminals 
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 2000-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 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 b922f192a9..27defef648 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2022 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)
@@ -88,7 +88,7 @@
     (bindings--define-key map [separator-3] menu-bar-separator)
     (bindings--define-key map [set-terminal-coding-system]
       '(menu-item "For Terminal" set-terminal-coding-system
-        :enable (null (memq initial-window-system '(x w32 ns haiku)))
+        :enable (null (memq initial-window-system '(x w32 ns haiku pgtk)))
         :help "How to encode terminal output"))
     (bindings--define-key map [set-keyboard-coding-system]
       '(menu-item "For Keyboard" set-keyboard-coding-system
@@ -1638,30 +1638,31 @@ If `default-transient-input-method' was not yet 
defined, prompt for it."
   (interactive
    (list (read-input-method-name
           (format-prompt "Describe input method" current-input-method))))
-  (if (and input-method (symbolp input-method))
-      (setq input-method (symbol-name input-method)))
-  (help-setup-xref (list #'describe-input-method
-                        (or input-method current-input-method))
-                  (called-interactively-p 'interactive))
-
-  (if (null input-method)
-      (describe-current-input-method)
-    (let ((current current-input-method))
-      (condition-case nil
-         (progn
-           (save-excursion
-             (activate-input-method input-method)
-             (describe-current-input-method))
-           (activate-input-method current))
-       (error
-        (activate-input-method current)
-        (help-setup-xref (list #'describe-input-method input-method)
-                         (called-interactively-p 'interactive))
-        (with-output-to-temp-buffer (help-buffer)
-          (let ((elt (assoc input-method input-method-alist)))
-            (princ (format-message
-                    "Input method: %s (`%s' in mode line) for %s\n  %s\n"
-                    input-method (nth 3 elt) (nth 1 elt) (nth 4 elt))))))))))
+  (let ((help-buffer-under-preparation t))
+    (if (and input-method (symbolp input-method))
+       (setq input-method (symbol-name input-method)))
+    (help-setup-xref (list #'describe-input-method
+                          (or input-method current-input-method))
+                    (called-interactively-p 'interactive))
+
+    (if (null input-method)
+       (describe-current-input-method)
+      (let ((current current-input-method))
+       (condition-case nil
+           (progn
+             (save-excursion
+               (activate-input-method input-method)
+               (describe-current-input-method))
+             (activate-input-method current))
+         (error
+          (activate-input-method current)
+          (help-setup-xref (list #'describe-input-method input-method)
+                           (called-interactively-p 'interactive))
+          (with-output-to-temp-buffer (help-buffer)
+            (let ((elt (assoc input-method input-method-alist)))
+              (princ (format-message
+                      "Input method: %s (`%s' in mode line) for %s\n  %s\n"
+                      input-method (nth 3 elt) (nth 1 elt) (nth 4 
elt)))))))))))
 
 (defun describe-current-input-method ()
   "Describe the input method currently in use.
@@ -1873,7 +1874,7 @@ The default status is as follows:
   (set-default-coding-systems nil)
   (setq default-sendmail-coding-system 'utf-8)
   (setq default-file-name-coding-system (if (memq system-type
-                                                  '(window-nt ms-dos))
+                                                  '(windows-nt ms-dos))
                                             'iso-latin-1-unix
                                           'utf-8-unix))
   ;; Preserve eol-type from existing default-process-coding-systems.
@@ -1892,9 +1893,9 @@ The default status is as follows:
         (condition-case nil
             (coding-system-change-text-conversion
              (cdr default-process-coding-system)
-             (if (memq system-type '(window-nt ms-dos)) 'iso-latin-1 'utf-8))
+             (if (memq system-type '(windows-nt ms-dos)) 'iso-latin-1 'utf-8))
           (coding-system-error
-           (if (memq system-type '(window-nt ms-dos)) 'iso-latin-1 'utf-8)))))
+           (if (memq system-type '(windows-nt ms-dos)) 'iso-latin-1 'utf-8)))))
     (setq default-process-coding-system
          (cons output-coding input-coding)))
 
@@ -2162,89 +2163,90 @@ See `set-language-info-alist' for use in programs."
    (list (read-language-name
          'documentation
          (format-prompt "Describe language environment" 
current-language-environment))))
-  (if (null language-name)
-      (setq language-name current-language-environment))
-  (if (or (null language-name)
-         (null (get-language-info language-name 'documentation)))
-      (error "No documentation for the specified language"))
-  (if (symbolp language-name)
-      (setq language-name (symbol-name language-name)))
-  (dolist (feature (get-language-info language-name 'features))
-    (require feature))
-  (let ((doc (get-language-info language-name 'documentation)))
-    (help-setup-xref (list #'describe-language-environment language-name)
-                    (called-interactively-p 'interactive))
-    (with-output-to-temp-buffer (help-buffer)
-      (with-current-buffer standard-output
-       (insert language-name " language environment\n\n")
-       (if (stringp doc)
-           (insert (substitute-command-keys doc) "\n\n"))
-       (condition-case nil
-           (let ((str (eval (get-language-info language-name 'sample-text))))
-             (if (stringp str)
-                 (insert "Sample text:\n  "
-                         (string-replace "\n" "\n  " str)
-                         "\n\n")))
-         (error nil))
-       (let ((input-method (get-language-info language-name 'input-method))
-             (l (copy-sequence input-method-alist))
-             (first t))
-         (when (and input-method
-                    (setq input-method (assoc input-method l)))
-           (insert "Input methods (default " (car input-method) ")\n")
-           (setq l (cons input-method (delete input-method l))
-                 first nil))
-         (dolist (elt l)
-           (when (or (eq input-method elt)
-                     (eq t (compare-strings language-name nil nil
-                                            (nth 1 elt) nil nil t)))
-             (when first
-               (insert "Input methods:\n")
-               (setq first nil))
-             (insert "  " (car elt))
-             (search-backward (car elt))
-             (help-xref-button 0 'help-input-method (car elt))
-             (goto-char (point-max))
-             (insert " (\""
-                     (if (stringp (nth 3 elt)) (nth 3 elt) (car (nth 3 elt)))
-                     "\" in mode line)\n")))
-         (or first
-             (insert "\n")))
-       (insert "Character sets:\n")
-       (let ((l (get-language-info language-name 'charset)))
-         (if (null l)
-             (insert "  nothing specific to " language-name "\n")
-           (while l
-             (insert "  " (symbol-name (car l)))
-             (search-backward (symbol-name (car l)))
-             (help-xref-button 0 'help-character-set (car l))
-             (goto-char (point-max))
-             (insert ": " (charset-description (car l)) "\n")
-             (setq l (cdr l)))))
-       (insert "\n")
-       (insert "Coding systems:\n")
-       (let ((l (get-language-info language-name 'coding-system)))
-         (if (null l)
-             (insert "  nothing specific to " language-name "\n")
-           (while l
-             (insert "  " (symbol-name (car l)))
-             (search-backward (symbol-name (car l)))
-             (help-xref-button 0 'help-coding-system (car l))
-             (goto-char (point-max))
-             (insert (substitute-command-keys " (`")
-                     (coding-system-mnemonic (car l))
-                     (substitute-command-keys "' in mode line):\n\t")
-                      (substitute-command-keys
-                       (coding-system-doc-string (car l)))
-                     "\n")
-             (let ((aliases (coding-system-aliases (car l))))
-               (when aliases
-                 (insert "\t(alias:")
-                 (while aliases
-                   (insert " " (symbol-name (car aliases)))
-                   (setq aliases (cdr aliases)))
-                 (insert ")\n")))
-             (setq l (cdr l)))))))))
+  (let ((help-buffer-under-preparation t))
+    (if (null language-name)
+       (setq language-name current-language-environment))
+    (if (or (null language-name)
+           (null (get-language-info language-name 'documentation)))
+       (error "No documentation for the specified language"))
+    (if (symbolp language-name)
+       (setq language-name (symbol-name language-name)))
+    (dolist (feature (get-language-info language-name 'features))
+      (require feature))
+    (let ((doc (get-language-info language-name 'documentation)))
+      (help-setup-xref (list #'describe-language-environment language-name)
+                      (called-interactively-p 'interactive))
+      (with-output-to-temp-buffer (help-buffer)
+       (with-current-buffer standard-output
+         (insert language-name " language environment\n\n")
+         (if (stringp doc)
+             (insert (substitute-command-keys doc) "\n\n"))
+         (condition-case nil
+             (let ((str (eval (get-language-info language-name 'sample-text))))
+               (if (stringp str)
+                   (insert "Sample text:\n  "
+                           (string-replace "\n" "\n  " str)
+                           "\n\n")))
+           (error nil))
+         (let ((input-method (get-language-info language-name 'input-method))
+               (l (copy-sequence input-method-alist))
+               (first t))
+           (when (and input-method
+                      (setq input-method (assoc input-method l)))
+             (insert "Input methods (default " (car input-method) ")\n")
+             (setq l (cons input-method (delete input-method l))
+                   first nil))
+           (dolist (elt l)
+             (when (or (eq input-method elt)
+                       (eq t (compare-strings language-name nil nil
+                                              (nth 1 elt) nil nil t)))
+               (when first
+                 (insert "Input methods:\n")
+                 (setq first nil))
+               (insert "  " (car elt))
+               (search-backward (car elt))
+               (help-xref-button 0 'help-input-method (car elt))
+               (goto-char (point-max))
+               (insert " (\""
+                       (if (stringp (nth 3 elt)) (nth 3 elt) (car (nth 3 elt)))
+                       "\" in mode line)\n")))
+           (or first
+               (insert "\n")))
+         (insert "Character sets:\n")
+         (let ((l (get-language-info language-name 'charset)))
+           (if (null l)
+               (insert "  nothing specific to " language-name "\n")
+             (while l
+               (insert "  " (symbol-name (car l)))
+               (search-backward (symbol-name (car l)))
+               (help-xref-button 0 'help-character-set (car l))
+               (goto-char (point-max))
+               (insert ": " (charset-description (car l)) "\n")
+               (setq l (cdr l)))))
+         (insert "\n")
+         (insert "Coding systems:\n")
+         (let ((l (get-language-info language-name 'coding-system)))
+           (if (null l)
+               (insert "  nothing specific to " language-name "\n")
+             (while l
+               (insert "  " (symbol-name (car l)))
+               (search-backward (symbol-name (car l)))
+               (help-xref-button 0 'help-coding-system (car l))
+               (goto-char (point-max))
+               (insert (substitute-command-keys " (`")
+                       (coding-system-mnemonic (car l))
+                       (substitute-command-keys "' in mode line):\n\t")
+                       (substitute-command-keys
+                        (coding-system-doc-string (car l)))
+                       "\n")
+               (let ((aliases (coding-system-aliases (car l))))
+                 (when aliases
+                   (insert "\t(alias:")
+                   (while aliases
+                     (insert " " (symbol-name (car aliases)))
+                     (setq aliases (cdr aliases)))
+                   (insert ")\n")))
+               (setq l (cdr l))))))))))
 
 ;;; Locales.
 
@@ -2956,8 +2958,14 @@ See also the documentation of `get-char-code-property' 
and
     (or (stringp table)
        (error "Not a char-table nor a file name: %s" table)))
   (if (stringp table) (setq table (purecopy table)))
-  (setf (alist-get name char-code-property-alist) table)
-  (put name 'char-code-property-documentation (purecopy docstring)))
+  (if (and (stringp table)
+           (char-table-p (alist-get name char-code-property-alist)))
+      ;; The table is already setup and we're apparently trying to
+      ;; undo that, probably because `charprop.el' is being re-loaded.
+      ;; Just skip it, in order to work around a recursive load (bug#52945).
+      nil
+    (setf (alist-get name char-code-property-alist) table)
+    (put name 'char-code-property-documentation (purecopy docstring))))
 
 (defvar char-code-property-table
   (make-char-table 'char-code-property-table)
@@ -3075,22 +3083,6 @@ on encoding."
                 0))
        (substring enc2 i0 i2)))))
 
-;; Backwards compatibility.  These might be better with :init-value t,
-;; but that breaks loadup.
-(define-minor-mode unify-8859-on-encoding-mode
-  "Exists only for backwards compatibility."
-  :group 'mule
-  :global t)
-;; Doc said "obsolete" in 23.1, this statement only added in 24.1.
-(make-obsolete 'unify-8859-on-encoding-mode "don't use it." "23.1")
-
-(define-minor-mode unify-8859-on-decoding-mode
-  "Exists only for backwards compatibility."
-  :group 'mule
-  :global t)
-;; Doc said "obsolete" in 23.1, this statement only added in 24.1.
-(make-obsolete 'unify-8859-on-decoding-mode "don't use it." "23.1")
-
 (defvar ucs-names nil
   "Hash table of cached CHAR-NAME keys to CHAR-CODE values.")
 
diff --git a/lisp/international/mule-conf.el b/lisp/international/mule-conf.el
index ec027e9a93..3f3ac6064a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2022 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/lisp/international/mule-diag.el b/lisp/international/mule-diag.el
index 5cc73e4367..6b630c73e8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2000-2022 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)
@@ -299,65 +299,66 @@ meanings of these arguments."
 (defun describe-character-set (charset)
   "Display information about built-in character set CHARSET."
   (interactive (list (read-charset "Charset: ")))
-  (or (charsetp charset)
-      (error "Invalid charset: %S" charset))
-  (help-setup-xref (list #'describe-character-set charset)
-                  (called-interactively-p 'interactive))
-  (with-output-to-temp-buffer (help-buffer)
-    (with-current-buffer standard-output
-      (insert "Character set: " (symbol-name charset))
-      (let ((name (get-charset-property charset :name)))
-       (if (not (eq name charset))
-           (insert " (alias of " (symbol-name name) ?\))))
-      (insert "\n\n" (charset-description charset) "\n\n")
-      (insert "Number of contained characters: ")
-      (dotimes (i (charset-dimension charset))
-       (unless (= i 0)
-         (insert ?x))
-       (insert (format "%d" (charset-chars charset (1+ i)))))
-      (insert ?\n)
-      (let ((char (charset-iso-final-char charset)))
-       (when (> char 0)
-         (insert "Final char of ISO2022 designation sequence: ")
-         (insert (format-message "`%c'\n" char))))
-      (let (aliases)
-       (dolist (c charset-list)
-         (if (and (not (eq c charset))
-                  (eq charset (get-charset-property c :name)))
-             (push c aliases)))
-       (if aliases
-           (insert "Aliases: " (mapconcat #'symbol-name aliases ", ") ?\n)))
-
-      (dolist (elt `((:ascii-compatible-p "ASCII compatible." nil)
-                    (:map "Map file: " identity)
-                    (:unify-map "Unification map file: " identity)
-                    (:invalid-code
-                     nil
-                     ,(lambda (c)
-                        (format "Invalid character: %c (code %d)" c c)))
-                    (:emacs-mule-id "Id in emacs-mule coding system: "
-                                    number-to-string)
-                    (:parents "Parents: "
-                              (lambda (parents)
-                                (mapconcat ,(lambda (elt)
-                                              (format "%s" elt))
-                                           parents
-                                           ", ")))
-                    (:code-space "Code space: " ,(lambda (c)
-                                                   (format "%s" c)))
-                    (:code-offset "Code offset: " number-to-string)
-                    (:iso-revision-number "ISO revision number: "
-                                          number-to-string)
-                    (:supplementary-p
-                     "Used only as a parent or a subset of some other charset,
+  (let ((help-buffer-under-preparation t))
+    (or (charsetp charset)
+       (error "Invalid charset: %S" charset))
+    (help-setup-xref (list #'describe-character-set charset)
+                    (called-interactively-p 'interactive))
+    (with-output-to-temp-buffer (help-buffer)
+      (with-current-buffer standard-output
+       (insert "Character set: " (symbol-name charset))
+       (let ((name (get-charset-property charset :name)))
+         (if (not (eq name charset))
+             (insert " (alias of " (symbol-name name) ?\))))
+       (insert "\n\n" (charset-description charset) "\n\n")
+       (insert "Number of contained characters: ")
+       (dotimes (i (charset-dimension charset))
+         (unless (= i 0)
+           (insert ?x))
+         (insert (format "%d" (charset-chars charset (1+ i)))))
+       (insert ?\n)
+       (let ((char (charset-iso-final-char charset)))
+         (when (> char 0)
+           (insert "Final char of ISO2022 designation sequence: ")
+           (insert (format-message "`%c'\n" char))))
+       (let (aliases)
+         (dolist (c charset-list)
+           (if (and (not (eq c charset))
+                    (eq charset (get-charset-property c :name)))
+               (push c aliases)))
+         (if aliases
+             (insert "Aliases: " (mapconcat #'symbol-name aliases ", ") ?\n)))
+
+       (dolist (elt `((:ascii-compatible-p "ASCII compatible." nil)
+                      (:map "Map file: " identity)
+                      (:unify-map "Unification map file: " identity)
+                      (:invalid-code
+                       nil
+                       ,(lambda (c)
+                          (format "Invalid character: %c (code %d)" c c)))
+                      (:emacs-mule-id "Id in emacs-mule coding system: "
+                                      number-to-string)
+                      (:parents "Parents: "
+                                (lambda (parents)
+                                  (mapconcat ,(lambda (elt)
+                                                (format "%s" elt))
+                                             parents
+                                             ", ")))
+                      (:code-space "Code space: " ,(lambda (c)
+                                                     (format "%s" c)))
+                      (:code-offset "Code offset: " number-to-string)
+                      (:iso-revision-number "ISO revision number: "
+                                            number-to-string)
+                      (:supplementary-p
+                       "Used only as a parent or a subset of some other 
charset,
 or provided just for backward compatibility." nil)))
-       (let ((val (get-charset-property charset (car elt))))
-         (when val
-           (if (cadr elt) (insert (cadr elt)))
-           (if (nth 2 elt)
-               (let ((print-length 10) (print-level 2))
-                 (princ (funcall (nth 2 elt) val) (current-buffer))))
-           (insert ?\n)))))))
+         (let ((val (get-charset-property charset (car elt))))
+           (when val
+             (if (cadr elt) (insert (cadr elt)))
+             (if (nth 2 elt)
+                 (let ((print-length 10) (print-level 2))
+                   (princ (funcall (nth 2 elt) val) (current-buffer))))
+             (insert ?\n))))))))
 
 ;;; CODING-SYSTEM
 
@@ -406,89 +407,90 @@ or provided just for backward compatibility." nil)))
 (defun describe-coding-system (coding-system)
   "Display information about CODING-SYSTEM."
   (interactive "zDescribe coding system (default current choices): ")
-  (if (null coding-system)
-      (describe-current-coding-system)
-    (help-setup-xref (list #'describe-coding-system coding-system)
-                    (called-interactively-p 'interactive))
-    (with-output-to-temp-buffer (help-buffer)
-      (print-coding-system-briefly coding-system 'doc-string)
-      (let ((type (coding-system-type coding-system))
-           ;; Fixme: use this
-           ;; (extra-spec (coding-system-plist coding-system))
-           )
-       (princ "Type: ")
-       (princ type)
-       (cond ((eq type 'undecided)
-              (princ " (do automatic conversion)"))
-             ((eq type 'utf-8)
-              (princ " (UTF-8: Emacs internal multibyte form)"))
-             ((eq type 'utf-16)
-              ;; (princ " (UTF-16)")
-              )
-             ((eq type 'shift-jis)
-              (princ " (Shift-JIS, MS-KANJI)"))
-             ((eq type 'iso-2022)
-              (princ " (variant of ISO-2022)\n")
-              (princ "Initial designations:\n")
-              (print-designation (coding-system-get coding-system
-                                                    :designation))
-
-              (when (coding-system-get coding-system :flags)
-                (princ "Other specifications: \n  ")
-                (apply #'print-list
-                       (coding-system-get coding-system :flags))))
-             ((eq type 'charset)
-              (princ " (charset)"))
-             ((eq type 'ccl)
-              (princ " (do conversion by CCL program)"))
-             ((eq type 'raw-text)
-              (princ " (text with random binary characters)"))
-             ((eq type 'emacs-mule)
-              (princ " (Emacs 21 internal encoding)"))
-             ((eq type 'big5))
-             (t (princ ": invalid coding-system.")))
-       (princ "\nEOL type: ")
-       (let ((eol-type (coding-system-eol-type coding-system)))
-         (cond ((vectorp eol-type)
-                (princ "Automatic selection from:\n\t")
-                (princ eol-type)
-                (princ "\n"))
-               ((or (null eol-type) (eq eol-type 0)) (princ "LF\n"))
-               ((eq eol-type 1) (princ "CRLF\n"))
-               ((eq eol-type 2) (princ "CR\n"))
-               (t (princ "invalid\n")))))
-      (let ((postread (coding-system-get coding-system :post-read-conversion)))
-       (when postread
-         (princ "After decoding text normally,")
-         (princ " perform post-conversion using the function: ")
-         (princ "\n  ")
-         (princ postread)
-         (princ "\n")))
-      (let ((prewrite (coding-system-get coding-system :pre-write-conversion)))
-       (when prewrite
-         (princ "Before encoding text normally,")
-         (princ " perform pre-conversion using the function: ")
-         (princ "\n  ")
-         (princ prewrite)
-         (princ "\n")))
-      (with-current-buffer standard-output
-       (let ((charsets (coding-system-charset-list coding-system)))
-         (when (and (not (eq (coding-system-base coding-system) 'raw-text))
-                    charsets)
-           (cond
-            ((eq charsets 'iso-2022)
-             (insert "This coding system can encode all ISO 2022 charsets."))
-            ((eq charsets 'emacs-mule)
-             (insert "This coding system can encode all emacs-mule charsets\
+  (let ((help-buffer-under-preparation t))
+    (if (null coding-system)
+       (describe-current-coding-system)
+      (help-setup-xref (list #'describe-coding-system coding-system)
+                      (called-interactively-p 'interactive))
+      (with-output-to-temp-buffer (help-buffer)
+       (print-coding-system-briefly coding-system 'doc-string)
+       (let ((type (coding-system-type coding-system))
+             ;; Fixme: use this
+             ;; (extra-spec (coding-system-plist coding-system))
+             )
+         (princ "Type: ")
+         (princ type)
+         (cond ((eq type 'undecided)
+                (princ " (do automatic conversion)"))
+               ((eq type 'utf-8)
+                (princ " (UTF-8: Emacs internal multibyte form)"))
+               ((eq type 'utf-16)
+                ;; (princ " (UTF-16)")
+                )
+               ((eq type 'shift-jis)
+                (princ " (Shift-JIS, MS-KANJI)"))
+               ((eq type 'iso-2022)
+                (princ " (variant of ISO-2022)\n")
+                (princ "Initial designations:\n")
+                (print-designation (coding-system-get coding-system
+                                                      :designation))
+
+                (when (coding-system-get coding-system :flags)
+                  (princ "Other specifications: \n  ")
+                  (apply #'print-list
+                         (coding-system-get coding-system :flags))))
+               ((eq type 'charset)
+                (princ " (charset)"))
+               ((eq type 'ccl)
+                (princ " (do conversion by CCL program)"))
+               ((eq type 'raw-text)
+                (princ " (text with random binary characters)"))
+               ((eq type 'emacs-mule)
+                (princ " (Emacs 21 internal encoding)"))
+               ((eq type 'big5))
+               (t (princ ": invalid coding-system.")))
+         (princ "\nEOL type: ")
+         (let ((eol-type (coding-system-eol-type coding-system)))
+           (cond ((vectorp eol-type)
+                  (princ "Automatic selection from:\n\t")
+                  (princ eol-type)
+                  (princ "\n"))
+                 ((or (null eol-type) (eq eol-type 0)) (princ "LF\n"))
+                 ((eq eol-type 1) (princ "CRLF\n"))
+                 ((eq eol-type 2) (princ "CR\n"))
+                 (t (princ "invalid\n")))))
+       (let ((postread (coding-system-get coding-system 
:post-read-conversion)))
+         (when postread
+           (princ "After decoding text normally,")
+           (princ " perform post-conversion using the function: ")
+           (princ "\n  ")
+           (princ postread)
+           (princ "\n")))
+       (let ((prewrite (coding-system-get coding-system 
:pre-write-conversion)))
+         (when prewrite
+           (princ "Before encoding text normally,")
+           (princ " perform pre-conversion using the function: ")
+           (princ "\n  ")
+           (princ prewrite)
+           (princ "\n")))
+       (with-current-buffer standard-output
+         (let ((charsets (coding-system-charset-list coding-system)))
+           (when (and (not (eq (coding-system-base coding-system) 'raw-text))
+                      charsets)
+             (cond
+              ((eq charsets 'iso-2022)
+               (insert "This coding system can encode all ISO 2022 charsets."))
+              ((eq charsets 'emacs-mule)
+               (insert "This coding system can encode all emacs-mule charsets\
 ."""))
-            (t
-             (insert "This coding system encodes the following charsets:\n ")
-             (while charsets
-               (insert " " (symbol-name (car charsets)))
-               (search-backward (symbol-name (car charsets)))
-               (help-xref-button 0 'help-character-set (car charsets))
-               (goto-char (point-max))
-               (setq charsets (cdr charsets)))))))))))
+              (t
+               (insert "This coding system encodes the following charsets:\n ")
+               (while charsets
+                 (insert " " (symbol-name (car charsets)))
+                 (search-backward (symbol-name (car charsets)))
+                 (help-xref-button 0 'help-character-set (car charsets))
+                 (goto-char (point-max))
+                 (setq charsets (cdr charsets))))))))))))
 
 ;;;###autoload
 (defun describe-current-coding-system-briefly ()
@@ -845,7 +847,8 @@ The IGNORED argument is ignored."
   (or (and window-system (fboundp 'fontset-list))
       (error "No fonts being used"))
   (let ((xref-item (list #'describe-font fontname))
-        font-info)
+        font-info
+       (help-buffer-under-preparation t))
     (if (or (not fontname) (= (length fontname) 0))
        (setq fontname (face-attribute 'default :font)))
     (setq font-info (font-info fontname))
@@ -1006,14 +1009,15 @@ This shows which font is used for which character(s)."
        (list (completing-read
               (format-prompt "Fontset" "used by the current frame")
              fontset-list nil t)))))
-  (if (= (length fontset) 0)
-      (setq fontset (face-attribute 'default :fontset))
-    (setq fontset (query-fontset fontset)))
-  (help-setup-xref (list #'describe-fontset fontset)
-                  (called-interactively-p 'interactive))
-  (with-output-to-temp-buffer (help-buffer)
-    (with-current-buffer standard-output
-      (print-fontset fontset t))))
+  (let ((help-buffer-under-preparation t))
+    (if (= (length fontset) 0)
+       (setq fontset (face-attribute 'default :fontset))
+      (setq fontset (query-fontset fontset)))
+    (help-setup-xref (list #'describe-fontset fontset)
+                    (called-interactively-p 'interactive))
+    (with-output-to-temp-buffer (help-buffer)
+      (with-current-buffer standard-output
+       (print-fontset fontset t)))))
 
 (declare-function fontset-plain-name "fontset" (fontset))
 
@@ -1024,39 +1028,41 @@ This shows the name, size, and style of each fontset.
 With prefix arg, also list the fonts contained in each fontset;
 see the function `describe-fontset' for the format of the list."
   (interactive "P")
-  (if (not (and window-system (fboundp 'fontset-list)))
-      (error "No fontsets being used")
-    (help-setup-xref (list #'list-fontsets arg)
-                    (called-interactively-p 'interactive))
-    (with-output-to-temp-buffer (help-buffer)
-      (with-current-buffer standard-output
-       ;; This code is duplicated near the end of mule-diag.
-       (let ((fontsets
-              (sort (fontset-list)
-                    (lambda (x y)
-                      (string< (fontset-plain-name x)
-                               (fontset-plain-name y))))))
-         (while fontsets
-           (if arg
-               (print-fontset (car fontsets) nil)
-             (insert "Fontset: " (car fontsets) "\n"))
-           (setq fontsets (cdr fontsets))))))))
+  (let ((help-buffer-under-preparation t))
+    (if (not (and window-system (fboundp 'fontset-list)))
+       (error "No fontsets being used")
+      (help-setup-xref (list #'list-fontsets arg)
+                      (called-interactively-p 'interactive))
+      (with-output-to-temp-buffer (help-buffer)
+       (with-current-buffer standard-output
+         ;; This code is duplicated near the end of mule-diag.
+         (let ((fontsets
+                (sort (fontset-list)
+                      (lambda (x y)
+                        (string< (fontset-plain-name x)
+                                 (fontset-plain-name y))))))
+           (while fontsets
+             (if arg
+                 (print-fontset (car fontsets) nil)
+               (insert "Fontset: " (car fontsets) "\n"))
+             (setq fontsets (cdr fontsets)))))))))
 
 ;;;###autoload
 (defun list-input-methods ()
   "Display information about all input methods."
   (interactive)
-  (help-setup-xref '(list-input-methods)
-                  (called-interactively-p 'interactive))
-  (with-output-to-temp-buffer (help-buffer)
-    (list-input-methods-1)
-    (with-current-buffer standard-output
-      (save-excursion
-       (goto-char (point-min))
-       (while (re-search-forward
-               (substitute-command-keys "^  \\([^ ]+\\) (`.*' in mode line)$")
-                nil t)
-         (help-xref-button 1 'help-input-method (match-string 1)))))))
+  (let ((help-buffer-under-preparation t))
+    (help-setup-xref '(list-input-methods)
+                    (called-interactively-p 'interactive))
+    (with-output-to-temp-buffer (help-buffer)
+      (list-input-methods-1)
+      (with-current-buffer standard-output
+       (save-excursion
+         (goto-char (point-min))
+         (while (re-search-forward
+                 (substitute-command-keys "^  \\([^ ]+\\) (`.*' in mode 
line)$")
+                  nil t)
+           (help-xref-button 1 'help-input-method (match-string 1))))))))
 
 (defun list-input-methods-1 ()
   (if (not input-method-alist)
diff --git a/lisp/international/mule-util.el b/lisp/international/mule-util.el
index c2f91e77e7..e153c4e65a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2000-2022 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 3e45a64dc9..0758359e15 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2022 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 e049832d58..ac9a213ec7 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Włodek Bzyl
 ;;        Ryszard Kubiak
diff --git a/lisp/international/quail.el b/lisp/international/quail.el
index 5cdd6d6242..14d4c383b2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2000-2022 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 bd83a7a289..5050b7c030 100644
--- a/lisp/international/rfc1843.el
+++ b/lisp/international/rfc1843.el
@@ -1,6 +1,6 @@
 ;;; rfc1843.el --- HZ (rfc1843) decoding  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1998-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
 ;; Keywords: news HZ HZ+ mail i18n
diff --git a/lisp/international/robin.el b/lisp/international/robin.el
index c38cd82269..4c498d7f92 100644
--- a/lisp/international/robin.el
+++ b/lisp/international/robin.el
@@ -529,10 +529,10 @@ Use the longest match method to select a rule."
       (insert (cadr tree))
       (delete-char (- end begin)))))
 
-;; for backward compatibility
-
-(fset 'robin-transliterate-region 'robin-convert-region)
-(fset 'robin-transliterate-buffer 'robin-convert-buffer)
+(define-obsolete-function-alias 'robin-transliterate-region
+  #'robin-convert-region "29.1")
+(define-obsolete-function-alias 'robin-transliterate-buffer
+  #'robin-convert-buffer "29.1")
 
 ;;; Reverse conversion
 
diff --git a/lisp/international/titdic-cnv.el b/lisp/international/titdic-cnv.el
index dfd4e5b829..a3b6266791 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2000-2022 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)
@@ -748,7 +748,7 @@ To get complete usage, invoke \"emacs -batch -f 
batch-titdic-convert -h\"."
 
    [Q 手] [W 田] [E 水] [R 口] [T 廿] [Y 卜] [U 山] [I 戈] [O 人] [P 心]
 
-    [A 日] [S 尸] [D 木] [F 火] [G 土] [H 竹] [J 十] [L 中]
+    [A 日] [S 尸] [D 木] [F 火] [G 土] [H 竹] [J 十] [K 大] [L 中]
 
       [Z  ] [X 難] [C 金] [V 女] [B 月] [N 弓] [M 一]
 
diff --git a/lisp/international/ucs-normalize.el 
b/lisp/international/ucs-normalize.el
index 3da47e701a..bc32b4f073 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 dece184ffe..c503bc2442 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2022 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 d78e3975e6..ad29e7aa4d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 9dc8525417..7593a0ec98 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1992-1997, 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: Daniel LaLiberte <liberte@cs.uiuc.edu>
 ;; Maintainer: emacs-devel@gnu.org
@@ -521,14 +521,14 @@ This is like `describe-bindings', but displays only 
Isearch keys."
   (interactive)
   (let ((display-buffer-overriding-action isearch--display-help-action))
     (call-interactively 'describe-key))
-  (isearch-update))
+  (when isearch-mode (isearch-update)))
 
 (defun isearch-describe-mode ()
   "Display documentation of Isearch mode."
   (interactive)
   (let ((display-buffer-overriding-action isearch--display-help-action))
     (describe-function 'isearch-forward))
-  (isearch-update))
+  (when isearch-mode (isearch-update)))
 
 (defalias 'isearch-mode-help 'isearch-describe-mode)
 
@@ -2063,7 +2063,7 @@ The command then executes BODY and updates the isearch 
prompt."
                        #',function))
                (setq isearch-regexp nil)))
          ,@body
-         (setq isearch-success t isearch-adjusted t)
+         (setq isearch-success t isearch-adjusted 'toggle)
          (isearch-update))
        (define-key isearch-mode-map ,key #',command-name)
        ,@(when (and function (symbolp function))
@@ -2504,6 +2504,11 @@ If no input items have been entered yet, just beep."
   (if (null (cdr isearch-cmds))
       (ding)
     (isearch-pop-state))
+  ;; When going back to the hidden match, reopen it.
+  (when (and (eq search-invisible 'open) isearch-hide-immediately
+             isearch-other-end)
+    (isearch-range-invisible (min (point) isearch-other-end)
+                             (max (point) isearch-other-end)))
   (isearch-update))
 
 (defun isearch-del-char (&optional arg)
@@ -3412,7 +3417,7 @@ the word mode."
   ;; If currently failing, display no ellipsis.
   (or isearch-success (setq ellipsis nil))
   (let ((m (concat (if isearch-success "" "failing ")
-                  (if isearch-adjusted "pending " "")
+                  (if (eq isearch-adjusted t) "pending " "")
                   (if (and isearch-wrapped
                            (not isearch-wrap-function)
                            (if isearch-forward
@@ -3516,10 +3521,10 @@ Can be changed via `isearch-search-fun-function' for 
special needs."
           ;; (Bug#35802).
           (regexp
            (cond (isearch-regexp-function
-                  (let ((lax (and (not bound)
+                  (let ((lax (and (not bound) ; not lazy-highlight
                                   (isearch--lax-regexp-function-p))))
                     (when lax
-                      (setq isearch-adjusted t))
+                      (setq isearch-adjusted 'lax))
                     (if (functionp isearch-regexp-function)
                         (funcall isearch-regexp-function string lax)
                       (word-search-regexp string lax))))
@@ -3787,10 +3792,9 @@ Isearch, at least partially, as determined by 
`isearch-range-invisible'.
 If `search-invisible' is t, which allows Isearch matches inside
 invisible text, this function will always return non-nil, regardless
 of what `isearch-range-invisible' says."
-  (and (or (eq search-invisible t)
-           (not (isearch-range-invisible beg end)))
-       (not (text-property-not-all (min beg end) (max beg end)
-                                   'inhibit-isearch nil))))
+  (and (not (text-property-not-all beg end 'inhibit-isearch nil))
+       (or (eq search-invisible t)
+           (not (isearch-range-invisible beg end)))))
 
 
 ;; General utilities
diff --git a/lisp/isearchb.el b/lisp/isearchb.el
index eaf7983cbd..d11a5d2537 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2022 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 bb2df2b1ff..20c1202474 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2000-2022 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 ed00caedb5..0cfc80fe78 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-2021 Free Software
+;; Copyright (C) 1993-1995, 1997, 1999-2000, 2002-2022 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 658ea44a34..8db78ebcda 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993-2022 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 0e61e1ad90..13ec72d012 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2022 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 02db199c7f..84d0ef9179 100644
--- a/lisp/jsonrpc.el
+++ b/lisp/jsonrpc.el
@@ -1,6 +1,6 @@
 ;;; jsonrpc.el --- JSON-RPC library                  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2018-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
 
 ;; Author: João Távora <joaotavora@gmail.com>
 ;; Keywords: processes, languages, extensions
diff --git a/lisp/kermit.el b/lisp/kermit.el
index 25f1f300f3..51396fbb65 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1988, 2001-2022 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 a9331e1604..3e9189fba4 100644
--- a/lisp/keymap.el
+++ b/lisp/keymap.el
@@ -1,6 +1,6 @@
 ;;; keymap.el --- Keymap functions  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2021 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -31,8 +31,14 @@
   (unless (key-valid-p key)
     (error "%S is not a valid key definition; see `key-valid-p'" key)))
 
+(defun keymap--compile-check (&rest keys)
+  (dolist (key keys)
+    (when (or (vectorp key)
+              (and (stringp key) (not (key-valid-p key))))
+      (byte-compile-warn "Invalid `kbd' syntax: %S" key))))
+
 (defun keymap-set (keymap key definition)
-  "Set key sequence KEY to DEFINITION in KEYMAP.
+  "Set KEY to DEFINITION in KEYMAP.
 KEY is a string that satisfies `key-valid-p'.
 
 DEFINITION is anything that can be a key's definition:
@@ -50,7 +56,13 @@ DEFINITION is anything that can be a key's definition:
  or a cons (MAP . CHAR), meaning use definition of CHAR in keymap MAP,
  or an extended menu item definition.
  (See info node `(elisp)Extended Menu Items'.)"
+  (declare (compiler-macro (lambda (form) (keymap--compile-check key) form)))
   (keymap--check key)
+  ;; If we're binding this key to another key, then parse that other
+  ;; key, too.
+  (when (stringp definition)
+    (keymap--check definition)
+    (setq definition (key-parse definition)))
   (define-key keymap (key-parse key) definition))
 
 (defun keymap-global-set (key command)
@@ -63,6 +75,7 @@ KEY is a string that satisfies `key-valid-p'.
 Note that if KEY has a local binding in the current buffer,
 that local binding will continue to shadow any global binding
 that you make with this function."
+  (declare (compiler-macro (lambda (form) (keymap--compile-check key) form)))
   (interactive
    (let* ((menu-prompting nil)
           (key (read-key-sequence "Set key globally: " nil t)))
@@ -80,6 +93,7 @@ KEY is a string that satisfies `key-valid-p'.
 
 The binding goes in the current buffer's local map, which in most
 cases is shared with all other buffers in the same major mode."
+  (declare (compiler-macro (lambda (form) (keymap--compile-check key) form)))
   (interactive "KSet key locally: \nCSet key %s locally to command: ")
   (let ((map (current-local-map)))
     (unless map
@@ -92,6 +106,7 @@ KEY is a string that satisfies `key-valid-p'.
 
 If REMOVE (interactively, the prefix arg), remove the binding
 instead of unsetting it.  See `keymap-unset' for details."
+  (declare (compiler-macro (lambda (form) (keymap--compile-check key) form)))
   (interactive
    (list (key-description (read-key-sequence "Set key locally: "))
          current-prefix-arg))
@@ -103,6 +118,7 @@ KEY is a string that satisfies `key-valid-p'.
 
 If REMOVE (interactively, the prefix arg), remove the binding
 instead of unsetting it.  See `keymap-unset' for details."
+  (declare (compiler-macro (lambda (form) (keymap--compile-check key) form)))
   (interactive
    (list (key-description (read-key-sequence "Unset key locally: "))
          current-prefix-arg))
@@ -118,6 +134,7 @@ makes a difference when there's a parent keymap.  When 
unsetting
 a key in a child map, it will still shadow the same key in the
 parent keymap.  Removing the binding will allow the key in the
 parent keymap to be used."
+  (declare (compiler-macro (lambda (form) (keymap--compile-check key) form)))
   (keymap--check key)
   (define-key keymap (key-parse key) nil remove))
 
@@ -140,10 +157,6 @@ in a cleaner way with command remapping, like this:
   ;; original key, with PREFIX added at the front.
   (unless prefix
     (setq prefix ""))
-  (keymap--check olddef)
-  (keymap--check newdef)
-  (setq olddef (key-parse olddef))
-  (setq newdef (key-parse newdef))
   (let* ((scan (or oldmap keymap))
         (prefix1 (vconcat prefix [nil]))
         (key-substitution-in-progress
@@ -170,7 +183,8 @@ Bindings are always added before any inherited map.
 
 The order of bindings in a keymap matters only when it is used as
 a menu, so this function is not useful for non-menu keymaps."
-  (declare (indent defun))
+  (declare (indent defun)
+           (compiler-macro (lambda (form) (keymap--compile-check key) form)))
   (keymap--check key)
   (when after
     (keymap--check after))
@@ -281,9 +295,9 @@ See `kbd' for a descripion of KEYS."
         res))))
 
 (defun key-valid-p (keys)
-  "Say whether KEYS is a valid `kbd' sequence.
-A `kbd' sequence is a string consisting of one and more key
-strokes.  The key strokes are separated by a space character.
+  "Say whether KEYS is a valid key.
+A key is a string consisting of one or more key strokes.
+The key strokes are separated by single space characters.
 
 Each key stroke is either a single character, or the name of an
 event, surrounded by angle brackets.  In addition, any key stroke
@@ -350,6 +364,8 @@ This function creates a `keyboard-translate-table' if 
necessary
 and then modifies one entry in it.
 
 Both KEY and TO are strings that satisfy `key-valid-p'."
+  (declare (compiler-macro
+            (lambda (form) (keymap--compile-check from to) form)))
   (keymap--check from)
   (keymap--check to)
   (or (char-table-p keyboard-translate-table)
@@ -389,14 +405,16 @@ position as returned by `event-start' and `event-end', 
and the lookup
 occurs in the keymaps associated with it instead of KEY.  It can also
 be a number or marker, in which case the keymap properties at the
 specified buffer position instead of point are used."
+  (declare (compiler-macro (lambda (form) (keymap--compile-check key) form)))
   (keymap--check key)
-  (when (and keymap (not position))
+  (when (and keymap position)
     (error "Can't pass in both keymap and position"))
   (if keymap
-      (let ((value (lookup-key (key-parse key) keymap accept-default)))
-        (when (and (not no-remap)
+      (let ((value (lookup-key keymap (key-parse key) accept-default)))
+        (if (and (not no-remap)
                    (symbolp value))
-          (or (command-remapping value) value)))
+            (or (command-remapping value) value)
+          value))
     (key-binding (kbd key) accept-default no-remap position)))
 
 (defun keymap-local-lookup (keys &optional accept-default)
@@ -408,6 +426,7 @@ The binding is probably a symbol with a function definition.
 If optional argument ACCEPT-DEFAULT is non-nil, recognize default
 bindings; see the description of `keymap-lookup' for more details
 about this."
+  (declare (compiler-macro (lambda (form) (keymap--compile-check keys) form)))
   (when-let ((map (current-local-map)))
     (keymap-lookup map keys accept-default)))
 
@@ -424,6 +443,7 @@ bindings; see the description of `keymap-lookup' for more 
details
 about this.
 
 If MESSAGE (and interactively), message the result."
+  (declare (compiler-macro (lambda (form) (keymap--compile-check keys) form)))
   (interactive
    (list (key-description (read-key-sequence "Look up key in global keymap: "))
          nil t))
@@ -432,6 +452,139 @@ If MESSAGE (and interactively), message the result."
       (message "%s is bound to %s globally" keys def))
     def))
 
+
+;;; define-keymap and defvar-keymap
+
+(defun define-keymap--compile (form &rest args)
+  ;; This compiler macro is only there for compile-time
+  ;; error-checking; it does not change the call in any way.
+  (while (and args
+              (keywordp (car args))
+              (not (eq (car args) :menu)))
+    (unless (memq (car args) '(:full :keymap :parent :suppress :name :prefix))
+      (byte-compile-warn "Invalid keyword: %s" (car args)))
+    (setq args (cdr args))
+    (when (null args)
+      (byte-compile-warn "Uneven number of keywords in %S" form))
+    (setq args (cdr args)))
+  ;; Bindings.
+  (while args
+    (let ((key (pop args)))
+      (when (and (stringp key) (not (key-valid-p key)))
+        (byte-compile-warn "Invalid `kbd' syntax: %S" key)))
+    (when (null args)
+      (byte-compile-warn "Uneven number of key bindings in %S" form))
+    (setq args (cdr args)))
+  form)
+
+(defun define-keymap (&rest definitions)
+  "Create a new keymap and define KEY/DEFINITION pairs as key bindings.
+The new keymap is returned.
+
+Options can be given as keywords before the KEY/DEFINITION
+pairs.  Available keywords are:
+
+:full      If non-nil, create a chartable alist (see `make-keymap').
+             If nil (i.e., the default), create a sparse keymap (see
+             `make-sparse-keymap').
+
+:suppress  If non-nil, the keymap will be suppressed (see `suppress-keymap').
+             If `nodigits', treat digits like other chars.
+
+:parent    If non-nil, this should be a keymap to use as the parent
+             (see `set-keymap-parent').
+
+:keymap    If non-nil, instead of creating a new keymap, the given keymap
+             will be destructively modified instead.
+
+:name      If non-nil, this should be a string to use as the menu for
+             the keymap in case you use it as a menu with `x-popup-menu'.
+
+:prefix    If non-nil, this should be a symbol to be used as a prefix
+             command (see `define-prefix-command').  If this is the case,
+             this symbol is returned instead of the map itself.
+
+KEY/DEFINITION pairs are as KEY and DEF in `keymap-set'.  KEY can
+also be the special symbol `:menu', in which case DEFINITION
+should be a MENU form as accepted by `easy-menu-define'.
+
+\(fn &key FULL PARENT SUPPRESS NAME PREFIX KEYMAP &rest [KEY DEFINITION]...)"
+  (declare (indent defun)
+           (compiler-macro define-keymap--compile))
+  (let (full suppress parent name prefix keymap)
+    ;; Handle keywords.
+    (while (and definitions
+                (keywordp (car definitions))
+                (not (eq (car definitions) :menu)))
+      (let ((keyword (pop definitions)))
+        (unless definitions
+          (error "Missing keyword value for %s" keyword))
+        (let ((value (pop definitions)))
+          (pcase keyword
+            (:full (setq full value))
+            (:keymap (setq keymap value))
+            (:parent (setq parent value))
+            (:suppress (setq suppress value))
+            (:name (setq name value))
+            (:prefix (setq prefix value))
+            (_ (error "Invalid keyword: %s" keyword))))))
+
+    (when (and prefix
+               (or full parent suppress keymap))
+      (error "A prefix keymap can't be defined with 
:full/:parent/:suppress/:keymap keywords"))
+
+    (when (and keymap full)
+      (error "Invalid combination: :keymap with :full"))
+
+    (let ((keymap (cond
+                   (keymap keymap)
+                   (prefix (define-prefix-command prefix nil name))
+                   (full (make-keymap name))
+                   (t (make-sparse-keymap name)))))
+      (when suppress
+        (suppress-keymap keymap (eq suppress 'nodigits)))
+      (when parent
+        (set-keymap-parent keymap parent))
+
+      ;; Do the bindings.
+      (while definitions
+        (let ((key (pop definitions)))
+          (unless definitions
+            (error "Uneven number of key/definition pairs"))
+          (let ((def (pop definitions)))
+            (if (eq key :menu)
+                (easy-menu-define nil keymap "" def)
+              (keymap-set keymap key def)))))
+      keymap)))
+
+(defmacro defvar-keymap (variable-name &rest defs)
+  "Define VARIABLE-NAME as a variable with a keymap definition.
+See `define-keymap' for an explanation of the keywords and KEY/DEFINITION.
+
+In addition to the keywords accepted by `define-keymap', this
+macro also accepts a `:doc' keyword, which (if present) is used
+as the variable documentation string.
+
+\(fn VARIABLE-NAME &key DOC FULL PARENT SUPPRESS NAME PREFIX KEYMAP &rest [KEY 
DEFINITION]...)"
+  (declare (indent 1))
+  (let ((opts nil)
+        doc)
+    (while (and defs
+                (keywordp (car defs))
+                (not (eq (car defs) :menu)))
+      (let ((keyword (pop defs)))
+        (unless defs
+          (error "Uneven number of keywords"))
+        (if (eq keyword :doc)
+            (setq doc (pop defs))
+          (push keyword opts)
+          (push (pop defs) opts))))
+    (unless (zerop (% (length defs) 2))
+      (error "Uneven number of key/definition pairs: %s" defs))
+    `(defvar ,variable-name
+       (define-keymap ,@(nreverse opts) ,@defs)
+       ,@(and doc (list doc)))))
+
 (provide 'keymap)
 
 ;;; keymap.el ends here
diff --git a/lisp/kmacro.el b/lisp/kmacro.el
index 3f492a851e..9bbaaa666d 100644
--- a/lisp/kmacro.el
+++ b/lisp/kmacro.el
@@ -1,6 +1,6 @@
 ;;; kmacro.el --- enhanced keyboard macros -*- lexical-binding: t -*-
 
-;; Copyright (C) 2002-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 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 105e7a735f..d5c6160efb 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2001-2022 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 5cb8344c09..3970b0d154 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 e404288ddc..5482b3ea30 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2022 Free Software Foundation, Inc.
 
 ;; Keywords: mule, multilingual, Cyrillic
 
diff --git a/lisp/language/cyrillic.el b/lisp/language/cyrillic.el
index b64a237cf7..4576373a6d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2022 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 e449a7e927..de80b73b3f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2022 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 41d56be7d4..278951121a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2022 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 2de6602ced..a0159679da 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2002-2022 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 209dcd51c9..1faba424ba 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2022 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 bcd62a14c4..8e3aac7c2e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2000-2022 Free Software Foundation, Inc.
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 ;;   2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/language/georgian.el b/lisp/language/georgian.el
index 321ef43f5f..a268b8c23f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 403a87d253..58f4fe6fc4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2013-2022 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 9e9213536c..0c2419c91c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
 
 ;; Author: Jihyun Cho <jihyun.jo@gmail.com>
 ;; Keywords: multilingual, input method, Korean, Hanja
@@ -6573,8 +6573,8 @@ The value is a hanja character that is selected 
interactively."
            (hanja-filter (lambda (x) (car x))
                          (mapcar (lambda (c)
                                    (if (listp c)
-                                       (cons (decode-char 'ucs (car c)) (cdr 
c))
-                                    (list (decode-char 'ucs c))))
+                                       (cons (car c) (cdr c))
+                                     (list c)))
                                  (aref hanja-table char)))))
     (unwind-protect
        (when (aref hanja-conversions 2)
diff --git a/lisp/language/hebrew.el b/lisp/language/hebrew.el
index c55d23f72d..6cec9f1274 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 6f579f2383..8b1c3d69ae 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
 
 ;; Keywords: multilingual, Indian, Devanagari
 
diff --git a/lisp/language/indian.el b/lisp/language/indian.el
index 6f9d270384..614d0767e7 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1999, 2001-2022 Free Software Foundation, Inc.
 ;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
 ;;   Registration Number H14PRO021
diff --git a/lisp/language/japan-util.el b/lisp/language/japan-util.el
index cad34e9904..3424811755 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 d9bd42093a..666ebad62f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2022 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 121a4c542e..9a6ab1b249 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1999, 2001-2022 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 bdf8240de9..bc68d56b24 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2022 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 c8c3fe4f7e..51a947cc72 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 93849461ea..1861eff15e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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/romanian.el b/lisp/language/romanian.el
index 2112df7b15..972326c7a8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2022 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 2a738467d2..cc0c6e2e02 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2022 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 366c39202d..9029aa391f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 e11a05445c..d11daf0f83 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 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 be15db49db..6a6289a44c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2000-2022 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 1f7a1edcad..e7cb289b65 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2022 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 dc37fc90ac..0262798bb2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2022 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 f23b3889cc..f709f6fbd8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 bfaf0f3b94..9751fc0e39 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2022 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 7980041e2b..cd574bb5d5 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2022 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 613d9734ae..6d5b0d84e6 100644
--- a/lisp/ldefs-boot.el
+++ b/lisp/ldefs-boot.el
@@ -2723,27 +2723,6 @@ The optional argument IGNORED is not used.
 
 \(fn URL &optional IGNORED)" t nil)
 
-(autoload 'browse-url-netscape "browse-url" "\
-Ask the Netscape WWW browser to load URL.
-Default to the URL around or before point.  The strings in variable
-`browse-url-netscape-arguments' are also passed to Netscape.
-
-When called interactively, if variable `browse-url-new-window-flag' is
-non-nil, load the document in a new Netscape window, otherwise use a
-random existing one.  A non-nil interactive prefix argument reverses
-the effect of `browse-url-new-window-flag'.
-
-If `browse-url-netscape-new-window-is-tab' is non-nil, then
-whenever a document would otherwise be loaded in a new window, it
-is loaded in a new tab in an existing window instead.
-
-When called non-interactively, optional second argument NEW-WINDOW is
-used instead of `browse-url-new-window-flag'.
-
-\(fn URL &optional NEW-WINDOW)" t nil)
-
-(make-obsolete 'browse-url-netscape 'nil '"25.1")
-
 (autoload 'browse-url-mozilla "browse-url" "\
 Ask the Mozilla WWW browser to load URL.
 Default to the URL around or before point.  The strings in variable
@@ -2790,27 +2769,13 @@ The optional argument NEW-WINDOW is not used.
 
 \(fn URL &optional NEW-WINDOW)" t nil)
 
-(autoload 'browse-url-galeon "browse-url" "\
-Ask the Galeon WWW browser to load URL.
-Default to the URL around or before point.  The strings in variable
-`browse-url-galeon-arguments' are also passed to Galeon.
-
-When called interactively, if variable `browse-url-new-window-flag' is
-non-nil, load the document in a new Galeon window, otherwise use a
-random existing one.  A non-nil interactive prefix argument reverses
-the effect of `browse-url-new-window-flag'.
-
-If `browse-url-galeon-new-window-is-tab' is non-nil, then whenever a
-document would otherwise be loaded in a new window, it is loaded in a
-new tab in an existing window instead.
-
-When called non-interactively, optional second argument NEW-WINDOW is
-used instead of `browse-url-new-window-flag'.
+(autoload 'browse-url-webpositive "browse-url" "\
+Ask the WebPositive WWW browser to load URL.
+Default to the URL around or before point.
+The optional argument NEW-WINDOW is not used.
 
 \(fn URL &optional NEW-WINDOW)" t nil)
 
-(make-obsolete 'browse-url-galeon 'nil '"25.1")
-
 (autoload 'browse-url-emacs "browse-url" "\
 Ask Emacs to load URL into a buffer and show it in another window.
 Optional argument SAME-WINDOW non-nil means show the URL in the
@@ -2819,7 +2784,7 @@ currently selected window instead.
 \(fn URL &optional SAME-WINDOW)" t nil)
 
 (autoload 'browse-url-gnome-moz "browse-url" "\
-Ask Mozilla/Netscape to load URL via the GNOME program `gnome-moz-remote'.
+Ask Mozilla to load URL via the GNOME program `gnome-moz-remote'.
 Default to the URL around or before point.  The strings in variable
 `browse-url-gnome-moz-arguments' are also passed.
 
@@ -3093,6 +3058,11 @@ disabled.
 
 (put 'byte-compile-warnings 'safe-local-variable (lambda (v) (or (symbolp v) 
(null (delq nil (mapcar (lambda (x) (not (symbolp x))) v))))))
 
+(autoload 'byte-compile-warning-enabled-p "bytecomp" "\
+Return non-nil if WARNING is enabled, according to `byte-compile-warnings'.
+
+\(fn WARNING &optional SYMBOL)" nil nil)
+
 (autoload 'byte-compile-disable-warning "bytecomp" "\
 Change `byte-compile-warnings' to disable WARNING.
 If `byte-compile-warnings' is t, set it to `(not WARNING)'.
@@ -5806,7 +5776,7 @@ disabled.
 
 \(fn &optional ARG)" t nil)
 
-(register-definition-prefixes "completion" '("*c-def-regexp*" 
"*lisp-def-regexp*" "accept-completion" "add-" "cdabbrev-" 
"check-completion-length" "clear-all-completions" "cmpl-" "complet" 
"current-completion-source" "delete-completion" "enable-completion" "find-" 
"initialize-completions" "inside-locate-completion-entry" 
"interactive-completion-string-reader" "kill-" "list-all-completions" 
"load-completions-from-file" "make-c" "next-cdabbrev" "num-cmpl-sources" 
"reset-cdabbrev" "save" "s [...]
+(register-definition-prefixes "completion" '("*c-def-regexp*" 
"*lisp-def-regexp*" "accept-completion" "add-" "cdabbrev-" 
"check-completion-length" "clear-all-completions" "cmpl-" "complet" 
"current-completion-source" "delete-completion" "enable-completion" "find-" 
"inside-locate-completion-entry" "interactive-completion-string-reader" "kill-" 
"list-all-completions" "load-completions-from-file" "make-c" "next-cdabbrev" 
"num-cmpl-sources" "reset-cdabbrev" "save" "set-c" "symbol-" "use-comp [...]
 
 ;;;***
 
@@ -10521,28 +10491,34 @@ Emerge two RCS revisions of a file, with another 
revision as ancestor.
 
 (autoload 'emoji-insert "emoji" "\
 Choose and insert an emoji glyph.
-If TEXT (interactively, the prefix), use a textual search instead
-of a visual interface.
+If TEXT (interactively, the prefix argument), choose the emoji
+by typing its Unicode Standard name (with completion), instead
+of selecting from emoji display.
 
 \(fn &optional TEXT)" t nil)
 
 (autoload 'emoji-recent "emoji" "\
-Choose and insert a recently used emoji glyph." t nil)
+Choose and insert one of the recently-used emoji glyphs." t nil)
 
 (autoload 'emoji-search "emoji" "\
-Choose and insert an emoji glyph by searching for an emoji name." t nil)
+Choose and insert an emoji glyph by typing its Unicode name.
+This command prompts for an emoji name, with completion, and inserts it.
+It recognizes the Unicode Standard names of emoji." t nil)
 
 (autoload 'emoji-list "emoji" "\
 List emojis and insert the one that's selected.
-The character will be inserted into the buffer that was selected
-when the command was issued." t nil)
+Select the emoji by typing \\<emoji-list-mode-map>\\[emoji-list-select] on its 
picture.
+The glyph will be inserted into the buffer that was current
+when the command was invoked." t nil)
 
 (autoload 'emoji-describe "emoji" "\
-Say what the name of the composed grapheme cluster GLYPH is.
-If it's not known, this function returns nil.
+Display the name of the grapheme cluster composed from GLYPH.
+GLYPH should be a string of one or more characters which together
+produce an emoji.  Interactively, GLYPH is the emoji at point (it
+could also be any character, not just emoji).
 
-Interactively, it will message what the name of the emoji (or
-character) under point is.
+If called from Lisp, return the name as a string; return nil if
+the name is not known.
 
 \(fn GLYPH &optional INTERACTIVE)" t nil)
 
@@ -12367,6 +12343,12 @@ a top-level keymap, `text-scale-increase' or
 `text-scale-decrease' may be more appropriate.
 
 \(fn INC)" t nil)
+ (define-key global-map [pinch] 'text-scale-pinch)
+
+(autoload 'text-scale-pinch "face-remap" "\
+Adjust the height of the default face by the scale in the pinch event EVENT.
+
+\(fn EVENT)" t nil)
 
 (autoload 'buffer-face-mode "face-remap" "\
 Minor mode for a buffer-specific default face.
@@ -14329,6 +14311,35 @@ separators (like underscores) at places they belong to.
 
 ;;;***
 
+;;;### (autoloads nil "glyphless-mode" "textmodes/glyphless-mode.el"
+;;;;;;  (0 0 0 0))
+;;; Generated autoloads from textmodes/glyphless-mode.el
+
+(autoload 'glyphless-display-mode "glyphless-mode" "\
+Minor mode for displaying glyphless characters in the current buffer.
+If enabled, all glyphless characters will be displayed as boxes
+that display their acronyms.
+
+This is a minor mode.  If called interactively, toggle the
+`Glyphless-Display mode' mode.  If the prefix argument is positive,
+enable the mode, and if it is zero or negative, disable the mode.
+
+If called from Lisp, toggle the mode if ARG is `toggle'.  Enable the
+mode if ARG is nil, omitted, or is a positive number.  Disable the
+mode if ARG is a negative number.
+
+To check whether the minor mode is enabled in the current buffer,
+evaluate `glyphless-display-mode'.
+
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
+\(fn &optional ARG)" t nil)
+
+(register-definition-prefixes "glyphless-mode" '("glyphless-mode-"))
+
+;;;***
+
 ;;;### (autoloads nil "gmm-utils" "gnus/gmm-utils.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gmm-utils.el
 
@@ -15200,6 +15211,13 @@ Initialize the Gnus registry." t nil)
 
 ;;;***
 
+;;;### (autoloads nil "gnus-rmail" "gnus/gnus-rmail.el" (0 0 0 0))
+;;; Generated autoloads from gnus/gnus-rmail.el
+
+(register-definition-prefixes "gnus-rmail" '("gnus-"))
+
+;;;***
+
 ;;;### (autoloads nil "gnus-salt" "gnus/gnus-salt.el" (0 0 0 0))
 ;;; Generated autoloads from gnus/gnus-salt.el
 
@@ -18672,8 +18690,8 @@ An image file is one whose name has an extension in
 
 (autoload 'image-mode "image-mode" "\
 Major mode for image files.
-You can use \\<image-mode-map>\\[image-toggle-display] or 
\\<image-mode-map>\\[image-toggle-hex-display]
-to toggle between display as an image and display as text or hex.
+You can use \\<image-mode-map>\\[image-toggle-display] or 
\\[image-toggle-hex-display] to toggle between display
+as an image and display as text or hex.
 
 Key bindings:
 \\{image-mode-map}" t nil)
@@ -19542,24 +19560,24 @@ Display a list of the options available when a 
misspelling is encountered.
 
 Selections are:
 
-DIGIT: Replace the word with a digit offered in the *Choices* buffer.
-SPC:   Accept word this time.
-`i':   Accept word and insert into private dictionary.
-`a':   Accept word for this session.
-`A':   Accept word and place in `buffer-local dictionary'.
-`r':   Replace word with typed-in value.  Rechecked.
-`R':   Replace word with typed-in value.  Query-replaced in buffer.  Rechecked.
-`?':   Show these commands.
-`x':   Exit spelling buffer.  Move cursor to original point.
-`X':   Exit spelling buffer.  Leaves cursor at the current point, and permits
+\\`0'..\\`9'  Replace the word with a digit offered in the *Choices* buffer.
+\\`SPC'   Accept word this time.
+\\`i'     Accept word and insert into private dictionary.
+\\`a'     Accept word for this session.
+\\`A'     Accept word and place in `buffer-local dictionary'.
+\\`r'     Replace word with typed-in value.  Rechecked.
+\\`R'     Replace word with typed-in value.  Query-replaced in buffer.  
Rechecked.
+\\`?'     Show these commands.
+\\`x'     Exit spelling buffer.  Move cursor to original point.
+\\`X'     Exit spelling buffer.  Leaves cursor at the current point, and 
permits
         the aborted check to be completed later.
-`q':   Quit spelling session (Kills ispell process).
-`l':   Look up typed-in replacement in alternate dictionary.  Wildcards okay.
-`u':   Like `i', but the word is lower-cased first.
-`m':   Place typed-in value in personal dictionary, then recheck current word.
-`C-l':  Redraw screen.
-`C-r':  Recursive edit.
-`C-z':  Suspend Emacs or iconify frame." nil nil)
+\\`q'     Quit spelling session (Kills ispell process).
+\\`l'     Look up typed-in replacement in alternate dictionary.  Wildcards 
okay.
+\\`u'     Like \\`i', but the word is lower-cased first.
+\\`m'     Place typed-in value in personal dictionary, then recheck current 
word.
+\\`C-l'   Redraw screen.
+\\`C-r'   Recursive edit.
+\\`C-z'   Suspend Emacs or iconify frame." nil nil)
 
 (autoload 'ispell-kill-ispell "ispell" "\
 Kill current Ispell process (so that you may start a fresh one).
@@ -19666,8 +19684,8 @@ Don't check spelling of message headers except the 
Subject field.
 Don't check included messages.
 
 To abort spell checking of a message region and send the message anyway,
-use the `x' command.  (Any subsequent regions will be checked.)
-The `X' command aborts sending the message so that you can edit the buffer.
+use the \\`x' command.  (Any subsequent regions will be checked.)
+The \\`X' command aborts sending the message so that you can edit the buffer.
 
 To spell-check whenever a message is sent, include the appropriate lines
 in your init file:
@@ -21025,7 +21043,7 @@ current header, calls `mail-complete-function' and 
passes prefix ARG if any.
 ;;; Generated autoloads from net/mailcap.el
 
 (autoload 'mailcap-mime-type-to-extension "mailcap" "\
-Return a file name extension based on a mime type.
+Return a file name extension based on a MIME-TYPE.
 For instance, `image/png' will result in `png'.
 
 \(fn MIME-TYPE)" nil nil)
@@ -22879,6 +22897,30 @@ QUALITY can be:
 
 ;;;***
 
+;;;### (autoloads nil "multisession" "emacs-lisp/multisession.el"
+;;;;;;  (0 0 0 0))
+;;; Generated autoloads from emacs-lisp/multisession.el
+
+(autoload 'define-multisession-variable "multisession" "\
+Make NAME into a multisession variable initialized from INITIAL-VALUE.
+DOC should be a doc string, and ARGS are keywords as applicable to
+`make-multisession'.
+
+\(fn NAME INITIAL-VALUE &optional DOC &rest ARGS)" nil t)
+
+(function-put 'define-multisession-variable 'lisp-indent-function 'defun)
+
+(autoload 'list-multisession-values "multisession" "\
+List all values in the \"multisession\" database.
+If CHOOSE-STORAGE (interactively, the prefix), query for the
+storage method to list.
+
+\(fn &optional CHOOSE-STORAGE)" t nil)
+
+(register-definition-prefixes "multisession" '("multisession-"))
+
+;;;***
+
 ;;;### (autoloads nil "mwheel" "mwheel.el" (0 0 0 0))
 ;;; Generated autoloads from mwheel.el
 
@@ -24164,7 +24206,7 @@ Coloring:
 
 ;;;### (autoloads nil "org" "org/org.el" (0 0 0 0))
 ;;; Generated autoloads from org/org.el
-(push (purecopy '(org 9 5)) package--builtin-versions)
+(push (purecopy '(org 9 5 2)) package--builtin-versions)
 
 (autoload 'org-babel-do-load-languages "org" "\
 Load the languages defined in `org-babel-load-languages'.
@@ -24838,8 +24880,6 @@ Turning on outline mode calls the value of 
`text-mode-hook' and then of
 `outline-mode-hook', if they are non-nil.
 
 \(fn)" t nil)
-(put 'outline-minor-mode-cycle 'safe-local-variable 'booleanp)
-(put 'outline-minor-mode-highlight 'safe-local-variable 'symbolp)
 
 (autoload 'outline-minor-mode "outline" "\
 Toggle Outline minor mode.
@@ -25132,7 +25172,9 @@ short description.
 Return the version number of the package in which this is used.
 Assumes it is used from an Elisp file placed inside the top-level directory
 of an installed ELPA package.
-The return value is a string (or nil in case we can't find it)." nil nil)
+The return value is a string (or nil in case we can't find it).
+It works in more cases if the call is in the file which contains
+the `Version:' header." nil nil)
 
 (function-put 'package-get-version 'pure 't)
 
@@ -25868,6 +25910,14 @@ they are not by default assigned to keys." t nil)
 
 ;;;***
 
+;;;### (autoloads nil "pixel-fill" "textmodes/pixel-fill.el" (0 0
+;;;;;;  0 0))
+;;; Generated autoloads from textmodes/pixel-fill.el
+
+(register-definition-prefixes "pixel-fill" '("pixel-fill-"))
+
+;;;***
+
 ;;;### (autoloads nil "pixel-scroll" "pixel-scroll.el" (0 0 0 0))
 ;;; Generated autoloads from pixel-scroll.el
 
@@ -25900,6 +25950,38 @@ disabled.
 
 \(fn &optional ARG)" t nil)
 
+(defvar pixel-scroll-precision-mode nil "\
+Non-nil if Pixel-Scroll-Precision mode is enabled.
+See the `pixel-scroll-precision-mode' command
+for a description of this minor mode.
+Setting this variable directly does not take effect;
+either customize it (see the info node `Easy Customization')
+or call the function `pixel-scroll-precision-mode'.")
+
+(custom-autoload 'pixel-scroll-precision-mode "pixel-scroll" nil)
+
+(autoload 'pixel-scroll-precision-mode "pixel-scroll" "\
+Toggle pixel scrolling.
+When enabled, this minor mode allows to scroll the display
+precisely, according to the turning of the mouse wheel.
+
+This is a minor mode.  If called interactively, toggle the
+`Pixel-Scroll-Precision mode' mode.  If the prefix argument is
+positive, enable the mode, and if it is zero or negative, disable the
+mode.
+
+If called from Lisp, toggle the mode if ARG is `toggle'.  Enable the
+mode if ARG is nil, omitted, or is a positive number.  Disable the
+mode if ARG is a negative number.
+
+To check whether the minor mode is enabled in the current buffer,
+evaluate `(default-value \\='pixel-scroll-precision-mode)'.
+
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
+\(fn &optional ARG)" t nil)
+
 (register-definition-prefixes "pixel-scroll" '("pixel-"))
 
 ;;;***
@@ -27680,11 +27762,11 @@ If ARG is non-nil, instead prompt for connection 
parameters.
 (autoload 'rcirc-connect "rcirc" "\
 Connect to SERVER.
 The arguments PORT, NICK, USER-NAME, FULL-NAME, PASSWORD,
-ENCRYPTION, SERVER-ALIAS are interpreted as in
+ENCRYPTION, CERTFP, SERVER-ALIAS are interpreted as in
 `rcirc-server-alist'.  STARTUP-CHANNELS is a list of channels
 that are joined after authentication.
 
-\(fn SERVER &optional PORT NICK USER-NAME FULL-NAME STARTUP-CHANNELS PASSWORD 
ENCRYPTION SERVER-ALIAS)" nil nil)
+\(fn SERVER &optional PORT NICK USER-NAME FULL-NAME STARTUP-CHANNELS PASSWORD 
ENCRYPTION CERTFP SERVER-ALIAS)" nil nil)
 
 (defvar rcirc-track-minor-mode nil "\
 Non-nil if Rcirc-Track minor mode is enabled.
@@ -27941,7 +28023,8 @@ evaluate `rectangle-mark-mode'.
 The mode's hook is called both when the mode is enabled and when it is
 disabled.
 
-Activates the region if needed.  Only lasts until the region is deactivated.
+Activates the region if it's inactive and Transient Mark mode is
+on.  Only lasts until the region is next deactivated.
 
 \(fn &optional ARG)" t nil)
 
@@ -28703,6 +28786,103 @@ Set PASSWORD to be used for retrieving mail from a 
POP or IMAP server.
 
 ;;;***
 
+;;;### (autoloads nil "rmailedit" "mail/rmailedit.el" (0 0 0 0))
+;;; Generated autoloads from mail/rmailedit.el
+
+(autoload 'rmail-edit-current-message "rmailedit" "\
+Edit the contents of this message." t nil)
+
+(register-definition-prefixes "rmailedit" '("rmail-"))
+
+;;;***
+
+;;;### (autoloads nil "rmailkwd" "mail/rmailkwd.el" (0 0 0 0))
+;;; Generated autoloads from mail/rmailkwd.el
+
+(autoload 'rmail-add-label "rmailkwd" "\
+Add LABEL to labels associated with current RMAIL message.
+Completes (see `rmail-read-label') over known labels when reading.
+LABEL may be a symbol or string.  Only one label is allowed.
+
+\(fn LABEL)" t nil)
+
+(autoload 'rmail-kill-label "rmailkwd" "\
+Remove LABEL from labels associated with current RMAIL message.
+Completes (see `rmail-read-label') over known labels when reading.
+LABEL may be a symbol or string.  Only one label is allowed.
+
+\(fn LABEL)" t nil)
+
+(autoload 'rmail-read-label "rmailkwd" "\
+Read a label with completion, prompting with PROMPT.
+Completions are chosen from `rmail-label-obarray'.  The default
+is `rmail-last-label', if that is non-nil.  Updates `rmail-last-label'
+according to the choice made, and returns a symbol.
+
+\(fn PROMPT)" nil nil)
+
+(autoload 'rmail-previous-labeled-message "rmailkwd" "\
+Show previous message with one of the labels LABELS.
+LABELS should be a comma-separated list of label names.
+If LABELS is empty, the last set of labels specified is used.
+With prefix argument N moves backward N messages with these labels.
+
+\(fn N LABELS)" t nil)
+
+(autoload 'rmail-next-labeled-message "rmailkwd" "\
+Show next message with one of the labels LABELS.
+LABELS should be a comma-separated list of label names.
+If LABELS is empty, the last set of labels specified is used.
+With prefix argument N moves forward N messages with these labels.
+
+\(fn N LABELS)" t nil)
+
+(register-definition-prefixes "rmailkwd" '("rmail-"))
+
+;;;***
+
+;;;### (autoloads nil "rmailmm" "mail/rmailmm.el" (0 0 0 0))
+;;; Generated autoloads from mail/rmailmm.el
+
+(autoload 'rmail-mime "rmailmm" "\
+Toggle the display of a MIME message.
+
+The actual behavior depends on the value of `rmail-enable-mime'.
+
+If `rmail-enable-mime' is non-nil (the default), this command toggles
+the display of a MIME message between decoded presentation form and
+raw data.  With optional prefix argument ARG, it toggles the display only
+of the MIME entity at point, if there is one.  The optional argument
+STATE forces a particular display state, rather than toggling.
+`raw' forces raw mode, any other non-nil value forces decoded mode.
+
+If `rmail-enable-mime' is nil, this creates a temporary \"*RMAIL*\"
+buffer holding a decoded copy of the message.  Inline content-types
+are handled according to `rmail-mime-media-type-handlers-alist'.
+By default, this displays text and multipart messages, and offers to
+download attachments as specified by `rmail-mime-attachment-dirs-alist'.
+The arguments ARG and STATE have no effect in this case.
+
+\(fn &optional ARG STATE)" t nil)
+
+(register-definition-prefixes "rmailmm" '("rmail-"))
+
+;;;***
+
+;;;### (autoloads nil "rmailmsc" "mail/rmailmsc.el" (0 0 0 0))
+;;; Generated autoloads from mail/rmailmsc.el
+
+(autoload 'set-rmail-inbox-list "rmailmsc" "\
+Set the inbox list of the current RMAIL file to FILE-NAME.
+You can specify one file name, or several names separated by commas.
+If FILE-NAME is empty, remove any existing inbox list.
+
+This applies only to the current session.
+
+\(fn FILE-NAME)" t nil)
+
+;;;***
+
 ;;;### (autoloads nil "rmailout" "mail/rmailout.el" (0 0 0 0))
 ;;; Generated autoloads from mail/rmailout.el
 (put 'rmail-output-file-alist 'risky-local-variable t)
@@ -28775,6 +28955,113 @@ than appending to it.  Deletes the message after 
writing if
 
 ;;;***
 
+;;;### (autoloads nil "rmailsort" "mail/rmailsort.el" (0 0 0 0))
+;;; Generated autoloads from mail/rmailsort.el
+
+(autoload 'rmail-sort-by-date "rmailsort" "\
+Sort messages of current Rmail buffer by \"Date\" header.
+If prefix argument REVERSE is non-nil, sorts in reverse order.
+
+\(fn REVERSE)" t nil)
+
+(autoload 'rmail-sort-by-subject "rmailsort" "\
+Sort messages of current Rmail buffer by \"Subject\" header.
+Ignores any \"Re: \" prefix.  If prefix argument REVERSE is
+non-nil, sorts in reverse order.
+
+\(fn REVERSE)" t nil)
+
+(autoload 'rmail-sort-by-author "rmailsort" "\
+Sort messages of current Rmail buffer by author.
+This uses either the \"From\" or \"Sender\" header, downcased.
+If prefix argument REVERSE is non-nil, sorts in reverse order.
+
+\(fn REVERSE)" t nil)
+
+(autoload 'rmail-sort-by-recipient "rmailsort" "\
+Sort messages of current Rmail buffer by recipient.
+This uses either the \"To\" or \"Apparently-To\" header, downcased.
+If prefix argument REVERSE is non-nil, sorts in reverse order.
+
+\(fn REVERSE)" t nil)
+
+(autoload 'rmail-sort-by-correspondent "rmailsort" "\
+Sort messages of current Rmail buffer by other correspondent.
+This uses either the \"From\", \"Sender\", \"To\", or
+\"Apparently-To\" header, downcased.  Uses the first header not
+excluded by `mail-dont-reply-to-names'.  If prefix argument
+REVERSE is non-nil, sorts in reverse order.
+
+\(fn REVERSE)" t nil)
+
+(autoload 'rmail-sort-by-lines "rmailsort" "\
+Sort messages of current Rmail buffer by the number of lines.
+If prefix argument REVERSE is non-nil, sorts in reverse order.
+
+\(fn REVERSE)" t nil)
+
+(autoload 'rmail-sort-by-labels "rmailsort" "\
+Sort messages of current Rmail buffer by labels.
+LABELS is a comma-separated list of labels.  The order of these
+labels specifies the order of messages: messages with the first
+label come first, messages with the second label come second, and
+so on.  Messages that have none of these labels come last.
+If prefix argument REVERSE is non-nil, sorts in reverse order.
+
+\(fn REVERSE LABELS)" t nil)
+
+(register-definition-prefixes "rmailsort" '("rmail-"))
+
+;;;***
+
+;;;### (autoloads nil "rmailsum" "mail/rmailsum.el" (0 0 0 0))
+;;; Generated autoloads from mail/rmailsum.el
+
+(autoload 'rmail-summary "rmailsum" "\
+Display a summary of all messages, one line per message." t nil)
+
+(autoload 'rmail-summary-by-labels "rmailsum" "\
+Display a summary of all messages with one or more LABELS.
+LABELS should be a string containing the desired labels, separated by commas.
+
+\(fn LABELS)" t nil)
+
+(autoload 'rmail-summary-by-recipients "rmailsum" "\
+Display a summary of all messages with the given RECIPIENTS.
+Normally checks the To, From and Cc fields of headers;
+but if PRIMARY-ONLY is non-nil (prefix arg given),
+ only look in the To and From fields.
+RECIPIENTS is a regular expression.
+
+\(fn RECIPIENTS &optional PRIMARY-ONLY)" t nil)
+
+(autoload 'rmail-summary-by-regexp "rmailsum" "\
+Display a summary of all messages according to regexp REGEXP.
+If the regular expression is found in the header of the message
+\(including in the date and other lines, as well as the subject line),
+Emacs will list the message in the summary.
+
+\(fn REGEXP)" t nil)
+
+(autoload 'rmail-summary-by-topic "rmailsum" "\
+Display a summary of all messages with the given SUBJECT.
+Normally checks just the Subject field of headers; but with prefix
+argument WHOLE-MESSAGE is non-nil, looks in the whole message.
+SUBJECT is a regular expression.
+
+\(fn SUBJECT &optional WHOLE-MESSAGE)" t nil)
+
+(autoload 'rmail-summary-by-senders "rmailsum" "\
+Display a summary of all messages whose \"From\" field matches SENDERS.
+SENDERS is a regular expression.  The default for SENDERS matches the
+sender of the current message.
+
+\(fn SENDERS)" t nil)
+
+(register-definition-prefixes "rmailsum" '("rmail-"))
+
+;;;***
+
 ;;;### (autoloads nil "rmc" "emacs-lisp/rmc.el" (0 0 0 0))
 ;;; Generated autoloads from emacs-lisp/rmc.el
 
@@ -28794,6 +29081,9 @@ the optional argument HELP-STRING.  This argument is a 
string that
 should contain a more detailed description of all of the possible
 choices.  `read-multiple-choice' will display that description in a
 help buffer if the user requests that.
+If optional argument SHOW-HELP is non-nil, show the help screen
+immediately, before any user input.  If SHOW-HELP is a string,
+use it as the name of the help buffer.
 
 This function translates user input into responses by consulting
 the bindings in `query-replace-map'; see the documentation of
@@ -28820,7 +29110,9 @@ Usage example:
                         (?s \"session only\")
                         (?n \"no\")))
 
-\(fn PROMPT CHOICES &optional HELP-STRING)" nil nil)
+\(fn PROMPT CHOICES &optional HELP-STRING SHOW-HELP)" nil nil)
+
+(register-definition-prefixes "rmc" '("rmc--"))
 
 ;;;***
 
@@ -32225,6 +32517,25 @@ Run vsql as an inferior process.
 
 ;;;***
 
+;;;### (autoloads nil "sqlite" "sqlite.el" (0 0 0 0))
+;;; Generated autoloads from sqlite.el
+
+(register-definition-prefixes "sqlite" '("with-sqlite-transaction"))
+
+;;;***
+
+;;;### (autoloads nil "sqlite-mode" "sqlite-mode.el" (0 0 0 0))
+;;; Generated autoloads from sqlite-mode.el
+
+(autoload 'sqlite-mode-open-file "sqlite-mode" "\
+Browse the contents of an sqlite file.
+
+\(fn FILE)" t nil)
+
+(register-definition-prefixes "sqlite-mode" '("sqlite-"))
+
+;;;***
+
 ;;;### (autoloads nil "srecode" "cedet/srecode.el" (0 0 0 0))
 ;;; Generated autoloads from cedet/srecode.el
 (push (purecopy '(srecode 1 2)) package--builtin-versions)
@@ -32539,6 +32850,16 @@ This takes into account combining characters and 
grapheme clusters.
 
 \(fn STRING)" nil nil)
 
+(autoload 'add-display-text-property "subr-x" "\
+Add display property PROP with VALUE to the text from START to END.
+If any text in the region has a non-nil `display' property, those
+properties are retained.
+
+If OBJECT is non-nil, it should be a string or a buffer.  If nil,
+this defaults to the current buffer.
+
+\(fn START END PROP VALUE &optional OBJECT)" nil nil)
+
 (register-definition-prefixes "subr-x" '("and-let*" "hash-table-" "if-let*" 
"internal--" "named-let" "replace-region-contents" "string-" "thread-" 
"when-let*" "with-memoization"))
 
 ;;;***
@@ -32845,6 +33166,32 @@ The variable `tab-width' controls the spacing of tab 
stops.
 ;;;### (autoloads nil "table" "textmodes/table.el" (0 0 0 0))
 ;;; Generated autoloads from textmodes/table.el
 
+(autoload 'table-fixed-width-mode "table" "\
+Cell width is fixed when this is non-nil.
+Normally it should be nil for allowing automatic cell width expansion
+that widens a cell when it is necessary.  When non-nil, typing in a
+cell does not automatically expand the cell width.  A word that is too
+long to fit in a cell is chopped into multiple lines.  The chopped
+location is indicated by `table-word-continuation-char'.  This
+variable's value can be toggled by \\[table-fixed-width-mode] at
+run-time.
+
+This is a minor mode.  If called interactively, toggle the
+`Table-Fixed-Width mode' mode.  If the prefix argument is positive,
+enable the mode, and if it is zero or negative, disable the mode.
+
+If called from Lisp, toggle the mode if ARG is `toggle'.  Enable the
+mode if ARG is nil, omitted, or is a positive number.  Disable the
+mode if ARG is a negative number.
+
+To check whether the minor mode is enabled in the current buffer,
+evaluate `table-fixed-width-mode'.
+
+The mode's hook is called both when the mode is enabled and when it is
+disabled.
+
+\(fn &optional ARG)" t nil)
+
 (autoload 'table-insert "table" "\
 Insert an editable text table.
 Insert a table of specified number of COLUMNS and ROWS.  Optional
@@ -33173,32 +33520,6 @@ or `top', `middle', `bottom' or `none' for vertical.
 
 \(fn JUSTIFY)" t nil)
 
-(autoload 'table-fixed-width-mode "table" "\
-Cell width is fixed when this is non-nil.
-Normally it should be nil for allowing automatic cell width expansion
-that widens a cell when it is necessary.  When non-nil, typing in a
-cell does not automatically expand the cell width.  A word that is too
-long to fit in a cell is chopped into multiple lines.  The chopped
-location is indicated by `table-word-continuation-char'.  This
-variable's value can be toggled by \\[table-fixed-width-mode] at
-run-time.
-
-This is a minor mode.  If called interactively, toggle the
-`Table-Fixed-Width mode' mode.  If the prefix argument is positive,
-enable the mode, and if it is zero or negative, disable the mode.
-
-If called from Lisp, toggle the mode if ARG is `toggle'.  Enable the
-mode if ARG is nil, omitted, or is a positive number.  Disable the
-mode if ARG is a negative number.
-
-To check whether the minor mode is enabled in the current buffer,
-evaluate `table-fixed-width-mode'.
-
-The mode's hook is called both when the mode is enabled and when it is
-disabled.
-
-\(fn &optional ARG)" t nil)
-
 (autoload 'table-query-dimension "table" "\
 Return the dimension of the current cell and the current table.
 The result is a list (cw ch tw th c r cells) where cw is the cell
@@ -34160,10 +34481,6 @@ Possibilities include `symbol', `list', `sexp', 
`defun',
 When the optional argument NO-PROPERTIES is non-nil,
 strip text properties from the return value.
 
-If the current buffer uses fields (see Info node `(elisp)Fields'),
-this function will narrow to the field before identifying the
-thing at point.
-
 See the file `thingatpt.el' for documentation on how to define
 a symbol as a valid THING.
 
@@ -35130,7 +35447,7 @@ Discard Tramp from loading remote files." (interactive) 
(ignore-errors (unload-f
 (defvar tramp-archive-enabled (featurep 'dbusbind) "\
 Non-nil when file archive support is available.")
 
-(defconst tramp-archive-suffixes '("7z" "apk" "ar" "cab" "CAB" "cpio" "deb" 
"depot" "exe" "iso" "jar" "lzh" "LZH" "msu" "MSU" "mtree" "odb" "odf" "odg" 
"odp" "ods" "odt" "pax" "rar" "rpm" "shar" "tar" "tbz" "tgz" "tlz" "txz" "tzst" 
"warc" "xar" "xpi" "xps" "zip" "ZIP") "\
+(defconst tramp-archive-suffixes '("7z" "apk" "ar" "cab" "CAB" "cpio" "crate" 
"deb" "depot" "exe" "iso" "jar" "lzh" "LZH" "msu" "MSU" "mtree" "odb" "odf" 
"odg" "odp" "ods" "odt" "pax" "rar" "rpm" "shar" "tar" "tbz" "tgz" "tlz" "txz" 
"tzst" "warc" "xar" "xpi" "xps" "zip" "ZIP") "\
 List of suffixes which indicate a file archive.
 It must be supported by libarchive(3).")
 
@@ -35173,7 +35490,7 @@ Add archive file name handler to 
`file-name-handler-alist'." (when tramp-archive
 ;;;;;;  0))
 ;;; Generated autoloads from net/tramp-compat.el
 
-(register-definition-prefixes "tramp-compat" '("tramp-compat-"))
+(register-definition-prefixes "tramp-compat" '("tramp-"))
 
 ;;;***
 
@@ -35583,16 +35900,20 @@ You might need to set `uce-mail-reader' before using 
this.
 ;;; Generated autoloads from international/ucs-normalize.el
 
 (autoload 'string-glyph-compose "ucs-normalize" "\
-Compose the string STR by according to the Unicode NFC.
-This is the canonical composed form.  For instance:
+Compose STRING according to the Unicode NFC.
+This returns a new string obtained by canonical decomposition
+of STRING (see `ucs-normalize-NFC-string') followed by canonical
+composition, a.k.a. the \"Unicode Normalization Form C\" of STRING.
+For instance:
 
-  (ucs-normalize-NFC-string \"Å\") => \"Å\"
+  (string-glyph-compose \"Å\") => \"Å\"
 
 \(fn STRING)" nil nil)
 
 (autoload 'string-glyph-decompose "ucs-normalize" "\
-Decompose the string STR according to the Unicode NFD.
-This is the canonical decomposed form.  For instance:
+Decompose STRING according to the Unicode NFD.
+This returns a new string that is the canonical decomposition of STRING,
+a.k.a. the \"Unicode Normalization Form D\" of STRING.  For instance:
 
   (ucs-normalize-NFD-string \"Å\") => \"Å\"
 
@@ -36460,7 +36781,7 @@ Report an ERROR that occurred while unlocking a file.
 
 \(fn ERROR)" nil nil)
 
-(register-definition-prefixes "userlock" '("ask-user-about-" "file-" 
"userlock--"))
+(register-definition-prefixes "userlock" '("ask-user-about-" "file-" 
"userlock--check-content-unchanged"))
 
 ;;;***
 
@@ -37077,7 +37398,7 @@ case, and the process object in the asynchronous case.
         (load "vc-git" nil t)
         (vc-git-registered file))))
 
-(register-definition-prefixes "vc-git" '("vc-git-"))
+(register-definition-prefixes "vc-git" '("vc-"))
 
 ;;;***
 
@@ -39173,7 +39494,7 @@ where PREFIX is a prefix key and MODIFIERS is either a 
list of modifiers or
 a single modifier.
 If PREFIX is `none', no prefix is used.  If MODIFIERS is `none',
 the keybindings are directly bound to the arrow keys.
-Default value of PREFIX is `C-x' and MODIFIERS is `shift'.
+Default value of PREFIX is \\`C-x' and MODIFIERS is `shift'.
 
 \(fn &optional PREFIX MODIFIERS)" t nil)
 
@@ -39576,6 +39897,13 @@ Interactively, URL defaults to the string looking like 
a url around point.
 
 \(fn URL &optional NEW-SESSION)" t nil)
 
+(autoload 'xwidget-webkit-bookmark-jump-handler "xwidget" "\
+Jump to the web page bookmarked by the bookmark record BOOKMARK.
+If `xwidget-webkit-bookmark-jump-new-session' is non-nil, create
+a new xwidget-webkit session, otherwise use an existing session.
+
+\(fn BOOKMARK)" nil nil)
+
 (register-definition-prefixes "xwidget" '("xwidget-"))
 
 ;;;***
@@ -39640,13 +39968,12 @@ Zone out, completely." t nil)
 ;;;***
 
 ;;;### (autoloads nil nil ("abbrev.el" "bindings.el" "buff-menu.el"
-;;;;;;  "button.el" "calc/calc-aent.el" "calc/calc-embed.el" 
"calc/calc-loaddefs.el"
-;;;;;;  "calc/calc-misc.el" "calc/calc-yank.el" "calendar/cal-loaddefs.el"
-;;;;;;  "calendar/diary-loaddefs.el" "calendar/hol-loaddefs.el" "case-table.el"
+;;;;;;  "button.el" "calc/calc-aent.el" "calc/calc-embed.el" 
"calc/calc-misc.el"
+;;;;;;  "calc/calc-yank.el" "case-table.el" "cedet/ede/base.el" 
"cedet/ede/config.el"
 ;;;;;;  "cedet/ede/cpp-root.el" "cedet/ede/custom.el" "cedet/ede/dired.el"
 ;;;;;;  "cedet/ede/emacs.el" "cedet/ede/files.el" "cedet/ede/generic.el"
-;;;;;;  "cedet/ede/linux.el" "cedet/ede/loaddefs.el" "cedet/ede/locate.el"
-;;;;;;  "cedet/ede/make.el" "cedet/ede/speedbar.el" "cedet/ede/system.el"
+;;;;;;  "cedet/ede/linux.el" "cedet/ede/locate.el" "cedet/ede/make.el"
+;;;;;;  "cedet/ede/shell.el" "cedet/ede/speedbar.el" "cedet/ede/system.el"
 ;;;;;;  "cedet/ede/util.el" "cedet/semantic/analyze.el" 
"cedet/semantic/analyze/complete.el"
 ;;;;;;  "cedet/semantic/analyze/refs.el" "cedet/semantic/bovine.el"
 ;;;;;;  "cedet/semantic/bovine/c-by.el" "cedet/semantic/bovine/c.el"
@@ -39663,118 +39990,99 @@ Zone out, completely." t nil)
 ;;;;;;  "cedet/semantic/grm-wy-boot.el" "cedet/semantic/html.el"
 ;;;;;;  "cedet/semantic/ia-sb.el" "cedet/semantic/ia.el" 
"cedet/semantic/idle.el"
 ;;;;;;  "cedet/semantic/imenu.el" "cedet/semantic/lex-spp.el" 
"cedet/semantic/lex.el"
-;;;;;;  "cedet/semantic/loaddefs.el" "cedet/semantic/mru-bookmark.el"
-;;;;;;  "cedet/semantic/scope.el" "cedet/semantic/senator.el" 
"cedet/semantic/sort.el"
-;;;;;;  "cedet/semantic/symref.el" "cedet/semantic/symref/cscope.el"
-;;;;;;  "cedet/semantic/symref/global.el" "cedet/semantic/symref/grep.el"
-;;;;;;  "cedet/semantic/symref/idutils.el" "cedet/semantic/symref/list.el"
-;;;;;;  "cedet/semantic/tag-file.el" "cedet/semantic/tag-ls.el" 
"cedet/semantic/tag-write.el"
+;;;;;;  "cedet/semantic/mru-bookmark.el" "cedet/semantic/scope.el"
+;;;;;;  "cedet/semantic/senator.el" "cedet/semantic/sort.el" 
"cedet/semantic/symref.el"
+;;;;;;  "cedet/semantic/symref/cscope.el" "cedet/semantic/symref/global.el"
+;;;;;;  "cedet/semantic/symref/grep.el" "cedet/semantic/symref/idutils.el"
+;;;;;;  "cedet/semantic/symref/list.el" "cedet/semantic/tag-file.el"
+;;;;;;  "cedet/semantic/tag-ls.el" "cedet/semantic/tag-write.el"
 ;;;;;;  "cedet/semantic/tag.el" "cedet/semantic/texi.el" 
"cedet/semantic/util-modes.el"
 ;;;;;;  "cedet/semantic/wisent/java-tags.el" 
"cedet/semantic/wisent/javascript.el"
 ;;;;;;  "cedet/semantic/wisent/javat-wy.el" "cedet/semantic/wisent/js-wy.el"
 ;;;;;;  "cedet/semantic/wisent/python-wy.el" "cedet/semantic/wisent/python.el"
 ;;;;;;  "cedet/srecode/compile.el" "cedet/srecode/cpp.el" 
"cedet/srecode/document.el"
 ;;;;;;  "cedet/srecode/el.el" "cedet/srecode/expandproto.el" 
"cedet/srecode/getset.el"
-;;;;;;  "cedet/srecode/insert.el" "cedet/srecode/java.el" 
"cedet/srecode/loaddefs.el"
-;;;;;;  "cedet/srecode/map.el" "cedet/srecode/mode.el" 
"cedet/srecode/srt-wy.el"
-;;;;;;  "cedet/srecode/srt.el" "cedet/srecode/template.el" 
"cedet/srecode/texi.el"
-;;;;;;  "composite.el" "cus-face.el" "cus-load.el" "cus-start.el"
-;;;;;;  "custom.el" "dired-aux.el" "dired-loaddefs.el" "dired-x.el"
+;;;;;;  "cedet/srecode/insert.el" "cedet/srecode/java.el" 
"cedet/srecode/map.el"
+;;;;;;  "cedet/srecode/mode.el" "cedet/srecode/srt-wy.el" 
"cedet/srecode/srt.el"
+;;;;;;  "cedet/srecode/template.el" "cedet/srecode/texi.el" "composite.el"
+;;;;;;  "cus-face.el" "cus-start.el" "custom.el" "dired-aux.el" "dired-x.el"
 ;;;;;;  "electric.el" "emacs-lisp/backquote.el" "emacs-lisp/byte-run.el"
-;;;;;;  "emacs-lisp/cl-extra.el" "emacs-lisp/cl-loaddefs.el" 
"emacs-lisp/cl-macs.el"
-;;;;;;  "emacs-lisp/cl-preloaded.el" "emacs-lisp/cl-seq.el" 
"emacs-lisp/easymenu.el"
-;;;;;;  "emacs-lisp/eieio-compat.el" "emacs-lisp/eieio-custom.el"
-;;;;;;  "emacs-lisp/eieio-loaddefs.el" "emacs-lisp/eieio-opt.el"
-;;;;;;  "emacs-lisp/float-sup.el" "emacs-lisp/lisp-mode.el" 
"emacs-lisp/lisp.el"
-;;;;;;  "emacs-lisp/macroexp.el" "emacs-lisp/map-ynp.el" 
"emacs-lisp/nadvice.el"
-;;;;;;  "emacs-lisp/shorthands.el" "emacs-lisp/syntax.el" "emacs-lisp/timer.el"
-;;;;;;  "env.el" "epa-hook.el" "erc/erc-autoaway.el" "erc/erc-button.el"
-;;;;;;  "erc/erc-capab.el" "erc/erc-compat.el" "erc/erc-dcc.el" 
"erc/erc-desktop-notifications.el"
-;;;;;;  "erc/erc-ezbounce.el" "erc/erc-fill.el" "erc/erc-identd.el"
-;;;;;;  "erc/erc-imenu.el" "erc/erc-join.el" "erc/erc-list.el" 
"erc/erc-loaddefs.el"
-;;;;;;  "erc/erc-log.el" "erc/erc-match.el" "erc/erc-menu.el" 
"erc/erc-netsplit.el"
-;;;;;;  "erc/erc-notify.el" "erc/erc-page.el" "erc/erc-pcomplete.el"
-;;;;;;  "erc/erc-replace.el" "erc/erc-ring.el" "erc/erc-services.el"
-;;;;;;  "erc/erc-sound.el" "erc/erc-speedbar.el" "erc/erc-spelling.el"
-;;;;;;  "erc/erc-stamp.el" "erc/erc-status-sidebar.el" "erc/erc-track.el"
-;;;;;;  "erc/erc-truncate.el" "erc/erc-xdcc.el" "eshell/em-alias.el"
-;;;;;;  "eshell/em-banner.el" "eshell/em-basic.el" "eshell/em-cmpl.el"
-;;;;;;  "eshell/em-dirs.el" "eshell/em-glob.el" "eshell/em-hist.el"
-;;;;;;  "eshell/em-ls.el" "eshell/em-pred.el" "eshell/em-prompt.el"
-;;;;;;  "eshell/em-rebind.el" "eshell/em-script.el" "eshell/em-smart.el"
-;;;;;;  "eshell/em-term.el" "eshell/em-tramp.el" "eshell/em-unix.el"
-;;;;;;  "eshell/em-xtra.el" "eshell/esh-groups.el" "faces.el" "files.el"
-;;;;;;  "finder-inf.el" "font-core.el" "font-lock.el" "format.el"
-;;;;;;  "frame.el" "help.el" "hfy-cmap.el" "htmlfontify-loaddefs.el"
-;;;;;;  "ibuf-ext.el" "ibuffer-loaddefs.el" "indent.el" 
"international/characters.el"
-;;;;;;  "international/charprop.el" "international/charscript.el"
-;;;;;;  "international/cp51932.el" "international/emoji-labels.el"
-;;;;;;  "international/emoji-zwj.el" "international/eucjp-ms.el"
+;;;;;;  "emacs-lisp/cl-extra.el" "emacs-lisp/cl-macs.el" 
"emacs-lisp/cl-preloaded.el"
+;;;;;;  "emacs-lisp/cl-seq.el" "emacs-lisp/easymenu.el" 
"emacs-lisp/eieio-custom.el"
+;;;;;;  "emacs-lisp/eieio-opt.el" "emacs-lisp/float-sup.el" 
"emacs-lisp/lisp-mode.el"
+;;;;;;  "emacs-lisp/lisp.el" "emacs-lisp/macroexp.el" "emacs-lisp/map-ynp.el"
+;;;;;;  "emacs-lisp/nadvice.el" "emacs-lisp/shorthands.el" 
"emacs-lisp/syntax.el"
+;;;;;;  "emacs-lisp/timer.el" "env.el" "epa-hook.el" "erc/erc-autoaway.el"
+;;;;;;  "erc/erc-button.el" "erc/erc-capab.el" "erc/erc-compat.el"
+;;;;;;  "erc/erc-dcc.el" "erc/erc-desktop-notifications.el" 
"erc/erc-ezbounce.el"
+;;;;;;  "erc/erc-fill.el" "erc/erc-identd.el" "erc/erc-imenu.el"
+;;;;;;  "erc/erc-join.el" "erc/erc-list.el" "erc/erc-log.el" "erc/erc-match.el"
+;;;;;;  "erc/erc-menu.el" "erc/erc-netsplit.el" "erc/erc-notify.el"
+;;;;;;  "erc/erc-page.el" "erc/erc-pcomplete.el" "erc/erc-replace.el"
+;;;;;;  "erc/erc-ring.el" "erc/erc-services.el" "erc/erc-sound.el"
+;;;;;;  "erc/erc-speedbar.el" "erc/erc-spelling.el" "erc/erc-stamp.el"
+;;;;;;  "erc/erc-status-sidebar.el" "erc/erc-track.el" "erc/erc-truncate.el"
+;;;;;;  "erc/erc-xdcc.el" "eshell/em-alias.el" "eshell/em-banner.el"
+;;;;;;  "eshell/em-basic.el" "eshell/em-cmpl.el" "eshell/em-dirs.el"
+;;;;;;  "eshell/em-glob.el" "eshell/em-hist.el" "eshell/em-ls.el"
+;;;;;;  "eshell/em-pred.el" "eshell/em-prompt.el" "eshell/em-rebind.el"
+;;;;;;  "eshell/em-script.el" "eshell/em-smart.el" "eshell/em-term.el"
+;;;;;;  "eshell/em-tramp.el" "eshell/em-unix.el" "eshell/em-xtra.el"
+;;;;;;  "faces.el" "files.el" "font-core.el" "font-lock.el" "format.el"
+;;;;;;  "frame.el" "help.el" "hfy-cmap.el" "ibuf-ext.el" "indent.el"
+;;;;;;  "international/characters.el" "international/charscript.el"
+;;;;;;  "international/cp51932.el" "international/emoji-zwj.el" 
"international/eucjp-ms.el"
 ;;;;;;  "international/iso-transl.el" "international/mule-cmds.el"
-;;;;;;  "international/mule-conf.el" "international/mule.el" 
"international/uni-bidi.el"
-;;;;;;  "international/uni-brackets.el" "international/uni-category.el"
-;;;;;;  "international/uni-combining.el" "international/uni-comment.el"
-;;;;;;  "international/uni-decimal.el" "international/uni-decomposition.el"
-;;;;;;  "international/uni-digit.el" "international/uni-lowercase.el"
-;;;;;;  "international/uni-mirrored.el" "international/uni-name.el"
-;;;;;;  "international/uni-numeric.el" "international/uni-old-name.el"
-;;;;;;  "international/uni-special-lowercase.el" 
"international/uni-special-titlecase.el"
-;;;;;;  "international/uni-special-uppercase.el" 
"international/uni-titlecase.el"
-;;;;;;  "international/uni-uppercase.el" "isearch.el" "jit-lock.el"
-;;;;;;  "jka-cmpr-hook.el" "keymap.el" "language/burmese.el" "language/cham.el"
-;;;;;;  "language/chinese.el" "language/cyrillic.el" "language/czech.el"
-;;;;;;  "language/english.el" "language/ethiopic.el" "language/european.el"
-;;;;;;  "language/georgian.el" "language/greek.el" "language/hebrew.el"
-;;;;;;  "language/indian.el" "language/japanese.el" "language/khmer.el"
-;;;;;;  "language/korean.el" "language/lao.el" "language/misc-lang.el"
-;;;;;;  "language/romanian.el" "language/sinhala.el" "language/slovak.el"
-;;;;;;  "language/tai-viet.el" "language/thai.el" "language/tibetan.el"
-;;;;;;  "language/utf-8-lang.el" "language/vietnamese.el" "ldefs-boot.el"
-;;;;;;  "leim/ja-dic/ja-dic.el" "leim/leim-list.el" "leim/quail/4Corner.el"
-;;;;;;  "leim/quail/ARRAY30.el" "leim/quail/CCDOSPY.el" 
"leim/quail/CTLau-b5.el"
-;;;;;;  "leim/quail/CTLau.el" "leim/quail/ECDICT.el" "leim/quail/ETZY.el"
-;;;;;;  "leim/quail/PY-b5.el" "leim/quail/PY.el" "leim/quail/Punct-b5.el"
-;;;;;;  "leim/quail/Punct.el" "leim/quail/QJ-b5.el" "leim/quail/QJ.el"
-;;;;;;  "leim/quail/SW.el" "leim/quail/TONEPY.el" "leim/quail/ZIRANMA.el"
-;;;;;;  "leim/quail/ZOZY.el" "leim/quail/arabic.el" "leim/quail/cham.el"
-;;;;;;  "leim/quail/compose.el" "leim/quail/croatian.el" 
"leim/quail/cyril-jis.el"
-;;;;;;  "leim/quail/cyrillic.el" "leim/quail/czech.el" "leim/quail/georgian.el"
-;;;;;;  "leim/quail/greek.el" "leim/quail/hanja-jis.el" "leim/quail/hanja.el"
-;;;;;;  "leim/quail/hanja3.el" "leim/quail/hebrew.el" "leim/quail/ipa-praat.el"
-;;;;;;  "leim/quail/latin-alt.el" "leim/quail/latin-ltx.el" 
"leim/quail/latin-post.el"
-;;;;;;  "leim/quail/latin-pre.el" "leim/quail/persian.el" 
"leim/quail/programmer-dvorak.el"
-;;;;;;  "leim/quail/py-punct.el" "leim/quail/pypunct-b5.el" 
"leim/quail/quick-b5.el"
-;;;;;;  "leim/quail/quick-cns.el" "leim/quail/rfc1345.el" "leim/quail/sami.el"
-;;;;;;  "leim/quail/sgml-input.el" "leim/quail/slovak.el" 
"leim/quail/symbol-ksc.el"
-;;;;;;  "leim/quail/tamil-dvorak.el" "leim/quail/tsang-b5.el" 
"leim/quail/tsang-cns.el"
-;;;;;;  "leim/quail/vntelex.el" "leim/quail/vnvni.el" "leim/quail/welsh.el"
-;;;;;;  "loadup.el" "mail/blessmail.el" "mail/rmail-loaddefs.el"
-;;;;;;  "mail/rmailedit.el" "mail/rmailkwd.el" "mail/rmailmm.el"
-;;;;;;  "mail/rmailmsc.el" "mail/rmailsort.el" "mail/rmailsum.el"
-;;;;;;  "mail/undigest.el" "menu-bar.el" "mh-e/mh-gnus.el" 
"mh-e/mh-loaddefs.el"
-;;;;;;  "minibuffer.el" "mouse.el" "net/tramp-loaddefs.el" "newcomment.el"
-;;;;;;  "obarray.el" "org/ob-core.el" "org/ob-lob.el" "org/ob-matlab.el"
-;;;;;;  "org/ob-tangle.el" "org/ob.el" "org/ol-bbdb.el" "org/ol-irc.el"
-;;;;;;  "org/ol.el" "org/org-archive.el" "org/org-attach.el" "org/org-clock.el"
-;;;;;;  "org/org-colview.el" "org/org-compat.el" "org/org-datetree.el"
-;;;;;;  "org/org-duration.el" "org/org-element.el" "org/org-feed.el"
-;;;;;;  "org/org-footnote.el" "org/org-goto.el" "org/org-id.el" 
"org/org-indent.el"
-;;;;;;  "org/org-install.el" "org/org-keys.el" "org/org-lint.el"
-;;;;;;  "org/org-list.el" "org/org-loaddefs.el" "org/org-macs.el"
+;;;;;;  "international/mule-conf.el" "international/mule.el" "isearch.el"
+;;;;;;  "jit-lock.el" "jka-cmpr-hook.el" "keymap.el" "language/burmese.el"
+;;;;;;  "language/cham.el" "language/chinese.el" "language/cyrillic.el"
+;;;;;;  "language/czech.el" "language/english.el" "language/ethiopic.el"
+;;;;;;  "language/european.el" "language/georgian.el" "language/greek.el"
+;;;;;;  "language/hebrew.el" "language/indian.el" "language/japanese.el"
+;;;;;;  "language/khmer.el" "language/korean.el" "language/lao.el"
+;;;;;;  "language/misc-lang.el" "language/romanian.el" "language/sinhala.el"
+;;;;;;  "language/slovak.el" "language/tai-viet.el" "language/thai.el"
+;;;;;;  "language/tibetan.el" "language/utf-8-lang.el" "language/vietnamese.el"
+;;;;;;  "ldefs-boot.el" "leim/ja-dic/ja-dic.el" "leim/leim-list.el"
+;;;;;;  "leim/quail/4Corner.el" "leim/quail/ARRAY30.el" "leim/quail/CCDOSPY.el"
+;;;;;;  "leim/quail/CTLau-b5.el" "leim/quail/CTLau.el" "leim/quail/ECDICT.el"
+;;;;;;  "leim/quail/ETZY.el" "leim/quail/PY-b5.el" "leim/quail/PY.el"
+;;;;;;  "leim/quail/Punct-b5.el" "leim/quail/Punct.el" "leim/quail/QJ-b5.el"
+;;;;;;  "leim/quail/QJ.el" "leim/quail/SW.el" "leim/quail/TONEPY.el"
+;;;;;;  "leim/quail/ZIRANMA.el" "leim/quail/ZOZY.el" "leim/quail/arabic.el"
+;;;;;;  "leim/quail/cham.el" "leim/quail/compose.el" "leim/quail/croatian.el"
+;;;;;;  "leim/quail/cyril-jis.el" "leim/quail/cyrillic.el" 
"leim/quail/czech.el"
+;;;;;;  "leim/quail/georgian.el" "leim/quail/greek.el" 
"leim/quail/hanja-jis.el"
+;;;;;;  "leim/quail/hanja.el" "leim/quail/hanja3.el" "leim/quail/hebrew.el"
+;;;;;;  "leim/quail/ipa-praat.el" "leim/quail/latin-alt.el" 
"leim/quail/latin-ltx.el"
+;;;;;;  "leim/quail/latin-post.el" "leim/quail/latin-pre.el" 
"leim/quail/persian.el"
+;;;;;;  "leim/quail/programmer-dvorak.el" "leim/quail/py-punct.el"
+;;;;;;  "leim/quail/pypunct-b5.el" "leim/quail/quick-b5.el" 
"leim/quail/quick-cns.el"
+;;;;;;  "leim/quail/rfc1345.el" "leim/quail/sami.el" "leim/quail/sgml-input.el"
+;;;;;;  "leim/quail/slovak.el" "leim/quail/symbol-ksc.el" 
"leim/quail/tamil-dvorak.el"
+;;;;;;  "leim/quail/tsang-b5.el" "leim/quail/tsang-cns.el" 
"leim/quail/vntelex.el"
+;;;;;;  "leim/quail/vnvni.el" "leim/quail/welsh.el" "loadup.el" 
"mail/blessmail.el"
+;;;;;;  "mail/undigest.el" "menu-bar.el" "mh-e/mh-gnus.el" "minibuffer.el"
+;;;;;;  "mouse.el" "newcomment.el" "obarray.el" "org/ob-core.el"
+;;;;;;  "org/ob-lob.el" "org/ob-matlab.el" "org/ob-tangle.el" "org/ob.el"
+;;;;;;  "org/ol-bbdb.el" "org/ol-irc.el" "org/ol.el" "org/org-archive.el"
+;;;;;;  "org/org-attach.el" "org/org-clock.el" "org/org-colview.el"
+;;;;;;  "org/org-compat.el" "org/org-datetree.el" "org/org-duration.el"
+;;;;;;  "org/org-element.el" "org/org-feed.el" "org/org-footnote.el"
+;;;;;;  "org/org-goto.el" "org/org-id.el" "org/org-indent.el" 
"org/org-install.el"
+;;;;;;  "org/org-keys.el" "org/org-lint.el" "org/org-list.el" "org/org-macs.el"
 ;;;;;;  "org/org-mobile.el" "org/org-num.el" "org/org-plot.el" 
"org/org-refile.el"
 ;;;;;;  "org/org-table.el" "org/org-timer.el" "org/ox-ascii.el" 
"org/ox-beamer.el"
 ;;;;;;  "org/ox-html.el" "org/ox-icalendar.el" "org/ox-latex.el"
 ;;;;;;  "org/ox-md.el" "org/ox-odt.el" "org/ox-org.el" "org/ox-publish.el"
 ;;;;;;  "org/ox-texinfo.el" "org/ox.el" "paren.el" "progmodes/elisp-mode.el"
-;;;;;;  "progmodes/prog-mode.el" "ps-mule.el" "ps-print-loaddefs.el"
-;;;;;;  "register.el" "replace.el" "rfn-eshadow.el" "select.el" "simple.el"
-;;;;;;  "startup.el" "subdirs.el" "subr.el" "tab-bar.el" "textmodes/fill.el"
-;;;;;;  "textmodes/makeinfo.el" "textmodes/page.el" "textmodes/paragraphs.el"
-;;;;;;  "textmodes/reftex-auc.el" "textmodes/reftex-cite.el" 
"textmodes/reftex-dcr.el"
-;;;;;;  "textmodes/reftex-global.el" "textmodes/reftex-index.el"
-;;;;;;  "textmodes/reftex-loaddefs.el" "textmodes/reftex-parse.el"
-;;;;;;  "textmodes/reftex-ref.el" "textmodes/reftex-sel.el" 
"textmodes/reftex-toc.el"
-;;;;;;  "textmodes/texinfo-loaddefs.el" "textmodes/texnfo-upd.el"
+;;;;;;  "progmodes/prog-mode.el" "ps-mule.el" "register.el" "replace.el"
+;;;;;;  "rfn-eshadow.el" "select.el" "simple.el" "startup.el" "subdirs.el"
+;;;;;;  "subr.el" "tab-bar.el" "textmodes/fill.el" "textmodes/makeinfo.el"
+;;;;;;  "textmodes/page.el" "textmodes/paragraphs.el" "textmodes/reftex-auc.el"
+;;;;;;  "textmodes/reftex-cite.el" "textmodes/reftex-dcr.el" 
"textmodes/reftex-global.el"
+;;;;;;  "textmodes/reftex-index.el" "textmodes/reftex-parse.el" 
"textmodes/reftex-ref.el"
+;;;;;;  "textmodes/reftex-sel.el" "textmodes/reftex-toc.el" 
"textmodes/texnfo-upd.el"
 ;;;;;;  "textmodes/text-mode.el" "uniquify.el" "vc/ediff-hook.el"
 ;;;;;;  "vc/vc-hooks.el" "version.el" "widget.el" "window.el") (0
 ;;;;;;  0 0 0))
diff --git a/lisp/leim/quail/arabic.el b/lisp/leim/quail/arabic.el
index e5bd62b909..8d13538ce9 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 d12ae6cddf..0ee437e027 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 264a9b479b..2aa8ae78fe 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 7402b81a8c..a6ec937cdc 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2022 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 689f738f5e..2674b5a6aa 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 3654aca192..9f85bc1823 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2022 Free Software Foundation, Inc.
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 ;;   2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/lisp/leim/quail/czech.el b/lisp/leim/quail/czech.el
index 78b5011722..257bf5a929 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Milan Zamazal <pdm@zamazal.org>
 ;; Maintainer: Pavel Janík <Pavel@Janik.cz>
diff --git a/lisp/leim/quail/georgian.el b/lisp/leim/quail/georgian.el
index 2389d8138a..58b0ee7bcd 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 89ebd44747..4d0e468d5d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 c03e86b33c..0ef5b2d5c7 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
 
 ;; Author: Jihyun Cho <jihyun.jo@gmail.com>
 ;; Keywords: multilingual, input method, Korean, Hangul
@@ -429,7 +429,7 @@ When a Korean input method is off, convert the following 
hangul character."
            (hangul3-input-method-jong char))
           (t
            (setq hangul-queue (make-vector 6 0))
-           (insert (decode-char 'ucs char))
+           (insert char)
            (move-overlay quail-overlay (point) (point))))))
 
 (defun hangul3-input-method (key)
@@ -476,7 +476,7 @@ When a Korean input method is off, convert the following 
hangul character."
            (hangul3-input-method-jong char))
           (t
            (setq hangul-queue (make-vector 6 0))
-           (insert (decode-char 'ucs char))
+           (insert char)
            (move-overlay quail-overlay (point) (point))))))
 
 (defun hangul390-input-method (key)
diff --git a/lisp/leim/quail/hanja.el b/lisp/leim/quail/hanja.el
index 7095bcf38a..e3db65b84b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2022 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 080ba0e0fd..50e5df3018 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1999, 2001-2022 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 251b18c988..23204c0cd3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
 
 ;; Author: KAWABATA, Taichi <kawabata@m17n.org>
 
diff --git a/lisp/leim/quail/ipa-praat.el b/lisp/leim/quail/ipa-praat.el
index 1a95395fd7..3f0bd9f17c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 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 ba6ea93842..1eb2255f6c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 6a2bcdc9ed..df080fc0e8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 0db952b67c..10e2050d08 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2022 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 2146304f15..1dfeb79c17 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 0e1afba1a3..acb3ef8ede 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2022 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 3492de5fba..b6a26e0b2c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2022 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 68eaeb58ec..a926ebec42 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2022 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/persian.el b/lisp/leim/quail/persian.el
index d058cfa61c..61428c94f0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 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/programmer-dvorak.el 
b/lisp/leim/quail/programmer-dvorak.el
index 9e1e23c04b..d8260f8982 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 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 2a61795a13..8a0b32c330 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 a07208294f..e33d52592d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 0f0bae9eca..13ae6590c9 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 68add78e29..720f2ebd7f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 aa35bb0574..6468b117fc 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2022 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 53780cfd4a..acde11d02a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2022 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 0583d64c2b..042465697a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2022 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 b2d48afa0a..08e5b1e05a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 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 33cc6f5965..ca44f7022d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2022 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 bfe4ce6f12..36d8e6a840 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 22d23d4747..c48f947fcd 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 57e0dfd820..52c8222b25 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 f521d1464e..e02b1120ad 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <fx@gnu.org>
 ;; Keywords: i18n
diff --git a/lisp/linum.el b/lisp/linum.el
index 1e029e508e..e121618b69 100644
--- a/lisp/linum.el
+++ b/lisp/linum.el
@@ -1,6 +1,6 @@
 ;;; linum.el --- display line numbers in the left margin -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 2008-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
 
 ;; Author: Markus Triska <markus.triska@gmx.at>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/loadhist.el b/lisp/loadhist.el
index 4a7946a212..48058f4053 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1998, 2000-2022 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 ed1570e778..1be73a2090 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-2021 Free Software
+;; Copyright (C) 1985-1986, 1992, 1994, 2001-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
@@ -340,6 +340,13 @@
         (load "international/mule-util")
         (load "international/ucs-normalize")
         (load "term/ns-win"))))
+(if (featurep 'pgtk)
+    (progn
+      (load "term/common-win")
+      ;; Don't load ucs-normalize.el unless uni-*.el files were
+      ;; already produced, because it needs uni-*.el files that might
+      ;; not be built early enough during bootstrap.
+      (load "term/pgtk-win")))
 (if (fboundp 'x-create-frame)
     ;; Do it after loading term/foo-win.el since the value of the
     ;; mouse-wheel-*-event vars depends on those files being loaded or not.
@@ -555,7 +562,9 @@ lost after dumping")))
                    (lexical-binding nil))
                (if (member tmp-dump-mode '("pdump" "pbootstrap"))
                    (dump-emacs-portable (expand-file-name output 
invocation-directory))
-                 (dump-emacs output "temacs")
+                 (dump-emacs output (if (eq system-type 'ms-dos)
+                                        "temacs.exe"
+                                      "temacs"))
                  (message "%d pure bytes used" pure-bytes-used))
                (setq success t))
           (unless success
diff --git a/lisp/locate.el b/lisp/locate.el
index 6190fc6302..95b66f275a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1998, 2001-2022 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 29a0fd8d72..01617ef912 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-2021 Free Software
+;; Copyright (C) 1985, 1988, 1992, 1994, 2001-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/ls-lisp.el b/lisp/ls-lisp.el
index eea8089daa..e7118a2a37 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 1994, 2000-2022 Free Software Foundation, Inc.
 
 ;; Author: Sebastian Kremer <sk@thp.uni-koeln.de>
 ;; Modified by: Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>
@@ -337,18 +337,7 @@ are also supported; unsupported long options are silently 
ignored."
                 (ls-lisp-insert-directory
                  file switches (ls-lisp-time-index switches)
                  nil full-directory-p))
-            (signal (car err) (cdr err)))))
-       ;; Try to insert the amount of free space.
-       (save-excursion
-         (goto-char (point-min))
-         ;; First find the line to put it on.
-         (when (re-search-forward "^total" nil t)
-           (let ((available (get-free-disk-space orig-file)))
-             (when available
-               ;; Replace "total" with "total used", to avoid confusion.
-               (replace-match "total used in directory")
-               (end-of-line)
-               (insert " available " available)))))))))
+            (signal (car err) (cdr err)))))))))
 (advice-add 'insert-directory :around #'ls-lisp--insert-directory)
 
 (defun ls-lisp-insert-directory
diff --git a/lisp/macros.el b/lisp/macros.el
index 89e38abab2..4cb4e98d3f 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-2021 Free Software
+;; Copyright (C) 1985-1987, 1992, 1994-1995, 2001-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/mail/binhex.el b/lisp/mail/binhex.el
index af327442c2..ad6ce19a95 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 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 23fddfd167..f7cebd5595 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 2001-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: internal
diff --git a/lisp/mail/emacsbug.el b/lisp/mail/emacsbug.el
index 7c3f6ba5e6..f5559e39f6 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, 1994, 1997-1998, 2000-2021 Free Software
+;; Copyright (C) 1985, 1994, 1997-1998, 2000-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Author: K. Shane Hartman
diff --git a/lisp/mail/feedmail.el b/lisp/mail/feedmail.el
index fe686cb6f8..32edc29261 100644
--- a/lisp/mail/feedmail.el
+++ b/lisp/mail/feedmail.el
@@ -2336,19 +2336,14 @@ mapped to mostly alphanumerics for safety."
 
 ;; from a similar function in mail-utils.el
 (defun feedmail-rfc822-time-zone (time)
+  (declare (obsolete format-time-string "29.1"))
   (feedmail-say-debug ">in-> feedmail-rfc822-time-zone %s" time)
-  (let* ((sec (or (car (current-time-zone time)) 0))
-        (absmin (/ (abs sec) 60)))
-    (format "%c%02d%02d" (if (< sec 0) ?- ?+) (/ absmin 60) (% absmin 60))))
+  (format-time-string "%z" time))
 
 (defun feedmail-rfc822-date (arg-time)
   (feedmail-say-debug ">in-> feedmail-rfc822-date %s" arg-time)
-  (let ((time (or arg-time (current-time)))
-       (system-time-locale "C"))
-    (concat
-     (format-time-string "%a, %e %b %Y %T " time)
-     (feedmail-rfc822-time-zone time)
-     )))
+  (let ((system-time-locale "C"))
+    (format-time-string "%a, %e %b %Y %T %z" arg-time)))
 
 (defun feedmail-send-it-immediately-wrapper ()
   "Wrapper to catch skip-me-i."
@@ -2847,10 +2842,9 @@ probably not appropriate for you."
     (if (and (not feedmail-queue-use-send-time-for-message-id) maybe-file)
        (setq date-time (file-attribute-modification-time
                         (file-attributes maybe-file))))
-    (format "<%d-%s%s%s>"
+    (format "<%d-%s%s>"
            (mod (random) 10000)
-           (format-time-string "%a%d%b%Y%H%M%S" date-time)
-           (feedmail-rfc822-time-zone date-time)
+           (format-time-string "%a%d%b%Y%H%M%S%z" date-time)
            end-stuff))
   )
 
diff --git a/lisp/mail/flow-fill.el b/lisp/mail/flow-fill.el
index 5319ab994c..4802e2c418 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 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 ef040ca90b..a985a21255 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2000-2022 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 b4889eec46..b343a017e3 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-2005, 2007-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2005, 2007-2022 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.el b/lisp/mail/ietf-drums.el
index b1682cf78a..4a07959189 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 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 24d8311f64..50ba04ccc1 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-1994, 1997, 2001-2021 Free Software Foundation,
+;; Copyright (C) 1991-1994, 1997, 2001-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Joe Wells <jbw@cs.bu.edu>
diff --git a/lisp/mail/mail-hist.el b/lisp/mail/mail-hist.el
index 239b386ff8..e02d4218dd 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, 2001-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 2001-2022 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 212fadf382..23894e59b7 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 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 a9b5a4422d..573975c9fb 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 3eb3ccb93d..952970d07c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 2001-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: mail, news
@@ -368,19 +368,12 @@ matches may be returned from the message body."
   labels)
 
 (defun mail-rfc822-time-zone (time)
-  (let* ((sec (or (car (current-time-zone time)) 0))
-        (absmin (/ (abs sec) 60)))
-    (format "%c%02d%02d" (if (< sec 0) ?- ?+) (/ absmin 60) (% absmin 60))))
+  (declare (obsolete format-time-string "29.1"))
+  (format-time-string "%z" time))
 
 (defun mail-rfc822-date ()
-  (let* ((time (current-time))
-        (s (current-time-string time)))
-    (string-match "[^ ]+ +\\([^ ]+\\) +\\([^ ]+\\) \\([^ ]+\\) \\([^ ]+\\)" s)
-    (concat (substring s (match-beginning 2) (match-end 2)) " "
-           (substring s (match-beginning 1) (match-end 1)) " "
-           (substring s (match-beginning 4) (match-end 4)) " "
-           (substring s (match-beginning 3) (match-end 3)) " "
-           (mail-rfc822-time-zone time))))
+  (let ((system-time-locale "C"))
+    (format-time-string "%-d %b %Y %T %z")))
 
 (defun mail-mbox-from ()
   "Return an mbox \"From \" line for the current message.
diff --git a/lisp/mail/mailabbrev.el b/lisp/mail/mailabbrev.el
index 62d9b12bb2..e4061bd2f1 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-2021 Free
+;; Copyright (C) 1985-1987, 1992-1993, 1996-1997, 2000-2022 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 5a5488b2ec..ba7cf58d38 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-2021 Free Software
+;; Copyright (C) 1985, 1987, 1995-1997, 2001-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/mail/mailclient.el b/lisp/mail/mailclient.el
index e6833806d9..f0d312fd9a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2022 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 0443279be8..b813fa7825 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2001-2022 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 a36ccd98dc..2c3851f835 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2022 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 02a371a844..dc6fe6091c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 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 2983a11d74..324165a8ff 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1998, 2001-2022 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 c0672f18a9..d7cdc77e7f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 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 c442913d28..b3c45100f6 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 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 a398ce0e9c..0f64fad260 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 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 34fd7b5df4..54035b6698 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 ;; Keywords: mail
 
diff --git a/lisp/mail/rfc822.el b/lisp/mail/rfc822.el
index 2e97226662..525e6d5b58 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-2021 Free Software Foundation,
+;; Copyright (C) 1986-1987, 1990, 2001-2022 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 75a6c72369..193d6095e4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 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 9fbc9ba180..6b058d09f9 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-2021 Free Software
+;; Copyright (C) 1985-1988, 1993-1998, 2000-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
@@ -41,8 +41,6 @@
 (require 'rfc2047)
 (require 'auth-source)
 
-(require 'rmail-loaddefs)
-
 (declare-function compilation--message->loc "compile" (cl-x) t)
 (declare-function epa--find-coding-system-for-mime-charset "epa" 
(mime-charset))
 
@@ -3356,12 +3354,12 @@ removing prefixes such as Re:, Fwd: and so on and 
mailing list
 tags such as [tag]."
   (let ((subject (or (rmail-get-header "Subject" msgnum) ""))
        (regexp "\\`[ \t\n]*\\(\\(\\w\\{1,4\\}\u00a0*[::]\\|\\[[^]]+]\\)[ 
\t\n]+\\)*"))
+    (setq subject (rfc2047-decode-string subject))
     ;; Corporate mailing systems sometimes add `[External] :'; if that 
happened,
     ;; delete everything up thru there.  Empirically, that deletion makes
     ;; the Subject match the other messages in the thread.
     (if (string-match "\\[external][ \t\n]*:" subject)
         (setq subject (substring subject (match-end 0))))
-    (setq subject (rfc2047-decode-string subject))
     (setq subject (replace-regexp-in-string regexp "" subject))
     (replace-regexp-in-string "[ \t\n]+" " " subject)))
 
@@ -4125,10 +4123,8 @@ typically for purposes of moderating a list."
   "A regexp that matches the separator before the text of a failed message.")
 
 (defvar mail-mime-unsent-header "^Content-Type: message/rfc822 *$"
- "A regexp that matches the header of a MIME body part with a failed message.")
+  "A regexp that matches the header of a MIME body part with a failed 
message.")
 
-;; This is a cut-down version of rmail-clear-headers from Emacs 22.
-;; It doesn't have the same functionality, hence the name change.
 (defun rmail-delete-headers (regexp)
   "Delete any mail headers matching REGEXP.
 The message should be narrowed to just the headers."
@@ -4136,10 +4132,6 @@ The message should be narrowed to just the headers."
     (goto-char (point-min))
     (while (re-search-forward regexp nil t)
       (beginning-of-line)
-      ;; This code from Emacs 22 doesn't seem right, since r-n-h is
-      ;; just for display.
-;;;      (if (looking-at rmail-nonignored-headers)
-;;;      (forward-line 1)
       (delete-region (point)
                     (save-excursion
                       (if (re-search-forward "\n[^ \t]" nil t)
@@ -4497,10 +4489,7 @@ password."
                                    :max 1 :user user :host host
                                    :require '(:secret)))))
                 (if found
-                    (let ((secret (plist-get found :secret)))
-                      (if (functionp secret)
-                          (funcall secret)
-                        secret))
+                    (auth-info-password found)
                   (read-passwd (if imap
                                    "IMAP password: "
                                  "POP password: "))))))
diff --git a/lisp/mail/rmailedit.el b/lisp/mail/rmailedit.el
index fd24bdcecc..79bd02fd67 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1994, 2001-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: mail
@@ -484,8 +484,4 @@ HEADER-DIFF should be a return value from 
`rmail-edit-diff-headers'."
 
 (provide 'rmailedit)
 
-;; Local Variables:
-;; generated-autoload-file: "rmail-loaddefs.el"
-;; End:
-
 ;;; rmailedit.el ends here
diff --git a/lisp/mail/rmailkwd.el b/lisp/mail/rmailkwd.el
index d8fcc1c0a9..6535d68456 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-2021 Free Software Foundation,
+;; Copyright (C) 1985, 1988, 1994, 2001-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
@@ -188,8 +188,4 @@ With prefix argument N moves forward N messages with these 
labels."
 
 (provide 'rmailkwd)
 
-;; Local Variables:
-;; generated-autoload-file: "rmail-loaddefs.el"
-;; End:
-
 ;;; rmailkwd.el ends here
diff --git a/lisp/mail/rmailmm.el b/lisp/mail/rmailmm.el
index 66a1e9a4db..76a32724c0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
 
 ;; Author: Alexander Pohoyda
 ;;     Alex Schroeder
@@ -1569,8 +1569,4 @@ This is the usual value of 
`rmail-insert-mime-forwarded-message-function'."
 
 (provide 'rmailmm)
 
-;; Local Variables:
-;; generated-autoload-file: "rmail-loaddefs.el"
-;; End:
-
 ;;; rmailmm.el ends here
diff --git a/lisp/mail/rmailmsc.el b/lisp/mail/rmailmsc.el
index 673b2c5a7e..93463af46c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 2001-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: mail
@@ -54,8 +54,4 @@ This applies only to the current session."
       (setq rmail-inbox-list inbox-list)))
   (rmail-show-message-1 rmail-current-message))
 
-;; Local Variables:
-;; generated-autoload-file: "rmail-loaddefs.el"
-;; End:
-
 ;;; rmailmsc.el ends here
diff --git a/lisp/mail/rmailout.el b/lisp/mail/rmailout.el
index 1f5bb2d9f1..c1371308d4 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-2021 Free Software
+;; Copyright (C) 1985, 1987, 1993-1994, 2001-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/mail/rmailsort.el b/lisp/mail/rmailsort.el
index 1669c8cd7b..c203cf858e 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-2021 Free Software Foundation,
+;; Copyright (C) 1990, 1993-1994, 2001-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Masanobu UMEDA <umerin@mse.kyutech.ac.jp>
@@ -250,8 +250,4 @@ Numeric keys are sorted numerically, all others as strings."
 
 (provide 'rmailsort)
 
-;; Local Variables:
-;; generated-autoload-file: "rmail-loaddefs.el"
-;; End:
-
 ;;; rmailsort.el ends here
diff --git a/lisp/mail/rmailsum.el b/lisp/mail/rmailsum.el
index 9dd9573a9f..59c2e578d3 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-2021 Free Software Foundation,
+;; Copyright (C) 1985, 1993-1996, 2000-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
@@ -1480,13 +1480,11 @@ argument says to read a file name and use that file as 
the inbox."
 (declare-function rmail-output-read-file-name "rmailout" ())
 (declare-function mail-send-and-exit "sendmail" (&optional arg))
 
-(defvar rmail-summary-edit-map nil)
-(if rmail-summary-edit-map
-    nil
-  (setq rmail-summary-edit-map
-       (nconc (make-sparse-keymap) text-mode-map))
-  (define-key rmail-summary-edit-map "\C-c\C-c" 'rmail-cease-edit)
-  (define-key rmail-summary-edit-map "\C-c\C-]" 'rmail-abort-edit))
+(defvar rmail-summary-edit-map
+  (let ((map (nconc (make-sparse-keymap) text-mode-map)))
+    (define-key map "\C-c\C-c" #'rmail-cease-edit)
+    (define-key map "\C-c\C-]" #'rmail-abort-edit)
+    map))
 
 (defun rmail-summary-edit-current-message ()
   "Edit the contents of this message."
@@ -1879,8 +1877,4 @@ the summary is only showing a subset of messages."
 
 (provide 'rmailsum)
 
-;; Local Variables:
-;; generated-autoload-file: "rmail-loaddefs.el"
-;; End:
-
 ;;; rmailsum.el ends here
diff --git a/lisp/mail/sendmail.el b/lisp/mail/sendmail.el
index d0aff093df..76c3baf472 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-2021 Free Software
+;; Copyright (C) 1985-1986, 1992-1996, 1998, 2000-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
@@ -1391,8 +1391,7 @@ just append to the file, in Babyl format if necessary."
   (unless (markerp header-end)
     (error "Value of `header-end' must be a marker"))
   (let (fcc-list
-       (mailbuf (current-buffer))
-       (time (current-time)))
+       (mailbuf (current-buffer)))
     (save-excursion
       (goto-char (point-min))
       (let ((case-fold-search t))
@@ -1408,14 +1407,11 @@ just append to the file, in Babyl format if necessary."
       (with-temp-buffer
        ;; This initial newline is not written out if we create a new
        ;; file (see below).
-       (insert "\nFrom " (user-login-name) " " (current-time-string time) "\n")
-       ;; Insert the time zone before the year.
-       (forward-char -1)
-       (forward-word-strictly -1)
        (require 'mail-utils)
-       (insert (mail-rfc822-time-zone time) " ")
-       (goto-char (point-max))
-       (insert "Date: " (message-make-date) "\n")
+       (insert "\nFrom " (user-login-name) " "
+               (let ((system-time-locale "C"))
+                 (format-time-string "%a %b %e %T %z %Y"))
+               "\nDate: " (message-make-date) "\n")
        (insert-buffer-substring mailbuf)
        ;; Make sure messages are separated.
        (goto-char (point-max))
diff --git a/lisp/mail/smtpmail.el b/lisp/mail/smtpmail.el
index bd8aa611e9..88e55e968c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1996, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Tomoji Kagatani <kagatani@rbc.ncl.omron.co.jp>
 ;; Maintainer: emacs-devel@gnu.org
@@ -554,11 +554,9 @@ for `smtpmail-try-auth-method'.")
                      :create ask-for-password)))
          (mech (or (plist-get auth-info :smtp-auth) (car mechs)))
          (user (plist-get auth-info :user))
-         (password (plist-get auth-info :secret))
+         (password (auth-info-password auth-info))
         (save-function (and ask-for-password
                             (plist-get auth-info :save-function))))
-    (when (functionp password)
-      (setq password (funcall password)))
     (when (and user
               (not password))
       ;; The user has stored the user name, but not the password, so
@@ -573,9 +571,7 @@ for `smtpmail-try-auth-method'.")
              :user smtpmail-smtp-user
              :require '(:user :secret)
              :create t))
-           password (plist-get auth-info :secret)))
-    (when (functionp password)
-      (setq password (funcall password)))
+           password (auth-info-password auth-info)))
     (let ((result (catch 'done
                     (if (and mech user password)
                        (smtpmail-try-auth-method process mech user password)
diff --git a/lisp/mail/supercite.el b/lisp/mail/supercite.el
index b3080ac416..5dc5ee38ff 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, 1997, 2001-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1997, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: 1993 Barry A. Warsaw <bwarsaw@python.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/mail/uce.el b/lisp/mail/uce.el
index 4347ff1402..2672cfca1f 100644
--- a/lisp/mail/uce.el
+++ b/lisp/mail/uce.el
@@ -1,6 +1,6 @@
 ;;; uce.el --- facilitate reply to unsolicited commercial email  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1996, 1998, 2000-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1998, 2000-2022 Free Software Foundation, Inc.
 
 ;; Author: stanislav shalunov <shalunov@mccme.ru>
 ;; Created: 10 Dec 1996
diff --git a/lisp/mail/undigest.el b/lisp/mail/undigest.el
index 0760a47729..03e77a83ce 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-2021 Free Software
+;; Copyright (C) 1985-1986, 1994, 1996, 2001-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/mail/unrmail.el b/lisp/mail/unrmail.el
index 5b1abd54c6..8ce5afa962 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 2001-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: mail
diff --git a/lisp/mail/uudecode.el b/lisp/mail/uudecode.el
index 026356efe9..1c6bfe157d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 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 0ab6d85da8..5cc987eccd 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
 
 ;; Author: Jesper Harder <harder@ifa.au.dk>
 ;; Keywords: yenc news
diff --git a/lisp/makesum.el b/lisp/makesum.el
index a7e88dbaa2..4084358ca9 100644
--- a/lisp/makesum.el
+++ b/lisp/makesum.el
@@ -1,6 +1,6 @@
 ;;; makesum.el --- generate key binding summary for Emacs  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 1985, 2001-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 2001-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: help
diff --git a/lisp/man.el b/lisp/man.el
index 2bde1fc7fb..adf244a11a 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-2021 Free Software
+;; Copyright (C) 1993-1994, 1996-1997, 2001-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Barry A. Warsaw <bwarsaw@cen.com>
@@ -1334,7 +1334,7 @@ default type, `Man-xref-man-page' is used for the 
buttons."
 
 (defun Man-highlight-references0 (start-section regexp button-pos target type)
   ;; Based on `Man-build-references-alist'
-  (when (or (null start-section)        ;; Search regardless of sections.
+  (when (or (null start-section) ;; Search regardless of sections.
             ;; Section header is in this chunk.
             (Man-find-section start-section))
     (let ((end (if start-section
@@ -1347,18 +1347,24 @@ default type, `Man-xref-man-page' is used for the 
buttons."
                 (goto-char (point-min))
                 nil)))
       (while (re-search-forward regexp end t)
-       ;; An overlay button is preferable because the underlying text
-       ;; may have text property highlights (Bug#7881).
-       (make-button
-        (match-beginning button-pos)
-        (match-end button-pos)
-        'type type
-        'Man-target-string (cond
-                            ((numberp target)
-                             (match-string target))
-                            ((functionp target)
-                             target)
-                            (t nil)))))))
+        (let ((b (match-beginning button-pos))
+              (e (match-end button-pos))
+              (match (match-string button-pos)))
+          ;; Some lists of references end with ", and ...".  Chop the
+          ;; "and" bit off before making a button.
+          (when (string-match "\\`and +" match)
+            (setq b (+ b (- (match-end 0) (match-beginning 0)))))
+         ;; An overlay button is preferable because the underlying text
+         ;; may have text property highlights (Bug#7881).
+         (make-button
+          b e
+          'type type
+          'Man-target-string (cond
+                              ((numberp target)
+                               (match-string target))
+                              ((functionp target)
+                               target)
+                              (t nil))))))))
 
 (defun Man-cleanup-manpage (&optional interactive)
   "Remove overstriking and underlining from the current buffer.
diff --git a/lisp/master.el b/lisp/master.el
index 3dcee50c5e..da7f85d1a6 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 88003afb40..a4b6e2bffa 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
 ;;
 ;; Author: Miles Bader <miles@gnu.org>
 ;; Keywords: convenience
diff --git a/lisp/md4.el b/lisp/md4.el
index 771d9f9f0d..73e5d3474d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2004, 2007-2022 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 8c04e35a51..e0cf6c588c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1995, 2000-2022 Free Software Foundation, Inc.
 
 ;; Author: Richard M. Stallman
 ;; Maintainer: emacs-devel@gnu.org
@@ -2539,6 +2539,7 @@ See `menu-bar-mode' for more information."
 
 (declare-function x-menu-bar-open "term/x-win" (&optional frame))
 (declare-function w32-menu-bar-open "term/w32-win" (&optional frame))
+(declare-function pgtk-menu-bar-open "term/pgtk-win" (&optional frame))
 (declare-function haiku-menu-bar-open "haikumenu.c" (&optional frame))
 
 (defun lookup-key-ignore-too-long (map key)
@@ -2678,6 +2679,7 @@ If FRAME is nil or not given, use the selected frame."
      ((eq type 'x) (x-menu-bar-open frame))
      ((eq type 'w32) (w32-menu-bar-open frame))
      ((eq type 'haiku) (haiku-menu-bar-open frame))
+     ((eq type 'pgtk) (pgtk-menu-bar-open frame))
      ((and (null tty-menu-open-use-tmm)
           (not (zerop (or (frame-parameter nil 'menu-bar-lines) 0))))
       ;; Make sure the menu bar is up to date.  One situation where
diff --git a/lisp/mh-e/ChangeLog.1 b/lisp/mh-e/ChangeLog.1
index e87bb343cf..00e52df2bb 100644
--- a/lisp/mh-e/ChangeLog.1
+++ b/lisp/mh-e/ChangeLog.1
@@ -10218,7 +10218,7 @@
        it can fail if the user's MH environment is not setup correctly).
        I now set the value of mh-folder-unseen-seq-name at runtime when I
        first need it.  This should fix Debian bugs
-       http://bugs.debian.org/140232 and http://bugs.debian.org/140817
+       https://bugs.debian.org/140232 and https://bugs.debian.org/140817
 
 2002-03-25  Peter S Galbraith  <psg@debian.org>
 
@@ -11419,7 +11419,7 @@
        (dist): Leave release in current directory.
 
 
-  Copyright (C) 2003-2021 Free Software Foundation, Inc.
+  Copyright (C) 2003-2022 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 b6b16f7d79..5f2dd299f8 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-2021 Free Software Foundation, Inc.
+  Copyright (C) 2005-2022 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 25fff6a8e1..805b0820b0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004, 2006-2022 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 8087df97c9..f39caac893 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1997, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Peter S. Galbraith <psg@debian.org>
 ;; Maintainer: Bill Wohler <wohler@newt.com>
@@ -67,8 +67,7 @@ Return t if any file listed in the Aliasfile MH profile 
component has
 been modified since the timestamp.
 If ARG is non-nil, set timestamp with the current time."
   (if arg
-      (let ((time (current-time)))
-        (setq mh-alias-tstamp (list (nth 0 time) (nth 1 time))))
+      (setq mh-alias-tstamp (current-time))
     (let ((stamp))
       (car (memq t (mapcar
                     (lambda (file)
diff --git a/lisp/mh-e/mh-buffers.el b/lisp/mh-e/mh-buffers.el
index ef21fdb2f9..f21b57663b 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-2021 Free Software Foundation,
+;; Copyright (C) 1993, 1995, 1997, 2000-2022 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 130d3784dd..a9f6274e9d 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-2021 Free Software Foundation,
+;; Copyright (C) 1993, 1995, 1997, 2000-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Bill Wohler <wohler@newt.com>
@@ -624,6 +624,8 @@ See also `mh-compose-forward-as-mime-flag',
 (defun mh-forwarded-letter-subject (from subject)
   "Return a Subject suitable for a forwarded message.
 Original message has headers FROM and SUBJECT."
+  ;; Join continued lines.
+  (setq from (replace-regexp-in-string "\\s *\n\\s +" " " from))
   (let ((addr-start (string-search "<" from))
         (comment (string-search "(" from)))
     (cond ((and addr-start (> addr-start 0))
diff --git a/lisp/mh-e/mh-compat.el b/lisp/mh-e/mh-compat.el
index 23dc48a574..7a09429e4e 100644
--- a/lisp/mh-e/mh-compat.el
+++ b/lisp/mh-e/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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
 
 ;; Author: Bill Wohler <wohler@newt.com>
 ;; Keywords: mail
diff --git a/lisp/mh-e/mh-e.el b/lisp/mh-e/mh-e.el
index 4e1ca2897b..872f0d79d2 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-2021 Free
+;; Copyright (C) 1985-1988, 1990, 1992-1995, 1997, 1999-2022 Free
 ;; Software Foundation, Inc.
 
 ;; Author: Bill Wohler <wohler@newt.com>
@@ -1607,7 +1607,7 @@ on the \"INS\" button. Enter a \"Spool File\" of 
\"~/mail/mh-e\", a
 \"Folder\" of \"mh-e\", and a \"Key Binding\" of \"m\".
 
 You can use \"xbuffy\" to automate the incorporation of this mail
-using the Emacs 22 command \"emacsclient\" as follows:
+using \"emacsclient\" as follows:
 
     box ~/mail/mh-e
         title mh-e
diff --git a/lisp/mh-e/mh-folder.el b/lisp/mh-e/mh-folder.el
index 132ac33d26..09df0465ed 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2003, 2005-2022 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 0c73aae0d7..ef0a76b9a4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1995, 2001-2022 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 0e1bde71f2..c341b09683 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2004, 2006-2022 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 994ab71391..43eaeb7aa0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 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 83cfe4f99f..2c29ec3223 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2004, 2006-2022 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 2097bcbe1e..1f773b878a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2022 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 ebe94a7af8..4e3e101231 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-2021 Free Software Foundation,
+;; Copyright (C) 1993, 1995, 1997, 2000-2022 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 a00252284a..a2ea761013 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2003, 2006-2022 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 714bf029bb..98a20b7bb4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1995, 2001-2022 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 2074ff6f8f..2eec8d9160 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2022 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 9ac251e8b7..06381a2e0e 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-2021 Free Software Foundation,
+;; Copyright (C) 1993, 1995, 1997, 2000-2022 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 8012e624f1..c5519eba0a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1995, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Indexed search by Satyaki Das <satyaki@theforce.stanford.edu>
 ;; Maintainer: Bill Wohler <wohler@newt.com>
diff --git a/lisp/mh-e/mh-seq.el b/lisp/mh-e/mh-seq.el
index 077e289c01..a95c7c03d1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1995, 2001-2022 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 16489bf017..cc76b8d7e6 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-2021 Free Software Foundation,
+;; Copyright (C) 1993, 1995, 1997, 2000-2022 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 d9909a034d..a7e9c9bd67 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 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 1be2185ecd..139e9b74cb 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2004, 2006-2022 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 d451ae34d2..17df075cfa 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2003, 2005-2022 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 b75025d6a4..d7a92be5b5 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-2021 Free Software Foundation,
+;; Copyright (C) 1993, 1995, 1997, 2000-2022 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 8350f3d0fb..b144c58d69 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2003, 2005-2022 Free Software Foundation, Inc.
 
 ;; Author: Bill Wohler <wohler@newt.com>
 ;; Keywords: mail
diff --git a/lisp/midnight.el b/lisp/midnight.el
index b3adbf0017..3e309a5c88 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Sam Steingold <sds@gnu.org>
 ;; Created: 1998-05-18
@@ -159,7 +159,7 @@ the current date/time, buffer name, how many seconds ago it 
was
 displayed (can be nil if the buffer was never displayed) and its
 lifetime, i.e., its \"age\" when it will be purged."
   (interactive)
-  (let ((tm (current-time)) bts (ts (format-time-string "%Y-%m-%d %T"))
+  (let* ((tm (current-time)) bts (ts (format-time-string "%Y-%m-%d %T" tm))
         delay cbld bn)
     (dolist (buf (buffer-list))
       (when (buffer-live-p buf)
diff --git a/lisp/minibuf-eldef.el b/lisp/minibuf-eldef.el
index f67ec353c8..3f04a3e921 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
 ;;
 ;; Author: Miles Bader <miles@gnu.org>
 ;; Keywords: convenience
diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el
index c2a6b01fc8..ab760a42d1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Package: emacs
@@ -283,8 +283,9 @@ the form (concat S2 S)."
          ((eq (car-safe action) 'boundaries)
           (let ((beg (or (and (eq (car-safe res) 'boundaries) (cadr res)) 0)))
             `(boundaries
-              ,(max (length s1)
-                    (+ beg (- (length s1) (length s2))))
+              ,(min (length string)
+                    (max (length s1)
+                         (+ beg (- (length s1) (length s2)))))
               . ,(and (eq (car-safe res) 'boundaries) (cddr res)))))
          ((stringp res)
           (if (string-prefix-p s2 res completion-ignore-case)
@@ -899,7 +900,7 @@ If the value is `lazy', the *Completions* buffer is only 
displayed after
 the second failed attempt to complete."
   :type '(choice (const nil) (const t) (const lazy)))
 
-(defconst completion-styles-alist
+(defvar completion-styles-alist
   '((emacs21
      completion-emacs21-try-completion completion-emacs21-all-completions
      "Simple prefix-based completion.
@@ -1075,9 +1076,10 @@ This overrides the defaults specified in 
`completion-category-defaults'."
          (result-and-style
           (completion--some
            (lambda (style)
-             (let ((probe (funcall (nth n (assq style
-                                                completion-styles-alist))
-                                   string table pred point)))
+             (let ((probe (funcall
+                           (or (nth n (assq style completion-styles-alist))
+                               (error "Invalid completion style %s" style))
+                           string table pred point)))
                (and probe (cons probe style))))
            (completion--styles md)))
          (adjust-fn (get (cdr result-and-style) 'completion--adjust-metadata)))
@@ -1378,14 +1380,18 @@ scroll the window of possible completions."
    ;; and this command is repeated, scroll that window.
    ((and (window-live-p minibuffer-scroll-window)
          (eq t (frame-visible-p (window-frame minibuffer-scroll-window))))
-    (let ((window minibuffer-scroll-window))
+    (let ((window minibuffer-scroll-window)
+          (reverse (equal (this-command-keys) [backtab])))
       (with-current-buffer (window-buffer window)
-        (if (pos-visible-in-window-p (point-max) window)
-            ;; If end is in view, scroll up to the beginning.
-            (set-window-start window (point-min) nil)
+        (if (pos-visible-in-window-p (if reverse (point-min) (point-max)) 
window)
+            ;; If end or beginning is in view, scroll up to the
+            ;; beginning or end respectively.
+            (if reverse
+                (set-window-point window (point-max))
+              (set-window-start window (point-min) nil))
           ;; Else scroll down one screen.
           (with-selected-window window
-           (scroll-up)))
+            (if reverse (scroll-down) (scroll-up))))
         nil)))
    ;; If we're cycling, keep on cycling.
    ((and completion-cycling completion-all-sorted-completions)
@@ -2443,14 +2449,12 @@ Also respects the obsolete wrapper hook 
`completion-in-region-functions'.
         (completion-in-region-mode 1))
       (completion--in-region-1 start end))))
 
-(defvar completion-in-region-mode-map
-  (let ((map (make-sparse-keymap)))
-    ;; FIXME: Only works if completion-in-region-mode was activated via
-    ;; completion-at-point called directly.
-    (define-key map "\M-?" 'completion-help-at-point)
-    (define-key map "\t" 'completion-at-point)
-    map)
-  "Keymap activated during `completion-in-region'.")
+(defvar-keymap completion-in-region-mode-map
+  :doc "Keymap activated during `completion-in-region'."
+  ;; FIXME: Only works if completion-in-region-mode was activated via
+  ;; completion-at-point called directly.
+  "M-?" #'completion-help-at-point
+  "TAB" #'completion-at-point)
 
 ;; It is difficult to know when to exit completion-in-region-mode (i.e. hide
 ;; the *Completions*).  Here's how previous packages did it:
@@ -2646,48 +2650,41 @@ The completion method is determined by 
`completion-at-point-functions'."
   (define-key map "\n" 'exit-minibuffer)
   (define-key map "\r" 'exit-minibuffer))
 
-(defvar minibuffer-local-completion-map
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map minibuffer-local-map)
-    (define-key map "\t" 'minibuffer-complete)
-    ;; M-TAB is already abused for many other purposes, so we should find
-    ;; another binding for it.
-    ;; (define-key map "\e\t" 'minibuffer-force-complete)
-    (define-key map " " 'minibuffer-complete-word)
-    (define-key map "?" 'minibuffer-completion-help)
-    (define-key map [prior] 'switch-to-completions)
-    (define-key map "\M-v"  'switch-to-completions)
-    (define-key map "\M-g\M-c"  'switch-to-completions)
-    map)
-  "Local keymap for minibuffer input with completion.")
-
-(defvar minibuffer-local-must-match-map
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map minibuffer-local-completion-map)
-    (define-key map "\r" 'minibuffer-complete-and-exit)
-    (define-key map "\n" 'minibuffer-complete-and-exit)
-    map)
-  "Local keymap for minibuffer input with completion, for exact match.")
-
-(defvar minibuffer-local-filename-completion-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map " " nil)
-    map)
-  "Local keymap for minibuffer input with completion for filenames.
+(defvar-keymap minibuffer-local-completion-map
+  :doc "Local keymap for minibuffer input with completion."
+  :parent minibuffer-local-map
+  "TAB"       #'minibuffer-complete
+  "<backtab>" #'minibuffer-complete
+  ;; M-TAB is already abused for many other purposes, so we should find
+  ;; another binding for it.
+  ;; "M-TAB"  #'minibuffer-force-complete
+  "SPC"       #'minibuffer-complete-word
+  "?"         #'minibuffer-completion-help
+  "<prior>"   #'switch-to-completions
+  "M-v"       #'switch-to-completions
+  "M-g M-c"   #'switch-to-completions)
+
+(defvar-keymap minibuffer-local-must-match-map
+  :doc "Local keymap for minibuffer input with completion, for exact match."
+  :parent minibuffer-local-completion-map
+  "RET" #'minibuffer-complete-and-exit
+  "C-j" #'minibuffer-complete-and-exit)
+
+(defvar-keymap minibuffer-local-filename-completion-map
+  :doc "Local keymap for minibuffer input with completion for filenames.
 Gets combined either with `minibuffer-local-completion-map' or
-with `minibuffer-local-must-match-map'.")
+with `minibuffer-local-must-match-map'."
+  "SPC" nil)
 
 (defvar minibuffer-local-filename-must-match-map (make-sparse-keymap))
 (make-obsolete-variable 'minibuffer-local-filename-must-match-map nil "24.1")
 
-(defvar minibuffer-local-ns-map
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map minibuffer-local-map)
-    (define-key map " "  #'exit-minibuffer)
-    (define-key map "\t" #'exit-minibuffer)
-    (define-key map "?"  #'self-insert-and-exit)
-    map)
-  "Local keymap for the minibuffer when spaces are not allowed.")
+(defvar-keymap minibuffer-local-ns-map
+  :doc "Local keymap for the minibuffer when spaces are not allowed."
+  :parent minibuffer-local-map
+  "SPC" #'exit-minibuffer
+  "TAB" #'exit-minibuffer
+  "?"   #'self-insert-and-exit)
 
 (defun read-no-blanks-input (prompt &optional initial inherit-input-method)
   "Read a string from the terminal, not allowing blanks.
@@ -2708,24 +2705,23 @@ If `inhibit-interaction' is non-nil, this function will 
signal an
 
 ;;; Major modes for the minibuffer
 
-(defvar minibuffer-inactive-mode-map
-  (let ((map (make-keymap)))
-    (suppress-keymap map)
-    (define-key map "e" 'find-file-other-frame)
-    (define-key map "f" 'find-file-other-frame)
-    (define-key map "b" 'switch-to-buffer-other-frame)
-    (define-key map "i" 'info)
-    (define-key map "m" 'mail)
-    (define-key map "n" 'make-frame)
-    (define-key map [mouse-1] 'view-echo-area-messages)
-    ;; So the global down-mouse-1 binding doesn't clutter the execution of the
-    ;; above mouse-1 binding.
-    (define-key map [down-mouse-1] #'ignore)
-    map)
-  "Keymap for use in the minibuffer when it is not active.
+(defvar-keymap minibuffer-inactive-mode-map
+  :doc "Keymap for use in the minibuffer when it is not active.
 The non-mouse bindings in this keymap can only be used in minibuffer-only
 frames, since the minibuffer can normally not be selected when it is
-not active.")
+not active."
+  :full t
+  :suppress t
+  "e" #'find-file-other-frame
+  "f" #'find-file-other-frame
+  "b" #'switch-to-buffer-other-frame
+  "i" #'info
+  "m" #'mail
+  "n" #'make-frame
+  "<mouse-1>"      #'view-echo-area-messages
+  ;; So the global down-mouse-1 binding doesn't clutter the execution of the
+  ;; above mouse-1 binding.
+  "<down-mouse-1>" #'ignore)
 
 (define-derived-mode minibuffer-inactive-mode nil "InactiveMinibuffer"
   :abbrev-table nil          ;abbrev.el is not loaded yet during dump.
diff --git a/lisp/misc.el b/lisp/misc.el
index 39ec9497d7..d85f889ffd 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1989, 2001-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: convenience
diff --git a/lisp/misearch.el b/lisp/misearch.el
index 7f3e981bb0..9aef7c30a4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 38c85064f3..5c70c02578 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2001-2022 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 0cdba6b4d0..f515cc8aac 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1997, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: John Heidemann <johnh@ISI.EDU>
 ;; Keywords: mouse
diff --git a/lisp/mouse.el b/lisp/mouse.el
index 3ab9fbcdfe..1a76b9a0b6 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-1995, 1999-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1995, 1999-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: hardware, mouse
@@ -184,8 +184,8 @@ items `Turn Off' and `Help'."
                               "-" " " (format "%S" minor-mode))))
                     (turn-off menu-item "Turn off minor mode" ,mm-fun)
                     (help menu-item "Help for minor mode"
-                          (lambda () (interactive)
-                            (describe-function ',mm-fun)))))))
+                          ,(lambda () (interactive)
+                             (describe-function mm-fun)))))))
       (if menu
           (popup-menu menu)
         (message "No menu available")))))
@@ -271,7 +271,7 @@ not it is actually displayed."
     ;; FIXME: We have a problem here: we have to use the global/local/minor
     ;; so they're displayed in the expected order, but later on in the command
     ;; loop, they're actually looked up in the opposite order.
-    (apply 'append
+    (apply #'append
            global-menu
            local-menu
            minor-mode-menus)))
@@ -327,13 +327,31 @@ the function `context-menu-filter-function'."
                           (setq menu (funcall fun menu click))
                           nil)))
 
-    ;; Remove duplicate separators
-    (let ((l menu))
-      (while (consp l)
-        (when (and (equal (cdr-safe (car l)) menu-bar-separator)
-                   (equal (cdr-safe (cadr l)) menu-bar-separator))
-          (setcdr l (cddr l)))
-        (setq l (cdr l))))
+    ;; Remove duplicate separators as well as ones at the beginning or
+    ;; end of the menu.
+    (let ((l menu) (last-saw-separator t))
+      (while (and (consp l)
+                  (consp (cdr l)))
+        (if (equal (cdr-safe (cadr l)) menu-bar-separator)
+            (progn
+              ;; The next item is a separator.  Remove it if the last
+              ;; item we saw was a separator too.
+              (if last-saw-separator
+                  (setcdr l (cddr l))
+                ;; If we didn't delete this separator, update the last
+                ;; separator we saw to this one.
+                (setq last-saw-separator l
+                      l (cdr l))))
+          ;; If the next item is a cons cell, we found a non-separator
+          ;; item.  Don't remove the next separator we see.  We
+          ;; specifically check for cons cells to avoid treating the
+          ;; overall prompt string as a menu item.
+          (when (consp (cadr l))
+            (setq last-saw-separator nil))
+          (setq l (cdr l))))
+      ;; If the last item we saw was a separator, remove it.
+      (when (consp last-saw-separator)
+        (setcdr last-saw-separator (cddr last-saw-separator))))
 
     (when (functionp context-menu-filter-function)
       (setq menu (funcall context-menu-filter-function menu click)))
@@ -479,14 +497,15 @@ Some context functions add menu items below the 
separator."
       `(menu-item "All"
                   ,(lambda (e) (interactive "e") (mark-thing-at-mouse e 
'buffer))
                   :help "Mark the whole buffer for a subsequent cut/copy"))
-    (when (let* ((pos (posn-point (event-end click)))
-                 (char (when pos (char-after pos))))
-            (or (and char (eq (char-syntax char) ?\"))
-                (nth 3 (save-excursion (syntax-ppss pos)))))
-      (define-key-after submenu [mark-string]
-        `(menu-item "String"
-                    ,(lambda (e) (interactive "e") (mark-thing-at-mouse e 
'string))
-                    :help "Mark the string at click for a subsequent 
cut/copy")))
+    (with-current-buffer (window-buffer (posn-window (event-end click)))
+      (when (let* ((pos (posn-point (event-end click)))
+                   (char (when pos (char-after pos))))
+              (or (and char (eq (char-syntax char) ?\"))
+                  (nth 3 (save-excursion (syntax-ppss pos)))))
+        (define-key-after submenu [mark-string]
+          `(menu-item "String"
+                      ,(lambda (e) (interactive "e") (mark-thing-at-mouse e 
'string))
+                      :help "Mark the string at click for a subsequent 
cut/copy"))))
     (define-key-after submenu [mark-line]
       `(menu-item "Line"
                   ,(lambda (e) (interactive "e") (mark-thing-at-mouse e 'line))
@@ -513,8 +532,8 @@ Some context functions add menu items below the separator."
   menu)
 
 (defvar context-menu-entry
-  `(menu-item ,(purecopy "Context Menu") ignore
-              :filter (lambda (_) (context-menu-map)))
+  `(menu-item ,(purecopy "Context Menu") ,(make-sparse-keymap)
+              :filter ,(lambda (_) (context-menu-map)))
   "Menu item that creates the context menu and can be bound to a mouse key.")
 
 (defvar context-menu-mode-map
@@ -535,7 +554,7 @@ Some context functions add menu items below the separator."
 
 When Context Menu mode is enabled, clicking the mouse button down-mouse-3
 activates the menu whose contents depends on its surrounding context."
-  :global t :group 'mouse)
+  :global t)
 
 (defun context-menu-open ()
   "Start key navigation of the context menu.
@@ -547,7 +566,7 @@ This is the keyboard interface to \\[context-menu-map]."
         (call-interactively map)
       (popup-menu map (point)))))
 
-(global-set-key [S-f10] 'context-menu-open)
+(global-set-key [S-f10] #'context-menu-open)
 
 (defun mark-thing-at-mouse (click thing)
   "Activate the region around THING found near the mouse CLICK."
@@ -602,7 +621,7 @@ This command must be bound to a mouse click."
     (or (eq frame oframe)
        (set-mouse-position (selected-frame) (1- (frame-width)) 0))))
 
-(define-obsolete-function-alias 'mouse-tear-off-window 'tear-off-window "24.4")
+(define-obsolete-function-alias 'mouse-tear-off-window #'tear-off-window 
"24.4")
 (defun tear-off-window (click)
   "Delete the selected window, and create a new frame displaying its buffer."
   (interactive (list last-nonmenu-event))
@@ -678,7 +697,6 @@ must be one of the symbols `header', `mode', or `vertical'."
         ;; previously sampled position.  The difference of `position'
         ;; and `last-position' determines the size change of WINDOW.
         (last-position position)
-        (draggable t)
         posn-window growth dragged)
     ;; Decide on whether we are allowed to track at all and whose
     ;; window's edge we drag.
@@ -731,7 +749,7 @@ must be one of the symbols `header', `mode', or `vertical'."
                  (setq dragged t)
                  (adjust-window-trailing-edge window growth t t))
                (setq last-position position))
-              (draggable
+              (t
                ;; Drag bottom edge of `window'.
                (setq start (event-start event))
                ;; Set `posn-window' to the window where `event' was recorded.
@@ -1831,7 +1849,7 @@ If MODE is 2 then do the same for lines."
            event)))
     (setcar last new)
     (if (and (not (equal modifiers old-modifiers))
-            (key-binding (apply 'vector events)))
+            (key-binding (apply #'vector events)))
        t
       (setcar last event)
       nil)))
@@ -1885,12 +1903,12 @@ regardless of where you click."
   (setq mouse-selection-click-count 0)
   (yank arg))
 
-(defun mouse-yank-primary (click)
-  "Insert the primary selection at the position clicked on.
+(defun mouse-yank-primary (&optional event)
+  "Insert the primary selection,
 Move point to the end of the inserted text, and set mark at
 beginning.  If `mouse-yank-at-point' is non-nil, insert at point
-regardless of where you click."
-  (interactive "e")
+otherwise insert it at the position of EVENT."
+  (interactive (list last-nonmenu-event))
   ;; Give temporary modes such as isearch a chance to turn off.
   (run-hooks 'mouse-leave-buffer-hook)
   ;; Without this, confusing things happen upon e.g. inserting into
@@ -1898,7 +1916,7 @@ regardless of where you click."
   (when select-active-regions
     (let (select-active-regions)
       (deactivate-mark)))
-  (or mouse-yank-at-point (mouse-set-point click))
+  (or mouse-yank-at-point (mouse-set-point event))
   (let ((primary (gui-get-primary-selection)))
     (push-mark)
     (insert-for-yank primary)))
@@ -2038,11 +2056,11 @@ if `mouse-drag-copy-region' is non-nil)."
       (setq mouse-save-then-kill-posn click-pt)))))
 
 
-(global-set-key [M-mouse-1] 'mouse-start-secondary)
-(global-set-key [M-drag-mouse-1] 'mouse-set-secondary)
-(global-set-key [M-down-mouse-1] 'mouse-drag-secondary)
-(global-set-key [M-mouse-3] 'mouse-secondary-save-then-kill)
-(global-set-key [M-mouse-2] 'mouse-yank-secondary)
+(global-set-key [M-mouse-1] #'mouse-start-secondary)
+(global-set-key [M-drag-mouse-1] #'mouse-set-secondary)
+(global-set-key [M-down-mouse-1] #'mouse-drag-secondary)
+(global-set-key [M-mouse-3] #'mouse-secondary-save-then-kill)
+(global-set-key [M-mouse-2] #'mouse-yank-secondary)
 
 (defconst mouse-secondary-overlay
   (let ((ol (make-overlay (point-min) (point-min))))
@@ -3202,78 +3220,78 @@ is copied instead of being cut."
 
 ;;; Bindings for mouse commands.
 
-(global-set-key [down-mouse-1] 'mouse-drag-region)
-(global-set-key [mouse-1]      'mouse-set-point)
-(global-set-key [drag-mouse-1] 'mouse-set-region)
+(global-set-key [down-mouse-1] #'mouse-drag-region)
+(global-set-key [mouse-1]      #'mouse-set-point)
+(global-set-key [drag-mouse-1] #'mouse-set-region)
 
 (defun mouse--strip-first-event (_prompt)
   (substring (this-single-command-raw-keys) 1))
 
-(define-key function-key-map [left-fringe mouse-1] 'mouse--strip-first-event)
-(define-key function-key-map [right-fringe mouse-1] 'mouse--strip-first-event)
+(define-key function-key-map [left-fringe mouse-1] #'mouse--strip-first-event)
+(define-key function-key-map [right-fringe mouse-1] #'mouse--strip-first-event)
 
-(global-set-key [mouse-2]      'mouse-yank-primary)
+(global-set-key [mouse-2]      #'mouse-yank-primary)
 ;; Allow yanking also when the corresponding cursor is "in the fringe".
-(define-key function-key-map [right-fringe mouse-2] 'mouse--strip-first-event)
-(define-key function-key-map [left-fringe mouse-2] 'mouse--strip-first-event)
-(global-set-key [mouse-3]      'mouse-save-then-kill)
-(define-key function-key-map [right-fringe mouse-3] 'mouse--strip-first-event)
-(define-key function-key-map [left-fringe mouse-3] 'mouse--strip-first-event)
+(define-key function-key-map [right-fringe mouse-2] #'mouse--strip-first-event)
+(define-key function-key-map [left-fringe mouse-2] #'mouse--strip-first-event)
+(global-set-key [mouse-3]      #'mouse-save-then-kill)
+(define-key function-key-map [right-fringe mouse-3] #'mouse--strip-first-event)
+(define-key function-key-map [left-fringe mouse-3] #'mouse--strip-first-event)
 
 ;; By binding these to down-going events, we let the user use the up-going
 ;; event to make the selection, saving a click.
-(global-set-key [C-down-mouse-1] 'mouse-buffer-menu)
+(global-set-key [C-down-mouse-1] #'mouse-buffer-menu)
 (if (not (eq system-type 'ms-dos))
-    (global-set-key [S-down-mouse-1] 'mouse-appearance-menu))
+    (global-set-key [S-down-mouse-1] #'mouse-appearance-menu))
 ;; C-down-mouse-2 is bound in facemenu.el.
 (global-set-key [C-down-mouse-3]
   `(menu-item ,(purecopy "Menu Bar") ignore
-    :filter (lambda (_)
-              (if (zerop (or (frame-parameter nil 'menu-bar-lines) 0))
-                  (mouse-menu-bar-map)
-                (mouse-menu-major-mode-map)))))
+    :filter ,(lambda (_)
+               (if (zerop (or (frame-parameter nil 'menu-bar-lines) 0))
+                   (mouse-menu-bar-map)
+                 (mouse-menu-major-mode-map)))))
 
 ;; Binding mouse-1 to mouse-select-window when on mode-, header-, or
 ;; vertical-line prevents Emacs from signaling an error when the mouse
 ;; button is released after dragging these lines, on non-toolkit
 ;; versions.
-(global-set-key [header-line down-mouse-1] 'mouse-drag-header-line)
-(global-set-key [header-line mouse-1] 'mouse-select-window)
-(global-set-key [tab-line down-mouse-1] 'mouse-drag-tab-line)
-(global-set-key [tab-line mouse-1] 'mouse-select-window)
+(global-set-key [header-line down-mouse-1] #'mouse-drag-header-line)
+(global-set-key [header-line mouse-1] #'mouse-select-window)
+(global-set-key [tab-line down-mouse-1] #'mouse-drag-tab-line)
+(global-set-key [tab-line mouse-1] #'mouse-select-window)
 ;; (global-set-key [mode-line drag-mouse-1] 'mouse-select-window)
-(global-set-key [mode-line down-mouse-1] 'mouse-drag-mode-line)
-(global-set-key [mode-line mouse-1] 'mouse-select-window)
-(global-set-key [mode-line mouse-2] 'mouse-delete-other-windows)
-(global-set-key [mode-line mouse-3] 'mouse-delete-window)
-(global-set-key [mode-line C-mouse-2] 'mouse-split-window-horizontally)
-(global-set-key [vertical-scroll-bar C-mouse-2] 'mouse-split-window-vertically)
-(global-set-key [horizontal-scroll-bar C-mouse-2] 
'mouse-split-window-horizontally)
-(global-set-key [vertical-line down-mouse-1] 'mouse-drag-vertical-line)
-(global-set-key [vertical-line mouse-1] 'mouse-select-window)
-(global-set-key [vertical-line C-mouse-2] 'mouse-split-window-vertically)
-(global-set-key [right-divider down-mouse-1] 'mouse-drag-vertical-line)
-(global-set-key [right-divider mouse-1] 'ignore)
-(global-set-key [right-divider C-mouse-2] 'mouse-split-window-vertically)
-(global-set-key [bottom-divider down-mouse-1] 'mouse-drag-mode-line)
-(global-set-key [bottom-divider mouse-1] 'ignore)
-(global-set-key [bottom-divider C-mouse-2] 'mouse-split-window-horizontally)
-(global-set-key [left-edge down-mouse-1] 'mouse-drag-left-edge)
-(global-set-key [left-edge mouse-1] 'ignore)
-(global-set-key [top-left-corner down-mouse-1] 'mouse-drag-top-left-corner)
-(global-set-key [top-left-corner mouse-1] 'ignore)
-(global-set-key [top-edge down-mouse-1] 'mouse-drag-top-edge)
-(global-set-key [top-edge mouse-1] 'ignore)
-(global-set-key [top-right-corner down-mouse-1] 'mouse-drag-top-right-corner)
-(global-set-key [top-right-corner mouse-1] 'ignore)
-(global-set-key [right-edge down-mouse-1] 'mouse-drag-right-edge)
-(global-set-key [right-edge mouse-1] 'ignore)
-(global-set-key [bottom-right-corner down-mouse-1] 
'mouse-drag-bottom-right-corner)
-(global-set-key [bottom-right-corner mouse-1] 'ignore)
-(global-set-key [bottom-edge down-mouse-1] 'mouse-drag-bottom-edge)
-(global-set-key [bottom-edge mouse-1] 'ignore)
-(global-set-key [bottom-left-corner down-mouse-1] 
'mouse-drag-bottom-left-corner)
-(global-set-key [bottom-left-corner mouse-1] 'ignore)
+(global-set-key [mode-line down-mouse-1] #'mouse-drag-mode-line)
+(global-set-key [mode-line mouse-1] #'mouse-select-window)
+(global-set-key [mode-line mouse-2] #'mouse-delete-other-windows)
+(global-set-key [mode-line mouse-3] #'mouse-delete-window)
+(global-set-key [mode-line C-mouse-2] #'mouse-split-window-horizontally)
+(global-set-key [vertical-scroll-bar C-mouse-2] 
#'mouse-split-window-vertically)
+(global-set-key [horizontal-scroll-bar C-mouse-2] 
#'mouse-split-window-horizontally)
+(global-set-key [vertical-line down-mouse-1] #'mouse-drag-vertical-line)
+(global-set-key [vertical-line mouse-1] #'mouse-select-window)
+(global-set-key [vertical-line C-mouse-2] #'mouse-split-window-vertically)
+(global-set-key [right-divider down-mouse-1] #'mouse-drag-vertical-line)
+(global-set-key [right-divider mouse-1] #'ignore)
+(global-set-key [right-divider C-mouse-2] #'mouse-split-window-vertically)
+(global-set-key [bottom-divider down-mouse-1] #'mouse-drag-mode-line)
+(global-set-key [bottom-divider mouse-1] #'ignore)
+(global-set-key [bottom-divider C-mouse-2] #'mouse-split-window-horizontally)
+(global-set-key [left-edge down-mouse-1] #'mouse-drag-left-edge)
+(global-set-key [left-edge mouse-1] #'ignore)
+(global-set-key [top-left-corner down-mouse-1] #'mouse-drag-top-left-corner)
+(global-set-key [top-left-corner mouse-1] #'ignore)
+(global-set-key [top-edge down-mouse-1] #'mouse-drag-top-edge)
+(global-set-key [top-edge mouse-1] #'ignore)
+(global-set-key [top-right-corner down-mouse-1] #'mouse-drag-top-right-corner)
+(global-set-key [top-right-corner mouse-1] #'ignore)
+(global-set-key [right-edge down-mouse-1] #'mouse-drag-right-edge)
+(global-set-key [right-edge mouse-1] #'ignore)
+(global-set-key [bottom-right-corner down-mouse-1] 
#'mouse-drag-bottom-right-corner)
+(global-set-key [bottom-right-corner mouse-1] #'ignore)
+(global-set-key [bottom-edge down-mouse-1] #'mouse-drag-bottom-edge)
+(global-set-key [bottom-edge mouse-1] #'ignore)
+(global-set-key [bottom-left-corner down-mouse-1] 
#'mouse-drag-bottom-left-corner)
+(global-set-key [bottom-left-corner mouse-1] #'ignore)
 
 (provide 'mouse)
 
diff --git a/lisp/mpc.el b/lisp/mpc.el
index c47d4336e5..dc61ce78bd 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords: multimedia
diff --git a/lisp/msb.el b/lisp/msb.el
index 1f05e9db58..6e1d03ac27 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1995, 1997-2022 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 6a853a3521..55d3c7a5d8 100644
--- a/lisp/mwheel.el
+++ b/lisp/mwheel.el
@@ -1,6 +1,6 @@
 ;;; mwheel.el --- Mouse wheel support  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1998, 2000-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2000-2022 Free Software Foundation, Inc.
 ;; Keywords: mouse
 ;; Package: emacs
 
@@ -56,7 +56,7 @@
 
 (defcustom mouse-wheel-down-event
   (if (or (featurep 'w32-win) (featurep 'ns-win)
-          (featurep 'haiku-win))
+          (featurep 'haiku-win) (featurep 'pgtk-win))
       'wheel-up
     'mouse-4)
   "Event used for scrolling down."
@@ -65,7 +65,10 @@
   :set 'mouse-wheel-change-button)
 
 (defcustom mouse-wheel-down-alternate-event
-  (when (featurep 'xinput2) 'wheel-up)
+  (if (featurep 'xinput2)
+      'wheel-up
+    (unless (featurep 'x)
+      'mouse-4))
   "Alternative wheel down event to consider."
   :group 'mouse
   :type 'symbol
@@ -74,7 +77,7 @@
 
 (defcustom mouse-wheel-up-event
   (if (or (featurep 'w32-win) (featurep 'ns-win)
-          (featurep 'haiku-win))
+          (featurep 'haiku-win) (featurep 'pgtk-win))
       'wheel-down
     'mouse-5)
   "Event used for scrolling up."
@@ -83,7 +86,10 @@
   :set 'mouse-wheel-change-button)
 
 (defcustom mouse-wheel-up-alternate-event
-  (when (featurep 'xinput2) 'wheel-down)
+  (if (featurep 'xinput2)
+      'wheel-down
+    (unless (featurep 'x)
+      'mouse-5))
   "Alternative wheel up event to consider."
   :group 'mouse
   :type 'symbol
@@ -240,24 +246,30 @@ Also see `mouse-wheel-tilt-scroll'."
 
 (defvar mouse-wheel-left-event
   (if (or (featurep 'w32-win) (featurep 'ns-win)
-          (featurep 'haiku-win))
+          (featurep 'haiku-win) (featurep 'pgtk-win))
       'wheel-left
     'mouse-6)
   "Event used for scrolling left.")
 
 (defvar mouse-wheel-left-alternate-event
-  (when (featurep 'xinput2) 'wheel-left)
+  (if (featurep 'xinput2)
+      'wheel-left
+    (unless (featurep 'x)
+      'mouse-6))
   "Alternative wheel left event to consider.")
 
 (defvar mouse-wheel-right-event
   (if (or (featurep 'w32-win) (featurep 'ns-win)
-          (featurep 'haiku-win))
+          (featurep 'haiku-win) (featurep 'pgtk-win))
       'wheel-right
     'mouse-7)
   "Event used for scrolling right.")
 
 (defvar mouse-wheel-right-alternate-event
-  (when (featurep 'xinput2) 'wheel-right)
+  (if (featurep 'xinput2)
+      'wheel-right
+    (unless (featurep 'x)
+      'mouse-7))
   "Alternative wheel right event to consider.")
 
 (defun mouse-wheel--get-scroll-window (event)
diff --git a/lisp/net/ange-ftp.el b/lisp/net/ange-ftp.el
index a6c256eeba..a6904fc07e 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-1996, 1998, 2000-2021 Free Software Foundation,
+;; Copyright (C) 1989-1996, 1998, 2000-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Andy Norman (ange@hplb.hpl.hp.com)
diff --git a/lisp/net/browse-url.el b/lisp/net/browse-url.el
index 011e43c447..e4c485eccd 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 WWW browser  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1995-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2022 Free Software Foundation, Inc.
 
 ;; Author: Denis Howe <dbh@doc.ic.ac.uk>
 ;; Maintainer: emacs-devel@gnu.org
@@ -38,7 +38,7 @@
 ;; browse-url-firefox                 Firefox     Don't know (tried with 1.0.1)
 ;; browse-url-chrome                  Chrome      47.0.2526.111
 ;; browse-url-chromium                Chromium    3.0
-;; browse-url-epiphany                Epiphany    Don't know
+;; browse-url-epiphany                GNOME Web (Epiphany)    Don't know
 ;; browse-url-webpositive             WebPositive 1.2-alpha (Haiku R1/beta3)
 ;; browse-url-w3                      w3          0
 ;; browse-url-text-*                 Any text browser     0
@@ -156,7 +156,7 @@
     (function-item :tag "Firefox" :value browse-url-firefox)
     (function-item :tag "Google Chrome" :value browse-url-chrome)
     (function-item :tag "Chromium" :value browse-url-chromium)
-    (function-item :tag "Epiphany" :value  browse-url-epiphany)
+    (function-item :tag "GNOME Web (Epiphany)" :value  browse-url-epiphany)
     (function-item :tag "WebPositive" :value browse-url-webpositive)
     (function-item :tag "Text browser in an xterm window"
                   :value browse-url-text-xterm)
@@ -221,7 +221,7 @@ be used instead."
 
 (defcustom browse-url-button-regexp
   (concat
-   "\\b\\(\\(www\\.\\|\\(s?https?\\|ftp\\|file\\|gopher\\|"
+   "\\b\\(\\(www\\.\\|\\(s?https?\\|ftp\\|file\\|gopher\\|gemini\\|"
    "nntp\\|news\\|telnet\\|wais\\|mailto\\|info\\):\\)"
    "\\(//[-a-z0-9_.]+:[0-9]*\\)?"
    (let ((chars "-a-z0-9_=#$@~%&*+\\/[:word:]")
@@ -240,33 +240,6 @@ be used instead."
   :version "27.1"
   :type 'regexp)
 
-(defcustom browse-url-netscape-program "netscape"
-  ;; Info about netscape-remote from Karl Berry.
-  "The name by which to invoke Netscape.
-
-The free program `netscape-remote' from
-<URL:http://home.netscape.com/newsref/std/remote.c> is said to start
-up very much quicker than `netscape'.  Reported to compile on a GNU
-system, given vroot.h from the same directory, with cc flags
- -DSTANDALONE -L/usr/X11R6/lib -lXmu -lX11."
-  :type 'string)
-
-(make-obsolete-variable 'browse-url-netscape-program nil "25.1")
-
-(defcustom browse-url-netscape-arguments nil
-  "A list of strings to pass to Netscape as arguments."
-  :type '(repeat (string :tag "Argument")))
-
-(make-obsolete-variable 'browse-url-netscape-arguments nil "25.1")
-
-(defcustom browse-url-netscape-startup-arguments browse-url-netscape-arguments
-  "A list of strings to pass to Netscape when it starts up.
-Defaults to the value of `browse-url-netscape-arguments' at the time
-`browse-url' is loaded."
-  :type '(repeat (string :tag "Argument")))
-
-(make-obsolete-variable 'browse-url-netscape-startup-arguments nil "25.1")
-
 (defcustom browse-url-browser-display nil
   "The X display for running the browser, if not same as Emacs's."
   :type '(choice string (const :tag "Default" nil)))
@@ -285,11 +258,13 @@ Defaults to the value of `browse-url-mozilla-arguments' 
at the time
 `browse-url' is loaded."
   :type '(repeat (string :tag "Argument")))
 
+(defun browse-url--find-executable (candidates default)
+  (while (and candidates (not (executable-find (car candidates))))
+    (setq candidates (cdr candidates)))
+  (or (car candidates) default))
+
 (defcustom browse-url-firefox-program
-  (let ((candidates '("icecat" "iceweasel" "firefox")))
-    (while (and candidates (not (executable-find (car candidates))))
-      (setq candidates (cdr candidates)))
-    (or (car candidates) "firefox"))
+  (browse-url--find-executable '("icecat" "iceweasel") "firefox")
   "The name by which to invoke Firefox or a variant of it."
   :type 'string)
 
@@ -307,10 +282,8 @@ Defaults to the value of `browse-url-firefox-arguments' at 
the time
                         "it no longer has any effect." "24.5")
 
 (defcustom browse-url-chrome-program
-  (let ((candidates '("google-chrome-stable" "google-chrome")))
-    (while (and candidates (not (executable-find (car candidates))))
-      (setq candidates (cdr candidates)))
-    (or (car candidates) "chromium"))
+  (browse-url--find-executable '("google-chrome-stable" "google-chrome")
+                               "chromium")
   "The name by which to invoke the Chrome browser."
   :type 'string
   :version "25.1")
@@ -321,10 +294,7 @@ Defaults to the value of `browse-url-firefox-arguments' at 
the time
   :version "25.1")
 
 (defcustom browse-url-chromium-program
-  (let ((candidates '("chromium" "chromium-browser")))
-    (while (and candidates (not (executable-find (car candidates))))
-      (setq candidates (cdr candidates)))
-    (or (car candidates) "chromium"))
+  (browse-url--find-executable '("chromium" "chromium-browser") "chromium")
   "The name by which to invoke Chromium."
   :type 'string
   :version "24.1")
@@ -334,36 +304,16 @@ Defaults to the value of `browse-url-firefox-arguments' 
at the time
   :type '(repeat (string :tag "Argument"))
   :version "24.1")
 
-(defcustom browse-url-galeon-program "galeon"
-  "The name by which to invoke Galeon."
-  :type 'string)
-
-(make-obsolete-variable 'browse-url-galeon-program nil "25.1")
-
-(defcustom browse-url-galeon-arguments nil
-  "A list of strings to pass to Galeon as arguments."
-  :type '(repeat (string :tag "Argument")))
-
-(make-obsolete-variable 'browse-url-galeon-arguments nil "25.1")
-
-(defcustom browse-url-galeon-startup-arguments browse-url-galeon-arguments
-  "A list of strings to pass to Galeon when it starts up.
-Defaults to the value of `browse-url-galeon-arguments' at the time
-`browse-url' is loaded."
-  :type '(repeat (string :tag "Argument")))
-
-(make-obsolete-variable 'browse-url-galeon-startup-arguments nil "25.1")
-
 (defcustom browse-url-epiphany-program "epiphany"
-  "The name by which to invoke Epiphany."
+  "The name by which to invoke GNOME Web (Epiphany)."
   :type 'string)
 
 (defcustom browse-url-epiphany-arguments nil
-  "A list of strings to pass to Epiphany as arguments."
+  "A list of strings to pass to GNOME Web (Epiphany) as arguments."
   :type '(repeat (string :tag "Argument")))
 
 (defcustom browse-url-epiphany-startup-arguments browse-url-epiphany-arguments
-  "A list of strings to pass to Epiphany when it starts up.
+  "A list of strings to pass to GNOME Web (Epiphany) when it starts up.
 Defaults to the value of `browse-url-epiphany-arguments' at the time
 `browse-url' is loaded."
   :type '(repeat (string :tag "Argument")))
@@ -373,7 +323,7 @@ Defaults to the value of `browse-url-epiphany-arguments' at 
the time
   :type 'string
   :version "29.1")
 
-;; GNOME means of invoking either Mozilla or Netscape.
+;; GNOME means of invoking Mozilla.
 (defvar browse-url-gnome-moz-program "gnome-moz-remote")
 
 (make-obsolete-variable 'browse-url-gnome-moz-program nil "25.1")
@@ -406,29 +356,12 @@ If non-nil, then open the URL in a new buffer rather than 
a new window if
 
 (make-obsolete-variable 'browse-url-conkeror-new-window-is-buffer nil "28.1")
 
-(defcustom browse-url-galeon-new-window-is-tab nil
-  "Whether to open up new windows in a tab or a new window.
-If non-nil, then open the URL in a new tab rather than a new window if
-`browse-url-galeon' is asked to open it in a new window."
-  :type 'boolean)
-
-(make-obsolete-variable 'browse-url-galeon-new-window-is-tab nil "25.1")
-
 (defcustom browse-url-epiphany-new-window-is-tab nil
   "Whether to open up new windows in a tab or a new window.
 If non-nil, then open the URL in a new tab rather than a new window if
 `browse-url-epiphany' is asked to open it in a new window."
   :type 'boolean)
 
-(defcustom browse-url-netscape-new-window-is-tab nil
-  "Whether to open up new windows in a tab or a new window.
-If non-nil, then open the URL in a new tab rather than a new
-window if `browse-url-netscape' is asked to open it in a new
-window."
-  :type 'boolean)
-
-(make-obsolete-variable 'browse-url-netscape-new-window-is-tab nil "25.1")
-
 (defcustom browse-url-new-window-flag nil
   "Non-nil means always open a new browser window with appropriate browsers.
 Passing an interactive argument to \\[browse-url], or specific browser
@@ -525,14 +458,6 @@ You might want to set this to somewhere with restricted 
read permissions
 for privacy's sake."
   :type 'string)
 
-(defcustom browse-url-netscape-version 3
-  "The version of Netscape you are using.
-This affects how URL reloading is done; the mechanism changed
-incompatibly at version 4."
-  :type 'number)
-
-(make-obsolete-variable 'browse-url-netscape-version nil "25.1")
-
 (defcustom browse-url-text-browser "lynx"
   "The name of the text browser to invoke."
   :type 'string
@@ -776,8 +701,10 @@ interactively.  Turn the filename into a URL with function
          (cond ((not (buffer-modified-p)))
                (browse-url-save-file (save-buffer))
                (t (message "%s modified since last save" file))))))
-  (when (file-remote-p file)
-    (setq file (file-local-copy file)))
+  (when (and (file-remote-p file)
+             (not browse-url-temp-file-name))
+    (setq browse-url-temp-file-name (file-local-copy file)
+          file browse-url-temp-file-name))
   (browse-url (browse-url-file-url file))
   (run-hooks 'browse-url-of-file-hook))
 
@@ -862,6 +789,8 @@ See `browse-url' for details."
 
 ;; A generic command to call the current browse-url-browser-function
 
+(declare-function pgtk-backend-display-class "pgtkfns.c" (&optional terminal))
+
 ;;;###autoload
 (defun browse-url (url &rest args)
   "Open URL using a configurable method.
@@ -899,8 +828,17 @@ If ARGS are omitted, the default is to pass
     ;; When connected to various displays, be careful to use the display of
     ;; the currently selected frame, rather than the original start display,
     ;; which may not even exist any more.
-    (if (stringp (frame-parameter nil 'display))
-        (setenv "DISPLAY" (frame-parameter nil 'display)))
+    (let ((dpy (frame-parameter nil 'display))
+          classname)
+      (if (stringp dpy)
+        (cond
+         ((featurep 'pgtk)
+          (setq classname (pgtk-backend-display-class))
+          (if (equal classname "GdkWaylandDisplay")
+              (setenv "WAYLAND_DISPLAY" dpy)
+            (setenv "DISPLAY" dpy)))
+         (t
+          (setenv "DISPLAY" dpy)))))
     (if (functionp function)
         (apply function url args)
       (error "No suitable browser for URL %s" url))))
@@ -1009,8 +947,6 @@ The optional NEW-WINDOW argument is not used."
 (function-put 'browse-url-default-macosx-browser 'browse-url-browser-kind
               'external)
 
-;; --- Netscape ---
-
 (defun browse-url-process-environment ()
   "Set DISPLAY in the environment to the X display the browser will use.
 This is either the value of variable `browse-url-browser-display' if
@@ -1053,9 +989,7 @@ instead of `browse-url-new-window-flag'."
     ((executable-find browse-url-mozilla-program) 'browse-url-mozilla)
     ((executable-find browse-url-firefox-program) 'browse-url-firefox)
     ((executable-find browse-url-chromium-program) 'browse-url-chromium)
-;;;    ((executable-find browse-url-galeon-program) 'browse-url-galeon)
     ((executable-find browse-url-kde-program) 'browse-url-kde)
-;;;    ((executable-find browse-url-netscape-program) 'browse-url-netscape)
     ((executable-find browse-url-chrome-program) 'browse-url-chrome)
     ((executable-find browse-url-webpositive-program) 'browse-url-webpositive)
     ((executable-find browse-url-xterm-program) 'browse-url-text-xterm)
@@ -1089,82 +1023,6 @@ The optional argument IGNORED is not used."
 
 (function-put 'browse-url-xdg-open 'browse-url-browser-kind 'external)
 
-;;;###autoload
-(defun browse-url-netscape (url &optional new-window)
-  "Ask the Netscape WWW browser to load URL.
-Default to the URL around or before point.  The strings in variable
-`browse-url-netscape-arguments' are also passed to Netscape.
-
-When called interactively, if variable `browse-url-new-window-flag' is
-non-nil, load the document in a new Netscape window, otherwise use a
-random existing one.  A non-nil interactive prefix argument reverses
-the effect of `browse-url-new-window-flag'.
-
-If `browse-url-netscape-new-window-is-tab' is non-nil, then
-whenever a document would otherwise be loaded in a new window, it
-is loaded in a new tab in an existing window instead.
-
-When called non-interactively, optional second argument NEW-WINDOW is
-used instead of `browse-url-new-window-flag'."
-  (declare (obsolete nil "25.1"))
-  (interactive (browse-url-interactive-arg "URL: "))
-  (setq url (browse-url-encode-url url))
-  (let* ((process-environment (browse-url-process-environment))
-        (process
-         (apply #'start-process
-                (concat "netscape " url) nil
-                browse-url-netscape-program
-                (append
-                 browse-url-netscape-arguments
-                 (if (eq window-system 'w32)
-                     (list url)
-                   (append
-                    (if new-window '("-noraise"))
-                    (list "-remote"
-                          (concat "openURL(" url
-                                  (if (browse-url-maybe-new-window
-                                       new-window)
-                                      (if browse-url-netscape-new-window-is-tab
-                                          ",new-tab"
-                                        ",new-window"))
-                                  ")"))))))))
-    (set-process-sentinel process
-                         (lambda (process _change)
-                           (browse-url-netscape-sentinel process url)))))
-
-(function-put 'browse-url-netscape 'browse-url-browser-kind 'external)
-
-(defun browse-url-netscape-sentinel (process url)
-  "Handle a change to the process communicating with Netscape."
-  (declare (obsolete nil "25.1"))
-  (or (eq (process-exit-status process) 0)
-      (let* ((process-environment (browse-url-process-environment)))
-       ;; Netscape not running - start it
-       (message "Starting %s..." browse-url-netscape-program)
-       (apply #'start-process (concat "netscape" url) nil
-              browse-url-netscape-program
-              (append browse-url-netscape-startup-arguments (list url))))))
-
-(defun browse-url-netscape-reload ()
-  "Ask Netscape to reload its current document.
-How depends on `browse-url-netscape-version'."
-  (declare (obsolete nil "25.1"))
-  (interactive)
-  ;; Backwards incompatibility reported by
-  ;; <peter.kruse@psychologie.uni-regensburg.de>.
-  (browse-url-netscape-send (if (>= browse-url-netscape-version 4)
-                               "xfeDoCommand(reload)"
-                             "reload")))
-
-(defun browse-url-netscape-send (command)
-  "Send a remote control command to Netscape."
-  (declare (obsolete nil "25.1"))
-  (let* ((process-environment (browse-url-process-environment)))
-    (apply #'start-process "netscape" nil
-           browse-url-netscape-program
-           (append browse-url-netscape-arguments
-                   (list "-remote" command)))))
-
 ;;;###autoload
 (defun browse-url-mozilla (url &optional new-window)
   "Ask the Mozilla WWW browser to load URL.
@@ -1285,63 +1143,13 @@ The optional argument NEW-WINDOW is not used."
 
 (function-put 'browse-url-chrome 'browse-url-browser-kind 'external)
 
-;;;###autoload
-(defun browse-url-galeon (url &optional new-window)
-  "Ask the Galeon WWW browser to load URL.
-Default to the URL around or before point.  The strings in variable
-`browse-url-galeon-arguments' are also passed to Galeon.
-
-When called interactively, if variable `browse-url-new-window-flag' is
-non-nil, load the document in a new Galeon window, otherwise use a
-random existing one.  A non-nil interactive prefix argument reverses
-the effect of `browse-url-new-window-flag'.
-
-If `browse-url-galeon-new-window-is-tab' is non-nil, then whenever a
-document would otherwise be loaded in a new window, it is loaded in a
-new tab in an existing window instead.
-
-When called non-interactively, optional second argument NEW-WINDOW is
-used instead of `browse-url-new-window-flag'."
-  (declare (obsolete nil "25.1"))
-  (interactive (browse-url-interactive-arg "URL: "))
-  (setq url (browse-url-encode-url url))
-  (let* ((process-environment (browse-url-process-environment))
-         (process (apply #'start-process
-                        (concat "galeon " url)
-                        nil
-                        browse-url-galeon-program
-                        (append
-                         browse-url-galeon-arguments
-                          (if (browse-url-maybe-new-window new-window)
-                             (if browse-url-galeon-new-window-is-tab
-                                 '("--new-tab")
-                               '("--new-window" "--noraise"))
-                            '("--existing"))
-                          (list url)))))
-    (set-process-sentinel process
-                         (lambda (process _change)
-                           (browse-url-galeon-sentinel process url)))))
-
-(function-put 'browse-url-galeon 'browse-url-browser-kind 'external)
-
-(defun browse-url-galeon-sentinel (process url)
-  "Handle a change to the process communicating with Galeon."
-  (declare (obsolete nil "25.1"))
-  (or (eq (process-exit-status process) 0)
-      (let* ((process-environment (browse-url-process-environment)))
-       ;; Galeon is not running - start it
-       (message "Starting %s..." browse-url-galeon-program)
-       (apply #'start-process (concat "galeon " url) nil
-              browse-url-galeon-program
-              (append browse-url-galeon-startup-arguments (list url))))))
-
 (defun browse-url-epiphany (url &optional new-window)
-  "Ask the Epiphany WWW browser to load URL.
+  "Ask the GNOME Web (Epiphany) WWW browser to load URL.
 Default to the URL around or before point.  The strings in variable
-`browse-url-galeon-arguments' are also passed to Epiphany.
+`browse-url-epiphany-arguments' are also passed to GNOME Web.
 
 When called interactively, if variable `browse-url-new-window-flag' is
-non-nil, load the document in a new Epiphany window, otherwise use a
+non-nil, load the document in a new GNOME Web window, otherwise use a
 random existing one.  A non-nil interactive prefix argument reverses
 the effect of `browse-url-new-window-flag'.
 
@@ -1373,10 +1181,10 @@ used instead of `browse-url-new-window-flag'."
 (function-put 'browse-url-epiphany 'browse-url-browser-kind 'external)
 
 (defun browse-url-epiphany-sentinel (process url)
-  "Handle a change to the process communicating with Epiphany."
+  "Handle a change to the process communicating with GNOME Web (Epiphany)."
   (or (eq (process-exit-status process) 0)
       (let* ((process-environment (browse-url-process-environment)))
-       ;; Epiphany is not running - start it
+        ;; GNOME Web is not running - start it
        (message "Starting %s..." browse-url-epiphany-program)
        (apply #'start-process (concat "epiphany " url) nil
               browse-url-epiphany-program
@@ -1418,7 +1226,7 @@ currently selected window instead."
 
 ;;;###autoload
 (defun browse-url-gnome-moz (url &optional new-window)
-  "Ask Mozilla/Netscape to load URL via the GNOME program `gnome-moz-remote'.
+  "Ask Mozilla to load URL via the GNOME program `gnome-moz-remote'.
 Default to the URL around or before point.  The strings in variable
 `browse-url-gnome-moz-arguments' are also passed.
 
diff --git a/lisp/net/dbus.el b/lisp/net/dbus.el
index 3fff5398c0..6a8bf87967 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 ;; Keywords: comm, hardware
@@ -36,6 +36,7 @@
 ;; Declare used subroutines and variables.
 (declare-function dbus-message-internal "dbusbind.c")
 (declare-function dbus--init-bus "dbusbind.c")
+(declare-function libxml-parse-xml-region "xml.c")
 (defvar dbus-message-type-invalid)
 (defvar dbus-message-type-method-call)
 (defvar dbus-message-type-method-return)
@@ -2102,7 +2103,7 @@ has been handled by this function."
           (interface (dbus-event-interface-name event))
           (member (dbus-event-member-name event))
            (arguments (dbus-event-arguments event))
-           (time (time-to-seconds (current-time))))
+          (time (float-time)))
       (save-excursion
         ;; Check for matching method-call.
         (goto-char (point-max))
diff --git a/lisp/net/dictionary-connection.el 
b/lisp/net/dictionary-connection.el
index b874c488a8..aef3c4efc7 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 1d07989ef5..507363cc0f 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 4f0b0df2b7..f7f1500454 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 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 1086bab946..8680fab7c3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 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 7ad92b22af..6a2cd13dd0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: Oscar Figueiredo <oscar@cpe.fr>
 ;;         Pavel Janík <Pavel@Janik.cz>
diff --git a/lisp/net/eudc-export.el b/lisp/net/eudc-export.el
index 66db7814ad..3f7d9c0060 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 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 43c1a2886f..26afd76805 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 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 b80801717f..3122b26cd8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 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 14e5c28b2d..6831c4ffe3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
 
 ;; Author: Oscar Figueiredo <oscar@cpe.fr>
 ;;         Pavel Janík <Pavel@Janik.cz>
@@ -46,16 +46,9 @@
 ;;; Code:
 
 (require 'wid-edit)
-
 (require 'cl-lib)
-
-(unless (fboundp 'custom-menu-create)
-  (autoload 'custom-menu-create "cus-edit"))
-
 (require 'eudc-vars)
 
-
-
 ;;{{{      Internal cooking
 
 ;;{{{      Internal variables and compatibility tricks
diff --git a/lisp/net/eudcb-bbdb.el b/lisp/net/eudcb-bbdb.el
index e241a1c2fa..60a3adbc34 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
 
 ;; Author: Oscar Figueiredo <oscar@cpe.fr>
 ;;         Pavel Janík <Pavel@Janik.cz>
diff --git a/lisp/net/eudcb-ldap.el b/lisp/net/eudcb-ldap.el
index fc48656726..365dace961 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 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 732881f75a..b1235cce70 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2022 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 18c8958c16..c02b5689e7 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
 
 ;; Author: Alexander Adolf
 
diff --git a/lisp/net/eww.el b/lisp/net/eww.el
index e86d21f889..eaa5c11938 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: html
@@ -239,7 +239,7 @@ parameter, and should return the (possibly) transformed 
URL."
   :version "29.1")
 
 (defface eww-form-submit
-  '((((type x w32 ns haiku) (class color))     ; Like default mode line
+  '((((type x w32 ns haiku pgtk) (class color))        ; Like default mode line
      :box (:line-width 2 :style released-button)
      :background "#808080" :foreground "black"))
   "Face for eww buffer buttons."
@@ -247,7 +247,7 @@ parameter, and should return the (possibly) transformed 
URL."
   :group 'eww)
 
 (defface eww-form-file
-  '((((type x w32 ns haiku) (class color))     ; Like default mode line
+  '((((type x w32 ns haiku pgtk) (class color))        ; Like default mode line
      :box (:line-width 2 :style released-button)
      :background "#808080" :foreground "black"))
   "Face for eww buffer buttons."
@@ -255,7 +255,7 @@ parameter, and should return the (possibly) transformed 
URL."
   :group 'eww)
 
 (defface eww-form-checkbox
-  '((((type x w32 ns haiku) (class color))     ; Like default mode line
+  '((((type x w32 ns haiku pgtk) (class color))        ; Like default mode line
      :box (:line-width 2 :style released-button)
      :background "lightgrey" :foreground "black"))
   "Face for eww buffer buttons."
@@ -263,7 +263,7 @@ parameter, and should return the (possibly) transformed 
URL."
   :group 'eww)
 
 (defface eww-form-select
-  '((((type x w32 ns haiku) (class color))     ; Like default mode line
+  '((((type x w32 ns haiku pgtk) (class color))        ; Like default mode line
      :box (:line-width 2 :style released-button)
      :background "lightgrey" :foreground "black"))
   "Face for eww buffer buttons."
@@ -710,7 +710,7 @@ The renaming scheme is performed in accordance with
         (shr-target-id
          (goto-char (point-min))
           (let ((match (text-property-search-forward
-                        'shr-target-id shr-target-id t)))
+                        'shr-target-id shr-target-id #'member)))
             (when match
               (goto-char (prop-match-beginning match)))))
         (t
diff --git a/lisp/net/gnutls.el b/lisp/net/gnutls.el
index 7b1ea2e765..6e3845aec1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
 
 ;; Author: Ted Zlatanov <tzz@lifelogs.com>
 ;; Keywords: comm, tls, ssl, encryption
diff --git a/lisp/net/goto-addr.el b/lisp/net/goto-addr.el
index 848bad3b0d..99ed14ca8b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2000-2022 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 5778857ff8..0c8a29cc39 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2001, 2007-2022 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 85a8c51de2..188e6f4d6f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2001, 2007-2022 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 6ca76f1f99..ac24efdccb 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 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 8b35a2d8e1..ce6c270e0b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 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 14d49251f5..bf3c8edd1e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 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 3feb089ad0..d84763b162 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 6f44d9844e..411b6ed413 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
 
 ;; Author: Peter Breton <pbreton@cs.umb.edu>
 ;; Created: Sun Mar 16 1997
diff --git a/lisp/net/netrc.el b/lisp/net/netrc.el
index 9473c821a1..c272c07e4c 100644
--- a/lisp/net/netrc.el
+++ b/lisp/net/netrc.el
@@ -1,6 +1,6 @@
 ;;; netrc.el --- .netrc parsing functionality  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1996-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
diff --git a/lisp/net/network-stream.el b/lisp/net/network-stream.el
index 1983688cef..38a5e14c94 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 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 27ea713d0e..a62a7bd8b7 100644
--- a/lisp/net/newst-backend.el
+++ b/lisp/net/newst-backend.el
@@ -1,10 +1,10 @@
 ;;; newst-backend.el --- Retrieval backend for newsticker  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2003-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
 
 ;; Author:      Ulf Jasper <ulf.jasper@web.de>
 ;; Filename:    newst-backend.el
-;; URL:         http://www.nongnu.org/newsticker
+;; URL:         https://www.nongnu.org/newsticker
 ;; Keywords:    News, RSS, Atom
 ;; Package:     newsticker
 
@@ -402,13 +402,6 @@ headline after it has been retrieved for the first time."
   "Miscellaneous newsticker settings."
   :group 'newsticker)
 
-(defcustom newsticker-cache-filename
-  "~/.newsticker-cache"
-  "Name of the newsticker cache file."
-  :type 'string
-  :group 'newsticker-miscellaneous)
-(make-obsolete-variable 'newsticker-cache-filename 'newsticker-dir "23.1")
-
 (defcustom newsticker-dir
   (locate-user-emacs-file "newsticker/" ".newsticker/")
   "Directory where newsticker saves data."
@@ -1211,8 +1204,7 @@ URL 
`http://www.atompub.org/2005/08/17/draft-ietf-atompub-format-11.html'"
 Return value as well as arguments NAME, TIME, and TOPNODE are the
 same as in `newsticker--parse-atom-1.0'.
 
-For the RSS 0.91 specification see URL `http://backend.userland.com/rss091'
-or URL `http://my.netscape.com/publish/formats/rss-spec-0.91.html'."
+For the RSS 0.91 specification see URL `http://backend.userland.com/rss091'."
   (newsticker--debug-msg "Parsing RSS 0.91 feed %s" name)
   (let* ((channelnode (car (xml-get-children topnode 'channel)))
          is-new-feed has-new-items)
@@ -2115,28 +2107,6 @@ well."
                  (throw 'result t)))))
     (< (or (newsticker--pos item1) 0) (or (newsticker--pos item2) 0))))
 
-(defun newsticker--cache-save-version1 ()
-  "Update and save newsticker cache file."
-  (interactive)
-  (newsticker--cache-update t))
-
-(defun newsticker--cache-update (&optional save)
-  "Update newsticker cache file.
-If optional argument SAVE is not nil the cache file is saved to disk."
-  (save-excursion
-    (unless (file-directory-p newsticker-dir)
-      (make-directory newsticker-dir t))
-    (let ((coding-system-for-write 'utf-8)
-          (buf (find-file-noselect newsticker-cache-filename)))
-      (when buf
-        (set-buffer buf)
-        (setq buffer-undo-list t)
-        (erase-buffer)
-        (insert ";; -*- coding: utf-8 -*-\n")
-        (insert (prin1-to-string newsticker--cache))
-        (when save
-          (save-buffer))))))
-
 (defun newsticker--cache-get-feed (feed)
   "Return the cached data for the feed FEED.
 FEED is a symbol!"
@@ -2163,30 +2133,11 @@ FEED is a symbol!"
         (insert ";; -*- coding: utf-8 -*-\n")
         (insert (prin1-to-string (cdr feed)))))))
 
-(defun newsticker--cache-read-version1 ()
-  "Read version1 cache data."
-  (let ((coding-system-for-read 'utf-8))
-    (when (file-exists-p newsticker-cache-filename)
-      (with-temp-buffer
-        (insert-file-contents newsticker-cache-filename)
-        (goto-char (point-min))
-        (condition-case nil
-            (setq newsticker--cache (read (current-buffer)))
-          (error
-           (message "Error while reading newsticker cache file!")
-           (setq newsticker--cache nil)))))))
-
 (defun newsticker--cache-read ()
   "Read cache data."
   (setq newsticker--cache nil)
-  (if (file-exists-p newsticker-cache-filename)
-      (progn
-        (when (y-or-n-p "Old newsticker cache file exists.  Read it? ")
-          (newsticker--cache-read-version1))
-        (when (y-or-n-p "Delete old newsticker cache file? ")
-          (delete-file newsticker-cache-filename)))
-    (dolist (f (append newsticker-url-list-defaults newsticker-url-list))
-      (newsticker--cache-read-feed (car f)))))
+  (dolist (f (append newsticker-url-list-defaults newsticker-url-list))
+    (newsticker--cache-read-feed (car f))))
 
 (defun newsticker--cache-read-feed (feed-name)
   "Read cache data for feed named FEED-NAME."
diff --git a/lisp/net/newst-plainview.el b/lisp/net/newst-plainview.el
index 420cf82e4d..df574dfa2f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
 
 ;; Author:      Ulf Jasper <ulf.jasper@web.de>
 ;; Filename:    newst-plainview.el
@@ -589,7 +589,7 @@ calls `w3m-toggle-inline-image'.  It works only if
 (defun newsticker-close-buffer ()
   "Close the newsticker buffer."
   (interactive)
-  (newsticker--cache-update t)
+  (newsticker--cache-save)
   (bury-buffer))
 
 (defun newsticker-next-new-item (&optional do-not-wrap-at-eob)
@@ -748,7 +748,7 @@ Return new buffer position."
       (newsticker--cache-replace-age newsticker--cache feed 'new 'old)
       (newsticker--cache-replace-age newsticker--cache feed 'obsolete
                                      'old)
-      (newsticker--cache-update)
+      (newsticker--cache-save)
       (newsticker--buffer-set-uptodate nil)
       (newsticker--ticker-text-setup)
       (newsticker-buffer-update)
@@ -879,7 +879,7 @@ not get changed."
     (newsticker--cache-replace-age newsticker--cache 'any 'new 'old)
     (newsticker--buffer-set-uptodate nil)
     (newsticker--ticker-text-setup)
-    (newsticker--cache-update)
+    (newsticker--cache-save)
     (newsticker-buffer-update)))
 
 (defun newsticker-hide-extra ()
diff --git a/lisp/net/newst-reader.el b/lisp/net/newst-reader.el
index 40e304402a..7e00ac93e7 100644
--- a/lisp/net/newst-reader.el
+++ b/lisp/net/newst-reader.el
@@ -1,10 +1,10 @@
 ;;; newst-reader.el --- Generic RSS reader functions.  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2003-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
 
 ;; Author:      Ulf Jasper <ulf.jasper@web.de>
 ;; Filename:    newst-reader.el
-;; URL:         http://www.nongnu.org/newsticker
+;; URL:         https://www.nongnu.org/newsticker
 ;; Package:     newsticker
 
 ;; ======================================================================
diff --git a/lisp/net/newst-ticker.el b/lisp/net/newst-ticker.el
index 8cfafb5bfe..ef0fe83803 100644
--- a/lisp/net/newst-ticker.el
+++ b/lisp/net/newst-ticker.el
@@ -1,10 +1,10 @@
 ;;; newst-ticker.el --- mode line ticker for newsticker.  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2003-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
 
 ;; Author:      Ulf Jasper <ulf.jasper@web.de>
 ;; Filename:    newst-ticker.el
-;; URL:         http://www.nongnu.org/newsticker
+;; URL:         https://www.nongnu.org/newsticker
 ;; Keywords:    News, RSS, Atom
 ;; Package:     newsticker
 
diff --git a/lisp/net/newst-treeview.el b/lisp/net/newst-treeview.el
index d524e6dd17..80d9fd1cef 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 34e94acd12..525cae2140 100644
--- a/lisp/net/newsticker.el
+++ b/lisp/net/newsticker.el
@@ -1,10 +1,10 @@
 ;;; newsticker.el --- A Newsticker for Emacs. -*- lexical-binding: t -*-
 
-;; Copyright (C) 2003-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
 
 ;; Author:      Ulf Jasper <ulf.jasper@web.de>
 ;; Filename:    newsticker.el
-;; URL:         http://www.nongnu.org/newsticker
+;; URL:         https://www.nongnu.org/newsticker
 ;; Created:     17. June 2003
 ;; Keywords:    News, RSS, Atom
 
@@ -43,8 +43,7 @@
 ;; are contained in "RSS" (RDF Site Summary) or "Atom" files.  Newsticker
 ;; should work with the following RSS formats:
 ;;  * RSS 0.91
-;;    (see http://backend.userland.com/rss091 or
-;;    http://my.netscape.com/publish/formats/rss-spec-0.91.html)
+;;    (see http://backend.userland.com/rss091)
 ;;  * RSS 0.92
 ;;    (see http://backend.userland.com/rss092)
 ;;  * RSS 1.0
diff --git a/lisp/net/nsm.el b/lisp/net/nsm.el
index b067b23f8f..3146189be6 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2022 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 0e0146df96..b58f0abb56 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2007-2022 Free Software Foundation, Inc.
 
 ;; Author: Taro Kawagishi <tarok@transpulse.org>
 ;; Maintainer: Thomas Fitzsimmons <fitzsim@fitzsim.org>
@@ -102,9 +102,7 @@ is not given."
   (let ((request-ident (concat "NTLMSSP" (make-string 1 0)))
        (request-msgType (concat (make-string 1 1) (make-string 3 0)))
                                        ;0x01 0x00 0x00 0x00
-       (request-flags (concat (make-string 1 7) (make-string 1 130)
-                              (make-string 1 8) (make-string 1 0)))
-                                       ;0x07 0x82 0x08 0x00
+       (request-flags (unibyte-string #x07 #x82 #x08 #x00))
        )
     (when (and user (string-match "@" user))
       (unless domain
@@ -245,9 +243,7 @@ by PASSWORD-HASHES.  PASSWORD-HASHES should be a return 
value of
         ;;(msgType (substring rchallenge 8 12))        ;msgType, 4 bytes
         (uDomain (substring rchallenge 12 20)) ;uDomain, 8 bytes
         ;; match default setting in `ntlm-build-auth-request'
-        (request-flags (concat (make-string 1 7) (make-string 1 130)
-                               (make-string 1 8) (make-string 1 0)))
-                                       ;0x07 0x82 0x08 0x00
+        (request-flags (unibyte-string #x07 #x82 #x08 #x00))
         (flags (substring rchallenge 20 24))   ;flags, 4 bytes
         (challengeData (substring rchallenge 24 32)) ;challengeData, 8 bytes
          ;; Extract domain string from challenge string.
diff --git a/lisp/net/pop3.el b/lisp/net/pop3.el
index a267ac319b..0f6dfb6ad4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2022 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 c1833ffdb0..3a276791ab 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: mail, net
diff --git a/lisp/net/quickurl.el b/lisp/net/quickurl.el
index 7f147fa0de..598a7da071 100644
--- a/lisp/net/quickurl.el
+++ b/lisp/net/quickurl.el
@@ -1,6 +1,6 @@
 ;;; quickurl.el --- insert a URL based on text at point in buffer  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1999-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: Dave Pearson <davep@davep.org>
 ;; Created: 1999-05-28
@@ -55,7 +55,7 @@
 ;;
 ;; (("GNU"    . "https://www.gnu.org/";)
 ;;  ("FSF"      "https://www.fsf.org/"; "The Free Software Foundation")
-;;  ("emacs"  . "http://www.emacs.org/";)
+;;  ("emacs"  . "https://www.emacs.org/";)
 ;;  ("davep"    "http://www.davep.org/"; "Dave's homepage"))
 ;;
 ;; In case you're wondering about the mixture of cons cells and lists,
diff --git a/lisp/net/rcirc.el b/lisp/net/rcirc.el
index b4e9031e0d..9d1600ed72 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2022 Free Software Foundation, Inc.
 
 ;; Author: Ryan Yeske <rcyeske@gmail.com>
 ;; Maintainers: Ryan Yeske <rcyeske@gmail.com>,
@@ -560,8 +560,8 @@ If ARG is non-nil, instead prompt for connection 
parameters."
                      (auth (auth-source-search :host server
                                                :user user-name
                                                :port port))
-                     (fn (plist-get (car auth) :secret)))
-            (setq password (funcall fn)))
+                     (pwd (auth-info-password (car auth))))
+            (setq password pwd))
          (when server
            (let (connected)
              (dolist (p (rcirc-process-list))
@@ -716,8 +716,8 @@ that are joined after authentication."
         (setq rcirc-nick-table (make-hash-table :test 'equal))
         (setq rcirc-nick nick)
         (setq rcirc-startup-channels startup-channels)
-        (setq rcirc-last-server-message-time (current-time))
         (setq rcirc-last-connect-time (current-time))
+       (setq rcirc-last-server-message-time rcirc-last-connect-time)
 
         ;; Check if the immediate process state
         (sit-for .1)
@@ -2047,6 +2047,13 @@ connection."
         (run-hook-with-args 'rcirc-print-functions
                             process sender response target text)))))
 
+(defun rcirc-when ()
+  "Show the time of reception of the message at point."
+  (interactive)
+  (if-let (time (get-text-property (point) 'rcirc-time))
+      (message (format-time-string "%c" time))
+    (message "No time information at point.")))
+
 (defun rcirc-generate-log-filename (process target)
   "Return filename for log file based on PROCESS and TARGET."
   (if target
diff --git a/lisp/net/rfc2104.el b/lisp/net/rfc2104.el
index c03ac5a87b..d1535aa700 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <jas@pdc.kth.se>
 ;; Keywords: mail
diff --git a/lisp/net/rlogin.el b/lisp/net/rlogin.el
index a7001c1310..98b660dcc4 100644
--- a/lisp/net/rlogin.el
+++ b/lisp/net/rlogin.el
@@ -1,6 +1,6 @@
 ;;; rlogin.el --- remote login interface  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1992-1995, 1997-1998, 2001-2021 Free Software
+;; Copyright (C) 1992-1995, 1997-1998, 2001-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Noah Friedman <friedman@splode.com>
diff --git a/lisp/net/sasl-cram.el b/lisp/net/sasl-cram.el
index 2427f4976e..ef5699ddc6 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2007-2022 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 3696f526b5..b78beb292c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2007-2022 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 9a5bba5b29..d4c35fc66f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2007-2022 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 91d76663ef..ee52ed6e07 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
 
 ;; Author: Magnus Henoch <magnus.henoch@gmail.com>
 ;; Package: sasl
@@ -90,6 +90,8 @@
                     (sasl-mechanism-name (sasl-client-mechanism client))
                     (sasl-client-name client))))
           (salt (base64-decode-string salt-base64))
+           (string-xor (lambda (a b)
+                         (apply #'unibyte-string (cl-mapcar #'logxor a b))))
           (salted-password
            ;; Hi(str, salt, i):
            (let ((digest (concat salt (string 0 0 0 1)))
@@ -98,7 +100,7 @@
                (setq digest (funcall hmac-fun digest password))
                (setq xored (if (null xored)
                                digest
-                             (cl-map 'string 'logxor xored digest))))))
+                              (funcall string-xor xored digest))))))
           (client-key
            (funcall hmac-fun "Client Key" salted-password))
           (stored-key (decode-hex-string (funcall hash-fun client-key)))
@@ -108,7 +110,7 @@
             step-data ","
             client-final-message-without-proof))
           (client-signature (funcall hmac-fun (encode-coding-string 
auth-message 'utf-8) stored-key))
-          (client-proof (cl-map 'string 'logxor client-key client-signature))
+          (client-proof (funcall string-xor client-key client-signature))
           (client-final-message
            (concat client-final-message-without-proof ","
                    "p=" (base64-encode-string client-proof))))
diff --git a/lisp/net/sasl-scram-sha256.el b/lisp/net/sasl-scram-sha256.el
index c1df988a36..7bd98f200c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 b7f814f723..e0def55ad9 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2007-2022 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <ueno@gnu.org>
 ;; Keywords: SASL
@@ -174,21 +174,24 @@ It contain at least 64 bits of entropy."
 
 ;; stolen (and renamed) from message.el
 (defun sasl-unique-id-function ()
-  ;; Don't use microseconds from (current-time), they may be unsupported.
+  ;; Don't use fractional seconds from timestamp; they may be unsupported.
   ;; Instead we use this randomly inited counter.
   (setq sasl-unique-id-char
-       (% (1+ (or sasl-unique-id-char (logand (random) (1- (ash 1 20)))))
-          ;; (current-time) returns 16-bit ints,
-          ;; and 2^16*25 just fits into 4 digits i base 36.
-          (* 25 25)))
-  (let ((tm (current-time)))
+       ;; 2^16 * 25 just fits into 4 digits i base 36.
+       (let ((base (* 25 25)))
+         (if sasl-unique-id-char
+             (% (1+ sasl-unique-id-char) base)
+           (random base))))
+  (let ((tm (time-convert nil 'integer)))
     (concat
      (sasl-unique-id-number-base36
-      (+ (car   tm)
-        (ash (% sasl-unique-id-char 25) 16)) 4)
+      (+ (ash tm -16)
+        (ash (% sasl-unique-id-char 25) 16))
+      4)
      (sasl-unique-id-number-base36
-      (+ (nth 1 tm)
-        (ash (/ sasl-unique-id-char 25) 16)) 4))))
+      (+ (logand tm #xffff)
+        (ash (/ sasl-unique-id-char 25) 16))
+      4))))
 
 (defun sasl-unique-id-number-base36 (num len)
   (if (if (< len 0)
diff --git a/lisp/net/secrets.el b/lisp/net/secrets.el
index 4217c219ad..d8341774e4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 ;; Keywords: comm password passphrase
@@ -77,15 +77,17 @@
 ;;   (secrets-delete-collection "my collection")
 ;;   (secrets-create-collection "my collection")
 
-;; There exists a special collection called "session", which has the
-;; lifetime of the corresponding client session (aka Emacs's
-;; lifetime).  It is created automatically when Emacs uses the Secret
-;; Service interface, and it is deleted when Emacs is killed.
+;; With GNOME Keyring, there exists a special collection called
+;; "session", which has the lifetime of the user being logged in.  Its
+;; data are not stored on disk and go away when the user logs out.
 ;; Therefore, it can be used to store and retrieve secret items
-;; temporarily.  This shall be preferred over creation of a persistent
-;; collection, when the information shall not live longer than Emacs.
-;; The session collection can be addressed either by the string
-;; "session", or by nil, whenever a collection parameter is needed.
+;; temporarily.  The "session" collection can be addressed either by
+;; the string "session", or by nil, whenever a collection parameter is
+;; needed.
+
+;; However, other Secret Service provider don't create this temporary
+;; "session" collection.  You shall check first that this collection
+;; exists, before you use it.
 
 ;; As already said, a collection is a group of secret items.  A secret
 ;; item has a label, the "secret" (which is a string), and a set of
@@ -98,8 +100,7 @@
 ;;    => ("this item" "another item")
 
 ;; Secret items can be added or deleted to a collection.  In the
-;; following examples, we use the special collection "session", which
-;; is bound to Emacs's lifetime.
+;; following examples, we use the special collection "session".
 ;;
 ;;   (secrets-delete-item "session" "my item")
 ;;   (secrets-create-item "session" "my item" "geheim"
@@ -137,7 +138,7 @@
 ;; It has been tested with GNOME Keyring 2.29.92.  An implementation
 ;; for KWallet will be available at
 ;; svn://anonsvn.kde.org/home/kde/trunk/playground/base/ksecretservice;
-;; not tested yet.
+;; not tested yet.  This package has also been tested with KeePassXC 2.6.6.
 
 ;; Pacify byte-compiler.  D-Bus support in the Emacs core can be
 ;; disabled with configuration option "--without-dbus".  Declare used
@@ -263,6 +264,7 @@ It returns t if not."
 ;;   </signal>
 ;; </interface>
 
+;; This exist only for GNOME Keyring.
 (defconst secrets-session-collection-path
   "/org/freedesktop/secrets/collection/session"
   "The D-Bus temporary session collection object path.")
@@ -311,43 +313,8 @@ It returns t if not."
 (defconst secrets-interface-item-type-generic "org.freedesktop.Secret.Generic"
   "The default item type we are using.")
 
-;; We cannot use introspection, because some servers, like
-;; mate-keyring-daemon, don't provide relevant data.  Once the dust
-;; has settled, we shall assume the new interface, and get rid of the test.
-(defconst secrets-struct-secret-content-type
-  (ignore-errors
-    (let ((content-type "text/plain")
-         (path (cadr
-                (dbus-call-method
-                 :session secrets-service secrets-path
-                 secrets-interface-service
-                 "OpenSession" "plain" '(:variant ""))))
-         result)
-      ;; Create a dummy item.
-      (setq result
-           (dbus-call-method
-            :session secrets-service secrets-session-collection-path
-            secrets-interface-collection "CreateItem"
-            ;; Properties.
-            `(:array
-              (:dict-entry ,(concat secrets-interface-item ".Label")
-                           (:variant " ")))
-            ;; Secret.
-            `(:struct :object-path ,path
-                      (:array :signature "y")
-                      ,(dbus-string-to-byte-array " ")
-                      :string ,content-type)
-            ;; Don't replace.
-            nil))
-      ;; Remove it.
-      (dbus-call-method
-       :session secrets-service (car result)
-       secrets-interface-item "Delete")
-      ;; Result.
-      `(,content-type)))
-  "The content_type of a secret struct.
-It must be wrapped as list, because we add it via `append'.  This
-is an interface introduced in 2011.")
+(defconst secrets-struct-secret-content-type "text/plain"
+  "The content_type of a secret struct.")
 
 (defconst secrets-interface-session "org.freedesktop.Secret.Session"
   "A session tracks state between the service and a client application.")
@@ -696,13 +663,10 @@ The object path of the created item is returned."
                `((:dict-entry ,(concat secrets-interface-item ".Attributes")
                               (:variant ,(append '(:array) props))))))
             ;; Secret.
-            (append
-             `(:struct :object-path ,secrets-session-path
-                       (:array :signature "y") ;; No parameters.
-                       ,(dbus-string-to-byte-array password))
-             ;; We add the content_type.  In backward compatibility
-             ;; mode, nil is appended, which means nothing.
-             secrets-struct-secret-content-type)
+            `(:struct :object-path ,secrets-session-path
+                      (:array :signature "y") ;; No parameters.
+                      ,(dbus-string-to-byte-array password)
+                       ,secrets-struct-secret-content-type)
             ;; Do not replace. Replace does not seem to work.
             nil))
       (secrets-prompt (cadr result))
@@ -943,7 +907,7 @@ to their attributes."
    secrets-interface-service "CollectionDeleted"
    'secrets-collection-handler)
 
-  ;; We shall inform, whether the secret service is enabled on this
+  ;; We shall inform, that the secret service is enabled on this
   ;; machine.
   (setq secrets-enabled t))
 
@@ -954,6 +918,7 @@ to their attributes."
 ;; * secrets-debug should be structured like auth-source-debug to
 ;;   prevent leaking sensitive information.  Right now I don't see
 ;;   anything sensitive though.
+
 ;; * Check, whether the dh-ietf1024-aes128-cbc-pkcs7 algorithm can be
 ;;   used for the transfer of the secrets.  Currently, we use the
 ;;   plain algorithm.
diff --git a/lisp/net/shr-color.el b/lisp/net/shr-color.el
index aa92c365f8..e68e4a6933 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 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 d59b0ed362..7363874cf3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: html
@@ -40,6 +40,7 @@
 (require 'image)
 (require 'puny)
 (require 'url-cookie)
+(require 'pixel-fill)
 (require 'text-property-search)
 
 (defgroup shr nil
@@ -56,8 +57,15 @@ fit these criteria."
   :version "24.1"
   :type 'float)
 
+(defcustom shr-allowed-images nil
+  "If non-nil, only images that match this regexp are displayed.
+If nil, all URLs are allowed.  Also see `shr-blocked-images'."
+  :version "29.1"
+  :type '(choice (const nil) regexp))
+
 (defcustom shr-blocked-images nil
-  "Images that have URLs matching this regexp will be blocked."
+  "Images that have URLs matching this regexp will be blocked.
+If nil, no images are blocked.  Also see `shr-allowed-images'."
   :version "24.1"
   :type '(choice (const nil) regexp))
 
@@ -162,7 +170,7 @@ cid: URL as the argument.")
 (defvar shr-put-image-function #'shr-put-image
   "Function called to put image and alt string.")
 
-(defface shr-text '((t :inherit variable-pitch))
+(defface shr-text '((t :inherit variable-pitch-text))
   "Face used for rendering text."
   :version "29.1")
 
@@ -240,7 +248,6 @@ and other things:
 (defvar shr-internal-width nil)
 (defvar shr-list-mode nil)
 (defvar shr-content-cache nil)
-(defvar shr-kinsoku-shorten nil)
 (defvar shr-table-depth 0)
 (defvar shr-stylesheet nil)
 (defvar shr-base nil)
@@ -255,6 +262,7 @@ and other things:
 
 (defvar shr-target-id nil
   "Target fragment identifier anchor.")
+(defvar shr--link-targets nil)
 
 (defvar-keymap shr-map
   "a" #'shr-show-alt-text
@@ -312,6 +320,18 @@ and other things:
        (or (not (zerop (fringe-columns 'right)))
            (not (zerop (fringe-columns 'left))))))
 
+(defun shr--window-width ()
+  ;; Compute the width based on the window width.  We need to
+  ;; adjust the available width for when the user disables
+  ;; the fringes, which will cause the display engine usurp
+  ;; one column for the continuation glyph.
+  (if (not shr-use-fonts)
+      (- (window-body-width) 1
+         (if (shr--have-one-fringe-p)
+             1
+           0))
+    (pixel-fill-width)))
+
 ;;;###autoload
 (defun shr-insert-document (dom)
   "Render the parsed document DOM into the current buffer.
@@ -333,22 +353,9 @@ DOM should be a parse tree as generated by
             (if (not shr-use-fonts)
                 shr-width
               (* shr-width (frame-char-width)))
-           ;; Compute the width based on the window width.  We need to
-           ;; adjust the available width for when the user disables
-           ;; the fringes, which will cause the display engine usurp
-           ;; one column for the continuation glyph.
-          (if (not shr-use-fonts)
-              (- (window-body-width) 1
-                  (if (shr--have-one-fringe-p)
-                      1
-                    0))
-            (- (window-body-width nil t)
-                (* 2 (frame-char-width))
-                (if (shr--have-one-fringe-p)
-                    0
-                  (* (frame-char-width) 2))
-                1))))
+           (shr--window-width)))
         (max-specpdl-size max-specpdl-size)
+        (shr--link-targets nil)
         ;; `bidi-display-reordering' is supposed to be only used for
         ;; debugging purposes, but Shr's naïve filling algorithm
         ;; cannot cope with the complexity of RTL text in an LTR
@@ -372,9 +379,22 @@ DOM should be a parse tree as generated by
     (shr-descend dom)
     (shr-fill-lines start (point))
     (shr--remove-blank-lines-at-the-end start (point))
+    (shr--set-target-ids shr--link-targets)
     (when shr-warning
       (message "%s" shr-warning))))
 
+(defun shr--set-target-ids (ids)
+  ;; If the buffer is empty, there's no point in setting targets.
+  (unless (zerop (buffer-size))
+    ;; We may have several targets in the same place (if you have
+    ;; several <span id='foo'> things after one another).  So group
+    ;; them by position.
+    (dolist (group (seq-group-by #'cdr ids))
+      (let ((point (min (1- (point-max)) (car group))))
+        (put-text-property point (1+ point)
+                           'shr-target-id
+                           (mapcar #'car (cdr group)))))))
+
 (defun shr--remove-blank-lines-at-the-end (start end)
   (save-restriction
     (save-excursion
@@ -554,6 +574,12 @@ size, and full-buffer size."
        (shr-insert sub)
       (shr-descend sub))))
 
+(defun shr-image-blocked-p (url)
+  (or (and shr-blocked-images
+           (string-match shr-blocked-images url))
+      (and shr-allowed-images
+           (not (string-match shr-allowed-images url)))))
+
 (defun shr-indirect-call (tag-name dom &rest args)
   (let ((function (intern (concat "shr-tag-" (symbol-name tag-name)) obarray))
        ;; Allow other packages to override (or provide) rendering
@@ -584,7 +610,7 @@ size, and full-buffer size."
         (setq shr-warning
               "Not rendering the complete page because of too-deep nesting")
       (when style
-       (if (string-match "color\\|display\\|border-collapse" style)
+       (if (string-match-p "color\\|display\\|border-collapse" style)
            (setq shr-stylesheet (nconc (shr-parse-style style)
                                        shr-stylesheet))
          (setq style nil)))
@@ -603,16 +629,8 @@ size, and full-buffer size."
                (funcall function dom))
               (t
                (shr-generic dom)))
-        (when-let* ((id (dom-attr dom 'id)))
-         ;; If the element was empty, we don't have anything to put the
-         ;; anchor on.  So just insert a dummy character.
-         (when (= start (point))
-            (if (not (bolp))
-                (insert ? )
-              (insert ? )
-              (shr-mark-fill start))
-            (put-text-property (1- (point)) (point) 'display ""))
-          (put-text-property start (1+ start) 'shr-target-id id))
+        (when-let ((id (dom-attr dom 'id)))
+          (push (cons id (point)) shr--link-targets))
        ;; If style is set, then this node has set the color.
        (when style
          (shr-colorize-region
@@ -626,43 +644,11 @@ size, and full-buffer size."
     (with-temp-buffer
       (let ((shr-indentation 0)
            (shr-start nil)
-           (shr-internal-width (- (window-body-width nil t)
-                                   (* 2 (frame-char-width))
-                                   ;; Adjust the window width for when
-                                   ;; the user disables the fringes,
-                                   ;; which causes the display engine
-                                   ;; to usurp one column for the
-                                   ;; continuation glyph.
-                                   (if (and (null shr-width)
-                                            (not (shr--have-one-fringe-p)))
-                                       (* (frame-char-width) 2)
-                                     0))))
+           (shr-internal-width (shr--window-width)))
        (shr-insert text)
        (shr-fill-lines (point-min) (point-max))
        (buffer-string)))))
 
-(define-inline shr-char-breakable-p (char)
-  "Return non-nil if a line can be broken before and after CHAR."
-  (inline-quote (aref fill-find-break-point-function-table ,char)))
-(define-inline shr-char-nospace-p (char)
-  "Return non-nil if no space is required before and after CHAR."
-  (inline-quote (aref fill-nospace-between-words-table ,char)))
-
-;; KINSOKU is a Japanese word meaning a rule that should not be violated.
-;; In Emacs, it is a term used for characters, e.g. punctuation marks,
-;; parentheses, and so on, that should not be placed in the beginning
-;; of a line or the end of a line.
-(define-inline shr-char-kinsoku-bol-p (char)
-  "Return non-nil if a line ought not to begin with CHAR."
-  (inline-letevals (char)
-    (inline-quote (and (not (eq ,char ?'))
-                       (aref (char-category-set ,char) ?>)))))
-(define-inline shr-char-kinsoku-eol-p (char)
-  "Return non-nil if a line ought not to end with CHAR."
-  (inline-quote (aref (char-category-set ,char) ?<)))
-(unless (shr-char-kinsoku-bol-p (make-char 'japanese-jisx0208 33 35))
-  (load "kinsoku" nil t))
-
 (defun shr-pixel-column ()
   (if (not shr-use-fonts)
       (current-column)
@@ -676,6 +662,7 @@ size, and full-buffer size."
       (car (window-text-pixel-size nil (line-beginning-position) (point))))))
 
 (defun shr-pixel-region ()
+  (declare (obsolete nil "29.1"))
   (- (shr-pixel-column)
      (save-excursion
        (goto-char (mark))
@@ -718,7 +705,7 @@ size, and full-buffer size."
        (goto-char (point-max)))))
    (t
     (let ((font-start (point)))
-      (when (and (string-match "\\`[ \t\n\r]" text)
+      (when (and (string-match-p "\\`[ \t\n\r]" text)
                 (not (bolp))
                 (not (eq (char-after (1- (point))) ? )))
        (insert " "))
@@ -795,7 +782,7 @@ size, and full-buffer size."
       (while (not (eolp))
         ;; We have to do some folding.  First find the first
         ;; previous point suitable for folding.
-        (if (or (not (shr-find-fill-point (line-beginning-position)))
+        (if (or (not (pixel-fill-find-fill-point (line-beginning-position)))
                (= (point) start))
            ;; We had unbreakable text (for this width), so just go to
            ;; the first space and carry on.
@@ -836,84 +823,6 @@ size, and full-buffer size."
         (when (looking-at " $")
          (delete-region (point) (line-end-position)))))))
 
-(defun shr-find-fill-point (start)
-  (let ((bp (point))
-       (end (point))
-       failed)
-    (while (not (or (setq failed (<= (point) start))
-                   (eq (preceding-char) ? )
-                   (eq (following-char) ? )
-                   (shr-char-breakable-p (preceding-char))
-                   (shr-char-breakable-p (following-char))
-                   (and (shr-char-kinsoku-bol-p (preceding-char))
-                        (shr-char-breakable-p (following-char))
-                        (not (shr-char-kinsoku-bol-p (following-char))))
-                   (shr-char-kinsoku-eol-p (following-char))
-                   (bolp)))
-      (backward-char 1))
-    (if failed
-       ;; There's no breakable point, so we give it up.
-       (let (found)
-         (goto-char bp)
-          ;; Don't overflow the window edge, even if
-          ;; shr-kinsoku-shorten is nil.
-         (unless (or shr-kinsoku-shorten (null shr-width))
-           (while (setq found (re-search-forward
-                               "\\(\\c>\\)\\| \\|\\c<\\|\\c|"
-                               (line-end-position) 'move)))
-           (if (and found
-                    (not (match-beginning 1)))
-               (goto-char (match-beginning 0)))))
-      (or
-       (eolp)
-       ;; Don't put kinsoku-bol characters at the beginning of a line,
-       ;; or kinsoku-eol characters at the end of a line.
-       (cond
-        ;; Don't overflow the window edge, even if shr-kinsoku-shorten
-        ;; is nil.
-       ((or shr-kinsoku-shorten (null shr-width))
-        (while (and (not (memq (preceding-char) (list ?\C-@ ?\n ? )))
-                    (or (shr-char-kinsoku-eol-p (preceding-char))
-                         (shr-char-kinsoku-bol-p (following-char))))
-          (backward-char 1))
-        (when (setq failed (<= (point) start))
-          ;; There's no breakable point that doesn't violate kinsoku,
-          ;; so we look for the second best position.
-          (while (and (progn
-                        (forward-char 1)
-                        (<= (point) end))
-                      (progn
-                        (setq bp (point))
-                        (shr-char-kinsoku-eol-p (following-char)))))
-          (goto-char bp)))
-       ((shr-char-kinsoku-eol-p (preceding-char))
-        ;; Find backward the point where kinsoku-eol characters begin.
-        (let ((count 4))
-          (while
-              (progn
-                (backward-char 1)
-                (and (> (setq count (1- count)) 0)
-                     (not (memq (preceding-char) (list ?\C-@ ?\n ? )))
-                     (or (shr-char-kinsoku-eol-p (preceding-char))
-                         (shr-char-kinsoku-bol-p (following-char)))))))
-        (when (setq failed (<= (point) start))
-          ;; There's no breakable point that doesn't violate kinsoku,
-          ;; so we go to the second best position.
-          (if (looking-at "\\(\\c<+\\)\\c<")
-              (goto-char (match-end 1))
-            (forward-char 1))))
-       ((shr-char-kinsoku-bol-p (following-char))
-        ;; Find forward the point where kinsoku-bol characters end.
-        (let ((count 4))
-          (while (progn
-                   (forward-char 1)
-                   (and (>= (setq count (1- count)) 0)
-                        (shr-char-kinsoku-bol-p (following-char))
-                        (shr-char-breakable-p (following-char))))))))
-       (when (eq (following-char) ? )
-        (forward-char 1))))
-    (not failed)))
-
 (defun shr-parse-base (url)
   ;; Always chop off anchors.
   (when (string-match "#.*" url)
@@ -948,13 +857,13 @@ size, and full-buffer size."
          shr-base))
   (when (zerop (length url))
     (setq url nil))
-  ;; Strip leading whitespace
-  (and url (string-match "\\`\\s-+" url)
-       (setq url (substring url (match-end 0))))
+  ;; Strip leading/trailing whitespace.
+  (when url
+    (setq url (string-trim url)))
   (cond ((zerop (length url))
          (nth 3 base))
         ((or (not base)
-            (string-match "\\`[a-z]*:" url))
+            (string-match-p "\\`[a-z]*:" url))
         ;; Absolute or empty URI
         url)
        ((eq (aref url 0) ?/)
@@ -991,22 +900,6 @@ size, and full-buffer size."
               (looking-at " *$")))
        ;; We're already at a new paragraph; do nothing.
        )
-       ((and (not (bolp))
-             (save-excursion
-               (beginning-of-line)
-               (looking-at " *$"))
-            (save-excursion
-              (forward-line -1)
-              (looking-at " *$"))
-             ;; Check all chars on the current line and see whether
-             ;; they're all placeholders.
-             (cl-loop for pos from (line-beginning-position) upto (1- (point))
-                      unless (get-text-property pos 'shr-target-id)
-                      return nil
-                      finally return t))
-       ;; We have some invisible markers from <div id="foo"></div>;
-       ;; do nothing.
-       )
        ((and prefix
             (= prefix (- (point) (line-beginning-position))))
        ;; Do nothing; we're at the start of a <li>.
@@ -1139,7 +1032,7 @@ the mouse click event."
     (let ((param (match-string 4 data))
          (payload (url-unhex-string (match-string 5 data))))
       (when (and param
-                 (string-match "^.*\\(;[ \t]*base64\\)$" param))
+                 (string-match-p "^.*\\(;[ \t]*base64\\)$" param))
        (setq payload (ignore-errors
                         (base64-decode-string payload))))
       payload)))
@@ -1276,7 +1169,7 @@ Return a string with image data."
     ;; SVG images may contain references to further images that we may
     ;; want to block.  So special-case these by parsing the XML data
     ;; and remove anything that looks like a blocked bit.
-    (when (and shr-blocked-images
+    (when (and (or shr-allowed-images shr-blocked-images)
                (eq content-type 'image/svg+xml))
       (setq data
             ;; Note that libxml2 doesn't parse everything perfectly,
@@ -1455,8 +1348,7 @@ ones, in case fg and bg are nil."
        ((or (not (eq (dom-tag elem) 'image))
            ;; Filter out blocked elements inside the SVG image.
            (not (setq url (dom-attr elem ':xlink:href)))
-           (not shr-blocked-images)
-           (not (string-match shr-blocked-images url)))
+           (not (shr-image-blocked-p url)))
        (insert " ")
        (shr-dom-print elem)))))
   (insert (format "</%s>" (dom-tag dom))))
@@ -1542,9 +1434,7 @@ ones, in case fg and bg are nil."
 
 (defun shr-parse-style (style)
   (when style
-    (save-match-data
-      (when (string-match "\n" style)
-        (setq style (replace-match " " t t style))))
+    (setq style (replace-regexp-in-string "\n" " " style))
     (let ((plist nil))
       (dolist (elem (split-string style ";"))
        (when elem
@@ -1573,13 +1463,9 @@ ones, in case fg and bg are nil."
        (start (point))
        shr-start)
     (shr-generic dom)
-    (when-let* ((id (unless (dom-attr dom 'id) ; Handled by `shr-descend'.
-                      (dom-attr dom 'name))))  ; Obsolete since HTML5.
-      ;; We have an empty element, so just insert... something.
-      (when (= start (point))
-        (insert ?\s)
-        (put-text-property (1- (point)) (point) 'display ""))
-      (put-text-property start (1+ start) 'shr-target-id id))
+    (when-let* ((id (and (not (dom-attr dom 'id)) ; Handled by `shr-descend'.
+                         (dom-attr dom 'name)))) ; Obsolete since HTML5.
+      (push (cons id (point)) shr--link-targets))
     (when url
       (shr-urlify (or shr-start start) (shr-expand-url url) title))))
 
@@ -1602,7 +1488,7 @@ ones, in case fg and bg are nil."
     (let ((start (point))
          url multimedia image)
       (when-let* ((type (dom-attr dom 'type)))
-       (when (string-match "\\`image/svg" type)
+       (when (string-match-p "\\`image/svg" type)
          (setq url (dom-attr dom 'data)
                image t)))
       (dolist (child (dom-non-text-children dom))
@@ -1764,8 +1650,7 @@ The preference is a float determined from 
`shr-prefer-media-type'."
              (funcall shr-put-image-function image alt
                        (list :width width :height height)))))
         ((or shr-inhibit-images
-             (and shr-blocked-images
-                  (string-match shr-blocked-images url)))
+             (shr-image-blocked-p url))
          (setq shr-start (point))
           (shr-insert alt))
         ((and (not shr-ignore-cache)
@@ -2077,7 +1962,8 @@ BASE is the URL of the HTML being rendered."
   (setq dom (or (dom-child-by-tag dom 'tbody) dom))
   (let* ((shr-inhibit-images t)
         (shr-table-depth (1+ shr-table-depth))
-        (shr-kinsoku-shorten t)
+         ;; Fill hard in CJK languages.
+        (pixel-fill-respect-kinsoku nil)
         ;; Find all suggested widths.
         (columns (shr-column-specs dom))
         ;; Compute how many pixels wide each TD should be.
@@ -2571,9 +2457,10 @@ flags that control whether to collect or render objects."
          (style (dom-attr dom 'style))
          (shr-stylesheet shr-stylesheet)
          (max-width 0)
+          (shr--link-targets nil)
          natural-width)
       (when style
-       (setq style (and (string-match "color" style)
+       (setq style (and (string-search "color" style)
                         (shr-parse-style style))))
       (when bgcolor
        (setq style (nconc (list (cons 'background-color bgcolor))
@@ -2612,6 +2499,7 @@ flags that control whether to collect or render objects."
         (end-of-line)
         (point)))
       (goto-char (point-min))
+      (shr--set-target-ids shr--link-targets)
       (list max-width
            natural-width
            (count-lines (point-min) (point-max))
diff --git a/lisp/net/sieve-manage.el b/lisp/net/sieve-manage.el
index 64544bcf15..50342b9105 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <simon@josefsson.org>
 ;;         Albert Krewinkel <tarleb@moltkeplatz.de>
@@ -79,6 +79,7 @@
 (require 'sasl)
 (autoload 'sasl-find-mechanism "sasl")
 (autoload 'auth-source-search "auth-source")
+(autoload 'auth-info-password "auth-source")
 
 ;; User customizable variables:
 
@@ -230,10 +231,7 @@ Return the buffer associated with the connection."
                                           :max 1
                                           :create t))
            (user-name (or (plist-get (nth 0 auth-info) :user) ""))
-           (user-password (or (plist-get (nth 0 auth-info) :secret) ""))
-           (user-password (if (functionp user-password)
-                              (funcall user-password)
-                            user-password))
+           (user-password (or (auth-info-password (nth 0 auth-info)) ""))
            (client (sasl-make-client (sasl-find-mechanism (list mech))
                                      user-name "sieve" sieve-manage-server))
            (sasl-read-passphrase
diff --git a/lisp/net/sieve-mode.el b/lisp/net/sieve-mode.el
index 70cebd3039..58fd41d899 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <simon@josefsson.org>
 
diff --git a/lisp/net/sieve.el b/lisp/net/sieve.el
index 99bc0a7acd..630ea04070 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 10892ebf61..de84b4f8dd 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1998, 2001-2022 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 b4aed27981..d2092633d8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
 
 ;; Author: Alexandru Harsanyi <AlexHarsanyi@gmail.com>
 ;; Author: Thomas Fitzsimmons <fitzsim@fitzsim.org>
@@ -718,10 +718,9 @@ representing leap seconds."
                 second)
               minute hour day month year second-fraction datatype time-zone)
       (let ((time
-             (apply
-              #'encode-time (list
-                             (if new-decode-time new-decode-time-second second)
-                             minute hour day month year nil nil time-zone))))
+            (encode-time (list
+                          (if new-decode-time new-decode-time-second second)
+                          minute hour day month year nil nil time-zone))))
         (if new-decode-time
             (with-no-warnings (decode-time time nil t))
           (decode-time time))))))
diff --git a/lisp/net/soap-inspect.el b/lisp/net/soap-inspect.el
index eca338eb22..85fd7a71dc 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 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 be299603a8..8df0773e1d 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-2021 Free Software Foundation,
+;; Copyright (C) 1996-2000, 2002, 2007-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: William M. Perry <wmperry@gnu.org>
diff --git a/lisp/net/telnet.el b/lisp/net/telnet.el
index 1cf07a5cce..0d54d2220b 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, 1988, 1992, 1994, 2001-2021 Free Software
+;; Copyright (C) 1985, 1988, 1992, 1994, 2001-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Author: William F. Schelter
diff --git a/lisp/net/tramp-adb.el b/lisp/net/tramp-adb.el
index 341357d404..ed73a86ef0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
 ;; Author: Jürgen Hötzel <juergen@archlinux.org>
 ;; Keywords: comm, processes
@@ -415,6 +415,8 @@ Emacs dired can't find files."
 (defun tramp-adb-ls-output-time-less-p (a b)
   "Sort \"ls\" output by time, descending."
   (let (time-a time-b)
+    ;; Once we can assume Emacs 27 or later, the two calls
+    ;; (apply #'encode-time X) can be replaced by (encode-time X).
     (string-match tramp-adb-ls-date-regexp a)
     (setq time-a (apply #'encode-time (parse-time-string (match-string 0 a))))
     (string-match tramp-adb-ls-date-regexp b)
diff --git a/lisp/net/tramp-archive.el b/lisp/net/tramp-archive.el
index efd38e6b4b..8a88057d38 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 ;; Keywords: comm, processes
@@ -54,6 +54,7 @@
 ;; * ".ar" - UNIX archiver formats
 ;; * ".cab", ".CAB" - Microsoft Windows cabinets
 ;; * ".cpio" - CPIO archives
+;; * ".crate" - Cargo (Rust) packages
 ;; * ".deb" - Debian packages
 ;; * ".depot" - HP-UX SD depots
 ;; * ".exe" - Self extracting Microsoft Windows EXE files
@@ -103,7 +104,7 @@
 ;; It is even possible to access file archives in file archives, as
 
 ;;   (find-file
-;;    
"http://ftp.debian.org/debian/pool/main/c/coreutils/coreutils_8.28-1_amd64.deb/control.tar.gz/control";)
+;;    
"https://ftp.debian.org/debian/pool/main/c/coreutils/coreutils_8.28-1_amd64.deb/control.tar.gz/control";)
 
 ;;; Code:
 
@@ -141,6 +142,7 @@
     "ar" ;; UNIX archiver formats.
     "cab" "CAB" ;; Microsoft Windows cabinets.
     "cpio" ;; CPIO archives.
+    "crate" ;; Cargo (Rust) packages.  Not in libarchive testsuite.
     "deb" ;; Debian packages.  Not in libarchive testsuite.
     "depot" ;; HP-UX SD depot.  Not in libarchive testsuite.
     "exe" ;; Self extracting Microsoft Windows EXE files.
@@ -573,9 +575,8 @@ offered."
    preserve-uid-gid preserve-extended-attributes)
   "Like `copy-file' for file archives."
   (when (tramp-archive-file-name-p newname)
-    (tramp-error
-     (tramp-archive-dissect-file-name newname) 'file-error
-      "Permission denied: %s" newname))
+    (tramp-compat-permission-denied
+     (tramp-archive-dissect-file-name newname) newname))
   (copy-file
    (tramp-archive-gvfs-file-name filename) newname ok-if-already-exists
    keep-date preserve-uid-gid preserve-extended-attributes))
diff --git a/lisp/net/tramp-cache.el b/lisp/net/tramp-cache.el
index f2be297d59..715b537247 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2005-2022 Free Software Foundation, Inc.
 
 ;; Author: Daniel Pittman <daniel@inanna.danann.net>
 ;;         Michael Albinus <michael.albinus@gmx.de>
@@ -49,8 +49,6 @@
 ;;   an open connection.  Examples: "scripts" keeps shell script
 ;;   definitions already sent to the remote shell, "last-cmd-time" is
 ;;   the time stamp a command has been sent to the remote process.
-;;   "lock-pid" is the timestamp a (network) process is created, it is
-;;   used instead of the pid in file locks.
 ;;
 ;; - The key is nil.  These are temporary properties related to the
 ;;   local machine.  Examples: "parse-passwd" and "parse-group" keep
diff --git a/lisp/net/tramp-cmds.el b/lisp/net/tramp-cmds.el
index 63eab1b31a..c18ab4972d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 ;; Keywords: comm, processes
@@ -67,7 +67,7 @@ SYNTAX can be one of the symbols `default' (default),
    nil
    (mapcar
     (lambda (x)
-      (with-current-buffer x (when (tramp-tramp-file-p default-directory) x)))
+      (when (tramp-tramp-file-p (tramp-get-default-directory x)) x))
     (buffer-list))))
 
 ;;;###tramp-autoload
@@ -593,9 +593,8 @@ buffer in your bug report.
 
 (defun tramp-reporter-dump-variable (varsym mailbuf)
   "Pretty-print the value of the variable in symbol VARSYM."
-  (let* ((reporter-eval-buffer (symbol-value 'reporter-eval-buffer))
-        (val (with-current-buffer reporter-eval-buffer
-               (symbol-value varsym))))
+  (when-let ((reporter-eval-buffer reporter-eval-buffer)
+            (val (buffer-local-value varsym reporter-eval-buffer)))
 
     (if (hash-table-p val)
        ;; Pretty print the cache.
diff --git a/lisp/net/tramp-compat.el b/lisp/net/tramp-compat.el
index 627ff1edae..db7e7d67c4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 ;; Keywords: comm, processes
@@ -272,6 +272,27 @@ CONDITION can also be a list of error conditions."
                          (car components))
                 (cdr components)))))))
 
+;; `permission-denied' is introduced in Emacs 29.1.
+(defconst tramp-permission-denied
+  (if (get 'permission-denied 'error-conditions) 'permission-denied 
'file-error)
+  "The error symbol for the `permission-denied' error.")
+
+(defsubst tramp-compat-permission-denied (vec file)
+  "Emit the `permission-denied' error."
+  (if (get 'permission-denied 'error-conditions)
+      (tramp-error vec tramp-permission-denied file)
+    (tramp-error vec tramp-permission-denied "Permission denied: %s" file)))
+
+;; Function `auth-info-password' is new in Emacs 29.1.
+(defalias 'tramp-compat-auth-info-password
+  (if (fboundp 'auth-info-password)
+      #'auth-info-password
+    (lambda (auth-info)
+      (let ((secret (plist-get auth-info :secret)))
+       (while (functionp secret)
+          (setq secret (funcall secret)))
+       secret))))
+
 (dolist (elt (all-completions "tramp-compat-" obarray 'functionp))
   (put (intern elt) 'tramp-suppress-trace t))
 
diff --git a/lisp/net/tramp-crypt.el b/lisp/net/tramp-crypt.el
index 4ff8e6bbf1..36443e0983 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 ;; Keywords: comm, processes
@@ -323,7 +323,7 @@ connection if a previous connection has died for some 
reason."
           tramp-crypt-encfs-config (tramp-crypt-get-remote-dir vec)))
         (local-config (tramp-crypt-config-file-name vec)))
     ;; There is no local encfs6 config file.
-    (when (not (file-exists-p local-config))
+    (unless (file-exists-p local-config)
       (if (and tramp-crypt-save-encfs-config-remote
               (file-exists-p remote-config))
          ;; Copy remote encfs6 config file if possible.
diff --git a/lisp/net/tramp-ftp.el b/lisp/net/tramp-ftp.el
index f78c08ec41..ff8caa570c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 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 cb270be68f..2a73d5aa02 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 ab71c9cd13..221ee547a2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 ;; Keywords: comm, processes
@@ -1456,7 +1456,7 @@ If FILE-SYSTEM is non-nil, return file system attributes."
 `file-notify' events."
   (let* ((events (process-get proc 'events))
         (rest-string (process-get proc 'rest-string))
-        (dd (with-current-buffer (process-buffer proc) default-directory))
+        (dd (tramp-get-default-directory (process-buffer proc)))
         (ddu (regexp-quote (tramp-gvfs-url-file-name dd))))
     (when rest-string
       (tramp-message proc 10 "Previous string:\n%s" rest-string))
@@ -1521,11 +1521,13 @@ If FILE-SYSTEM is non-nil, return file system 
attributes."
           (size (cdr (assoc "filesystem::size" attr)))
           (used (cdr (assoc "filesystem::used" attr)))
           (free (cdr (assoc "filesystem::free" attr))))
-      (when (or size used free)
-       (list (string-to-number (or size "0"))
-             (string-to-number (or free "0"))
-             (- (string-to-number (or size "0"))
-                (string-to-number (or used "0"))))))))
+      (when (or size free)
+       (list (and size (string-to-number size))
+             (and free (string-to-number free))
+             ;; "mtp" connections do not return "filesystem::used".
+             (or (and size used
+                      (- (string-to-number size) (string-to-number used)))
+                 (and free (string-to-number free))))))))
 
 (defun tramp-gvfs-handle-make-directory (dir &optional parents)
   "Like `make-directory' for Tramp files."
@@ -1595,7 +1597,7 @@ If FILE-SYSTEM is non-nil, return file system attributes."
       "%s" (if (or (null time)
                   (tramp-compat-time-equal-p time tramp-time-doesnt-exist)
                   (tramp-compat-time-equal-p time tramp-time-dont-know))
-              (current-time)
+              nil
             time)))))
 
 (defun tramp-gvfs-handle-get-remote-uid (vec id-format)
@@ -2125,9 +2127,6 @@ connection if a previous connection has died for some 
reason."
       (process-put p 'vector vec)
       (set-process-query-on-exit-flag p nil)
 
-      ;; Mark process for filelock.
-      (tramp-set-connection-property p "lock-pid" (truncate (time-to-seconds)))
-
       ;; Set connection-local variables.
       (tramp-set-connection-local-variables vec)))
 
diff --git a/lisp/net/tramp-integration.el b/lisp/net/tramp-integration.el
index 238abd3423..03a2c2457a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 09862c6a04..259e85a04a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 ;; Keywords: comm, processes
@@ -368,10 +368,6 @@ connection if a previous connection has died for some 
reason."
          (process-put p 'vector vec)
          (set-process-query-on-exit-flag p nil)
 
-         ;; Mark process for filelock.
-         (tramp-set-connection-property
-          p "lock-pid" (truncate (time-to-seconds)))
-
          ;; Set connection-local variables.
          (tramp-set-connection-local-variables vec)))
 
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index b83569f3de..72b1ebb3e0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
 
 ;; (copyright statements below in code to be updated with the above notice)
 
@@ -741,7 +741,7 @@ characters need to be doubled.")
 (defconst tramp-perl-encode
   "%p -e '
 # This script contributed by Juanma Barranquero <lektu@terra.es>.
-# Copyright (C) 2002-2021 Free Software Foundation, Inc.
+# Copyright (C) 2002-2022 Free Software Foundation, Inc.
 use strict;
 
 my %%trans = do {
@@ -780,7 +780,7 @@ characters need to be doubled.")
 (defconst tramp-perl-decode
   "%p -e '
 # This script contributed by Juanma Barranquero <lektu@terra.es>.
-# Copyright (C) 2002-2021 Free Software Foundation, Inc.
+# Copyright (C) 2002-2022 Free Software Foundation, Inc.
 use strict;
 
 my %%trans = do {
@@ -1429,7 +1429,7 @@ of."
             (if (or (null time)
                     (tramp-compat-time-equal-p time tramp-time-doesnt-exist)
                     (tramp-compat-time-equal-p time tramp-time-dont-know))
-                (current-time)
+                nil
               time)))
        (tramp-send-command-and-check
         v (format
@@ -2601,7 +2601,7 @@ The method used must be an out-of-band method."
        ;; We cannot use `insert-buffer-substring' because the Tramp
        ;; buffer changes its contents before insertion due to calling
        ;; `expand-file-name' and alike.
-       (insert (with-current-buffer (tramp-get-buffer v) (buffer-string)))
+       (insert (tramp-get-buffer-string (tramp-get-buffer v)))
 
        ;; We must enable unibyte strings, because the "--dired"
        ;; output counts in bytes.
@@ -3160,8 +3160,7 @@ implementation will be used."
            (when outbuf
              (with-current-buffer outbuf
                 (insert
-                 (with-current-buffer (tramp-get-connection-buffer v)
-                   (buffer-string))))
+                (tramp-get-buffer-string (tramp-get-connection-buffer v))))
              (when (and display (get-buffer-window outbuf t)) (redisplay))))
        ;; When the user did interrupt, we should do it also.  We use
        ;; return code -1 as marker.
@@ -3475,8 +3474,7 @@ implementation will be used."
                         (not
                          (string-equal
                           (buffer-string)
-                          (with-current-buffer (tramp-get-buffer v)
-                            (buffer-string))))
+                          (tramp-get-buffer-string (tramp-get-buffer v))))
                         (tramp-error
                          v 'file-error
                          (concat "Couldn't write region to `%s',"
@@ -3770,8 +3768,7 @@ Fall back to normal file name handler if no Tramp handler 
exists."
   "Read output from \"gio monitor\" and add corresponding `file-notify' 
events."
   (let ((events (process-get proc 'events))
        (remote-prefix
-        (with-current-buffer (process-buffer proc)
-          (file-remote-p default-directory)))
+        (file-remote-p (tramp-get-default-directory (process-buffer proc))))
        (rest-string (process-get proc 'rest-string))
        pos)
     (when rest-string
@@ -4600,6 +4597,8 @@ Goes through the list `tramp-local-coding-commands' and
                          (value (symbol-value rem-enc)))
                      (while (string-match "-" name)
                        (setq name (replace-match "_" nil t name)))
+                     (unless (tramp-expand-script vec value)
+                       (throw 'wont-work-remote nil))
                      (tramp-maybe-send-script vec value name)
                      (setq rem-enc name)))
                  (tramp-message
@@ -4617,6 +4616,8 @@ Goes through the list `tramp-local-coding-commands' and
                          (value (symbol-value rem-dec)))
                      (while (string-match "-" name)
                        (setq name (replace-match "_" nil t name)))
+                     (unless (tramp-expand-script vec value)
+                       (throw 'wont-work-remote nil))
                      (tramp-maybe-send-script vec value name)
                      (setq rem-dec name)))
                  (tramp-message
@@ -6022,5 +6023,8 @@ function cell is returned to be applied on a buffer."
 ;;   be to stipulate, as a directory or connection-local variable, an
 ;;   additional rc file on the remote machine that is sourced every
 ;;   time Tramp connects.  <https://emacs.stackexchange.com/questions/62306>
+;;
+;; * Support hostname canonicalization in ~/.ssh/config.
+;;   <https://stackoverflow.com/questions/70205232/>
 
 ;;; tramp-sh.el ends here
diff --git a/lisp/net/tramp-smb.el b/lisp/net/tramp-smb.el
index 24119539db..c5f423fa3f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 ;; Keywords: comm, processes
@@ -1436,9 +1436,9 @@ component is used as the target of the symlink."
   (unless (process-live-p proc)
     ;; Accept pending output.
     (while (tramp-accept-process-output proc))
-    (with-current-buffer (tramp-get-connection-buffer vec)
-      (tramp-message vec 10 "\n%s" (buffer-string))
-      (throw 'tramp-action 'ok))))
+    (tramp-message
+     vec 10 "\n%s" (tramp-get-buffer-string (tramp-get-connection-buffer vec)))
+    (throw 'tramp-action 'ok)))
 
 (defun tramp-smb-handle-set-file-acl (filename acl-string)
   "Like `set-file-acl' for Tramp files."
diff --git a/lisp/net/tramp-sshfs.el b/lisp/net/tramp-sshfs.el
index a19c99316e..0a5bf2f43b 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 ;; Keywords: comm, processes
@@ -345,9 +345,6 @@ connection if a previous connection has died for some 
reason."
       (process-put p 'vector vec)
       (set-process-query-on-exit-flag p nil)
 
-      ;; Mark process for filelock.
-      (tramp-set-connection-property p "lock-pid" (truncate (time-to-seconds)))
-
       ;; Set connection-local variables.
       (tramp-set-connection-local-variables vec)))
 
diff --git a/lisp/net/tramp-sudoedit.el b/lisp/net/tramp-sudoedit.el
index c91bced656..a68d4b3e36 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 ;; Keywords: comm, processes
@@ -336,7 +336,7 @@ absolute file names."
     (if (and delete-by-moving-to-trash trash)
        (move-file-to-trash filename)
       (unless (tramp-sudoedit-send-command
-              v "rm" (tramp-compat-file-name-unquote localname))
+              v "rm" "-f" (tramp-compat-file-name-unquote localname))
        ;; Propagate the error.
        (with-current-buffer (tramp-get-connection-buffer v)
          (goto-char (point-min))
@@ -453,12 +453,13 @@ the result will be a local, non-Tramp, file name."
          (if (file-directory-p (expand-file-name f directory))
              (file-name-as-directory f)
            f))
-       (with-current-buffer (tramp-get-connection-buffer v)
-         (delq
-          nil
-          (mapcar
-           (lambda (l) (and (not (string-match-p "^[[:space:]]*$" l)) l))
-           (split-string (buffer-string) "\n" 'omit)))))))))
+       (delq
+        nil
+        (mapcar
+         (lambda (l) (and (not (string-match-p "^[[:space:]]*$" l)) l))
+         (split-string
+          (tramp-get-buffer-string (tramp-get-connection-buffer v))
+          "\n" 'omit))))))))
 
 (defun tramp-sudoedit-handle-file-readable-p (filename)
   "Like `file-readable-p' for Tramp files."
@@ -534,7 +535,7 @@ the result will be a local, non-Tramp, file name."
           (if (or (null time)
                   (tramp-compat-time-equal-p time tramp-time-doesnt-exist)
                   (tramp-compat-time-equal-p time tramp-time-dont-know))
-              (current-time)
+              nil
             time)))
       (tramp-sudoedit-send-command
        v "env" "TZ=UTC" "touch" "-t"
@@ -787,9 +788,6 @@ connection if a previous connection has died for some 
reason."
       (process-put p 'vector vec)
       (set-process-query-on-exit-flag p nil)
 
-      ;; Mark process for filelock.
-      (tramp-set-connection-property p "lock-pid" (truncate (time-to-seconds)))
-
       ;; Set connection-local variables.
       (tramp-set-connection-local-variables vec)
 
diff --git a/lisp/net/tramp-uu.el b/lisp/net/tramp-uu.el
index 5171b9d181..e849c36d13 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 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 f43c1d84b8..7d6157ed8c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
 
 ;; Author: Kai Großjohann <kai.grossjohann@gmx.net>
 ;;         Michael Albinus <michael.albinus@gmx.de>
@@ -1866,6 +1866,21 @@ version, the function does nothing."
        :user        ,(file-remote-p default-directory 'user)
        :machine     ,(file-remote-p default-directory 'host)))))
 
+(defsubst tramp-get-default-directory (buffer)
+  "Return `default-directory' of BUFFER."
+  (buffer-local-value 'default-directory buffer))
+
+(put #'tramp-get-default-directory 'tramp-suppress-trace t)
+
+(defsubst tramp-get-buffer-string (&optional buffer)
+  "Return contents of BUFFER.
+If BUFFER is not a buffer or a buffer name, return the contents
+of `current-buffer'."
+  (with-current-buffer (or buffer (current-buffer))
+    (substring-no-properties (buffer-string))))
+
+(put #'tramp-get-buffer-string 'tramp-suppress-trace t)
+
 (defun tramp-debug-buffer-name (vec)
   "A name for the debug buffer for VEC."
   (let ((method (tramp-file-name-method vec))
@@ -2014,9 +2029,7 @@ ARGUMENTS to actually emit the message (if applicable)."
        (unless (bolp)
          (insert "\n"))
        ;; Timestamp.
-       (let ((now (current-time)))
-         (insert (format-time-string "%T." now))
-         (insert (format "%06d " (nth 2 now))))
+       (insert (format-time-string "%T.%6N "))
        ;; Calling Tramp function.  We suppress compat and trace
        ;; functions from being displayed.
        (let ((btn 1) btf fn)
@@ -2086,12 +2099,15 @@ applicable)."
          ;; Append connection buffer for error messages, if exists.
          (when (= level 1)
            (ignore-errors
-             (with-current-buffer
-                 (if (processp vec-or-proc)
-                     (process-buffer vec-or-proc)
-                   (tramp-get-connection-buffer vec-or-proc 'dont-create))
-               (setq fmt-string (concat fmt-string "\n%s")
-                     arguments (append arguments (list (buffer-string)))))))
+             (setq fmt-string (concat fmt-string "\n%s")
+                   arguments
+                   (append
+                    arguments
+                    `(,(tramp-get-buffer-string
+                        (if (processp vec-or-proc)
+                            (process-buffer vec-or-proc)
+                          (tramp-get-connection-buffer
+                           vec-or-proc 'dont-create))))))))
          ;; Translate proc to vec.
          (when (processp vec-or-proc)
            (setq vec-or-proc (process-get vec-or-proc 'vector))))
@@ -2153,8 +2169,8 @@ an input event arrives.  The other arguments are passed 
to `tramp-error'."
                    (and (tramp-file-name-p vec-or-proc)
                         (tramp-get-connection-buffer vec-or-proc))))
           (vec (or (and (tramp-file-name-p vec-or-proc) vec-or-proc)
-                   (and buf (with-current-buffer buf
-                              (tramp-dissect-file-name default-directory))))))
+                   (and buf (tramp-dissect-file-name
+                             (tramp-get-default-directory buf))))))
       (unwind-protect
          (apply #'tramp-error vec-or-proc signal fmt-string arguments)
        ;; Save exit.
@@ -2218,10 +2234,14 @@ the resulting error message."
 
 (defun tramp-test-message (fmt-string &rest arguments)
   "Emit a Tramp message according `default-directory'."
-  (if (tramp-tramp-file-p default-directory)
-      (apply #'tramp-message
-            (tramp-dissect-file-name default-directory) 0 fmt-string arguments)
-    (apply #'message fmt-string arguments)))
+  (cond
+   ((tramp-tramp-file-p default-directory)
+    (apply #'tramp-message
+          (tramp-dissect-file-name default-directory) 0 fmt-string arguments))
+   ((tramp-file-name-p (car tramp-current-connection))
+    (apply #'tramp-message
+          (car tramp-current-connection) 0 fmt-string arguments))
+   (t (apply #'message fmt-string arguments))))
 
 (put #'tramp-test-message 'tramp-suppress-trace t)
 
@@ -2569,8 +2589,7 @@ Must be handled by the callers."
    ;; PROC.
    ((member operation '(file-notify-rm-watch file-notify-valid-p))
     (when (processp (nth 0 args))
-      (with-current-buffer (process-buffer (nth 0 args))
-       default-directory)))
+      (tramp-get-default-directory (process-buffer (nth 0 args)))))
    ;; VEC.
    ((member operation '(tramp-get-remote-gid tramp-get-remote-uid))
     (tramp-make-tramp-file-name (nth 0 args)))
@@ -2847,7 +2866,7 @@ whether HANDLER is to be called.  Add operations defined 
in
 (defun tramp-command-completion-p (_symbol buffer)
   "A predicate for Tramp interactive commands.
 They are completed by \"M-x TAB\" only if the current buffer is remote."
-  (with-current-buffer buffer (tramp-tramp-file-p default-directory)))
+  (tramp-tramp-file-p (tramp-get-default-directory buffer)))
 
 (defun tramp-connectable-p (vec-or-filename)
   "Check, whether it is possible to connect the remote host w/o side-effects.
@@ -3344,8 +3363,8 @@ User is always nil."
             (if (file-directory-p filename)
                 #'file-accessible-directory-p #'file-readable-p)
             filename)
-         (tramp-error
-          v 'file-error (format "%s: Permission denied, %s" string filename)))
+         (tramp-compat-permission-denied
+          v (format "%s: Permission denied, %s" string filename)))
       (tramp-error
        v 'file-missing
        (format "%s: No such file or directory, %s" string filename)))))
@@ -3944,16 +3963,19 @@ Return nil when there is no lockfile."
               (insert-file-contents-literally lockname)
               (buffer-string))))))
 
+(defvar tramp-lock-pid nil
+  "A random nunber local for every connection.
+Do not set it manually, it is used buffer-local in `tramp-get-lock-pid'.")
+
 (defun tramp-get-lock-pid (file)
   "Determine pid for lockfile of FILE."
-  ;; Some Tramp methods do not offer a connection process, but just a
-  ;; network process as a place holder.  Those processes use the
-  ;; "lock-pid" connection property as fake pid, in fact it is the
-  ;; time stamp the process is created.
-  (let ((p (tramp-get-process  (tramp-dissect-file-name file))))
-    (number-to-string
-     (or (process-id p)
-        (tramp-get-connection-property p "lock-pid" (emacs-pid))))))
+  ;; Not all Tramp methods use an own process.  So we use a random
+  ;; number, which is as good as a process id.
+  (with-current-buffer
+      (tramp-get-connection-buffer (tramp-dissect-file-name file))
+    (or tramp-lock-pid
+       (setq-local
+        tramp-lock-pid (number-to-string (random most-positive-fixnum))))))
 
 (defconst tramp-lock-file-info-regexp
   ;; USER@HOST.PID[:BOOT_TIME]
@@ -3964,9 +3986,11 @@ Return nil when there is no lockfile."
   "Like `file-locked-p' for Tramp files."
   (when-let ((info (tramp-get-lock-file file))
             (match (string-match tramp-lock-file-info-regexp info)))
-    (or (and (string-equal (match-string 1 info) (user-login-name))
+    (or ; Locked by me.
+        (and (string-equal (match-string 1 info) (user-login-name))
             (string-equal (match-string 2 info) (system-name))
             (string-equal (match-string 3 info) (tramp-get-lock-pid file)))
+       ; User name.
        (match-string 1 info))))
 
 (defun tramp-handle-lock-file (file)
@@ -4707,8 +4731,8 @@ of."
                    (save-window-excursion
                      (pop-to-buffer (tramp-get-connection-buffer vec))
                      (read-string (match-string 0)))))))
-    (with-current-buffer (tramp-get-connection-buffer vec)
-      (tramp-message vec 6 "\n%s" (buffer-string)))
+    (tramp-message
+     vec 6 "\n%s" (tramp-get-buffer-string (tramp-get-connection-buffer vec)))
     (tramp-message vec 3 "Sending login name `%s'" user)
     (tramp-send-string vec (concat user tramp-local-end-of-line)))
   t)
@@ -4751,8 +4775,8 @@ See also `tramp-action-yn'."
     (unless (yes-or-no-p (match-string 0))
       (kill-process proc)
       (throw 'tramp-action 'permission-denied))
-    (with-current-buffer (tramp-get-connection-buffer vec)
-      (tramp-message vec 6 "\n%s" (buffer-string)))
+    (tramp-message
+     vec 6 "\n%s" (tramp-get-buffer-string (tramp-get-connection-buffer vec)))
     (tramp-send-string vec (concat "yes" tramp-local-end-of-line)))
   t)
 
@@ -4765,8 +4789,8 @@ See also `tramp-action-yesno'."
     (unless (y-or-n-p (match-string 0))
       (kill-process proc)
       (throw 'tramp-action 'permission-denied))
-    (with-current-buffer (tramp-get-connection-buffer vec)
-      (tramp-message vec 6 "\n%s" (buffer-string)))
+    (tramp-message
+     vec 6 "\n%s" (tramp-get-buffer-string (tramp-get-connection-buffer vec)))
     (tramp-send-string vec (concat "y" tramp-local-end-of-line)))
   t)
 
@@ -4774,15 +4798,15 @@ See also `tramp-action-yesno'."
   "Tell the remote host which terminal type to use.
 The terminal type can be configured with `tramp-terminal-type'."
   (tramp-message vec 5 "Setting `%s' as terminal type." tramp-terminal-type)
-  (with-current-buffer (tramp-get-connection-buffer vec)
-    (tramp-message vec 6 "\n%s" (buffer-string)))
+  (tramp-message
+   vec 6 "\n%s" (tramp-get-buffer-string (tramp-get-connection-buffer vec)))
   (tramp-send-string vec (concat tramp-terminal-type tramp-local-end-of-line))
   t)
 
 (defun tramp-action-confirm-message (_proc vec)
   "Return RET in order to confirm the message."
-  (with-current-buffer (tramp-get-connection-buffer vec)
-    (tramp-message vec 6 "\n%s" (buffer-string)))
+  (tramp-message
+   vec 6 "\n%s" (tramp-get-buffer-string (tramp-get-connection-buffer vec)))
   (tramp-send-string vec tramp-local-end-of-line)
   t)
 
@@ -5070,8 +5094,8 @@ nil."
     ;; The process could have timed out, for example due to session
     ;; timeout of sudo.  The process buffer does not exist any longer then.
     (ignore-errors
-      (with-current-buffer (process-buffer proc)
-       (tramp-message proc 6 "\n%s" (buffer-string))))
+      (tramp-message
+       proc 6 "\n%s" (tramp-get-buffer-string (process-buffer proc))))
     (unless found
       (if timeout
          (tramp-error
@@ -5592,14 +5616,12 @@ are written with verbosity of 6."
        (with-temp-buffer
          (setq result
                (apply
-                #'call-process program infile (or destination t) display args))
+                #'call-process program infile (or destination t) display args)
+               output (tramp-get-buffer-string destination))
          ;; `result' could also be an error string.
          (when (stringp result)
            (setq error result
-                 result 1))
-         (with-current-buffer
-             (if (bufferp destination) destination (current-buffer))
-           (setq output (buffer-string))))
+                 result 1)))
       (error
        (setq error (error-message-string err)
             result 1)))
@@ -5630,10 +5652,10 @@ are written with verbosity of 6."
          ;; `result' could also be an error string.
          (when (stringp result)
            (signal 'file-error (list result)))
-         (with-current-buffer (if (bufferp buffer) buffer (current-buffer))
-            (if (zerop result)
-                (tramp-message vec 6 "%d" result)
-              (tramp-message vec 6 "%d\n%s" result (buffer-string)))))
+          (if (zerop result)
+              (tramp-message vec 6 "%d" result)
+            (tramp-message
+            vec 6 "%d\n%s" result (tramp-get-buffer-string buffer))))
       (error
        (setq result 1)
        (tramp-message vec 6 "%d\n%s" result (error-message-string err))))
@@ -5698,7 +5720,7 @@ Invokes `password-read' if available, `read-passwd' else."
                (format "%s for %s " (capitalize (match-string 1)) key))))
         (auth-source-creation-prompts `((secret . ,pw-prompt)))
         ;; Use connection-local value.
-        (auth-sources (with-current-buffer (process-buffer proc) auth-sources))
+        (auth-sources (buffer-local-value 'auth-sources (process-buffer proc)))
         ;; We suspend the timers while reading the password.
          (stimers (with-timeout-suspend))
         auth-info auth-passwd)
@@ -5734,10 +5756,8 @@ Invokes `password-read' if available, `read-passwd' 
else."
                              :create t))
                            tramp-password-save-function
                            (plist-get auth-info :save-function)
-                           auth-passwd (plist-get auth-info :secret)))
-                (while (functionp auth-passwd)
-                  (setq auth-passwd (funcall auth-passwd)))
-                auth-passwd)
+                           auth-passwd
+                           (tramp-compat-auth-info-password auth-info))))
 
               ;; Try the password cache.
               (progn
@@ -5924,5 +5944,11 @@ BODY is the backend specific code."
 ;;   and friends, for most of the handlers this is the major
 ;;   difference between the different backends.  Other handlers but
 ;;   *-process-file would profit from this as well.
+;;
+;; * Implement file name abbreviation for a different user.  That is,
+;;   (abbreviate-file-name "/ssh:user1@host:/home/user2") =>
+;;   "/ssh:user1@host:~user2".
+;;
+;; * Implement file name abbreviation for user and host names.
 
 ;;; tramp.el ends here
diff --git a/lisp/net/trampver.el b/lisp/net/trampver.el
index 226e9a34de..e3bcd568d7 100644
--- a/lisp/net/trampver.el
+++ b/lisp/net/trampver.el
@@ -1,7 +1,7 @@
 ;;; trampver.el --- Transparent Remote Access, Multiple Protocol  -*- 
lexical-binding:t -*-
 ;;; lisp/trampver.el.  Generated from trampver.el.in by configure.
 
-;; Copyright (C) 2003-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
 
 ;; Author: Kai Großjohann <kai.grossjohann@gmx.net>
 ;; Maintainer: Michael Albinus <michael.albinus@gmx.de>
@@ -101,7 +101,8 @@
         ("2.2.13.25.2" . "25.3")
          ("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.4.3.27.1" . "27.1") ("2.4.5.27.2" . "27.2")
+         ("2.5.2.28.1" . "28.1")))
 
 (add-hook 'tramp-unload-hook
          (lambda ()
diff --git a/lisp/net/webjump.el b/lisp/net/webjump.el
index d14d382aac..b2ef47898c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1997, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author:     Neil W. Van Dyke <nwv@acm.org>
 ;; Maintainer: emacs-devel@gnu.org
@@ -61,6 +61,13 @@
 
 ;;; Code:
 
+;; TODO:
+;; - Add a menu bar and tool bar for this library.
+;; - Add commands to create/delete link from the hotlist.
+;; - Add something like a bookmark folder in modern browsers.
+;;    - Add a command that can open/follow all links in a folder.
+;; - Add tags for Web sites in the hotlist.
+
 ;;-------------------------------------------------------- Package Dependencies
 
 (require 'browse-url)
diff --git a/lisp/net/zeroconf.el b/lisp/net/zeroconf.el
index 98be0e0158..8345748cba 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 52e7f09b69..95adf9f90a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 c1b83dc155..5ad64ff73b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 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 16766c253c..3a3596e30f 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-2021 Free Software Foundation,
+;; Copyright (C) 1985-1987, 1994, 2001-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
@@ -43,71 +43,65 @@ If nil, the feature is disabled, i.e., all commands work 
normally.")
 ;; because we won't get called otherwise.
 ;;;###autoload
 (defun disabled-command-function (&optional cmd keys)
-  (unless cmd (setq cmd this-command))
-  (unless keys (setq keys (this-command-keys)))
-  (let (char)
-    (save-window-excursion
-      (with-output-to-temp-buffer "*Disabled Command*" ;; (help-buffer)
-        (if (or (eq (aref keys 0)
-                    (if (stringp keys)
-                        (aref "\M-x" 0)
-                      ?\M-x))
-                (and (>= (length keys) 2)
-                     (eq (aref keys 0) meta-prefix-char)
-                     (eq (aref keys 1) ?x)))
-           (princ (format "You have invoked the disabled command %s.\n" cmd))
-          (princ (format "You have typed %s, invoking disabled command %s.\n"
-                        (key-description keys) cmd)))
-       ;; Print any special message saying why the command is disabled.
-       (if (stringp (get cmd 'disabled))
-           (princ (get cmd 'disabled))
-        (princ "It is disabled because new users often find it confusing.\n")
-        (princ (substitute-command-keys
-                "Here's the first part of its description:\n\n"))
-        ;; Keep only the first paragraph of the documentation.
-          (with-current-buffer "*Disabled Command*" ;; standard-output
-          (goto-char (point-max))
-          (let ((start (point)))
-            (save-excursion
-              (princ (or (condition-case ()
-                              (documentation cmd)
-                           (error nil))
-                         "<< not documented >>")))
-            (if (search-forward "\n\n" nil t)
-                (delete-region (match-beginning 0) (point-max)))
-            (goto-char (point-max))
-            (indent-rigidly start (point) 3))))
-       (princ "\n\nDo you want to use this command anyway?\n\n")
-       (princ (substitute-command-keys "You can now type
-y   to try it and enable it (no questions if you use it again).
-n   to cancel--don't try the command, and it remains disabled.
-SPC to try the command just this once, but leave it disabled.
-!   to try it, and enable all disabled commands for this session only."))
-        ;; Redundant since with-output-to-temp-buffer will do it anyway.
-        ;; (with-current-buffer standard-output
-        ;;   (help-mode))
-        )
-     (fit-window-to-buffer (get-buffer-window "*Disabled Command*"))
-     (message "Type y, n, ! or SPC (the space bar): ")
-     (let ((cursor-in-echo-area t))
-       (while (progn (setq char (read-event))
-                    (or (not (numberp char))
-                        (not (memq (downcase char)
-                                   '(?! ?y ?n ?\s ?\C-g)))))
-        (ding)
-        (message "Please type y, n, ! or SPC (the space bar): "))))
-    (setq char (downcase char))
+  (let* ((cmd (or cmd this-command))
+         (keys (or keys (this-command-keys)))
+         (help-string
+          (concat
+           (if (or (eq (aref keys 0)
+                       (if (stringp keys)
+                           (aref "\M-x" 0)
+                         ?\M-x))
+                   (and (>= (length keys) 2)
+                        (eq (aref keys 0) meta-prefix-char)
+                        (eq (aref keys 1) ?x)))
+               (format "You have invoked the disabled command %s.\n" cmd)
+             (substitute-command-keys
+              (format "You have typed \\`%s', invoking disabled command %s.\n"
+                      (key-description keys) cmd)))
+           ;; Any special message saying why the command is disabled.
+           (if (stringp (get cmd 'disabled))
+               (get cmd 'disabled)
+             (concat
+              "It is disabled because new users often find it confusing.\n"
+              (substitute-command-keys
+               "Here's the first part of its description:\n\n")
+              ;; Keep only the first paragraph of the documentation.
+              (with-temp-buffer
+                (insert (condition-case ()
+                            (documentation cmd)
+                          (error "<< not documented >>")))
+                (goto-char (point-min))
+                (when (search-forward "\n\n" nil t)
+                  (delete-region (match-beginning 0) (point-max)))
+                (indent-rigidly (point-min) (point-max) 3)
+                (buffer-string))))
+           (substitute-command-keys "\n
+Do you want to use this command anyway?
+
+You can now type:
+ \\`y'    to try it and enable it (no questions if you use it again).
+ \\`n'    to cancel--don't try the command, and it remains disabled.
+ \\`SPC'  to try the command just this once, but leave it disabled.
+ \\`!'    to try it, and enable all disabled commands for this session 
only.")))
+         (char
+          (car (read-multiple-choice "Use this command?"
+                                     '((?y "yes")
+                                       (?n "no")
+                                       (?! "yes; enable for session")
+                                       (?\s "(space bar) yes; once"))
+                                     help-string
+                                     "*Disabled Command*"))))
     (pcase char
-     (?\C-g (setq quit-flag t))
-     (?! (setq disabled-command-function nil))
-     (?y
-       (if (and user-init-file
-                (not (string= "" user-init-file))
-                (y-or-n-p "Enable command for future editing sessions also? "))
-         (enable-command cmd)
-       (put cmd 'disabled nil))))
-    (or (char-equal char ?n)
-        (call-interactively cmd))))
+      (?\C-g (setq quit-flag t))
+      (?! (setq disabled-command-function nil))
+      (?y
+       (if (and user-init-file
+                (not (string= "" user-init-file))
+                (y-or-n-p "Enable command for future editing sessions also? "))
+           (enable-command cmd)
+         (put cmd 'disabled nil))))
+    (unless (char-equal char ?n)
+      (call-interactively cmd))))
 
 (defun en/disable-command (command disable)
   (unless (commandp command)
diff --git a/lisp/nxml/nxml-enc.el b/lisp/nxml/nxml-enc.el
index abdc2e4ab2..493808fcdb 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2022 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 24a3c5c6db..974deef406 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2022 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 98ce1d6993..b8f6cb5ad3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2004, 2007-2022 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 93ffb215fb..509d88c7b1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2022 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 681b297b48..928338a6af 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004, 2007-2022 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 d2eb4f1feb..ff9eda3fd2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2022 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 fa127da874..553ac57cc3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2004, 2007-2022 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 022d6c5f29..662d43842e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2022 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 dd3000773f..453c2b736d 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, 2007-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2022 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML, RelaxNG
@@ -369,7 +369,7 @@ OVERRIDE is either nil, require or t."
     (while (re-search-forward "\\\\x+{\\([[:xdigit:]]+\\)}"
                              (point-max)
                              t)
-      (let* ((ch (decode-char 'ucs (string-to-number (match-string 1) 16))))
+      (let* ((ch (string-to-number (match-string 1) 16)))
        (if (and ch (> ch 0))
            (let ((begin (match-beginning 0))
                  (end (match-end 0)))
diff --git a/lisp/nxml/rng-dt.el b/lisp/nxml/rng-dt.el
index 25d838ce44..b88653f79e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2022 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 c8b19e8c22..0fa455cbb5 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2022 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 82d716d95c..3b4593760b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2022 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 7a2739c061..e767a9333b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2022 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 35faae3062..ccbf4d8de2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2022 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 f72f33282e..76cb94b144 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2022 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 034671feeb..614b59f807 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2022 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 24f4d2ec44..77fed8c32d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2022 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 67e2ee9f1e..74f405410a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2022 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 9df20a16b1..56ff3b66c0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2022 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 e4c76b220a..bca432d92b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2022 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 6159e00c51..ecdf510782 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2022 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML
@@ -943,7 +943,6 @@ and VALUE-END, otherwise a STRING giving the value."
        (let ((n (string-to-number (buffer-substring-no-properties start end)
                                base)))
          (cond ((and (integerp n) (xmltok-valid-char-p n))
-                (setq n (xmltok-unicode-to-char n))
                 (and n (string n)))
                (t
                 (xmltok-add-error "Invalid character code" start end)
@@ -971,11 +970,6 @@ and VALUE-END, otherwise a STRING giving the value."
        (t (and (> n #xFFFF)
                (< n #x110000)))))
 
-(defun xmltok-unicode-to-char (n)
-  "Return the character corresponding to Unicode scalar value N.
-Return nil if unsupported in Emacs."
-  (decode-char 'ucs n))
-
 ;;; Prolog parsing
 
 (defvar xmltok-contains-doctype nil)
@@ -1766,6 +1760,10 @@ and `xmltok-namespace-attributes'."
                 xmltok-type))
     (message "Scanned end of file")))
 
+;;; Obsolete
+
+(define-obsolete-function-alias 'xmltok-unicode-to-char #'identity "29.1")
+
 (provide 'xmltok)
 
 ;;; xmltok.el ends here
diff --git a/lisp/nxml/xsd-regexp.el b/lisp/nxml/xsd-regexp.el
index f07ca6657e..003410577a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2007-2022 Free Software Foundation, Inc.
 
 ;; Author: James Clark
 ;; Keywords: wp, hypermedia, languages, XML, regexp
@@ -52,9 +52,6 @@
 ;; or a character translatable to such a character (i.e a character
 ;; for which `encode-char' will return non-nil).
 ;;
-;; Using unify-8859-on-decoding-mode is probably a good idea here
-;; (and generally with XML and other Unicode-oriented formats).
-;;
 ;; Unfortunately, this means that this package is currently useless
 ;; for CJK characters, since there's no mule-unicode charset for the
 ;; CJK ranges of Unicode.  We should devise a workaround for this
@@ -290,7 +287,7 @@ and whose tail is ACCUM."
 (defun xsdre-compile-single-char (ch)
   (if (memq ch '(?. ?* ?+ ?? ?\[ ?\] ?^ ?$ ?\\))
       (string ?\\ ch)
-    (string (decode-char 'ucs ch))))
+    (string ch)))
 
 (defun xsdre-char-class-to-range-list (cc)
   "Return a range-list for a symbolic char-class CC."
@@ -407,10 +404,6 @@ consisting of a single char alternative delimited with []."
                    (cons last chars)
                  (cons last (cons ?- chars))))))
       (setq range-list (cdr range-list)))
-    (setq chars
-         (mapcar (lambda (c)
-                   (decode-char 'ucs c))
-                 chars))
     (when caret
       (setq chars (cons ?^ chars)))
     (when hyphen
diff --git a/lisp/obarray.el b/lisp/obarray.el
index ef2ddb3989..dd62de01a8 100644
--- a/lisp/obarray.el
+++ b/lisp/obarray.el
@@ -1,6 +1,6 @@
 ;;; obarray.el --- obarray functions -*- lexical-binding: t -*-
 
-;; Copyright (C) 2015-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: obarray functions
diff --git a/lisp/obsolete/abbrevlist.el b/lisp/obsolete/abbrevlist.el
index c9c0956903..ca508a1554 100644
--- a/lisp/obsolete/abbrevlist.el
+++ b/lisp/obsolete/abbrevlist.el
@@ -1,6 +1,6 @@
 ;;; abbrevlist.el --- list one abbrev table alphabetically ordered  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1986, 1992, 2001-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1986, 1992, 2001-2022 Free Software Foundation, Inc.
 ;; Suggested by a previous version by Gildea.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/obsolete/assoc.el b/lisp/obsolete/assoc.el
index cb5809b717..76fcb4b78b 100644
--- a/lisp/obsolete/assoc.el
+++ b/lisp/obsolete/assoc.el
@@ -1,6 +1,6 @@
 ;;; assoc.el --- insert/delete functions on association lists  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 1996, 2001-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Barry A. Warsaw <bwarsaw@cen.com>
 ;; Keywords: extensions
diff --git a/lisp/obsolete/bruce.el b/lisp/obsolete/bruce.el
index 1c3581f7d0..465cf429e9 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-2021 Free Software Foundation,
+;; Copyright (C) 1988, 1993, 1997, 2001-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/obsolete/cc-compat.el b/lisp/obsolete/cc-compat.el
index 2c383d31c8..19068e4bf2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1987, 1992-2022 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 0dba366192..e58f475d1c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 2001-2022 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 a892ed7c76..93f9dee4b4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Deprecated-since: 27.1
diff --git a/lisp/obsolete/complete.el b/lisp/obsolete/complete.el
index 2d3be2dd9a..1b4c39b159 100644
--- a/lisp/obsolete/complete.el
+++ b/lisp/obsolete/complete.el
@@ -1,6 +1,6 @@
 ;;; complete.el --- partial completion mechanism plus other goodies  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1990-1993, 1999-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1993, 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: Dave Gillespie <daveg@synaptics.com>
 ;; Keywords: abbrev convenience
diff --git a/lisp/obsolete/crisp.el b/lisp/obsolete/crisp.el
index ccf9aaa2b6..8424c42b69 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1999, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Gary D. Foster <Gary.Foster@Corp.Sun.COM>
 ;; Keywords: emulations brief crisp
diff --git a/lisp/obsolete/cust-print.el b/lisp/obsolete/cust-print.el
index 897b401588..80ded08654 100644
--- a/lisp/obsolete/cust-print.el
+++ b/lisp/obsolete/cust-print.el
@@ -1,6 +1,6 @@
 ;;; cust-print.el --- handles print-level and print-circle  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1992, 2001-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Daniel LaLiberte <liberte@holonexus.org>
 ;; Adapted-By: ESR
diff --git a/lisp/emacs-lisp/eieio-compat.el b/lisp/obsolete/eieio-compat.el
similarity index 99%
rename from lisp/emacs-lisp/eieio-compat.el
rename to lisp/obsolete/eieio-compat.el
index 60b0638c63..8d8211b849 100644
--- a/lisp/emacs-lisp/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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1996, 1998-2022 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: OO, lisp
diff --git a/lisp/obsolete/erc-hecomplete.el b/lisp/obsolete/erc-hecomplete.el
index 36b08d56f7..79ccf80440 100644
--- a/lisp/obsolete/erc-hecomplete.el
+++ b/lisp/obsolete/erc-hecomplete.el
@@ -1,6 +1,6 @@
 ;;; erc-hecomplete.el --- Provides Nick name completion for ERC  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2001-2002, 2004, 2006-2021 Free Software Foundation,
+;; Copyright (C) 2001-2002, 2004, 2006-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Alex Schroeder <alex@gnu.org>
diff --git a/lisp/obsolete/eudcb-ph.el b/lisp/obsolete/eudcb-ph.el
index 51a6780d90..8f3928d564 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
 
 ;; Author: Oscar Figueiredo <oscar@cpe.fr>
 ;;         Pavel Janík <Pavel@Janik.cz>
diff --git a/lisp/obsolete/fast-lock.el b/lisp/obsolete/fast-lock.el
index 1dee7120c0..1614935f03 100644
--- a/lisp/obsolete/fast-lock.el
+++ b/lisp/obsolete/fast-lock.el
@@ -1,6 +1,6 @@
 ;;; fast-lock.el --- automagic text properties caching for fast Font Lock mode 
 -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1994-1998, 2001-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1998, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Simon Marshall <simon@gnu.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/obsolete/gs.el b/lisp/obsolete/gs.el
index 5a82c6b05f..971e7d2640 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: internal
diff --git a/lisp/obsolete/gulp.el b/lisp/obsolete/gulp.el
index 6ec2f4f772..b7002cd870 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2001-2022 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 be0553cb3a..62b2697396 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 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 19958979a8..6c1be1078f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1986, 1992-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: help
diff --git a/lisp/obsolete/inversion.el b/lisp/obsolete/inversion.el
index ac7749af5e..33eab910db 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-2021  Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 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 807f5485d5..2825ea1136 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1997, 2000-2022 Free Software Foundation, Inc.
 
 ;; Author: Stephen Eglen <stephen@gnu.org>
 ;; Keywords: completion convenience
@@ -467,9 +467,7 @@ interfere with other minibuffer usage.")
                  (switch-to-buffer-other-window . iswitchb-buffer-other-window)
                  (switch-to-buffer-other-frame . iswitchb-buffer-other-frame)
                  (display-buffer . iswitchb-display-buffer)))
-      (if (fboundp 'command-remapping)
-          (define-key map (vector 'remap (car b)) (cdr b))
-        (substitute-key-definition (car b) (cdr b) map global-map)))
+      (define-key map (vector 'remap (car b)) (cdr b)))
     map)
   "Global keymap for `iswitchb-mode'.")
 
diff --git a/lisp/obsolete/landmark.el b/lisp/obsolete/landmark.el
index 16c41c76ad..29d069f48c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1997, 2000-2022 Free Software Foundation, Inc.
 
 ;; Author: Terrence Brannon <metaperl@gmail.com>
 ;; Created: December 16, 1996 - first release to usenet
diff --git a/lisp/obsolete/lazy-lock.el b/lisp/obsolete/lazy-lock.el
index 13f14aad6d..5c35cb3212 100644
--- a/lisp/obsolete/lazy-lock.el
+++ b/lisp/obsolete/lazy-lock.el
@@ -1,6 +1,6 @@
 ;;; lazy-lock.el --- lazy demand-driven fontification for fast Font Lock mode  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 1994-1998, 2001-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1998, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Simon Marshall <simon@gnu.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/obsolete/longlines.el b/lisp/obsolete/longlines.el
index 9bf6845682..731f47794c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2001, 2004-2022 Free Software Foundation, Inc.
 
 ;; Authors:    Kai Grossjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
 ;;             Alex Schroeder <alex@gnu.org>
diff --git a/lisp/obsolete/mantemp.el b/lisp/obsolete/mantemp.el
index 97e70f2984..f57361f9f8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2001-2022 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 be252395e4..ca246ba60f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2022 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 72237239dd..ee53110bcd 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1996, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <umerin@mse.kyutech.ac.jp>
 ;; Keywords: mail, news, mime, multimedia
diff --git a/lisp/obsolete/mouse-sel.el b/lisp/obsolete/mouse-sel.el
index 36d9dc658c..a9d6bfee60 100644
--- a/lisp/obsolete/mouse-sel.el
+++ b/lisp/obsolete/mouse-sel.el
@@ -1,6 +1,6 @@
 ;;; mouse-sel.el --- multi-click selection support  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1993-1995, 2001-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1995, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Mike Williams <mdub@bigfoot.com>
 ;; Keywords: mouse
diff --git a/lisp/obsolete/nnir.el b/lisp/obsolete/nnir.el
index 9aab1e7c9f..4e24cf39a8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 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/old-emacs-lock.el b/lisp/obsolete/old-emacs-lock.el
index ce4c60e6a1..70123e7537 100644
--- a/lisp/obsolete/old-emacs-lock.el
+++ b/lisp/obsolete/old-emacs-lock.el
@@ -1,6 +1,6 @@
 ;;; old-emacs-lock.el --- prevents you from exiting Emacs if a buffer is 
locked  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1994, 1997, 2001-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 1997, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Tom Wurgler <twurgler@goodyear.com>
 ;; Created: 12/8/94
diff --git a/lisp/obsolete/otodo-mode.el b/lisp/obsolete/otodo-mode.el
index a71d2b82e4..82017f4dbc 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1999, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Oliver Seidel <privat@os10000.net>
 ;; Maintainer: Stephen Berman <stephen.berman@gmx.net>
diff --git a/lisp/obsolete/pc-mode.el b/lisp/obsolete/pc-mode.el
index cf0bc28b11..4c4bfb5b9c 100644
--- a/lisp/obsolete/pc-mode.el
+++ b/lisp/obsolete/pc-mode.el
@@ -1,6 +1,6 @@
 ;;; pc-mode.el --- emulate certain key bindings used on PCs  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 1995, 2001-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2001-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: emulations
diff --git a/lisp/obsolete/pc-select.el b/lisp/obsolete/pc-select.el
index f999f50797..922358bcd6 100644
--- a/lisp/obsolete/pc-select.el
+++ b/lisp/obsolete/pc-select.el
@@ -2,7 +2,7 @@
 ;;;                 (or MAC GUI or MS-windoze (bah)) look-and-feel
 ;;;                 including key bindings.
 
-;; Copyright (C) 1995-1997, 2000-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1997, 2000-2022 Free Software Foundation, Inc.
 
 ;; Author: Michael Staats <michael@thp.Uni-Duisburg.DE>
 ;; Keywords: convenience emulations
diff --git a/lisp/obsolete/pgg-def.el b/lisp/obsolete/pgg-def.el
index 4d30e32614..020fba36f5 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2002-2022 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 d06a485b97..8d5015e01f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2000, 2002-2022 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 3e4c216abe..5542e995c0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2002-2022 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 665be0b2e2..5b56e9001f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2000, 2002-2022 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 d952317241..f04b5865b8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2000, 2002-2022 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 127e1dc15c..16ca4e1431 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2000, 2002-2022 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/rcompile.el b/lisp/obsolete/rcompile.el
index c8fb9f2098..fbfc0c6bbc 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2001-2022 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 8a842b0cf3..5e7320a793 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2000-2022 Free Software Foundation, Inc.
 
 ;; Author: Sen Nagata <sen@eccosys.com>
 ;; Keywords: mail
diff --git a/lisp/obsolete/s-region.el b/lisp/obsolete/s-region.el
index 4d4c39e9b1..9dfc9831f4 100644
--- a/lisp/obsolete/s-region.el
+++ b/lisp/obsolete/s-region.el
@@ -1,6 +1,6 @@
 ;;; s-region.el --- set region using shift key  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1994-1995, 2001-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1995, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Morten Welinder <terra@diku.dk>
 ;; Keywords: terminals
diff --git a/lisp/obsolete/sb-image.el b/lisp/obsolete/sb-image.el
index fc9e03eae6..c6f2cfb588 100644
--- a/lisp/obsolete/sb-image.el
+++ b/lisp/obsolete/sb-image.el
@@ -1,7 +1,7 @@
 ;;; sb-image.el --- Image management for speedbar  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1999-2003, 2005-2019, 2021 Free Software Foundation,
-;; Inc.
+;; Copyright (C) 1999-2003, 2005-2019, 2021-2022 Free Software
+;; Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: file, tags, tools
diff --git a/lisp/obsolete/sregex.el b/lisp/obsolete/sregex.el
index 371dcbf849..f8722f6129 100644
--- a/lisp/obsolete/sregex.el
+++ b/lisp/obsolete/sregex.el
@@ -1,6 +1,6 @@
 ;;; sregex.el --- symbolic regular expressions  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 1997-1998, 2000-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2000-2022 Free Software Foundation, Inc.
 
 ;; Author: Bob Glickstein <bobg+sregex@zanshin.com>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/obsolete/starttls.el b/lisp/obsolete/starttls.el
index 926248db9a..6f0685d3dd 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 4e312e968b..44854dd976 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1986, 2001-2022 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 fa89b586a0..d8d0da4efb 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-2021 Free Software
+;; Copyright (C) 1986-1989, 1993-1994, 2001-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Richard Mlynarik <mly@eddie.mit.edu>
diff --git a/lisp/obsolete/tls.el b/lisp/obsolete/tls.el
index ff01008613..f2515baef8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2002-2022 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 b59fb8c868..8c4ec8f7e0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1995, 2000-2022 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 f375e05d8a..76338cdd24 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1995, 2000-2022 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 02ba363250..17aa73697b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1995, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Rob Riepel <riepel@networking.stanford.edu>
 ;; Keywords: emulations
diff --git a/lisp/obsolete/url-ns.el b/lisp/obsolete/url-ns.el
index 6cd6693fc4..0dee2864fc 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1999, 2004-2022 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 fbbd2d4ecf..537d65c658 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
 
 ;; Author:      FSF (see vc.el for full credits)
 ;; Maintainer:  Stefan Monnier <monnier@gnu.org>
@@ -83,8 +83,6 @@ If nil, use the value of `vc-diff-switches'.  If t, use no 
switches."
                 (repeat :tag "Argument List" :value ("") string))
   :version "23.1")
 
-(define-obsolete-variable-alias 'vc-arch-command 'vc-arch-program "23.1")
-
 (defcustom vc-arch-program
   (let ((candidates '("tla" "baz")))
     (while (and candidates (not (executable-find (car candidates))))
diff --git a/lisp/obsolete/vip.el b/lisp/obsolete/vip.el
index 2fa8c95153..d7518b1001 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-2021 Free Software
+;; Copyright (C) 1986-1988, 1992-1993, 1998, 2001-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Masahiko Sato <ms@sail.stanford.edu>
diff --git a/lisp/obsolete/ws-mode.el b/lisp/obsolete/ws-mode.el
index 235a1d7e43..c1e7392d24 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1991, 2001-2022 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 ca8de4f922..88191b35a0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1995, 2000-2022 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 d350a3117b..7e08d1a3c9 100644
--- a/lisp/org/ChangeLog.1
+++ b/lisp/org/ChangeLog.1
@@ -32833,7 +32833,7 @@
 ;; add-log-time-zone-rule: t
 ;; End:
 
-       Copyright (C) 2008-2021 Free Software Foundation, Inc.
+       Copyright (C) 2008-2022 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 842e0d3e8e..2be5e28dc8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;;      Thierry Banel
diff --git a/lisp/org/ob-R.el b/lisp/org/ob-R.el
index 169e1d6d6c..cd822ef837 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;;     Dan Davison
diff --git a/lisp/org/ob-awk.el b/lisp/org/ob-awk.el
index 28e9d32757..1d5a6f24eb 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 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 5962d38761..9cf16a04c3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 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 3b995d94ce..5a44b64875 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
 
 ;; Author: Joel Boehland, Eric Schulte, Oleh Krehel, Frederick Giasson
 ;; Maintainer: Bastien Guerry <bzg@gnu.org>
diff --git a/lisp/org/ob-comint.el b/lisp/org/ob-comint.el
index 20ae76fadc..427aba3415 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research, comint
diff --git a/lisp/org/ob-core.el b/lisp/org/ob-core.el
index 06a2a88cd4..23ef162a7f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
 
 ;; Authors: Eric Schulte
 ;;     Dan Davison
diff --git a/lisp/org/ob-css.el b/lisp/org/ob-css.el
index 8ad70d44d0..51efbb7d94 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 249c8c899e..20b5ce1fdb 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 8e05a59f20..b82a079b4c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Maintainer: Justin Abrahms
diff --git a/lisp/org/ob-emacs-lisp.el b/lisp/org/ob-emacs-lisp.el
index d03151f13e..730eff69e8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 d74c4fc43f..135deb4a4b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2022 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 cfd8022255..be1ba54912 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 d10d228eba..d41c40c8da 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
 
 ;; Authors: Eric Schulte
 ;;     Dan Davison
diff --git a/lisp/org/ob-forth.el b/lisp/org/ob-forth.el
index 74dbc02170..53088b0706 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2022 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 2e55498003..9c49aa887c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
 ;; Authors: Sergey Litvinov
 ;;       Eric Schulte
diff --git a/lisp/org/ob-gnuplot.el b/lisp/org/ob-gnuplot.el
index 8c4a5957b9..69a5f5f91b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Maintainer: Ihor Radchenko <yantar92@gmail.com>
@@ -284,14 +284,25 @@ then create one.  Return the initialized session.  The 
current
 (defun org-babel-gnuplot-table-to-data (table data-file params)
   "Export TABLE to DATA-FILE in a format readable by gnuplot.
 Pass PARAMS through to `orgtbl-to-generic' when exporting TABLE."
+  (require 'ox-org)
   (with-temp-file data-file
     (insert (let ((org-babel-gnuplot-timestamp-fmt
                   (or (plist-get params :timefmt) "%Y-%m-%d-%H:%M:%S")))
-             (orgtbl-to-generic
-              table
-              (org-combine-plists
-               '(:sep "\t" :fmt org-babel-gnuplot-quote-tsv-field :raw t 
:backend ascii)
-               params)))))
+              (replace-regexp-in-string
+               ;; org export backend adds "|" at the beginning/end of
+               ;; the table lines.  Strip those.
+               "^|\\(.+\\)|$"
+               "\\1"
+              (orgtbl-to-generic
+               table
+               (org-combine-plists
+                '( :sep "\t" :fmt org-babel-gnuplot-quote-tsv-field
+                    ;; Two setting below are needed to make :fmt work.
+                    :raw t
+                    ;; Use `org', not `ascii' because `ascii' may
+                    ;; sometimes mishandle quoted strings.
+                    :backend org)
+                params))))))
   data-file)
 
 (provide 'ob-gnuplot)
diff --git a/lisp/org/ob-groovy.el b/lisp/org/ob-groovy.el
index b3ff34aac3..e0e2f2cd2e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
 
 ;; Author: Miro Bezjak
 ;; Maintainer: Palak Mathur
diff --git a/lisp/org/ob-haskell.el b/lisp/org/ob-haskell.el
index 971e1ce6af..45f70fa878 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 dd3538743d..0f6faf446f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
 ;; Authors: Eric Schulte
 ;;          Dan Davison
diff --git a/lisp/org/ob-js.el b/lisp/org/ob-js.el
index 5d1be61176..4bb379b0b8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 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 4fae0d142b..abddca3613 100644
--- a/lisp/org/ob-julia.el
+++ b/lisp/org/ob-julia.el
@@ -1,7 +1,7 @@
 ;;; ob-julia.el --- org-babel functions for julia code evaluation  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2013-2021 Free Software Foundation, Inc.
-;; Authors: G. Jay Kerns, based on ob-R.el by Eric Schulte and Dan Davison
+;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
+;; Authors: G. Jay Kerns
 ;; Maintainer: Pedro Bruel <pedro.bruel@gmail.com>
 ;; Keywords: literate programming, reproducible research, scientific computing
 ;; Homepage: https://github.com/phrb/ob-julia
@@ -24,6 +24,8 @@
 ;;; Commentary:
 
 ;; Org-Babel support for evaluating julia code
+;;
+;; Based on ob-R.el by Eric Schulte and Dan Davison.
 
 ;;; Code:
 (require 'cl-lib)
diff --git a/lisp/org/ob-latex.el b/lisp/org/ob-latex.el
index 7c65256976..7253803af9 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 410d53ba60..15538b5037 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 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 b32b122cdb..f9d5fed0c8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
 
 ;; Authors: Joel Boehland
 ;;      Eric Schulte
diff --git a/lisp/org/ob-lob.el b/lisp/org/ob-lob.el
index 903dabfbd5..eecb5c402a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
 
 ;; Authors: Eric Schulte
 ;;      Dan Davison
diff --git a/lisp/org/ob-lua.el b/lisp/org/ob-lua.el
index a4a964afc4..48de0dbad0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2014, 2016-2022 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 eae64cf4a9..142e760ea2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 45ec5c5437..4ee090e4ac 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 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 7b49bb07a0..6bc3427eaf 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 faf117c407..80df79581f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 bfe3e2aeec..bbbda5bb1e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
 
 ;; Author: Dan Davison
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-org.el b/lisp/org/ob-org.el
index e29cbb5b76..965b0984ec 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 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 4d405a8b6a..f01feaf294 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
 
 ;; Authors: Dan Davison
 ;;      Eric Schulte
diff --git a/lisp/org/ob-plantuml.el b/lisp/org/ob-plantuml.el
index fc621600c4..ced00fbdda 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 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 84fd6a2964..f961a99076 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
 
 ;; Author: Jarmo Hurri (adapted from ob-asymptote.el written by Eric Schulte)
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-python.el b/lisp/org/ob-python.el
index 3c095ad463..3e9049e73f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
 
 ;; Authors: Eric Schulte
 ;;      Dan Davison
diff --git a/lisp/org/ob-ref.el b/lisp/org/ob-ref.el
index a7ab299b27..21076b67b2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
 
 ;; Authors: Eric Schulte
 ;;      Dan Davison
diff --git a/lisp/org/ob-ruby.el b/lisp/org/ob-ruby.el
index b2483f1aa6..d35b55ca59 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 c8762cabae..c0f63a9b66 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 f4836b23fe..72d2e029e1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
 
 ;; Authors: Eric Schulte
 ;;         Michael Gauland
diff --git a/lisp/org/ob-screen.el b/lisp/org/ob-screen.el
index 7793825b60..1fc1a34fdf 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
 
 ;; Author: Benjamin Andresen
 ;; Maintainer: Ken Mankoff
diff --git a/lisp/org/ob-sed.el b/lisp/org/ob-sed.el
index 4d3eeee616..02c2a01742 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 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 3eed0c1640..c25941a44d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 f512d2952c..5f7c0de000 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
diff --git a/lisp/org/ob-sqlite.el b/lisp/org/ob-sqlite.el
index 7bfb66cf68..aeda6faaa3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Maintainer: Nick Savage
diff --git a/lisp/org/ob-table.el b/lisp/org/ob-table.el
index e081708701..2f092998d8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 2dd1d031cb..cf307aa0cb 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
@@ -179,15 +179,14 @@ source code blocks by languages matching a regular 
expression.
 
 Return a list whose CAR is the tangled file name."
   (interactive "fFile to tangle: \nP")
-  (let ((visited-p (find-buffer-visiting (expand-file-name file)))
-       to-be-removed)
+  (let* ((visited (find-buffer-visiting file))
+         (buffer (or visited (find-file-noselect file))))
     (prog1
-       (save-window-excursion
-         (find-file file)
-         (setq to-be-removed (current-buffer))
-         (mapcar #'expand-file-name (org-babel-tangle nil target-file 
lang-re)))
-      (unless visited-p
-       (kill-buffer to-be-removed)))))
+        (with-current-buffer buffer
+          (org-with-wide-buffer
+           (mapcar #'expand-file-name
+                   (org-babel-tangle nil target-file lang-re))))
+      (unless visited (kill-buffer buffer)))))
 
 (defun org-babel-tangle-publish (_ filename pub-dir)
   "Tangle FILENAME and place the results in PUB-DIR."
diff --git a/lisp/org/ob.el b/lisp/org/ob.el
index 1e89b02aed..785eccf964 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 7b09db5f8b..d82406affb 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <mail@nicolasgoaziou.fr>
 
@@ -68,6 +68,7 @@
 
 (require 'bibtex)
 (require 'json)
+(require 'map)
 (require 'oc)
 (require 'seq)
 
@@ -704,11 +705,18 @@ Return chosen style as a string."
 
 (defun org-cite-basic--key-completion-table ()
   "Return completion table for cite keys, as a hash table.
-In this hash table, keys are a strings with author, date, and title of the
-reference.  Values are the cite key."
-  (let ((cache-key (mapcar #'car org-cite-basic--bibliography-cache)))
-    (if (gethash cache-key org-cite-basic--completion-cache)
-        org-cite-basic--completion-cache
+
+In this hash table, keys are a strings with author, date, and
+title of the reference.  Values are the cite keys.
+
+Return nil if there are no bibliography files or no entries."
+  ;; Populate bibliography cache.
+  (let ((entries (org-cite-basic--parse-bibliography)))
+    (cond
+     ((null entries) nil)               ;no bibliography files
+     ((gethash entries org-cite-basic--completion-cache)
+      org-cite-basic--completion-cache)
+     (t
       (clrhash org-cite-basic--completion-cache)
       (dolist (key (org-cite-basic--all-keys))
         (let ((completion
@@ -725,14 +733,16 @@ reference.  Values are the cite key."
                 org-cite-basic-column-separator
                 (org-cite-basic--get-field 'title key nil t))))
           (puthash completion key org-cite-basic--completion-cache)))
-      (puthash cache-key t org-cite-basic--completion-cache)
-      org-cite-basic--completion-cache)))
+      (unless (map-empty-p org-cite-basic--completion-cache) ;no key
+        (puthash entries t org-cite-basic--completion-cache)
+        org-cite-basic--completion-cache)))))
 
 (defun org-cite-basic--complete-key (&optional multiple)
   "Prompt for a reference key and return a citation reference string.
 
-When optional argument MULTIPLE is non-nil, prompt for multiple keys, until one
-of them is nil.  Then return the list of reference strings selected.
+When optional argument MULTIPLE is non-nil, prompt for multiple
+keys, until one of them is nil.  Then return the list of
+reference strings selected.
 
 Raise an error when no bibliography is set in the buffer."
   (let* ((table
@@ -748,9 +758,9 @@ Raise an error when no bibliography is set in the buffer."
              (build-prompt
               (lambda ()
                 (if keys
-                    (format "Key (\"\" to exit) %s: "
+                    (format "Key (empty input exits) %s: "
                             (mapconcat #'identity (reverse keys) ";"))
-                  "Key (\"\" to exit): "))))
+                  "Key (empty input exits): "))))
         (let ((key (funcall prompt (funcall build-prompt))))
           (while (org-string-nw-p key)
             (push (gethash key table) keys)
diff --git a/lisp/org/oc-biblatex.el b/lisp/org/oc-biblatex.el
index e985963816..3cc157ec93 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <mail@nicolasgoaziou.fr>
 
diff --git a/lisp/org/oc-csl.el b/lisp/org/oc-csl.el
index 7cd63c3ff3..82a9b8afce 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <mail@nicolasgoaziou.fr>
 
@@ -283,7 +283,8 @@ Label is in match group 1.")
 ;;; Internal functions
 (defun org-cite-csl--barf-without-citeproc ()
   "Raise an error if Citeproc library is not loaded."
-  (unless (featurep 'citeproc) "Citeproc library is not loaded"))
+  (unless (featurep 'citeproc)
+    (error "Citeproc library is not loaded")))
 
 (defun org-cite-csl--note-style-p (info)
   "Non-nil when bibliography style implies wrapping citations in footnotes.
@@ -604,10 +605,10 @@ property list."
     (with-temp-buffer
       (save-excursion (insert output))
       (when (search-forward "\\begin{document}" nil t)
-        ;; Ensure that \citeprocitem is defined for citeproc-el
+        (goto-char (match-beginning 0))
+        ;; Ensure that \citeprocitem is defined for citeproc-el.
         (insert 
"\\makeatletter\n\\newcommand{\\citeprocitem}[2]{\\hyper@linkstart{cite}{citeproc_bib_item_#1}#2\\hyper@linkend}\n\\makeatother\n\n")
         ;; Ensure there is a \usepackage{hanging} somewhere or add one.
-        (goto-char (match-beginning 0))
         (let ((re (rx "\\usepackage" (opt "[" (*? nonl) "]") "{hanging}")))
           (unless (re-search-backward re nil t)
             (insert "\\usepackage[notquote]{hanging}\n"))))
diff --git a/lisp/org/oc-natbib.el b/lisp/org/oc-natbib.el
index bf086f36df..2193a070eb 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <mail@nicolasgoaziou.fr>
 
diff --git a/lisp/org/oc.el b/lisp/org/oc.el
index 41fd688c06..eb5f519cb6 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <mail@nicolasgoaziou.fr>
 
@@ -1141,17 +1141,14 @@ and must return either a string, an object, or a 
secondary string."
 
 
 ;;; Internal interface with fontification (activate capability)
-(defun org-cite-fontify-default (datum)
-  "Fontify DATUM with `org-cite' and `org-cite-key' face.
-DATUM is a citation object, or a citation reference.  In any case, apply
-`org-cite' face on the whole citation, and `org-cite-key' face on each key."
-  (let* ((cite (if (eq 'citation-reference (org-element-type datum))
-                   (org-element-property :parent datum)
-                 datum))
-         (beg (org-element-property :begin cite))
-         (end (org-with-point-at (org-element-property :end cite)
-                (skip-chars-backward " \t")
-                (point))))
+(defun org-cite-fontify-default (cite)
+  "Fontify CITE with `org-cite' and `org-cite-key' faces.
+CITE is a citation object.  The function applies `org-cite' face
+on the whole citation, and `org-cite-key' face on each key."
+  (let ((beg (org-element-property :begin cite))
+        (end (org-with-point-at (org-element-property :end cite)
+               (skip-chars-backward " \t")
+               (point))))
     (add-text-properties beg end '(font-lock-multiline t))
     (add-face-text-property beg end 'org-cite)
     (dolist (reference (org-cite-get-references cite))
@@ -1163,16 +1160,20 @@ DATUM is a citation object, or a citation reference.  
In any case, apply
   "Activate citations from up to LIMIT buffer position.
 Each citation encountered is activated using the appropriate function
 from the processor set in `org-cite-activate-processor'."
-  (let ((name org-cite-activate-processor))
-    (let ((activate
-           (or (and name
-                    (org-cite-processor-has-capability-p name 'activate)
-                    (org-cite-processor-activate (org-cite--get-processor 
name)))
-               #'org-cite-fontify-default)))
-      (while (re-search-forward org-element-citation-prefix-re limit t)
-        (let ((cite (org-with-point-at (match-beginning 0)
-                      (org-element-citation-parser))))
-          (when cite (save-excursion (funcall activate cite))))))))
+  (let* ((name org-cite-activate-processor)
+         (activate
+          (or (and name
+                   (org-cite-processor-has-capability-p name 'activate)
+                   (org-cite-processor-activate (org-cite--get-processor 
name)))
+              #'org-cite-fontify-default)))
+    (when (re-search-forward org-element-citation-prefix-re limit t)
+      (let ((cite (org-with-point-at (match-beginning 0)
+                    (org-element-citation-parser))))
+        (when cite
+          (funcall activate cite)
+          ;; Move after cite object and make sure to return
+          ;; a non-nil value.
+          (goto-char (org-element-property :end cite)))))))
 
 
 ;;; Internal interface with Org Export library (export capability)
@@ -1539,7 +1540,7 @@ The generated function inserts or edit a citation at 
point.  More specifically,
 
   On a citation reference:
 
-    - on the prefix or right before th \"@\" character, insert a new reference
+    - on the prefix or right before the \"@\" character, insert a new reference
       before the current one,
     - on the suffix, insert it after the reference,
     - otherwise, update the cite key, preserving both affixes.
diff --git a/lisp/org/ol-bbdb.el b/lisp/org/ol-bbdb.el
index f697f1f82b..ffca438480 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2022 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 476095d3e0..41443d7959 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 7ab67de809..6ea224c76c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 d2d16b27d5..94585e4c3e 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 a7550e3769..1ca2aa2b28 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
 ;; Author: Konrad Hinsen <konrad.hinsen AT fastmail.net>
 
@@ -46,7 +46,7 @@ followed by a colon."
          (eshell-buffer-name (car buffer-and-command))
          (command (cadr buffer-and-command)))
     (if (get-buffer eshell-buffer-name)
-       (pop-to-buffer-same-window eshell-buffer-name)
+       (pop-to-buffer eshell-buffer-name display-comint-buffer-action)
       (eshell))
     (goto-char (point-max))
     (eshell-kill-input)
diff --git a/lisp/org/ol-eww.el b/lisp/org/ol-eww.el
index e9ffee6e56..69bf1ba62d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2022 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 72bdd7310a..3a3857fbf9 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2022 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 a535ea581a..3730ff5ad4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2022 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 df62dd0625..ed8bad5a50 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 0d9ac7c8c7..beed216acf 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Maintainer: Bastien Guerry <bzg@gnu.org>
 ;; Keywords: outlines, hypermedia, calendar, wp
@@ -8,12 +8,12 @@
 ;;
 ;; 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, or (at your option)
-;; any later version.
+;; 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.
diff --git a/lisp/org/ol-mhe.el b/lisp/org/ol-mhe.el
index 37147a33ac..49104d392a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2022 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 2593ebdf02..8a28d720bb 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2022 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 9e03269e11..517329889c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 aa1849715c..2951c3def1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
@@ -1575,7 +1575,7 @@ non-nil."
          (setq link
                (format-time-string
                 (car org-time-stamp-formats)
-                (apply 'encode-time
+                (encode-time
                        (list 0 0 0 (nth 1 cd) (nth 0 cd) (nth 2 cd)
                              nil nil nil))))
          (org-link-store-props :type "calendar" :date cd)))
diff --git a/lisp/org/org-agenda.el b/lisp/org/org-agenda.el
index 354f408679..fed36ac9b6 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
@@ -6765,7 +6765,7 @@ Any match of REMOVE-RE will be removed from TXT."
            (setq duration (- (org-duration-to-minutes s2)
                              (org-duration-to-minutes s1))))
           ;; Format S1 and S2 for display.
-         (when s1 (setq s1 (org-get-time-of-day s1 'overtime)))
+         (when s1 (setq s1 (format "%5s" (org-get-time-of-day s1 'overtime))))
          (when s2 (setq s2 (org-get-time-of-day s2 'overtime))))
        (when (string-match org-tag-group-re txt)
          ;; Tags are in the string
diff --git a/lisp/org/org-archive.el b/lisp/org/org-archive.el
index 0943869a88..c490e4b48f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2022 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 4c6bdc9023..ddb2ee97a0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 75db69c9cc..36c21b7021 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 1756b34fc5..d3c5094b46 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-clock.el b/lisp/org/org-clock.el
index 12a4c2b7b7..ddae182791 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
@@ -1746,7 +1746,7 @@ Optional argument N tells to change by that many units."
   (org-clock-timestamps-change 'up n))
 
 (defun org-clock-timestamps-down (&optional n)
-  "Increase CLOCK timestamps at cursor.
+  "Decrease CLOCK timestamps at cursor.
 Optional argument N tells to change by that many units."
   (interactive "P")
   (org-clock-timestamps-change 'down n))
@@ -1904,11 +1904,11 @@ PROPNAME lets you set a custom text property instead of 
:org-clock-minutes."
           ((match-end 2)
            ;; Two time stamps.
            (let* ((ts (float-time
-                       (apply #'encode-time
+                       (encode-time
                               (save-match-data
                                 (org-parse-time-string (match-string 2))))))
                   (te (float-time
-                       (apply #'encode-time
+                       (encode-time
                               (org-parse-time-string (match-string 3)))))
                   (dt (- (if tend (min te tend) te)
                          (if tstart (max ts tstart) ts))))
@@ -2837,7 +2837,7 @@ a number of clock tables."
           (pcase (if range (car range) (plist-get params :tstart))
             ((and (pred numberp) n)
              (pcase-let ((`(,m ,d ,y) (calendar-gregorian-from-absolute n)))
-               (apply #'encode-time (list 0 0 org-extend-today-until d m y))))
+              (encode-time 0 0 org-extend-today-until d m y)))
             (timestamp
             (seconds-to-time
              (org-matcher-time (or timestamp
@@ -2847,7 +2847,7 @@ a number of clock tables."
           (pcase (if range (nth 1 range) (plist-get params :tend))
             ((and (pred numberp) n)
              (pcase-let ((`(,m ,d ,y) (calendar-gregorian-from-absolute n)))
-               (apply #'encode-time (list 0 0 org-extend-today-until d m y))))
+              (encode-time 0 0 org-extend-today-until d m y)))
             (timestamp (seconds-to-time (org-matcher-time timestamp))))))
     (while (time-less-p start end)
       (unless (bolp) (insert "\n"))
@@ -3042,9 +3042,9 @@ Otherwise, return nil."
          (setq ts (match-string 1)
                te (match-string 3))
          (setq s (- (float-time
-                     (apply #'encode-time (org-parse-time-string te)))
+                     (encode-time (org-parse-time-string te)))
                     (float-time
-                     (apply #'encode-time (org-parse-time-string ts))))
+                     (encode-time (org-parse-time-string ts))))
                neg (< s 0)
                s (abs s)
                h (floor (/ s 3600))
diff --git a/lisp/org/org-colview.el b/lisp/org/org-colview.el
index 9794382d8a..371889432d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
@@ -782,7 +782,7 @@ around it."
       (setq time-after (copy-sequence time))
       (setf (nth 3 time-before) (1- (nth 3 time)))
       (setf (nth 3 time-after) (1+ (nth 3 time)))
-      (mapcar (lambda (x) (format-time-string fmt (apply #'encode-time x)))
+      (mapcar (lambda (x) (format-time-string fmt (encode-time x)))
              (list time-before time time-after)))))
 
 (defun org-columns-open-link (&optional arg)
diff --git a/lisp/org/org-compat.el b/lisp/org/org-compat.el
index d230ee2b11..cfccc2c052 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
@@ -170,8 +170,7 @@ extension beyond end of line was not controllable."
   (defsubst file-attribute-modification-time (attributes)
     "The modification time in ATTRIBUTES returned by `file-attributes'.
 This is the time of the last change to the file's contents, and
-is a list of integers (HIGH LOW USEC PSEC) in the same style
-as (current-time)."
+is a Lisp timestamp in the same style as `current-time'."
     (nth 5 attributes)))
 
 (unless (fboundp 'file-attribute-size)
diff --git a/lisp/org/org-crypt.el b/lisp/org/org-crypt.el
index 48f76b79fd..41813cb184 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 7876c6ef75..6fc97ca399 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
 
 ;; Author: Paul Sexton <eeeickythump@gmail.com>
 ;; Keywords: org, wp
diff --git a/lisp/org/org-datetree.el b/lisp/org/org-datetree.el
index 74442b038a..30f5f99aea 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 e627d0936a..6d55ba8840 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 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 f8334ccbc6..7952786607 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <n.goaziou at gmail dot com>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-entities.el b/lisp/org/org-entities.el
index 9c5f626ab7..b2dbccd40c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 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 b151045a95..1db36bc72b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-feed.el b/lisp/org/org-feed.el
index 5df3b69766..a5fea08882 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
 ;;
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-footnote.el b/lisp/org/org-footnote.el
index fcc7579bad..112d6504fe 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
 ;;
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
diff --git a/lisp/org/org-goto.el b/lisp/org/org-goto.el
index 352bf9f2e5..860b0a3de4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2022 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 a355d8e5fa..bc5175b163 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw at gnu dot org>
 ;; Keywords: outlines, hypermedia, calendar, wp
@@ -428,7 +428,8 @@ current time."
     (save-excursion
       (goto-char (if line (point-at-bol) (point-min)))
       (while (not (eobp))
-       (let ((habit (get-text-property (point) 'org-habit-p)))
+       (let ((habit (get-text-property (point) 'org-habit-p))
+              (invisible-prop (get-text-property (point) 'invisible)))
          (when habit
            (move-to-column org-habit-graph-column t)
            (delete-char (min (+ 1 org-habit-preceding-days
@@ -439,7 +440,12 @@ current time."
              habit
              (time-subtract moment (days-to-time org-habit-preceding-days))
              moment
-             (time-add moment (days-to-time org-habit-following-days))))))
+             (time-add moment (days-to-time org-habit-following-days))))
+            ;; Inherit invisible state of hidden entries.
+            (when invisible-prop
+              (put-text-property
+               (- (point) org-habit-graph-column) (point)
+               'invisible invisible-prop))))
        (forward-line)))))
 
 (defun org-habit-toggle-habits ()
diff --git a/lisp/org/org-id.el b/lisp/org/org-id.el
index bd7e73905f..7334050b8b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 e0cb69780e..fd19b14db6 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 3379a2e460..581370bb53 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 a10db7e666..b3ba5dc85b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <mail@nicolasgoaziou.fr>
 
@@ -444,7 +444,7 @@ COMMANDS is a list of alternating OLDDEF NEWDEF command 
names."
 
 ;;;; TAB key with modifiers
 (org-defkey org-mode-map (kbd "TAB") #'org-cycle)
-(org-defkey org-mode-map (kbd "C-c C-TAB") #'org-force-cycle-archived)
+(org-defkey org-mode-map (kbd "C-c C-<tab>") #'org-force-cycle-archived)
 ;; Override text-mode binding to expose `complete-symbol' for
 ;; pcomplete functionality.
 (org-defkey org-mode-map (kbd "M-TAB") nil)
diff --git a/lisp/org/org-lint.el b/lisp/org/org-lint.el
index da5e6ae799..0894951b65 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 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 2bd9dc4d9e..0dd8139a97 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2022 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 c38a07b69a..bb8a95065b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <n.goaziou@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
@@ -368,7 +368,7 @@ Return value as a string."
            date)
        (unwind-protect
            (progn
-             (vc-call print-log file buf nil nil 1)
+             (vc-call print-log (list file) buf nil nil 1)
              (with-current-buffer buf
                (vc-exec-after
                 (lambda ()
@@ -378,7 +378,7 @@ Return value as a string."
                                  (buffer-substring
                                   (point) (line-end-position)))))
                       (when (cl-some #'identity time)
-                        (setq date (apply #'encode-time time))))))))
+                        (setq date (encode-time time))))))))
              (let ((proc (get-buffer-process buf)))
                (while (and proc (accept-process-output proc .5 nil t)))))
          (kill-buffer buf))
diff --git a/lisp/org/org-macs.el b/lisp/org/org-macs.el
index 0779c3a82c..6f038f026b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
@@ -1185,7 +1185,7 @@ nil, just return 0."
    ((numberp s) s)
    ((stringp s)
     (condition-case nil
-       (float-time (apply #'encode-time (org-parse-time-string s)))
+       (float-time (encode-time (org-parse-time-string s)))
       (error 0)))
    (t 0)))
 
@@ -1252,7 +1252,7 @@ following special strings: \"<now>\", \"<today>\",
 \"<tomorrow>\", and \"<yesterday>\".
 
 Return 0. if S is not recognized as a valid value."
-  (let ((today (float-time (apply #'encode-time
+  (let ((today (float-time (encode-time
                                  (append '(0 0 0) (nthcdr 3 (decode-time)))))))
     (save-match-data
       (cond
diff --git a/lisp/org/org-mobile.el b/lisp/org/org-mobile.el
index e51258af05..5cfaa7fe0a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 a35a19bca6..8d5be42545 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2022 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 f00e6c463b..4de62630e9 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2022 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 b31dc333fd..d1172d8988 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
 ;;
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;;         John Wiegley <johnw at gnu dot org>
diff --git a/lisp/org/org-plot.el b/lisp/org/org-plot.el
index 4f14c7d4c3..bf84c99e04 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
 ;;
 ;; Author: Eric Schulte <schulte dot eric at gmail dot com>
 ;; Maintainer: TEC <tecosaur@gmail.com>
diff --git a/lisp/org/org-protocol.el b/lisp/org/org-protocol.el
index ca3249dda5..7c4de03bc2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 73eaad6bf5..8e1ab7439e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 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 8d02cf4345..54f901252f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
 ;;
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;;        Bastien Guerry <bzg@gnu.org>
diff --git a/lisp/org/org-table.el b/lisp/org/org-table.el
index 89c57fb06c..58707eae44 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Keywords: outlines, hypermedia, calendar, wp
@@ -2606,7 +2606,7 @@ location of point."
                     (format-time-string
                      (org-time-stamp-format
                       (string-match-p "[0-9]\\{1,2\\}:[0-9]\\{2\\}" ts))
-                     (apply #'encode-time
+                     (encode-time
                             (save-match-data (org-parse-time-string ts))))))
                 form t t))
 
@@ -4436,7 +4436,7 @@ Optional argument NEW may specify text to replace the 
current field content."
          (col (org-table-current-column)))
       (when (> col 0)
        (skip-chars-backward "^|")
-       (if (not (looking-at " *\\([^|\n]*?\\) *\\(|\\|$\\)"))
+       (if (not (looking-at " *\\(?:\\([^|\n]*?\\) *\\(|\\)\\|\\([^|\n]+?\\) 
*\\($\\)\\)"))
            (setq org-table-may-need-update t)
          (let* ((align (nth (1- col) org-table-last-alignment))
                 (width (nth (1- col) org-table-last-column-widths))
diff --git a/lisp/org/org-tempo.el b/lisp/org/org-tempo.el
index c121b8e7ac..b34007bf78 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 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 bfcea443c3..4c9c1ba276 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 77b1cf4e5f..1053bbe22c 100644
--- a/lisp/org/org-version.el
+++ b/lisp/org/org-version.el
@@ -5,13 +5,13 @@
 (defun org-release ()
   "The release version of Org.
 Inserted by installing Org mode or when a release is made."
-   (let ((org-release "9.5"))
+   (let ((org-release "9.5.2"))
      org-release))
 ;;;###autoload
 (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.5-72-gc5d6656"))
+   (let ((org-git-version "release_9.5.2-3-geb9f34"))
      org-git-version))
 
 (provide 'org-version)
diff --git a/lisp/org/org.el b/lisp/org/org.el
index 83b3d79cb1..fba45caabe 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
 ;;
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;; Maintainer: Bastien Guerry <bzg@gnu.org>
@@ -9,7 +9,7 @@
 ;; Homepage: https://orgmode.org
 ;; Package-Requires: ((emacs "25.1"))
 
-;; Version: 9.5
+;; Version: 9.5.2
 
 ;; This file is part of GNU Emacs.
 ;;
@@ -693,7 +693,7 @@ defined in org-duration.el.")
 If a description starts with <C>, the file is not part of Emacs and Org mode,
 so loading it will require that you have properly installed org-contrib
 package from NonGNU Emacs Lisp Package Archive
-http://elpa.nongnu.org/nongnu/org-contrib.html
+https://elpa.nongnu.org/nongnu/org-contrib.html
 
 You can also use this system to load external packages (i.e. neither Org
 core modules, nor org-contrib modules).  Just add symbols
@@ -773,7 +773,7 @@ For export specific modules, see also 
`org-export-backends'."
 If a description starts with <C>, the file is not part of Emacs and Org mode,
 so loading it will require that you have properly installed org-contrib
 package from NonGNU Emacs Lisp Package Archive
-http://elpa.nongnu.org/nongnu/org-contrib.html
+https://elpa.nongnu.org/nongnu/org-contrib.html
 
 Unlike to `org-modules', libraries in this list will not be
 loaded along with Org, but only once the export framework is
@@ -5114,7 +5114,6 @@ stacked delimiters is N.  Escaping delimiters is not 
possible."
                                     '(invisible t))
                (add-text-properties (match-beginning 3) (match-end 3)
                                     '(invisible t)))
-              (goto-char (match-end 0))
              (throw :exit t))))))))
 
 (defun org-emphasize (&optional char)
@@ -6905,7 +6904,7 @@ frame is not changed."
       (setq beg (point)
            heading (org-get-heading 'no-tags))
       (org-end-of-subtree t t)
-      (when (org-at-heading-p) (backward-char 1))
+      (when (and (not (eobp)) (org-at-heading-p)) (backward-char 1))
       (setq end (point)))
     (when (and (buffer-live-p org-last-indirect-buffer)
               (not (eq org-indirect-buffer-display 'new-frame))
@@ -11323,13 +11322,14 @@ or a character."
            (setq
             new
             (if nump
-                 (let ((msg (format "Priority %s-%s, SPC to remove: "
-                                   (number-to-string org-priority-highest)
-                                   (number-to-string org-priority-lowest))))
-                   (if (< 9 org-priority-lowest)
-                      (string-to-number (read-string msg))
-                     (message msg)
-                     (string-to-number (char-to-string 
(read-char-exclusive)))))
+                 (let* ((msg (format "Priority %s-%s, SPC to remove: "
+                                     (number-to-string org-priority-highest)
+                                     (number-to-string org-priority-lowest)))
+                        (s (if (< 9 org-priority-lowest)
+                               (read-string msg)
+                             (message msg)
+                             (char-to-string (read-char-exclusive)))))
+                   (if (equal s " ") ?\s (string-to-number s)))
               (progn (message "Priority %c-%c, SPC to remove: "
                               org-priority-highest org-priority-lowest)
                      (save-match-data
@@ -13986,7 +13986,7 @@ user."
     (when (< (nth 2 org-defdecode) org-extend-today-until)
       (setf (nth 2 org-defdecode) -1)
       (setf (nth 1 org-defdecode) 59)
-      (setq org-def (apply #'encode-time org-defdecode))
+      (setq org-def (encode-time org-defdecode))
       (setq org-defdecode (decode-time org-def)))
     (let* ((timestr (format-time-string
                     (if org-with-time "%Y-%m-%d %H:%M" "%Y-%m-%d")
@@ -14470,7 +14470,7 @@ The command returns the inserted time stamp."
          time (org-fix-decoded-time t1)
          str (org-add-props
                  (format-time-string
-                  (substring tf 1 -1) (apply 'encode-time time))
+                  (substring tf 1 -1) (encode-time time))
                  nil 'mouse-face 'highlight))
     (put-text-property beg end 'display str)))
 
@@ -14725,7 +14725,7 @@ days in order to avoid rounding problems."
 
 (defun org-time-string-to-time (s)
   "Convert timestamp string S into internal time."
-  (apply #'encode-time (org-parse-time-string s)))
+  (encode-time (org-parse-time-string s)))
 
 (defun org-time-string-to-seconds (s)
   "Convert a timestamp string S into a number of seconds."
@@ -15155,7 +15155,7 @@ When SUPPRESS-TMP-DELAY is non-nil, suppress delays like
          (setcar time0 (or (car time0) 0))
          (setcar (nthcdr 1 time0) (or (nth 1 time0) 0))
          (setcar (nthcdr 2 time0) (or (nth 2 time0) 0))
-         (setq time (apply 'encode-time time0))))
+         (setq time (encode-time time0))))
       ;; Insert the new time-stamp, and ensure point stays in the same
       ;; category as before (i.e. not after the last position in that
       ;; category).
diff --git a/lisp/org/ox-ascii.el b/lisp/org/ox-ascii.el
index 78e6fb4988..c22bb13b6d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <n.goaziou at gmail dot com>
 ;; Maintainer: Nicolas Goaziou <n.goaziou at gmail dot com>
diff --git a/lisp/org/ox-beamer.el b/lisp/org/ox-beamer.el
index ca0f1c71ab..a70f6e4a0f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik AT gmail DOT com>
 ;;         Nicolas Goaziou <n.goaziou AT gmail DOT com>
@@ -1059,7 +1059,7 @@ Return PDF file's name."
   (let ((file (org-export-output-file-name ".tex" subtreep)))
     (org-export-to-file 'beamer file
       async subtreep visible-only body-only ext-plist
-      (lambda (file) (org-latex-compile file)))))
+      #'org-latex-compile)))
 
 ;;;###autoload
 (defun org-beamer-select-environment ()
diff --git a/lisp/org/ox-html.el b/lisp/org/ox-html.el
index a150b1fdb8..5de0b5d675 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;;      Jambunathan K <kjambunathan at gmail dot com>
diff --git a/lisp/org/ox-icalendar.el b/lisp/org/ox-icalendar.el
index 081a28317f..a3fe31d7b8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <carsten.dominik@gmail.com>
 ;;      Nicolas Goaziou <n dot goaziou at gmail dot com>
@@ -824,8 +824,7 @@ as a communication channel."
    (if (not (plist-get info :with-author)) ""
      (org-export-data (plist-get info :author) info))
    ;; Timezone.
-   (if (org-string-nw-p org-icalendar-timezone) org-icalendar-timezone
-     (cadr (current-time-zone)))
+   (or (org-string-nw-p org-icalendar-timezone) (format-time-string "%Z"))
    ;; Description.
    (org-export-data (plist-get info :title) info)
    contents))
@@ -888,8 +887,8 @@ Return ICS file name."
     (org-export-to-file 'icalendar outfile
       async subtreep visible-only body-only
       '(:ascii-charset utf-8 :ascii-links-to-notes nil)
-      (lambda (file)
-       (run-hook-with-args 'org-icalendar-after-save-hook file) nil))))
+      '(lambda (file)
+        (run-hook-with-args 'org-icalendar-after-save-hook file) nil))))
 
 ;;;###autoload
 (defun org-icalendar-export-agenda-files (&optional async)
@@ -972,7 +971,7 @@ This function assumes major mode for current buffer is
        (org-icalendar--vcalendar
        org-icalendar-combined-name
        user-full-name
-       (or (org-string-nw-p org-icalendar-timezone) (cadr (current-time-zone)))
+       (or (org-string-nw-p org-icalendar-timezone) (format-time-string "%Z"))
        org-icalendar-combined-description
        contents)))
     (run-hook-with-args 'org-icalendar-after-save-hook file)))
@@ -995,7 +994,7 @@ FILES is a list of files to build the calendar from."
              user-full-name
              ;; Timezone.
              (or (org-string-nw-p org-icalendar-timezone)
-                 (cadr (current-time-zone)))
+                 (format-time-string "Z"))
              ;; Description.
              org-icalendar-combined-description
              ;; Contents.
diff --git a/lisp/org/ox-koma-letter.el b/lisp/org/ox-koma-letter.el
index 6a895a6a24..5f62cd1c04 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-2021  Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <n.goaziou AT gmail DOT com>
 ;;         Alan Schmitt <alan.schmitt AT polytechnique DOT org>
@@ -982,7 +982,7 @@ Return PDF file's name."
         (org-koma-letter-special-contents))
     (org-export-to-file 'koma-letter file
       async subtreep visible-only body-only ext-plist
-      (lambda (file) (org-latex-compile file)))))
+      #'org-latex-compile)))
 
 
 (provide 'ox-koma-letter)
diff --git a/lisp/org/ox-latex.el b/lisp/org/ox-latex.el
index 3e3967033a..e4e146bc5f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <n.goaziou at gmail dot com>
 ;; Keywords: outlines, hypermedia, calendar, wp
@@ -3706,7 +3706,7 @@ Return PDF file's name."
   (let ((outfile (org-export-output-file-name ".tex" subtreep)))
     (org-export-to-file 'latex outfile
       async subtreep visible-only body-only ext-plist
-      (lambda (file) (org-latex-compile file)))))
+      #'org-latex-compile)))
 
 (defun org-latex-compile (texfile &optional snippet)
   "Compile a TeX file.
diff --git a/lisp/org/ox-man.el b/lisp/org/ox-man.el
index 6d3476cdae..e808edcdfc 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <n.goaziou at gmail dot com>
 ;;      Luis R Anaya <papoanaya aroba hot mail punto com>
@@ -1117,7 +1117,7 @@ Return PDF file's name."
   (let ((outfile (org-export-output-file-name ".man" subtreep)))
     (org-export-to-file 'man outfile
       async subtreep visible-only body-only ext-plist
-      (lambda (file) (org-latex-compile file)))))
+      #'org-latex-compile)))
 
 (defun org-man-compile (file)
   "Compile a Groff file.
diff --git a/lisp/org/ox-md.el b/lisp/org/ox-md.el
index 348b6d01dc..ad684d8033 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <n.goaziou@gmail.com>
 ;; Maintainer: Nicolas Goaziou <n.goaziou at gmail dot com>
diff --git a/lisp/org/ox-odt.el b/lisp/org/ox-odt.el
index f186ebb16a..7f2e8ba47f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 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 fcf876854f..0613ede317 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <n.goaziou@gmail.com>
 ;; Maintainer: Nicolas Goaziou <n.goaziou at gmail dot com>
diff --git a/lisp/org/ox-publish.el b/lisp/org/ox-publish.el
index bc9b17ab3e..636bd0d2ae 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
 
 ;; Author: David O'Toole <dto@gnu.org>
 ;; Maintainer: Nicolas Goaziou <n.goaziou at gmail dot com>
diff --git a/lisp/org/ox-texinfo.el b/lisp/org/ox-texinfo.el
index 8b949b361a..9a8217583e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
 ;; Author: Jonathan Leech-Pepin <jonathan.leechpepin at gmail dot com>
 ;; Maintainer: Nicolas Goaziou <n.goaziou at gmail dot com>
 ;; Keywords: outlines, hypermedia, calendar, wp
@@ -1701,7 +1701,7 @@ Return INFO file's name."
        (org-export-coding-system org-texinfo-coding-system))
     (org-export-to-file 'texinfo outfile
       async subtreep visible-only body-only ext-plist
-      (lambda (file) (org-texinfo-compile file)))))
+      #'org-texinfo-compile)))
 
 ;;;###autoload
 (defun org-texinfo-publish-to-texinfo (plist filename pub-dir)
diff --git a/lisp/org/ox.el b/lisp/org/ox.el
index 9ab813a1b1..afea529f64 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Goaziou <n.goaziou at gmail dot com>
 ;; Maintainer: Nicolas Goaziou <n.goaziou at gmail dot com>
@@ -1048,6 +1048,7 @@ BACKEND is a structure with `org-export-backend' type."
   (unless (org-export-backend-p backend)
     (error "Unknown \"%s\" back-end: Aborting export" backend)))
 
+;;;###autoload
 (defun org-export-derived-backend-p (backend &rest backends)
   "Non-nil if BACKEND is derived from one of BACKENDS.
 BACKEND is an export back-end, as returned by, e.g.,
@@ -1858,6 +1859,7 @@ INFO is a plist containing export directives."
       (let ((transcoder (cdr (assq type (plist-get info :translate-alist)))))
        (and (functionp transcoder) transcoder)))))
 
+;;;###autoload
 (defun org-export-data (data info)
   "Convert DATA into current back-end format.
 
@@ -4586,6 +4588,7 @@ objects of the same type."
 ;; `org-export-raw-string' builds a pseudo-object out of a string
 ;; that any export back-end returns as-is.
 
+;;;###autoload
 (defun org-export-raw-string (s)
   "Return a raw object containing string S.
 A raw string is exported as-is, with no additional processing
@@ -6370,7 +6373,11 @@ use it to set a major mode there, e.g,
     (&optional async subtreep visible-only body-only ext-plist)
     (interactive)
     (org-export-to-buffer \\='latex \"*Org LATEX Export*\"
-      async subtreep visible-only body-only ext-plist (lambda () 
(LaTeX-mode))))
+      async subtreep visible-only body-only ext-plist
+      #'LaTeX-mode))
+
+When expressed as an anonymous function, using `lambda',
+POST-PROCESS needs to be quoted.
 
 This function returns BUFFER."
   (declare (indent 2))
@@ -6433,7 +6440,10 @@ to send the output file through additional processing, 
e.g,
     (let ((outfile (org-export-output-file-name \".tex\" subtreep)))
       (org-export-to-file \\='latex outfile
         async subtreep visible-only body-only ext-plist
-        (lambda (file) (org-latex-compile file)))
+        #'org-latex-compile)))
+
+When expressed as an anonymous function, using `lambda',
+POST-PROCESS needs to be quoted.
 
 The function returns either a file name returned by POST-PROCESS,
 or FILE."
diff --git a/lisp/outline.el b/lisp/outline.el
index 2ede4e23ea..4027142c94 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, 1993-1995, 1997, 2000-2021 Free Software
+;; Copyright (C) 1986, 1993-1995, 1997, 2000-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
@@ -187,6 +187,7 @@ in the file it applies to.")
                  (function :tag "Custom filter"))
   :version "28.1")
 
+(defvar outline-minor-mode-cycle)
 (defun outline-minor-mode-cycle--bind (map key binding &optional filter)
   (define-key map key
     `(menu-item
@@ -195,8 +196,10 @@ in the file it applies to.")
       :filter
       ,(or filter
            (lambda (cmd)
-             (when (or (not (functionp outline-minor-mode-cycle-filter))
-                       (funcall outline-minor-mode-cycle-filter))
+             (when (and outline-minor-mode-cycle
+                        (outline-on-heading-p t)
+                        (or (not (functionp outline-minor-mode-cycle-filter))
+                            (funcall outline-minor-mode-cycle-filter)))
                cmd))))))
 
 (defvar outline-minor-mode-cycle-map
@@ -223,14 +226,8 @@ in the file it applies to.")
     ;; Highlight headings according to the level.
     (eval . (list (concat "^\\(?:" outline-regexp "\\).*")
                   0 '(if outline-minor-mode
-                         (if outline-minor-mode-cycle
-                             (if outline-minor-mode-highlight
-                                 (list 'face (outline-font-lock-face)
-                                       'keymap outline-minor-mode-cycle-map)
-                               (list 'face nil
-                                     'keymap outline-minor-mode-cycle-map))
-                           (if outline-minor-mode-highlight
-                               (list 'face (outline-font-lock-face))))
+                         (if outline-minor-mode-highlight
+                             (list 'face (outline-font-lock-face)))
                        (outline-font-lock-face))
                   (when outline-minor-mode
                     (pcase outline-minor-mode-highlight
@@ -283,6 +280,7 @@ buffers (yet) -- that will be amended in a future version.
 The `outline-minor-mode-buttons' variable specifies how the
 buttons should look."
   :type 'boolean
+  :safe #'booleanp
   :version "29.1")
 
 (defcustom outline-minor-mode-buttons
@@ -376,8 +374,8 @@ When point is on a heading line, then typing `TAB' cycles 
between `hide all',
 a heading line cycles the whole buffer (`outline-cycle-buffer').
 Typing these keys anywhere outside heading lines uses their default bindings."
   :type 'boolean
+  :safe #'booleanp
   :version "28.1")
-;;;###autoload(put 'outline-minor-mode-cycle 'safe-local-variable 'booleanp)
 
 (defcustom outline-minor-mode-highlight nil
   "Highlight headings in `outline-minor-mode' using font-lock keywords.
@@ -391,8 +389,8 @@ faces to major mode's faces."
                  (const :tag "Overwrite major mode faces" override)
                  (const :tag "Append outline faces to major mode faces" append)
                  (const :tag "Highlight separately from major mode faces" t))
+  :safe #'symbolp
   :version "28.1")
-;;;###autoload(put 'outline-minor-mode-highlight 'safe-local-variable 'symbolp)
 
 (defun outline-minor-mode-highlight-buffer ()
   ;; Fallback to overlays when font-lock is unsupported.
@@ -409,9 +407,7 @@ faces to major mode's faces."
                          (not (get-text-property (point) 'face))))
             (overlay-put overlay 'face (outline-font-lock-face)))
           (when outline-minor-mode-use-buttons
-            (outline--insert-open-button))
-          (when outline-minor-mode-cycle
-            (overlay-put overlay 'keymap outline-minor-mode-cycle-map)))
+            (outline--insert-open-button)))
         (goto-char (match-end 0))))))
 
 ;;;###autoload
@@ -420,11 +416,13 @@ faces to major mode's faces."
 
 See the command `outline-mode' for more information on this mode."
   :lighter " Outl"
-  :keymap (list (cons [menu-bar] outline-minor-mode-menu-bar-map)
-               (cons outline-minor-mode-prefix outline-mode-prefix-map))
+  :keymap (easy-mmode-define-keymap
+           `(([menu-bar] . ,outline-minor-mode-menu-bar-map)
+             (,outline-minor-mode-prefix . ,outline-mode-prefix-map))
+           :inherit outline-minor-mode-cycle-map)
   (if outline-minor-mode
       (progn
-        (when (or outline-minor-mode-cycle outline-minor-mode-highlight)
+        (when outline-minor-mode-highlight
           (if (and global-font-lock-mode (font-lock-specified-p major-mode))
               (progn
                 (font-lock-add-keywords nil outline-font-lock-keywords t)
@@ -437,7 +435,7 @@ See the command `outline-mode' for more information on this 
mode."
         (setq-local line-move-ignore-invisible t)
        ;; Cause use of ellipses for invisible text.
        (add-to-invisibility-spec '(outline . t)))
-    (when (or outline-minor-mode-cycle outline-minor-mode-highlight)
+    (when outline-minor-mode-highlight
       (if font-lock-fontified
           (font-lock-remove-keywords nil outline-font-lock-keywords))
       (remove-overlays nil nil 'outline-overlay t)
@@ -991,7 +989,6 @@ If non-nil, EVENT should be a mouse event."
       (overlay-put o 'help-echo "Click to hide")
       (overlay-put o 'keymap
                    (define-keymap
-                     :parent outline-minor-mode-cycle-map
                      "RET" #'outline-hide-subtree
                      "<mouse-2>" #'outline-hide-subtree)))))
 
@@ -1002,7 +999,6 @@ If non-nil, EVENT should be a mouse event."
       (overlay-put o 'help-echo "Click to show")
       (overlay-put o 'keymap
                    (define-keymap
-                     :parent outline-minor-mode-cycle-map
                      "RET" #'outline-show-subtree
                      "<mouse-2>" #'outline-show-subtree)))))
 
diff --git a/lisp/paren.el b/lisp/paren.el
index 7e7cf6c262..a1f74f2097 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1996, 2001-2022 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 83a2572519..7840ea0a8a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2000, 2003-2022 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 588a5e725a..2fcd3d14a8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 ;; Package: pcomplete
diff --git a/lisp/pcmpl-gnu.el b/lisp/pcmpl-gnu.el
index 6c68645eb2..d0ae9390e3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Package: pcomplete
 
diff --git a/lisp/pcmpl-linux.el b/lisp/pcmpl-linux.el
index 39d4add2be..7c072f3d40 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Package: pcomplete
 
diff --git a/lisp/pcmpl-rpm.el b/lisp/pcmpl-rpm.el
index 39f700cb36..f7925d9d9e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Package: pcomplete
 
diff --git a/lisp/pcmpl-unix.el b/lisp/pcmpl-unix.el
index 49dc2d2fc6..0074722be7 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Package: pcomplete
 
diff --git a/lisp/pcmpl-x.el b/lisp/pcmpl-x.el
index d9479edf6a..261a3d4e27 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 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 64acc416c2..289312e0bb 100644
--- a/lisp/pcomplete.el
+++ b/lisp/pcomplete.el
@@ -1,6 +1,6 @@
 ;;; pcomplete.el --- programmable completion -*- lexical-binding: t -*-
 
-;; Copyright (C) 1999-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 ;; Keywords: processes abbrev
@@ -680,8 +680,8 @@ user actually typed in."
        (match-string which arg)
       (throw 'pcompleted nil))))
 
-(defalias 'pcomplete-match-beginning 'match-beginning)
-(defalias 'pcomplete-match-end 'match-end)
+(define-obsolete-function-alias 'pcomplete-match-beginning #'match-beginning 
"29.1")
+(define-obsolete-function-alias 'pcomplete-match-end #'match-end "29.1")
 
 (defsubst pcomplete--test (pred arg)
   "Perform a programmable completion predicate match."
@@ -1006,7 +1006,7 @@ Arguments NO-GANGING and ARGS-FOLLOW are currently 
ignored."
                             ((eq arg-char ?*) (pcomplete-executables))
                             ((eq arg-char ??) nil)
                             ((eq arg-char ?.) (pcomplete-entries))
-                            ((eq arg-char ?\() (eval result))))))
+                            ((eq arg-char ?\() (eval result t))))))
            (setq index (1+ index))))))))
 
 (defun pcomplete--here (&optional form stub paring form-only)
@@ -1040,7 +1040,7 @@ See the documentation for `pcomplete-here'."
                (funcall form)
              ;; Old calling convention, might still be used by files
              ;; byte-compiled with the older code.
-             (eval form)))))
+             (eval form t)))))
 
 
 (defmacro pcomplete-here* (&optional form stub form-only)
@@ -1062,9 +1062,9 @@ See the documentation for `pcomplete-here'."
        pcomplete-window-restore-timer nil))
 
 (define-obsolete-function-alias 'pcomplete-event-matches-key-specifier-p
-  'eq "27.1")
+  #'eq "27.1")
 
-(define-obsolete-function-alias 'pcomplete-read-event 'read-event "27.1")
+(define-obsolete-function-alias 'pcomplete-read-event #'read-event "27.1")
 
 (defun pcomplete-show-completions (completions)
   "List in help buffer sorted COMPLETIONS.
@@ -1244,7 +1244,7 @@ If specific documentation can't be given, be generic."
                    (fboundp 'Info-goto-node))
               (listp pcomplete-help)))
       (if (listp pcomplete-help)
-         (message "%s" (eval pcomplete-help))
+         (message "%s" (eval pcomplete-help t))
        (save-window-excursion (info))
        (declare-function Info-goto-node
                          "info" (nodename &optional fork strict-case))
diff --git a/lisp/pixel-scroll.el b/lisp/pixel-scroll.el
index f6d1d0ff8c..e8b637ba1a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
 ;; Author: Tak Kunihiro <tkk@misasa.okayama-u.ac.jp>
 ;; Keywords: mouse
 ;; Package: emacs
@@ -68,6 +68,7 @@
 
 (require 'mwheel)
 (require 'subr-x)
+(require 'ring)
 
 (defvar pixel-wait 0
   "Idle time on each step of pixel scroll specified in second.
@@ -91,15 +92,103 @@ is always with pixel resolution.")
 (defvar pixel-last-scroll-time 0
   "Time when the last scrolling was made, in second since the epoch.")
 
-(defvar x-coalesce-scroll-events)
+(defvar mwheel-coalesce-scroll-events)
 
 (defvar pixel-scroll-precision-mode-map
   (let ((map (make-sparse-keymap)))
-    (define-key map [wheel-down] #'pixel-scroll-precision)
-    (define-key map [wheel-up] #'pixel-scroll-precision)
+    (define-key map [wheel-down] 'pixel-scroll-precision)
+    (define-key map [wheel-up] 'pixel-scroll-precision)
+    (define-key map [touch-end] 'pixel-scroll-start-momentum)
+    (define-key map [mode-line wheel-down] 'pixel-scroll-precision)
+    (define-key map [mode-line wheel-up] 'pixel-scroll-precision)
+    (define-key map [mode-line touch-end] 'pixel-scroll-start-momentum)
+    (define-key map [header-line wheel-down] 'pixel-scroll-precision)
+    (define-key map [header-line wheel-up] 'pixel-scroll-precision)
+    (define-key map [header-line touch-end] 'pixel-scroll-start-momentum)
+    (define-key map [vertical-scroll-bar wheel-down] 'pixel-scroll-precision)
+    (define-key map [vertical-scroll-bar wheel-up] 'pixel-scroll-precision)
+    (define-key map [vertical-scroll-bar touch-end] 
'pixel-scroll-start-momentum)
+    (define-key map [left-margin wheel-down] 'pixel-scroll-precision)
+    (define-key map [left-margin wheel-up] 'pixel-scroll-precision)
+    (define-key map [left-margin touch-end] 'pixel-scroll-start-momentum)
+    (define-key map [right-margin wheel-down] 'pixel-scroll-precision)
+    (define-key map [right-margin wheel-up] 'pixel-scroll-precision)
+    (define-key map [right-margin touch-end] 'pixel-scroll-start-momentum)
+    (define-key map [left-fringe wheel-down] 'pixel-scroll-precision)
+    (define-key map [left-fringe wheel-up] 'pixel-scroll-precision)
+    (define-key map [left-fringe touch-end] 'pixel-scroll-start-momentum)
+    (define-key map [right-fringe wheel-down] 'pixel-scroll-precision)
+    (define-key map [right-fringe wheel-up] 'pixel-scroll-precision)
+    (define-key map [right-fringe touch-end] 'pixel-scroll-start-momentum)
+    (define-key map [next] 'pixel-scroll-interpolate-down)
+    (define-key map [prior] 'pixel-scroll-interpolate-up)
     map)
   "The key map used by `pixel-scroll-precision-mode'.")
 
+(defcustom pixel-scroll-precision-use-momentum nil
+  "If non-nil, continue to scroll the display after wheel movement stops.
+This is only effective if supported by your mouse or touchpad."
+  :group 'mouse
+  :type 'boolean
+  :version "29.1")
+
+(defcustom pixel-scroll-precision-momentum-tick 0.01
+  "Number of seconds between each momentum scroll."
+  :group 'mouse
+  :type 'float
+  :version "29.1")
+
+(defcustom pixel-scroll-precision-momentum-seconds 1.75
+  "The maximum duration in seconds of momentum scrolling."
+  :group 'mouse
+  :type 'float
+  :version "29.1")
+
+(defcustom pixel-scroll-precision-momentum-min-velocity 10.0
+  "The minimum scrolled pixels per second before momentum scrolling starts."
+  :group 'mouse
+  :type 'float
+  :version "29.1")
+
+(defcustom pixel-scroll-precision-initial-velocity-factor (/ 0.0335 4)
+  "Factor applied to the initial velocity before momentum scrolling begins."
+  :group 'mouse
+  :type 'float
+  :version "29.1")
+
+(defcustom pixel-scroll-precision-large-scroll-height nil
+  "Pixels that must be scrolled before an animation is performed.
+Nil means to not interpolate such scrolls."
+  :group 'mouse
+  :type '(choice (const :tag "Do not interpolate large scrolls" nil)
+                 number)
+  :version "29.1")
+
+(defcustom pixel-scroll-precision-interpolation-total-time 0.1
+  "The total time in seconds to spend interpolating a large scroll."
+  :group 'mouse
+  :type 'float
+  :version "29.1")
+
+(defcustom pixel-scroll-precision-interpolation-factor 4.0
+  "A factor to apply to the distance of an interpolated scroll."
+  :group 'mouse
+  :type 'float
+  :version "29.1")
+
+(defcustom pixel-scroll-precision-interpolation-between-scroll 0.001
+  "The number of seconds between each step of an interpolated scroll."
+  :group 'mouse
+  :type 'float
+  :version "29.1")
+
+(defcustom pixel-scroll-precision-interpolate-page nil
+  "Whether or not to interpolate scrolling via the Page Down and Page Up keys.
+This is only effective when `pixel-scroll-precision-mode' is enabled."
+  :group 'scrolling
+  :type 'boolean
+  :version "29.1")
+
 (defun pixel-scroll-in-rush-p ()
   "Return non-nil if next scroll should be non-smooth.
 When scrolling request is delivered soon after the previous one,
@@ -333,28 +422,44 @@ returns nil."
         (setq pos-list (cdr pos-list))))
     visible-pos))
 
-(defun pixel-point-at-unseen-line ()
-  "Return the character position of line above the selected window.
-The returned value is the position of the first character on the
-unseen line just above the scope of current window."
-  (let* ((pos0 (window-start))
+(defun pixel-point-and-height-at-unseen-line ()
+  "Return the position and pixel height of line above the selected window.
+The returned value is a cons of the position of the first
+character on the unseen line just above the scope of current
+window, and the pixel height of that line."
+  (let* ((pos0 (save-excursion
+                 (goto-char (window-start))
+                 (unless (bobp)
+                   (beginning-of-visual-line))
+                 (point)))
          (vscroll0 (window-vscroll nil t))
+         (line-height nil)
          (pos
           (save-excursion
             (goto-char pos0)
             (if (bobp)
                 (point-min)
-              ;; When there's an overlay string at window-start,
-              ;; (beginning-of-visual-line 0) stays put.
-              (let ((ppos (point))
-                    (tem (beginning-of-visual-line 0)))
-                (if (eq tem ppos)
-                    (vertical-motion -1))
-                (point))))))
+              (vertical-motion -1)
+              (setq line-height
+                    (cdr (window-text-pixel-size nil (point) pos0)))
+              (point)))))
     ;; restore initial position
     (set-window-start nil pos0 t)
     (set-window-vscroll nil vscroll0 t)
-    pos))
+    (when (and line-height
+               (> (car (posn-x-y (posn-at-point pos0)))
+                  (line-number-display-width t)))
+      (setq line-height (- line-height
+                           (save-excursion
+                             (goto-char pos0)
+                             (line-pixel-height)))))
+    (cons pos line-height)))
+
+(defun pixel-point-at-unseen-line ()
+  "Return the character position of line above the selected window.
+The returned value is the position of the first character on the
+unseen line just above the scope of current window."
+  (car (pixel-point-and-height-at-unseen-line)))
 
 (defun pixel-scroll-down-and-set-window-vscroll (vscroll)
   "Scroll down a line and set VSCROLL in pixels.
@@ -364,88 +469,174 @@ Otherwise, redisplay will reset the window's vscroll."
   (set-window-start nil (pixel-point-at-unseen-line) t)
   (set-window-vscroll nil vscroll t))
 
-;; FIXME: This doesn't work when DELTA is larger than the height
-;; of the current window, and someone should probably fix that
-;; at some point.
-(defun pixel-scroll-precision-scroll-down (delta)
+(defun pixel-scroll-precision-scroll-down-page (delta)
   "Scroll the current window down by DELTA pixels.
 Note that this function doesn't work if DELTA is larger than
 the height of the current window."
-  (when-let* ((posn (posn-at-point))
-             (current-y (cdr (posn-x-y posn)))
-             (min-y (+ (frame-char-height)
-                        (window-tab-line-height)
-                       (window-header-line-height)))
-              (cursor-height (line-pixel-height))
-              (window-height (window-text-height nil t))
-              (next-height (save-excursion
-                             (vertical-motion 1)
-                             (line-pixel-height))))
-    (if (and (> delta 0)
-             (<= cursor-height window-height))
-       (while (< (- current-y min-y) delta)
-         (vertical-motion 1)
-          (setq current-y (+ current-y
-                             (line-pixel-height)))
-         (when (eobp)
-           (signal 'end-of-buffer nil)))
-      (when (< (- (cdr (posn-object-width-height posn))
-                  (cdr (posn-object-x-y posn)))
-               (- window-height next-height))
-        (vertical-motion 1)
-        (setq posn (posn-at-point)
-              current-y (cdr (posn-x-y posn)))
-        (while (< (- current-y min-y) delta)
-         (vertical-motion 1)
-          (setq current-y (+ current-y
-                             (line-pixel-height)))
-         (when (eobp)
-           (signal 'end-of-buffer nil)))))
-    (let* ((desired-pos (posn-at-x-y 0 (+ delta
-                                         (window-tab-line-height)
-                                         (window-header-line-height))))
-          (desired-start (posn-point desired-pos))
-          (desired-vscroll (cdr (posn-object-x-y desired-pos))))
-      (unless (eq (window-start) desired-start)
-        (set-window-start nil desired-start t))
-      (set-window-vscroll nil desired-vscroll t))))
+  (let* ((desired-pos (posn-at-x-y 0 (+ delta
+                                       (window-tab-line-height)
+                                       (window-header-line-height))))
+        (desired-start (posn-point desired-pos))
+         (current-vs (window-vscroll nil t))
+         (start-posn (unless (eq desired-start (window-start))
+                       (posn-at-point desired-start)))
+        (desired-vscroll (if start-posn
+                              (- delta (cdr (posn-x-y start-posn)))
+                            (+ current-vs delta)))
+         (edges (window-edges nil t))
+         (usable-height (- (nth 3 edges)
+                           (nth 1 edges)))
+         (next-pos (save-excursion
+                     (goto-char desired-start)
+                     (when (zerop (vertical-motion (1+ scroll-margin)))
+                       (set-window-start nil desired-start)
+                       (signal 'end-of-buffer nil))
+                     (while (when-let ((posn (posn-at-point)))
+                              (< (cdr (posn-x-y posn)) delta))
+                       (when (zerop (vertical-motion 1))
+                         (set-window-start nil desired-start)
+                         (signal 'end-of-buffer nil)))
+                     (point)))
+         (scroll-preserve-screen-position nil)
+         (auto-window-vscroll nil))
+    (when (and (or (< (point) next-pos))
+               (let ((pos-visibility (pos-visible-in-window-p next-pos nil t)))
+                 (and pos-visibility
+                      (or (eq (length pos-visibility) 2)
+                          (when-let* ((posn (posn-at-point next-pos)))
+                            (> (cdr (posn-object-width-height posn))
+                               usable-height))))))
+      (goto-char next-pos))
+    (set-window-start nil (if (zerop (window-hscroll))
+                              desired-start
+                            (save-excursion
+                              (goto-char desired-start)
+                              (beginning-of-visual-line)
+                              (point)))
+                      t)
+    (set-window-vscroll nil desired-vscroll t)))
+
+(defun pixel-scroll-precision-scroll-down (delta)
+  "Scroll the current window down by DELTA pixels."
+  (let ((max-height (- (window-text-height nil t)
+                       (frame-char-height))))
+    (while (> delta max-height)
+      (pixel-scroll-precision-scroll-down-page max-height)
+      (setq delta (- delta max-height)))
+    (pixel-scroll-precision-scroll-down-page delta)))
+
+(defun pixel-scroll-precision-scroll-up-page (delta)
+  "Scroll the current window up by DELTA pixels.
+Note that this function doesn't work if DELTA is larger than
+the height of the current window."
+  (let* ((edges (window-edges nil t nil t))
+         (max-y (- (nth 3 edges)
+                   (nth 1 edges)))
+         (usable-height max-y)
+         (posn (posn-at-x-y 0 (+ (window-tab-line-height)
+                                 (window-header-line-height)
+                                 (- max-y delta))))
+         (point (posn-point posn))
+         (up-point (save-excursion
+                     (goto-char point)
+                     (vertical-motion (- (1+ scroll-margin)))
+                     (point))))
+    (when (> (point) up-point)
+      (when (let ((pos-visible (pos-visible-in-window-p up-point nil t)))
+              (or (eq (length pos-visible) 2)
+                  (when-let* ((posn (posn-at-point up-point))
+                              (edges (window-edges nil t))
+                              (usable-height (- (nth 3 edges)
+                                                (nth 1 edges))))
+                    (> (cdr (posn-object-width-height posn))
+                       usable-height))))
+        (goto-char up-point)))
+    (let ((current-vscroll (window-vscroll nil t)))
+      (setq delta (- delta current-vscroll))
+      (set-window-vscroll nil 0 t)
+      (when (> delta 0)
+        (let* ((start (window-start))
+               (dims (window-text-pixel-size nil (cons start (- delta))
+                                             start nil nil nil t))
+               (height (nth 1 dims))
+               (position (nth 2 dims)))
+          (set-window-start nil position t)
+          ;; If the line above is taller than the window height (i.e. there's
+          ;; a very tall image), keep point on it.
+          (when (> height usable-height)
+            (goto-char position))
+          (when (or (not position) (eq position start))
+            (signal 'beginning-of-buffer nil))
+          (setq delta (- delta height))))
+      (when (< delta 0)
+        (set-window-vscroll nil (- delta) t)))))
+
+(defun pixel-scroll-precision-interpolate (delta)
+  "Interpolate a scroll of DELTA pixels.
+This results in the window being scrolled by DELTA pixels with an
+animation."
+  (let ((percentage 0)
+        (total-time pixel-scroll-precision-interpolation-total-time)
+        (factor pixel-scroll-precision-interpolation-factor)
+        (last-time (float-time))
+        (time-elapsed 0.0)
+        (between-scroll pixel-scroll-precision-interpolation-between-scroll)
+        (rem (window-parameter nil 'interpolated-scroll-remainder))
+        (time (window-parameter nil 'interpolated-scroll-remainder-time)))
+    (when (and rem time
+               (< (- (float-time) time) 1.0)
+               (eq (< delta 0) (< rem 0)))
+      (setq delta (+ delta rem)))
+    (if (or (null rem)
+            (eq (< delta 0) (< rem 0)))
+        (while-no-input
+          (unwind-protect
+              (while (< percentage 1)
+                (redisplay t)
+                (sleep-for between-scroll)
+                (setq time-elapsed (+ time-elapsed
+                                      (- (float-time) last-time))
+                      percentage (/ time-elapsed total-time))
+                (let ((throw-on-input nil))
+                  (if (< delta 0)
+                      (pixel-scroll-precision-scroll-down
+                       (ceiling (abs (* (* delta factor)
+                                        (/ between-scroll total-time)))))
+                    (pixel-scroll-precision-scroll-up
+                     (ceiling (* (* delta factor)
+                                 (/ between-scroll total-time))))))
+                (setq last-time (float-time)))
+            (if (< percentage 1)
+                (progn
+                  (set-window-parameter nil 'interpolated-scroll-remainder
+                                        (* delta (- 1 percentage)))
+                  (set-window-parameter nil 'interpolated-scroll-remainder-time
+                                        (float-time)))
+              (set-window-parameter nil
+                                    'interpolated-scroll-remainder
+                                    nil)
+              (set-window-parameter nil
+                                    'interpolated-scroll-remainder-time
+                                    nil))))
+      (set-window-parameter nil
+                            'interpolated-scroll-remainder
+                            nil)
+      (set-window-parameter nil
+                            'interpolated-scroll-remainder-time
+                            nil))))
 
 (defun pixel-scroll-precision-scroll-up (delta)
   "Scroll the current window up by DELTA pixels."
-  (when-let* ((max-y (- (window-text-height nil t)
-                        (frame-char-height)
-                       (window-tab-line-height)
-                       (window-header-line-height)))
-             (posn (posn-at-point))
-             (current-y (+ (cdr (posn-x-y posn))
-                           (line-pixel-height))))
-    (while (< (- max-y current-y) delta)
-      (vertical-motion -1)
-      (setq current-y (- current-y (line-pixel-height)))))
-  (let ((current-vscroll (window-vscroll nil t)))
-    (setq delta (- delta current-vscroll))
-    (set-window-vscroll nil 0 t))
-  (while (> delta 0)
-    (set-window-start nil (save-excursion
-                            (goto-char (window-start))
-                            (when (zerop (vertical-motion -1))
-                             (set-window-vscroll nil 0)
-                             (signal 'beginning-of-buffer nil))
-                            (setq delta (- delta (line-pixel-height)))
-                            (point))
-                     t))
-  (when (< delta 0)
-    (when-let* ((desired-pos (posn-at-x-y 0 (+ (- delta)
-                                         (window-tab-line-height)
-                                         (window-header-line-height))))
-               (desired-start (posn-point desired-pos))
-               (desired-vscroll (cdr (posn-object-x-y desired-pos))))
-      (unless (eq (window-start) desired-start)
-        (set-window-start nil desired-start t))
-      (set-window-vscroll nil desired-vscroll t))))
-
-;; FIXME: This doesn't work when there's an image above the current
-;; line that is taller than the window.
+  (let ((max-height (- (window-text-height nil t)
+                       (frame-char-height))))
+    (while (> delta max-height)
+      (pixel-scroll-precision-scroll-up-page max-height)
+      (setq delta (- delta max-height)))
+    (pixel-scroll-precision-scroll-up-page delta)))
+
+;; FIXME: This doesn't _always_ work when there's an image above the
+;; current line that is taller than the window, and scrolling can
+;; sometimes be jumpy in that case.
 (defun pixel-scroll-precision (event)
   "Scroll the display vertically by pixels according to EVENT.
 Move the display up or down by the pixel deltas in EVENT to
@@ -453,17 +644,140 @@ scroll the display according to the user's turning the 
mouse
 wheel."
   (interactive "e")
   (let ((window (mwheel-event-window event)))
-    (if (and (nth 4 event)
-             (zerop (window-hscroll window)))
+    (if (and (nth 4 event))
         (let ((delta (round (cdr (nth 4 event)))))
-          (if (> (abs delta) (window-text-height window t))
-              (mwheel-scroll event nil)
-            (with-selected-window window
-              (if (< delta 0)
-                 (pixel-scroll-precision-scroll-down (- delta))
-                (pixel-scroll-precision-scroll-up delta)))))
+          (unless (zerop delta)
+            (if (> (abs delta) (window-text-height window t))
+                (mwheel-scroll event nil)
+              (with-selected-window window
+                (if (and pixel-scroll-precision-large-scroll-height
+                         (> (abs delta)
+                            pixel-scroll-precision-large-scroll-height)
+                         (let* ((kin-state (pixel-scroll-kinetic-state))
+                                (ring (aref kin-state 0))
+                                (time (aref kin-state 1)))
+                           (or (null time)
+                               (> (- (float-time) time) 1.0)
+                               (and (consp ring)
+                                    (ring-empty-p ring)))))
+                    (progn
+                      (let ((kin-state (pixel-scroll-kinetic-state)))
+                        (aset kin-state 0 (make-ring 30))
+                        (aset kin-state 1 nil))
+                      (pixel-scroll-precision-interpolate delta))
+                  (condition-case nil
+                      (progn
+                        (if (< delta 0)
+                           (pixel-scroll-precision-scroll-down (- delta))
+                          (pixel-scroll-precision-scroll-up delta))
+                        (pixel-scroll-accumulate-velocity delta))
+                    ;; Do not ding at buffer limits.  Show a message instead.
+                    (beginning-of-buffer
+                     (message (error-message-string '(beginning-of-buffer))))
+                    (end-of-buffer
+                     (message (error-message-string '(end-of-buffer))))))))))
       (mwheel-scroll event nil))))
 
+(defun pixel-scroll-kinetic-state ()
+  "Return the kinetic scroll state of the current window.
+It is a vector of the form [ VELOCITY TIME SIGN ]."
+  (or (window-parameter nil 'kinetic-state)
+      (set-window-parameter nil 'kinetic-state
+                            (vector (make-ring 30) nil nil))))
+
+(defun pixel-scroll-accumulate-velocity (delta)
+  "Accumulate DELTA into the current window's kinetic scroll state."
+  (let* ((state (pixel-scroll-kinetic-state))
+         (ring (aref state 0))
+         (time (aref state 1)))
+    (when (or (and time (> (- (float-time) time) 0.5))
+              (and (not (ring-empty-p ring))
+                   (not (eq (< delta 0)
+                            (aref state 2)))))
+      (aset state 0 (make-ring 30)))
+    (aset state 2 (< delta 0))
+    (ring-insert (aref state 0)
+                 (cons (aset state 1 (float-time))
+                       delta))))
+
+(defun pixel-scroll-calculate-velocity (state)
+  "Calculate velocity from the kinetic state vector STATE."
+  (let* ((ring (aref state 0))
+         (elts (ring-elements ring))
+         (total 0))
+    (dolist (tem elts)
+      (setq total (+ total (cdr tem))))
+    (* (/ total (- (float-time) (caar (last elts))))
+       pixel-scroll-precision-initial-velocity-factor)))
+
+(defun pixel-scroll-start-momentum (event)
+  "Start kinetic scrolling for the touch event EVENT."
+  (interactive "e")
+  (when pixel-scroll-precision-use-momentum
+    (let ((window (mwheel-event-window event))
+          (state nil))
+      (with-selected-window window
+        (setq state (pixel-scroll-kinetic-state))
+        (when (and (aref state 1)
+                   (listp (aref state 0)))
+          (condition-case nil
+              (while-no-input
+                (unwind-protect (progn
+                                  (aset state 0 
(pixel-scroll-calculate-velocity state))
+                                  (when (> (abs (aref state 0))
+                                           
pixel-scroll-precision-momentum-min-velocity)
+                                    (let* ((velocity (aref state 0))
+                                           (original-velocity velocity)
+                                           (time-spent 0))
+                                      (if (> velocity 0)
+                                          (while (and (> velocity 0)
+                                                      (<= time-spent
+                                                          
pixel-scroll-precision-momentum-seconds))
+                                            (when (> (round velocity) 0)
+                                              
(pixel-scroll-precision-scroll-up (round velocity)))
+                                            (setq velocity (- velocity
+                                                              (/ 
original-velocity
+                                                                 (/ 
pixel-scroll-precision-momentum-seconds
+                                                                    
pixel-scroll-precision-momentum-tick))))
+                                            (redisplay t)
+                                            (sit-for 
pixel-scroll-precision-momentum-tick)
+                                            (setq time-spent (+ time-spent
+                                                                
pixel-scroll-precision-momentum-tick))))
+                                      (while (and (< velocity 0)
+                                                  (<= time-spent
+                                                      
pixel-scroll-precision-momentum-seconds))
+                                        (when (> (round (abs velocity)) 0)
+                                          (pixel-scroll-precision-scroll-down 
(round
+                                                                               
(abs velocity))))
+                                        (setq velocity (+ velocity
+                                                          (/ (abs 
original-velocity)
+                                                             (/ 
pixel-scroll-precision-momentum-seconds
+                                                                
pixel-scroll-precision-momentum-tick))))
+                                        (redisplay t)
+                                        (sit-for 
pixel-scroll-precision-momentum-tick)
+                                        (setq time-spent (+ time-spent
+                                                            
pixel-scroll-precision-momentum-tick))))))
+                  (aset state 0 (make-ring 30))
+                  (aset state 1 nil)))
+            (beginning-of-buffer
+             (message (error-message-string '(beginning-of-buffer))))
+            (end-of-buffer
+             (message (error-message-string '(end-of-buffer))))))))))
+
+(defun pixel-scroll-interpolate-down ()
+  "Interpolate a scroll downwards by one page."
+  (interactive)
+  (if pixel-scroll-precision-interpolate-page
+      (pixel-scroll-precision-interpolate (- (window-text-height nil t)))
+    (scroll-up)))
+
+(defun pixel-scroll-interpolate-up ()
+  "Interpolate a scroll upwards by one page."
+  (interactive)
+  (if pixel-scroll-precision-interpolate-page
+      (pixel-scroll-precision-interpolate (window-text-height nil t))
+    (scroll-down)))
+
 ;;;###autoload
 (define-minor-mode pixel-scroll-precision-mode
   "Toggle pixel scrolling.
@@ -472,7 +786,7 @@ precisely, according to the turning of the mouse wheel."
   :global t
   :group 'mouse
   :keymap pixel-scroll-precision-mode-map
-  (setq x-coalesce-scroll-events
+  (setq mwheel-coalesce-scroll-events
         (not pixel-scroll-precision-mode)))
 
 (provide 'pixel-scroll)
diff --git a/lisp/play/5x5.el b/lisp/play/5x5.el
index 085c97f5d8..8fe72ddf59 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: Dave Pearson <davep@davep.org>
 ;; Created: 1998-10-03
@@ -107,39 +107,37 @@
 (defvar 5x5-buffer-name "*5x5*"
   "Name of the 5x5 play buffer.")
 
-(defvar 5x5-mode-map
-  (let ((map (make-sparse-keymap)))
-    (suppress-keymap map t)
-    (define-key map "?"                       #'describe-mode)
-    (define-key map "\r"                      #'5x5-flip-current)
-    (define-key map " "                       #'5x5-flip-current)
-    (define-key map [up]                      #'5x5-up)
-    (define-key map [down]                    #'5x5-down)
-    (define-key map [left]                    #'5x5-left)
-    (define-key map [tab]                     #'5x5-right)
-    (define-key map [right]                   #'5x5-right)
-    (define-key map [(control a)]             #'5x5-bol)
-    (define-key map [(control e)]             #'5x5-eol)
-    (define-key map [(control p)]             #'5x5-up)
-    (define-key map [(control n)]             #'5x5-down)
-    (define-key map [(control b)]             #'5x5-left)
-    (define-key map [(control f)]             #'5x5-right)
-    (define-key map [home]                    #'5x5-bol)
-    (define-key map [end]                     #'5x5-eol)
-    (define-key map [prior]                   #'5x5-first)
-    (define-key map [next]                    #'5x5-last)
-    (define-key map "r"                       #'5x5-randomize)
-    (define-key map [(control c) (control r)] #'5x5-crack-randomly)
-    (define-key map [(control c) (control c)] #'5x5-crack-mutating-current)
-    (define-key map [(control c) (control b)] #'5x5-crack-mutating-best)
-    (define-key map [(control c) (control x)] #'5x5-crack-xor-mutate)
-    (define-key map "n"                       #'5x5-new-game)
-    (define-key map "s"                       #'5x5-solve-suggest)
-    (define-key map "<"                       #'5x5-solve-rotate-left)
-    (define-key map ">"                       #'5x5-solve-rotate-right)
-    (define-key map "q"                       #'5x5-quit-game)
-    map)
-  "Local keymap for the 5x5 game.")
+(defvar-keymap 5x5-mode-map
+  :doc "Local keymap for the 5x5 game."
+  :suppress 'nodigits
+  "?"       #'describe-mode
+  "RET"     #'5x5-flip-current
+  "SPC"     #'5x5-flip-current
+  "<up>"    #'5x5-up
+  "<down>"  #'5x5-down
+  "<left>"  #'5x5-left
+  "<tab>"   #'5x5-right
+  "<right>" #'5x5-right
+  "C-a"     #'5x5-bol
+  "C-e"     #'5x5-eol
+  "C-p"     #'5x5-up
+  "C-n"     #'5x5-down
+  "C-b"     #'5x5-left
+  "C-f"     #'5x5-right
+  "<home>"  #'5x5-bol
+  "<end>"   #'5x5-eol
+  "<prior>" #'5x5-first
+  "<next>"  #'5x5-last
+  "r"       #'5x5-randomize
+  "C-c C-r" #'5x5-crack-randomly
+  "C-c C-c" #'5x5-crack-mutating-current
+  "C-c C-b" #'5x5-crack-mutating-best
+  "C-c C-x" #'5x5-crack-xor-mutate
+  "n"       #'5x5-new-game
+  "s"       #'5x5-solve-suggest
+  "<"       #'5x5-solve-rotate-left
+  ">"       #'5x5-solve-rotate-right
+  "q"       #'5x5-quit-game)
 
 (defvar-local 5x5-solver-output nil
   "List that is the output of an arithmetic solver.
diff --git a/lisp/play/animate.el b/lisp/play/animate.el
index 54ee9dc84e..4f4c936cd6 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 13bcdcc859..8db24c9127 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-2021 Free Software Foundation,
+;; Copyright (C) 1985-1987, 1992, 2001-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: F. Thomas May <uw-nsr!uw-warp!tom@beaver.cs.washington.edu>
@@ -85,32 +85,21 @@
 (defvar bb-balls-placed nil
   "List of already placed balls.")
 
-;; This is used below to remap existing bindings for cursor motion to
-;; blackbox-specific bindings in blackbox-mode-map.  This is so that
-;; users who prefer non-default key bindings for cursor motion don't
-;; lose that when they play Blackbox.
-(defun blackbox-redefine-key (map oldfun newfun)
-  "Redefine keys that run the function OLDFUN to run NEWFUN instead."
-  (define-key map (vector 'remap oldfun) newfun))
-
-
-(defvar blackbox-mode-map
-  (let ((map (make-keymap)))
-    (suppress-keymap map t)
-    (blackbox-redefine-key map 'backward-char 'bb-left)
-    (blackbox-redefine-key map 'left-char 'bb-left)
-    (blackbox-redefine-key map 'forward-char 'bb-right)
-    (blackbox-redefine-key map 'right-char 'bb-right)
-    (blackbox-redefine-key map 'previous-line 'bb-up)
-    (blackbox-redefine-key map 'next-line 'bb-down)
-    (blackbox-redefine-key map 'move-end-of-line 'bb-eol)
-    (blackbox-redefine-key map 'move-beginning-of-line 'bb-bol)
-    (define-key map " " 'bb-romp)
-    (define-key map "q" 'bury-buffer)
-    (define-key map [insert] 'bb-romp)
-    (define-key map [return] 'bb-done)
-    (blackbox-redefine-key map 'newline 'bb-done)
-    map))
+(defvar-keymap blackbox-mode-map
+  :suppress 'nodigits
+  "SPC"      #'bb-romp
+  "q"        #'bury-buffer
+  "<insert>" #'bb-romp
+  "<return>" #'bb-done
+  "<remap> <backward-char>"          #'bb-left
+  "<remap> <left-char>"              #'bb-left
+  "<remap> <forward-char>"           #'bb-right
+  "<remap> <right-char>"             #'bb-right
+  "<remap> <previous-line>"          #'bb-up
+  "<remap> <next-line>"              #'bb-down
+  "<remap> <move-end-of-line>"       #'bb-eol
+  "<remap> <move-beginning-of-line>" #'bb-bol
+  "<remap> <newline>"                #'bb-done)
 
 ;; Blackbox mode is suitable only for specially formatted data.
 
@@ -426,6 +415,11 @@ a reflection."
     (insert c)
     (backward-char 1)))
 
+(defun blackbox-redefine-key (map oldfun newfun)
+  "Redefine keys that run the function OLDFUN to run NEWFUN instead."
+  (declare (obsolete define-key "29.1"))
+  (define-key map (vector 'remap oldfun) newfun))
+
 (provide 'blackbox)
 
 ;;; blackbox.el ends here
diff --git a/lisp/play/bubbles.el b/lisp/play/bubbles.el
index e695a75e08..93fbc3b51b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
 
 ;; Author:      Ulf Jasper <ulf.jasper@web.de>
 ;; URL:         http://ulf.epplejasper.de/
@@ -809,22 +809,21 @@ static char * dot3d_xpm[] = {
   (bubbles--update-faces-or-images))
 
 
-(defvar bubbles-mode-map
-  (let ((map (make-sparse-keymap 'bubbles-mode-map)))
-    ;; (suppress-keymap map t)
-    (define-key map "q" 'bubbles-quit)
-    (define-key map "\n" 'bubbles-plop)
-    (define-key map " " 'bubbles-plop)
-    (define-key map [double-down-mouse-1] 'bubbles-plop)
-    (define-key map [mouse-2] 'bubbles-plop)
-    (define-key map "\C-m" 'bubbles-plop)
-    (define-key map "u" 'bubbles-undo)
-    (define-key map "p" 'previous-line)
-    (define-key map "n" 'next-line)
-    (define-key map "f" 'forward-char)
-    (define-key map "b" 'backward-char)
-    map)
-  "Mode map for `bubbles'.")
+(defvar-keymap bubbles-mode-map
+  :doc "Mode map for `bubbles'."
+  :name 'bubbles-mode-map
+  "q"   #'bubbles-quit
+  "C-j" #'bubbles-plop
+  "SPC" #'bubbles-plop
+  "C-m" #'bubbles-plop
+  "u"   #'bubbles-undo
+  "p"   #'previous-line
+  "n"   #'next-line
+  "f"   #'forward-char
+  "b"   #'backward-char
+
+  "<double-down-mouse-1>" #'bubbles-plop
+  "<mouse-2>"             #'bubbles-plop)
 
 (easy-menu-define bubbles-menu bubbles-mode-map
   "Menu for `bubbles'."
diff --git a/lisp/play/cookie1.el b/lisp/play/cookie1.el
index d1bf45ed51..fcdd2a7ce9 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 2001-2022 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 5431d7f068..7f821bf4cf 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1996, 2001-2022 Free Software Foundation, Inc.
 ;;
 ;; Author: Christopher J. Madsen <chris_madsen@geocities.com>
 ;; Keywords: games
@@ -138,36 +138,31 @@ the tail of the list."
      (2 font-lock-string-face)))
   "Font Lock keywords for Decipher mode.")
 
-(defvar decipher-mode-map
-  (let ((map (make-keymap)))
-    (suppress-keymap map)
-    (define-key map "A" #'decipher-show-alphabet)
-    (define-key map "C" #'decipher-complete-alphabet)
-    (define-key map "D" #'decipher-digram-list)
-    (define-key map "F" #'decipher-frequency-count)
-    (define-key map "M" #'decipher-make-checkpoint)
-    (define-key map "N" #'decipher-adjacency-list)
-    (define-key map "R" #'decipher-restore-checkpoint)
-    (define-key map "U" #'decipher-undo)
-    (define-key map " " #'decipher-keypress)
-    (define-key map [remap undo] #'decipher-undo)
-    (define-key map [remap advertised-undo] #'decipher-undo)
-    (let ((key ?a))
-      (while (<= key ?z)
-       (define-key map (vector key) #'decipher-keypress)
-       (cl-incf key)))
-    map)
-  "Keymap for Decipher mode.")
-
-
-(defvar decipher-stats-mode-map
-  (let ((map (make-keymap)))
-    (suppress-keymap map)
-    (define-key map "D" #'decipher-digram-list)
-    (define-key map "F" #'decipher-frequency-count)
-    (define-key map "N" #'decipher-adjacency-list)
-    map)
-  "Keymap for Decipher-Stats mode.")
+(defvar-keymap decipher-mode-map
+  :doc "Keymap for Decipher mode."
+  :suppress t
+  "A"   #'decipher-show-alphabet
+  "C"   #'decipher-complete-alphabet
+  "D"   #'decipher-digram-list
+  "F"   #'decipher-frequency-count
+  "M"   #'decipher-make-checkpoint
+  "N"   #'decipher-adjacency-list
+  "R"   #'decipher-restore-checkpoint
+  "U"   #'decipher-undo
+  "SPC" #'decipher-keypress
+  "<remap> <undo>" #'decipher-undo
+  "<remap> <advertised-undo>" #'decipher-undo)
+(let ((key ?a))
+  (while (<= key ?z)
+    (keymap-set decipher-mode-map (char-to-string key) #'decipher-keypress)
+    (cl-incf key)))
+
+(defvar-keymap decipher-stats-mode-map
+  :doc "Keymap for Decipher-Stats mode."
+  :suppress t
+  "D" #'decipher-digram-list
+  "F" #'decipher-frequency-count
+  "N" #'decipher-adjacency-list)
 
 
 (defvar decipher-mode-syntax-table
diff --git a/lisp/play/dissociate.el b/lisp/play/dissociate.el
index a1cc4727b5..1606e6ae9f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 2001-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: games
diff --git a/lisp/play/doctor.el b/lisp/play/doctor.el
index 33fecaa188..b93d768cbe 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, 1987, 1994, 1996, 2000-2021 Free Software
+;; Copyright (C) 1985, 1987, 1994, 1996, 2000-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
@@ -126,11 +126,9 @@
     (set what ww)
     first))
 
-(defvar doctor-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map "\n" 'doctor-read-print)
-    (define-key map "\r" 'doctor-ret-or-read)
-    map))
+(defvar-keymap doctor-mode-map
+  "C-j" #'doctor-read-print
+  "RET" #'doctor-ret-or-read)
 
 (define-derived-mode doctor-mode text-mode "Doctor"
   "Major mode for running the Doctor (Eliza) program.
diff --git a/lisp/play/dunnet.el b/lisp/play/dunnet.el
index 706c1be81e..07f27374df 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1992-1993, 2001-2022 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 f13302525b..3bc51f6d68 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, 2001-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2001-2022 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 49a0c9ee02..256b4e19ce 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-1998, 2001-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2022 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 cc9a6b7a4f..6a0dc6a623 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1999, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Ian T Zimmerman <itz@rahul.net>
 ;; Created: Wed Dec 10 07:41:46 PST 1997
@@ -554,54 +554,55 @@ buffer, it is replaced by the new value.  See the 
documentation for
     (gametree-hack-file-layout))
   nil)
 
-;;;; Key bindings
-(defvar gametree-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map "\C-c\C-j" 'gametree-break-line-here)
-    (define-key map "\C-c\C-v" 'gametree-insert-new-leaf)
-    (define-key map "\C-c\C-m" 'gametree-merge-line)
-    (define-key map "\C-c\C-r " 'gametree-layout-to-register)
-    (define-key map "\C-c\C-r/" 'gametree-layout-to-register)
-    (define-key map "\C-c\C-rj" 'gametree-apply-register-layout)
-    (define-key map "\C-c\C-y" 'gametree-save-and-hack-layout)
-    (define-key map "\C-c;" 'gametree-insert-score)
-    (define-key map "\C-c^" 'gametree-compute-and-insert-score)
-    map))
-
-(define-derived-mode gametree-mode outline-mode "GameTree"
-  "Major mode for managing game analysis trees.
-Useful to postal and email chess (and, it is hoped, also checkers, go,
-shogi, etc.) players, it is a slightly modified version of Outline mode.
-
-\\{gametree-mode-map}"
-  (auto-fill-mode 0)
-  (add-hook 'write-contents-functions 'gametree-save-and-hack-layout nil t))
+
+;;;; Mouse commands
 
-;;;; Goodies for mousing users
 (defun gametree-mouse-break-line-here (event)
   (interactive "e")
   (mouse-set-point event)
   (gametree-break-line-here))
+
 (defun gametree-mouse-show-children-and-entry (event)
   (interactive "e")
   (mouse-set-point event)
   (gametree-show-children-and-entry))
+
 (defun gametree-mouse-show-subtree (event)
   (interactive "e")
   (mouse-set-point event)
   (outline-show-subtree))
+
 (defun gametree-mouse-hide-subtree (event)
   (interactive "e")
   (mouse-set-point event)
   (outline-hide-subtree))
-(define-key gametree-mode-map [M-down-mouse-2 M-mouse-2]
-  'gametree-mouse-break-line-here)
-(define-key gametree-mode-map [S-down-mouse-1 S-mouse-1]
-  'gametree-mouse-show-children-and-entry)
-(define-key gametree-mode-map [S-down-mouse-2 S-mouse-2]
-  'gametree-mouse-show-subtree)
-(define-key gametree-mode-map [S-down-mouse-3 S-mouse-3]
-  'gametree-mouse-hide-subtree)
+
+
+;;;; Key bindings
+
+(defvar-keymap gametree-mode-map
+  "C-c C-j"     #'gametree-break-line-here
+  "C-c C-v"     #'gametree-insert-new-leaf
+  "C-c C-m"     #'gametree-merge-line
+  "C-c C-r SPC" #'gametree-layout-to-register
+  "C-c C-r /"   #'gametree-layout-to-register
+  "C-c C-r j"   #'gametree-apply-register-layout
+  "C-c C-y"     #'gametree-save-and-hack-layout
+  "C-c ;"       #'gametree-insert-score
+  "C-c ^"       #'gametree-compute-and-insert-score
+  "M-<down-mouse-2> M-<mouse-2>" #'gametree-mouse-break-line-here
+  "S-<down-mouse-1> S-<mouse-1>" #'gametree-mouse-show-children-and-entry
+  "S-<down-mouse-2> S-<mouse-2>" #'gametree-mouse-show-subtree
+  "S-<down-mouse-3> S-<mouse-3>" #'gametree-mouse-hide-subtree)
+
+(define-derived-mode gametree-mode outline-mode "GameTree"
+  "Major mode for managing game analysis trees.
+Useful to postal and email chess (and, it is hoped, also checkers, go,
+shogi, etc.) players, it is a slightly modified version of Outline mode.
+
+\\{gametree-mode-map}"
+  (auto-fill-mode 0)
+  (add-hook 'write-contents-functions 'gametree-save-and-hack-layout nil t))
 
 (provide 'gametree)
 
diff --git a/lisp/play/gomoku.el b/lisp/play/gomoku.el
index 0a45885b87..f8822c30db 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-2021 Free Software Foundation,
+;; Copyright (C) 1988, 1994, 1996, 2001-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Philippe Schnoebelen <phs@lsv.ens-cachan.fr>
@@ -100,65 +100,61 @@ SHOULD be at least 2 (MUST BE at least 1).")
   "Number of lines between the Gomoku board and the top of the window.")
 
 
-(defvar gomoku-mode-map
-  (let ((map (make-sparse-keymap)))
-
-    ;; Key bindings for cursor motion.
-    (define-key map "y" 'gomoku-move-nw)                   ; y
-    (define-key map "u" 'gomoku-move-ne)                   ; u
-    (define-key map "b" 'gomoku-move-sw)                   ; b
-    (define-key map "n" 'gomoku-move-se)                   ; n
-    (define-key map "h" 'gomoku-move-left)                 ; h
-    (define-key map "l" 'gomoku-move-right)                ; l
-    (define-key map "j" 'gomoku-move-down)                 ; j
-    (define-key map "k" 'gomoku-move-up)                   ; k
-
-    (define-key map [kp-7] 'gomoku-move-nw)
-    (define-key map [kp-9] 'gomoku-move-ne)
-    (define-key map [kp-1] 'gomoku-move-sw)
-    (define-key map [kp-3] 'gomoku-move-se)
-    (define-key map [kp-4] 'gomoku-move-left)
-    (define-key map [kp-6] 'gomoku-move-right)
-    (define-key map [kp-2] 'gomoku-move-down)
-    (define-key map [kp-8] 'gomoku-move-up)
-
-    (define-key map "\C-b" 'gomoku-move-left)              ; C-b
-    (define-key map "\C-f" 'gomoku-move-right)             ; C-f
-    (define-key map "\C-n" 'gomoku-move-down)              ; C-n
-    (define-key map "\C-p" 'gomoku-move-up)                ; C-p
-
-    ;; Key bindings for entering Human moves.
-    (define-key map "X" 'gomoku-human-plays)               ; X
-    (define-key map "x" 'gomoku-human-plays)               ; x
-    (define-key map " " 'gomoku-human-plays)               ; SPC
-    (define-key map "\C-m" 'gomoku-human-plays)                    ; RET
-    (define-key map "\C-c\C-p" 'gomoku-human-plays)        ; C-c C-p
-    (define-key map "\C-c\C-b" 'gomoku-human-takes-back)    ; C-c C-b
-    (define-key map "\C-c\C-r" 'gomoku-human-resigns)      ; C-c C-r
-    (define-key map "\C-c\C-e" 'gomoku-emacs-plays)        ; C-c C-e
-
-    (define-key map [kp-enter] 'gomoku-human-plays)
-    (define-key map [insert] 'gomoku-human-plays)
-    (define-key map [down-mouse-1] 'gomoku-click)
-    (define-key map [drag-mouse-1] 'gomoku-click)
-    (define-key map [mouse-1] 'gomoku-click)
-    (define-key map [down-mouse-2] 'gomoku-click)
-    (define-key map [mouse-2] 'gomoku-mouse-play)
-    (define-key map [drag-mouse-2] 'gomoku-mouse-play)
-
-    (define-key map [remap backward-char] 'gomoku-move-left)
-    (define-key map [remap left-char] 'gomoku-move-left)
-    (define-key map [remap forward-char] 'gomoku-move-right)
-    (define-key map [remap right-char] 'gomoku-move-right)
-    (define-key map [remap previous-line] 'gomoku-move-up)
-    (define-key map [remap next-line] 'gomoku-move-down)
-    (define-key map [remap move-beginning-of-line] 'gomoku-beginning-of-line)
-    (define-key map [remap move-end-of-line] 'gomoku-end-of-line)
-    (define-key map [remap undo] 'gomoku-human-takes-back)
-    (define-key map [remap advertised-undo] 'gomoku-human-takes-back)
-    map)
-
-  "Local keymap to use in Gomoku mode.")
+(defvar-keymap gomoku-mode-map
+  :doc "Local keymap to use in Gomoku mode."
+  ;; Key bindings for cursor motion.
+  "y"       #'gomoku-move-nw
+  "u"       #'gomoku-move-ne
+  "b"       #'gomoku-move-sw
+  "n"       #'gomoku-move-se
+  "h"       #'gomoku-move-left
+  "l"       #'gomoku-move-right
+  "j"       #'gomoku-move-down
+  "k"       #'gomoku-move-up
+
+  "<kp-7>"  #'gomoku-move-nw
+  "<kp-9>"  #'gomoku-move-ne
+  "<kp-1>"  #'gomoku-move-sw
+  "<kp-3>"  #'gomoku-move-se
+  "<kp-4>"  #'gomoku-move-left
+  "<kp-6>"  #'gomoku-move-right
+  "<kp-2>"  #'gomoku-move-down
+  "<kp-8>"  #'gomoku-move-up
+
+  "C-b"     #'gomoku-move-left
+  "C-f"     #'gomoku-move-right
+  "C-n"     #'gomoku-move-down
+  "C-p"     #'gomoku-move-up
+
+  ;; Key bindings for entering Human moves.
+  "X"       #'gomoku-human-plays
+  "x"       #'gomoku-human-plays
+  "SPC"     #'gomoku-human-plays
+  "RET"     #'gomoku-human-plays
+  "C-c C-p" #'gomoku-human-plays
+  "C-c C-b" #'gomoku-human-takes-back
+  "C-c C-r" #'gomoku-human-resigns
+  "C-c C-e" #'gomoku-emacs-plays
+
+  "<kp-enter>"     #'gomoku-human-plays
+  "<insert>"       #'gomoku-human-plays
+  "<down-mouse-1>" #'gomoku-click
+  "<drag-mouse-1>" #'gomoku-click
+  "<mouse-1>"      #'gomoku-click
+  "<down-mouse-2>" #'gomoku-click
+  "<mouse-2>"      #'gomoku-mouse-play
+  "<drag-mouse-2>" #'gomoku-mouse-play
+
+  "<remap> <backward-char>"          #'gomoku-move-left
+  "<remap> <left-char>"              #'gomoku-move-left
+  "<remap> <forward-char>"           #'gomoku-move-right
+  "<remap> <right-char>"             #'gomoku-move-right
+  "<remap> <previous-line>"          #'gomoku-move-up
+  "<remap> <next-line>"              #'gomoku-move-down
+  "<remap> <move-beginning-of-line>" #'gomoku-beginning-of-line
+  "<remap> <move-end-of-line>"       #'gomoku-end-of-line
+  "<remap> <undo>"                   #'gomoku-human-takes-back
+  "<remap> <advertised-undo>"        #'gomoku-human-takes-back)
 
 
 (defvar gomoku-emacs-won ()
diff --git a/lisp/play/handwrite.el b/lisp/play/handwrite.el
index d59352c352..14624ddce2 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, 2001-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2001-2022 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 2bf7292772..8c66c0e8a9 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1988, 2001-2022 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 bfb25ba1d5..974e9fbc49 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, 2001-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2001-2022 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 df2b6fc867..1cacf01a20 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Philippe Schnoebelen <phs@lsv.ens-cachan.fr>
 ;; Overhauled: Daniel Pfeiffer <occitan@esperanto.org>
@@ -76,17 +76,12 @@ The value t means never ding, and `error' means only ding 
on wrong input."
   "Hook to run upon entry to mpuz."
   :type 'hook)
 
-(defvar mpuz-mode-map
-  (let ((map (make-sparse-keymap)))
-    (mapc (lambda (ch)
-            (define-key map (char-to-string ch) 'mpuz-try-letter))
-          "abcdefghijABCDEFGHIJ")
-    (define-key map "\C-g" 'mpuz-offer-abort)
-    (define-key map "?" 'describe-mode)
-    map)
-  "Local keymap to use in Mult Puzzle.")
-
-
+(defvar-keymap mpuz-mode-map
+  :doc "Local keymap to use in Mult Puzzle."
+  "C-g" #'mpuz-offer-abort
+  "?"   #'describe-mode)
+(dolist (ch (mapcar #'char-to-string "abcdefghijABCDEFGHIJ"))
+  (keymap-set mpuz-mode-map ch #'mpuz-try-letter))
 
 (define-derived-mode mpuz-mode fundamental-mode "Mult Puzzle"
   :interactive nil
diff --git a/lisp/play/pong.el b/lisp/play/pong.el
index b8545dfa82..79beeb72e2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: Benjamin Drieu <bdrieu@april.org>
 ;; Keywords: games
@@ -173,23 +173,23 @@
 
 ;;; Initialize maps
 
-(defvar pong-mode-map
-  (let ((map (make-sparse-keymap 'pong-mode-map)))
-    (define-key map [left]      'pong-move-left)
-    (define-key map [right]     'pong-move-right)
-    (define-key map [up]                'pong-move-up)
-    (define-key map [down]      'pong-move-down)
-    (define-key map pong-left-key  'pong-move-left)
-    (define-key map pong-right-key 'pong-move-right)
-    (define-key map pong-up-key         'pong-move-up)
-    (define-key map pong-down-key  'pong-move-down)
-    (define-key map pong-quit-key  'pong-quit)
-    (define-key map pong-pause-key 'pong-pause)
-    map)
-  "Modemap for pong-mode.")
-
-(defvar pong-null-map
-  (make-sparse-keymap 'pong-null-map) "Null map for pong-mode.")
+(defvar-keymap pong-mode-map
+  :doc "Modemap for pong-mode."
+  :name 'pong-mode-map
+  "<left>"       #'pong-move-left
+  "<right>"      #'pong-move-right
+  "<up>"         #'pong-move-up
+  "<down>"       #'pong-move-down
+  pong-left-key  #'pong-move-left
+  pong-right-key #'pong-move-right
+  pong-up-key    #'pong-move-up
+  pong-down-key  #'pong-move-down
+  pong-quit-key  #'pong-quit
+  pong-pause-key #'pong-pause)
+
+(defvar-keymap pong-null-map
+  :doc "Null map for pong-mode."
+  :name 'pong-null-map)
 
 
 
diff --git a/lisp/play/snake.el b/lisp/play/snake.el
index dbdecde973..d8074edfc4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2022 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 bc1a0e44cb..3c6d85b409 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Jan Schormann <Jan.Schormann@rechen-gilde.de>
 ;; Created: Fri afternoon, Jun  3,  1994
@@ -40,48 +40,46 @@
   "Hook to run upon entry to Solitaire."
   :type 'hook)
 
-(defvar solitaire-mode-map
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map special-mode-map)
-
-    (define-key map "\C-f" 'solitaire-right)
-    (define-key map "\C-b" 'solitaire-left)
-    (define-key map "\C-p" 'solitaire-up)
-    (define-key map "\C-n" 'solitaire-down)
-    (define-key map "\r" 'solitaire-move)
-    (define-key map [remap undo] 'solitaire-undo)
-    (define-key map " " 'solitaire-do-check)
-
-    (define-key map [right] 'solitaire-right)
-    (define-key map [left] 'solitaire-left)
-    (define-key map [up] 'solitaire-up)
-    (define-key map [down] 'solitaire-down)
-
-    (define-key map [S-right] 'solitaire-move-right)
-    (define-key map [S-left]  'solitaire-move-left)
-    (define-key map [S-up]    'solitaire-move-up)
-    (define-key map [S-down]  'solitaire-move-down)
-
-    (define-key map [kp-6] 'solitaire-right)
-    (define-key map [kp-4] 'solitaire-left)
-    (define-key map [kp-8] 'solitaire-up)
-    (define-key map [kp-2] 'solitaire-down)
-    (define-key map [kp-5] 'solitaire-center-point)
-
-    (define-key map [S-kp-6] 'solitaire-move-right)
-    (define-key map [S-kp-4] 'solitaire-move-left)
-    (define-key map [S-kp-8] 'solitaire-move-up)
-    (define-key map [S-kp-2] 'solitaire-move-down)
-
-    (define-key map [kp-enter] 'solitaire-move)
-    (define-key map [kp-0] 'solitaire-undo)
-
-    ;; spoil it with s ;)
-    (define-key map [?s] 'solitaire-solve)
-
-    ;;  (define-key map [kp-0] 'solitaire-hint) - Not yet provided ;)
-    map)
-  "Keymap for playing Solitaire.")
+(defvar-keymap solitaire-mode-map
+  :doc "Keymap for playing Solitaire."
+  :parent special-mode-map
+  "C-f"        #'solitaire-right
+  "C-b"        #'solitaire-left
+  "C-p"        #'solitaire-up
+  "C-n"        #'solitaire-down
+  "RET"        #'solitaire-move
+  "SPC"        #'solitaire-do-check
+
+  "<right>"    #'solitaire-right
+  "<left>"     #'solitaire-left
+  "<up>"       #'solitaire-up
+  "<down>"     #'solitaire-down
+
+  "S-<right>"  #'solitaire-move-right
+  "S-<left>"   #'solitaire-move-left
+  "S-<up>"     #'solitaire-move-up
+  "S-<down>"   #'solitaire-move-down
+
+  "<kp-6>"     #'solitaire-right
+  "<kp-4>"     #'solitaire-left
+  "<kp-8>"     #'solitaire-up
+  "<kp-2>"     #'solitaire-down
+  "<kp-5>"     #'solitaire-center-point
+
+  "S-<kp-6>"   #'solitaire-move-right
+  "S-<kp-4>"   #'solitaire-move-left
+  "S-<kp-8>"   #'solitaire-move-up
+  "S-<kp-2>"   #'solitaire-move-down
+
+  "<kp-enter>" #'solitaire-move
+  "<kp-0>"     #'solitaire-undo
+  "<remap> <undo>" #'solitaire-undo
+
+  ;; spoil it with s ;)
+  "s"          #'solitaire-solve
+
+  ;; "[kp-0]" #'solitaire-hint - Not yet provided ;)
+  )
 
 ;; Solitaire mode is suitable only for specially formatted data.
 (put 'solitaire-mode 'mode-class 'special)
diff --git a/lisp/play/spook.el b/lisp/play/spook.el
index 69f444994f..f2bdba1c2a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1988, 1993, 2001-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: games
diff --git a/lisp/play/tetris.el b/lisp/play/tetris.el
index 693bfe4935..8ce2453c75 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2022 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 a5d4ac9dc6..34523fef05 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 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 bcca637e00..b37d39ce1b 100644
--- a/lisp/plstore.el
+++ b/lisp/plstore.el
@@ -1,6 +1,6 @@
 ;;; plstore.el --- secure plist store -*- lexical-binding: t -*-
 
-;; Copyright (C) 2011-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <ueno@gnu.org>
 ;; Keywords: PGP, GnuPG
diff --git a/lisp/printing.el b/lisp/printing.el
index dfa5a6ef76..b9bc3581c4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2001, 2003-2022 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 9e9793abec..c1d599afc4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
 
 ;; Author: Roland Winkler <winkler@gnu.org>
 ;; Keywords: Processes, Unix
diff --git a/lisp/profiler.el b/lisp/profiler.el
index fa74fe8de2..94c24c62aa 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2022 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 0b7945430d..4bc6de0c75 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 2f7d7bf796..370fb1b80b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1991, 2001-2022 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 78148ccf85..d0acd36f4b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 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 2cc8dfce66..7ef2500e46 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2008-2022 Free Software Foundation, Inc.
 
 ;; Author: Arni Magnusson <arnima@hafro.is>
 ;; Keywords: languages
diff --git a/lisp/progmodes/bug-reference.el b/lisp/progmodes/bug-reference.el
index d7092a37d4..06242a4cba 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
 
 ;; Author: Tom Tromey <tromey@redhat.com>
 ;; Created: 21 Mar 2007
diff --git a/lisp/progmodes/cc-align.el b/lisp/progmodes/cc-align.el
index a26c1d5bff..8298d5fef0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1987, 1992-2022 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 ea99101750..188d5a8a83 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-2021 Free Software Foundation,
+;; Copyright (C) 1988, 1994, 1996, 2000-2022 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 b6805898b0..4b8154dafe 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 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 5024972804..e9237bb01e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1987, 1992-2022 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 12e10c26ee..a127024355 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1987, 1992-2022 Free Software Foundation, Inc.
 
 ;; Authors:    2003- Alan Mackenzie
 ;;             1998- Martin Stjernholm
diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el
index c7b01de9b9..ebc1ef4301 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1987, 1992-2022 Free Software Foundation, Inc.
 
 ;; Authors:    2001- Alan Mackenzie
 ;;             1998- Martin Stjernholm
@@ -6139,7 +6139,7 @@ comment at the start of cc-engine.el for more info."
          (setq s (cons -1 (cdr s))))
         ((and (equal match ",")
               (eq (car s) -1)))        ; at "," in "class foo : bar, ..."
-        ((member match '(";" "," ")"))
+        ((member match '(";" "*" "," "("))
          (when (and s (cdr s) (<= (car s) 0))
            (setq s (cdr s))))
         ((c-keyword-member kwd-sym 'c-flat-decl-block-kwds)
@@ -9937,6 +9937,10 @@ This function might do hidden buffer changes."
        ;; Set when we have encountered a keyword (e.g. "extern") which
        ;; causes the following declaration to be treated as though top-level.
        make-top
+       ;; A list of found types in this declaration.  This is an association
+       ;; list, the car being the buffer position, the cdr being the
+       ;; identifier.
+       found-type-list
        ;; Save `c-record-type-identifiers' and
        ;; `c-record-ref-identifiers' since ranges are recorded
        ;; speculatively and should be thrown away if it turns out
@@ -10006,10 +10010,22 @@ This function might do hidden buffer changes."
                ;; If the previous identifier is a found type we
                ;; record it as a real one; it might be some sort of
                ;; alias for a prefix like "unsigned".
-               (save-excursion
-                 (goto-char type-start)
-                 (let ((c-promote-possible-types t))
-                   (c-forward-type)))))
+               ;; We postpone entering the new found type into c-found-types
+               ;; until we are sure of it, thus preventing rapid alternation
+               ;; of the fontification of the token throughout the buffer.
+               (push (cons type-start
+                           (buffer-substring-no-properties
+                            type-start
+                            (save-excursion
+                              (goto-char type-start)
+                              (c-end-of-token)
+                              (point))))
+                     found-type-list))
+
+             ;; Signal a type declaration for "struct foo {".
+             (when (and backup-at-type-decl
+                        (eq (char-after) ?{))
+               (setq at-type-decl t)))
 
            (setq backup-at-type at-type
                  backup-type-start type-start
@@ -10250,13 +10266,10 @@ This function might do hidden buffer changes."
                   (when (eq at-type 'found)
                     ;; Remove the ostensible type from the found types list.
                     (when type-start
-                      (c-unfind-type
-                       (buffer-substring-no-properties
-                        type-start
-                        (save-excursion
-                          (goto-char type-start)
-                          (c-end-of-token)
-                          (point)))))
+                      (let ((discard-t (assq type-start found-type-list)))
+                        (when discard-t
+                          (setq found-type-list
+                                (remq discard-t found-type-list)))))
                     t))
               ;; The token which we assumed to be a type is actually the
               ;; identifier, and we have no explicit type.
@@ -10870,6 +10883,14 @@ This function might do hidden buffer changes."
        ;; interactive refontification.
        (c-put-c-type-property (point) 'c-decl-arg-start))
 
+      ;; Enter all the found types into `c-found-types'.
+      (when found-type-list
+       (save-excursion
+         (let ((c-promote-possible-types t))
+           (dolist (ft found-type-list)
+             (goto-char (car ft))
+             (c-forward-type)))))
+
       ;; Record the type's coordinates in `c-record-type-identifiers' for
       ;; later fontification.
       (when (and c-record-type-identifiers at-type ;; (not (eq at-type t))
diff --git a/lisp/progmodes/cc-fonts.el b/lisp/progmodes/cc-fonts.el
index 967464ac14..230d39efee 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
 
 ;; Authors:    2003- Alan Mackenzie
 ;;             2002- Martin Stjernholm
@@ -93,14 +93,10 @@
 (cc-bytecomp-defvar c-preprocessor-face-name)
 (cc-bytecomp-defvar c-reference-face-name)
 (cc-bytecomp-defvar c-block-comment-flag)
-(cc-bytecomp-defvar c-type-finder-pos)
-(cc-bytecomp-defvar c-inhibit-type-finder)
-(cc-bytecomp-defvar c-type-finder-timer)
 (cc-bytecomp-defun c-fontify-recorded-types-and-refs)
 (cc-bytecomp-defun c-font-lock-declarators)
 (cc-bytecomp-defun c-font-lock-objc-method)
 (cc-bytecomp-defun c-font-lock-invalid-string)
-(cc-bytecomp-defun c-before-context-fl-expand-region)
 (cc-bytecomp-defun c-font-lock-fontify-region)
 
 
@@ -1603,175 +1599,6 @@ casts and declarations are fontified.  Used on level 2 
and higher."
 
        nil))))
 
-(defun c-find-types-background (start limit)
-  ;; Find any "found types" between START and LIMIT.  Allow any such types to
-  ;; be entered into `c-found-types' by the action of `c-forward-name' or
-  ;; `c-forward-type' called from this function.  This process also causes
-  ;; occurrences of the type to be prepared for fontification throughout the
-  ;; buffer.
-  ;;
-  ;; Return POINT at the end of the function.  This should be at or after
-  ;; LIMIT, and not later than the next decl-spot after LIMIT.
-  ;;
-  ;; This function is called from the timer `c-type-finder-timer'.  It may do
-  ;; hidden buffer changes.
-  (save-excursion
-    (save-restriction
-      (widen)
-      (goto-char start)
-      ;; If we're in a (possibly large) literal, skip over it.
-      (let ((lit-bounds (nth 2 (c-full-pp-to-literal (point)))))
-       (if lit-bounds
-           (goto-char (cdr lit-bounds))))
-      (when (< (point) limit)
-       (let (;; o - 'decl if we're in an arglist containing declarations
-             ;;   (but if `c-recognize-paren-inits' is set it might also be
-             ;;   an initializer arglist);
-             ;; o - '<> if the arglist is of angle bracket type;
-             ;; o - 'arglist if it's some other arglist;
-             ;; o - nil, if not in an arglist at all.  This includes the
-             ;;   parenthesized condition which follows "if", "while", etc.
-             context
-             ;; A list of starting positions of possible type declarations, or 
of
-             ;; the typedef preceding one, if any.
-             last-cast-end
-             ;; The result from `c-forward-decl-or-cast-1'.
-             decl-or-cast
-             ;; The maximum of the end positions of all the checked type
-             ;; decl expressions in the successfully identified
-             ;; declarations.  The position might be either before or
-             ;; after the syntactic whitespace following the last token
-             ;; in the type decl expression.
-             (max-type-decl-end 0)
-             ;; Same as `max-type-decl-*', but used when we're before
-             ;; `token-pos'.
-             (max-type-decl-end-before-token 0)
-             )
-         (goto-char start)
-         (c-find-decl-spots
-          limit
-          c-decl-start-re
-          nil                          ; (eval c-maybe-decl-faces)
-
-          (lambda (match-pos inside-macro &optional toplev)
-            ;; Note to maintainers: don't use `limit' inside this lambda form;
-            ;; c-find-decl-spots sometimes narrows to less than `limit'.
-            (if (and c-macro-with-semi-re
-                     (looking-at c-macro-with-semi-re))
-                ;; Don't do anything more if we're looking at something that
-                ;; can't start a declaration.
-                t
-
-              ;; Set `context' and `c-restricted-<>-arglists'.  Look for
-              ;; "<" for the sake of C++-style template arglists.
-              ;; "Ignore "(" when it's part of a control flow construct
-              ;; (e.g. "for (").
-              (let ((got-context
-                     (c-get-fontification-context
-                      match-pos
-                      (< match-pos (if inside-macro
-                                       max-type-decl-end-before-token
-                                     max-type-decl-end))
-                      toplev)))
-                (setq context (car got-context)
-                      c-restricted-<>-arglists (cdr got-context)))
-
-              ;; In QT, "more" is an irritating keyword that expands to 
nothing.
-              ;; We skip over it to prevent recognition of "more slots: 
<symbol>"
-              ;; as a bitfield declaration.
-              (when (and (c-major-mode-is 'c++-mode)
-                         (looking-at
-                          (concat "\\(more\\)\\([^" c-symbol-chars 
"]\\|$\\)")))
-                (goto-char (match-end 1))
-                (c-forward-syntactic-ws))
-
-              ;; Now analyze the construct.  This analysis will cause
-              ;; `c-forward-name' and `c-forward-type' to call `c-add-type',
-              ;; triggering the desired recognition and fontification of
-              ;; these found types.
-              (when (not (eq context 'not-decl))
-                (setq decl-or-cast
-                      (c-forward-decl-or-cast-1
-                       match-pos context last-cast-end))
-
-                (cond
-                 ((eq decl-or-cast 'cast)
-                  ;; Save the position after the previous cast so we can feed
-                  ;; it to `c-forward-decl-or-cast-1' in the next round.  That
-                  ;; helps it discover cast chains like "(a) (b) c".
-                  (setq last-cast-end (point))
-                  nil)
-                 (decl-or-cast
-                  ;; We've found a declaration.
-
-                  ;; Set `max-type-decl-end' or 
`max-type-decl-end-before-token'
-                  ;; under the assumption that we're after the first type decl
-                  ;; expression in the declaration now.  That's not really 
true;
-                  ;; we could also be after a parenthesized initializer
-                  ;; expression in C++, but this is only used as a last resort
-                  ;; to slant ambiguous expression/declarations, and overall
-                  ;; it's worth the risk to occasionally fontify an expression
-                  ;; as a declaration in an initializer expression compared to
-                  ;; getting ambiguous things in normal function prototypes
-                  ;; fontified as expressions.
-                  (if inside-macro
-                      (when (> (point) max-type-decl-end-before-token)
-                        (setq max-type-decl-end-before-token (point)))
-                    (when (> (point) max-type-decl-end)
-                      (setq max-type-decl-end (point)))))
-                 (t t))))))))
-      (point))))
-
-(defun c-type-finder-timer-func ()
-  ;; A CC Mode idle timer function for finding "found types".  It triggers
-  ;; every `c-type-finder-repeat-time' seconds and processes buffer chunks of
-  ;; size around `c-type-finder-chunk-size' characters, and runs for (a little
-  ;; over) `c-type-finder-time-slot' seconds.  The types it finds are inserted
-  ;; into `c-found-types', and their occurrences throughout the buffer are
-  ;; prepared for fontification.
-  (when (and c-type-finder-time-slot
-            (boundp 'font-lock-support-mode)
-            (eq font-lock-support-mode 'jit-lock-mode))
-    (if c-inhibit-type-finder ; No processing immediately after a GC operation.
-       (setq c-inhibit-type-finder nil)
-      (let* ((stop-time (+ (float-time) c-type-finder-time-slot))
-            (buf-list (buffer-list)))
-       ;; One CC Mode buffer needing processing each time around this loop.
-       (while (and buf-list
-                   (< (float-time) stop-time))
-         ;; Cdr through BUF-LIST to find the next buffer needing processing.
-         (while (and buf-list
-                     (not (with-current-buffer (car buf-list) 
c-type-finder-pos)))
-           (setq buf-list (cdr buf-list)))
-         (when buf-list
-           (with-current-buffer (car buf-list)
-             ;; (message "%s" (current-buffer)) ; Useful diagnostic.
-             (save-restriction
-               (widen)
-               ;; Process one `c-type-finder-chunk-size' chunk each time
-               ;; around this loop.
-               (while (and c-type-finder-pos
-                           (< (float-time) stop-time))
-                 ;; Process one chunk per iteration.
-                 (save-match-data
-                   (c-save-buffer-state
-                       (case-fold-search
-                        (beg (marker-position c-type-finder-pos))
-                        (end (min (+ beg c-type-finder-chunk-size) 
(point-max)))
-                        (region (c-before-context-fl-expand-region beg end)))
-                     (setq beg (car region)
-                           end (cdr region))
-                     (setq beg (max (c-find-types-background beg end) end))
-                     (move-marker c-type-finder-pos
-                                  (if (save-excursion (goto-char beg) (eobp))
-                                      nil
-                                    beg))
-                     (when (not (marker-position c-type-finder-pos))
-                       (setq c-type-finder-pos nil))))))))))))
-  ;; Set the timer to run again.
-  (setq c-type-finder-timer
-       (run-at-time c-type-finder-repeat-time nil #'c-type-finder-timer-func)))
-
 (defun c-font-lock-enum-body (limit)
   ;; Fontify the identifiers of each enum we find by searching forward.
   ;;
diff --git a/lisp/progmodes/cc-guess.el b/lisp/progmodes/cc-guess.el
index 8f46b17c54..ea5dd48986 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-2021 Free Software
+;; Copyright (C) 1985, 1987, 1992-2006, 2011-2022 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 53f6206a82..68070cd058 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1987, 1992-2022 Free Software Foundation, Inc.
 
 ;; Authors:    2002- Alan Mackenzie
 ;;             1998- Martin Stjernholm
@@ -3180,8 +3180,8 @@ Note that Java specific rules are currently applied to 
tell this from
       (append
        (c-lang-const c-flat-decl-block-kwds)
        (if (c-lang-const c-recognize-<>-arglists)
-          '("{" "}" ";" "," ")" ":" "<")
-        '("{" "}" ";" "," ")" ":")))))
+          '("{" "}" ";" "*" "," ")" ":" "<")
+        '("{" "}" ";" "*" "," ")" ":")))))
 (c-lang-defvar c-brace-stack-thing-key (c-lang-const c-brace-stack-thing-key))
 
 (c-lang-defconst c-brace-stack-no-semi-key
diff --git a/lisp/progmodes/cc-menus.el b/lisp/progmodes/cc-menus.el
index 52b47a5873..51d7f4f5ca 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1987, 1992-2022 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 f9435c9cee..3a3413dc36 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1987, 1992-2022 Free Software Foundation, Inc.
 
 ;; Authors:    2003- Alan Mackenzie
 ;;             1998- Martin Stjernholm
@@ -129,16 +129,6 @@
 ;   '
 (require 'cc-fonts) ;)
 
-(defvar c-type-finder-timer nil)
-;; The variable which holds the repeating idle timer which triggers off the
-;; background type finding search.
-
-(defvar c-inhibit-type-finder nil)
-;; When non-nil (set by `c-post-gc-hook') don't perform the type finding
-;; activities the next time `c-type-finder-timer' triggers.  This ensures
-;; keyboard/mouse input will be dealt with when garbage collection is taking a
-;; large portion of CPU time.
-
 ;; The following three really belong to cc-fonts.el, but they are required
 ;; even when cc-fonts.el hasn't been loaded (this happens in XEmacs when
 ;; font-lock-mode is nil).
@@ -197,10 +187,7 @@
                       c-buffer-is-cc-mode))
                (throw 'found nil)))
          (remove-hook 'post-command-hook 'c-post-command)
-         (remove-hook 'post-gc-hook 'c-post-gc-hook)
-         (and c-type-finder-timer
-              (progn (cancel-timer c-type-finder-timer)
-                     (setq c-type-finder-timer nil)))))
+         (remove-hook 'post-gc-hook 'c-post-gc-hook)))
       (c-save-buffer-state ()
        (c-clear-char-properties (point-min) (point-max) 'category)
        (c-clear-char-properties (point-min) (point-max) 'syntax-table)
@@ -596,12 +583,6 @@ preferably use the `c-mode-menu' language constant 
directly."
 ;; currently no such text property.
 (make-variable-buffer-local 'c-max-syn-tab-mkr)
 
-;; `c-type-finder-pos' is a marker marking the current place in a CC Mode
-;; buffer which is due to be searched next for "found types", or nil if the
-;; searching is complete.
-(defvar c-type-finder-pos nil)
-(make-variable-buffer-local 'c-type-finder-pos)
-
 (defun c-basic-common-init (mode default-style)
   "Initialize the syntax handling routines and the line breaking/filling code.
 Intended to be used by other packages that embed CC Mode.
@@ -774,17 +755,6 @@ that requires a literal mode spec at compile time."
   ;; c-after-font-lock-init.
   (add-hook 'after-change-functions 'c-after-change nil t)
   (add-hook 'post-command-hook 'c-post-command)
-  (setq c-type-finder-pos
-       (save-restriction
-         (widen)
-         (move-marker (make-marker) (point-min))))
-
-  ;; Install the functionality for seeking "found types" at mode startup:
-  (or c-type-finder-timer
-      (setq c-type-finder-timer
-           (run-at-time
-            c-type-finder-repeat-time nil #'c-type-finder-timer-func)))
-  (add-hook 'post-gc-hook #'c-post-gc-hook)
 
   (when (boundp 'font-lock-extend-after-change-region-function)
     (set (make-local-variable 'font-lock-extend-after-change-region-function)
@@ -2028,9 +1998,6 @@ Note that this is a strict tail, so won't match, e.g. 
\"0x....\".")
          c-new-id-end nil
          c-new-id-is-type nil)))
 
-(defun c-post-gc-hook (&optional _stats) ; For XEmacs.
-  (setq c-inhibit-type-finder t))
-
 (defun c-before-change (beg end)
   ;; Function to be put on `before-change-functions'.  Primarily, this calls
   ;; the language dependent `c-get-state-before-change-functions'.  It is
diff --git a/lisp/progmodes/cc-styles.el b/lisp/progmodes/cc-styles.el
index 4d518838d1..8fe8402b1d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1987, 1992-2022 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 40a43c32ed..e0f5a7ee02 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1987, 1992-2022 Free Software Foundation, Inc.
 
 ;; Authors:    2002- Alan Mackenzie
 ;;             1998- Martin Stjernholm
@@ -1524,39 +1524,6 @@ working due to this change."
   :type 'boolean
   :group 'c)
 
-(defcustom c-type-finder-time-slot 0.05
-  "The length in seconds of a background type search time slot.
-
-In CC Mode modes, \"found types\" wouldn't always get cleanly
-fontified without the background searching for them which happens
-in the seconds after starting Emacs or initializing the major
-mode.
-
-This background searching can be disabled by setting this option
-to nil."
-  :type '(choice (const :tag "disabled" nil)
-                number)
-  :group 'c)
-
-(defcustom c-type-finder-repeat-time 0.1
-  "The interval, in seconds, at which background type searches occur.
-
-This interval must be greater than `c-type-finder-time-slot'."
-  :type 'number
-  :group 'c)
-
-(defcustom c-type-finder-chunk-size 1000
-  "The size, in characters, of a chunk for background type search.
-
-Chunks of this size are searched atomically for \"found types\"
-just after starting Emacs or initializing the major mode.
-
-This chunk size is a balance between efficiency (with larger
-values) and responsiveness of the keyboard (with smaller values).
-See also `c-type-finder-time-slot'."
-  :type 'integer
-  :group 'c)
-
 (define-widget 'c-extra-types-widget 'radio
   "Internal CC Mode widget for the `*-font-lock-extra-types' variables."
   :args '((const :tag "none" nil)
diff --git a/lisp/progmodes/cfengine.el b/lisp/progmodes/cfengine.el
index 53914616cd..6fc898d95b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 f602c3e13f..595027642b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 07648ac623..7fe529615f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2022 Free Software Foundation, Inc.
 
 ;; Author: Francesco Potortì <pot@gnu.org>
 ;; Adapted-By: ESR
diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el
index 6e3589df7a..e75a44b653 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-2021 Free Software
+;; Copyright (C) 1985-1987, 1993-1999, 2001-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Authors: Roland McGrath <roland@gnu.org>,
diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el
index a23505a9d3..8f33b3e3b7 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-1987, 1991-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1987, 1991-2022 Free Software Foundation, Inc.
 
 ;; Author: Ilya Zakharevich
 ;;     Bob Olson
@@ -1019,15 +1019,9 @@ Unless KEEP, removes the old indentation."
       (define-key map [(control ?c) (control ?h) ?v]
        ;;(concat (char-to-string help-char) "v") ; does not work
        'cperl-get-help))
-    (substitute-key-definition
-     'indent-sexp 'cperl-indent-exp
-     map global-map)
-    (substitute-key-definition
-     'indent-region 'cperl-indent-region
-     map global-map)
-    (substitute-key-definition
-     'indent-for-comment 'cperl-indent-for-comment
-     map global-map)
+    (define-key map [remap indent-sexp]        #'cperl-indent-exp)
+    (define-key map [remap indent-region]      #'cperl-indent-region)
+    (define-key map [remap indent-for-comment] #'cperl-indent-for-comment)
     map)
   "Keymap used in CPerl mode.")
 
diff --git a/lisp/progmodes/cpp.el b/lisp/progmodes/cpp.el
index baee72b332..f4584b6311 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-1995, 2001-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1995, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Keywords: c, faces, tools
diff --git a/lisp/progmodes/cwarn.el b/lisp/progmodes/cwarn.el
index 7fd592fb2e..971e3f6174 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 b74b558f8d..8f79cdaaab 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, 2001-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Odd Gripenstam <gripenstamol@decus.se>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/progmodes/ebnf-abn.el b/lisp/progmodes/ebnf-abn.el
index c3b240ad8b..5470346efc 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 e6717cbdf0..3a041057d5 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 d4bfdaa995..f49f676976 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 ae48881ee9..8d44afffc3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 b4532c7625..4fc09d7ef7 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 84e59cc0a5..30d2ae1565 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 84950e45f5..16e15c2d37 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 21ab48b110..96cbcba9be 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 6e416d064a..17cc537e38 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2022 Free Software Foundation, Inc.
 
 ;; Author: Gerd Moellmann <gerd@gnu.org>
 ;; Maintainer: emacs-devel@gnu.org
@@ -4045,23 +4045,27 @@ NUMBER-OF-STATIC-VARIABLES:"
 (defvar ebrowse-global-map nil
   "Keymap for Ebrowse commands.")
 
-
 (defvar ebrowse-global-prefix-key "\C-c\C-m"
   "Prefix key for Ebrowse commands.")
 
-
-(defvar ebrowse-global-submap-4 nil
-  "Keymap used for `ebrowse-global-prefix' followed by `4'.")
-
-
-(defvar ebrowse-global-submap-5 nil
-  "Keymap used for `ebrowse-global-prefix' followed by `5'.")
-
+(defvar-keymap ebrowse-global-submap-4
+  :doc "Keymap used for `ebrowse-global-prefix' followed by `4'."
+  "." #'ebrowse-tags-find-definition-other-window
+  "f" #'ebrowse-tags-find-definition-other-window
+  "v" #'ebrowse-tags-find-declaration-other-window
+  "F" #'ebrowse-tags-view-definition-other-window
+  "V" #'ebrowse-tags-view-declaration-other-window)
+
+(defvar-keymap ebrowse-global-submap-5
+  :doc "Keymap used for `ebrowse-global-prefix' followed by `5'."
+  "." #'ebrowse-tags-find-definition-other-frame
+  "f" #'ebrowse-tags-find-definition-other-frame
+  "v" #'ebrowse-tags-find-declaration-other-frame
+  "F" #'ebrowse-tags-view-definition-other-frame
+  "V" #'ebrowse-tags-view-declaration-other-frame)
 
 (unless ebrowse-global-map
   (setq ebrowse-global-map (make-sparse-keymap))
-  (setq ebrowse-global-submap-4 (make-sparse-keymap))
-  (setq ebrowse-global-submap-5 (make-sparse-keymap))
   (define-key ebrowse-global-map "a" 'ebrowse-tags-apropos)
   (define-key ebrowse-global-map "b" 'ebrowse-pop-to-browser-buffer)
   (define-key ebrowse-global-map "-" 'ebrowse-back-in-position-stack)
@@ -4082,17 +4086,7 @@ NUMBER-OF-STATIC-VARIABLES:"
   (define-key ebrowse-global-map " " 'ebrowse-electric-buffer-list)
   (define-key ebrowse-global-map "\t" 'ebrowse-tags-complete-symbol)
   (define-key ebrowse-global-map "4" ebrowse-global-submap-4)
-  (define-key ebrowse-global-submap-4 "." 
'ebrowse-tags-find-definition-other-window)
-  (define-key ebrowse-global-submap-4 "f" 
'ebrowse-tags-find-definition-other-window)
-  (define-key ebrowse-global-submap-4 "v" 
'ebrowse-tags-find-declaration-other-window)
-  (define-key ebrowse-global-submap-4 "F" 
'ebrowse-tags-view-definition-other-window)
-  (define-key ebrowse-global-submap-4 "V" 
'ebrowse-tags-view-declaration-other-window)
   (define-key ebrowse-global-map "5" ebrowse-global-submap-5)
-  (define-key ebrowse-global-submap-5 "." 
'ebrowse-tags-find-definition-other-frame)
-  (define-key ebrowse-global-submap-5 "f" 
'ebrowse-tags-find-definition-other-frame)
-  (define-key ebrowse-global-submap-5 "v" 
'ebrowse-tags-find-declaration-other-frame)
-  (define-key ebrowse-global-submap-5 "F" 
'ebrowse-tags-view-definition-other-frame)
-  (define-key ebrowse-global-submap-5 "V" 
'ebrowse-tags-view-declaration-other-frame)
   (define-key global-map ebrowse-global-prefix-key ebrowse-global-map))
 
 
diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el
index 7da93a351a..0dfff32f20 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1986, 1999-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: lisp, languages
@@ -45,15 +45,13 @@ It has `lisp-mode-abbrev-table' as its parent."
     table)
   "Syntax table used in `emacs-lisp-mode'.")
 
-(defvar emacs-lisp-mode-map
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map lisp-mode-shared-map)
-    (define-key map "\e\t" 'completion-at-point)
-    (define-key map "\e\C-x" 'eval-defun)
-    (define-key map "\e\C-q" 'indent-pp-sexp)
-    map)
-  "Keymap for Emacs Lisp mode.
-All commands in `lisp-mode-shared-map' are inherited by this map.")
+(defvar-keymap emacs-lisp-mode-map
+  :doc "Keymap for Emacs Lisp mode.
+All commands in `lisp-mode-shared-map' are inherited by this map."
+  :parent lisp-mode-shared-map
+  "M-TAB" #'completion-at-point
+  "C-M-x" #'eval-defun
+  "C-M-q" #'indent-pp-sexp)
 
 (easy-menu-define emacs-lisp-mode-menu emacs-lisp-mode-map
   "Menu for Emacs Lisp mode."
@@ -270,10 +268,8 @@ Comments in the form will be lost."
       (setq-local lexical-binding t)
       (add-file-local-variable-prop-line 'lexical-binding t interactive))))
 
-(defvar elisp--dynlex-modeline-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [mode-line mouse-1] 'elisp-enable-lexical-binding)
-    map))
+(defvar-keymap elisp--dynlex-modeline-map
+  "<mode-line> <mouse-1>" #'elisp-enable-lexical-binding)
 
 ;;;###autoload
 (define-derived-mode emacs-lisp-mode lisp-data-mode
@@ -1200,16 +1196,14 @@ namespace but with lower confidence."
 
 ;;; Elisp Interaction mode
 
-(defvar lisp-interaction-mode-map
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map lisp-mode-shared-map)
-    (define-key map "\e\C-x" 'eval-defun)
-    (define-key map "\e\C-q" 'indent-pp-sexp)
-    (define-key map "\e\t" 'completion-at-point)
-    (define-key map "\n" 'eval-print-last-sexp)
-    map)
-  "Keymap for Lisp Interaction mode.
-All commands in `lisp-mode-shared-map' are inherited by this map.")
+(defvar-keymap lisp-interaction-mode-map
+  :doc "Keymap for Lisp Interaction mode.
+All commands in `lisp-mode-shared-map' are inherited by this map."
+  :parent lisp-mode-shared-map
+  "C-M-x" #'eval-defun
+  "C-M-q" #'indent-pp-sexp
+  "M-TAB" #'completion-at-point
+  "C-j"   #'eval-print-last-sexp)
 
 (easy-menu-define lisp-interaction-mode-menu lisp-interaction-mode-map
   "Menu for Lisp Interaction mode."
diff --git a/lisp/progmodes/erts-mode.el b/lisp/progmodes/erts-mode.el
index a12c964c25..31a8bded8a 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 ;; Keywords: tools
 
diff --git a/lisp/progmodes/etags.el b/lisp/progmodes/etags.el
index d7dbaa0650..e1b1e67dbc 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-1986, 1988-1989, 1992-1996, 1998, 2000-2021 Free
+;; Copyright (C) 1985-1986, 1988-1989, 1992-1996, 1998, 2000-2022 Free
 ;; Software Foundation, Inc.
 
 ;; Author: Roland McGrath <roland@gnu.org>
@@ -2088,14 +2088,15 @@ file name, add `tag-partial-file-name-match-p' to the 
list value.")
         (definitions (etags--xref-find-definitions symbol))
         same-file-definitions)
     (when (and etags-xref-prefer-current-file file)
-      (cl-delete-if
-       (lambda (definition)
-         (when (equal file
-                      (xref-location-group
-                       (xref-item-location definition)))
-           (push definition same-file-definitions)
-           t))
-       definitions)
+      (setq definitions
+            (cl-delete-if
+             (lambda (definition)
+               (when (equal file
+                            (xref-location-group
+                             (xref-item-location definition)))
+                 (push definition same-file-definitions)
+                 t))
+             definitions))
       (setq definitions (nconc (nreverse same-file-definitions)
                                definitions)))
     definitions))
diff --git a/lisp/progmodes/executable.el b/lisp/progmodes/executable.el
index 0d8b09c33c..d7c093444e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1996, 2000-2022 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 acc0d96ea5..263cd0ef29 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1997, 2000-2022 Free Software Foundation, Inc.
 
 ;; Author: Torbjörn Einarsson <Torbjorn.Einarsson@era.ericsson.se>
 ;; Maintainer: emacs-devel@gnu.org
@@ -647,7 +647,7 @@ do\\([ \t]*while\\)?\\|select[ 
\t]*\\(?:case\\|type\\)\\|where\\|\
 forall\\|block\\|critical\\)\\)\\_>"
       (2 font-lock-constant-face nil t) (3 font-lock-keyword-face))
     ;; Implicit declaration.
-    '("\\_<\\(implicit\\)[ \t]*\\(real\\|integer\\|c\\(haracter\\|omplex\\)\
+    '("\\_<\\(implicit\\)[ \t]+\\(real\\|integer\\|c\\(haracter\\|omplex\\)\
 \\|enumerator\\|procedure\\|\
 logical\\|double[ \t]*precision\\|type[ \t]*(\\(?:\\sw\\|\\s_\\)+)\\|none\\)[ 
\t]*"
       (1 font-lock-keyword-face) (2 font-lock-type-face))
@@ -657,8 +657,10 @@ logical\\|double[ \t]*precision\\|type[ 
\t]*(\\(?:\\sw\\|\\s_\\)+)\\|none\\)[ \t
     '("\\(&\\)[ \t]*\\(!\\|$\\)"  (1 font-lock-keyword-face))
     "\\_<\\(then\\|continue\\|format\\|include\\|\\(?:error[ \t]+\\)?stop\\|\
 return\\)\\_>"
-    '("\\_<\\(exit\\|cycle\\)[ \t]*\\(\\(?:\\sw\\|\\s_\\)+\\)?\\_>"
+    '("\\_<\\(exit\\|cycle\\)[ \t]+\\(\\(?:\\sw\\|\\s_\\)+\\)?\\_>"
       (1 font-lock-keyword-face) (2 font-lock-constant-face nil t))
+    '("\\_<\\(exit\\|cycle\\)\\_>"
+      (1 font-lock-keyword-face))
     '("\\_<\\(case\\)[ \t]*\\(default\\|(\\)" . 1)
     ;; F2003 "class default".
     '("\\_<\\(class\\)[ \t]*default" . 1)
diff --git a/lisp/progmodes/flymake-cc.el b/lisp/progmodes/flymake-cc.el
index 3ae3fcb9fe..49e36f4280 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2022 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 7f2aa0f469..eebfa70e34 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2022 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 4f9506c98b..0c16ddedcb 100644
--- a/lisp/progmodes/flymake.el
+++ b/lisp/progmodes/flymake.el
@@ -1,12 +1,12 @@
 ;;; flymake.el --- A universal on-the-fly syntax checker  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2003-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
 
 ;; Author: Pavel Kobyakov <pk_at_work@yahoo.com>
 ;; Maintainer: João Távora <joaotavora@gmail.com>
 ;; Version: 1.2.1
 ;; Keywords: c languages tools
-;; Package-Requires: ((emacs "26.1") (eldoc "1.1.0") (project "0.7.1"))
+;; Package-Requires: ((emacs "28.1") (eldoc "1.1.0") (project "0.7.1"))
 
 ;; This is a GNU ELPA :core package.  Avoid functionality that is not
 ;; compatible with the version of Emacs recorded above.
diff --git a/lisp/progmodes/fortran.el b/lisp/progmodes/fortran.el
index 7cf4ce2730..86f0be7320 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, 1993-1995, 1997-2021 Free Software Foundation,
+;; Copyright (C) 1986, 1993-1995, 1997-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Michael D. Prange <prange@erl.mit.edu>
diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el
index 39fcfd341c..ddccbe80e7 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
 
 ;; Author: Nick Roberts <nickrob@gnu.org>
 ;; Maintainer: emacs-devel@gnu.org
@@ -1266,7 +1266,7 @@ Used by Speedbar."
   :version "22.1")
 
 (define-key gud-minor-mode-map "\C-c\C-w" 'gud-watch)
-(define-key global-map (vconcat gud-key-prefix "\C-w") 'gud-watch)
+(keymap-set gud-global-map "C-w" 'gud-watch)
 
 (declare-function tooltip-identifier-from-point "tooltip" (point))
 
@@ -4611,7 +4611,9 @@ overlay arrow in source buffer."
   (let ((frame (gdb-mi--field (gdb-mi--partial-output) 'frame)))
     (when frame
       (setq gdb-selected-frame (gdb-mi--field frame 'func))
-      (setq gdb-selected-file (file-local-name (gdb-mi--field frame 
'fullname)))
+      (setq gdb-selected-file
+            (when-let ((full (gdb-mi--field frame 'fullname)))
+              (file-local-name full)))
       (setq gdb-frame-number (gdb-mi--field frame 'level))
       (setq gdb-frame-address (gdb-mi--field frame 'addr))
       (let ((line (gdb-mi--field frame 'line)))
diff --git a/lisp/progmodes/glasses.el b/lisp/progmodes/glasses.el
index cd92175bd6..f760ccf368 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: Milan Zamazal <pdm@zamazal.org>
 ;; Keywords: tools
diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el
index 001989e39a..ccc58e6773 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-2021 Free Software
+;; Copyright (C) 1985-1987, 1993-1999, 2001-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Roland McGrath <roland@gnu.org>
@@ -203,7 +203,7 @@ by `grep-compute-defaults'; to change the default value, use
   :version "22.1")
 
 (defcustom grep-files-aliases
-  '(("all" .   "* .[!.]* ..?*") ;; Don't match `..'. See bug#22577
+  '(("all" .   "* .*")
     ("el" .    "*.el")
     ("ch" .    "*.[ch]")
     ("c" .     "*.c")
diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el
index 9b884c4ff8..b1bef82842 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-2021 Free Software Foundation,
+;; Copyright (C) 1992-1996, 1998, 2000-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Eric S. Raymond <esr@snark.thyrsus.com>
@@ -90,8 +90,10 @@ pdb (Python), and jdb."
   "Prefix of all GUD commands valid in C buffers."
   :type 'key-sequence)
 
-(global-set-key (vconcat gud-key-prefix "\C-l") #'gud-refresh)
-;; (define-key ctl-x-map " " 'gud-break); backward compatibility hack
+(defvar-keymap gud-global-map
+  "C-l" #'gud-refresh)
+
+(global-set-key gud-key-prefix gud-global-map)
 
 (defvar gud-marker-filter nil)
 (put 'gud-marker-filter 'permanent-local t)
@@ -433,7 +435,7 @@ we're in the GUD buffer)."
            ;; Unused lexical warning if cmd does not use "arg".
            cmd))))
      ,(if key `(local-set-key ,(concat "\C-c" key) #',func))
-     ,(if key `(global-set-key (vconcat gud-key-prefix ,key) #',func))))
+     ,(if key `(define-key gud-global-map ,key #',func))))
 
 ;; Where gud-display-frame should put the debugging arrow; a cons of
 ;; (filename . line-number).  This is set by the marker-filter, which scans
diff --git a/lisp/progmodes/hideif.el b/lisp/progmodes/hideif.el
index 87732c1048..ba2c573748 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1988, 1994, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Brian Marick
 ;;     Daniel LaLiberte <liberte@holonexus.org>
@@ -181,30 +181,24 @@ Effective only if `hide-ifdef-expand-reinclusion-guard' 
is t."
   :type 'regexp
   :version "25.1")
 
-(defvar hide-ifdef-mode-submap
+(defvar-keymap hide-ifdef-mode-submap
+  :doc "Keymap used by `hide-ifdef-mode' under `hide-ifdef-mode-prefix-key'."
   ;; Set up the submap that goes after the prefix key.
-  (let ((map (make-sparse-keymap)))
-    (define-key map "d" 'hide-ifdef-define)
-    (define-key map "u" 'hide-ifdef-undef)
-    (define-key map "D" 'hide-ifdef-set-define-alist)
-    (define-key map "U" 'hide-ifdef-use-define-alist)
-
-    (define-key map "h" 'hide-ifdefs)
-    (define-key map "s" 'show-ifdefs)
-    (define-key map "\C-d" 'hide-ifdef-block)
-    (define-key map "\C-s" 'show-ifdef-block)
-    (define-key map "e" 'hif-evaluate-macro)
-    (define-key map "C" 'hif-clear-all-ifdef-defined)
-
-    (define-key map "\C-q" 'hide-ifdef-toggle-read-only)
-    (define-key map "\C-w" 'hide-ifdef-toggle-shadowing)
-    (substitute-key-definition
-     'read-only-mode 'hide-ifdef-toggle-outside-read-only map)
-    ;; `toggle-read-only' is obsoleted by `read-only-mode'.
-    (substitute-key-definition
-     'toggle-read-only 'hide-ifdef-toggle-outside-read-only map)
-    map)
-  "Keymap used by `hide-ifdef-mode' under `hide-ifdef-mode-prefix-key'.")
+  "d"   #'hide-ifdef-define
+  "u"   #'hide-ifdef-undef
+  "D"   #'hide-ifdef-set-define-alist
+  "U"   #'hide-ifdef-use-define-alist
+  "h"   #'hide-ifdefs
+  "s"   #'show-ifdefs
+  "C-d" #'hide-ifdef-block
+  "C-s" #'show-ifdef-block
+  "e"   #'hif-evaluate-macro
+  "C"   #'hif-clear-all-ifdef-defined
+  "C-q" #'hide-ifdef-toggle-read-only
+  "C-w" #'hide-ifdef-toggle-shadowing
+  "<remap> <read-only-mode>" #'hide-ifdef-toggle-outside-read-only
+  ;; `toggle-read-only' is obsoleted by `read-only-mode'.
+  "<remap> <toggle-read-only>" #'hide-ifdef-toggle-outside-read-only)
 
 (defcustom hide-ifdef-mode-prefix-key "\C-c@"
   "Prefix key for all Hide-Ifdef mode commands."
diff --git a/lisp/progmodes/hideshow.el b/lisp/progmodes/hideshow.el
index e2ad480281..f574ec84fb 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2022 Free Software Foundation, Inc.
 
 ;; Author: Thien-Thi Nguyen <ttn@gnu.org>
 ;;      Dan Nicolaescu <dann@ics.uci.edu>
diff --git a/lisp/progmodes/icon.el b/lisp/progmodes/icon.el
index e9a21d4a0c..e1ee9efc54 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1989, 2001-2022 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 bf49c92552..fab1439103 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 df04a43d3f..a19abf77e5 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
 ;;
 ;; Authors: JD Smith <jd.smith@utoledo.edu>
 ;;          Carsten Dominik <dominik@science.uva.nl>
diff --git a/lisp/progmodes/idlw-shell.el b/lisp/progmodes/idlw-shell.el
index ded3a9c463..b606352136 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 c3ffcd18ce..00de3d16c8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 9aaabd8a0e..e3985db64a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Authors: JD Smith <jd.smith@utoledo.edu>
 ;;          Carsten Dominik <dominik@science.uva.nl>
diff --git a/lisp/progmodes/inf-lisp.el b/lisp/progmodes/inf-lisp.el
index e69a9ff394..b9042e66c6 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1988-2022 Free Software Foundation, Inc.
 
 ;; Author: Olin Shivers <shivers@cs.cmu.edu>
 ;; Keywords: processes, lisp
@@ -308,7 +308,7 @@ quoted using shell quote syntax.
                           "inferior-lisp" (car cmdlist) nil (cdr cmdlist)))
        (inferior-lisp-mode)))
   (setq inferior-lisp-buffer "*inferior-lisp*")
-  (pop-to-buffer-same-window "*inferior-lisp*"))
+  (pop-to-buffer "*inferior-lisp*" display-comint-buffer-action))
 
 ;;;###autoload
 (defalias 'run-lisp 'inferior-lisp)
diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el
index 9303f1ecb9..9c1358e466 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
 
 ;; Author: Karl Landstrom <karl.landstrom@brgeight.se>
 ;;         Daniel Colascione <dancol@dancol.org>
diff --git a/lisp/progmodes/ld-script.el b/lisp/progmodes/ld-script.el
index 879eb72065..7ba74777c4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 d9c09f6fe6..b9fcd033bb 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1997, 2001-2022 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 df17b87c01..91307f6c09 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, 1994, 1999-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 1994, 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: Thomas Neumann <tom@smart.bo.open.de>
 ;;     Eric S. Raymond <esr@snark.thyrsus.com>
@@ -542,8 +542,8 @@ not be enclosed in { } or ( )."
 This should identify a `make' command that can handle the `-q' option."
   :type 'string)
 
-(defvaralias 'makefile-query-one-target-method
-  'makefile-query-one-target-method-function)
+(define-obsolete-variable-alias 'makefile-query-one-target-method
+  'makefile-query-one-target-method-function "29.1")
 
 (defcustom makefile-query-one-target-method-function
   'makefile-query-by-make-minus-q
diff --git a/lisp/progmodes/meta-mode.el b/lisp/progmodes/meta-mode.el
index 5026844602..5aaa277431 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2022 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 59e87b8741..97a218fcfa 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2022 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 79530f8167..ecc9386cae 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, 2001-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2022 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 495c77bbd9..4ab9b4a996 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-1999, 2001-2022 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 5938da542a..8dc03b72b1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993-2022 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 20834dd2e1..92b47ce88f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990, 1994, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: William F. Mann
 ;; Maintainer: emacs-devel@gnu.org
@@ -191,7 +191,9 @@
      ,(concat "\\<"
               (regexp-opt '("if" "until" "while" "elsif" "else" "unless"
                             "do" "dump" "for" "foreach" "exit" "die"
-                            "BEGIN" "END" "return" "exec" "eval") t)
+                            "BEGIN" "END" "return" "exec" "eval"
+                            "when" "given" "default")
+                          t)
               "\\>")
      ;;
      ;; Fontify declarators and prefixes as types.
@@ -212,7 +214,7 @@
 
 (eval-and-compile
   (defconst perl--syntax-exp-intro-keywords
-    '("split" "if" "unless" "until" "while" "print"
+    '("split" "if" "unless" "until" "while" "print" "printf"
       "grep" "map" "not" "or" "and" "for" "foreach" "return"))
 
   (defconst perl--syntax-exp-intro-regexp
diff --git a/lisp/progmodes/prog-mode.el b/lisp/progmodes/prog-mode.el
index 30b6edf0d9..7738de6a74 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: internal
@@ -93,7 +93,9 @@
     'mark-whole-buffer)
 
   ;; Include text-mode select menu only in strings and comments.
-  (when (nth 8 (save-excursion (syntax-ppss (posn-point (event-end click)))))
+  (when (nth 8 (save-excursion
+                 (with-current-buffer (window-buffer (posn-window (event-end 
click)))
+                   (syntax-ppss (posn-point (event-end click))))))
     (text-mode-context-menu menu click))
 
   menu)
diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el
index ed076a683d..c812f28c1b 100644
--- a/lisp/progmodes/project.el
+++ b/lisp/progmodes/project.el
@@ -1,6 +1,6 @@
 ;;; project.el --- Operations on the current project  -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2015-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
 ;; Version: 0.8.1
 ;; Package-Requires: ((emacs "26.1") (xref "1.0.2"))
 
@@ -502,10 +502,12 @@ backend implementation of `project-external-roots'.")
 (declare-function vc-hg-command "vc-hg")
 
 (defun project--vc-list-files (dir backend extra-ignores)
+  (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)
        ;; Include unregistered.
        (setq args (append args '("-c" "-o" "--exclude-standard")))
@@ -1015,7 +1017,7 @@ if one already exists."
          (default-project-shell-name (project-prefixed-buffer-name "shell"))
          (shell-buffer (get-buffer default-project-shell-name)))
     (if (and shell-buffer (not current-prefix-arg))
-        (pop-to-buffer-same-window shell-buffer)
+        (pop-to-buffer shell-buffer (bound-and-true-p 
display-comint-buffer-action))
       (shell (generate-new-buffer-name default-project-shell-name)))))
 
 ;;;###autoload
@@ -1031,7 +1033,7 @@ if one already exists."
          (eshell-buffer-name (project-prefixed-buffer-name "eshell"))
          (eshell-buffer (get-buffer eshell-buffer-name)))
     (if (and eshell-buffer (not current-prefix-arg))
-        (pop-to-buffer-same-window eshell-buffer)
+        (pop-to-buffer eshell-buffer (bound-and-true-p 
display-comint-buffer-action))
       (eshell t))))
 
 ;;;###autoload
@@ -1173,7 +1175,10 @@ displayed."
          (not (major-mode . help-mode)))
     (derived-mode . compilation-mode)
     (derived-mode . dired-mode)
-    (derived-mode . diff-mode))
+    (derived-mode . diff-mode)
+    (derived-mode . comint-mode)
+    (derived-mode . eshell-mode)
+    (derived-mode . change-log-mode))
   "List of conditions to kill buffers related to a project.
 This list is used by `project-kill-buffers'.
 Each condition is either:
@@ -1206,9 +1211,18 @@ current project, it will be killed."
                                (const and) sexp)
                          (cons :tag "Disjunction"
                                (const or) sexp)))
-  :version "28.1"
+  :version "29.1"
   :group 'project
-  :package-version '(project . "0.6.0"))
+  :package-version '(project . "0.8.2"))
+
+(defcustom project-kill-buffers-display-buffer-list nil
+  "Non-nil to display list of buffers to kill before killing project buffers.
+Used by `project-kill-buffers'."
+  :type 'boolean
+  :version "29.1"
+  :group 'project
+  :package-version '(project . "0.8.2")
+  :safe #'booleanp)
 
 (defun project--buffer-list (pr)
   "Return the list of all buffers in project PR."
@@ -1276,14 +1290,35 @@ NO-CONFIRM is always nil when the command is invoked
 interactively."
   (interactive)
   (let* ((pr (project-current t))
-         (bufs (project--buffers-to-kill pr)))
+         (bufs (project--buffers-to-kill pr))
+         (query-user (lambda ()
+                       (yes-or-no-p
+                        (format "Kill %d buffers in %s? "
+                                (length bufs)
+                                (project-root pr))))))
     (cond (no-confirm
            (mapc #'kill-buffer bufs))
           ((null bufs)
            (message "No buffers to kill"))
-          ((yes-or-no-p (format "Kill %d buffers in %s? "
-                                (length bufs)
-                                (project-root pr)))
+          (project-kill-buffers-display-buffer-list
+           (when
+               (with-current-buffer-window
+                   (get-buffer-create "*Buffer List*")
+                   `(display-buffer--maybe-at-bottom
+                     (dedicated . t)
+                     (window-height . (fit-window-to-buffer))
+                     (preserve-size . (nil . t))
+                     (body-function
+                      . ,#'(lambda (_window)
+                             (list-buffers-noselect nil bufs))))
+                   #'(lambda (window _value)
+                       (with-selected-window window
+                         (unwind-protect
+                             (funcall query-user)
+                           (when (window-live-p window)
+                             (quit-restore-window window 'kill))))))
+             (mapc #'kill-buffer bufs)))
+          ((funcall query-user)
            (mapc #'kill-buffer bufs)))))
 
 
diff --git a/lisp/progmodes/prolog.el b/lisp/progmodes/prolog.el
index c36082bb6d..8382c4bd09 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-2021 Free
+;; Copyright (C) 1986-1987, 1997-1999, 2002-2003, 2011-2022 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 68c3cd91fa..7c9aee2b2a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2001-2022 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 47d8d1ce8e..edd3139a7a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
 
 ;; Author: Fabián E. Gallina <fgallina@gnu.org>
 ;; URL: https://github.com/fgallina/python.el
@@ -2996,8 +2996,9 @@ killed."
                   (mapconcat #'identity args " ")))
             (with-current-buffer buffer
               (inferior-python-mode))
-            (when show (display-buffer buffer))
             (and internal (set-process-query-on-exit-flag process nil))))
+        (when show
+          (pop-to-buffer proc-buffer-name))
         proc-buffer-name))))
 
 ;;;###autoload
@@ -3029,7 +3030,6 @@ process buffer for a list of commands.)"
          (python-shell-make-comint
           (or cmd (python-shell-calculate-command))
           (python-shell-get-process-name dedicated) show)))
-    (set-buffer buffer)
     (get-buffer-process buffer)))
 
 (defun run-python-internal ()
diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el
index b0b055bd36..72631a6557 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2022 Free Software Foundation, Inc.
 
 ;; Authors: Yukihiro Matsumoto
 ;;     Nobuyoshi Nakada
diff --git a/lisp/progmodes/scheme.el b/lisp/progmodes/scheme.el
index abcdcb3349..6f47f645e0 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-1988, 1997-1998, 2001-2021 Free Software
+;; Copyright (C) 1986-1988, 1997-1998, 2001-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Bill Rozas <jinx@martigny.ai.mit.edu>
diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el
index c6b6f83471..ba86ceb0ed 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-2021 Free Software Foundation,
+;; Copyright (C) 1993-1997, 1999, 2001-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Daniel Pfeiffer <occitan@esperanto.org>
@@ -402,45 +402,42 @@ This is buffer-local in every such buffer.")
     (rpm . (,sh-mode-syntax-table ?\' ".")))
   "Syntax-table used in Shell-Script mode.  See `sh-feature'.")
 
-(defvar sh-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map "\C-c(" 'sh-function)
-    (define-key map "\C-c\C-w" 'sh-while)
-    (define-key map "\C-c\C-u" 'sh-until)
-    (define-key map "\C-c\C-t" 'sh-tmp-file)
-    (define-key map "\C-c\C-s" 'sh-select)
-    (define-key map "\C-c\C-r" 'sh-repeat)
-    (define-key map "\C-c\C-o" 'sh-while-getopts)
-    (define-key map "\C-c\C-l" 'sh-indexed-loop)
-    (define-key map "\C-c\C-i" 'sh-if)
-    (define-key map "\C-c\C-f" 'sh-for)
-    (define-key map "\C-c\C-c" 'sh-case)
-    (define-key map "\C-c?" #'smie-config-show-indent)
-    (define-key map "\C-c=" #'smie-config-set-indent)
-    (define-key map "\C-c<" #'smie-config-set-indent)
-    (define-key map "\C-c>" #'smie-config-guess)
-    (define-key map "\C-c\C-\\" 'sh-backslash-region)
-
-    (define-key map "\C-c+" 'sh-add)
-    (define-key map "\C-\M-x" 'sh-execute-region)
-    (define-key map "\C-c\C-x" 'executable-interpret)
-    (define-key map "\C-c\C-n" 'sh-send-line-or-region-and-step)
-    (define-key map "\C-c\C-d" 'sh-cd-here)
-    (define-key map "\C-c\C-z" 'sh-show-shell)
-
-    (define-key map [remap delete-backward-char]
-      'backward-delete-char-untabify)
-    (define-key map "\C-c:" 'sh-set-shell)
-    (define-key map [remap backward-sentence] 'sh-beginning-of-command)
-    (define-key map [remap forward-sentence] 'sh-end-of-command)
-    map)
-  "Keymap used in Shell-Script mode.")
+(defvar-keymap sh-mode-map
+  :doc "Keymap used in Shell-Script mode."
+  "C-c ("    #'sh-function
+  "C-c C-w"  #'sh-while
+  "C-c C-u"  #'sh-until
+  "C-c C-t"  #'sh-tmp-file
+  "C-c C-s"  #'sh-select
+  "C-c C-r"  #'sh-repeat
+  "C-c C-o"  #'sh-while-getopts
+  "C-c C-l"  #'sh-indexed-loop
+  "C-c C-i"  #'sh-if
+  "C-c C-f"  #'sh-for
+  "C-c C-c"  #'sh-case
+  "C-c ?"    #'smie-config-show-indent
+  "C-c ="    #'smie-config-set-indent
+  "C-c <"    #'smie-config-set-indent
+  "C-c >"    #'smie-config-guess
+  "C-c C-\\" #'sh-backslash-region
+
+  "C-c +"    #'sh-add
+  "C-M-x"    #'sh-execute-region
+  "C-c C-x"  #'executable-interpret
+  "C-c C-n"  #'sh-send-line-or-region-and-step
+  "C-c C-d"  #'sh-cd-here
+  "C-c C-z"  #'sh-show-shell
+  "C-c :"    #'sh-set-shell
+
+  "<remap> <delete-backward-char>" #'backward-delete-char-untabify
+  "<remap> <backward-sentence>"    #'sh-beginning-of-command
+  "<remap> <forward-sentence>"     #'sh-end-of-command)
 
 (easy-menu-define sh-mode-menu sh-mode-map
   "Menu for Shell-Script mode."
   '("Sh-Script"
     ["Backslash region" sh-backslash-region
-     :help "Insert, align, or delete end-of-line backslashes on the lines in 
the region."]
+     :help "Insert, align, or delete end-of-line backslashes on the lines in 
the region"]
     ["Set shell type..." sh-set-shell
      :help "Set this buffer's shell to SHELL (a string)"]
     ["Execute script..." executable-interpret
@@ -458,7 +455,7 @@ This is buffer-local in every such buffer.")
     ["Select Statement" sh-select
      :help "Insert a select statement "]
     ["Indexed Loop" sh-indexed-loop
-     :help "Insert an indexed loop from 1 to n."]
+     :help "Insert an indexed loop from 1 to n"]
     ["Options Loop" sh-while-getopts
      :help "Insert a while getopts loop."]
     ["While Loop" sh-while
@@ -482,7 +479,7 @@ This is buffer-local in every such buffer.")
     ["Show indentation" smie-config-show-indent
      :help "Show the how the current line would be indented"]
     ["Learn buffer indentation" smie-config-guess
-     :help "Learn how to indent the buffer the way it currently is."]))
+     :help "Learn how to indent the buffer the way it currently is"]))
 
 (defvar sh-skeleton-pair-default-alist '((?\( _ ?\)) (?\))
                                      (?\[ ?\s _ ?\s ?\]) (?\])
@@ -867,7 +864,7 @@ See `sh-feature'.")
     "\\(?:\\(?:.*[^\\\n]\\)?\\(?:\\\\\\\\\\)*\\\\\n\\)*.*")
 
   (defconst sh-here-doc-open-re
-    (concat 
"[^<]<<-?\\s-*\\\\?\\(\\(?:['\"][^'\"]+['\"]\\|\\sw\\|[-/~._]\\)+\\)"
+    (concat 
"[^<]<<-?\\s-*\\\\?\\(\\(?:['\"][^'\"]+['\"]\\|\\sw\\|[-/~._@]\\)+\\)"
             sh-escaped-line-re "\\(\n\\)")))
 
 (defun sh--inside-noncommand-expression (pos)
@@ -1410,7 +1407,7 @@ If FORCE is non-nil and no process found, create one."
 (defun sh-show-shell ()
   "Pop the shell interaction buffer."
   (interactive)
-  (pop-to-buffer (process-buffer (sh-shell-process t))))
+  (pop-to-buffer (process-buffer (sh-shell-process t)) 
display-comint-buffer-action))
 
 (defun sh-send-text (text)
   "Send the text to the `sh-shell-process'."
diff --git a/lisp/progmodes/simula.el b/lisp/progmodes/simula.el
index 7c0de9fc35..7e9aeab8fe 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, 1994, 1996, 2001-2021 Free Software Foundation,
+;; Copyright (C) 1992, 1994, 1996, 2001-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Hans Henrik Eriksen <hhe@ifi.uio.no>
diff --git a/lisp/progmodes/sql.el b/lisp/progmodes/sql.el
index f5888a0ce7..69d16a4357 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
 
 ;; Author: Alex Schroeder <alex@gnu.org>
 ;; Maintainer: Michael Mauger <michael@mauger.com>
@@ -3318,7 +3318,7 @@ function like this: (sql-get-login \\='user \\='password 
\\='database)."
          (sql-get-login-ext 'sql-server "Server" 'sql-server-history plist))
 
         ('database
-         (sql-get-login-ext 'sql-database "Database"
+         (sql-get-login-ext 'sql-database "Database: "
                             'sql-database-history plist))
 
         ('port
diff --git a/lisp/progmodes/subword.el b/lisp/progmodes/subword.el
index 33b70d83be..b1b78b4d12 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
 
 ;; Author: Masatake YAMATO
 
diff --git a/lisp/progmodes/tcl.el b/lisp/progmodes/tcl.el
index b6a7a20d87..ed6dce02c0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 1998-2022 Free Software Foundation, Inc.
 
 ;; Author: Tom Tromey <tromey@redhat.com>
 ;;    Chris Lindblad <cjl@lcs.mit.edu>
diff --git a/lisp/progmodes/vera-mode.el b/lisp/progmodes/vera-mode.el
index 4622256bb9..568c0f1d0f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2022 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 14f252b42d..edce3fef6c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2022 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 3a9185b334..c6693b4de5 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2022 Free Software Foundation, Inc.
 
 ;; Authors:     Reto Zimmermann <reto@gnu.org>
 ;;              Rodney J. Whitby <software.vhdl-mode@rwhitby.net>
@@ -10683,8 +10683,9 @@ Include a library specification, if not already there."
         (replace-match "" t t)
         (vhdl-template-insert-date))
        (goto-char beg)
-       (while (search-forward "<year>" end t)
-        (replace-match (format-time-string "%Y" nil) t t))
+       (let ((year (format-time-string "%Y")))
+        (while (search-forward "<year>" end t)
+          (replace-match year t t)))
        (goto-char beg)
        (when file-title
         (while (search-forward "<title string>" end t)
diff --git a/lisp/progmodes/which-func.el b/lisp/progmodes/which-func.el
index 176f599649..4388b0e7de 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2022 Free Software Foundation, Inc.
 
 ;; Author:   Alex Rezinsky <alexr@msil.sps.mot.com>
 ;;           (doesn't seem to be responsive any more)
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index ca3594d253..9ce63a8f8a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
 ;; Version: 1.3.2
 ;; Package-Requires: ((emacs "26.1"))
 
@@ -44,7 +44,7 @@
 ;;
 ;; The last three methods operate with "xref" and "location" values.
 ;;
-;; One would usually call `make-xref' and `xref-make-file-location',
+;; One would usually call `xref-make' and `xref-make-file-location',
 ;; `xref-make-buffer-location' or `xref-make-bogus-location' to create
 ;; them.  More generally, a location must be an instance of a type for
 ;; which methods `xref-location-group' and `xref-location-marker' are
@@ -206,7 +206,19 @@ is not known."
                   (:constructor xref-make (summary location))
                   (:noinline t))
   "An xref item describes a reference to a location somewhere."
-  summary location)
+  (summary nil :documentation "String which describes the location.
+
+When `xref-location-line' returns non-nil (a number), the summary
+is implied to be the contents of a file or buffer line containing
+the location.  When multiple locations in a row report the same
+line, in the same group (corresponding to the case of multiple
+locations on one line), the summaries are concatenated in the
+Xref output buffer.  Consequently, any code that creates xref
+values should take care to slice the summary values when several
+locations point to the same line.
+
+This behavior is new in Emacs 28.")
+  location)
 
 (xref--defstruct (xref-match-item
                   (:include xref-item)
diff --git a/lisp/progmodes/xscheme.el b/lisp/progmodes/xscheme.el
index 26ffe33b83..6e21131e4a 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-1987, 1989-1990, 2001-2021 Free Software
+;; Copyright (C) 1986-1987, 1989-1990, 2001-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
@@ -574,9 +574,8 @@ See also the commands \\[xscheme-yank-pop] and 
\\[xscheme-yank-push]."
   (if (consp arg)
       (exchange-point-and-mark)))
 
-;; Old name, to avoid errors in users' init files.
-(fset 'xscheme-yank-previous-send
-      'xscheme-yank)
+(define-obsolete-function-alias 'xscheme-yank-previous-send
+  #'xscheme-yank "29.1")
 
 (defun xscheme-yank-pop (arg)
   "Insert or replace a just-yanked expression with an older expression.
diff --git a/lisp/ps-bdf.el b/lisp/ps-bdf.el
index 72cbcf8bd6..f71c67849f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-1999, 2001-2022 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-def.el b/lisp/ps-def.el
index 4f8498d9ef..8c5187ca8b 100644
--- a/lisp/ps-def.el
+++ b/lisp/ps-def.el
@@ -1,6 +1,6 @@
 ;;; ps-def.el --- Emacs definitions for ps-print -*- lexical-binding: t -*-
 
-;; Copyright (C) 2007-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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-mule.el b/lisp/ps-mule.el
index 2d1dcd2b68..eb1abfd92d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 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 0fc9554679..8df5204fa1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993-2022 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 2f7de40da6..13d5e7d245 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 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 6b5a47c66f..5e2f221861 100644
--- a/lisp/recentf.el
+++ b/lisp/recentf.el
@@ -1,6 +1,6 @@
 ;;; recentf.el --- setup a menu of recently opened files  -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 1999-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 d288adfbaf..15d636f074 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1999-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: Didier Verna <didier@didierverna.net>
 ;; Keywords: internal
@@ -651,7 +651,8 @@ with a prefix argument, prompt for START-AT and FORMAT."
 (define-minor-mode rectangle-mark-mode
   "Toggle the region as rectangular.
 
-Activates the region if needed.  Only lasts until the region is deactivated."
+Activates the region if it's inactive and Transient Mark mode is
+on.  Only lasts until the region is next deactivated."
   :lighter nil
   (rectangle--reset-crutches)
   (when rectangle-mark-mode
diff --git a/lisp/register.el b/lisp/register.el
index e48a09f157..78aa130a94 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-2021 Free Software Foundation,
+;; Copyright (C) 1985, 1993-1994, 2001-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
@@ -279,6 +279,8 @@ ARG is the value of the prefix argument or nil."
     (goto-char (cadr val)))
    ((eq (car val) 'file)
     (find-file (cdr val)))
+   ((eq (car val) 'buffer)
+    (switch-to-buffer (cdr val)))
    ((eq (car val) 'file-query)
     (or (find-buffer-visiting (nth 1 val))
        (y-or-n-p (format "Visit file %s again? " (nth 1 val)))
@@ -417,6 +419,11 @@ Interactively, reads the register using 
`register-read-with-preview'."
     (prin1 (cdr val))
     (princ "."))
 
+   ((eq (car val) 'buffer)
+    (princ "the buffer ")
+    (prin1 (cdr val))
+    (princ "."))
+
    ((eq (car val) 'file-query)
     (princ "a file-query reference:\n    file ")
     (prin1 (car (cdr val)))
diff --git a/lisp/registry.el b/lisp/registry.el
index c10ae91d16..4030da7b57 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
 ;; Author: Teodor Zlatanov <tzz@lifelogs.com>
 ;; Keywords: data
diff --git a/lisp/repeat.el b/lisp/repeat.el
index 32ffb1884f..aaccc22784 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Will Mengarini <seldon@eskimo.com>
 ;; Created: Mo 02 Mar 98
@@ -345,7 +345,9 @@ For example, you can set it to <return> like 
`isearch-exit'."
 (defcustom repeat-exit-timeout nil
   "Break the repetition chain of keys after specified timeout.
 When a number, exit the transient repeating mode after idle time
-of the specified number of seconds."
+of the specified number of seconds.
+You can also set the property `repeat-exit-timeout' on the command symbol.
+This property can override the value of this variable."
   :type '(choice (const :tag "No timeout to exit repeating sequence" nil)
                  (number :tag "Timeout in seconds to exit repeating"))
   :group 'convenience
@@ -354,12 +356,30 @@ of the specified number of seconds."
 (defvar repeat-exit-timer nil
   "Timer activated after the last key typed in the repeating key sequence.")
 
-(defcustom repeat-keep-prefix t
+(defcustom repeat-keep-prefix nil
   "Whether to keep the prefix arg of the previous command when repeating."
   :type 'boolean
   :group 'convenience
   :version "28.1")
 
+(defcustom repeat-check-key t
+  "Whether to check that the last key exists in the repeat map.
+When non-nil and the last typed key (with or without modifiers)
+doesn't exist in the keymap attached by the `repeat-map' property,
+then don't activate that keymap for the next command.  So only the
+same keys among repeatable keys are allowed in the repeating sequence.
+For example, with a non-nil value, only `C-x u u' repeats undo,
+whereas `C-/ u' doesn't.
+
+You can also set the property `repeat-check-key' on the command symbol.
+This property can override the value of this variable.
+When the variable value is non-nil, but the property value is `no',
+then don't check the last key.  Also when the variable value is nil,
+but the property value is `t', then check the last key."
+  :type 'boolean
+  :group 'convenience
+  :version "28.1")
+
 (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:
@@ -405,16 +425,27 @@ See `describe-repeat-maps' for a list of all repeatable 
commands."
 (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-check-key (key map)
+  "Check if the last key is suitable to activate the repeating MAP."
+  (let* ((prop (repeat--command-property 'repeat-check-key))
+         (check-key (unless (eq prop 'no) (or prop repeat-check-key))))
+    (or (not check-key)
+        (lookup-key map (vector key))
+        ;; Try without modifiers:
+        (lookup-key map (vector (event-basic-type key))))))
+
 (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
-                         (and (symbolp this-command)
-                              (get this-command 'repeat-map))
-                         (and (symbolp real-this-command)
-                              (get real-this-command 'repeat-map)))))
+      (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)))
@@ -426,10 +457,8 @@ See `describe-repeat-maps' for a list of all repeatable 
commands."
                    ;; in the middle of repeating sequence (bug#47566).
                    (or (< (minibuffer-depth) (car repeat--prev-mb))
                        (eq current-minibuffer-command (cdr repeat--prev-mb)))
-                   ;; Exit when the last char is not among repeatable keys,
-                   ;; so e.g. `C-x u u' repeats undo, whereas `C-/ u' doesn't.
-                   (or (lookup-key map (this-command-keys-vector))
-                       prefix-arg))
+                   (or (not repeat-keep-prefix) prefix-arg)
+                   (repeat-check-key last-command-event map))
 
               ;; Messaging
               (unless prefix-arg
@@ -449,14 +478,16 @@ See `describe-repeat-maps' for a list of all repeatable 
commands."
                   (cancel-timer repeat-exit-timer)
                   (setq repeat-exit-timer nil))
 
-                (when repeat-exit-timeout
-                  (setq repeat-exit-timer
-                        (run-with-idle-timer
-                         repeat-exit-timeout nil
-                         (lambda ()
-                           (setq repeat-in-progress nil)
-                           (funcall exitfun)
-                           (funcall repeat-echo-function nil)))))))))))
+                (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
+                           (lambda ()
+                             (setq repeat-in-progress nil)
+                             (funcall exitfun)
+                             (funcall repeat-echo-function nil))))))))))))
 
     (setq repeat-map nil)
     (setq repeat--prev-mb (cons (minibuffer-depth) current-minibuffer-command))
@@ -515,31 +546,32 @@ See `describe-repeat-maps' for a list of all repeatable 
commands."
 Used in `repeat-mode'."
   (interactive)
   (require 'help-fns)
-  (help-setup-xref (list #'describe-repeat-maps)
-                   (called-interactively-p 'interactive))
-  (let ((keymaps nil))
-    (all-completions
-     "" obarray (lambda (s)
-                  (and (commandp s)
-                       (get s 'repeat-map)
-                       (push s (alist-get (get s 'repeat-map) keymaps)))))
-    (with-help-window (help-buffer)
-      (with-current-buffer standard-output
-        (princ "A list of keymaps used by commands with the symbol property 
`repeat-map'.\n\n")
-
-        (dolist (keymap (sort keymaps (lambda (a b) (string-lessp (car a) (car 
b)))))
-          (princ (format-message "`%s' keymap is repeatable by these 
commands:\n"
-                                 (car keymap)))
-          (dolist (command (sort (cdr keymap) 'string-lessp))
-            (let* ((info (help-fns--analyze-function command))
-                   (map (list (symbol-value (car keymap))))
-                   (desc (mapconcat (lambda (key)
-                                      (format-message "`%s'" (key-description 
key)))
-                                    (or (where-is-internal command map)
-                                        (where-is-internal (nth 3 info) map))
-                                    ", ")))
-              (princ (format-message " `%s' (bound to %s)\n" command desc))))
-          (princ "\n"))))))
+  (let ((help-buffer-under-preparation t))
+    (help-setup-xref (list #'describe-repeat-maps)
+                     (called-interactively-p 'interactive))
+    (let ((keymaps nil))
+      (all-completions
+       "" obarray (lambda (s)
+                    (and (commandp s)
+                         (get s 'repeat-map)
+                         (push s (alist-get (get s 'repeat-map) keymaps)))))
+      (with-help-window (help-buffer)
+        (with-current-buffer standard-output
+          (princ "A list of keymaps used by commands with the symbol property 
`repeat-map'.\n\n")
+
+          (dolist (keymap (sort keymaps (lambda (a b) (string-lessp (car a) 
(car b)))))
+            (princ (format-message "`%s' keymap is repeatable by these 
commands:\n"
+                                   (car keymap)))
+            (dolist (command (sort (cdr keymap) 'string-lessp))
+              (let* ((info (help-fns--analyze-function command))
+                     (map (list (symbol-value (car keymap))))
+                     (desc (mapconcat (lambda (key)
+                                        (format-message "`%s'" 
(key-description key)))
+                                      (or (where-is-internal command map)
+                                          (where-is-internal (nth 3 info) map))
+                                      ", ")))
+                (princ (format-message " `%s' (bound to %s)\n" command desc))))
+            (princ "\n")))))))
 
 (provide 'repeat)
 
diff --git a/lisp/replace.el b/lisp/replace.el
index 0e81b15a09..60e507c642 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-2021 Free
+;; Copyright (C) 1985-1987, 1992, 1994, 1996-1997, 2000-2022 Free
 ;; Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
@@ -2621,6 +2621,15 @@ It is used by `query-replace-regexp', `replace-regexp',
 It is called with three arguments, as if it were
 `re-search-forward'.")
 
+(defvar replace-regexp-function nil
+  "Function to convert the FROM string of query-replace commands to a regexp.
+This is used by `query-replace', `query-replace-regexp', etc. as
+the value of `isearch-regexp-function' when they search for the
+occurences of the string/regexp to be replaced.  This is intended
+to be used when the string to be replaced, as typed by the user,
+is not to be interpreted literally, but instead should be converted
+to a regexp that is actually used for the search.")
+
 (defun replace-search (search-string limit regexp-flag delimited-flag
                       case-fold &optional backward)
   "Search for the next occurrence of SEARCH-STRING to replace."
@@ -2633,7 +2642,8 @@ It is called with three arguments, as if it were
   ;; outside of this function because then another I-search
   ;; used after `recursive-edit' might override them.
   (let* ((isearch-regexp regexp-flag)
-        (isearch-regexp-function (or delimited-flag
+        (isearch-regexp-function (or replace-regexp-function
+                                     delimited-flag
                                      (and replace-char-fold
                                           (not regexp-flag)
                                           #'char-fold-to-regexp)))
@@ -2690,7 +2700,8 @@ It is called with three arguments, as if it were
   (if query-replace-lazy-highlight
       (let ((isearch-string search-string)
            (isearch-regexp regexp-flag)
-           (isearch-regexp-function (or delimited-flag
+           (isearch-regexp-function (or replace-regexp-function
+                                        delimited-flag
                                         (and replace-char-fold
                                              (not regexp-flag)
                                              #'char-fold-to-regexp)))
diff --git a/lisp/reposition.el b/lisp/reposition.el
index 02bee4165a..3095740939 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1991, 1994, 2001-2022 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 697df45c5c..64e9ceef64 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 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 3c1958686f..f5779e59ac 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
 ;;
 ;; Author: Miles Bader <miles@gnu.org>
 ;; Keywords: convenience minibuffer
diff --git a/lisp/rot13.el b/lisp/rot13.el
index e509b22529..c063725de8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1988, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Howard Gayle
 ;;         Simon Josefsson
diff --git a/lisp/rtree.el b/lisp/rtree.el
index 0eaaa58e6e..a14d20cf97 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 
diff --git a/lisp/ruler-mode.el b/lisp/ruler-mode.el
index 84c9d06ece..afe1cd4bfd 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2022 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 6745d379cb..aab304007b 100644
--- a/lisp/savehist.el
+++ b/lisp/savehist.el
@@ -1,6 +1,6 @@
 ;;; savehist.el --- Save minibuffer history  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1997, 2005-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2005-2022 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 3eff816fa0..4d13ad3959 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2001-2022 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 415244f9e9..8b2315fa15 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2022 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 eecdb60f3a..3d12723c02 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1995, 1999-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: hardware
diff --git a/lisp/scroll-lock.el b/lisp/scroll-lock.el
index d283b8089c..d41e335233 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2022 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 43424d94b3..7f29f02dab 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2001-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: internal
@@ -140,24 +140,27 @@ MS-Windows does not have a \"primary\" selection."
 (defcustom x-select-request-type nil
   "Data type request for X selection.
 The value is one of the following data types, a list of them, or nil:
-  `COMPOUND_TEXT', `UTF8_STRING', `STRING', `TEXT'
+  `COMPOUND_TEXT', `UTF8_STRING', `STRING', `TEXT', 
`text/plain\\;charset=utf-8'
 
 If the value is one of the above symbols, try only the specified type.
 
 If the value is a list of them, try each of them in the specified
 order until succeed.
 
-The value nil is the same as the list (UTF8_STRING COMPOUND_TEXT STRING)."
+The value nil is the same as the list (UTF8_STRING COMPOUND_TEXT STRING
+text/plain\\;charset=utf-8)."
   :type '(choice (const :tag "Default" nil)
                 (const COMPOUND_TEXT)
                 (const UTF8_STRING)
                 (const STRING)
                 (const TEXT)
+                 (const text/plain\;charset=utf-8)
                 (set :tag "List of values"
                      (const COMPOUND_TEXT)
                      (const UTF8_STRING)
                      (const STRING)
-                     (const TEXT)))
+                     (const TEXT)
+                      (const text/plain\;charset=utf-8)))
   :group 'killing)
 
 (defun gui--selection-value-internal (type)
@@ -165,9 +168,9 @@ The value nil is the same as the list (UTF8_STRING 
COMPOUND_TEXT STRING)."
 Call `gui-get-selection' with an appropriate DATA-TYPE argument
 decided by `x-select-request-type'.  The return value is already
 decoded.  If `gui-get-selection' signals an error, return nil."
-  (let ((request-type (if (eq window-system 'x)
+  (let ((request-type (if (memq window-system '(x pgtk))
                           (or x-select-request-type
-                              '(UTF8_STRING COMPOUND_TEXT STRING))
+                              '(UTF8_STRING COMPOUND_TEXT STRING 
text/plain\;charset=utf-8))
                         'STRING))
        text)
     (with-demoted-errors "gui-get-selection: %S"
@@ -312,6 +315,7 @@ the formats available in the clipboard if TYPE is 
`CLIPBOARD'."
                         selection-coding-system
                         (pcase data-type
                           ('UTF8_STRING 'utf-8)
+                          ('text/plain\;charset=utf-8 'utf-8)
                           ('COMPOUND_TEXT 'compound-text-with-extensions)
                           ('C_STRING nil)
                           ('STRING 'iso-8859-1)))))
diff --git a/lisp/server.el b/lisp/server.el
index 2f003a380a..da60f1cda7 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-2021 Free Software Foundation,
+;; Copyright (C) 1986-1987, 1992, 1994-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: William Sommerfeld <wesommer@athena.mit.edu>
@@ -900,12 +900,17 @@ This handles splitting the command if it would be bigger 
than
       )
 
     (cond (w
-           (server--create-frame
-            nowait proc
-            `((display . ,display)
-              ,@(if parent-id
-                    `((parent-id . ,(string-to-number parent-id))))
-              ,@parameters)))
+           (condition-case nil
+               (server--create-frame
+                nowait proc
+                `((display . ,display)
+                  ,@(if parent-id
+                        `((parent-id . ,(string-to-number parent-id))))
+                  ,@parameters))
+             (error
+              (server-log "Window system unsupported" proc)
+              (server-send-string proc "-window-system-unsupported \n")
+              nil)))
 
           (t
            (server-log "Window system unsupported" proc)
diff --git a/lisp/ses.el b/lisp/ses.el
index 5e2d254881..45e323e805 100644
--- a/lisp/ses.el
+++ b/lisp/ses.el
@@ -1,6 +1,6 @@
 ;;; ses.el --- Simple Emacs Spreadsheet  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2002-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
 
 ;; Author: Jonathan Yavner <jyavner@member.fsf.org>
 ;; Maintainer: Vincent Belaïche <vincentb1@users.sourceforge.net>
@@ -227,12 +227,6 @@ Used for listing local printers or renamed cells.")
                "w"       ses-set-column-width
                "x"       ses-export-keymap
                "\M-p"    ses-read-column-printer))
-       (repl '(;;We'll replace these wherever they appear in the keymap
-               clipboard-kill-region ses-kill-override
-               end-of-line           ses-end-of-line
-               kill-line             ses-delete-row
-               kill-region           ses-kill-override
-               open-line             ses-insert-row))
        (numeric "0123456789.-")
        (newmap (make-keymap)))
     ;;Get rid of printables
@@ -240,13 +234,11 @@ Used for listing local printers or renamed cells.")
     ;;These keys insert themselves as the beginning of a numeric value
     (dotimes (x (length numeric))
       (define-key newmap (substring numeric x (1+ x)) 'ses-read-cell))
-    ;;Override these global functions wherever they're bound
-    (while repl
-      (substitute-key-definition (car repl) (cadr repl) newmap
-                                (current-global-map))
-      (setq repl (cddr repl)))
-    ;;Apparently substitute-key-definition doesn't catch this?
-    (define-key newmap [(menu-bar) edit cut] 'ses-kill-override)
+    (define-key newmap [remap clipboard-kill-region] #'ses-kill-override)
+    (define-key newmap [remap end-of-line]           #'ses-end-of-line)
+    (define-key newmap [remap kill-line]             #'ses-delete-row)
+    (define-key newmap [remap kill-region]           #'ses-kill-override)
+    (define-key newmap [remap open-line]             #'ses-insert-row)
     ;;Define our other local keys
     (while keys
       (define-key newmap (car keys) (cadr keys))
diff --git a/lisp/shadowfile.el b/lisp/shadowfile.el
index 63e9bd655c..c1c31fe9c6 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Boris Goldowsky <boris@gnu.org>
 ;; Keywords: comm files
diff --git a/lisp/shell.el b/lisp/shell.el
index 370532ea46..c0a82bca18 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-2021 Free Software Foundation,
+;; Copyright (C) 1988, 1993-1997, 2000-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Olin Shivers <shivers@cs.cmu.edu>
@@ -758,7 +758,7 @@ Make the shell buffer the current buffer, and return it.
                  (current-buffer)))
   ;; The buffer's window must be correctly set when we call comint
   ;; (so that comint sets the COLUMNS env var properly).
-  (pop-to-buffer-same-window buffer)
+  (pop-to-buffer buffer display-comint-buffer-action)
 
   (with-connection-local-variables
    ;; On remote hosts, the local `shell-file-name' might be useless.
diff --git a/lisp/simple.el b/lisp/simple.el
index 84928caa31..c73c94b53a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1987, 1993-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: internal
@@ -4702,6 +4702,8 @@ File name handlers might not support pty association, if 
PROGRAM is nil."
         (forward-line -1)
       (beginning-of-line))))
 
+(declare-function thread-name "thread.c")
+
 (defun list-processes--refresh ()
   "Recompute the list of processes for the Process List buffer.
 Also, delete any process that is exited or signaled."
@@ -6662,11 +6664,10 @@ mode temporarily."
         (user-error "No mark set in this buffer"))
     (set-mark (point))
     (goto-char omark)
-    (cond (temp-highlight
-          (setq-local transient-mark-mode (cons 'only transient-mark-mode)))
-         ((xor arg (not (region-active-p)))
-          (deactivate-mark))
-         (t (activate-mark)))
+    (or temp-highlight
+        (cond ((xor arg (not (region-active-p)))
+              (deactivate-mark))
+             (t (activate-mark))))
     nil))
 
 (defcustom shift-select-mode t
@@ -8980,6 +8981,7 @@ makes it easier to edit it."
     (define-key map [down-mouse-2] nil)
     (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 [left] 'previous-completion)
     (define-key map [right] 'next-completion)
     (define-key map [?\t] 'next-completion)
@@ -9027,38 +9029,68 @@ Go to the window from which completion was requested."
       (if (get-buffer-window buf)
          (select-window (get-buffer-window buf))))))
 
+(defcustom completion-wrap-movement t
+  "Non-nil means to wrap around when selecting completion options.
+This affects the commands `next-completion' and
+`previous-completion'."
+  :type 'boolean
+  :version "29.1"
+  :group 'completion)
+
 (defun previous-completion (n)
-  "Move to the previous item in the completion list."
+  "Move to the previous item in the completion list.
+With prefix argument N, move back N items (negative N means move
+forward)."
   (interactive "p")
   (next-completion (- n)))
 
 (defun next-completion (n)
   "Move to the next item in the completion list.
-With prefix argument N, move N items (negative N means move backward)."
+With prefix argument N, move N items (negative N means move
+backward)."
   (interactive "p")
   (let ((beg (point-min)) (end (point-max)))
-    (while (and (> n 0) (not (eobp)))
-      ;; If in a completion, move to the end of it.
-      (when (get-text-property (point) 'mouse-face)
-       (goto-char (next-single-property-change (point) 'mouse-face nil end)))
-      ;; Move to start of next one.
-      (unless (get-text-property (point) 'mouse-face)
-       (goto-char (next-single-property-change (point) 'mouse-face nil end)))
-      (setq n (1- n)))
-    (while (and (< n 0) (not (bobp)))
-      (let ((prop (get-text-property (1- (point)) 'mouse-face)))
-       ;; If in a completion, move to the start of it.
-       (when (and prop (eq prop (get-text-property (point) 'mouse-face)))
-         (goto-char (previous-single-property-change
-                     (point) 'mouse-face nil beg)))
-       ;; Move to end of the previous completion.
-       (unless (or (bobp) (get-text-property (1- (point)) 'mouse-face))
-         (goto-char (previous-single-property-change
-                     (point) 'mouse-face nil beg)))
-       ;; Move to the start of that one.
-       (goto-char (previous-single-property-change
-                   (point) 'mouse-face nil beg))
-       (setq n (1+ n))))))
+    (catch 'bound
+      (while (> n 0)
+        ;; If in a completion, move to the end of it.
+        (when (get-text-property (point) 'mouse-face)
+          (goto-char (next-single-property-change (point) 'mouse-face nil 
end)))
+        ;; If at the last completion option, wrap or skip to the
+        ;; minibuffer, if requested.
+        (when (and completion-wrap-movement (eobp))
+          (if (and (member (this-command-keys) '("\t" [backtab]))
+                   completion-auto-select)
+              (throw 'bound nil)
+            (goto-char (point-min))))
+        ;; Move to start of next one.
+        (unless (get-text-property (point) 'mouse-face)
+          (goto-char (next-single-property-change (point) 'mouse-face nil 
end)))
+        (setq n (1- n)))
+      (while (< n 0)
+        (let ((prop (get-text-property (1- (point)) 'mouse-face)))
+          ;; If in a completion, move to the start of it.
+          (when (and prop (eq prop (get-text-property (point) 'mouse-face)))
+            (goto-char (previous-single-property-change
+                        (point) 'mouse-face nil beg)))
+          ;; Move to end of the previous completion.
+          (unless (or (bobp) (get-text-property (1- (point)) 'mouse-face))
+            (goto-char (previous-single-property-change
+                        (point) 'mouse-face nil beg)))
+          ;; If at the first completion option, wrap or skip to the
+          ;; minibuffer, if requested.
+          (when (and completion-wrap-movement (bobp))
+            (if (and (member (this-command-keys) '("\t" [backtab]))
+                     completion-auto-select)
+                (progn
+                  (goto-char (next-single-property-change (point) 'mouse-face 
nil end))
+                  (throw 'bound nil))
+              (goto-char (point-max))))
+          ;; Move to the start of that one.
+          (goto-char (previous-single-property-change
+                      (point) 'mouse-face nil beg))
+          (setq n (1+ n)))))
+    (when (/= 0 n)
+      (switch-to-minibuffer))))
 
 (defun choose-completion (&optional event)
   "Choose the completion at point.
@@ -9226,6 +9258,12 @@ Called from `temp-buffer-show-hook'."
   :version "22.1"
   :group 'completion)
 
+(defcustom completion-auto-select nil
+  "Non-nil means to automatically select the *Completions* buffer."
+  :type 'boolean
+  :version "29.1"
+  :group 'completion)
+
 ;; This function goes in completion-setup-hook, so that it is called
 ;; after the text of the completion list buffer is written.
 (defun completion-setup-function ()
@@ -9262,7 +9300,9 @@ Called from `temp-buffer-show-hook'."
            (insert "Click on a completion to select it.\n"))
        (insert (substitute-command-keys
                 "In this buffer, type \\[choose-completion] to \
-select the completion near point.\n\n"))))))
+select the completion near point.\n\n")))))
+  (when completion-auto-select
+    (switch-to-completions)))
 
 (add-hook 'completion-setup-hook #'completion-setup-function)
 
@@ -9275,10 +9315,16 @@ select the completion near point.\n\n"))))))
                            (get-buffer-window "*Completions*" 0)))))
     (when window
       (select-window window)
-      ;; In the new buffer, go to the first completion.
-      ;; FIXME: Perhaps this should be done in `minibuffer-completion-help'.
-      (when (bobp)
-       (next-completion 1)))))
+      (cond
+       ((and (memq this-command '(completion-at-point minibuffer-complete))
+             (equal (this-command-keys) [backtab])
+             (bobp))
+        (goto-char (point-max))
+        (previous-completion 1))
+       ;; In the new buffer, go to the first completion.
+       ;; FIXME: Perhaps this should be done in `minibuffer-completion-help'.
+       ((bobp)
+        (next-completion 1))))))
 
 (defun read-expression-switch-to-completions ()
   "Select the completion list window while reading an expression."
@@ -9616,7 +9662,7 @@ call `normal-erase-is-backspace-mode' (which see) 
instead."
        (if (if (eq normal-erase-is-backspace 'maybe)
                (and (not noninteractive)
                     (or (memq system-type '(ms-dos windows-nt))
-                       (memq window-system '(w32 ns))
+                       (memq window-system '(w32 ns pgtk))
                         (and (eq window-system 'x)
                              (fboundp 'x-backspace-delete-keys-p)
                              (x-backspace-delete-keys-p))
@@ -9790,24 +9836,7 @@ If it does not exist, create it and switch it to 
`messages-buffer-mode'."
 ;; versions together with bad values.  This is therefore not as
 ;; flexible as it could be.  See the thread:
 ;; https://lists.gnu.org/r/emacs-devel/2007-08/msg00300.html
-(defconst bad-packages-alist
-  ;; Not sure exactly which semantic versions have problems.
-  ;; Definitely 2.0pre3, probably all 2.0pre's before this.
-  '((semantic semantic-version "\\`2\\.0pre[1-3]\\'"
-              "The version of `semantic' loaded does not work in Emacs 22.
-It can cause constant high CPU load.
-Upgrade to at least Semantic 2.0pre4 (distributed with CEDET 1.0pre4).")
-    ;; CUA-mode does not work with GNU Emacs version 22.1 and newer.
-    ;; Except for version 1.2, all of the 1.x and 2.x version of cua-mode
-    ;; provided the `CUA-mode' feature.  Since this is no longer true,
-    ;; we can warn the user if the `CUA-mode' feature is ever provided.
-    (CUA-mode t nil
-"CUA-mode is now part of the standard GNU Emacs distribution,
-so you can now enable CUA via the Options menu or by customizing `cua-mode'.
-
-You have loaded an older version of CUA-mode which does not work
-correctly with this version of Emacs.  You should remove the old
-version and use the one distributed with Emacs."))
+(defconst bad-packages-alist nil
   "Alist of packages known to cause problems in this version of Emacs.
 Each element has the form (PACKAGE SYMBOL REGEXP STRING).
 PACKAGE is either a regular expression to match file names, or a
@@ -9815,9 +9844,11 @@ symbol (a feature name), like for `with-eval-after-load'.
 SYMBOL is either the name of a string variable, or t.  Upon
 loading PACKAGE, if SYMBOL is t or matches REGEXP, display a
 warning using STRING as the message.")
+(make-obsolete-variable 'bad-packages-alist nil "29.1")
 
 (defun bad-package-check (package)
   "Run a check using the element from `bad-packages-alist' matching PACKAGE."
+  (declare (obsolete nil "29.1"))
   (condition-case nil
       (let* ((list (assoc package bad-packages-alist))
              (symbol (nth 1 list)))
@@ -9829,11 +9860,6 @@ warning using STRING as the message.")
              (display-warning package (nth 3 list) :warning)))
     (error nil)))
 
-(dolist (elem bad-packages-alist)
-  (let ((pkg (car elem)))
-    (with-eval-after-load pkg
-      (bad-package-check pkg))))
-
 
 ;;; Generic dispatcher commands
 
diff --git a/lisp/skeleton.el b/lisp/skeleton.el
index 2b183996d8..1bfc29f34e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1996, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Daniel Pfeiffer <occitan@esperanto.org>
 ;; Maintainer: emacs-devel@gnu.org
@@ -37,7 +37,8 @@
 ;; page 2:     paired insertion
 ;; page 3:     mirror-mode, an example for setting up paired insertion
 
-(defvaralias 'skeleton-transformation 'skeleton-transformation-function)
+(define-obsolete-variable-alias 'skeleton-transformation
+  'skeleton-transformation-function "29.1")
 
 (defvar skeleton-transformation-function 'identity
   "If non-nil, function applied to literal strings before they are inserted.
@@ -65,7 +66,8 @@ region.")
   "Hook called at end of skeleton but before going to point of interest.
 The variables `v1' and `v2' are still set when calling this.")
 
-(defvaralias 'skeleton-filter 'skeleton-filter-function)
+(define-obsolete-variable-alias 'skeleton-filter
+  'skeleton-filter-function "29.1")
 
 ;;;###autoload
 (defvar skeleton-filter-function 'identity
diff --git a/lisp/so-long.el b/lisp/so-long.el
index c975384ddb..f4ae71d905 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2016, 2018-2022 Free Software Foundation, Inc.
 
 ;; Author: Phil Sainty <psainty@orcon.net.nz>
 ;; Maintainer: Phil Sainty <psainty@orcon.net.nz>
diff --git a/lisp/sort.el b/lisp/sort.el
index 0925980541..eb8e2787d1 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-2021 Free Software
+;; Copyright (C) 1986-1987, 1994-1995, 2001-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Howie Kaye
diff --git a/lisp/soundex.el b/lisp/soundex.el
index ed98c65e80..2a6605c00b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 2001-2022 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 3cc3e27606..e63a2642fe 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2022 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: file, tags, tools
@@ -3694,27 +3694,21 @@ regular expression EXPR."
 
 ;;; BUFFER DISPLAY mode.
 ;;
-(defvar speedbar-buffers-key-map nil
+(defvar speedbar-buffers-key-map
+  (let ((map (speedbar-make-specialized-keymap)))
+    ;; Basic tree features
+    (define-key map "e" #'speedbar-edit-line)
+    (define-key map "\C-m" #'speedbar-edit-line)
+    (define-key map "+" #'speedbar-expand-line)
+    (define-key map "=" #'speedbar-expand-line)
+    (define-key map "-" #'speedbar-contract-line)
+    (define-key map " " #'speedbar-toggle-line-expansion)
+    ;; Buffer specific keybindings
+    (define-key map "k" #'speedbar-buffer-kill-buffer)
+    (define-key map "r" #'speedbar-buffer-revert-buffer)
+    map)
   "Keymap used when in the buffers display mode.")
 
-(if speedbar-buffers-key-map
-    nil
-  (setq speedbar-buffers-key-map (speedbar-make-specialized-keymap))
-
-  ;; Basic tree features
-  (define-key speedbar-buffers-key-map "e" 'speedbar-edit-line)
-  (define-key speedbar-buffers-key-map "\C-m" 'speedbar-edit-line)
-  (define-key speedbar-buffers-key-map "+" 'speedbar-expand-line)
-  (define-key speedbar-buffers-key-map "=" 'speedbar-expand-line)
-  (define-key speedbar-buffers-key-map "-" 'speedbar-contract-line)
-  (define-key speedbar-buffers-key-map " " 'speedbar-toggle-line-expansion)
-
-  ;; Buffer specific keybindings
-  (define-key speedbar-buffers-key-map "k" 'speedbar-buffer-kill-buffer)
-  (define-key speedbar-buffers-key-map "r" 'speedbar-buffer-revert-buffer)
-
-  )
-
 (defvar speedbar-buffer-easymenu-definition
   '(["Jump to buffer" speedbar-edit-line t]
     ["Expand File Tags" speedbar-expand-line
diff --git a/lisp/sqlite-mode.el b/lisp/sqlite-mode.el
new file mode 100644
index 0000000000..ba1b81ef7e
--- /dev/null
+++ b/lisp/sqlite-mode.el
@@ -0,0 +1,216 @@
+;;; sqlite-mode.el --- Mode for examining sqlite3 database files  -*- 
lexical-binding: t; -*-
+
+;; Copyright (C) 2021-2022 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 'cl-lib)
+
+(declare-function sqlite-execute "sqlite.c")
+(declare-function sqlite-more-p "sqlite.c")
+(declare-function sqlite-next "sqlite.c")
+(declare-function sqlite-columns "sqlite.c")
+(declare-function sqlite-finalize "sqlite.c")
+(declare-function sqlite-select "sqlite.c")
+(declare-function sqlite-open "sqlite.c")
+
+(defvar-keymap sqlite-mode-map
+  "g" #'sqlite-mode-list-tables
+  "c" #'sqlite-mode-list-columns
+  "RET" #'sqlite-mode-list-data
+  "DEL" #'sqlite-mode-delete)
+
+(define-derived-mode sqlite-mode special-mode "Sqlite"
+  "This mode lists the contents of an .sqlite3 file"
+  :interactive nil
+  (buffer-disable-undo)
+  (setq-local buffer-read-only t
+              truncate-lines t))
+
+(defvar sqlite--db nil)
+
+;;;###autoload
+(defun sqlite-mode-open-file (file)
+  "Browse the contents of an sqlite file."
+  (interactive "fSQLite file name: ")
+  (unless (sqlite-available-p)
+    (error "This Emacs doesn't have SQLite support, so it can't view SQLite 
files"))
+  (pop-to-buffer (get-buffer-create
+                  (format "*SQLite %s*" (file-name-nondirectory file))))
+  (sqlite-mode)
+  (setq-local sqlite--db (sqlite-open file))
+  (sqlite-mode-list-tables))
+
+(defun sqlite-mode-list-tables ()
+  "Re-list the tables from the currently selected database."
+  (interactive nil sqlite-mode)
+  (let ((inhibit-read-only t)
+        (db sqlite--db)
+        (entries nil))
+    (erase-buffer)
+    (dolist (table (sqlite-select db "select name from sqlite_master where 
type = 'table' and name not like 'sqlite_%' order by name"))
+      (push (list (car table)
+                  (caar (sqlite-select db (format "select count(*) from %s"
+                                                  (car table)))))
+            entries))
+    (sqlite-mode--tablify '("Table Name" "Number of Rows")
+                          (nreverse entries)
+                          'table)
+    (goto-char (point-min))))
+
+(defun sqlite-mode--tablify (columns rows type &optional prefix)
+  (let ((widths
+         (mapcar
+          (lambda (i)
+            (1+ (seq-max (mapcar (lambda (row)
+                                   (length (format "%s" (nth i row))))
+                                 (cons columns rows)))))
+          (number-sequence 0 (1- (length columns))))))
+    (when prefix
+      (insert prefix))
+    (dotimes (i (length widths))
+      (insert (propertize (format (format "%%-%ds " (nth i widths))
+                                  (nth i columns))
+                          'face 'header-line)))
+    (insert "\n")
+    (dolist (row rows)
+      (let ((start (point)))
+        (when prefix
+          (insert prefix))
+        (dotimes (i (length widths))
+          (let ((elem (nth i row)))
+            (insert (format (format "%%%s%ds "
+                                    (if (numberp elem)
+                                        "" "-")
+                                    (nth i widths))
+                            (if (numberp elem)
+                                (nth i row)
+                              (string-replace "\n" " " (or elem "")))))))
+        (put-text-property start (point) 'sqlite--row row)
+        (put-text-property start (point) 'sqlite--type type)
+        (insert "\n")))))
+
+(defun sqlite-mode-list-columns ()
+  "List the columns of the table under point."
+  (interactive nil sqlite-mode)
+  (let ((row (get-text-property (point) 'sqlite--row)))
+    (unless row
+      (user-error "No table under point"))
+    (let ((columns (sqlite-mode--column-names (car row)))
+          (inhibit-read-only t))
+      (save-excursion
+        (forward-line 1)
+        (if (looking-at " ")
+            ;; Delete the info.
+            (delete-region (point) (if (re-search-forward "^[^ ]" nil t)
+                                       (match-beginning 0)
+                                     (point-max)))
+          ;; Insert the info.
+          (dolist (column columns)
+            (insert (format "  %s\n" column))))))))
+
+(defun sqlite-mode--column-names (table)
+  (let ((sql
+         (caar
+          (sqlite-select
+           sqlite--db
+           "select sql from sqlite_master where tbl_name = ? AND type = 
'table'"
+           (list table)))))
+    (mapcar
+     #'string-trim
+     (split-string (replace-regexp-in-string "^.*(\\|)$" "" sql) ","))))
+
+(defun sqlite-mode-list-data ()
+  "List the data from the table under point."
+  (interactive nil sqlite-mode)
+  (let ((row (and (eq (get-text-property (point) 'sqlite--type) 'table)
+                  (get-text-property (point) 'sqlite--row))))
+    (unless row
+      (user-error "No table under point"))
+    (let ((inhibit-read-only t))
+      (save-excursion
+        (forward-line 1)
+        (if (looking-at " ")
+            ;; Delete the info.
+            (delete-region (point) (if (re-search-forward "^[^ ]" nil t)
+                                       (match-beginning 0)
+                                     (point-max)))
+          (sqlite--mode--list-data (list (car row) 0)))))))
+
+(defun sqlite-mode--more-data (stmt)
+  (let ((inhibit-read-only t))
+    (beginning-of-line)
+    (delete-region (point) (progn (forward-line 1) (point)))
+    (sqlite--mode--list-data stmt)))
+
+(defun sqlite--mode--list-data (data)
+  (let* ((table (car data))
+         (rowid (cadr data))
+         stmt)
+    (unwind-protect
+        (progn
+          (setq stmt
+                (sqlite-select
+                 sqlite--db
+                 (format "select rowid, * from %s where rowid >= ?" table)
+                 (list rowid)
+                 'set))
+          (sqlite-mode--tablify (sqlite-columns stmt)
+                                (cl-loop for i from 0 upto 1000
+                                         for row = (sqlite-next stmt)
+                                         while row
+                                         do (setq rowid (car row))
+                                         collect row)
+                                (cons 'row table)
+                                "  ")
+          (when (sqlite-more-p stmt)
+            (insert (buttonize "  More data...\n" #'sqlite-mode--more-data
+                               (list table rowid)))))
+      (when stmt
+        (sqlite-finalize stmt)))))
+
+(defun sqlite-mode-delete ()
+  "Delete the row under point."
+  (interactive nil sqlite-mode)
+  (let ((table (get-text-property (point) 'sqlite--type))
+        (row (get-text-property (point) 'sqlite--row))
+        (inhibit-read-only t))
+    (when (or (not (consp table))
+              (not (eq (car table) 'row)))
+      (user-error "No row under point"))
+    (unless (yes-or-no-p "Really delete the row under point? ")
+      (user-error "Not deleting"))
+    (sqlite-execute
+     sqlite--db
+     (format "delete from %s where %s"
+             (cdr table)
+             (string-join
+              (mapcar (lambda (column)
+                        (format "%s = ?" (car (split-string column " "))))
+                      (cons "rowid" (sqlite-mode--column-names (cdr table))))
+              " and "))
+     row)
+    (delete-region (line-beginning-position) (progn (forward-line 1) 
(point)))))
+
+(provide 'sqlite-mode)
+
+;;; sqlite-mode.el ends here
diff --git a/test/lisp/emacs-lisp/rmc-tests.el b/lisp/sqlite.el
similarity index 53%
copy from test/lisp/emacs-lisp/rmc-tests.el
copy to lisp/sqlite.el
index 9d8f3d4801..6a8a53a699 100644
--- a/test/lisp/emacs-lisp/rmc-tests.el
+++ b/lisp/sqlite.el
@@ -1,9 +1,6 @@
-;;; rmc-tests.el --- Test suite for rmc.el  -*- lexical-binding: t -*-
+;;; sqlite.el --- Functions for interacting with sqlite3 databases  -*- 
lexical-binding: t; -*-
 
-;; Copyright (C) 2017-2021 Free Software Foundation, Inc.
-
-;; Author: Tino Calancha <tino.calancha@gmail.com>
-;; Keywords:
+;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -26,18 +23,21 @@
 
 ;;; Code:
 
-(require 'ert)
-(require 'rmc)
-(eval-when-compile (require 'cl-lib))
-
-
-(ert-deftest test-read-multiple-choice ()
-  (dolist (char '(?y ?n))
-    (cl-letf* (((symbol-function #'read-event) (lambda () char))
-               (str (if (eq char ?y) "yes" "no")))
-      (should (equal (list char str)
-                     (read-multiple-choice "Do it? " '((?y "yes") (?n 
"no"))))))))
-
-
-(provide 'rmc-tests)
-;;; rmc-tests.el ends here
+(defmacro with-sqlite-transaction (db &rest body)
+  "Execute BODY while holding a transaction for DB."
+  (declare (indent 1) (debug (form body)))
+  (let ((db-var (gensym))
+        (func-var (gensym)))
+    `(let ((,db-var ,db)
+           (,func-var (lambda () ,@body)))
+       (if (sqlite-available-p)
+           (unwind-protect
+               (progn
+                 (sqlite-transaction ,db-var)
+                 (funcall ,func-var))
+             (sqlite-commit ,db-var))
+         (funcall ,func-var)))))
+
+(provide 'sqlite)
+
+;;; sqlite.el ends here
diff --git a/lisp/startup.el b/lisp/startup.el
index fc085e6d0e..d90e7a7d26 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-2021 Free Software Foundation,
+;; Copyright (C) 1985-1986, 1992, 1994-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
@@ -519,6 +519,19 @@ DIRS are relative."
       xdg-dir)
      (t emacs-d-dir))))
 
+(defvar comp--delayed-sources)
+(defvar comp--loadable)
+(declare-function native--compile-async "comp.el"
+                  (files &optional recursively load selector))
+(defun startup--honor-delayed-native-compilations ()
+  "Honor pending delayed deferred native compilations."
+  (when (and (native-comp-available-p)
+             comp--delayed-sources)
+    (require 'comp)
+    (setq comp--loadable t)
+    (native--compile-async comp--delayed-sources nil 'late)
+    (setq comp--delayed-sources nil)))
+
 (defvar native-comp-eln-load-path)
 (defun normal-top-level ()
   "Emacs calls this function when it first starts up.
@@ -785,7 +798,8 @@ It is the default value of the variable `top-level'."
           (if (string-match "\\`DISPLAY=" varval)
               (setq display varval))))
       (when display
-        (delete display process-environment)))))
+        (delete display process-environment))))
+  (startup--honor-delayed-native-compilations))
 
 ;; Precompute the keyboard equivalents in the menu bar items.
 ;; Command-line options supported by tty's:
@@ -1042,6 +1056,9 @@ the `--debug-init' option to view a complete error 
backtrace."
     (when debug-on-error-should-be-set
       (setq debug-on-error debug-on-error-from-init-file))))
 
+(defvar lisp-directory nil
+  "Directory where Emacs's own *.el and *.elc Lisp files are installed.")
+
 (defun command-line ()
   "A subroutine of `normal-top-level'.
 Amongst another things, it parses the command-line arguments."
@@ -1073,8 +1090,7 @@ Amongst another things, it parses the command-line 
arguments."
   (let ((simple-file-name
         ;; Look for simple.el or simple.elc and use their directory
         ;; as the place where all Lisp files live.
-        (locate-file "simple" load-path (get-load-suffixes)))
-       lisp-dir)
+        (locate-file "simple" load-path (get-load-suffixes))))
     ;; Don't abort if simple.el cannot be found, but print a warning.
     ;; Although in most usage we are going to cryptically abort a moment
     ;; later anyway, due to missing required bidi data files (eg bug#13430).
@@ -1090,12 +1106,13 @@ please check its value")
          (unless (file-readable-p lispdir)
            (princ (format "Lisp directory %s not readable?" lispdir))
            (terpri)))
-      (setq lisp-dir (file-truename (file-name-directory simple-file-name)))
+      (setq lisp-directory
+            (file-truename (file-name-directory simple-file-name)))
       (setq load-history
            (mapcar (lambda (elt)
                      (if (and (stringp (car elt))
                               (not (file-name-absolute-p (car elt))))
-                         (cons (concat lisp-dir
+                         (cons (concat lisp-directory
                                        (car elt))
                                (cdr elt))
                        elt))
@@ -1556,17 +1573,22 @@ If this is nil, no message will be displayed."
   `((:face (variable-pitch font-lock-comment-face)
      "Welcome to "
      :link ("GNU Emacs"
-           ,(lambda (_button) (browse-url 
"https://www.gnu.org/software/emacs/";))
+           ,(lambda (_button)
+               (let ((browse-url-browser-function 'eww-browse-url))
+                 (browse-url "https://www.gnu.org/software/emacs/";)))
            "Browse https://www.gnu.org/software/emacs/";)
      ", one component of the "
      :link
      ,(lambda ()
        (if (eq system-type 'gnu/linux)
             `("GNU/Linux"
-              ,(lambda (_button) (browse-url 
"https://www.gnu.org/gnu/linux-and-gnu.html";))
+              ,(lambda (_button)
+                 (let ((browse-url-browser-function 'eww-browse-url))
+                   (browse-url "https://www.gnu.org/gnu/linux-and-gnu.html";)))
             "Browse https://www.gnu.org/gnu/linux-and-gnu.html";)
           `("GNU" ,(lambda (_button)
-                    (browse-url "https://www.gnu.org/gnu/thegnuproject.html";))
+                    (let ((browse-url-browser-function 'eww-browse-url))
+                       (browse-url 
"https://www.gnu.org/gnu/thegnuproject.html";)))
            "Browse https://www.gnu.org/gnu/thegnuproject.html";)))
      " operating system.\n\n"
      :face variable-pitch
@@ -1599,7 +1621,8 @@ If this is nil, no message will be displayed."
      "\n"
      :link ("Emacs Guided Tour"
            ,(lambda (_button)
-               (browse-url "https://www.gnu.org/software/emacs/tour/";))
+               (let ((browse-url-browser-function 'eww-browse-url))
+                 (browse-url "https://www.gnu.org/software/emacs/tour/";)))
            "Browse https://www.gnu.org/software/emacs/tour/";)
      "\tOverview of Emacs features at gnu.org\n"
      :link ("View Emacs Manual" ,(lambda (_button) (info-emacs-manual)))
@@ -1622,22 +1645,31 @@ Each element in the list should be a list of strings or 
pairs
   `((:face (variable-pitch font-lock-comment-face)
      "This is "
      :link ("GNU Emacs"
-           ,(lambda (_button) (browse-url 
"https://www.gnu.org/software/emacs/";))
+           ,(lambda (_button)
+               (let ((browse-url-browser-function 'eww-browse-url))
+                 (browse-url "https://www.gnu.org/software/emacs/";)))
            "Browse https://www.gnu.org/software/emacs/";)
-     ", one component of the "
+     ", a text editor and more.\nIt's a component of the "
      :link
      ,(lambda ()
        (if (eq system-type 'gnu/linux)
           `("GNU/Linux"
             ,(lambda (_button)
-                (browse-url "https://www.gnu.org/gnu/linux-and-gnu.html";))
+                (let ((browse-url-browser-function 'eww-browse-url))
+                  (browse-url "https://www.gnu.org/gnu/linux-and-gnu.html";)))
             "Browse https://www.gnu.org/gnu/linux-and-gnu.html";)
-        `("GNU" ,(lambda (_button) (describe-gnu-project))
+        `("GNU" ,(lambda (_button)
+                    (let ((browse-url-browser-function 'eww-browse-url))
+                      (describe-gnu-project)))
           "Display info on the GNU project.")))
      " operating system.\n"
      :face (variable-pitch font-lock-builtin-face)
      "\n"
-     ,(lambda () (emacs-version))
+     ,(lambda ()
+        (with-temp-buffer
+          (insert (emacs-version))
+          (fill-region (point-min) (point-max))
+          (buffer-string)))
      "\n"
      :face (variable-pitch (:height 0.8))
      ,(lambda () emacs-copyright)
@@ -1652,7 +1684,9 @@ Each element in the list should be a list of strings or 
pairs
            ,(lambda (_button) (info "(emacs)Contributing")))
      "\tHow to report bugs and contribute improvements to Emacs\n"
      "\n"
-     :link ("GNU and Freedom" ,(lambda (_button) (describe-gnu-project)))
+     :link ("GNU and Freedom" ,(lambda (_button)
+                                 (let ((browse-url-browser-function 
'eww-browse-url))
+                                   (describe-gnu-project))))
      "\tWhy we developed GNU Emacs, and the GNU operating system\n"
      :link ("Absence of Warranty" ,(lambda (_button) (describe-no-warranty)))
      "\tGNU Emacs comes with "
@@ -1690,7 +1724,8 @@ Each element in the list should be a list of strings or 
pairs
      "\n"
      :link ("Emacs Guided Tour"
            ,(lambda (_button)
-               (browse-url "https://www.gnu.org/software/emacs/tour/";))
+               (let ((browse-url-browser-function 'eww-browse-url))
+                 (browse-url "https://www.gnu.org/software/emacs/tour/";)))
            "Browse https://www.gnu.org/software/emacs/tour/";)
      "\tSee an overview of Emacs features at gnu.org\n"
      :link ("Emacs Manual" ,(lambda (_button) (info-emacs-manual)))
@@ -1812,7 +1847,9 @@ a face or button specification."
        (make-button (prog1 (point) (insert-image img)) (point)
                     'face 'default
                     'help-echo "mouse-2, RET: Browse https://www.gnu.org/";
-                    'action (lambda (_button) (browse-url 
"https://www.gnu.org/";))
+                    'action (lambda (_button)
+                               (let ((browse-url-browser-function 
'eww-browse-url))
+                                 (browse-url "https://www.gnu.org/";)))
                     'follow-link t)
        (insert "\n\n")))))
 
@@ -1821,18 +1858,22 @@ a face or button specification."
   (unless concise
     (fancy-splash-insert
      :face 'variable-pitch
-     "\nTo start...     "
+     "\nTo start...\t"
      :link `("Open a File"
             ,(lambda (_button) (call-interactively 'find-file))
             "Specify a new file's name, to edit the file")
-     "     "
+     "\t\t"
      :link `("Open Home Directory"
             ,(lambda (_button) (dired "~"))
             "Open your home directory, to operate on its files")
-     "     "
+     "\n\t"
      :link `("Customize Startup"
             ,(lambda (_button) (customize-group 'initialization))
             "Change initialization settings including this screen")
+     "\t"
+     :link `("Explore Packages"
+            ,(lambda (_button) (call-interactively 'package-list-packages))
+            "Explore, install and remove Emacs packages (requires Internet 
connection)")
      "\n"))
   (fancy-splash-insert
    :face 'variable-pitch "To quit a partially entered command, type "
@@ -1929,7 +1970,6 @@ splash screen in another window."
        (insert "\n")
        (fancy-startup-tail concise))
       (use-local-map splash-screen-keymap)
-      (setq-local browse-url-browser-function 'eww-browse-url)
       (setq tab-width 22
            buffer-read-only t)
       (set-buffer-modified-p nil)
@@ -1967,11 +2007,11 @@ splash screen in another window."
        (goto-char (point-min))
        (force-mode-line-update))
       (use-local-map splash-screen-keymap)
-      (setq-local browse-url-browser-function 'eww-browse-url)
       (setq tab-width 22)
       (setq buffer-read-only t)
+      ;; Place point somewhere it doesn't cover a character.
       (goto-char (point-min))
-      (forward-line 3))))
+      (re-search-forward "\n$" nil nil 2))))
 
 (defun fancy-splash-frame ()
   "Return the frame to use for the fancy splash screen.
@@ -1983,6 +2023,8 @@ we put it on this frame."
     ;; frame visible.
     (if (eq (window-system) 'w32)
        (sit-for 0 t))
+    (if (eq (window-system) 'pgtk)
+       (sit-for 0.1 t))
     (dolist (frame (append (frame-list) (list (selected-frame))))
       (if (and (frame-visible-p frame)
               (not (window-minibuffer-p (frame-selected-window frame))))
@@ -2252,7 +2294,9 @@ Type \\[describe-distribution] for information on "))
   (insert "\tHow to report bugs and contribute improvements to Emacs\n\n")
 
   (insert-button "GNU and Freedom"
-                'action (lambda (_button) (describe-gnu-project))
+                'action (lambda (_button)
+                           (let ((browse-url-browser-function 'eww-browse-url))
+                             (describe-gnu-project)))
                 'follow-link t)
   (insert "\t\tWhy we developed GNU Emacs and the GNU system\n")
 
diff --git a/lisp/strokes.el b/lisp/strokes.el
index 91ddefd373..dc242d8f33 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2000-2022 Free Software Foundation, Inc.
 
 ;; Author: David Bakhash <cadet@alum.mit.edu>
 ;; Maintainer: emacs-devel@gnu.org
@@ -1395,14 +1395,19 @@ Encode/decode your strokes with 
\\[strokes-encode-buffer],
              (strokes-load-user-strokes))
         (add-hook 'kill-emacs-query-functions
                   #'strokes-prompt-user-save-strokes)
-        (add-hook 'select-frame-hook
-                  #'strokes-update-window-configuration)
+         ;; FIXME: Should this be something like `focus-in-hook'?
+         ;; That variable is obsolete, but `select-frame-hook' has
+         ;; never existed in Emacs.
+         ;;(add-hook 'select-frame-hook
+         ;;          #'strokes-update-window-configuration)
         (strokes-update-window-configuration))
        (t                              ; turn off strokes
         (if (get-buffer strokes-buffer-name)
-            (kill-buffer (get-buffer strokes-buffer-name)))
-        (remove-hook 'select-frame-hook
-                     #'strokes-update-window-configuration))))
+             (kill-buffer (get-buffer strokes-buffer-name)))
+         ;; FIXME: Same as above.
+         ;;(remove-hook 'select-frame-hook
+         ;;             #'strokes-update-window-configuration)
+         )))
 
 
 ;;;; strokes-xpm stuff (later may be separate)...
diff --git a/lisp/subr.el b/lisp/subr.el
index 06ea503da6..7906324f80 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-2021 Free Software
+;; Copyright (C) 1985-1986, 1992, 1994-1995, 1999-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
@@ -61,7 +61,8 @@ must be the first non-whitespace on a line.
 For more information, see Info node `(elisp)Declaring Functions'."
   (declare (advertised-calling-convention
            (fn file &optional arglist fileonly) nil))
-  ;; Does nothing - byte-compile-declare-function does the work.
+  ;; Does nothing - `byte-compile-macroexpand-declare-function' does
+  ;; the work.
   nil)
 
 
@@ -4056,7 +4057,7 @@ BUFFER is the buffer (or buffer name) to associate with 
the process.
  Process output goes at end of that buffer, unless you specify
  an output stream or filter function to handle the output.
  BUFFER may be also nil, meaning that this process is not associated
- with any buffer
+ with any buffer.
 COMMAND is the shell command to run."
   ;; We used to use `exec' to replace the shell with the command,
   ;; but that failed to handle (...) and semicolon, etc.
@@ -6525,116 +6526,6 @@ not a list, return a one-element list containing 
OBJECT."
       object
     (list object)))
 
-(defun define-keymap (&rest definitions)
-  "Create a new keymap and define KEY/DEFEFINITION pairs as key sequences.
-The new keymap is returned.
-
-Options can be given as keywords before the KEY/DEFEFINITION
-pairs.  Available keywords are:
-
-:full      If non-nil, create a chartable alist (see `make-keymap').
-             If nil (i.e., the default), create a sparse keymap (see
-             `make-sparse-keymap').
-
-:suppress  If non-nil, the keymap will be suppressed (see `suppress-keymap').
-             If `nodigits', treat digits like other chars.
-
-:parent    If non-nil, this should be a keymap to use as the parent
-             (see `set-keymap-parent').
-
-:keymap    If non-nil, instead of creating a new keymap, the given keymap
-             will be destructively modified instead.
-
-:name      If non-nil, this should be a string to use as the menu for
-             the keymap in case you use it as a menu with `x-popup-menu'.
-
-:prefix    If non-nil, this should be a symbol to be used as a prefix
-             command (see `define-prefix-command').  If this is the case,
-             this symbol is returned instead of the map itself.
-
-KEY/DEFINITION pairs are as KEY and DEF in `keymap-set'.  KEY can
-also be the special symbol `:menu', in which case DEFINITION
-should be a MENU form as accepted by `easy-menu-define'.
-
-\(fn &key FULL PARENT SUPPRESS NAME PREFIX KEYMAP &rest [KEY DEFINITION]...)"
-  (declare (indent defun))
-  (define-keymap--define definitions))
-
-(defun define-keymap--define (definitions)
-  (let (full suppress parent name prefix keymap)
-    ;; Handle keywords.
-    (while (and definitions
-                (keywordp (car definitions))
-                (not (eq (car definitions) :menu)))
-      (let ((keyword (pop definitions)))
-        (unless definitions
-          (error "Missing keyword value for %s" keyword))
-        (let ((value (pop definitions)))
-          (pcase keyword
-            (:full (setq full value))
-            (:keymap (setq keymap value))
-            (:parent (setq parent value))
-            (:suppress (setq suppress value))
-            (:name (setq name value))
-            (:prefix (setq prefix value))
-            (_ (error "Invalid keyword: %s" keyword))))))
-
-    (when (and prefix
-               (or full parent suppress keymap))
-      (error "A prefix keymap can't be defined with 
:full/:parent/:suppress/:keymap keywords"))
-
-    (when (and keymap full)
-      (error "Invalid combination: :keymap with :full"))
-
-    (let ((keymap (cond
-                   (keymap keymap)
-                   (prefix (define-prefix-command prefix nil name))
-                   (full (make-keymap name))
-                   (t (make-sparse-keymap name)))))
-      (when suppress
-        (suppress-keymap keymap (eq suppress 'nodigits)))
-      (when parent
-        (set-keymap-parent keymap parent))
-
-      ;; Do the bindings.
-      (while definitions
-        (let ((key (pop definitions)))
-          (unless definitions
-            (error "Uneven number of key/definition pairs"))
-          (let ((def (pop definitions)))
-            (if (eq key :menu)
-                (easy-menu-define nil keymap "" def)
-              (keymap-set keymap key def)))))
-      keymap)))
-
-(defmacro defvar-keymap (variable-name &rest defs)
-  "Define VARIABLE-NAME as a variable with a keymap definition.
-See `define-keymap' for an explanation of the keywords and KEY/DEFINITION.
-
-In addition to the keywords accepted by `define-keymap', this
-macro also accepts a `:doc' keyword, which (if present) is used
-as the variable documentation string.
-
-\(fn VARIABLE-NAME &key DOC FULL PARENT SUPPRESS NAME PREFIX KEYMAP &rest [KEY 
DEFINITION]...)"
-  (declare (indent 1))
-  (let ((opts nil)
-        doc)
-    (while (and defs
-                (keywordp (car defs))
-                (not (eq (car defs) :menu)))
-      (let ((keyword (pop defs)))
-        (unless defs
-          (error "Uneven number of keywords"))
-        (if (eq keyword :doc)
-            (setq doc (pop defs))
-          (push keyword opts)
-          (push (pop defs) opts))))
-    (unless (zerop (% (length defs) 2))
-      (error "Uneven number of key/definition pairs: %s" defs))
-    `(defvar ,variable-name
-       (define-keymap--define (list ,@(nreverse opts) ,@defs))
-       ,@(and doc (list doc)))))
-
 (defmacro with-delayed-message (args &rest body)
   "Like `progn', but display MESSAGE if BODY takes longer than TIMEOUT seconds.
 The MESSAGE form will be evaluated immediately, but the resulting
diff --git a/lisp/svg.el b/lisp/svg.el
index 3c7f055031..3c97b4a46b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2022 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 e9de31f50d..cdfc30c879 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-2021 Free Software Foundation,
+;; Copyright (C) 1994-1995, 1998, 2006-2022 Free Software Foundation,
 ;; Inc.
 
 ;; This file is part of GNU Emacs.
diff --git a/lisp/tab-bar.el b/lisp/tab-bar.el
index 656cb878e3..d49fc2efea 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
 
 ;; Author: Juri Linkov <juri@linkov.net>
 ;; Keywords: frames tabs
@@ -1178,7 +1178,7 @@ which means the last tab on the tab bar.  For example, 
`C-u 2
 <MODIFIER>-9' selects the tab before the last tab."
   (interactive "p")
   (tab-bar-select-tab (- (length (funcall tab-bar-tabs-function))
-                         (1- (or arg 1)))))
+                         (1- (abs (or arg 1))))))
 
 (defun tab-bar-switch-to-recent-tab (&optional arg)
   "Switch to ARGth most recently visited tab.
@@ -1586,18 +1586,17 @@ happens interactively)."
   (let* ((tabs (funcall tab-bar-tabs-function))
          (current-index (tab-bar--current-tab-index tabs))
          (keep-index (if (integerp tab-number)
-                         (1- (max 0 (min tab-number (length tabs))))
+                         (1- (max 1 (min tab-number (length tabs))))
                        current-index))
-         (keep-tab (nth keep-index tabs))
          (index 0))
 
-    (when keep-tab
+    (when (nth keep-index tabs)
       (unless (eq keep-index current-index)
         (tab-bar-select-tab (1+ keep-index))
         (setq tabs (funcall tab-bar-tabs-function)))
 
       (dolist (tab tabs)
-        (unless (or (eq tab keep-tab)
+        (unless (or (eq index keep-index)
                     (run-hook-with-args-until-success
                      'tab-bar-tab-prevent-close-functions tab
                      ;; `last-tab-p' logically can't ever be true
@@ -1885,6 +1884,10 @@ This navigates forward in the history of window 
configurations."
             (goto-char wc-point)))
       (message "No more tab forward history"))))
 
+(defvar-keymap tab-bar-history-mode-map
+  "C-c <left>"  #'tab-bar-history-back
+  "C-c <right>" #'tab-bar-history-forward)
+
 (define-minor-mode tab-bar-history-mode
   "Toggle tab history mode for the tab bar.
 Tab history mode remembers window configurations used in every tab,
diff --git a/lisp/tab-line.el b/lisp/tab-line.el
index af0647acf7..1c1217cdf6 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
 
 ;; Author: Juri Linkov <juri@linkov.net>
 ;; Keywords: windows tabs
@@ -495,6 +495,8 @@ which the tab will represent."
     (apply 'propertize
            (concat (propertize name
                                'keymap tab-line-tab-map
+                               'help-echo (if selected-p "Current tab"
+                                            "Click to select tab")
                                ;; Don't turn mouse-1 into mouse-2 (bug#49247)
                                'follow-link 'ignore)
                    (or (and (or buffer-p (assq 'buffer tab) (assq 'close tab))
@@ -615,6 +617,12 @@ the selected tab visible."
 
 (defvar tab-line-auto-hscroll-buffer (generate-new-buffer " 
*tab-line-hscroll*"))
 
+(defun tab-line--get-tab-property (prop string)
+  (or (get-pos-property 1 prop string) ;; for most cases of 1-char separator
+      (get-pos-property 0 prop string) ;; for empty separator
+      (let ((pos (next-single-property-change 0 prop string))) ;; long 
separator
+        (and pos (get-pos-property pos prop string)))))
+
 (defun tab-line-auto-hscroll (strings hscroll)
   (with-current-buffer tab-line-auto-hscroll-buffer
     (let ((truncate-partial-width-windows nil)
@@ -636,7 +644,7 @@ the selected tab visible."
                  (not (integerp hscroll)))
         (let ((selected (seq-position strings 'selected
                                       (lambda (str prop)
-                                        (get-pos-property 1 prop str)))))
+                                        (tab-line--get-tab-property prop 
str)))))
           (cond
            ((null selected)
             ;; Do nothing if no tab is selected
@@ -656,7 +664,7 @@ the selected tab visible."
                        (new-hscroll (when tab-prop
                                       (seq-position strings tab-prop
                                                     (lambda (str tab)
-                                                      (eq (get-pos-property 1 
'tab str) tab))))))
+                                                      (eq 
(tab-line--get-tab-property 'tab str) tab))))))
                   (when new-hscroll
                     (setq hscroll (float new-hscroll))
                     (set-window-parameter nil 'tab-line-hscroll hscroll)))
@@ -683,7 +691,7 @@ the selected tab visible."
                        (new-hscroll (when tab-prop
                                       (seq-position strings tab-prop
                                                     (lambda (str tab)
-                                                      (eq (get-pos-property 1 
'tab str) tab))))))
+                                                      (eq 
(tab-line--get-tab-property 'tab str) tab))))))
                   (when new-hscroll
                     (setq hscroll (float new-hscroll))
                     (set-window-parameter nil 'tab-line-hscroll 
hscroll)))))))))
@@ -742,7 +750,7 @@ So, for example, switching to a previous tab is equivalent 
to
 using the `previous-buffer' command."
   (interactive "e")
   (let* ((posnp (event-start event))
-         (tab (get-pos-property 1 'tab (car (posn-string posnp))))
+         (tab (tab-line--get-tab-property 'tab (car (posn-string posnp))))
          (buffer (if (bufferp tab) tab (cdr (assq 'buffer tab)))))
     (if buffer
         (tab-line-select-tab-buffer buffer (posn-window posnp))
@@ -858,7 +866,7 @@ sight of the tab line."
   (interactive (list last-nonmenu-event))
   (let* ((posnp (and (listp event) (event-start event)))
          (window (and posnp (posn-window posnp)))
-         (tab (get-pos-property 1 'tab (car (posn-string posnp))))
+         (tab (tab-line--get-tab-property 'tab (car (posn-string posnp))))
          (buffer (if (bufferp tab) tab (cdr (assq 'buffer tab))))
          (close-function (unless (bufferp tab) (cdr (assq 'close tab)))))
     (with-selected-window (or window (selected-window))
diff --git a/lisp/tabify.el b/lisp/tabify.el
index f7360313fc..61d5fe5131 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1994, 2001-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Package: emacs
diff --git a/lisp/talk.el b/lisp/talk.el
index 56d36dd8df..9ed6540d83 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2001-2022 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 db655619be..ed48b56842 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1990-1991, 1993-2022 Free Software Foundation, Inc.
 
 ;; Author: Jamie Zawinski <jwz@lucid.com>
 ;; Maintainer: emacs-devel@gnu.org
@@ -467,8 +467,8 @@ checksum before doing the check."
 
 (defun tar-clip-time-string (time)
   (declare (obsolete format-time-string "27.1"))
-  (let ((str (current-time-string time)))
-    (concat " " (substring str 4 16) (format-time-string " %Y" time))))
+  (let ((system-time-locale "C"))
+    (format-time-string " %b %e %H:%M %Y" time)))
 
 (defun tar-grind-file-mode (mode)
   "Construct a `rw-r--r--' string indicating MODE.
diff --git a/lisp/tempo.el b/lisp/tempo.el
index b722cc04ca..6da7e82d7c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1995, 2001-2022 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 698bef08b2..895dfbed6c 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-2021 Free Software
+;; Copyright (C) 1988, 1990, 1992, 1994-1995, 2001-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Per Bothner <per@bothner.com>
@@ -1532,7 +1532,7 @@ commands to use in that buffer.
                                             shell-file-name))))
   (set-buffer (make-term "terminal" program))
   (term-char-mode)
-  (switch-to-buffer "*terminal*"))
+  (pop-to-buffer-same-window "*terminal*"))
 
 (defun term-exec (buffer name command startfile switches)
   "Start up a process in buffer for term modes.
@@ -3300,13 +3300,16 @@ Called as a buffer-local `post-command-hook' function in
 `term-char-mode' to prevent commands from putting the buffer into
 an inconsistent state by unexpectedly moving point.
 
-Mouse events are ignored so that mouse selection is unimpeded.
+Mouse and wheel events are ignored so that mouse selection and
+mouse wheel scrolling are unimpeded.
 
 Only acts when the pre-command position of point was equal to the
 process mark, and the `term-char-mode-point-at-process-mark'
 option is enabled.  See `term-set-goto-process-mark'."
   (when term-goto-process-mark
-    (unless (mouse-event-p last-command-event)
+    (unless (or (mouse-event-p last-command-event)
+                (memq (event-basic-type last-command-event)
+                      '(wheel-down wheel-up)))
       (goto-char (term-process-mark)))))
 
 (defun term-process-mark ()
diff --git a/lisp/term/AT386.el b/lisp/term/AT386.el
index 3bedde503f..3169f712bc 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 2001-2022 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 9e986bd8bc..ff3c1de635 100644
--- a/lisp/term/README
+++ b/lisp/term/README
@@ -1,4 +1,4 @@
-Copyright (C) 1993, 2001-2021 Free Software Foundation, Inc.
+Copyright (C) 1993, 2001-2022 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 8ae58718e3..7a48fc04c6 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2001-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: terminals
diff --git a/lisp/term/haiku-win.el b/lisp/term/haiku-win.el
index 7861cfb900..ff9402c4ac 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -36,7 +36,7 @@
 (require 'fontset)
 (require 'dnd)
 
-(add-to-list 'display-format-alist '(".*" . haiku-win))
+(add-to-list 'display-format-alist '(".*" . haiku))
 
 ;;;; Command line argument handling.
 
@@ -49,6 +49,7 @@
 (declare-function x-handle-args "common-win")
 (declare-function haiku-selection-data "haikuselect.c")
 (declare-function haiku-selection-put "haikuselect.c")
+(declare-function haiku-selection-targets "haikuselect.c")
 (declare-function haiku-put-resource "haikufns.c")
 
 (defun haiku--handle-x-command-line-resources (command-line-resources)
@@ -110,14 +111,17 @@ If TYPE is nil, return \"text/plain\"."
 
 (declare-function haiku-read-file-name "haikufns.c")
 
-(defun x-file-dialog (prompt dir default_filename mustmatch only_dir_p)
+(defun x-file-dialog (prompt dir &optional default-filename mustmatch 
only-dir-p)
   "SKIP: real doc in xfns.c."
   (if (eq (framep-on-display (selected-frame)) 'haiku)
-      (haiku-read-file-name prompt (selected-frame)
-                            (or dir (and default_filename
-                                         (file-name-directory 
default_filename)))
-                            mustmatch only_dir_p
-                            (file-name-nondirectory default_filename))
+      (haiku-read-file-name (if (not (string-suffix-p ": " prompt))
+                                prompt
+                              (substring prompt 0 (- (length prompt) 2)))
+                            (selected-frame)
+                            (or dir (and default-filename
+                                         (file-name-directory 
default-filename)))
+                            mustmatch only-dir-p
+                            (file-name-nondirectory default-filename))
     (error "x-file-dialog on a tty frame")))
 
 (defun haiku-dnd-handle-drag-n-drop-event (event)
diff --git a/lisp/term/internal.el b/lisp/term/internal.el
index fd75ded081..141adbf853 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-2021 Free Software
+;; Copyright (C) 1993-1994, 1998-1999, 2001-2022 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 e5b94eab76..1daaa60400 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Dan Nicolaescu <dann@ics.uci.edu>
 
diff --git a/lisp/term/konsole.el b/lisp/term/konsole.el
index 1f65a46011..44ef8b9fac 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
 
 (require 'term/xterm)
 
diff --git a/lisp/term/news.el b/lisp/term/news.el
index 40aa58ef1c..3e896b3dd6 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1989, 1993, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: FSF
 ;; Keywords: terminals
diff --git a/lisp/term/ns-win.el b/lisp/term/ns-win.el
index 67a417c116..da6c5adee2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2005-2022 Free Software Foundation, Inc.
 
 ;; Authors: Carl Edman
 ;;     Christian Limpach
diff --git a/lisp/term/pc-win.el b/lisp/term/pc-win.el
index 9e7b360b9c..327d51f275 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-2021 Free Software
+;; Copyright (C) 1994, 1996-1997, 1999, 2001-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Morten Welinder <terra@diku.dk>
diff --git a/lisp/term/pgtk-win.el b/lisp/term/pgtk-win.el
new file mode 100644
index 0000000000..9bcf3eac64
--- /dev/null
+++ b/lisp/term/pgtk-win.el
@@ -0,0 +1,516 @@
+;;; xterm.el --- define function key sequences and standard colors for xterm  
-*- lexical-binding: t -*-
+
+;; Copyright (C) 1995, 2001-2020, 2022 Free Software Foundation, Inc.
+
+;; Author: FSF
+;; Keywords: terminals
+
+;; 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:
+(eval-when-compile (require 'cl-lib))
+(or (featurep 'pgtk)
+    (error "%s: Loading pgtk-win.el but not compiled for pure Gtk+-3."
+           invocation-name))
+
+;; Documentation-purposes only: actually loaded in loadup.el.
+(require 'term/common-win)
+(require 'frame)
+(require 'mouse)
+(require 'scroll-bar)
+(require 'faces)
+(require 'menu-bar)
+(require 'fontset)
+(require 'dnd)
+
+(defgroup pgtk nil
+  "Pure-GTK specific features."
+  :group 'environment)
+
+;;;; Command line argument handling.
+
+(defvar x-invocation-args)
+;; Set in term/common-win.el; currently unused by Gtk's x-open-connection.
+(defvar x-command-line-resources)
+
+;; pgtkterm.c.
+(defvar pgtk-input-file)
+
+(declare-function pgtk-use-im-context "pgtkim.c")
+(defvar pgtk-use-im-context-on-new-connection)
+
+(defun pgtk-handle-nxopen (_switch &optional temp)
+  (setq unread-command-events (append unread-command-events
+                                      (if temp '(pgtk-open-temp-file)
+                                        '(pgtk-open-file)))
+        pgtk-input-file (append pgtk-input-file (list (pop 
x-invocation-args)))))
+
+(defun pgtk-handle-nxopentemp (switch)
+  (pgtk-handle-nxopen switch t))
+
+(defun pgtk-ignore-1-arg (_switch)
+  (setq x-invocation-args (cdr x-invocation-args)))
+
+;;;; File handling.
+
+(declare-function pgtk-hide-emacs "pgtkfns.c" (on))
+
+
+(defun pgtk-drag-n-drop (event &optional new-frame force-text)
+  "Edit the files listed in the drag-n-drop EVENT.
+Switch to a buffer editing the last file dropped."
+  (interactive "e")
+  (let* ((window (posn-window (event-start event)))
+         (arg (car (cdr (cdr event))))
+         (type (car arg))
+         (data (car (cdr arg)))
+         (url-or-string (cond ((eq type 'file)
+                               (concat "file:" data))
+                              (t data))))
+    (set-frame-selected-window nil window)
+    (when new-frame
+      (select-frame (make-frame)))
+    (raise-frame)
+    (setq window (selected-window))
+    (if force-text
+        (dnd-insert-text window 'private data)
+      (dnd-handle-one-url window 'private url-or-string))))
+
+
+(defun pgtk-drag-n-drop-other-frame (event)
+  "Edit the files listed in the drag-n-drop EVENT, in other frames.
+May create new frames, or reuse existing ones.  The frame editing
+the last file dropped is selected."
+  (interactive "e")
+  (pgtk-drag-n-drop event t))
+
+(defun pgtk-drag-n-drop-as-text (event)
+  "Drop the data in EVENT as text."
+  (interactive "e")
+  (pgtk-drag-n-drop event nil t))
+
+(defun pgtk-drag-n-drop-as-text-other-frame (event)
+  "Drop the data in EVENT as text in a new frame."
+  (interactive "e")
+  (pgtk-drag-n-drop event t t))
+
+(global-set-key [drag-n-drop] 'pgtk-drag-n-drop)
+(global-set-key [C-drag-n-drop] 'pgtk-drag-n-drop-other-frame)
+(global-set-key [M-drag-n-drop] 'pgtk-drag-n-drop-as-text)
+(global-set-key [C-M-drag-n-drop] 'pgtk-drag-n-drop-as-text-other-frame)
+
+;;;; Frame-related functions.
+
+;; pgtkterm.c
+(defvar pgtk-alternate-modifier)
+(defvar pgtk-right-alternate-modifier)
+(defvar pgtk-right-command-modifier)
+(defvar pgtk-right-control-modifier)
+
+;; You say tomAYto, I say tomAHto..
+(with-no-warnings
+  (defvaralias 'pgtk-option-modifier 'pgtk-alternate-modifier)
+  (defvaralias 'pgtk-right-option-modifier 'pgtk-right-alternate-modifier))
+
+(defun pgtk-do-hide-emacs ()
+  (interactive)
+  (pgtk-hide-emacs t))
+
+(declare-function pgtk-hide-others "pgtkfns.c" ())
+
+(defun pgtk-do-hide-others ()
+  (interactive)
+  (pgtk-hide-others))
+
+(declare-function pgtk-emacs-info-panel "pgtkfns.c" ())
+
+(defun pgtk-do-emacs-info-panel ()
+  (interactive)
+  (pgtk-emacs-info-panel))
+
+(defun pgtk-next-frame ()
+  "Switch to next visible frame."
+  (interactive)
+  (other-frame 1))
+
+(defun pgtk-prev-frame ()
+  "Switch to previous visible frame."
+  (interactive)
+  (other-frame -1))
+
+;; Frame will be focused anyway, so select it
+;; (if this is not done, mode line is dimmed until first interaction)
+;; FIXME: Sounds like we're working around a bug in the underlying code.
+(add-hook 'after-make-frame-functions 'select-frame)
+
+(defvar tool-bar-mode)
+(declare-function tool-bar-mode "tool-bar" (&optional arg))
+
+;; Based on a function by David Reitter <dreitter@inf.ed.ac.uk> ;
+;; see https://lists.gnu.org/archive/html/emacs-devel/2005-09/msg00681.html .
+(defun pgtk-toggle-toolbar (&optional frame)
+  "Switches the tool bar on and off in frame FRAME.
+ If FRAME is nil, the change applies to the selected frame."
+  (interactive)
+  (modify-frame-parameters
+   frame (list (cons 'tool-bar-lines
+                      (if (> (or (frame-parameter frame 'tool-bar-lines) 0) 0)
+                                  0 1)) ))
+  (if (not tool-bar-mode) (tool-bar-mode t)))
+
+
+;;;; Dialog-related functions.
+
+;; Ask user for confirm before printing.  Due to Kevin Rodgers.
+(defun pgtk-print-buffer ()
+  "Interactive front-end to `print-buffer': asks for user confirmation first."
+  (interactive)
+  (if (and (called-interactively-p 'interactive)
+           (or (listp last-nonmenu-event)
+               (and (char-or-string-p (event-basic-type last-command-event))
+                    (memq 'super (event-modifiers last-command-event)))))
+      (let ((last-nonmenu-event (if (listp last-nonmenu-event)
+                                    last-nonmenu-event
+                                  ;; Fake it:
+                                  `(mouse-1 POSITION 1))))
+        (if (y-or-n-p (format "Print buffer %s? " (buffer-name)))
+            (print-buffer)
+         (error "Canceled")))
+    (print-buffer)))
+
+;;;; Font support.
+
+;; Needed for font listing functions under both backend and normal
+(setq scalable-fonts-allowed t)
+
+;; Default fontset.  This is mainly here to show how a fontset
+;; can be set up manually.  Ordinarily, fontsets are auto-created whenever
+;; a font is chosen by
+(defvar pgtk-standard-fontset-spec
+  ;; Only some code supports this so far, so use uglier XLFD version
+  ;; "-pgtk-*-*-*-*-*-10-*-*-*-*-*-fontset-standard,latin:Courier,han:Kai"
+  (mapconcat 'identity
+             '("-*-Monospace-*-*-*-*-10-*-*-*-*-*-fontset-standard"
+               "latin:-*-Courier-*-*-*-*-10-*-*-*-*-*-iso10646-1")
+             ",")
+  "String of fontset spec of the standard fontset.
+This defines a fontset consisting of the Courier and other fonts.
+See the documentation of `create-fontset-from-fontset-spec' for the format.")
+
+
+;;;; Pasteboard support.
+
+(define-obsolete-function-alias 'pgtk-store-cut-buffer-internal
+  'gui-set-selection "24.1")
+
+
+(defun pgtk-copy-including-secondary ()
+  (interactive)
+  (call-interactively 'kill-ring-save)
+  (gui-set-selection 'SECONDARY (buffer-substring (point) (mark t))))
+
+(defun pgtk-paste-secondary ()
+  (interactive)
+  (insert (gui-get-selection 'SECONDARY)))
+
+
+(defun pgtk-suspend-error ()
+  ;; Don't allow suspending if any of the frames are PGTK frames.
+  (if (memq 'pgtk (mapcar 'window-system (frame-list)))
+      (error "Cannot suspend Emacs while a PGTK GUI frame exists")))
+
+
+
+(defvar pgtk-initialized nil
+  "Non-nil if pure-GTK windowing has been initialized.")
+
+(declare-function x-handle-args "common-win" (args))
+(declare-function x-open-connection "pgtkfns.c"
+                  (display &optional xrm-string must-succeed))
+(declare-function pgtk-set-resource "pgtkfns.c" (owner name value))
+
+;; Do the actual pure-GTK Windows setup here; the above code just
+;; defines functions and variables that we use now.
+(cl-defmethod window-system-initialization (&context (window-system pgtk)
+                                            &optional display)
+  "Initialize Emacs for pure-GTK windowing."
+  (cl-assert (not pgtk-initialized))
+
+  ;; PENDING: not needed?
+  (setq command-line-args (x-handle-args command-line-args))
+
+  ;; Make sure we have a valid resource name.
+  (or (stringp x-resource-name)
+      (let (i)
+       (setq x-resource-name (copy-sequence invocation-name))
+
+       ;; Change any . or * characters in x-resource-name to hyphens,
+       ;; so as not to choke when we use it in X resource queries.
+       (while (setq i (string-match "[.*]" x-resource-name))
+         (aset x-resource-name i ?-))))
+
+  ;; Setup the default fontset.
+  (create-default-fontset)
+  ;; Create the standard fontset.
+  (condition-case err
+      (create-fontset-from-fontset-spec pgtk-standard-fontset-spec t)
+    (error (display-warning
+            'initialization
+            (format "Creation of the standard fontset failed: %s" err)
+            :error)))
+
+  (x-open-connection (or display
+                         x-display-name)
+                    x-command-line-resources
+                    ;; Exit Emacs with fatal error if this fails and we
+                    ;; are the initial display.
+                     (= (length (frame-list)) 0))
+
+  (x-apply-session-resources)
+
+  ;; Don't let Emacs suspend under PGTK.
+  (add-hook 'suspend-hook 'pgtk-suspend-error)
+
+  (setq pgtk-initialized t))
+
+;; Any display name is OK.
+(add-to-list 'display-format-alist '(".*" . pgtk))
+(cl-defmethod handle-args-function (args &context (window-system pgtk))
+  (x-handle-args args))
+
+(cl-defmethod frame-creation-function (params &context (window-system pgtk))
+  (x-create-frame-with-faces params))
+
+(declare-function pgtk-own-selection-internal "pgtkselect.c" (selection value 
&optional frame))
+(declare-function pgtk-disown-selection-internal "pgtkselect.c" (selection 
&optional time_object terminal))
+(declare-function pgtk-selection-owner-p "pgtkselect.c" (&optional selection 
terminal))
+(declare-function pgtk-selection-exists-p "pgtkselect.c" (&optional selection 
terminal))
+(declare-function pgtk-get-selection-internal "pgtkselect.c" (selection-symbol 
target-type &optional time_stamp terminal))
+
+(cl-defmethod gui-backend-set-selection (selection value
+                                         &context (window-system pgtk))
+  (if value (pgtk-own-selection-internal selection value)
+    (pgtk-disown-selection-internal selection)))
+
+(cl-defmethod gui-backend-selection-owner-p (selection
+                                             &context (window-system pgtk))
+  (pgtk-selection-owner-p selection))
+
+(cl-defmethod gui-backend-selection-exists-p (selection
+                                              &context (window-system pgtk))
+  (pgtk-selection-exists-p selection))
+
+(cl-defmethod gui-backend-get-selection (selection-symbol target-type
+                                         &context (window-system pgtk))
+  (pgtk-get-selection-internal selection-symbol target-type))
+
+
+(defvar pgtk-preedit-overlay nil)
+
+(defun pgtk-preedit-text (event)
+  "An internal function to display preedit text from input method.
+
+EVENT is a `preedit-text-event'."
+  (interactive "e")
+  (when pgtk-preedit-overlay
+    (delete-overlay pgtk-preedit-overlay))
+  (setq pgtk-preedit-overlay nil)
+
+  (let ((ovstr "")
+        (idx 0)
+        atts ov str color face-name)
+    (dolist (part (nth 1 event))
+      (setq str (car part))
+      (setq face-name (intern (format "pgtk-im-%d" idx)))
+      (eval
+       `(defface ,face-name nil "face of input method preedit"))
+      (setq atts nil)
+      (when (setq color (cdr-safe (assq 'fg (cdr part))))
+        (setq atts (append atts `(:foreground ,color))))
+      (when (setq color (cdr-safe (assq 'bg (cdr part))))
+        (setq atts (append atts `(:background ,color))))
+      (when (setq color (cdr-safe (assq 'ul (cdr part))))
+        (setq atts (append atts `(:underline ,color))))
+      (face-spec-set face-name `((t . ,atts)))
+      (add-text-properties 0 (length str) `(face ,face-name) str)
+      (setq ovstr (concat ovstr str))
+      (setq idx (1+ idx)))
+
+    (setq ov (make-overlay (point) (point)))
+    (overlay-put ov 'before-string ovstr)
+    (setq pgtk-preedit-overlay ov)))
+
+(define-key special-event-map [preedit-text] 'pgtk-preedit-text)
+
+(add-hook 'after-init-hook
+          (function
+           (lambda ()
+             (when (eq window-system 'pgtk)
+               (pgtk-use-im-context pgtk-use-im-context-on-new-connection)))))
+
+
+;;;
+
+(defcustom x-gtk-stock-map
+  (mapcar (lambda (arg)
+           (cons (purecopy (car arg)) (purecopy (cdr arg))))
+  '(
+    ("etc/images/new" . ("document-new" "gtk-new"))
+    ("etc/images/open" . ("document-open" "gtk-open"))
+    ("etc/images/diropen" . "n:system-file-manager")
+    ("etc/images/close" . ("window-close" "gtk-close"))
+    ("etc/images/save" . ("document-save" "gtk-save"))
+    ("etc/images/saveas" . ("document-save-as" "gtk-save-as"))
+    ("etc/images/undo" . ("edit-undo" "gtk-undo"))
+    ("etc/images/cut" . ("edit-cut" "gtk-cut"))
+    ("etc/images/copy" . ("edit-copy" "gtk-copy"))
+    ("etc/images/paste" . ("edit-paste" "gtk-paste"))
+    ("etc/images/search" . ("edit-find" "gtk-find"))
+    ("etc/images/print" . ("document-print" "gtk-print"))
+    ("etc/images/preferences" . ("preferences-system" "gtk-preferences"))
+    ("etc/images/help" . ("help-browser" "gtk-help"))
+    ("etc/images/left-arrow" . ("go-previous" "gtk-go-back"))
+    ("etc/images/right-arrow" . ("go-next" "gtk-go-forward"))
+    ("etc/images/home" . ("go-home" "gtk-home"))
+    ("etc/images/jump-to" . ("go-jump" "gtk-jump-to"))
+    ("etc/images/index" . ("gtk-search" "gtk-index"))
+    ("etc/images/exit" . ("application-exit" "gtk-quit"))
+    ("etc/images/cancel" . "gtk-cancel")
+    ("etc/images/info" . ("dialog-information" "gtk-info"))
+    ("etc/images/bookmark_add" . "n:bookmark_add")
+    ;; Used in Gnus and/or MH-E:
+    ("etc/images/attach" . ("mail-attachment" "gtk-attach"))
+    ("etc/images/connect" . "gtk-connect")
+    ("etc/images/contact" . "gtk-contact")
+    ("etc/images/delete" . ("edit-delete" "gtk-delete"))
+    ("etc/images/describe" . ("document-properties" "gtk-properties"))
+    ("etc/images/disconnect" . "gtk-disconnect")
+    ;; ("etc/images/exit" . "gtk-exit")
+    ("etc/images/lock-broken" . "gtk-lock_broken")
+    ("etc/images/lock-ok" . "gtk-lock_ok")
+    ("etc/images/lock" . "gtk-lock")
+    ("etc/images/next-page" . "gtk-next-page")
+    ("etc/images/refresh" . ("view-refresh" "gtk-refresh"))
+    ("etc/images/search-replace" . "edit-find-replace")
+    ("etc/images/sort-ascending" . ("view-sort-ascending" 
"gtk-sort-ascending"))
+    ("etc/images/sort-column-ascending" . "gtk-sort-column-ascending")
+    ("etc/images/sort-criteria" . "gtk-sort-criteria")
+    ("etc/images/sort-descending" . ("view-sort-descending"
+                                    "gtk-sort-descending"))
+    ("etc/images/sort-row-ascending" . "gtk-sort-row-ascending")
+    ("etc/images/spell" . ("tools-check-spelling" "gtk-spell-check"))
+    ("images/gnus/toggle-subscription" . "gtk-task-recurring")
+    ("images/mail/compose" . ("mail-message-new" "gtk-mail-compose"))
+    ("images/mail/copy" . "gtk-mail-copy")
+    ("images/mail/forward" . "gtk-mail-forward")
+    ("images/mail/inbox" . "gtk-inbox")
+    ("images/mail/move" . "gtk-mail-move")
+    ("images/mail/not-spam" . "gtk-not-spam")
+    ("images/mail/outbox" . "gtk-outbox")
+    ("images/mail/reply-all" . "gtk-mail-reply-to-all")
+    ("images/mail/reply" . "gtk-mail-reply")
+    ("images/mail/save-draft" . "gtk-mail-handling")
+    ("images/mail/send" . ("mail-send" "gtk-mail-send"))
+    ("images/mail/spam" . "gtk-spam")
+    ;; Used for GDB Graphical Interface
+    ("images/gud/break" . "gtk-no")
+    ("images/gud/recstart" . ("media-record" "gtk-media-record"))
+    ("images/gud/recstop" . ("media-playback-stop" "gtk-media-stop"))
+    ;; No themed versions available:
+    ;; mail/preview (combining stock_mail and stock_zoom)
+    ;; mail/save    (combining stock_mail, stock_save and stock_convert)
+    ))
+  "How icons for tool bars are mapped to Gtk+ stock items.
+Emacs must be compiled with the Gtk+ toolkit for this to have any effect.
+A value that begins with n: denotes a named icon instead of a stock icon."
+  :version "22.2"
+  :type '(choice (repeat
+                 (choice symbol
+                         (cons (string :tag "Emacs icon")
+                               (choice (group (string :tag "Named")
+                                              (string :tag "Stock"))
+                                       (string :tag "Stock/named"))))))
+  :group 'pgtk)
+
+(defcustom icon-map-list '(x-gtk-stock-map)
+  "A list of alists that map icon file names to stock/named icons.
+The alists are searched in the order they appear.  The first match is used.
+The keys in the alists are file names without extension and with two directory
+components.  For example, to map /usr/share/emacs/22.1.1/etc/images/open.xpm
+to stock item gtk-open, use:
+
+  (\"etc/images/open\" . \"gtk-open\")
+
+Themes also have named icons.  To map to one of those, use n: before the name:
+
+  (\"etc/images/diropen\" . \"n:system-file-manager\")
+
+The list elements are either the symbol name for the alist or the
+alist itself.
+
+If you don't want stock icons, set the variable to nil."
+  :version "22.2"
+  :type '(choice (const :tag "Don't use stock icons" nil)
+                (repeat (choice symbol
+                                (cons (string :tag "Emacs icon")
+                                      (string :tag "Stock/named")))))
+  :group 'pgtk)
+
+(defconst x-gtk-stock-cache (make-hash-table :weakness t :test 'equal))
+
+(defun x-gtk-map-stock (file)
+  "Map icon with file name FILE to a Gtk+ stock name.
+This uses `icon-map-list' to map icon file names to stock icon names."
+  (when (stringp file)
+    (or (gethash file x-gtk-stock-cache)
+       (puthash
+        file
+        (save-match-data
+          (let* ((file-sans (file-name-sans-extension file))
+                 (key (and (string-match "/\\([^/]+/[^/]+/[^/]+$\\)"
+                                         file-sans)
+                           (match-string 1 file-sans)))
+                 (icon-map icon-map-list)
+                 elem value)
+            (while (and (null value) icon-map)
+              (setq elem (car icon-map)
+                    value (assoc-string (or key file-sans)
+                                        (if (symbolp elem)
+                                            (symbol-value elem)
+                                          elem))
+                    icon-map (cdr icon-map)))
+            (and value (cdr value))))
+        x-gtk-stock-cache))))
+
+(declare-function accelerate-menu "pgtkmenu.c" (&optional frame) t)
+
+(defun pgtk-menu-bar-open (&optional frame)
+  "Open the menu bar if it is shown.
+`popup-menu' is used if it is off."
+  (interactive "i")
+  (cond
+   ((and (not (zerop (or (frame-parameter nil 'menu-bar-lines) 0)))
+        (fboundp 'accelerate-menu))
+    (accelerate-menu frame))
+   (t
+    (popup-menu (mouse-menu-bar-map) last-nonmenu-event))))
+
+(provide 'pgtk-win)
+(provide 'term/pgtk-win)
+
+;;; pgtk-win.el ends here
diff --git a/lisp/term/rxvt.el b/lisp/term/rxvt.el
index 9671e95aeb..4f21d9c7b4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
 
 ;; Author: Eli Zaretskii
 ;; Keywords: terminals
diff --git a/lisp/term/screen.el b/lisp/term/screen.el
index 9655f41b6c..62e3e64ca9 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2001-2022 Free Software Foundation, Inc.
 
 (require 'term/xterm)
 
diff --git a/lisp/term/st.el b/lisp/term/st.el
index 26478ca249..f44644e4db 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
 
 ;;; Commentary:
 
diff --git a/lisp/term/sun.el b/lisp/term/sun.el
index 4c88c80bf7..2742d8df91 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1987, 2001-2022 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 4ea6f416c8..02d1a3c032 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
 
 (require 'term/xterm)
 
diff --git a/lisp/term/tty-colors.el b/lisp/term/tty-colors.el
index 740d0654a1..79dc1c6377 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 4447657d44..96b0f936d1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 2001-2022 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 5e32e29792..2147c45784 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1989, 1993, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: FSF
 ;; Keywords: terminals
diff --git a/lisp/term/w32-win.el b/lisp/term/w32-win.el
index 8b745c495d..4ed01de9ae 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Kevin Gallo
 ;; Keywords: terminals
@@ -275,6 +275,7 @@ See the documentation of `create-fontset-from-fontset-spec' 
for the format.")
         '(gif "libgif-5.dll" "giflib4.dll" "libungif4.dll" "libungif.dll")))
        '(svg "librsvg-2-2.dll")
        '(webp "libwebp-7.dll" "libwebp.dll")
+       '(sqlite3 "libsqlite3-0.dll")
        '(gdk-pixbuf "libgdk_pixbuf-2.0-0.dll")
        '(glib "libglib-2.0-0.dll")
        '(gio "libgio-2.0-0.dll")
diff --git a/lisp/term/w32console.el b/lisp/term/w32console.el
index 1a5dc05783..c039470c0c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
 
 ;; Author: FSF
 ;; Keywords: terminals
diff --git a/lisp/term/wyse50.el b/lisp/term/wyse50.el
index d3b0fdad24..7bcbbbe72c 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-2021 Free Software Foundation,
+;; Copyright (C) 1989, 1993-1994, 2001-2022 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 d6e6318748..e52e488eda 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: FSF
 ;; Keywords: terminals, i18n
@@ -1489,6 +1489,12 @@ If you don't want stock icons, set the variable to nil."
                                       (string :tag "Stock/named")))))
   :group 'x)
 
+(defcustom x-display-cursor-at-start-of-preedit-string nil
+  "If non-nil, display the cursor at the start of any pre-edit text."
+  :version "29.1"
+  :type 'boolean
+  :group 'x)
+
 (defconst x-gtk-stock-cache (make-hash-table :weakness t :test 'equal))
 
 (defun x-gtk-map-stock (file)
@@ -1517,6 +1523,28 @@ This uses `icon-map-list' to map icon file names to 
stock icon names."
 
 (global-set-key [XF86WakeUp] 'ignore)
 
+
+(defvar x-preedit-overlay nil
+  "The overlay currently used to display preedit text from a compose 
sequence.")
+
+(defun x-preedit-text (event)
+  "Display preedit text from a compose sequence in EVENT.
+EVENT is a preedit-text event."
+  (interactive "e")
+  (when x-preedit-overlay
+    (delete-overlay x-preedit-overlay)
+    (setq x-preedit-overlay nil))
+  (when (nth 1 event)
+    (let ((string (propertize (nth 1 event) 'face '(:underline t))))
+      (setq x-preedit-overlay (make-overlay (point) (point)))
+      (overlay-put x-preedit-overlay 'window (selected-window))
+      (overlay-put x-preedit-overlay 'before-string
+                   (if x-display-cursor-at-start-of-preedit-string
+                       (propertize string 'cursor t)
+                     string)))))
+
+(define-key special-event-map [preedit-text] 'x-preedit-text)
+
 (provide 'x-win)
 (provide 'term/x-win)
 
diff --git a/lisp/term/xterm.el b/lisp/term/xterm.el
index 52a64d6c41..a7e257f41c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: FSF
 ;; Keywords: terminals
diff --git a/lisp/textmodes/artist.el b/lisp/textmodes/artist.el
index 25f0c35aa5..e37b0d988a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
 
 ;; Author:       Tomas Abrahamsson <tab@lysator.liu.se>
 ;; Keywords:     mouse
@@ -338,7 +338,8 @@ Example:
 (defvar artist-pointer-shape (if (eq window-system 'x) x-pointer-crosshair nil)
   "If in X Windows, use this pointer shape while drawing with the mouse.")
 
-(defvaralias 'artist-text-renderer 'artist-text-renderer-function)
+(define-obsolete-variable-alias 'artist-text-renderer
+  'artist-text-renderer-function "29.1")
 
 (defcustom artist-text-renderer-function 'artist-figlet
   "Function for doing text rendering."
diff --git a/lisp/textmodes/bib-mode.el b/lisp/textmodes/bib-mode.el
index a429aae7f7..6168fed6c8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1989, 2001-2022 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 27b2e0e333..d1ffce37d3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2005, 2007-2022 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 c06e8bfa1b..ab471db3dd 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, 1994-1999, 2001-2021 Free Software Foundation,
+;; Copyright (C) 1992, 1994-1999, 2001-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Stefan Schoef <schoef@offis.uni-oldenburg.de>
@@ -839,6 +839,24 @@ for a new entry."
       ("eprint") ("eprintclass" nil nil 4) ("primaryclass" nil nil -4)
       ("eprinttype" nil nil 5) ("archiveprefix" nil nil -5)
       ("url") ("urldate")))
+    ("PhdThesis" "PhD Thesis"
+     (("author")
+      ("title" "Title of the PhD thesis")
+      ("school" "School where the PhD thesis was written")
+      ("year"))
+     nil
+     (("type" "Type of the PhD thesis")
+      ("address" "Address of the school (if not part of field \"school\") or 
country")
+      ("month") ("note")))
+    ("TechReport" "Technical Report"
+     (("author")
+      ("title" "Title of the technical report (BibTeX converts it to 
lowercase)")
+      ("institution" "Sponsoring institution of the report")
+      ("year"))
+     nil
+     (("type" "Type of the report (if other than \"technical report\")")
+      ("number" "Number of the technical report")
+      ("address") ("month") ("note")))
     ("Unpublished" "Unpublished"
      (("author") ("title") ("date" nil nil 1) ("year" nil nil -1))
      nil
@@ -1193,8 +1211,8 @@ See `bibtex-generate-autokey' for details."
   :type '(repeat (cons (regexp :tag "Old")
                        (string :tag "New"))))
 
-(defvaralias 'bibtex-autokey-name-case-convert
-  'bibtex-autokey-name-case-convert-function)
+(define-obsolete-variable-alias 'bibtex-autokey-name-case-convert
+  'bibtex-autokey-name-case-convert-function "29.1")
 
 (defcustom bibtex-autokey-name-case-convert-function #'downcase
   "Function called for each name to perform case conversion.
@@ -1268,8 +1286,8 @@ Case is significant.  See `bibtex-generate-autokey' for 
details."
   :group 'bibtex-autokey
   :type '(repeat regexp))
 
-(defvaralias 'bibtex-autokey-titleword-case-convert
-  'bibtex-autokey-titleword-case-convert-function)
+(define-obsolete-variable-alias 'bibtex-autokey-titleword-case-convert
+  'bibtex-autokey-titleword-case-convert-function "29.1")
 
 (defcustom bibtex-autokey-titleword-case-convert-function #'downcase
   "Function called for each titleword to perform case conversion.
diff --git a/lisp/textmodes/conf-mode.el b/lisp/textmodes/conf-mode.el
index 30f8fd0ca9..f940de3ff4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2022 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 e5017a68f7..1139fd1976 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Maintainer: Simen Heggestøyl <simenheg@gmail.com>
diff --git a/lisp/textmodes/dns-mode.el b/lisp/textmodes/dns-mode.el
index 2fa5e8de39..dc26a3c1b7 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-2001, 2004-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2001, 2004-2022 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <simon@josefsson.org>
 ;; Keywords: DNS master zone file SOA comm
diff --git a/lisp/textmodes/enriched.el b/lisp/textmodes/enriched.el
index 4a5a5ab367..50ff668a9f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1996, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Boris Goldowsky <boris@gnu.org>
 ;; Keywords: wp, faces
diff --git a/lisp/textmodes/etc-authors-mode.el 
b/lisp/textmodes/etc-authors-mode.el
index 8b5fefd3b7..7eabdd4c2b 100644
--- a/lisp/textmodes/etc-authors-mode.el
+++ b/lisp/textmodes/etc-authors-mode.el
@@ -1,6 +1,6 @@
 ;;; etc-authors-mode.el --- font-locking for etc/AUTHORS  -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 2021 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 ;; Author: Stefan Kangas <stefan@marxist.se>
 ;; Keywords: internal
@@ -115,12 +115,10 @@ With a prefix arg ARG, move point that many authors 
backward."
   (interactive "p" etc-authors-mode)
   (etc-authors-next-author (- arg)))
 
-(defvar etc-authors-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map "n" #'etc-authors-next-author)
-    (define-key map "p" #'etc-authors-prev-author)
-    map)
-  "Keymap for `etc-authors-mode'.")
+(defvar-keymap etc-authors-mode-map
+  :doc "Keymap for `etc-authors-mode'."
+  "n" #'etc-authors-next-author
+  "p" #'etc-authors-prev-author)
 
 ;;;###autoload
 (define-derived-mode etc-authors-mode special-mode "Authors View"
diff --git a/lisp/textmodes/fill.el b/lisp/textmodes/fill.el
index 73d76a8ac6..f41fd186e7 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-2021 Free
+;; Copyright (C) 1985-1986, 1992, 1994-1997, 1999, 2001-2022 Free
 ;; Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
@@ -705,7 +705,10 @@ space does not end a sentence, so don't break a line 
there."
     (goto-char from-plus-indent))
 
   (if (not (> to (point)))
-      nil ;; There is no paragraph, only whitespace: exit now.
+      ;; There is no paragraph, only whitespace: exit now.
+      (progn
+        (set-marker to nil)
+        nil)
 
     (or justify (setq justify (current-justification)))
 
@@ -791,6 +794,7 @@ space does not end a sentence, so don't break a line there."
       ;; Leave point after final newline.
       (goto-char to)
       (unless (eobp) (forward-char 1))
+      (set-marker to nil)
       ;; Return the fill-prefix we used
       fill-prefix)))
 
diff --git a/lisp/textmodes/flyspell.el b/lisp/textmodes/flyspell.el
index 2a9cae29f7..664214419f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2000-2022 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
new file mode 100644
index 0000000000..4d48d90b56
--- /dev/null
+++ b/lisp/textmodes/glyphless-mode.el
@@ -0,0 +1,68 @@
+;;; glyphless-mode.el --- minor mode for displaying glyphless characters  -*- 
lexical-binding: t; -*-
+
+;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+
+;; Maintainer: emacs-devel@gnu.org
+
+;; 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:
+
+(defcustom glyphless-mode-types '(all)
+  "Which glyphless characters to display.
+The value can be any of the groups supported by
+`glyphless-char-display-control' (which see), and in addition
+`all', for all glyphless characters."
+  :version "29.1"
+  :type '(repeat (choice (const :tag "All" all)
+                         (const :tag "No font" no-font)
+                         (const :tag "C0 Control" c0-control)
+                         (const :tag "C1 Control" c1-control)
+                         (const :tag "Format Control" format-control)
+                         (const :tag "Bidirectional Control" bidi-control)
+                         (const :tag "Variation Selectors" variation-selectors)
+                         (const :tag "No Font" no-font)))
+  :group 'display)
+
+;;;###autoload
+(define-minor-mode glyphless-display-mode
+  "Minor mode for displaying glyphless characters in the current buffer.
+If enabled, all glyphless characters will be displayed as boxes
+that display their acronyms."
+  :lighter " Glyphless"
+  (if glyphless-display-mode
+      (progn
+        (setq-local glyphless-char-display
+                    (let ((table (make-display-table)))
+                      (set-char-table-parent table glyphless-char-display)
+                      table))
+        (glyphless-mode--setup))
+    (kill-local-variable 'glyphless-char-display)))
+
+(defun glyphless-mode--setup ()
+  (let ((types (if (memq 'all glyphless-mode-types)
+                   '(c0-control c1-control format-control
+                                variation-selectors no-font)
+                 glyphless-mode-types)))
+    (when types
+      (update-glyphless-char-display
+       nil (mapcar (lambda (e) (cons e 'acronym)) types)))))
+
+(provide 'glyphless-mode)
+
+;;; glyphless-mode.el ends here
diff --git a/lisp/textmodes/ispell.el b/lisp/textmodes/ispell.el
index 4087f7e5f2..ae3b18ed17 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1995, 1997-2022 Free Software Foundation, Inc.
 
 ;; Author: Ken Stevens <k.stevens@ieee.org>
 
@@ -296,7 +296,8 @@ The following values are supported:
   "Non-nil means suppress messages in `ispell-word'."
   :type 'boolean)
 
-(defvaralias 'ispell-format-word 'ispell-format-word-function)
+(define-obsolete-variable-alias 'ispell-format-word
+  'ispell-format-word-function "29.1")
 
 (defcustom ispell-format-word-function (function upcase)
   "Formatting function for displaying word being spell checked.
@@ -3977,7 +3978,7 @@ You can bind this to the key C-c i in GNUS or mail by 
adding to
            (if (re-search-forward "^Subject: *" end-of-headers t)
                (progn
                  (goto-char (match-end 0))
-                 (if (and (not (looking-at ".*Re\\>"))
+                 (if (and (not (looking-at ".*\\<Re\\>"))
                           (not (looking-at "\\[")))
                      (progn
                        (setq case-fold-search old-case-fold-search)
diff --git a/lisp/textmodes/less-css-mode.el b/lisp/textmodes/less-css-mode.el
index d374cab27a..a0462756b0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 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 6b9b3f3e9d..0c908c722d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1991, 1993, 2001-2022 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 936732153a..2ce74dd68b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
 
 ;; Keywords: wp, hypermedia, comm, languages
 
diff --git a/lisp/textmodes/nroff-mode.el b/lisp/textmodes/nroff-mode.el
index 94519c3420..435423d31e 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-1986, 1994-1995, 1997, 2001-2021 Free Software
+;; Copyright (C) 1985-1986, 1994-1995, 1997, 2001-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/textmodes/page-ext.el b/lisp/textmodes/page-ext.el
index 558d6b81d7..24149f9afb 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-1991, 1993-1994, 2001-2021 Free Software
+;; Copyright (C) 1990-1991, 1993-1994, 2001-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Robert J. Chassell <bob@gnu.org>
diff --git a/lisp/textmodes/page.el b/lisp/textmodes/page.el
index b86a2f149d..3fc1832334 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 2001-2022 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 59b15e82a8..7daf71e990 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-2021 Free Software
+;; Copyright (C) 1985-1987, 1991, 1994-1997, 1999-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
@@ -479,18 +479,42 @@ sentences.  Also, every paragraph boundary terminates 
sentences as well."
       (setq arg (1- arg)))
     (constrain-to-field nil opoint t)))
 
-(defun repunctuate-sentences (&optional no-query)
+(defun repunctuate-sentences-filter (_start _end)
+  "Search filter used by `repunctuate-sentences' to skip unneeded spaces.
+By default, it skips occurrences that already have two spaces."
+  (/= 2 (- (point) (save-excursion (skip-chars-backward " ") (point)))))
+
+(defvar repunctuate-sentences-filter #'repunctuate-sentences-filter
+  "The default filter used by `repunctuate-sentences'.
+It is advised to use `add-function' on this to add more filters,
+for example, `(looking-back (rx (or \"e.g.\" \"i.e.\") \" \") 5)'
+with a set of predefined abbreviations to skip from adding two spaces.")
+
+(defun repunctuate-sentences (&optional no-query start end)
   "Put two spaces at the end of sentences from point to the end of buffer.
-It works using `query-replace-regexp'.
-If optional argument NO-QUERY is non-nil, make changes without
-asking for confirmation."
-  (interactive)
+It works using `query-replace-regexp'.  In Transient Mark mode,
+if the mark is active, operate on the contents of the region.
+Second and third arg START and END specify the region to operate on.
+If optional argument NO-QUERY is non-nil, make changes without asking
+for confirmation.  You can use `repunctuate-sentences-filter' to add
+filters to skip occurrences of spaces that don't need to be replaced."
+  (interactive (list nil
+                     (if (use-region-p) (region-beginning))
+                     (if (use-region-p) (region-end))))
   (let ((regexp "\\([]\"')]?\\)\\([.?!]\\)\\([]\"')]?\\) +")
         (to-string "\\1\\2\\3  "))
     (if no-query
-        (while (re-search-forward regexp nil t)
-          (replace-match to-string))
-      (query-replace-regexp regexp to-string))))
+        (progn
+          (when start (goto-char start))
+          (while (re-search-forward regexp end t)
+            (replace-match to-string)))
+      (unwind-protect
+          (progn
+            (add-function :after-while isearch-filter-predicate
+                          repunctuate-sentences-filter)
+            (query-replace-regexp regexp to-string nil start end))
+        (remove-function isearch-filter-predicate
+                         repunctuate-sentences-filter)))))
 
 
 (defun backward-sentence (&optional arg)
diff --git a/lisp/textmodes/picture.el b/lisp/textmodes/picture.el
index cb7f275ea6..17d9483f68 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, 1994, 2001-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1994, 2001-2022 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
new file mode 100644
index 0000000000..418d6a37c9
--- /dev/null
+++ b/lisp/textmodes/pixel-fill.el
@@ -0,0 +1,240 @@
+;;; pixel-fill.el --- variable pitch filling functions  -*- lexical-binding: 
t; -*-
+
+;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+
+;; Maintainer: emacs-devel@gnu.org
+;; Keywords: filling
+
+;; 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 main entry point is `pixel-fill-region', but
+;; `pixel-fill-find-fill-point' can also be useful by itself.
+
+;;; Code:
+
+(require 'kinsoku)
+
+(defgroup pixel-fill nil
+  "Filling based on pixel widths."
+  :group 'fill
+  :version "29.1")
+
+(defcustom pixel-fill-respect-kinsoku t
+  "If nil, fill even if we can't find a good kinsoku point.
+Kinsoku is a Japanese word meaning a rule that should not be violated.
+In Emacs, it is a term used for characters, e.g. punctuation marks,
+parentheses, and so on, that should not be placed in the beginning
+of a line or the end of a line."
+  :type 'boolean
+  :version "29.1")
+
+(defun pixel-fill-width (&optional columns window)
+  "Return the pixel width corresponding to COLUMNS in WINDOW.
+If COLUMNS in nil, use the enture window width.
+
+If WINDOW is nil, this defaults to the current window."
+  (unless window
+    (setq window (selected-window)))
+  (let ((frame (window-frame window)))
+    (if columns
+        (* (frame-char-width frame) columns)
+      (- (window-body-width nil t)
+         (* 2 (frame-char-width frame))
+         ;; We need to adjust the available width for when the user
+         ;; disables the fringes, which will cause the display
+         ;; engine usurp one column for the continuation glyph.
+         (if (and (fboundp 'fringe-columns)
+                  (or (not (zerop (fringe-columns 'right)))
+                      (not (zerop (fringe-columns 'left)))))
+             0
+           (* (frame-char-width frame) 2))
+         1))))
+
+(defun pixel-fill-region (start end pixel-width)
+  "Fill the region between START and END.
+This will attempt to reformat the text in the region to have no
+lines that are visually wider than PIXEL-WIDTH.
+
+If START isn't at the start of a line, the horizontal position of
+START, converted to pixel units, will be used as the indentation
+prefix on subsequent lines."
+  (save-excursion
+    (goto-char start)
+    (let ((indentation
+           (car (window-text-pixel-size nil (line-beginning-position)
+                                        (point))))
+          (newline-end nil))
+      (when (> indentation pixel-width)
+        (error "The indentation (%s) is wider than the fill width (%s)"
+               indentation pixel-width))
+      (save-restriction
+        (narrow-to-region start end)
+        (goto-char (point-max))
+        (when (looking-back "\n[ \t]*" (point-min))
+          (setq newline-end t))
+        (goto-char (point-min))
+        ;; First replace all whitespace with space.
+        (while (re-search-forward "[ \t\n]+" nil t)
+          (cond
+           ((or (= (match-beginning 0) start)
+                (= (match-end 0) end))
+            (delete-region (match-beginning 0) (match-end 0)))
+           ;; If there's just a single space here, don't replace.
+           ((not (and (= (- (match-end 0) (match-beginning 0)) 1)
+                      (= (char-after (match-beginning 0)) ?\s)))
+            (replace-match
+             ;; We need to use a space that has an appropriate width.
+             (propertize " " 'face
+                         (get-text-property (match-beginning 0) 'face))))))
+        (goto-char start)
+        (pixel-fill--fill-line pixel-width indentation)
+        (goto-char (point-max))
+        (when newline-end
+          (insert "\n"))))))
+
+(defun pixel-fill--goto-pixel (width)
+  (vertical-motion (cons (/ width (frame-char-width)) 0)))
+
+(defun pixel-fill--fill-line (width &optional indentation)
+  (let ((start (point)))
+    (pixel-fill--goto-pixel width)
+    (while (not (eolp))
+      ;; We have to do some folding.  First find the first previous
+      ;; point suitable for folding.
+      (when (or (not (pixel-fill-find-fill-point (line-beginning-position)))
+               (= (point) start))
+       ;; We had unbreakable text (for this width), so just go to
+       ;; the first space and carry on.
+       (beginning-of-line)
+       (skip-chars-forward " ")
+       (search-forward " " (line-end-position) 'move))
+      (when (= (preceding-char) ?\s)
+       (delete-char -1))
+      (unless (eobp)
+        (insert ?\n)
+        (when (> indentation 0)
+          (insert (propertize " " 'display
+                              (list 'space :align-to (list indentation))))))
+      (setq start (point))
+      (unless (eobp)
+        (pixel-fill--goto-pixel width)))))
+
+(define-inline pixel-fill--char-breakable-p (char)
+  "Return non-nil if a line can be broken before and after CHAR."
+  (inline-quote (aref fill-find-break-point-function-table ,char)))
+
+(define-inline pixel-fill--char-nospace-p (char)
+  "Return non-nil if no space is required before and after CHAR."
+  (inline-quote (aref fill-nospace-between-words-table ,char)))
+
+(define-inline pixel-fill--char-kinsoku-bol-p (char)
+  "Return non-nil if a line ought not to begin with CHAR."
+  (inline-letevals (char)
+    (inline-quote (and (not (eq ,char ?'))
+                       (aref (char-category-set ,char) ?>)))))
+
+(define-inline pixel-fill--char-kinsoku-eol-p (char)
+  "Return non-nil if a line ought not to end with CHAR."
+  (inline-quote (aref (char-category-set ,char) ?<)))
+
+(defun pixel-fill-find-fill-point (start)
+  "Find a place suitable for breaking the current line.
+START should be the earliest buffer position that should be considered
+(typically the start of the line), and this function will search
+backward in the current buffer from the current position."
+  (let ((bp (point))
+       (end (point))
+       failed)
+    (while (not
+            (or (setq failed (<= (point) start))
+               (eq (preceding-char) ?\s)
+               (eq (following-char) ?\s)
+               (pixel-fill--char-breakable-p (preceding-char))
+               (pixel-fill--char-breakable-p (following-char))
+               (and (pixel-fill--char-kinsoku-bol-p (preceding-char))
+                    (pixel-fill--char-breakable-p (following-char))
+                    (not (pixel-fill--char-kinsoku-bol-p (following-char))))
+               (pixel-fill--char-kinsoku-eol-p (following-char))
+               (bolp)))
+      (backward-char 1))
+    (if failed
+       ;; There's no breakable point, so we give it up.
+       (let (found)
+         (goto-char bp)
+          ;; Don't overflow the window edge, even if
+          ;; `pixel-fill-respect-kinsoku' is t.
+         (when pixel-fill-respect-kinsoku
+           (while (setq found (re-search-forward
+                               "\\(\\c>\\)\\| \\|\\c<\\|\\c|"
+                               (line-end-position) 'move)))
+           (if (and found
+                    (not (match-beginning 1)))
+               (goto-char (match-beginning 0)))))
+      (or
+       (eolp)
+       ;; Don't put kinsoku-bol characters at the beginning of a line,
+       ;; or kinsoku-eol characters at the end of a line.
+       (cond
+        ;; Don't overflow the window edge, even if `pixel-fill-respect-kinsoku'
+        ;; is t.
+       ((not pixel-fill-respect-kinsoku)
+        (while (and (not (eq (preceding-char) ?\s))
+                    (or (pixel-fill--char-kinsoku-eol-p (preceding-char))
+                         (pixel-fill--char-kinsoku-bol-p (following-char))))
+          (backward-char 1))
+        (when (setq failed (<= (point) start))
+          ;; There's no breakable point that doesn't violate kinsoku,
+          ;; so we look for the second best position.
+          (while (and (progn
+                        (forward-char 1)
+                        (<= (point) end))
+                      (progn
+                        (setq bp (point))
+                        (pixel-fill--char-kinsoku-eol-p (following-char)))))
+          (goto-char bp)))
+       ((pixel-fill--char-kinsoku-eol-p (preceding-char))
+        ;; Find backward the point where kinsoku-eol characters begin.
+        (let ((count 4))
+          (while
+              (progn
+                (backward-char 1)
+                (and (> (setq count (1- count)) 0)
+                     (not (eq (preceding-char) ?\s))
+                     (or (pixel-fill--char-kinsoku-eol-p (preceding-char))
+                         (pixel-fill--char-kinsoku-bol-p (following-char)))))))
+        (when (setq failed (<= (point) start))
+          ;; There's no breakable point that doesn't violate kinsoku,
+          ;; so we go to the second best position.
+          (if (looking-at "\\(\\c<+\\)\\c<")
+              (goto-char (match-end 1))
+            (forward-char 1))))
+       ((pixel-fill--char-kinsoku-bol-p (following-char))
+        ;; Find forward the point where kinsoku-bol characters end.
+        (let ((count 4))
+          (while (progn
+                   (forward-char 1)
+                   (and (>= (setq count (1- count)) 0)
+                        (pixel-fill--char-kinsoku-bol-p (following-char))
+                        (pixel-fill--char-breakable-p (following-char))))))))
+       (when (eq (following-char) ?\s)
+        (forward-char 1))))
+    (not failed)))
+
+(provide 'pixel-fill)
+
+;;; pixel-fill.el ends here
diff --git a/lisp/textmodes/po.el b/lisp/textmodes/po.el
index 1066e93af1..16c9140dcb 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1998, 2000-2022 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 ce556be00d..ba1deca47d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1989, 2001-2022 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 e710180d5f..1ee35d6a71 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 1996, 2001-2022 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 b2ebbd5f37..7d6d909966 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 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 977da700fd..47ad280edc 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2022 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 e1475934dd..4e487d745c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2022 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 ee26d911a5..2d340de947 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2022 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 f787f5f3e5..5ab9ecd8db 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2022 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 357f7da2f9..734f82aba3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2022 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 b8c75cb21b..016c9cf399 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2022 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 15d86b359c..3fe7a79a27 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2022 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 b0a8ebf8ac..d77411483f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2022 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 b5f53ba86e..4ba3c2193e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2000, 2003-2022 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 eedc067b86..f9d832f155 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1999, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <dominik@science.uva.nl>
 ;; Maintainer: auctex-devel@gnu.org
@@ -70,12 +70,16 @@
       ("tabwindow" ?f nil nil 1)))
 
     (rotating    "Sidewaysfigure and table"
-     (("sidewaysfigure" ?f nil nil caption)
-      ("sidewaystable"  ?t nil nil caption)))
-
-    (sidecap      "CSfigure and SCtable"
-     (("SCfigure"       ?f nil nil caption)
-      ("SCtable"        ?t nil nil caption)))
+     (("sidewaysfigure"  ?f nil nil caption)
+      ("sidewaysfigure*" ?f nil nil caption)
+      ("sidewaystable"   ?t nil nil caption)
+      ("sidewaystable*"  ?t nil nil caption)))
+
+    (sidecap      "SCfigure and SCtable"
+     (("SCfigure"  ?f nil nil caption)
+      ("SCfigure*" ?f nil nil caption)
+      ("SCtable"   ?t nil nil caption)
+      ("SCtable*"  ?t nil nil caption)))
 
     (subfigure   "Subfigure environments/macro"
      (("subfigure"   ?f nil nil caption)
diff --git a/lisp/textmodes/reftex.el b/lisp/textmodes/reftex.el
index f7424b60b3..907d50889a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2000, 2003-2022 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <dominik@science.uva.nl>
 ;; Maintainer: auctex-devel@gnu.org
diff --git a/lisp/textmodes/remember.el b/lisp/textmodes/remember.el
index fbb66fe40e..d65aea6286 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2001, 2003-2022 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 ed1d721f82..9d3e9effe6 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2022 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 dedc388219..83631e6475 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-2021 Free Software
+;; Copyright (C) 1992, 1995-1996, 1998, 2001-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Author: James Clark <jjc@jclark.com>
@@ -75,7 +75,8 @@ a DOCTYPE or an XML declaration."
   :type 'boolean
   :version "22.1")
 
-(defvaralias 'sgml-transformation 'sgml-transformation-function)
+(define-obsolete-variable-alias 'sgml-transformation
+  'sgml-transformation-function "29.1")
 
 (defcustom sgml-transformation-function 'identity
   "Default value for `skeleton-transformation-function' in SGML mode."
@@ -623,6 +624,7 @@ Do \\[describe-key] on the following bindings to discover 
what they do.
   (setq-local comment-indent-function 'sgml-comment-indent)
   (setq-local comment-line-break-function 'sgml-comment-indent-new-line)
   (setq-local skeleton-further-elements '((completion-ignore-case t)))
+  (setq-local skeleton-end-newline nil)
   (setq-local skeleton-end-hook
              (lambda ()
                (or (eolp)
diff --git a/lisp/textmodes/table.el b/lisp/textmodes/table.el
index fef5ad2c7a..2175900194 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
 
 ;; Keywords: wp, convenience
 ;; Author: Takaaki Ota <Takaaki.Ota@am.sony.com>
@@ -1195,6 +1195,21 @@ executing body forms.")
 (easy-menu-add-item (current-global-map)
                     '("menu-bar" "tools") table-global-menu-map)
 
+;;;###autoload
+(define-minor-mode table-fixed-width-mode
+  "Cell width is fixed when this is non-nil.
+Normally it should be nil for allowing automatic cell width expansion
+that widens a cell when it is necessary.  When non-nil, typing in a
+cell does not automatically expand the cell width.  A word that is too
+long to fit in a cell is chopped into multiple lines.  The chopped
+location is indicated by `table-word-continuation-char'.  This
+variable's value can be toggled by \\[table-fixed-width-mode] at
+run-time."
+  :tag "Fix Cell Width"
+  :group 'table
+  (table--finish-delayed-tasks)
+  (table--update-cell-face))
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;; Macros
@@ -1219,43 +1234,49 @@ original buffer's point is moved to the location that 
corresponds to
 the last cache point coordinate."
   (declare (debug (body)) (indent 0))
   (let ((height-expansion (make-symbol "height-expansion-var-symbol"))
-       (width-expansion (make-symbol "width-expansion-var-symbol")))
-    `(let (,height-expansion ,width-expansion)
+       (width-expansion (make-symbol "width-expansion-var-symbol"))
+        (fixed-width (make-symbol "fixed-width")))
+    `(let ((,fixed-width table-fixed-width-mode)
+           ,height-expansion ,width-expansion)
        ;; make sure cache has valid data unless it is explicitly inhibited.
        (unless table-inhibit-update
         (table-recognize-cell))
        (with-current-buffer (get-buffer-create table-cache-buffer-name)
-        ;; goto the cell coordinate based on 
`table-cell-cache-point-coordinate'.
-        (set-mark (table--goto-coordinate table-cell-cache-mark-coordinate))
-        (table--goto-coordinate table-cell-cache-point-coordinate)
-        (table--untabify-line)
-        ;; always reset before executing body forms because auto-fill behavior 
is the default.
-        (setq table-inhibit-auto-fill-paragraph nil)
-        ;; do the body
-        ,@body
-        ;; fill paragraph unless the body does not want to by setting 
`table-inhibit-auto-fill-paragraph'.
-        (unless table-inhibit-auto-fill-paragraph
-          (if (and table-cell-info-justify
-                   (not (eq table-cell-info-justify 'left)))
-              (table--fill-region (point-min) (point-max))
-            (table--fill-region
-             (save-excursion (forward-paragraph -1) (point))
-             (save-excursion (forward-paragraph 1) (point)))))
-        ;; keep the updated cell coordinate.
-        (setq table-cell-cache-point-coordinate (table--get-coordinate))
-        ;; determine the cell width expansion.
-        (setq ,width-expansion (table--measure-max-width))
-        (if (<= ,width-expansion table-cell-info-width) nil
-          (table--fill-region (point-min) (point-max) ,width-expansion)
-          ;; keep the updated cell coordinate.
-          (setq table-cell-cache-point-coordinate (table--get-coordinate)))
-        (setq ,width-expansion (- ,width-expansion table-cell-info-width))
-        ;; determine the cell height expansion.
-        (if (looking-at "\\s *\\'") nil
-          (goto-char (point-min))
-          (if (re-search-forward "\\(\\s *\\)\\'" nil t)
-              (goto-char (match-beginning 1))))
-        (setq ,height-expansion (- (cdr (table--get-coordinate)) (1- 
table-cell-info-height))))
+         (let ((table-fixed-width-mode ,fixed-width))
+          ;; Go to the cell coordinate based on
+          ;; `table-cell-cache-point-coordinate'.
+          (set-mark (table--goto-coordinate table-cell-cache-mark-coordinate))
+          (table--goto-coordinate table-cell-cache-point-coordinate)
+          (table--untabify-line)
+          ;; Always reset before executing body forms because
+          ;; auto-fill behavior is the default.
+          (setq table-inhibit-auto-fill-paragraph nil)
+          ;; Do the body
+          ,@body
+          ;; Fill paragraph unless the body does not want to by
+          ;; setting `table-inhibit-auto-fill-paragraph'.
+          (unless table-inhibit-auto-fill-paragraph
+            (if (and table-cell-info-justify
+                     (not (eq table-cell-info-justify 'left)))
+                (table--fill-region (point-min) (point-max))
+              (table--fill-region
+               (save-excursion (forward-paragraph -1) (point))
+               (save-excursion (forward-paragraph 1) (point)))))
+          ;; Keep the updated cell coordinate.
+          (setq table-cell-cache-point-coordinate (table--get-coordinate))
+          ;; Determine the cell width expansion.
+          (setq ,width-expansion (table--measure-max-width))
+          (if (<= ,width-expansion table-cell-info-width) nil
+            (table--fill-region (point-min) (point-max) ,width-expansion)
+            ;; Keep the updated cell coordinate.
+            (setq table-cell-cache-point-coordinate (table--get-coordinate)))
+          (setq ,width-expansion (- ,width-expansion table-cell-info-width))
+          ;; Determine the cell height expansion.
+          (if (looking-at "\\s *\\'") nil
+            (goto-char (point-min))
+            (if (re-search-forward "\\(\\s *\\)\\'" nil t)
+                (goto-char (match-beginning 1))))
+          (setq ,height-expansion (- (cdr (table--get-coordinate)) (1- 
table-cell-info-height)))))
        ;; now back to the table buffer.
        ;; expand the cell width in the table buffer if necessary.
        (if (> ,width-expansion 0)
@@ -2822,21 +2843,6 @@ or `top', `middle', `bottom' or `none' for vertical."
          (table-recognize-cell 'force)
          (table--justify-cell-contents justify))))))
 
-;;;###autoload
-(define-minor-mode table-fixed-width-mode
-  "Cell width is fixed when this is non-nil.
-Normally it should be nil for allowing automatic cell width expansion
-that widens a cell when it is necessary.  When non-nil, typing in a
-cell does not automatically expand the cell width.  A word that is too
-long to fit in a cell is chopped into multiple lines.  The chopped
-location is indicated by `table-word-continuation-char'.  This
-variable's value can be toggled by \\[table-fixed-width-mode] at
-run-time."
-  :tag "Fix Cell Width"
-  :group 'table
-  (table--finish-delayed-tasks)
-  (table--update-cell-face))
-
 ;;;###autoload
 (defun table-query-dimension (&optional where)
   "Return the dimension of the current cell and the current table.
diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el
index 5fba93c76e..1925d93d93 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-2021 Free
+;; Copyright (C) 1985-1986, 1989, 1992, 1994-1999, 2001-2022 Free
 ;; Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
@@ -2037,7 +2037,7 @@ In the tex shell buffer this command behaves like 
`comint-send-input'."
 
 (defun tex-display-shell ()
   "Make the TeX shell buffer visible in a window."
-  (display-buffer (tex-shell-buf))
+  (display-buffer (tex-shell-buf) display-comint-buffer-action)
   (tex-recenter-output-buffer nil))
 
 (defun tex-shell-sentinel (proc _msg)
@@ -2441,7 +2441,7 @@ Only applies the FSPEC to the args part of FORMAT."
        (if cmds (tex-format-cmd (caar cmds) fspec))))))
 
 (defun tex-cmd-doc-view (file)
-  (pop-to-buffer (find-file-noselect file)))
+  (pop-to-buffer (find-file-noselect file) display-comint-buffer-action))
 
 (defun tex-compile (dir cmd)
   "Run a command CMD on current TeX buffer's file in DIR."
@@ -2698,7 +2698,7 @@ line LINE of the window, or centered if LINE is nil."
        (window))
     (if (null tex-shell)
        (message "No TeX output buffer")
-      (setq window (display-buffer tex-shell))
+      (setq window (display-buffer tex-shell display-comint-buffer-action))
       (with-selected-window window
        (bury-buffer tex-shell)
        (goto-char (point-max))
diff --git a/lisp/textmodes/texinfmt.el b/lisp/textmodes/texinfmt.el
index 550994cd7b..85110c3d1b 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-2021 Free Software
+;; Copyright (C) 1985-1986, 1988, 1990-1998, 2000-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/textmodes/texinfo.el b/lisp/textmodes/texinfo.el
index 71db33bae3..7f6ed3d1da 100644
--- a/lisp/textmodes/texinfo.el
+++ b/lisp/textmodes/texinfo.el
@@ -1,10 +1,9 @@
 ;;; texinfo.el --- major mode for editing Texinfo files  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 1985, 1988-1993, 1996-1997, 2000-2021 Free Software
+;; Copyright (C) 1985, 1988-1993, 1996-1997, 2000-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Robert J. Chassell
-;; Date:   [See date below for texinfo-version]
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: maint, tex, docs
 
diff --git a/lisp/textmodes/texnfo-upd.el b/lisp/textmodes/texnfo-upd.el
index 6862da6046..5b468dc808 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1989-1992, 2001-2022 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 478cf62268..076f8dd98f 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-2021 Free Software Foundation,
+;; Copyright (C) 1985, 1992, 1994, 2001-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/textmodes/tildify.el b/lisp/textmodes/tildify.el
index 2a4c8cff8f..9dcfb10d6d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-2022 Free Software Foundation, Inc.
 
 ;; Author:     Milan Zamazal <pdm@zamazal.org>
 ;;             Michal Nazarewicz <mina86@mina86.com>
diff --git a/lisp/textmodes/two-column.el b/lisp/textmodes/two-column.el
index 5a3a64ad79..2fb5287aa0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1992-1995, 2001-2022 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 3f4e63a349..49503cb5d3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 2001-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: wp
diff --git a/lisp/thingatpt.el b/lisp/thingatpt.el
index 32e66184d7..045264528f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1991-1998, 2000-2022 Free Software Foundation, Inc.
 
 ;; Author: Mike Williams <mikew@gopher.dosli.govt.nz>
 ;; Maintainer: emacs-devel@gnu.org
@@ -106,8 +106,17 @@ valid THING.
 
 Return a cons cell (START . END) giving the start and end
 positions of the thing found."
-  (if (get thing 'bounds-of-thing-at-point)
-      (funcall (get thing 'bounds-of-thing-at-point))
+  (cond
+   ((get thing 'bounds-of-thing-at-point)
+    (funcall (get thing 'bounds-of-thing-at-point)))
+   ;; If the buffer is totally empty, give up.
+   ((and (not (eq thing 'whitespace))
+         (save-excursion
+           (goto-char (point-min))
+           (not (re-search-forward "[^\t\n ]" nil t))))
+    nil)
+   ;; Find the thing.
+   (t
     (let ((orig (point)))
       (ignore-errors
        (save-excursion
@@ -149,7 +158,7 @@ positions of the thing found."
                            (lambda () (forward-thing thing -1))))
                       (point))))
                (if (and (<= real-beg orig) (<= orig end) (< real-beg end))
-                   (cons real-beg end))))))))))
+                   (cons real-beg end)))))))))))
 
 ;;;###autoload
 (defun thing-at-point (thing &optional no-properties)
@@ -162,30 +171,24 @@ Possibilities include `symbol', `list', `sexp', `defun',
 When the optional argument NO-PROPERTIES is non-nil,
 strip text properties from the return value.
 
-If the current buffer uses fields (see Info node `(elisp)Fields'),
-this function will narrow to the field before identifying the
-thing at point.
-
 See the file `thingatpt.el' for documentation on how to define
 a symbol as a valid THING."
-  (save-restriction
-    (narrow-to-region (field-beginning) (field-end))
-    (let ((text
-           (cond
-            ((cl-loop for (pthing . function) in thing-at-point-provider-alist
-                      when (eq pthing thing)
-                      for result = (funcall function)
-                      when result
-                      return result))
-            ((get thing 'thing-at-point)
-             (funcall (get thing 'thing-at-point)))
-            (t
-             (let ((bounds (bounds-of-thing-at-point thing)))
-               (when bounds
-                 (buffer-substring (car bounds) (cdr bounds))))))))
-      (when (and text no-properties (sequencep text))
-        (set-text-properties 0 (length text) nil text))
-      text)))
+  (let ((text
+         (cond
+          ((cl-loop for (pthing . function) in thing-at-point-provider-alist
+                    when (eq pthing thing)
+                    for result = (funcall function)
+                    when result
+                    return result))
+          ((get thing 'thing-at-point)
+           (funcall (get thing 'thing-at-point)))
+          (t
+           (let ((bounds (bounds-of-thing-at-point thing)))
+             (when bounds
+               (buffer-substring (car bounds) (cdr bounds))))))))
+    (when (and text no-properties (sequencep text))
+      (set-text-properties 0 (length text) nil text))
+    text))
 
 ;;;###autoload
 (defun bounds-of-thing-at-mouse (event thing)
diff --git a/lisp/thread.el b/lisp/thread.el
index efb058c436..1e6e9e75a7 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
 
 ;; Author: Gemini Lasswell <gazally@runbox.com>
 ;; Maintainer: emacs-devel@gnu.org
@@ -30,6 +30,13 @@
 (eval-when-compile (require 'pcase))
 (eval-when-compile (require 'subr-x))
 
+(declare-function thread-name "thread.c")
+(declare-function thread-signal "thread.c")
+(declare-function thread--blocker "thread.c")
+(declare-function current-thread "thread.c")
+(declare-function thread-live-p "thread.c")
+(declare-function all-threads "thread.c")
+
 ;;;###autoload
 (defun thread-handle-event (event)
   "Handle thread events, propagated by `thread-signal'.
diff --git a/lisp/thumbs.el b/lisp/thumbs.el
index 001b2c8e77..695fa8a856 100644
--- a/lisp/thumbs.el
+++ b/lisp/thumbs.el
@@ -1,6 +1,6 @@
 ;;; thumbs.el --- Thumbnails previewer for images files  -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 2004-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
 
 ;; Author: Jean-Philippe Theberge <jphiltheberge@videotron.ca>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/time-stamp.el b/lisp/time-stamp.el
index 04e736d027..7dd79d5bd3 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-2021 Free Software
+;; Copyright (C) 1989, 1993-1995, 1997, 2000-2022 Free Software
 ;; Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
diff --git a/lisp/time.el b/lisp/time.el
index 4f302caa67..cd985bfb28 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-2021 Free Software
+;; Copyright (C) 1985-1987, 1993-1994, 1996, 2000-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
@@ -355,7 +355,7 @@ update which can wait for the next redisplay."
          (am-pm (if (>= hour 12) "pm" "am"))
          (minutes (substring time 14 16))
          (seconds (substring time 17 19))
-         (time-zone (car (cdr (current-time-zone now))))
+        (time-zone (format-time-string "%Z" now))
          (day (substring time 8 10))
          (year (format-time-string "%Y" now))
          (monthname (substring time 4 7))
@@ -526,11 +526,9 @@ If the value is t instead of an alist, use the value of
   '((t :inherit font-lock-variable-name-face))
   "Face for time zone label in `world-clock' buffer.")
 
-(defvar world-clock-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map "n" #'next-line)
-    (define-key map "p" #'previous-line)
-    map))
+(defvar-keymap world-clock-mode-map
+  "n" #'next-line
+  "p" #'previous-line)
 
 (define-derived-mode world-clock-mode special-mode "World clock"
   "Major mode for buffer that displays times in various time zones.
diff --git a/lisp/timezone.el b/lisp/timezone.el
index 2c96343a74..1e257c62d3 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-2021 Free Software
+;; Copyright (C) 1990-1993, 1996, 1999, 2001-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Masanobu Umeda <umerin@mse.kyutech.ac.jp>
@@ -95,10 +95,7 @@ if nil, the local time zone is assumed."
 Optional argument TIMEZONE specifies a time zone."
   (let ((zone
         (if (listp timezone)
-            (let* ((m (timezone-zone-to-minute timezone))
-                   (absm (if (< m 0) (- m) m)))
-              (format "%c%02d%02d"
-                      (if (< m 0) ?- ?+) (/ absm 60) (% absm 60)))
+            (format-time-string "%z" 0 (or timezone 0))
           timezone)))
     (format "%02d %s %04d %s %s"
            day
@@ -302,11 +299,10 @@ Return a list in the same format as `current-time-zone's 
result,
 or nil if the local time zone could not be computed.
 DATE is the number of days elapsed since the (imaginary)
 Gregorian date Sunday, December 31, 1 BC."
-   (and (fboundp 'current-time-zone)
-       (let ((utc-time (timezone-time-from-absolute date seconds)))
-         (and utc-time
-              (let ((zone (current-time-zone utc-time)))
-                (and (car zone) zone))))))
+  (let ((utc-time (timezone-time-from-absolute date seconds)))
+    (and utc-time
+        (let ((zone (current-time-zone utc-time)))
+          (and (car zone) zone)))))
 
 (defun timezone-fix-time (date local timezone)
   "Convert DATE (default timezone LOCAL) to YYYY-MM-DD-HH-MM-SS-ZONE vector.
diff --git a/lisp/tmm.el b/lisp/tmm.el
index 0d8c22d871..d8beddca61 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1996, 2000-2022 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 f5d64aeb36..7ec5c0becc 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <fx@gnu.org>
 ;; Keywords: mouse frames
diff --git a/lisp/tooltip.el b/lisp/tooltip.el
index 6cc482d012..1cf16fdb5d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1999-2022 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 f80e6afb10..0d7f9d0317 100644
--- a/lisp/transient.el
+++ b/lisp/transient.el
@@ -1,6 +1,6 @@
 ;;; transient.el --- Transient commands          -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2018-2021  Free Software Foundation, Inc.
+;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
 
 ;; Author: Jonas Bernoulli <jonas@bernoul.li>
 ;; Homepage: https://github.com/magit/transient
diff --git a/lisp/tree-widget.el b/lisp/tree-widget.el
index 8691f03f86..4ba96a36a4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
 
 ;; Author: David Ponce <david@dponce.com>
 ;; Created: 16 Feb 2001
diff --git a/lisp/tutorial.el b/lisp/tutorial.el
index bf985280d8..2d313076e3 100644
--- a/lisp/tutorial.el
+++ b/lisp/tutorial.el
@@ -1,6 +1,6 @@
 ;;; tutorial.el --- tutorial for Emacs  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2006-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2022 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 a6d5cd0170..267facccc4 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-2021 Free Software Foundation,
+;; Copyright (C) 1994-1995, 1997, 2000-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Noah Friedman <friedman@splode.com>
diff --git a/lisp/uniquify.el b/lisp/uniquify.el
index ffb5ecc902..2ef1f04f70 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-2021 Free Software Foundation,
+;; Copyright (C) 1989, 1995-1997, 2001-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Dick King <king@reasoning.com>
@@ -476,34 +476,32 @@ For use on `kill-buffer-hook'."
 ;; rename-buffer and create-file-buffer.  (Setting find-file-hook isn't
 ;; sufficient.)
 
-(advice-add 'rename-buffer :around #'uniquify--rename-buffer-advice)
-(defun uniquify--rename-buffer-advice (rb-fun newname &optional unique &rest 
args)
+;; (advice-add 'rename-buffer :around #'uniquify--rename-buffer-advice)
+(defun uniquify--rename-buffer-advice (newname &optional unique)
+  ;; BEWARE: This is called directly from `buffer.c'!
   "Uniquify buffer names with parts of directory name."
-  (let ((retval (apply rb-fun newname unique args)))
   (uniquify-maybe-rerationalize-w/o-cb)
-    (if (null unique)
+  (if (null unique)
       ;; Mark this buffer so it won't be renamed by uniquify.
       (setq uniquify-managed nil)
     (when uniquify-buffer-name-style
       ;; Rerationalize w.r.t the new name.
       (uniquify-rationalize-file-buffer-names
-         newname
+       newname
        (uniquify-buffer-file-name (current-buffer))
-       (current-buffer))
-        (setq retval (buffer-name (current-buffer)))))
-    retval))
+       (current-buffer)))))
 
 
-(advice-add 'create-file-buffer :around #'uniquify--create-file-buffer-advice)
-(defun uniquify--create-file-buffer-advice (cfb-fun filename &rest args)
+;; (advice-add 'create-file-buffer :around 
#'uniquify--create-file-buffer-advice)
+(defun uniquify--create-file-buffer-advice (buf filename)
+  ;; BEWARE: This is called directly from `files.el'!
   "Uniquify buffer names with parts of directory name."
-  (let ((retval (apply cfb-fun filename args)))
-  (if uniquify-buffer-name-style
-        (let ((filename (expand-file-name (directory-file-name filename))))
-       (uniquify-rationalize-file-buffer-names
-        (file-name-nondirectory filename)
-           (file-name-directory filename) retval)))
-    retval))
+  (when uniquify-buffer-name-style
+    (let ((filename (expand-file-name (directory-file-name filename))))
+      (uniquify-rationalize-file-buffer-names
+       (file-name-nondirectory filename)
+       (file-name-directory filename)
+       buf))))
 
 (defun uniquify-unload-function ()
   "Unload the uniquify library."
@@ -513,8 +511,6 @@ For use on `kill-buffer-hook'."
        (set-buffer buf)
        (when uniquify-managed
          (push (cons buf (uniquify-item-base (car uniquify-managed))) 
buffers)))
-      (advice-remove 'rename-buffer #'uniquify--rename-buffer-advice)
-      (advice-remove 'create-file-buffer #'uniquify--create-file-buffer-advice)
       (dolist (buf buffers)
        (set-buffer (car buf))
        (rename-buffer (cdr buf) t))))
diff --git a/lisp/url/ChangeLog.1 b/lisp/url/ChangeLog.1
index cdd37a64cd..2f7813e64c 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-2021 Free Software Foundation,
+  Copyright (C) 1999, 2001-2002, 2004-2022 Free Software Foundation,
   Inc.
 
   This file is part of GNU Emacs.
diff --git a/lisp/url/url-about.el b/lisp/url/url-about.el
index 6ae90ccefa..3943cae9e5 100644
--- a/lisp/url/url-about.el
+++ b/lisp/url/url-about.el
@@ -1,6 +1,6 @@
 ;;; url-about.el --- Show internal URLs  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2001, 2004-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2004-2022 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes, hypermedia
 
diff --git a/lisp/url/url-auth.el b/lisp/url/url-auth.el
index 2d9a7758f1..585010d21c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2022 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes, hypermedia
 
diff --git a/lisp/url/url-cache.el b/lisp/url/url-cache.el
index f869d2e2cf..3e69227124 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2022 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes, hypermedia
 
diff --git a/lisp/url/url-cid.el b/lisp/url/url-cid.el
index 3095f7bd2c..c580a47d48 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-1999, 2004-2022 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes
 
diff --git a/lisp/url/url-cookie.el b/lisp/url/url-cookie.el
index 60388df255..6b9ce5da93 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2022 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes, hypermedia
 
diff --git a/lisp/url/url-dav.el b/lisp/url/url-dav.el
index 192b1ac4f4..f108639500 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2004-2022 Free Software Foundation, Inc.
 
 ;; Author: Bill Perry <wmperry@gnu.org>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/url/url-dired.el b/lisp/url/url-dired.el
index feb7c50ce5..1bbd741c1a 100644
--- a/lisp/url/url-dired.el
+++ b/lisp/url/url-dired.el
@@ -1,6 +1,6 @@
 ;;; url-dired.el --- URL Dired minor mode  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1996-1999, 2004-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2022 Free Software Foundation, Inc.
 
 ;; Keywords: comm, files
 
diff --git a/lisp/url/url-domsuf.el b/lisp/url/url-domsuf.el
index 59d70cbd0e..10de368317 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2022 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 4e737e965d..710986fd9a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2004-2022 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes
 
diff --git a/lisp/url/url-file.el b/lisp/url/url-file.el
index 0e2ab5544b..31e5c07234 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2022 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes
 
diff --git a/lisp/url/url-ftp.el b/lisp/url/url-ftp.el
index 3cda29a086..92445cac3f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2022 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes
 
diff --git a/lisp/url/url-future.el b/lisp/url/url-future.el
index c573317528..56787f7c5e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 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 caffa6fb7b..c4a41f56b3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2004-2022 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 650c610e04..74f77cd238 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2022 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes, hypermedia
 
@@ -396,7 +396,8 @@ if it had been inserted from a file named URL."
 (url-handlers-create-wrapper file-writable-p (url))
 (url-handlers-create-wrapper file-directory-p (url))
 (url-handlers-create-wrapper file-executable-p (url))
-(url-handlers-create-wrapper directory-files (url &optional full match nosort))
+(url-handlers-create-wrapper
+ directory-files (url &optional full match nosort count))
 (url-handlers-create-wrapper file-truename (url &optional counter prev-dirs))
 
 (add-hook 'find-file-hook #'url-handlers-set-buffer-mode)
diff --git a/lisp/url/url-history.el b/lisp/url/url-history.el
index 5dd1f09913..cb4814afca 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2022 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes, hypermedia
 
diff --git a/lisp/url/url-http.el b/lisp/url/url-http.el
index 44ebedeeae..16c3a6a1e6 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2001, 2004-2022 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 f2e9b4c4a1..2bc8b2026d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2004-2022 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 c895144ae2..9161f7d13e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2022 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes
 
diff --git a/lisp/url/url-ldap.el b/lisp/url/url-ldap.el
index 5d18f85fad..fabac30249 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-1999, 2004-2022 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes
 
diff --git a/lisp/url/url-mailto.el b/lisp/url/url-mailto.el
index 4fd631d295..4f75ce3620 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2022 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes
 
diff --git a/lisp/url/url-methods.el b/lisp/url/url-methods.el
index cfe7d5bc6a..70c4fbb986 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2022 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes, hypermedia
 
diff --git a/lisp/url/url-misc.el b/lisp/url/url-misc.el
index c741b6c85a..479f64c3e0 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-2021 Free Software Foundation,
+;; Copyright (C) 1996-1999, 2002, 2004-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Keywords: comm, data, processes
diff --git a/lisp/url/url-news.el b/lisp/url/url-news.el
index c9216862b0..519f23df31 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2022 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes
 
diff --git a/lisp/url/url-nfs.el b/lisp/url/url-nfs.el
index 0449930408..409b9d87be 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2022 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes
 
diff --git a/lisp/url/url-parse.el b/lisp/url/url-parse.el
index cd332f5ff7..24b064773b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2022 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes
 
diff --git a/lisp/url/url-privacy.el b/lisp/url/url-privacy.el
index 58ae6efbfc..f897248fe4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1999, 2004-2022 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes, hypermedia
 
@@ -48,6 +48,7 @@
          (pcase (or window-system 'tty)
            ('x "X11")
            ('ns "OpenStep")
+            ('pgtk "PureGTK")
            ('tty "TTY")
            (_ nil)))))
 
diff --git a/lisp/url/url-proxy.el b/lisp/url/url-proxy.el
index 0ffe51616d..c72e459a4e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2004-2022 Free Software Foundation, Inc.
 
 ;; Keywords: comm, data, processes, hypermedia
 
diff --git a/lisp/url/url-queue.el b/lisp/url/url-queue.el
index 0923731ad8..8741bca942 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 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 5cf0d804d6..30c1961407 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2022 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 7ffccfd3a0..b8b7980e40 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-1999, 2001, 2004-2021 Free Software Foundation,
+;; Copyright (C) 1996-1999, 2001, 2004-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Bill Perry <wmperry@gnu.org>
diff --git a/lisp/url/url-vars.el b/lisp/url/url-vars.el
index d916a71e41..83c089a930 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-1999, 2001, 2004-2021 Free Software Foundation,
+;; Copyright (C) 1996-1999, 2001, 2004-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Keywords: comm, data, processes, hypermedia
diff --git a/lisp/url/url.el b/lisp/url/url.el
index ccc95a6eec..4592f0f2e7 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-2021 Free Software Foundation,
+;; Copyright (C) 1996-1999, 2001, 2004-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Bill Perry <wmperry@gnu.org>
diff --git a/lisp/userlock.el b/lisp/userlock.el
index 9a2d45a846..a8e699385c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1986, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Richard King
 ;; (according to authors.el)
@@ -65,7 +65,7 @@ in any way you like."
              opponent))
       (while (null answer)
         (message (substitute-command-keys
-                  "%s locked by %s: (\\`s', \\`q', \\`p', \\`?'? ")
+                  "%s locked by %s: (\\`s', \\`q', \\`p', \\`?')? ")
                  short-file short-opponent)
        (if noninteractive (error "Cannot resolve lock conflict in batch mode"))
        (let ((tem (let ((inhibit-quit t)
diff --git a/lisp/vc/add-log.el b/lisp/vc/add-log.el
index 1290d7e03a..e9a21825e1 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-2021 Free
+;; Copyright (C) 1985-1986, 1988, 1993-1994, 1997-1998, 2000-2022 Free
 ;; Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
@@ -590,9 +590,8 @@ Compatibility function for \\[next-error] invocations."
     ["Go To Source" change-log-goto-source
      :help "Go to source location of ChangeLog tag near point"]))
 
-;; It used to be called change-log-time-zone-rule but really should be
-;; called add-log-time-zone-rule since it's only used from add-log-* code.
-(defvaralias 'change-log-time-zone-rule 'add-log-time-zone-rule)
+(define-obsolete-variable-alias 'change-log-time-zone-rule
+  'add-log-time-zone-rule "29.1")
 (defvar add-log-time-zone-rule nil
   "Time zone rule used for calculating change log time stamps.
 If nil, use local time.  If t, use Universal Time.
diff --git a/lisp/vc/compare-w.el b/lisp/vc/compare-w.el
index 29dfaa7668..b56b4c0d83 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, 1989, 1993, 1997, 2001-2021 Free Software
+;; Copyright (C) 1986, 1989, 1993, 1997, 2001-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/vc/cvs-status.el b/lisp/vc/cvs-status.el
index 7886cc1eae..7f921a7339 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords: pcl-cvs cvs status tree vc tools
@@ -30,12 +30,11 @@
 
 (require 'cl-lib)
 (require 'pcvs)
-(require 'easy-mmode)
 
 ;;;
 
 (defvar-keymap cvs-status-mode-map
-  :parent     'cvs-mode-map
+  :parent     cvs-mode-map
   "n"         #'next-line
   "p"         #'previous-line
   "N"         #'cvs-status-next
diff --git a/lisp/vc/diff-mode.el b/lisp/vc/diff-mode.el
index 8f83aa580e..37eaf254fd 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords: convenience patch diff vc
@@ -1479,6 +1479,14 @@ See `after-change-functions' for the meaning of BEG, END 
and LEN."
 (defvar whitespace-style)
 (defvar whitespace-trailing-regexp)
 
+(defvar-local diff-mode-read-only nil
+  "Non-nil when read-only diff buffer uses short keys.")
+
+;; It should be lower than `outline-minor-mode' and `view-mode'.
+(or (assq 'diff-mode-read-only minor-mode-map-alist)
+    (nconc minor-mode-map-alist
+           (list (cons 'diff-mode-read-only diff-mode-shared-map))))
+
 ;;;###autoload
 (define-derived-mode diff-mode fundamental-mode "Diff"
   "Major mode for viewing/editing context diffs.
@@ -1516,23 +1524,23 @@ a diff with \\[diff-reverse-direction].
 
   (diff-setup-whitespace)
 
-  (if diff-default-read-only
-      (setq buffer-read-only t))
+  ;; read-only setup
+  (when diff-default-read-only
+    (setq buffer-read-only t))
+  (when buffer-read-only
+    (setq diff-mode-read-only t))
+  (add-hook 'read-only-mode-hook
+            (lambda ()
+              (setq diff-mode-read-only buffer-read-only))
+            nil t)
+
   ;; setup change hooks
   (if (not diff-update-on-the-fly)
       (add-hook 'write-contents-functions #'diff-write-contents-hooks nil t)
     (make-local-variable 'diff-unhandled-changes)
     (add-hook 'after-change-functions #'diff-after-change-function nil t)
     (add-hook 'post-command-hook #'diff-post-command-hook nil t))
-  ;; Neat trick from Dave Love to add more bindings in read-only mode:
-  (let ((ro-bind (cons 'buffer-read-only diff-mode-shared-map)))
-    (add-to-list 'minor-mode-overriding-map-alist ro-bind)
-    ;; Turn off this little trick in case the buffer is put in view-mode.
-    (add-hook 'view-mode-hook
-             (lambda ()
-               (setq minor-mode-overriding-map-alist
-                     (delq ro-bind minor-mode-overriding-map-alist)))
-             nil t))
+
   ;; add-log support
   (setq-local add-log-current-defun-function #'diff-current-defun)
   (setq-local add-log-buffer-file-name-function
@@ -2612,19 +2620,17 @@ fixed, visit it in a buffer."
                          "\\(?:index.*\n\\)?"
                          "--- \\(?:" null-device "\\|a/\\(.*\\)\\)\n"
                          "\\+\\+\\+ \\(?:" null-device "\\|b/\\(.*\\)\\)\n"))))
-        (put-text-property (match-beginning 0)
-                           (or (match-beginning 2) (match-beginning 1))
-                           'display (propertize
-                                     (cond
-                                      ((null (match-beginning 1))
-                                       (concat "new file  " (match-string 2)))
-                                      ((null (match-beginning 2))
-                                       (concat "deleted   " (match-string 1)))
-                                      (t
-                                       (concat "modified  " (match-string 1))))
-                                     'face '(diff-file-header diff-header)))
-        (put-text-property (match-end 1) (1- (match-end 0))
-                           'display ""))))
+        (put-text-property (match-beginning 0) (1- (match-end 0))
+                           'display
+                           (propertize
+                            (cond
+                             ((null (match-string 1))
+                              (concat "new file  " (match-string 2)))
+                             ((null (match-string 2))
+                              (concat "deleted  " (match-string 1)))
+                             (t
+                              (concat "modified  " (match-string 1))))
+                            'face '(diff-file-header diff-header))))))
   nil)
 
 ;;; Syntax highlighting from font-lock
diff --git a/lisp/vc/diff.el b/lisp/vc/diff.el
index 4061fedd57..4abcf6c15a 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-2021 Free Software Foundation,
+;; Copyright (C) 1992, 1994, 1996, 2001-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Frank Bresz
diff --git a/lisp/vc/ediff-diff.el b/lisp/vc/ediff-diff.el
index 68abea794f..ca56a2851d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2022 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 48e1f15f05..4e41204169 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2022 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 ff48bb3845..cee376de30 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2022 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 4b352bd34f..de0a4d71ed 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2022 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 d0ce9d326d..de8c587b1c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2022 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 bec0ec0120..4871690111 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995-2022 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 a03c6a5ed7..17654f80ec 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2022 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 d4660a179e..b41def2aff 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2022 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 ;; Package: ediff
@@ -521,7 +521,25 @@ to invocation.")
     (erase-buffer)
     (ediff-set-help-message)
     (insert ediff-help-message)
-    (shrink-window-if-larger-than-buffer)
+    ;; With the fix for Bug#49277 and an 'ediff-setup-windows-plain'
+    ;; layout, the window of the control buffer we want to adjust here
+    ;; is no longer the lower of two windows on their frame both showing
+    ;; that control buffer but rather the bottom-most window in the
+    ;; established ediff layout for that frame.  As a consequence,
+    ;; 'shrink-window-if-larger-than-buffer' will fail to show the whole
+    ;; buffer with 'ediff-toggle-help' because that window's maximum
+    ;; height is not half the height of its frame but the height of the
+    ;; control buffer's window in the established layout (Bug#52504).
+    ;;
+    ;; The form below is an attempt to emulate the behavior of Emacs 27
+    ;; as faithfully as possible in this regard (the use of 'ceiling'
+    ;; mimics the behavior of 'split-window' giving the lower window the
+    ;; residue line when the window to split has an uneven number of
+    ;; lines).
+    (when (and (window-combined-p)
+              (pos-visible-in-window-p (point-min)))
+      (fit-window-to-buffer
+       nil (ceiling (/ (window-total-height (frame-root-window)) 2.0))))
     (or (ediff-multiframe-setup-p)
        (ediff-indent-help-message))
     (ediff-set-help-overlays)
diff --git a/lisp/vc/ediff-vers.el b/lisp/vc/ediff-vers.el
index 0646ba3cc2..2fdbe64147 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1997, 2001-2022 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 bc6aa28850..1e702edb41 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-1997, 2000-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1997, 2000-2022 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 cb4c8d9305..840ab8cf51 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2022 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 6e3f302263..79dafe60cc 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 d45c1696a2..9952345db5 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 c3109f7e85..2f11716bde 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1991-2022 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 21fe98daca..11d14f9576 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1991-2022 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 3a96c93054..77c5469a17 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1991-2022 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords: pcl-cvs
diff --git a/lisp/vc/pcvs-util.el b/lisp/vc/pcvs-util.el
index 75d9fe9bee..702033dd88 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1991-2022 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 2d7b8cb2ef..c19fe9bd2a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1991-2022 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 6c1b8cc95b..6a4f6542b5 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 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 def87db871..bd4ff3e015 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2000-2022 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 48fedeca5a..836630acb5 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2022 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 c895447224..e234b9a044 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1998-2022 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 49a8af10e7..61e2cd2390 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2004-2022 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 8165d5e09f..ba6e098d98 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
 
 ;; Author: Dan Nicolaescu <dann@ics.uci.edu>
 ;; Keywords: vc tools
@@ -1427,7 +1427,12 @@ These are the commands available for use in the file 
status buffer:
       (vc-dir-refresh)
     ;; FIXME: find a better way to pass the backend to `vc-dir-mode'.
     (let ((use-vc-backend backend))
-      (vc-dir-mode))))
+      (vc-dir-mode)
+      ;; Activate the backend-specific minor mode, if any.
+      (when-let ((minor-mode
+                  (intern-soft (format "vc-dir-%s-mode"
+                                       (downcase (symbol-name backend))))))
+        (funcall minor-mode 1)))))
 
 (defun vc-default-dir-extra-headers (_backend _dir)
   ;; Be loud by default to remind people to add code to display
diff --git a/lisp/vc/vc-dispatcher.el b/lisp/vc/vc-dispatcher.el
index 346974bdba..5c664d58f1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
 
 ;; Author: FSF (see below for full credits)
 ;; Keywords: vc tools
@@ -127,8 +127,12 @@ preserve the setting."
   :group 'vc)
 
 (defcustom vc-command-messages nil
-  "If non-nil, display run messages from back-end commands."
-  :type 'boolean
+  "If non-nil, display and log messages about running back-end commands.
+If the value is `log', messages about running VC back-end commands are
+logged in the *Messages* buffer, but not displayed."
+  :type '(choice (const :tag "No messages" nil)
+                 (const :tag "Display and log messages" t)
+                 (const :tag "Log messages, but don't display" log))
   :group 'vc)
 
 (defcustom vc-suppress-confirm nil
@@ -311,7 +315,10 @@ case, and the process object in the asynchronous case."
                      (substring command 0 -1)
                    command)
                  " " (vc-delistify flags)
-                 " " (vc-delistify files))))
+                 " " (vc-delistify files)))
+        (vc-inhibit-message
+         (or (eq vc-command-messages 'log)
+             (eq (selected-window) (active-minibuffer-window)))))
     (save-current-buffer
       (unless (or (eq buffer t)
                  (and (stringp buffer)
@@ -335,7 +342,7 @@ case, and the process object in the asynchronous case."
                       (apply #'start-file-process command (current-buffer)
                               command squeezed))))
                (when vc-command-messages
-                 (let ((inhibit-message (eq (selected-window) 
(active-minibuffer-window))))
+                 (let ((inhibit-message vc-inhibit-message))
                    (message "Running in background: %s" full-command)))
                 ;; Get rid of the default message insertion, in case we don't
                 ;; set a sentinel explicitly.
@@ -345,11 +352,11 @@ case, and the process object in the asynchronous case."
                (when vc-command-messages
                  (vc-run-delayed
                    (let ((message-truncate-lines t)
-                         (inhibit-message (eq (selected-window) 
(active-minibuffer-window))))
+                         (inhibit-message vc-inhibit-message))
                      (message "Done in background: %s" full-command)))))
            ;; Run synchronously
            (when vc-command-messages
-             (let ((inhibit-message (eq (selected-window) 
(active-minibuffer-window))))
+             (let ((inhibit-message vc-inhibit-message))
                (message "Running in foreground: %s" full-command)))
            (let ((buffer-undo-list t))
              (setq status (apply #'process-file command nil t nil squeezed)))
@@ -364,7 +371,7 @@ case, and the process object in the asynchronous case."
                     (if (integerp status) (format "status %d" status) status)
                     full-command))
            (when vc-command-messages
-             (let ((inhibit-message (eq (selected-window) 
(active-minibuffer-window))))
+             (let ((inhibit-message vc-inhibit-message))
                (message "Done (status=%d): %s" status full-command)))))
        (vc-run-delayed
          (run-hook-with-args 'vc-post-command-functions
diff --git a/lisp/vc/vc-filewise.el b/lisp/vc/vc-filewise.el
index 254e47933d..252e6edd6e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1992-1996, 1998-2022 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 4b6cd93074..ad39dc604a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2022 Free Software Foundation, Inc.
 
 ;; Author: Alexandre Julliard <julliard@winehq.org>
 ;; Keywords: vc tools
@@ -223,6 +223,12 @@ included in the completions."
 ;; History of Git commands.
 (defvar vc-git-history nil)
 
+;; Default to t because commands which don't support literal pathspecs
+;; ignore the environment variable silently.
+(defvar vc-git-use-literal-pathspecs t
+  "Non-nil to treat pathspecs in commands literally.
+Good example of file name that needs this: \"test[56].xx\".")
+
 ;; Clear up the cache to force vc-call to check again and discover
 ;; new functions when we reload this file.
 (put 'Git 'vc-functions nil)
@@ -242,20 +248,6 @@ included in the completions."
 ;;;###autoload         (load "vc-git" nil t)
 ;;;###autoload         (vc-git-registered file))))
 
-;; Good example of file name that needs this: "test[56].xx".
-(defun vc-git--literal-pathspec (file)
-  "Prepend :(literal) path magic to FILE."
-  (when file
-    ;; Expand abbreviated file names.
-    (when (file-name-absolute-p file)
-      (setq file (expand-file-name file)))
-    (concat ":(literal)" (file-local-name file))))
-
-(defun vc-git--literal-pathspecs (files)
-  "Prepend :(literal) path magic to FILES."
-  (unless (vc-git--file-list-is-rootdir files)
-    (mapcar #'vc-git--literal-pathspec files)))
-
 (defun vc-git-registered (file)
   "Check whether FILE is registered with git."
   (let ((dir (vc-git-root file)))
@@ -269,12 +261,12 @@ included in the completions."
                (name (file-relative-name file dir))
                (str (with-demoted-errors "Error: %S"
                       (cd dir)
-                      (vc-git--out-ok "ls-files" "-c" "-z" "--" 
(vc-git--literal-pathspec name))
+                      (vc-git--out-ok "ls-files" "-c" "-z" "--" name)
                       ;; If result is empty, use ls-tree to check for deleted
                       ;; file.
                       (when (eq (point-min) (point-max))
                         (vc-git--out-ok "ls-tree" "--name-only" "-z" "HEAD"
-                                        "--" (vc-git--literal-pathspec name)))
+                                        "--" name))
                       (buffer-string))))
           (and str
                (> (length str) (length name))
@@ -298,12 +290,14 @@ included in the completions."
              (vc-git--run-command-string nil "version")))
         (setq vc-git--program-version
               (if (and version-string
-                       ;; Git for Windows appends ".windows.N" to the
-                       ;; numerical version reported by Git.
-                       (string-match
-                        "git version \\([0-9.]+\\)\\(\\.windows\\.[0-9]+\\)?$"
-                        version-string))
-                  (match-string 1 version-string)
+                       ;; Some Git versions append additional strings
+                       ;; to the numerical version string. E.g., Git
+                       ;; for Windows appends ".windows.N", while Git
+                       ;; for Mac appends " (Apple Git-N)". Capture
+                       ;; numerical version and ignore the rest.
+                       (string-match "git version \\([0-9][0-9.]+\\)"
+                                     version-string))
+                  (string-trim-right (match-string 1 version-string) "\\.")
                 "0")))))
 
 (defun vc-git--git-status-to-vc-state (code-list)
@@ -356,7 +350,7 @@ in the order given by `git status'."
             ,@(when (version<= "1.7.6.3" (vc-git--program-version))
                 '("--ignored"))
             "--"))
-        (status (apply #'vc-git--run-command-string (vc-git--literal-pathspec 
file) args)))
+        (status (apply #'vc-git--run-command-string file args)))
     (if (null status)
         ;; If status is nil, there was an error calling git, likely because
         ;; the file is not in a git repo.
@@ -634,28 +628,28 @@ or an empty string if none."
     (pcase (vc-git-dir-status-state->stage git-state)
       ('update-index
        (if files
-           (vc-git-command (current-buffer) 'async (vc-git--literal-pathspecs 
files) "add" "--refresh" "--")
+           (vc-git-command (current-buffer) 'async files "add" "--refresh" 
"--")
          (vc-git-command (current-buffer) 'async nil
                          "update-index" "--refresh")))
       ('ls-files-added
-       (vc-git-command (current-buffer) 'async (vc-git--literal-pathspecs 
files)
+       (vc-git-command (current-buffer) 'async files
                        "ls-files" "-z" "-c" "-s" "--"))
       ('ls-files-up-to-date
-       (vc-git-command (current-buffer) 'async (vc-git--literal-pathspecs 
files)
+       (vc-git-command (current-buffer) 'async files
                        "ls-files" "-z" "-c" "-s" "--"))
       ('ls-files-conflict
-       (vc-git-command (current-buffer) 'async (vc-git--literal-pathspecs 
files)
+       (vc-git-command (current-buffer) 'async files
                        "ls-files" "-z" "-u" "--"))
       ('ls-files-unknown
-       (vc-git-command (current-buffer) 'async (vc-git--literal-pathspecs 
files)
+       (vc-git-command (current-buffer) 'async files
                        "ls-files" "-z" "-o" "--exclude-standard" "--"))
       ('ls-files-ignored
-       (vc-git-command (current-buffer) 'async (vc-git--literal-pathspecs 
files)
+       (vc-git-command (current-buffer) 'async files
                        "ls-files" "-z" "-o" "-i" "--directory"
                        "--no-empty-directory" "--exclude-standard" "--"))
       ;; --relative added in Git 1.5.5.
       ('diff-index
-       (vc-git-command (current-buffer) 'async (vc-git--literal-pathspecs 
files)
+       (vc-git-command (current-buffer) 'async files
                        "diff-index" "--relative" "-z" "-M" "HEAD" "--")))
     (vc-run-delayed
       (vc-git-after-dir-status-stage git-state))))
@@ -883,12 +877,12 @@ The car of the list is the current branch."
     (when flist
       (vc-git-command nil 0 flist "update-index" "--add" "--"))
     (when dlist
-      (vc-git-command nil 0 (vc-git--literal-pathspecs dlist) "add"))))
+      (vc-git-command nil 0 dlist "add"))))
 
 (defalias 'vc-git-responsible-p #'vc-git-root)
 
 (defun vc-git-unregister (file)
-  (vc-git-command nil 0 (vc-git--literal-pathspec file) "rm" "-f" "--cached" 
"--"))
+  (vc-git-command nil 0 file "rm" "-f" "--cached" "--"))
 
 (declare-function log-edit-mode "log-edit" ())
 (declare-function log-edit-toggle-header "log-edit" (header value))
@@ -954,7 +948,7 @@ It is based on `log-edit-mode', and has Git-specific 
extensions.")
                (lambda (value) (when (equal value "yes") (list argument)))))
       ;; When operating on the whole tree, better pass "-a" than ".", since "."
       ;; fails when we're committing a merge.
-      (apply #'vc-git-command nil 0 (if only (vc-git--literal-pathspecs files))
+      (apply #'vc-git-command nil 0 (if only files)
              (nconc (if msg-file (list "commit" "-F"
                                        (file-local-name msg-file))
                       (list "commit" "-m"))
@@ -981,7 +975,7 @@ It is based on `log-edit-mode', and has Git-specific 
extensions.")
         (coding-system-for-write 'binary)
         (fullname
          (let ((fn (vc-git--run-command-string
-                    (vc-git--literal-pathspec file) "ls-files" "-z" 
"--full-name" "--")))
+                    file "ls-files" "-z" "--full-name" "--")))
            ;; ls-files does not return anything when looking for a
            ;; revision of a file that has been renamed or removed.
            (if (string= fn "")
@@ -998,14 +992,14 @@ It is based on `log-edit-mode', and has Git-specific 
extensions.")
                    (vc-git-root file)))
 
 (defun vc-git-checkout (file &optional rev)
-  (vc-git-command nil 0 (vc-git--literal-pathspec file) "checkout" (or rev 
"HEAD")))
+  (vc-git-command nil 0 file "checkout" (or rev "HEAD")))
 
 (defun vc-git-revert (file &optional contents-done)
   "Revert FILE to the version stored in the git repository."
   (if contents-done
       (vc-git-command nil 0 file "update-index" "--")
-    (vc-git-command nil 0 (vc-git--literal-pathspec file) "reset" "-q" "--")
-    (vc-git-command nil nil (vc-git--literal-pathspec file) "checkout" "-q" 
"--")))
+    (vc-git-command nil 0 file "reset" "-q" "--")
+    (vc-git-command nil nil file "checkout" "-q" "--")))
 
 (defvar vc-git-error-regexp-alist
   '(("^ \\(.+\\)\\> *|" 1 nil nil 0))
@@ -1089,7 +1083,7 @@ This prompts for a branch to merge from."
 (defun vc-git-conflicted-files (directory)
   "Return the list of files with conflicts in DIRECTORY."
   (let* ((status
-          (vc-git--run-command-string (vc-git--literal-pathspec directory) 
"status" "--porcelain" "--"))
+          (vc-git--run-command-string directory "status" "--porcelain" "--"))
          (lines (when status (split-string status "\n" 'omit-nulls)))
          files)
     (dolist (line lines files)
@@ -1178,7 +1172,7 @@ If LIMIT is a revision string, use it as an end-revision."
     (let ((inhibit-read-only t))
       (with-current-buffer buffer
        (apply #'vc-git-command buffer
-              'async (vc-git--literal-pathspecs files)
+              'async files
               (append
                '("log" "--no-color")
                 (when (and vc-git-print-log-follow
@@ -1432,7 +1426,7 @@ This requires git 1.8.4 or later, for the \"-L\" option 
of \"git log\"."
     (if vc-git-diff-switches
         (apply #'vc-git-command (or buffer "*vc-diff*")
               1 ; bug#21969
-              (vc-git--literal-pathspecs files)
+               files
                command
                "--exit-code"
                (append (vc-switches 'git 'diff)
@@ -1517,7 +1511,7 @@ This requires git 1.8.4 or later, for the \"-L\" option 
of \"git log\"."
       (let* ((fname (file-relative-name file))
              (prev-rev (with-temp-buffer
                          (and
-                          (vc-git--out-ok "rev-list" "-2" rev "--" 
(vc-git--literal-pathspec fname))
+                          (vc-git--out-ok "rev-list" "-2" rev "--" fname)
                           (goto-char (point-max))
                           (bolp)
                           (zerop (forward-line -1))
@@ -1545,7 +1539,7 @@ This requires git 1.8.4 or later, for the \"-L\" option 
of \"git log\"."
          (current-rev
           (with-temp-buffer
             (and
-             (vc-git--out-ok "rev-list" "-1" rev "--" 
(vc-git--literal-pathspec file))
+             (vc-git--out-ok "rev-list" "-1" rev "--" file)
              (goto-char (point-max))
              (bolp)
              (zerop (forward-line -1))
@@ -1557,7 +1551,7 @@ This requires git 1.8.4 or later, for the \"-L\" option 
of \"git log\"."
           (and current-rev
                (with-temp-buffer
                  (and
-                  (vc-git--out-ok "rev-list" "HEAD" "--" 
(vc-git--literal-pathspec file))
+                  (vc-git--out-ok "rev-list" "HEAD" "--" file)
                   (goto-char (point-min))
                   (search-forward current-rev nil t)
                   (zerop (forward-line -1))
@@ -1567,13 +1561,13 @@ This requires git 1.8.4 or later, for the \"-L\" option 
of \"git log\"."
     (or (vc-git-symbolic-commit next-rev) next-rev)))
 
 (defun vc-git-delete-file (file)
-  (vc-git-command nil 0 (vc-git--literal-pathspec file) "rm" "-f" "--"))
+  (vc-git-command nil 0 file "rm" "-f" "--"))
 
 (defun vc-git-rename-file (old new)
   (vc-git-command nil 0 (list old new) "mv" "-f" "--"))
 
 (defun vc-git-mark-resolved (files)
-  (vc-git-command nil 0 (vc-git--literal-pathspecs files) "add"))
+  (vc-git-command nil 0 files "add"))
 
 (defvar vc-git-extra-menu-map
   (let ((map (make-sparse-keymap)))
@@ -1701,8 +1695,8 @@ This command shares argument histories with \\[rgrep] and 
\\[grep]."
   (vc-setup-buffer "*vc-git-stash*")
   (vc-git-command "*vc-git-stash*" 'async nil "stash" "show" "-p" name)
   (set-buffer "*vc-git-stash*")
-  (diff-mode)
   (setq buffer-read-only t)
+  (diff-mode)
   (pop-to-buffer (current-buffer)))
 
 (defun vc-git-stash-apply (name)
@@ -1795,6 +1789,8 @@ The difference to vc-do-command is that this function 
always invokes
         (process-environment
          (append
           `("GIT_DIR"
+            ,@(when vc-git-use-literal-pathspecs
+                '("GIT_LITERAL_PATHSPECS=1"))
             ;; Avoid repository locking during background operations
             ;; (bug#21559).
             ,@(when revert-buffer-in-progress-p
@@ -1832,6 +1828,8 @@ The difference to vc-do-command is that this function 
always invokes
        (process-environment
         (append
          `("GIT_DIR"
+            ,@(when vc-git-use-literal-pathspecs
+                '("GIT_LITERAL_PATHSPECS=1"))
            ;; Avoid repository locking during background operations
            ;; (bug#21559).
            ,@(when revert-buffer-in-progress-p
@@ -1870,6 +1868,17 @@ Returns nil if not possible."
                                                       (1- (point-max)))))))
          (and name (not (string= name "undefined")) name))))
 
+(defvar-keymap vc-dir-git-mode-map
+  "z c" #'vc-git-stash
+  "z s" #'vc-git-stash-snapshot
+  "z p" #'vc-git-stash-pop)
+
+(define-minor-mode vc-dir-git-mode
+  "A minor mode for git-specific commands in `vc-dir-mode' buffers.
+Also note that there are git stash commands available in the
+\"Stash\" section at the head of the buffer."
+  :lighter " Git")
+
 (provide 'vc-git)
 
 ;;; vc-git.el ends here
diff --git a/lisp/vc/vc-hg.el b/lisp/vc/vc-hg.el
index 6bec9edbf3..026f125396 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2022 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 cd5b11d840..e71796b745 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1992-1996, 1998-2022 Free Software Foundation, Inc.
 
 ;; Author: FSF (see vc.el for full credits)
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/vc/vc-mtn.el b/lisp/vc/vc-mtn.el
index ea69893071..20fbf92bb1 100644
--- a/lisp/vc/vc-mtn.el
+++ b/lisp/vc/vc-mtn.el
@@ -1,6 +1,6 @@
 ;;; vc-mtn.el --- VC backend for Monotone  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2007-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2022 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords: vc
diff --git a/lisp/vc/vc-rcs.el b/lisp/vc/vc-rcs.el
index 2422e99d3d..20f3b1fba7 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2022 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 4b56fbf28e..4bbf92b327 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2022 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 b408b7de76..1c1a7b5d13 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2022 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 e14519cc20..b38a676acb 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2022 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 64f752f248..ef3354701c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1992-1998, 2000-2022 Free Software Foundation, Inc.
 
 ;; Author: FSF (see below for full credits)
 ;; Maintainer: emacs-devel@gnu.org
@@ -1730,12 +1730,22 @@ to override the value of `vc-diff-switches' and 
`diff-switches'."
       ;; any switches in diff-switches.
       (when (listp switches) switches))))
 
+(defun vc-shrink-buffer-window (&optional buffer)
+  "Call `shrink-window-if-larger-than-buffer' only when BUFFER is visible.
+BUFFER defaults to the current buffer."
+  (let ((window (get-buffer-window buffer t)))
+    (when window
+      (shrink-window-if-larger-than-buffer window))))
+
+(defvar vc-diff-finish-functions '(vc-shrink-buffer-window)
+  "Functions run at the end of the diff command.
+Each function runs in the diff output buffer without args.")
+
 (defun vc-diff-finish (buffer messages)
   ;; The empty sync output case has already been handled, so the only
   ;; possibility of an empty output is for an async process.
   (when (buffer-live-p buffer)
-    (let ((window (get-buffer-window buffer t))
-         (emptyp (zerop (buffer-size buffer))))
+    (let ((emptyp (zerop (buffer-size buffer))))
       (with-current-buffer buffer
        (and messages emptyp
             (let ((inhibit-read-only t))
@@ -1744,8 +1754,7 @@ to override the value of `vc-diff-switches' and 
`diff-switches'."
        (diff-setup-whitespace)
        (diff-setup-buffer-type)
        (goto-char (point-min))
-       (when window
-         (shrink-window-if-larger-than-buffer window)))
+       (run-hooks 'vc-diff-finish-functions))
       (when (and messages (not emptyp))
        (message "%sdone" (car messages))))))
 
@@ -1808,16 +1817,16 @@ Return t if the buffer had changes, nil otherwise."
         (setq files (nreverse filtered))))
     (vc-call-backend (car vc-fileset) 'diff files rev1 rev2 buffer async)
     (set-buffer buffer)
+    ;; Make the *vc-diff* buffer read only, the diff-mode key
+    ;; bindings are nicer for read only buffers. pcl-cvs does the
+    ;; same thing.
+    (setq buffer-read-only t)
     (diff-mode)
     (setq-local diff-vc-backend (car vc-fileset))
     (setq-local diff-vc-revisions (list rev1 rev2))
     (setq-local revert-buffer-function
                 (lambda (_ignore-auto _noconfirm)
                   (vc-diff-internal async vc-fileset rev1 rev2 verbose)))
-    ;; Make the *vc-diff* buffer read only, the diff-mode key
-    ;; bindings are nicer for read only buffers. pcl-cvs does the
-    ;; same thing.
-    (setq buffer-read-only t)
     (if (and (zerop (buffer-size))
              (not (get-buffer-process (current-buffer))))
         ;; Treat this case specially so as not to pop the buffer.
@@ -2498,6 +2507,10 @@ earlier revisions.  Show up to LIMIT entries (non-nil 
means unlimited)."
 (put 'vc-log-view-type 'permanent-local t)
 (defvar vc-sentinel-movepoint)
 
+(defvar vc-log-finish-functions '(vc-shrink-buffer-window)
+  "Functions run at the end of the log command.
+Each function runs in the log output buffer without args.")
+
 (defun vc-log-internal-common (backend
                               buffer-name
                               files
@@ -2529,11 +2542,11 @@ earlier revisions.  Show up to LIMIT entries (non-nil 
means unlimited)."
     (vc-run-delayed
      (let ((inhibit-read-only t))
        (funcall setup-buttons-func backend files retval)
-       (shrink-window-if-larger-than-buffer)
        (when goto-location-func
          (funcall goto-location-func backend)
          (setq vc-sentinel-movepoint (point)))
-       (set-buffer-modified-p nil)))))
+       (set-buffer-modified-p nil)
+       (run-hooks 'vc-log-finish-functions)))))
 
 (defun vc-incoming-outgoing-internal (backend remote-location buffer-name type)
   (vc-log-internal-common
@@ -2755,7 +2768,7 @@ to the working revision (except for keyword expansion)."
     (unwind-protect
        (when (if vc-revert-show-diff
                  (progn
-                   (setq diff-buffer (generate-new-buffer-name "*vc-diff*"))
+                   (setq diff-buffer (generate-new-buffer "*vc-diff*"))
                    (vc-diff-internal vc-allow-async-revert vc-fileset
                                      nil nil nil diff-buffer))
                ;; Avoid querying the user again.
diff --git a/lisp/vcursor.el b/lisp/vcursor.el
index df65db39e3..8b7105df51 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, 1996, 1998, 2001-2021 Free Software Foundation,
+;; Copyright (C) 1994, 1996, 1998, 2001-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Peter Stephenson <pws@ibmth.df.unipi.it>
diff --git a/lisp/version.el b/lisp/version.el
index 5d0a1ae37d..45f72b4329 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-2021 Free Software
+;; Copyright (C) 1985, 1992, 1994-1995, 1999-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/view.el b/lisp/view.el
index 3476ced3f7..bfc0341b2a 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, 1989, 1994-1995, 1997, 2000-2021 Free Software
+;; Copyright (C) 1985, 1989, 1994-1995, 1997, 2000-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Author: K. Shane Hartman
@@ -36,8 +36,8 @@
 
 ;;; Suggested key bindings:
 ;;
-;; (define-key ctl-x-4-map "v" #'view-file-other-window)  ; ^x4v
-;; (define-key ctl-x-5-map "v" #'view-file-other-frame)   ; ^x5v
+;; (keymap-set ctl-x-4-map "v" #'view-file-other-window)  ; C-x 4 v
+;; (keymap-set ctl-x-5-map "v" #'view-file-other-frame)   ; C-x 5 v
 ;;
 ;; You could also bind `view-file', `view-buffer', `view-buffer-other-window' 
and
 ;; `view-buffer-other-frame' to keys.
@@ -142,68 +142,68 @@ that use View mode automatically.")
 (defvar-local view-overlay nil
   "Overlay used to display where a search operation found its match.
 This is local in each buffer, once it is used.")
+
 
-;; Define keymap inside defvar to make it easier to load changes.
 ;; Some redundant "less"-like key bindings below have been commented out.
-(defvar view-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map "C" #'View-kill-and-leave)
-    (define-key map "c" #'View-leave)
-    (define-key map "Q" #'View-quit-all)
-    (define-key map "E" #'View-exit-and-edit)
-    ;; (define-key map "v" #'View-exit)
-    (define-key map "e" #'View-exit)
-    (define-key map "q" #'View-quit)
-    ;; (define-key map "N" #'View-search-last-regexp-backward)
-    (define-key map "p" #'View-search-last-regexp-backward)
-    (define-key map "n" #'View-search-last-regexp-forward)
-    ;; (define-key map "?" #'View-search-regexp-backward) ; Less does this.
-    (define-key map "\\" #'View-search-regexp-backward)
-    (define-key map "/" #'View-search-regexp-forward)
-    (define-key map "r" #'isearch-backward)
-    (define-key map "s" #'isearch-forward)
-    (define-key map "m" #'point-to-register)
-    (define-key map "'" #'register-to-point)
-    (define-key map "x" #'exchange-point-and-mark)
-    (define-key map "@" #'View-back-to-mark)
-    (define-key map "." #'set-mark-command)
-    (define-key map "%" #'View-goto-percent)
-    ;; (define-key map "G" #'View-goto-line-last)
-    (define-key map "g" #'View-goto-line)
-    (define-key map "=" #'what-line)
-    (define-key map "F" #'View-revert-buffer-scroll-page-forward)
-    ;; (define-key map "k" #'View-scroll-line-backward)
-    (define-key map "y" #'View-scroll-line-backward)
-    ;; (define-key map "j" #'View-scroll-line-forward)
-    (define-key map "\n" #'View-scroll-line-forward)
-    (define-key map "\r" #'View-scroll-line-forward)
-    (define-key map "u" #'View-scroll-half-page-backward)
-    (define-key map "d" #'View-scroll-half-page-forward)
-    (define-key map "z" #'View-scroll-page-forward-set-page-size)
-    (define-key map "w" #'View-scroll-page-backward-set-page-size)
-    ;; (define-key map "b" #'View-scroll-page-backward)
-    (define-key map "\C-?" #'View-scroll-page-backward)
-    ;; (define-key map "f" #'View-scroll-page-forward)
-    (define-key map " " #'View-scroll-page-forward)
-    (define-key map [?\S-\ ] #'View-scroll-page-backward)
-    (define-key map "o" #'View-scroll-to-buffer-end)
-    (define-key map ">" #'end-of-buffer)
-    (define-key map "<" #'beginning-of-buffer)
-    (define-key map "-" #'negative-argument)
-    (define-key map "9" #'digit-argument)
-    (define-key map "8" #'digit-argument)
-    (define-key map "7" #'digit-argument)
-    (define-key map "6" #'digit-argument)
-    (define-key map "5" #'digit-argument)
-    (define-key map "4" #'digit-argument)
-    (define-key map "3" #'digit-argument)
-    (define-key map "2" #'digit-argument)
-    (define-key map "1" #'digit-argument)
-    (define-key map "0" #'digit-argument)
-    (define-key map "H" #'describe-mode)
-    (define-key map "?" #'describe-mode)       ; Maybe do as less instead? See 
above.
-    (define-key map "h" #'describe-mode)
-    map))
+(defvar-keymap view-mode-map
+  :doc "Keymap for ‘view-mode’."
+  "C"     #'View-kill-and-leave
+  "c"     #'View-leave
+  "Q"     #'View-quit-all
+  "E"     #'View-exit-and-edit
+  ;; "v"  #'View-exit
+  "e"     #'View-exit
+  "q"     #'View-quit
+  ;; "N"  #'View-search-last-regexp-backward
+  "p"     #'View-search-last-regexp-backward
+  "n"     #'View-search-last-regexp-forward
+  ;; "?"  #'View-search-regexp-backward ; Less does this.
+  "\\"    #'View-search-regexp-backward
+  "/"     #'View-search-regexp-forward
+  "r"     #'isearch-backward
+  "s"     #'isearch-forward
+  "m"     #'point-to-register
+  "'"     #'register-to-point
+  "x"     #'exchange-point-and-mark
+  "@"     #'View-back-to-mark
+  "."     #'set-mark-command
+  "%"     #'View-goto-percent
+  ;; "G"  #'View-goto-line-last
+  "g"     #'View-goto-line
+  "="     #'what-line
+  "F"     #'View-revert-buffer-scroll-page-forward
+  ;; "k"  #'View-scroll-line-backward
+  "y"     #'View-scroll-line-backward
+  ;; "j"  #'View-scroll-line-forward
+  "C-j"   #'View-scroll-line-forward
+  "RET"   #'View-scroll-line-forward
+  "u"     #'View-scroll-half-page-backward
+  "d"     #'View-scroll-half-page-forward
+  "z"     #'View-scroll-page-forward-set-page-size
+  "w"     #'View-scroll-page-backward-set-page-size
+  ;; "b"  #'View-scroll-page-backward
+  "DEL"   #'View-scroll-page-backward
+  ;; "f"  #'View-scroll-page-forward
+  "SPC"   #'View-scroll-page-forward
+  "S-SPC" #'View-scroll-page-backward
+  "o"     #'View-scroll-to-buffer-end
+  ">"     #'end-of-buffer
+  "<"     #'beginning-of-buffer
+  "-"     #'negative-argument
+  "9"     #'digit-argument
+  "8"     #'digit-argument
+  "7"     #'digit-argument
+  "6"     #'digit-argument
+  "5"     #'digit-argument
+  "4"     #'digit-argument
+  "3"     #'digit-argument
+  "2"     #'digit-argument
+  "1"     #'digit-argument
+  "0"     #'digit-argument
+  "H"     #'describe-mode
+  "?"     #'describe-mode      ; Maybe do as less instead? See above.
+  "h"     #'describe-mode)
+
 
 ;;; Commands that enter or exit view mode.
 
diff --git a/lisp/vt-control.el b/lisp/vt-control.el
index 8f62b5757a..b80d3505b3 100644
--- a/lisp/vt-control.el
+++ b/lisp/vt-control.el
@@ -1,6 +1,6 @@
 ;;; vt-control.el --- Common VTxxx control functions  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1993-1994, 2001-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Rob Riepel <riepel@networking.stanford.edu>
 ;; Keywords: terminals
diff --git a/lisp/vt100-led.el b/lisp/vt100-led.el
index 117bef7065..a6a256a6a7 100644
--- a/lisp/vt100-led.el
+++ b/lisp/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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1988, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Howard Gayle
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/w32-fns.el b/lisp/w32-fns.el
index 2548fa4d44..f353566b06 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 2001-2022 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 f00e474e1e..9be34c0dc0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
 
 ;; Author: Jason Rumney <jasonr@gnu.org>
 ;; Keywords: internal
diff --git a/lisp/wdired.el b/lisp/wdired.el
index eb5a638556..1c02562721 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2022 Free Software Foundation, Inc.
 
 ;; Filename: wdired.el
 ;; Author: Juan León Lahoz García <juanleon1@gmail.com>
@@ -155,26 +155,24 @@ nonexistent directory will fail."
   :version "26.1"
   :type 'boolean)
 
-(defvar wdired-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map "\C-x\C-s" #'wdired-finish-edit)
-    (define-key map "\C-c\C-c" #'wdired-finish-edit)
-    (define-key map "\C-c\C-k" #'wdired-abort-changes)
-    (define-key map "\C-c\C-[" #'wdired-abort-changes)
-    (define-key map "\C-x\C-q" #'wdired-exit)
-    (define-key map "\C-m"     #'undefined)
-    (define-key map "\C-j"     #'undefined)
-    (define-key map "\C-o"     #'undefined)
-    (define-key map [up]       #'wdired-previous-line)
-    (define-key map "\C-p"     #'wdired-previous-line)
-    (define-key map [down]     #'wdired-next-line)
-    (define-key map "\C-n"     #'wdired-next-line)
-    (define-key map [remap upcase-word] #'wdired-upcase-word)
-    (define-key map [remap capitalize-word] #'wdired-capitalize-word)
-    (define-key map [remap downcase-word] #'wdired-downcase-word)
-    (define-key map [remap self-insert-command] #'wdired--self-insert)
-    map)
-  "Keymap used in `wdired-mode'.")
+(defvar-keymap wdired-mode-map
+  :doc "Keymap used in `wdired-mode'."
+  "C-x C-s" #'wdired-finish-edit
+  "C-c C-c" #'wdired-finish-edit
+  "C-c C-k" #'wdired-abort-changes
+  "C-c C-[" #'wdired-abort-changes
+  "C-x C-q" #'wdired-exit
+  "RET"     #'undefined
+  "C-j"     #'undefined
+  "C-o"     #'undefined
+  "<up>"    #'wdired-previous-line
+  "C-p"     #'wdired-previous-line
+  "<down>"  #'wdired-next-line
+  "C-n"     #'wdired-next-line
+  "<remap> <upcase-word>"         #'wdired-upcase-word
+  "<remap> <capitalize-word>"     #'wdired-capitalize-word
+  "<remap> <downcase-word>"       #'wdired-downcase-word
+  "<remap> <self-insert-command>" #'wdired--self-insert)
 
 (easy-menu-define wdired-mode-menu wdired-mode-map
   "Menu for `wdired-mode'."
@@ -872,21 +870,19 @@ Like original function but it skips read-only words."
 ;; The following code deals with changing the access bits (or
 ;; permissions) of the files.
 
-(defvar wdired-perm-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map " " #'wdired-toggle-bit)
-    (define-key map "r" #'wdired-set-bit)
-    (define-key map "w" #'wdired-set-bit)
-    (define-key map "x" #'wdired-set-bit)
-    (define-key map "-" #'wdired-set-bit)
-    (define-key map "S" #'wdired-set-bit)
-    (define-key map "s" #'wdired-set-bit)
-    (define-key map "T" #'wdired-set-bit)
-    (define-key map "t" #'wdired-set-bit)
-    (define-key map "s" #'wdired-set-bit)
-    (define-key map "l" #'wdired-set-bit)
-    (define-key map [mouse-1] #'wdired-mouse-toggle-bit)
-    map))
+(defvar-keymap wdired-perm-mode-map
+  "SPC" #'wdired-toggle-bit
+  "r"   #'wdired-set-bit
+  "w"   #'wdired-set-bit
+  "x"   #'wdired-set-bit
+  "-"   #'wdired-set-bit
+  "S"   #'wdired-set-bit
+  "s"   #'wdired-set-bit
+  "T"   #'wdired-set-bit
+  "t"   #'wdired-set-bit
+  "s"   #'wdired-set-bit
+  "l"   #'wdired-set-bit
+  "<mouse-1>" #'wdired-mouse-toggle-bit)
 
 ;; Put a keymap property to the permission bits of the files, and store the
 ;; original name and permissions as a property
diff --git a/lisp/whitespace.el b/lisp/whitespace.el
index 5a482c5253..8e726c40dd 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <viniciusjl.gnu@gmail.com>
 ;; Keywords: data, wp
diff --git a/lisp/wid-browse.el b/lisp/wid-browse.el
index 7ce0633b40..e71e8cd493 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, 2001-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001-2022 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 fb06a95f51..f00a524c0c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1997, 1999-2022 Free Software Foundation, Inc.
 ;;
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Maintainer: emacs-devel@gnu.org
@@ -437,8 +437,9 @@ the :notify function can't know the new value.")
        (follow-link (widget-get widget :follow-link))
        (help-echo (widget-get widget :help-echo)))
     (widget-put widget :button-overlay overlay)
-    (if (functionp help-echo)
+    (when (functionp help-echo)
       (setq help-echo 'widget-mouse-help))
+    (overlay-put overlay 'before-string #(" " 0 1 (invisible t)))
     (overlay-put overlay 'button widget)
     (overlay-put overlay 'keymap (widget-get widget :keymap))
     (overlay-put overlay 'evaporate t)
@@ -2968,7 +2969,8 @@ Save CHILD into the :last-deleted list, so it can be 
inserted later."
   "A widget which groups other widgets inside."
   :convert-widget 'widget-types-convert-widget
   :copy 'widget-types-copy
-  :format ":\n%v"
+  :format (concat (propertize ":" 'display "")
+                  "\n%v")
   :value-create 'widget-group-value-create
   :value-get 'widget-editable-list-value-get
   :default-get 'widget-group-default-get
@@ -3458,7 +3460,7 @@ It reads a directory name from an editable text field."
     map))
 
 (define-widget 'key-sequence 'restricted-sexp
-  "A key sequence."
+  "A key sequence.  This is obsolete; use the `key' type instead."
   :prompt-value 'widget-field-prompt-value
   :prompt-internal 'widget-symbol-prompt-internal
 ; :prompt-match 'fboundp   ;; What was this good for?  KFS
@@ -3524,6 +3526,27 @@ It reads a directory name from an editable text field."
     value))
 
 
+(defvar widget-key-prompt-value-history nil
+  "History of input to `widget-key-prompt-value'.")
+
+(define-widget 'key 'editable-field
+  "A key sequence."
+  :prompt-value 'widget-field-prompt-value
+  :match 'key-valid-p
+  :format "%{%t%}: %v"
+  :validate 'widget-key-validate
+  :keymap widget-key-sequence-map
+  :help-echo "C-q: insert KEY, EVENT, or CODE; RET: enter value"
+  :tag "Key")
+
+(defun widget-key-validate (widget)
+  (unless (and (stringp (widget-value widget))
+               (key-valid-p (widget-value widget)))
+    (widget-put widget :error (format "Invalid key: %S"
+                                      (widget-value widget)))
+    widget))
+
+
 (define-widget 'sexp 'editable-field
   "An arbitrary Lisp expression."
   :tag "Lisp expression"
diff --git a/lisp/widget.el b/lisp/widget.el
index 0232f6cf93..300a95bd22 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1997, 2001-2022 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 8904f5cbf7..c8ea4fd1e5 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2022 Free Software Foundation, Inc.
 ;;
 ;; Author: Hovav Shacham (hovav@cs.stanford.edu)
 ;; Created: 17 October 1998
@@ -448,6 +448,7 @@ unless `windmove-create-window' is non-nil and a new window 
is created."
 (defvar windmove-mode-map (make-sparse-keymap)
   "Map used by `windmove-install-defaults'.")
 
+;;;###autoload
 (define-minor-mode windmove-mode
   "Global minor mode for default windmove commands."
   :keymap windmove-mode-map
diff --git a/lisp/window.el b/lisp/window.el
index 0f17bb28b4..582600e1c6 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, 1989, 1992-1994, 2000-2021 Free Software
+;; Copyright (C) 1985, 1989, 1992-1994, 2000-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
@@ -5151,7 +5151,10 @@ nil means to not handle the buffer in a particular way.  
This
     (cond
      ;; First try to delete dedicated windows that are not side windows.
      ((and dedicated (not (eq dedicated 'side))
-           (window--delete window 'dedicated (eq bury-or-kill 'kill))))
+           (window--delete window 'dedicated (eq bury-or-kill 'kill)))
+      ;; If the previously selected window is still alive, select it.
+      (when (window-live-p (nth 2 quit-restore))
+        (select-window (nth 2 quit-restore))))
      ((and (not prev-buffer)
           (eq (nth 1 quit-restore) 'tab)
           (eq (nth 3 quit-restore) buffer))
@@ -8564,6 +8567,14 @@ currently selected window; otherwise it will be 
displayed in
 another window."
   (pop-to-buffer buffer display-buffer--same-window-action norecord))
 
+(defcustom display-comint-buffer-action display-buffer--same-window-action
+  "`display-buffer' action for displaying comint buffers."
+  :type display-buffer--action-custom-type
+  :risky t
+  :version "29.1"
+  :group 'windows
+  :group 'comint)
+
 (defun read-buffer-to-switch (prompt)
   "Read the name of a buffer to switch to, prompting with PROMPT.
 Return the name of the buffer as a string.
diff --git a/lisp/winner.el b/lisp/winner.el
index 1b2807f248..e671b83880 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1997-1998, 2001-2022 Free Software Foundation, Inc.
 
 ;; Author: Ivar Rummelhoff <ivarru@math.uio.no>
 ;; Created: 27 Feb 1997
diff --git a/lisp/woman.el b/lisp/woman.el
index 1ca4d5e871..2e0d9a9090 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 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 2819c6163d..559679131b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2022 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 6055898214..6a0b1dedd1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 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 0282e3741c..9c9f1d9b17 100644
--- a/lisp/xml.el
+++ b/lisp/xml.el
@@ -1,6 +1,6 @@
 ;;; xml.el --- XML parser -*- lexical-binding: t -*-
 
-;; Copyright (C) 2000-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
 
 ;; Author: Emmanuel Briot <briot@gnat.com>
 ;; Maintainer: Mark A. Hershberger <mah@everybody.org>
@@ -612,8 +612,8 @@ references."
        (if (setq ref (match-string 2))
            (progn  ; Numeric char reference
              (setq val (save-match-data
-                         (decode-char 'ucs (string-to-number
-                                            ref (if (match-string 1) 16)))))
+                          (string-to-number
+                           ref (if (match-string 1) 16))))
              (and (null val)
                   xml-validating-parser
                   (error "XML: (Validity) Invalid character reference `%s'"
@@ -898,11 +898,11 @@ references and parameter-entity references."
            ref val)
        (cond ((setq ref (match-string 1 string))
               ;; Decimal character reference
-              (setq val (decode-char 'ucs (string-to-number ref)))
+               (setq val (string-to-number ref))
               (if val (push (string val) children)))
              ;; Hexadecimal character reference
              ((setq ref (match-string 2 string))
-              (setq val (decode-char 'ucs (string-to-number ref 16)))
+               (setq val (string-to-number ref 16))
               (if val (push (string val) children)))
              ;; Parameter entity reference
              ((setq ref (match-string 3 string))
@@ -962,7 +962,7 @@ STRING is assumed to occur in an XML attribute value."
        (if ref
            ;; [4.6] Character references are included as
            ;; character data.
-           (let ((val (decode-char 'ucs (string-to-number ref (if is-hex 
16)))))
+            (let ((val (string-to-number ref (if is-hex 16))))
              (push (cond (val (string val))
                          (xml-validating-parser
                           (error "XML: (Validity) Undefined character `x%s'" 
ref))
diff --git a/lisp/xt-mouse.el b/lisp/xt-mouse.el
index e4e91aa892..313665f6bf 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 2000-2022 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 cf4396fec2..487c6b2219 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
 ;;
 ;; Author: Joakim Verona (joakim@verona.se)
 ;;
@@ -60,6 +60,7 @@
 (declare-function xwidget-webkit-set-cookie-storage-file "xwidget.c" (xwidget 
file))
 (declare-function xwidget-live-p "xwidget.c" (xwidget))
 (declare-function xwidget-webkit-stop-loading "xwidget.c" (xwidget))
+(declare-function xwidget-info "xwidget.c" (xwidget))
 
 (defgroup xwidget nil
   "Displaying native widgets in Emacs buffers."
@@ -138,7 +139,7 @@ Interactively, URL defaults to the string looking like a 
url around point."
 Get the URL of current session, then browse to the URL
 in `split-window-below' with a new xwidget webkit session."
   (interactive nil xwidget-webkit-mode)
-  (let ((url (xwidget-webkit-current-url)))
+  (let ((url (xwidget-webkit-uri (xwidget-webkit-current-session))))
     (with-selected-window (split-window-below)
       (xwidget-webkit-new-session url))))
 
@@ -147,7 +148,7 @@ in `split-window-below' with a new xwidget webkit session."
 Get the URL of current session, then browse to the URL
 in `split-window-right' with a new xwidget webkit session."
   (interactive nil xwidget-webkit-mode)
-  (let ((url (xwidget-webkit-current-url)))
+  (let ((url (xwidget-webkit-uri (xwidget-webkit-current-session))))
     (with-selected-window (split-window-right)
       (xwidget-webkit-new-session url))))
 
@@ -347,23 +348,36 @@ If N is omitted or nil, scroll down by one line."
 
 (defun xwidget-webkit-scroll-forward (&optional n)
   "Scroll webkit horizontally by N chars.
-The width of char is calculated with `window-font-width'.
-If N is omitted or nil, scroll forwards by one char."
+If the widget is larger than the window, hscroll by N columns
+instead.  The width of char is calculated with
+`window-font-width'.  If N is omitted or nil, scroll forwards by
+one char."
   (interactive "p" xwidget-webkit-mode)
-  (xwidget-webkit-execute-script
-   (xwidget-webkit-current-session)
-   (format "window.scrollBy(%d, 0);"
-           (* n (window-font-width)))))
+  (let ((session (xwidget-webkit-current-session)))
+    (if (> (- (aref (xwidget-info session) 2)
+              (window-text-width nil t))
+           (window-font-width))
+        (set-window-hscroll nil (+ (window-hscroll) n))
+      (xwidget-webkit-execute-script session
+                                     (format "window.scrollBy(%d, 0);"
+                                             (* n (window-font-width)))))))
 
 (defun xwidget-webkit-scroll-backward (&optional n)
   "Scroll webkit back by N chars.
-The width of char is calculated with `window-font-width'.
-If N is omitted or nil, scroll backwards by one char."
+If the widget is larger than the window, hscroll backwards by N
+columns instead.  The width of char is calculated with
+`window-font-width'.  If N is omitted or nil, scroll backwards by
+one char."
   (interactive "p" xwidget-webkit-mode)
-  (xwidget-webkit-execute-script
-   (xwidget-webkit-current-session)
-   (format "window.scrollBy(-%d, 0);"
-           (* n (window-font-width)))))
+  (let ((session (xwidget-webkit-current-session)))
+    (if (and (> (- (aref (xwidget-info session) 2)
+                   (window-text-width nil t))
+                (window-font-width))
+             (> (window-hscroll) 0))
+        (set-window-hscroll nil (- (window-hscroll) n))
+      (xwidget-webkit-execute-script session
+                                     (format "window.scrollBy(%-d, 0);"
+                                             (* n (window-font-width)))))))
 
 (defun xwidget-webkit-scroll-top ()
   "Scroll webkit to the very top."
@@ -409,6 +423,11 @@ If N is omitted or nil, scroll backwards by one char."
   (with-current-buffer (xwidget-buffer xwidget)
     (force-mode-line-update)))
 
+(defun xwidget-webkit-buffer-kill ()
+  "Clean up an xwidget-webkit buffer before it is killed."
+  (when (timerp xwidget-webkit--progress-update-timer)
+    (cancel-timer xwidget-webkit--progress-update-timer)))
+
 (defun xwidget-webkit-callback (xwidget xwidget-event-type)
   "Callback for xwidgets.
 XWIDGET instance, XWIDGET-EVENT-TYPE depends on the originating xwidget."
@@ -479,6 +498,7 @@ If non-nil, plugins are enabled.  Otherwise, disabled."
 (define-derived-mode xwidget-webkit-mode special-mode "xwidget-webkit"
   "Xwidget webkit view mode."
   (setq buffer-read-only t)
+  (add-hook 'kill-buffer-hook #'xwidget-webkit-buffer-kill)
   (setq-local tool-bar-map xwidget-webkit-tool-bar-map)
   (setq-local bookmark-make-record-function
               #'xwidget-webkit-bookmark-make-record)
@@ -525,24 +545,31 @@ directory, URL is saved at the specified directory as 
FILE-NAME."
 ;;; Bookmarks integration
 
 (defcustom xwidget-webkit-bookmark-jump-new-session nil
-  "Control bookmark jump to use new session or not.
-If non-nil, use a new xwidget webkit session after bookmark jump.
-Otherwise, it will use `xwidget-webkit-last-session'.
-When you set this variable to nil, consider further customization with
-`xwidget-webkit-last-session-buffer'."
+  "Whether to jump to a bookmarked URL in a new xwidget webkit session.
+If non-nil, create a new xwidget webkit session, otherwise use
+the value of `xwidget-webkit-last-session'."
   :version "28.1"
   :type 'boolean)
 
 (defun xwidget-webkit-bookmark-make-record ()
-  "Create bookmark record in webkit xwidget.
-See `xwidget-webkit-bookmark-jump-new-session' for whether this
-should create a new session or not."
+  "Create a bookmark record for a webkit xwidget."
   (nconc (bookmark-make-record-default t t)
          `((page . ,(xwidget-webkit-uri (xwidget-webkit-current-session)))
-           (handler  . (lambda (bmk)
-                         (xwidget-webkit-browse-url
-                          (bookmark-prop-get bmk 'page)
-                          xwidget-webkit-bookmark-jump-new-session))))))
+           (handler . xwidget-webkit-bookmark-jump-handler))))
+
+;;;###autoload
+(defun xwidget-webkit-bookmark-jump-handler (bookmark)
+  "Jump to the web page bookmarked by the bookmark record BOOKMARK.
+If `xwidget-webkit-bookmark-jump-new-session' is non-nil, create
+a new xwidget-webkit session, otherwise use an existing session."
+  (let* ((url (bookmark-prop-get bookmark 'page))
+        (xwbuf (if (or xwidget-webkit-bookmark-jump-new-session
+                        (not (xwidget-webkit-current-session)))
+                   (xwidget-webkit--create-new-session-buffer url)
+                  (xwidget-buffer (xwidget-webkit-current-session)))))
+    (with-current-buffer xwbuf
+      (xwidget-webkit-goto-uri (xwidget-webkit-current-session) url))
+    (set-buffer xwbuf)))
 
 ;;; xwidget webkit session
 
@@ -790,37 +817,44 @@ For example, use this to display an anchor."
   (add-to-list 'window-size-change-functions
                'xwidget-webkit-adjust-size-in-frame))
 
-(defun xwidget-webkit-new-session (url &optional callback)
-  "Create a new webkit session buffer with URL."
+(defun xwidget-webkit--create-new-session-buffer (url &optional callback)
+  "Create a new webkit session buffer to display URL in an xwidget.
+Optional function CALLBACK specifies the callback for webkit xwidgets;
+see `xwidget-webkit-callback'."
   (let* ((bufname
-          ;; Generate a temp-name based on current buffer name. it
-          ;; will be renamed by `xwidget-webkit-callback' in the
-          ;; future. This approach can limit flicker of buffer-name in
-          ;; mode-line.
+          ;; Generate a temp-name based on current buffer name.  The
+          ;; buffer will subsequently be renamed by
+          ;; `xwidget-webkit-callback'.  This approach can avoid
+          ;; flicker of buffer-name in mode-line.
           (generate-new-buffer-name (buffer-name)))
          (callback (or callback #'xwidget-webkit-callback))
          (current-session (xwidget-webkit-current-session))
          xw)
-    (setq xwidget-webkit-last-session-buffer (switch-to-buffer
-                                              (get-buffer-create bufname)))
+    (setq xwidget-webkit-last-session-buffer (get-buffer-create bufname))
     ;; The xwidget id is stored in a text property, so we need to have
     ;; at least character in this buffer.
     ;; Insert invisible url, good default for next `g' to browse url.
-    (let ((start (point)))
-      (insert url)
-      (put-text-property start (+ start (length url)) 'invisible t)
-      (setq xw (xwidget-insert
-                start 'webkit bufname
-                (xwidget-window-inside-pixel-width (selected-window))
-                (xwidget-window-inside-pixel-height (selected-window))
-                nil current-session)))
-    (when xwidget-webkit-cookie-file
-      (xwidget-webkit-set-cookie-storage-file
-       xw (expand-file-name xwidget-webkit-cookie-file)))
-    (xwidget-put xw 'callback callback)
-    (xwidget-put xw 'display-callback #'xwidget-webkit-display-callback)
-    (xwidget-webkit-mode)
-    (xwidget-webkit-goto-uri (xwidget-webkit-last-session) url)))
+    (with-current-buffer xwidget-webkit-last-session-buffer
+      (let ((start (point)))
+        (insert url)
+        (put-text-property start (+ start (length url)) 'invisible t)
+        (setq xw (xwidget-insert
+                  start 'webkit bufname
+                  (xwidget-window-inside-pixel-width (selected-window))
+                  (xwidget-window-inside-pixel-height (selected-window))
+                  nil current-session)))
+      (when xwidget-webkit-cookie-file
+        (xwidget-webkit-set-cookie-storage-file
+         xw (expand-file-name xwidget-webkit-cookie-file)))
+      (xwidget-put xw 'callback callback)
+      (xwidget-put xw 'display-callback #'xwidget-webkit-display-callback)
+      (xwidget-webkit-mode))
+    xwidget-webkit-last-session-buffer))
+
+(defun xwidget-webkit-new-session (url)
+  "Display URL in a new webkit xwidget."
+  (switch-to-buffer (xwidget-webkit--create-new-session-buffer url))
+  (xwidget-webkit-goto-uri (xwidget-webkit-last-session) url))
 
 (defun xwidget-webkit-import-widget (xwidget)
   "Create a new webkit session buffer from XWIDGET, an existing xwidget.
diff --git a/lisp/yank-media.el b/lisp/yank-media.el
index decab3b362..9836082fb2 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 ;; Author: Lars Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: utility
diff --git a/lwlib/ChangeLog.1 b/lwlib/ChangeLog.1
index bf839cf709..4dac7763b9 100644
--- a/lwlib/ChangeLog.1
+++ b/lwlib/ChangeLog.1
@@ -1964,7 +1964,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1995-1999, 2001-2021 Free Software Foundation, Inc.
+  Copyright (C) 1995-1999, 2001-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/lwlib/Makefile.in b/lwlib/Makefile.in
index fb0ae0e1c2..d58c7bf6ac 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 1994, 2001-2022 Free Software Foundation, Inc.
 #
 # This file is part of the Lucid Widget Library.
 #
diff --git a/lwlib/deps.mk b/lwlib/deps.mk
index 66c464f8f9..6a7eb1e0ca 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 1994, 2001-2022 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 8806d3f700..d17acae728 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1994, 2001-2022 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 54dc06f52a..e3b596369e 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1994, 2000-2022 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 525465fa99..fa60fc89d0 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1994-1997, 1999-2022 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 ef76d67bfc..100e2ece69 100644
--- a/lwlib/lwlib-int.h
+++ b/lwlib/lwlib-int.h
@@ -1,6 +1,6 @@
 /*
 Copyright (C) 1992 Lucid, Inc.
-Copyright (C) 2000-2021 Free Software Foundation, Inc.
+Copyright (C) 2000-2022 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 3c700e0c5f..ff86886c95 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1994, 2001-2022 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 2fd84c043f..5226db5f63 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1994, 1999-2022 Free Software Foundation, Inc.
 
 This file is part of the Lucid Widget Library.
 
diff --git a/lwlib/lwlib.c b/lwlib/lwlib.c
index 820538f738..30546b60e5 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1994-1996, 1999-2022 Free Software Foundation, Inc.
 
 This file is part of the Lucid Widget Library.
 
diff --git a/lwlib/lwlib.h b/lwlib/lwlib.h
index ab48d85890..86b1c60a5d 100644
--- a/lwlib/lwlib.h
+++ b/lwlib/lwlib.h
@@ -1,6 +1,6 @@
 /*
 Copyright (C) 1992, 1993 Lucid, Inc.
-Copyright (C) 1994, 1999-2021 Free Software Foundation, Inc.
+Copyright (C) 1994, 1999-2022 Free Software Foundation, Inc.
 
 This file is part of the Lucid Widget Library.
 
diff --git a/lwlib/xlwmenu.c b/lwlib/xlwmenu.c
index a0a10d13db..369162c7fe 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1994-1995, 1997, 1999-2022 Free Software Foundation, Inc.
 
 This file is part of the Lucid Widget Library.
 
@@ -1390,27 +1390,46 @@ fit_to_screen (XlwMenuWidget mw,
                window_state *previous_ws,
                Boolean horizontal_p)
 {
-  unsigned int screen_width = WidthOfScreen (XtScreen (mw));
-  unsigned int screen_height = HeightOfScreen (XtScreen (mw));
+  int screen_width, screen_height;
+  int screen_x, screen_y;
+  int prev_screen_x, prev_screen_y;
+
+#ifdef emacs
+  xlw_monitor_dimensions_at_pos (XtDisplay (mw), XtScreen (mw),
+                                previous_ws->x, previous_ws->y,
+                                &prev_screen_x, &prev_screen_y,
+                                &screen_width, &screen_height);
+  xlw_monitor_dimensions_at_pos (XtDisplay (mw), XtScreen (mw),
+                                ws->x, ws->y, &screen_x, &screen_y,
+                                &screen_width, &screen_height);
+#else
+  screen_width = WidthOfScreen (XtScreen (mw));
+  screen_height = HeightOfScreen (XtScreen (mw));
+  prev_screen_x = screen_x = 0;
+  prev_screen_y = screen_y = 0;
+#endif
   /* 1 if we are unable to avoid an overlap between
      this menu and the parent menu in the X dimension.  */
   int horizontal_overlap = 0;
 
-  if (ws->x < 0)
-    ws->x = 0;
-  else if (ws->x + ws->width > screen_width)
+  if (ws->x < screen_x)
+    ws->x = screen_x;
+  else if (ws->x + ws->width > screen_x + screen_width)
     {
       if (!horizontal_p)
        /* The addition of shadow-thickness for a sub-menu's position is
           to reflect a similar adjustment when the menu is displayed to
           the right of the invoking menu-item; it makes the sub-menu
           look more `attached' to the menu-item.  */
-       ws->x = previous_ws->x - ws->width + mw->menu.shadow_thickness;
+       ws->x = screen_x + (previous_ws->x
+                           - prev_screen_x
+                           - ws->width
+                           + mw->menu.shadow_thickness);
       else
-       ws->x = screen_width - ws->width;
-      if (ws->x < 0)
+       ws->x = screen_x + (screen_width - ws->width);
+      if (ws->x < screen_x)
        {
-         ws->x = 0;
+         ws->x = screen_x;
          horizontal_overlap = 1;
        }
     }
@@ -1427,16 +1446,18 @@ fit_to_screen (XlwMenuWidget mw,
        ws->y = previous_ws->y - ws->height;
     }
 
-  if (ws->y < 0)
-    ws->y = 0;
-  else if (ws->y + ws->height > screen_height)
+  if (ws->y < screen_y)
+    ws->y = screen_y;
+  else if (ws->y + ws->height > screen_y + screen_height)
     {
       if (horizontal_p)
-       ws->y = previous_ws->y - ws->height;
+       ws->y = screen_y + (previous_ws->y
+                           - prev_screen_y
+                           - ws->height);
       else
-       ws->y = screen_height - ws->height;
-      if (ws->y < 0)
-        ws->y = 0;
+       ws->y = screen_y + (screen_height - ws->height);
+      if (ws->y < screen_y)
+        ws->y = screen_y;
     }
 }
 
@@ -2626,7 +2647,21 @@ pop_up_menu (XlwMenuWidget mw, XButtonPressedEvent 
*event)
   int          borderwidth = mw->menu.shadow_thickness;
   Screen*      screen = XtScreen (mw);
   Display       *display = XtDisplay (mw);
+  int          screen_x;
+  int          screen_y;
+  int          screen_w;
+  int          screen_h;
 
+#ifdef emacs
+  xlw_monitor_dimensions_at_pos (display, screen, x, y,
+                                &screen_x, &screen_y,
+                                &screen_w, &screen_h);
+#else
+  screen_x = 0;
+  screen_y = 0;
+  screen_w = WidthOfScreen (screen);
+  screen_h = HeightOfScreen (screen);
+#endif
   next_release_must_exit = 0;
 
   mw->menu.inside_entry = NULL;
@@ -2640,14 +2675,14 @@ pop_up_menu (XlwMenuWidget mw, XButtonPressedEvent 
*event)
 
   x -= borderwidth;
   y -= borderwidth;
-  if (x < borderwidth)
-    x = borderwidth;
-  if (x + w + 2 * borderwidth > WidthOfScreen (screen))
-    x = WidthOfScreen (screen) - w - 2 * borderwidth;
-  if (y < borderwidth)
-    y = borderwidth;
-  if (y + h + 2 * borderwidth> HeightOfScreen (screen))
-    y = HeightOfScreen (screen) - h - 2 * borderwidth;
+  if (x < screen_x + borderwidth)
+    x = screen_x + borderwidth;
+  if (x + w + 2 * borderwidth > screen_x + screen_w)
+    x = (screen_x + screen_w) - w - 2 * borderwidth;
+  if (y < screen_y + borderwidth)
+    y = screen_y + borderwidth;
+  if (y + h + 2 * borderwidth > screen_y + screen_h)
+    y = (screen_y + screen_h) - h - 2 * borderwidth;
 
   mw->menu.popped_up = True;
   if (XtIsShell (XtParent ((Widget)mw)))
diff --git a/lwlib/xlwmenu.h b/lwlib/xlwmenu.h
index 89e548bc8d..7f4bf35939 100644
--- a/lwlib/xlwmenu.h
+++ b/lwlib/xlwmenu.h
@@ -1,6 +1,6 @@
 /* Interface of a lightweight menubar widget.
 
-Copyright (C) 2002-2021 Free Software Foundation, Inc.
+Copyright (C) 2002-2022 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 bb37b0dee2..455ecdbce0 100644
--- a/lwlib/xlwmenuP.h
+++ b/lwlib/xlwmenuP.h
@@ -1,6 +1,6 @@
 /* Internals of a lightweight menubar widget.
 
-Copyright (C) 2002-2021 Free Software Foundation, Inc.
+Copyright (C) 2002-2022 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 9ba1743e65..dea34e8341 100644
--- a/m4/00gnulib.m4
+++ b/m4/00gnulib.m4
@@ -1,5 +1,5 @@
 # 00gnulib.m4 serial 8
-dnl Copyright (C) 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2022 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 b28cc6abc5..fbe2098e86 100644
--- a/m4/__inline.m4
+++ b/m4/__inline.m4
@@ -1,5 +1,5 @@
 # Test for __inline keyword
-dnl Copyright 2017-2021 Free Software Foundation, Inc.
+dnl Copyright 2017-2022 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 52d80d0428..67d6507c3e 100644
--- a/m4/absolute-header.m4
+++ b/m4/absolute-header.m4
@@ -1,5 +1,5 @@
 # absolute-header.m4 serial 17
-dnl Copyright (C) 2006-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2006-2022 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 aaf231aee9..8909442d7f 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 2002, 2004-2022 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 ba2f679d8e..dc6f47e330 100644
--- a/m4/alloca.m4
+++ b/m4/alloca.m4
@@ -1,5 +1,5 @@
-# alloca.m4 serial 20
-dnl Copyright (C) 2002-2004, 2006-2007, 2009-2021 Free Software Foundation,
+# alloca.m4 serial 21
+dnl Copyright (C) 2002-2004, 2006-2007, 2009-2022 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,
@@ -26,17 +26,15 @@ AC_DEFUN([gl_FUNC_ALLOCA],
       AC_DEFINE([HAVE_ALLOCA], [1],
         [Define to 1 if you have 'alloca' after including <alloca.h>,
          a header that may be supplied by this distribution.])
-      ALLOCA_H=alloca.h
+      GL_GENERATE_ALLOCA_H=true
     else
       dnl alloca exists as a library function, i.e. it is slow and probably
       dnl a memory leak. Don't define HAVE_ALLOCA in this case.
-      ALLOCA_H=
+      GL_GENERATE_ALLOCA_H=false
     fi
   else
-    ALLOCA_H=alloca.h
+    GL_GENERATE_ALLOCA_H=true
   fi
-  AC_SUBST([ALLOCA_H])
-  AM_CONDITIONAL([GL_GENERATE_ALLOCA_H], [test -n "$ALLOCA_H"])
 
   if test $ac_cv_working_alloca_h = yes; then
     HAVE_ALLOCA_H=1
diff --git a/m4/builtin-expect.m4 b/m4/builtin-expect.m4
index c58411643c..b1fb12a3fb 100644
--- a/m4/builtin-expect.m4
+++ b/m4/builtin-expect.m4
@@ -1,6 +1,6 @@
 dnl Check for __builtin_expect.
 
-dnl Copyright 2016-2021 Free Software Foundation, Inc.
+dnl Copyright 2016-2022 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 1083b4c9e2..99aeb68727 100644
--- a/m4/byteswap.m4
+++ b/m4/byteswap.m4
@@ -1,5 +1,5 @@
-# byteswap.m4 serial 4
-dnl Copyright (C) 2005, 2007, 2009-2021 Free Software Foundation, Inc.
+# byteswap.m4 serial 5
+dnl Copyright (C) 2005, 2007, 2009-2022 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.
@@ -10,10 +10,8 @@ AC_DEFUN([gl_BYTESWAP],
 [
   dnl Prerequisites of lib/byteswap.in.h.
   AC_CHECK_HEADERS([byteswap.h], [
-    BYTESWAP_H=''
+    GL_GENERATE_BYTESWAP_H=false
   ], [
-    BYTESWAP_H='byteswap.h'
+    GL_GENERATE_BYTESWAP_H=true
   ])
-  AC_SUBST([BYTESWAP_H])
-  AM_CONDITIONAL([GL_GENERATE_BYTESWAP_H], [test -n "$BYTESWAP_H"])
 ])
diff --git a/m4/canonicalize.m4 b/m4/canonicalize.m4
index 0dfb2da9a6..b55d5c06e2 100644
--- a/m4/canonicalize.m4
+++ b/m4/canonicalize.m4
@@ -1,6 +1,6 @@
 # canonicalize.m4 serial 37
 
-dnl Copyright (C) 2003-2007, 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2003-2007, 2009-2022 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 c3b9e7ea40..2253553313 100644
--- a/m4/clock_time.m4
+++ b/m4/clock_time.m4
@@ -1,10 +1,11 @@
-# clock_time.m4 serial 10
-dnl Copyright (C) 2002-2006, 2009-2021 Free Software Foundation, Inc.
+# clock_time.m4 serial 11
+dnl Copyright (C) 2002-2006, 2009-2022 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.
 
-# Check for clock_gettime and clock_settime, and set LIB_CLOCK_GETTIME.
+# Check for clock_getres, clock_gettime and clock_settime,
+# and set LIB_CLOCK_GETTIME.
 # For a program named, say foo, you should add a line like the following
 # in the corresponding Makefile.am file:
 # foo_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME)
@@ -26,6 +27,6 @@ AC_DEFUN([gl_CLOCK_TIME],
     AC_SEARCH_LIBS([clock_gettime], [rt posix4],
                    [test "$ac_cv_search_clock_gettime" = "none required" ||
                     LIB_CLOCK_GETTIME=$ac_cv_search_clock_gettime])
-    AC_CHECK_FUNCS([clock_gettime clock_settime])
+    AC_CHECK_FUNCS([clock_getres clock_gettime clock_settime])
   LIBS=$gl_saved_libs
 ])
diff --git a/m4/copy-file-range.m4 b/m4/copy-file-range.m4
index 82904e9fce..4c7ec4eaaf 100644
--- a/m4/copy-file-range.m4
+++ b/m4/copy-file-range.m4
@@ -1,5 +1,5 @@
 # copy-file-range.m4
-dnl Copyright 2019-2021 Free Software Foundation, Inc.
+dnl Copyright 2019-2022 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 534a59e3e5..b8858b1918 100644
--- a/m4/d-type.m4
+++ b/m4/d-type.m4
@@ -5,7 +5,7 @@ dnl
 dnl Check whether struct dirent has a member named d_type.
 dnl
 
-# Copyright (C) 1997, 1999-2004, 2006, 2009-2021 Free Software Foundation, Inc.
+# Copyright (C) 1997, 1999-2004, 2006, 2009-2022 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 17e2a20c5d..ddaca1680d 100644
--- a/m4/dirent_h.m4
+++ b/m4/dirent_h.m4
@@ -1,5 +1,5 @@
 # dirent_h.m4 serial 19
-dnl Copyright (C) 2008-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2008-2022 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 3c9ce5dc65..92001700ef 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 2001-2006, 2008-2022 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 c9bbcef678..09ff5f0d17 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-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2006, 2008-2022 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 0753a32491..7e777cdee6 100644
--- a/m4/dup2.m4
+++ b/m4/dup2.m4
@@ -1,5 +1,5 @@
 #serial 27
-dnl Copyright (C) 2002, 2005, 2007, 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2005, 2007, 2009-2022 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/eealloc.m4 b/m4/eealloc.m4
index 002f0c8671..a6aa2f88d0 100644
--- a/m4/eealloc.m4
+++ b/m4/eealloc.m4
@@ -1,5 +1,5 @@
 # eealloc.m4 serial 3
-dnl Copyright (C) 2003, 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2009-2022 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 ae5329108e..583dac3932 100644
--- a/m4/environ.m4
+++ b/m4/environ.m4
@@ -1,5 +1,5 @@
 # environ.m4 serial 8
-dnl Copyright (C) 2001-2004, 2006-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2001-2004, 2006-2022 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 51dfe92938..4be9780a7e 100644
--- a/m4/errno_h.m4
+++ b/m4/errno_h.m4
@@ -1,5 +1,5 @@
-# errno_h.m4 serial 13
-dnl Copyright (C) 2004, 2006, 2008-2021 Free Software Foundation, Inc.
+# errno_h.m4 serial 14
+dnl Copyright (C) 2004, 2006, 2008-2022 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.
@@ -68,13 +68,11 @@ booboo
       [gl_cv_header_errno_h_complete=yes])
   ])
   if test $gl_cv_header_errno_h_complete = yes; then
-    ERRNO_H=''
+    GL_GENERATE_ERRNO_H=false
   else
     gl_NEXT_HEADERS([errno.h])
-    ERRNO_H='errno.h'
+    GL_GENERATE_ERRNO_H=true
   fi
-  AC_SUBST([ERRNO_H])
-  AM_CONDITIONAL([GL_GENERATE_ERRNO_H], [test -n "$ERRNO_H"])
   gl_REPLACE_ERRNO_VALUE([EMULTIHOP])
   gl_REPLACE_ERRNO_VALUE([ENOLINK])
   gl_REPLACE_ERRNO_VALUE([EOVERFLOW])
@@ -88,7 +86,7 @@ booboo
 # Set the variables EOVERFLOW_HIDDEN and EOVERFLOW_VALUE.
 AC_DEFUN([gl_REPLACE_ERRNO_VALUE],
 [
-  if test -n "$ERRNO_H"; then
+  if $GL_GENERATE_ERRNO_H; then
     AC_CACHE_CHECK([for ]$1[ value], [gl_cv_header_errno_h_]$1, [
       AC_EGREP_CPP([yes],[
 #include <errno.h>
diff --git a/m4/euidaccess.m4 b/m4/euidaccess.m4
index 4aeb90a7e0..04f66f9d5d 100644
--- a/m4/euidaccess.m4
+++ b/m4/euidaccess.m4
@@ -1,5 +1,5 @@
 # euidaccess.m4 serial 15
-dnl Copyright (C) 2002-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2022 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 75ab44beee..b370e4dfdf 100644
--- a/m4/execinfo.m4
+++ b/m4/execinfo.m4
@@ -1,6 +1,6 @@
 # Check for GNU-style execinfo.h.
 
-dnl Copyright 2012-2021 Free Software Foundation, Inc.
+dnl Copyright 2012-2022 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.
@@ -10,7 +10,7 @@ AC_DEFUN([gl_EXECINFO_H],
   AC_CHECK_HEADERS_ONCE([execinfo.h])
 
   LIB_EXECINFO=''
-  EXECINFO_H='execinfo.h'
+  GL_GENERATE_EXECINFO_H=true
 
   if test $ac_cv_header_execinfo_h = yes; then
     gl_saved_libs=$LIBS
@@ -18,14 +18,10 @@ AC_DEFUN([gl_EXECINFO_H],
         [test "$ac_cv_search_backtrace_symbols_fd" = "none required" ||
          LIB_EXECINFO=$ac_cv_search_backtrace_symbols_fd])
     LIBS=$gl_saved_libs
-    test "$ac_cv_search_backtrace_symbols_fd" = no || EXECINFO_H=''
+    if test "$ac_cv_search_backtrace_symbols_fd" != no; then
+      GL_GENERATE_EXECINFO_H=false
+    fi
   fi
 
-  if test -n "$EXECINFO_H"; then
-    AC_LIBOBJ([execinfo])
-  fi
-
-  AC_SUBST([EXECINFO_H])
   AC_SUBST([LIB_EXECINFO])
-  AM_CONDITIONAL([GL_GENERATE_EXECINFO_H], [test -n "$EXECINFO_H"])
 ])
diff --git a/m4/explicit_bzero.m4 b/m4/explicit_bzero.m4
index 8c86d69e05..3b4ef8c3cc 100644
--- a/m4/explicit_bzero.m4
+++ b/m4/explicit_bzero.m4
@@ -1,4 +1,4 @@
-dnl Copyright 2017-2021 Free Software Foundation, Inc.
+dnl Copyright 2017-2022 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 5792a9557a..0b3e4b5af7 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 2003, 2006-2022 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 a4ac5ea532..2e914dbc07 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-2021 Free Software Foundation, Inc.
+dnl Copyright 2012-2022 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 9d6b363511..0ba5b3b687 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-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2022 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 66c0e308fc..a5cf95a88b 100644
--- a/m4/fchmodat.m4
+++ b/m4/fchmodat.m4
@@ -1,5 +1,5 @@
 # fchmodat.m4 serial 6
-dnl Copyright (C) 2004-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2004-2022 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 f6264345c1..428e5709d3 100644
--- a/m4/fcntl.m4
+++ b/m4/fcntl.m4
@@ -1,5 +1,5 @@
 # fcntl.m4 serial 11
-dnl Copyright (C) 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2022 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 aba44735d1..267f98bf52 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-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2006-2007, 2009-2022 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 d42838087b..3001608408 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-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2022 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 4dc24efbd3..902c35e359 100644
--- a/m4/filemode.m4
+++ b/m4/filemode.m4
@@ -1,5 +1,5 @@
 # filemode.m4 serial 9
-dnl Copyright (C) 2002, 2005-2006, 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2005-2006, 2009-2022 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/flexmember.m4 b/m4/flexmember.m4
index 49b1c752da..3b4237e9f7 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 2006, 2009-2022 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 131356ad46..de4eb7f9b3 100644
--- a/m4/fpending.m4
+++ b/m4/fpending.m4
@@ -1,6 +1,6 @@
 # serial 23
 
-# Copyright (C) 2000-2001, 2004-2021 Free Software Foundation, Inc.
+# Copyright (C) 2000-2001, 2004-2022 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 3f16957fbd..c0c23e9565 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-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2007, 2009-2022 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 a7923b9059..dfeecd2bf1 100644
--- a/m4/free.m4
+++ b/m4/free.m4
@@ -1,5 +1,5 @@
 # free.m4 serial 6
-# Copyright (C) 2003-2005, 2009-2021 Free Software Foundation, Inc.
+# Copyright (C) 2003-2005, 2009-2022 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 d730e46d30..e8604a6ad3 100644
--- a/m4/fstatat.m4
+++ b/m4/fstatat.m4
@@ -1,5 +1,5 @@
 # fstatat.m4 serial 4
-dnl Copyright (C) 2004-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2004-2022 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 d005579f9e..06e608866b 100644
--- a/m4/fsusage.m4
+++ b/m4/fsusage.m4
@@ -1,7 +1,7 @@
 # serial 35
 # Obtaining file system usage information.
 
-# Copyright (C) 1997-1998, 2000-2001, 2003-2021 Free Software Foundation, Inc.
+# Copyright (C) 1997-1998, 2000-2001, 2003-2022 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 6dc8cd1c0f..cbf35fe310 100644
--- a/m4/fsync.m4
+++ b/m4/fsync.m4
@@ -1,5 +1,5 @@
 # fsync.m4 serial 2
-dnl Copyright (C) 2008-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2008-2022 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 2e9f53e5a8..e3caa7d898 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-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2022 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 8fbc941898..6134eaace0 100644
--- a/m4/getdtablesize.m4
+++ b/m4/getdtablesize.m4
@@ -1,5 +1,5 @@
 # getdtablesize.m4 serial 8
-dnl Copyright (C) 2008-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2008-2022 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 bd746cdf88..d7a71f5ca6 100644
--- a/m4/getgroups.m4
+++ b/m4/getgroups.m4
@@ -3,7 +3,7 @@
 dnl From Jim Meyering.
 dnl A wrapper around AC_FUNC_GETGROUPS.
 
-# Copyright (C) 1996-1997, 1999-2004, 2008-2021 Free Software Foundation, Inc.
+# Copyright (C) 1996-1997, 1999-2004, 2008-2022 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 bba2216949..7bb8890bd5 100644
--- a/m4/getloadavg.m4
+++ b/m4/getloadavg.m4
@@ -1,6 +1,6 @@
 # Check for getloadavg.
 
-# Copyright (C) 1992-1996, 1999-2000, 2002-2003, 2006, 2008-2021 Free Software
+# Copyright (C) 1992-1996, 1999-2000, 2002-2003, 2006, 2008-2022 Free Software
 # Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
diff --git a/m4/getopt.m4 b/m4/getopt.m4
index bb95c5ea28..ff78ed535d 100644
--- a/m4/getopt.m4
+++ b/m4/getopt.m4
@@ -1,5 +1,5 @@
-# getopt.m4 serial 47
-dnl Copyright (C) 2002-2006, 2008-2021 Free Software Foundation, Inc.
+# getopt.m4 serial 48
+dnl Copyright (C) 2002-2006, 2008-2022 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.
@@ -21,6 +21,8 @@ AC_DEFUN([gl_FUNC_GETOPT_POSIX],
       REPLACE_GETOPT=1
     fi
   ])
+  GL_GENERATE_GETOPT_H=false
+  GL_GENERATE_GETOPT_CDEFS_H=false
   if test $REPLACE_GETOPT = 1; then
     dnl Arrange for getopt.h to be created.
     gl_GETOPT_SUBSTITUTE_HEADER
@@ -374,8 +376,6 @@ AC_DEFUN([gl_GETOPT_SUBSTITUTE_HEADER],
   AC_DEFINE([__GETOPT_PREFIX], [[rpl_]],
     [Define to rpl_ if the getopt replacement functions and variables
      should be used.])
-  GETOPT_H=getopt.h
-  GETOPT_CDEFS_H=getopt-cdefs.h
-  AC_SUBST([GETOPT_H])
-  AC_SUBST([GETOPT_CDEFS_H])
+  GL_GENERATE_GETOPT_H=true
+  GL_GENERATE_GETOPT_CDEFS_H=true
 ])
diff --git a/m4/getrandom.m4 b/m4/getrandom.m4
index 5f174dc7eb..6ca715005d 100644
--- a/m4/getrandom.m4
+++ b/m4/getrandom.m4
@@ -1,5 +1,5 @@
 # getrandom.m4 serial 8
-dnl Copyright 2020-2021 Free Software Foundation, Inc.
+dnl Copyright 2020-2022 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 de7c33046c..f0aeb4d0e4 100644
--- a/m4/gettime.m4
+++ b/m4/gettime.m4
@@ -1,5 +1,5 @@
-# gettime.m4 serial 9
-dnl Copyright (C) 2002, 2004-2006, 2009-2021 Free Software Foundation, Inc.
+# gettime.m4 serial 11
+dnl Copyright (C) 2002, 2004-2006, 2009-2022 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.
@@ -9,5 +9,13 @@ AC_DEFUN([gl_GETTIME],
   dnl Prerequisites of lib/gettime.c.
   AC_REQUIRE([gl_CLOCK_TIME])
   AC_REQUIRE([gl_TIMESPEC])
-  AC_CHECK_FUNCS_ONCE([gettimeofday])
+  AC_CHECK_FUNCS_ONCE([timespec_get])
+])
+
+AC_DEFUN([gl_GETTIME_RES],
+[
+  dnl Prerequisites of lib/gettime-res.c.
+  AC_REQUIRE([gl_CLOCK_TIME])
+  AC_REQUIRE([gl_TIMESPEC])
+  AC_CHECK_FUNCS_ONCE([timespec_getres])
 ])
diff --git a/m4/gettimeofday.m4 b/m4/gettimeofday.m4
index 37c54404bb..f729601b1d 100644
--- a/m4/gettimeofday.m4
+++ b/m4/gettimeofday.m4
@@ -1,6 +1,6 @@
 # serial 29
 
-# Copyright (C) 2001-2003, 2005, 2007, 2009-2021 Free Software Foundation, Inc.
+# Copyright (C) 2001-2003, 2005, 2007, 2009-2022 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 12b19dbcb4..87a9a751b6 100644
--- a/m4/gnulib-common.m4
+++ b/m4/gnulib-common.m4
@@ -1,5 +1,5 @@
-# gnulib-common.m4 serial 67
-dnl Copyright (C) 2007-2021 Free Software Foundation, Inc.
+# gnulib-common.m4 serial 69
+dnl Copyright (C) 2007-2022 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.
@@ -879,6 +879,36 @@ AC_DEFUN([gl_CXX_ALLOW_WARNINGS],
   AC_SUBST([GL_CXXFLAG_ALLOW_WARNINGS])
 ])
 
+dnl gl_CONDITIONAL_HEADER([foo.h])
+dnl takes a shell variable GL_GENERATE_FOO_H (with value true or false) as 
input
+dnl and produces
+dnl   - an AC_SUBSTed variable FOO_H that is either a file name or empty, based
+dnl     on whether GL_GENERATE_FOO_H is true or false,
+dnl   - an Automake conditional GL_GENERATE_FOO_H that evaluates to the value 
of
+dnl     the shell variable GL_GENERATE_FOO_H.
+AC_DEFUN([gl_CONDITIONAL_HEADER],
+[
+  m4_pushdef([gl_header_name], AS_TR_SH(m4_toupper($1)))
+  m4_pushdef([gl_generate_var], [GL_GENERATE_]AS_TR_SH(m4_toupper($1)))
+  m4_pushdef([gl_generate_cond], [GL_GENERATE_]AS_TR_SH(m4_toupper($1)))
+  case "$gl_generate_var" in
+    false) gl_header_name='' ;;
+    true)
+      dnl It is OK to use a .h file in lib/ from within tests/, but not vice
+      dnl versa.
+      if test -z "$gl_header_name"; then
+        gl_header_name="${gl_source_base_prefix}$1"
+      fi
+      ;;
+    *) echo "*** gl_generate_var is not set correctly" 1>&2; exit 1 ;;
+  esac
+  AC_SUBST(gl_header_name)
+  AM_CONDITIONAL(gl_generate_cond, [$gl_generate_var])
+  m4_popdef([gl_generate_cond])
+  m4_popdef([gl_generate_var])
+  m4_popdef([gl_header_name])
+])
+
 dnl Expands to some code for use in .c programs that, on native Windows, 
defines
 dnl the Microsoft deprecated alias function names to the underscore-prefixed
 dnl actual function names. With this macro, these function names are available
diff --git a/m4/gnulib-comp.m4 b/m4/gnulib-comp.m4
index e314edcfb5..c47ea915f1 100644
--- a/m4/gnulib-comp.m4
+++ b/m4/gnulib-comp.m4
@@ -1,5 +1,5 @@
 # DO NOT EDIT! GENERATED AUTOMATICALLY!
-# Copyright (C) 2002-2021 Free Software Foundation, Inc.
+# Copyright (C) 2002-2022 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
@@ -103,6 +103,7 @@ AC_DEFUN([gl_EARLY],
   # Code from module fsusage:
   # Code from module fsync:
   # Code from module futimens:
+  # Code from module gen-header:
   # Code from module getdtablesize:
   # Code from module getgroups:
   # Code from module getloadavg:
@@ -128,6 +129,7 @@ AC_DEFUN([gl_EARLY],
   # Code from module libgmp:
   # Code from module limits-h:
   # Code from module lstat:
+  # Code from module malloc-gnu:
   # Code from module malloc-posix:
   # Code from module manywarnings:
   # Code from module memmem-simple:
@@ -224,10 +226,15 @@ AC_DEFUN([gl_INIT],
   m4_pushdef([GL_MODULE_INDICATOR_PREFIX], [GL])
   gl_COMMON
   gl_source_base='lib'
+  gl_source_base_prefix=
   gl_FUNC_ACL
   gl_FUNC_ALLOCA
+  gl_CONDITIONAL_HEADER([alloca.h])
+  AC_PROG_MKDIR_P
   gl___BUILTIN_EXPECT
   gl_BYTESWAP
+  gl_CONDITIONAL_HEADER([byteswap.h])
+  AC_PROG_MKDIR_P
   gl_CANONICALIZE_LGPL
   if test $HAVE_CANONICALIZE_FILE_NAME = 0 || test 
$REPLACE_CANONICALIZE_FILE_NAME = 1; then
     AC_LIBOBJ([canonicalize-lgpl])
@@ -255,6 +262,7 @@ AC_DEFUN([gl_INIT],
   gl_CHECK_TYPE_STRUCT_DIRENT_D_TYPE
   gl_DIRENT_H
   gl_DIRENT_H_REQUIRE_DEFAULTS
+  AC_PROG_MKDIR_P
   gl_DOUBLE_SLASH_ROOT
   gl_FUNC_DUP2
   if test $REPLACE_DUP2 = 1; then
@@ -265,7 +273,14 @@ AC_DEFUN([gl_INIT],
   gl_ENVIRON
   gl_UNISTD_MODULE_INDICATOR([environ])
   gl_HEADER_ERRNO_H
+  gl_CONDITIONAL_HEADER([errno.h])
+  AC_PROG_MKDIR_P
   gl_EXECINFO_H
+  gl_CONDITIONAL_HEADER([execinfo.h])
+  AC_PROG_MKDIR_P
+  if $GL_GENERATE_EXECINFO_H; then
+    AC_LIBOBJ([execinfo])
+  fi
   gl_FUNC_EXPLICIT_BZERO
   if test $HAVE_EXPLICIT_BZERO = 0; then
     AC_LIBOBJ([explicit_bzero])
@@ -293,6 +308,7 @@ AC_DEFUN([gl_INIT],
   gl_FCNTL_MODULE_INDICATOR([fcntl])
   gl_FCNTL_H
   gl_FCNTL_H_REQUIRE_DEFAULTS
+  AC_PROG_MKDIR_P
   gl_FUNC_FDOPENDIR
   if test $HAVE_FDOPENDIR = 0 || test $REPLACE_FDOPENDIR = 1; then
     AC_LIBOBJ([fdopendir])
@@ -345,6 +361,9 @@ AC_DEFUN([gl_INIT],
   dnl mechanism), there is no need to do any AC_LIBOBJ or AC_SUBST here; they 
are
   dnl done in the getopt-posix module.
   gl_FUNC_GETOPT_POSIX
+  gl_CONDITIONAL_HEADER([getopt.h])
+  gl_CONDITIONAL_HEADER([getopt-cdefs.h])
+  AC_PROG_MKDIR_P
   if test $REPLACE_GETOPT = 1; then
     AC_LIBOBJ([getopt])
     AC_LIBOBJ([getopt1])
@@ -367,15 +386,22 @@ AC_DEFUN([gl_INIT],
   fi
   gl_SYS_TIME_MODULE_INDICATOR([gettimeofday])
   gl_IEEE754_H
+  gl_CONDITIONAL_HEADER([ieee754.h])
+  AC_PROG_MKDIR_P
   gl_INTTYPES_INCOMPLETE
   gl_INTTYPES_H_REQUIRE_DEFAULTS
+  AC_PROG_MKDIR_P
   AC_REQUIRE([gl_LARGEFILE])
   gl___INLINE
   gl_LIBGMP
+  gl_CONDITIONAL_HEADER([gmp.h])
+  AC_PROG_MKDIR_P
   if test $HAVE_LIBGMP != yes; then
     AC_LIBOBJ([mini-gmp-gnulib])
   fi
   gl_LIMITS_H
+  gl_CONDITIONAL_HEADER([limits.h])
+  AC_PROG_MKDIR_P
   gl_FUNC_LSTAT
   if test $REPLACE_LSTAT = 1; then
     AC_LIBOBJ([lstat])
@@ -458,16 +484,26 @@ AC_DEFUN([gl_INIT],
   gl_STRING_MODULE_INDICATOR([sigdescr_np])
   gl_SIGNAL_H
   gl_SIGNAL_H_REQUIRE_DEFAULTS
+  AC_PROG_MKDIR_P
   gl_TYPE_SOCKLEN_T
   gt_TYPE_SSIZE_T
   gl_STAT_TIME
   gl_STAT_BIRTHTIME
   gl_STDALIGN_H
+  gl_CONDITIONAL_HEADER([stdalign.h])
+  AC_PROG_MKDIR_P
   gl_STDDEF_H
   gl_STDDEF_H_REQUIRE_DEFAULTS
+  gl_CONDITIONAL_HEADER([stddef.h])
+  AC_PROG_MKDIR_P
   gl_STDINT_H
+  gl_CONDITIONAL_HEADER([stdint.h])
+  dnl Because of gl_REPLACE_LIMITS_H:
+  gl_CONDITIONAL_HEADER([limits.h])
+  AC_PROG_MKDIR_P
   gl_STDIO_H
   gl_STDIO_H_REQUIRE_DEFAULTS
+  AC_PROG_MKDIR_P
   dnl No need to create extra modules for these functions. Everyone who uses
   dnl <stdio.h> likely needs them.
   gl_STDIO_MODULE_INDICATOR([fscanf])
@@ -493,6 +529,7 @@ AC_DEFUN([gl_INIT],
   gl_STDIO_MODULE_INDICATOR([fwrite])
   gl_STDLIB_H
   gl_STDLIB_H_REQUIRE_DEFAULTS
+  AC_PROG_MKDIR_P
   gl_FUNC_STPCPY
   if test $HAVE_STPCPY = 0; then
     AC_LIBOBJ([stpcpy])
@@ -501,6 +538,7 @@ AC_DEFUN([gl_INIT],
   gl_STRING_MODULE_INDICATOR([stpcpy])
   gl_STRING_H
   gl_STRING_H_REQUIRE_DEFAULTS
+  AC_PROG_MKDIR_P
   gl_FUNC_STRNLEN
   if test $HAVE_DECL_STRNLEN = 0 || test $REPLACE_STRNLEN = 1; then
     AC_LIBOBJ([strnlen])
@@ -537,6 +575,7 @@ AC_DEFUN([gl_INIT],
   gl_MODULE_INDICATOR([tempname])
   gl_TIME_H
   gl_TIME_H_REQUIRE_DEFAULTS
+  AC_PROG_MKDIR_P
   gl_TIME_R
   if test $HAVE_LOCALTIME_R = 0 || test $REPLACE_LOCALTIME_R = 1; then
     AC_LIBOBJ([time_r])
@@ -558,6 +597,7 @@ AC_DEFUN([gl_INIT],
   gl_TIMESPEC
   gl_UNISTD_H
   gl_UNISTD_H_REQUIRE_DEFAULTS
+  AC_PROG_MKDIR_P
   AC_DEFINE([GNULIB_STDIO_SINGLE_THREAD], [1],
     [Define to 1 if you want the FILE stream functions getc, putc, etc.
      to use unlocked I/O if available, throughout the package.
@@ -586,6 +626,7 @@ AC_DEFUN([gl_INIT],
   gl_gnulib_enabled_be453cec5eecf5731a274f2de7f2db36=false
   gl_gnulib_enabled_a9786850e999ae65a836a6041e8e5ed1=false
   gl_gnulib_enabled_lchmod=false
+  gl_gnulib_enabled_e80bf6f757095d2e5fc94dafb8f8fc8b=false
   gl_gnulib_enabled_ef455225c00f5049c808c2eda3e76866=false
   gl_gnulib_enabled_5264294aa0a5557541b53c8c741f7f31=false
   gl_gnulib_enabled_open=false
@@ -721,16 +762,31 @@ AC_DEFUN([gl_INIT],
       gl_gnulib_enabled_lchmod=true
     fi
   }
+  func_gl_gnulib_m4code_e80bf6f757095d2e5fc94dafb8f8fc8b ()
+  {
+    if ! $gl_gnulib_enabled_e80bf6f757095d2e5fc94dafb8f8fc8b; then
+      gl_FUNC_MALLOC_GNU
+      if test $REPLACE_MALLOC_FOR_MALLOC_GNU = 1; then
+        AC_LIBOBJ([malloc])
+      fi
+      gl_STDLIB_MODULE_INDICATOR([malloc-gnu])
+      gl_gnulib_enabled_e80bf6f757095d2e5fc94dafb8f8fc8b=true
+      func_gl_gnulib_m4code_ef455225c00f5049c808c2eda3e76866
+      if test $REPLACE_MALLOC_FOR_MALLOC_GNU = 1; then
+        func_gl_gnulib_m4code_682e609604ccaac6be382e4ee3a4eaec
+      fi
+    fi
+  }
   func_gl_gnulib_m4code_ef455225c00f5049c808c2eda3e76866 ()
   {
     if ! $gl_gnulib_enabled_ef455225c00f5049c808c2eda3e76866; then
       AC_REQUIRE([gl_FUNC_MALLOC_POSIX])
-      if test $REPLACE_MALLOC = 1; then
+      if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then
         AC_LIBOBJ([malloc])
       fi
       gl_STDLIB_MODULE_INDICATOR([malloc-posix])
       gl_gnulib_enabled_ef455225c00f5049c808c2eda3e76866=true
-      if test $REPLACE_MALLOC = 1; then
+      if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then
         func_gl_gnulib_m4code_682e609604ccaac6be382e4ee3a4eaec
       fi
     fi
@@ -783,26 +839,33 @@ AC_DEFUN([gl_INIT],
   {
     if ! $gl_gnulib_enabled_d3b2383720ee0e541357aa2aac598e2b; then
       gl_FUNC_REALLOC_GNU
-      if test $REPLACE_REALLOC = 1; then
+      if test $REPLACE_REALLOC_FOR_REALLOC_GNU = 1; then
         AC_LIBOBJ([realloc])
       fi
+      gl_STDLIB_MODULE_INDICATOR([realloc-gnu])
       gl_gnulib_enabled_d3b2383720ee0e541357aa2aac598e2b=true
+      if test $REPLACE_REALLOC_FOR_REALLOC_GNU = 1; then
+        func_gl_gnulib_m4code_e80bf6f757095d2e5fc94dafb8f8fc8b
+      fi
       func_gl_gnulib_m4code_61bcaca76b3e6f9ae55d57a1c3193bc4
+      if test $REPLACE_REALLOC_FOR_REALLOC_GNU = 1; then
+        func_gl_gnulib_m4code_682e609604ccaac6be382e4ee3a4eaec
+      fi
     fi
   }
   func_gl_gnulib_m4code_61bcaca76b3e6f9ae55d57a1c3193bc4 ()
   {
     if ! $gl_gnulib_enabled_61bcaca76b3e6f9ae55d57a1c3193bc4; then
       gl_FUNC_REALLOC_POSIX
-      if test $REPLACE_REALLOC = 1; then
+      if test $REPLACE_REALLOC_FOR_REALLOC_POSIX = 1; then
         AC_LIBOBJ([realloc])
       fi
       gl_STDLIB_MODULE_INDICATOR([realloc-posix])
       gl_gnulib_enabled_61bcaca76b3e6f9ae55d57a1c3193bc4=true
-      if test $REPLACE_REALLOC = 1; then
+      if test $REPLACE_REALLOC_FOR_REALLOC_POSIX = 1; then
         func_gl_gnulib_m4code_ef455225c00f5049c808c2eda3e76866
       fi
-      if test $REPLACE_REALLOC = 1; then
+      if test $REPLACE_REALLOC_FOR_REALLOC_POSIX = 1; then
         func_gl_gnulib_m4code_682e609604ccaac6be382e4ee3a4eaec
       fi
     fi
@@ -937,6 +1000,7 @@ AC_DEFUN([gl_INIT],
   AM_CONDITIONAL([gl_GNULIB_ENABLED_be453cec5eecf5731a274f2de7f2db36], 
[$gl_gnulib_enabled_be453cec5eecf5731a274f2de7f2db36])
   AM_CONDITIONAL([gl_GNULIB_ENABLED_a9786850e999ae65a836a6041e8e5ed1], 
[$gl_gnulib_enabled_a9786850e999ae65a836a6041e8e5ed1])
   AM_CONDITIONAL([gl_GNULIB_ENABLED_lchmod], [$gl_gnulib_enabled_lchmod])
+  AM_CONDITIONAL([gl_GNULIB_ENABLED_e80bf6f757095d2e5fc94dafb8f8fc8b], 
[$gl_gnulib_enabled_e80bf6f757095d2e5fc94dafb8f8fc8b])
   AM_CONDITIONAL([gl_GNULIB_ENABLED_ef455225c00f5049c808c2eda3e76866], 
[$gl_gnulib_enabled_ef455225c00f5049c808c2eda3e76866])
   AM_CONDITIONAL([gl_GNULIB_ENABLED_5264294aa0a5557541b53c8c741f7f31], 
[$gl_gnulib_enabled_5264294aa0a5557541b53c8c741f7f31])
   AM_CONDITIONAL([gl_GNULIB_ENABLED_open], [$gl_gnulib_enabled_open])
@@ -993,6 +1057,7 @@ AC_DEFUN([gl_INIT],
   m4_pushdef([GL_MODULE_INDICATOR_PREFIX], [GL])
   gl_COMMON
   gl_source_base='tests'
+  gl_source_base_prefix=
 changequote(,)dnl
   gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr 
abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 
's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS
 changequote([, ])dnl
diff --git a/m4/group-member.m4 b/m4/group-member.m4
index 7a7bb40afc..f9bc38b629 100644
--- a/m4/group-member.m4
+++ b/m4/group-member.m4
@@ -1,6 +1,6 @@
 # serial 14
 
-# Copyright (C) 1999-2001, 2003-2007, 2009-2021 Free Software Foundation, Inc.
+# Copyright (C) 1999-2001, 2003-2007, 2009-2022 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 68af3bd7eb..aff4f2c2df 100644
--- a/m4/ieee754-h.m4
+++ b/m4/ieee754-h.m4
@@ -1,6 +1,6 @@
 # Configure ieee754-h module
 
-dnl Copyright 2018-2021 Free Software Foundation, Inc.
+dnl Copyright 2018-2022 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.
@@ -10,12 +10,10 @@ AC_DEFUN([gl_IEEE754_H],
   AC_REQUIRE([AC_C_BIGENDIAN])
   AC_CHECK_HEADERS_ONCE([ieee754.h])
   if test $ac_cv_header_ieee754_h = yes; then
-    IEEE754_H=
+    GL_GENERATE_IEEE754_H=false
   else
-    IEEE754_H=ieee754.h
+    GL_GENERATE_IEEE754_H=true
     AC_DEFINE([_GL_REPLACE_IEEE754_H], 1,
               [Define to 1 if <ieee754.h> is missing.])
   fi
-  AC_SUBST([IEEE754_H])
-  AM_CONDITIONAL([GL_GENERATE_IEEE754_H], [test -n "$IEEE754_H"])
 ])
diff --git a/m4/include_next.m4 b/m4/include_next.m4
index bdd542bc64..a9247f6f11 100644
--- a/m4/include_next.m4
+++ b/m4/include_next.m4
@@ -1,5 +1,5 @@
 # include_next.m4 serial 26
-dnl Copyright (C) 2006-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2006-2022 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.
@@ -193,9 +193,9 @@ AC_DEFUN([gl_NEXT_HEADERS_INTERNAL],
              if test AS_VAR_GET([gl_header_exists]) = yes; then
              AS_VAR_POPDEF([gl_header_exists])
             ])
-           gl_ABSOLUTE_HEADER_ONE(gl_HEADER_NAME)
-           AS_VAR_COPY([gl_header], [gl_cv_absolute_]AS_TR_SH(gl_HEADER_NAME))
-           AS_VAR_SET([gl_next_header], ['"'$gl_header'"'])
+          gl_ABSOLUTE_HEADER_ONE(gl_HEADER_NAME)
+          AS_VAR_COPY([gl_header], [gl_cv_absolute_]AS_TR_SH(gl_HEADER_NAME))
+          AS_VAR_SET([gl_next_header], ['"'$gl_header'"'])
           m4_if([$2], [check],
             [else
                AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>'])
diff --git a/m4/inttypes.m4 b/m4/inttypes.m4
index 64b1de5c42..df25a21eb9 100644
--- a/m4/inttypes.m4
+++ b/m4/inttypes.m4
@@ -1,5 +1,5 @@
-# inttypes.m4 serial 35
-dnl Copyright (C) 2006-2021 Free Software Foundation, Inc.
+# inttypes.m4 serial 36
+dnl Copyright (C) 2006-2022 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.
@@ -36,7 +36,7 @@ AC_DEFUN_ONCE([gl_INTTYPES_INCOMPLETE],
 AC_DEFUN([gl_INTTYPES_PRI_SCN],
 [
   PRIPTR_PREFIX=
-  if test -n "$STDINT_H"; then
+  if $GL_GENERATE_STDINT_H; then
     dnl Using the gnulib <stdint.h>. It defines intptr_t to 'long' or
     dnl 'long long', depending on _WIN64.
     AC_COMPILE_IFELSE(
diff --git a/m4/largefile.m4 b/m4/largefile.m4
index fbde5e6647..3e8b5e39a7 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-2021 Free Software Foundation, Inc.
+# Copyright 1992-1996, 1998-2022 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 3d181be051..5baee738ef 100644
--- a/m4/lchmod.m4
+++ b/m4/lchmod.m4
@@ -1,6 +1,6 @@
 #serial 8
 
-dnl Copyright (C) 2005-2006, 2008-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2005-2006, 2008-2022 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 c630a19e64..a2dee93382 100644
--- a/m4/libgmp.m4
+++ b/m4/libgmp.m4
@@ -1,6 +1,6 @@
-# libgmp.m4 serial 5
+# libgmp.m4 serial 6
 # Configure the GMP library or a replacement.
-dnl Copyright 2020-2021 Free Software Foundation, Inc.
+dnl Copyright 2020-2022 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.
@@ -59,11 +59,10 @@ AC_DEFUN([gl_LIBGMP],
             [ Try specifying --with-libgmp-prefix=DIR.])])
      fi])
   if test $HAVE_LIBGMP = yes && test "$ac_cv_header_gmp_h" = yes; then
-    GMP_H=
+    GL_GENERATE_GMP_H=false
   else
-    GMP_H=gmp.h
+    GL_GENERATE_GMP_H=true
   fi
-  AC_SUBST([GMP_H])
   AM_CONDITIONAL([GL_GENERATE_MINI_GMP_H],
     [test $HAVE_LIBGMP != yes])
   AM_CONDITIONAL([GL_GENERATE_GMP_GMP_H],
diff --git a/m4/limits-h.m4 b/m4/limits-h.m4
index 00c9fe9e50..5d5a5bf584 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-2021 Free Software Foundation, Inc.
+dnl Copyright 2016-2022 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.
@@ -27,18 +27,15 @@ AC_DEFUN_ONCE([gl_LIMITS_H],
        [gl_cv_header_limits_width=yes],
        [gl_cv_header_limits_width=no])])
   if test "$gl_cv_header_limits_width" = yes; then
-    LIMITS_H=
+    GL_GENERATE_LIMITS_H=false
   else
-    LIMITS_H=limits.h
+    GL_GENERATE_LIMITS_H=true
   fi
-  AC_SUBST([LIMITS_H])
-  AM_CONDITIONAL([GL_GENERATE_LIMITS_H], [test -n "$LIMITS_H"])
 ])
 
 dnl Unconditionally enables the replacement of <limits.h>.
 AC_DEFUN([gl_REPLACE_LIMITS_H],
 [
   AC_REQUIRE([gl_LIMITS_H])
-  LIMITS_H='limits.h'
-  AM_CONDITIONAL([GL_GENERATE_LIMITS_H], [test -n "$LIMITS_H"])
+  GL_GENERATE_LIMITS_H=true
 ])
diff --git a/m4/lstat.m4 b/m4/lstat.m4
index 62e9db29a7..d987060bd1 100644
--- a/m4/lstat.m4
+++ b/m4/lstat.m4
@@ -1,6 +1,6 @@
 # serial 33
 
-# Copyright (C) 1997-2001, 2003-2021 Free Software Foundation, Inc.
+# Copyright (C) 1997-2001, 2003-2022 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 972e808ab7..6b76c1e64d 100644
--- a/m4/malloc.m4
+++ b/m4/malloc.m4
@@ -1,5 +1,5 @@
-# malloc.m4 serial 27
-dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc.
+# malloc.m4 serial 28
+dnl Copyright (C) 2007, 2009-2022 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.
@@ -43,8 +43,9 @@ AC_DEFUN([gl_FUNC_MALLOC_GNU],
 [
   AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
   AC_REQUIRE([gl_FUNC_MALLOC_POSIX])
-  if test $REPLACE_MALLOC = 0; then
-    _AC_FUNC_MALLOC_IF([], [REPLACE_MALLOC=1])
+  REPLACE_MALLOC_FOR_MALLOC_GNU="$REPLACE_MALLOC_FOR_MALLOC_POSIX"
+  if test $REPLACE_MALLOC_FOR_MALLOC_GNU = 0; then
+    _AC_FUNC_MALLOC_IF([], [REPLACE_MALLOC_FOR_MALLOC_GNU=1])
   fi
 ])
 
@@ -56,7 +57,7 @@ AC_DEFUN([gl_FUNC_MALLOC_PTRDIFF],
 [
   AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
   AC_REQUIRE([gl_CHECK_MALLOC_PTRDIFF])
-  test "$gl_cv_malloc_ptrdiff" = yes || REPLACE_MALLOC=1
+  test "$gl_cv_malloc_ptrdiff" = yes || REPLACE_MALLOC_FOR_MALLOC_POSIX=1
 ])
 
 # Test whether malloc, realloc, calloc refuse to create objects
@@ -109,7 +110,7 @@ AC_DEFUN([gl_FUNC_MALLOC_POSIX],
     AC_DEFINE([HAVE_MALLOC_POSIX], [1],
       [Define if malloc, realloc, and calloc set errno on allocation failure.])
   else
-    REPLACE_MALLOC=1
+    REPLACE_MALLOC_FOR_MALLOC_POSIX=1
   fi
 ])
 
diff --git a/m4/manywarnings.m4 b/m4/manywarnings.m4
index 872ea58e62..253393e51b 100644
--- a/m4/manywarnings.m4
+++ b/m4/manywarnings.m4
@@ -1,5 +1,5 @@
 # manywarnings.m4 serial 23
-dnl Copyright (C) 2008-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2008-2022 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 e7fe3580db..a6eba1bc12 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-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2000-2002, 2008-2022 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 021b352aac..cefb9cfe8e 100644
--- a/m4/md5.m4
+++ b/m4/md5.m4
@@ -1,5 +1,5 @@
 # md5.m4 serial 14
-dnl Copyright (C) 2002-2006, 2008-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2006, 2008-2022 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 6dac766128..e01aa5c713 100644
--- a/m4/memmem.m4
+++ b/m4/memmem.m4
@@ -1,5 +1,5 @@
 # memmem.m4 serial 29
-dnl Copyright (C) 2002-2004, 2007-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2004, 2007-2022 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 f9d9ec8f30..1107eb4a46 100644
--- a/m4/mempcpy.m4
+++ b/m4/mempcpy.m4
@@ -1,5 +1,5 @@
 # mempcpy.m4 serial 12
-dnl Copyright (C) 2003-2004, 2006-2007, 2009-2021 Free Software Foundation,
+dnl Copyright (C) 2003-2004, 2006-2007, 2009-2022 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,
diff --git a/m4/memrchr.m4 b/m4/memrchr.m4
index 40f61c5ac0..ec5e2083bc 100644
--- a/m4/memrchr.m4
+++ b/m4/memrchr.m4
@@ -1,5 +1,5 @@
 # memrchr.m4 serial 11
-dnl Copyright (C) 2002-2003, 2005-2007, 2009-2021 Free Software Foundation,
+dnl Copyright (C) 2002-2003, 2005-2007, 2009-2022 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,
diff --git a/m4/minmax.m4 b/m4/minmax.m4
index e21a6879a0..b976739794 100644
--- a/m4/minmax.m4
+++ b/m4/minmax.m4
@@ -1,5 +1,5 @@
 # minmax.m4 serial 4
-dnl Copyright (C) 2005, 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2005, 2009-2022 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 46534d48ef..2176f37296 100644
--- a/m4/mkostemp.m4
+++ b/m4/mkostemp.m4
@@ -1,5 +1,5 @@
 # mkostemp.m4 serial 2
-dnl Copyright (C) 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2022 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 721189af56..d48f40d187 100644
--- a/m4/mktime.m4
+++ b/m4/mktime.m4
@@ -1,5 +1,5 @@
 # serial 36
-dnl Copyright (C) 2002-2003, 2005-2007, 2009-2021 Free Software Foundation,
+dnl Copyright (C) 2002-2003, 2005-2007, 2009-2022 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,
diff --git a/m4/mode_t.m4 b/m4/mode_t.m4
index 3bd4b89fee..e08d27a749 100644
--- a/m4/mode_t.m4
+++ b/m4/mode_t.m4
@@ -1,5 +1,5 @@
 # mode_t.m4 serial 2
-dnl Copyright (C) 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2022 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 f1678d9f6e..5d942765d4 100644
--- a/m4/multiarch.m4
+++ b/m4/multiarch.m4
@@ -1,5 +1,5 @@
 # multiarch.m4 serial 9
-dnl Copyright (C) 2008-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2008-2022 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/nocrash.m4 b/m4/nocrash.m4
index 27412cd2e8..91f00c1bc9 100644
--- a/m4/nocrash.m4
+++ b/m4/nocrash.m4
@@ -1,5 +1,5 @@
 # nocrash.m4 serial 5
-dnl Copyright (C) 2005, 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2005, 2009-2022 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 887c66bee8..5c220ae2c4 100644
--- a/m4/nproc.m4
+++ b/m4/nproc.m4
@@ -1,5 +1,5 @@
 # nproc.m4 serial 5
-dnl Copyright (C) 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2022 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 b510554b94..0f613048e3 100644
--- a/m4/nstrftime.m4
+++ b/m4/nstrftime.m4
@@ -1,6 +1,6 @@
 # serial 37
 
-# Copyright (C) 1996-1997, 1999-2007, 2009-2021 Free Software Foundation, Inc.
+# Copyright (C) 1996-1997, 1999-2007, 2009-2022 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 bdec43c804..0890adafc3 100644
--- a/m4/off_t.m4
+++ b/m4/off_t.m4
@@ -1,5 +1,5 @@
 # off_t.m4 serial 1
-dnl Copyright (C) 2012-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2012-2022 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 542a90f42a..16cd5ec4cb 100644
--- a/m4/open-cloexec.m4
+++ b/m4/open-cloexec.m4
@@ -1,6 +1,6 @@
 # Test whether O_CLOEXEC is defined.
 
-dnl Copyright 2017-2021 Free Software Foundation, Inc.
+dnl Copyright 2017-2022 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 e619039e87..4fbf491a75 100644
--- a/m4/open-slash.m4
+++ b/m4/open-slash.m4
@@ -1,5 +1,5 @@
 # open-slash.m4 serial 2
-dnl Copyright (C) 2007-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2022 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 c63438650d..f82fd6cac1 100644
--- a/m4/open.m4
+++ b/m4/open.m4
@@ -1,5 +1,5 @@
 # open.m4 serial 15
-dnl Copyright (C) 2007-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2022 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 e67c656659..44add9905e 100644
--- a/m4/pathmax.m4
+++ b/m4/pathmax.m4
@@ -1,5 +1,5 @@
 # pathmax.m4 serial 11
-dnl Copyright (C) 2002-2003, 2005-2006, 2009-2021 Free Software Foundation,
+dnl Copyright (C) 2002-2003, 2005-2006, 2009-2022 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,
diff --git a/m4/pid_t.m4 b/m4/pid_t.m4
index b7650a10f1..cb26f3612e 100644
--- a/m4/pid_t.m4
+++ b/m4/pid_t.m4
@@ -1,5 +1,5 @@
 # pid_t.m4 serial 4
-dnl Copyright (C) 2020-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2020-2022 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 43d547cb40..b752247825 100644
--- a/m4/pipe2.m4
+++ b/m4/pipe2.m4
@@ -1,5 +1,5 @@
 # pipe2.m4 serial 2
-dnl Copyright (C) 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2022 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 9de63baf99..86114416cb 100644
--- a/m4/pselect.m4
+++ b/m4/pselect.m4
@@ -1,5 +1,5 @@
 # pselect.m4 serial 10
-dnl Copyright (C) 2011-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2011-2022 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 ff7fa9610e..0aa8c53f9e 100644
--- a/m4/pthread_sigmask.m4
+++ b/m4/pthread_sigmask.m4
@@ -1,5 +1,5 @@
 # pthread_sigmask.m4 serial 21
-dnl Copyright (C) 2011-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2011-2022 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 452fab18f1..dae419355a 100644
--- a/m4/rawmemchr.m4
+++ b/m4/rawmemchr.m4
@@ -1,5 +1,5 @@
 # rawmemchr.m4 serial 3
-dnl Copyright (C) 2003, 2007-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2007-2022 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 352788c65d..d1dd521225 100644
--- a/m4/readlink.m4
+++ b/m4/readlink.m4
@@ -1,5 +1,5 @@
 # readlink.m4 serial 16
-dnl Copyright (C) 2003, 2007, 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2007, 2009-2022 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 1ced672185..63c5205e11 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-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2022 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 0abc4185ed..86e57c259f 100644
--- a/m4/realloc.m4
+++ b/m4/realloc.m4
@@ -1,5 +1,5 @@
-# realloc.m4 serial 24
-dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc.
+# realloc.m4 serial 26
+dnl Copyright (C) 2007, 2009-2022 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.
@@ -43,8 +43,8 @@ AC_DEFUN([gl_FUNC_REALLOC_GNU],
 [
   AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
   AC_REQUIRE([gl_FUNC_REALLOC_POSIX])
-  if test $REPLACE_REALLOC = 0; then
-    _AC_FUNC_REALLOC_IF([], [REPLACE_REALLOC=1])
+  if test $REPLACE_REALLOC_FOR_REALLOC_GNU = 0; then
+    _AC_FUNC_REALLOC_IF([], [REPLACE_REALLOC_FOR_REALLOC_GNU=1])
   fi
 ])# gl_FUNC_REALLOC_GNU
 
@@ -57,7 +57,7 @@ AC_DEFUN([gl_FUNC_REALLOC_POSIX],
 [
   AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
   AC_REQUIRE([gl_FUNC_MALLOC_POSIX])
-  if test $REPLACE_MALLOC = 1; then
-    REPLACE_REALLOC=1
+  if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then
+    REPLACE_REALLOC_FOR_REALLOC_POSIX=1
   fi
 ])
diff --git a/m4/regex.m4 b/m4/regex.m4
index 1c7e562f6c..47342986d2 100644
--- a/m4/regex.m4
+++ b/m4/regex.m4
@@ -1,6 +1,6 @@
 # serial 73
 
-# Copyright (C) 1996-2001, 2003-2021 Free Software Foundation, Inc.
+# Copyright (C) 1996-2001, 2003-2022 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 fdba7a6f7b..0d7abc7245 100644
--- a/m4/sha1.m4
+++ b/m4/sha1.m4
@@ -1,5 +1,5 @@
 # sha1.m4 serial 12
-dnl Copyright (C) 2002-2006, 2008-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2006, 2008-2022 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 f49899c84c..b3d8f92e9f 100644
--- a/m4/sha256.m4
+++ b/m4/sha256.m4
@@ -1,5 +1,5 @@
 # sha256.m4 serial 8
-dnl Copyright (C) 2005, 2008-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2005, 2008-2022 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 b45fdf50f6..31710575f7 100644
--- a/m4/sha512.m4
+++ b/m4/sha512.m4
@@ -1,5 +1,5 @@
 # sha512.m4 serial 9
-dnl Copyright (C) 2005-2006, 2008-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2005-2006, 2008-2022 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 8951bbd7f0..6531606092 100644
--- a/m4/sig2str.m4
+++ b/m4/sig2str.m4
@@ -1,5 +1,5 @@
 # serial 7
-dnl Copyright (C) 2002, 2005-2006, 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2005-2006, 2009-2022 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/sigdescr_np.m4 b/m4/sigdescr_np.m4
index 17c22506cc..4ce3b01589 100644
--- a/m4/sigdescr_np.m4
+++ b/m4/sigdescr_np.m4
@@ -1,5 +1,5 @@
 # sigdescr_np.m4 serial 2
-dnl Copyright (C) 2020-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2020-2022 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 8b938809b7..4c05c6274f 100644
--- a/m4/signal_h.m4
+++ b/m4/signal_h.m4
@@ -1,5 +1,5 @@
 # signal_h.m4 serial 22
-dnl Copyright (C) 2007-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2022 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 eca1d1b946..1390ac41bd 100644
--- a/m4/socklen.m4
+++ b/m4/socklen.m4
@@ -1,5 +1,5 @@
 # socklen.m4 serial 11
-dnl Copyright (C) 2005-2007, 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2005-2007, 2009-2022 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 f0ed509fcc..03b2b895b9 100644
--- a/m4/ssize_t.m4
+++ b/m4/ssize_t.m4
@@ -1,5 +1,5 @@
 # ssize_t.m4 serial 5 (gettext-0.18.2)
-dnl Copyright (C) 2001-2003, 2006, 2010-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2001-2003, 2006, 2010-2022 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/st_dm_mode.m4 b/m4/st_dm_mode.m4
index b39c3ee997..347954990b 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-2021 Free Software Foundation,
+# Copyright (C) 1998-1999, 2001, 2009-2022 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 df1c2a7453..342857d39e 100644
--- a/m4/stat-time.m4
+++ b/m4/stat-time.m4
@@ -1,6 +1,6 @@
 # Checks for stat-related time functions.
 
-# Copyright (C) 1998-1999, 2001, 2003, 2005-2007, 2009-2021 Free Software
+# Copyright (C) 1998-1999, 2001, 2003, 2005-2007, 2009-2022 Free Software
 # Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
diff --git a/m4/std-gnu11.m4 b/m4/std-gnu11.m4
index 7b1a042af1..5ca18607fe 100644
--- a/m4/std-gnu11.m4
+++ b/m4/std-gnu11.m4
@@ -9,7 +9,7 @@
 m4_version_prereq([2.70], [], [
 
 
-# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+# Copyright (C) 2001-2022 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 e22d7f78c0..78577cb2ac 100644
--- a/m4/stdalign.m4
+++ b/m4/stdalign.m4
@@ -1,6 +1,6 @@
 # Check for stdalign.h that conforms to C11.
 
-dnl Copyright 2011-2021 Free Software Foundation, Inc.
+dnl Copyright 2011-2022 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.
@@ -49,11 +49,8 @@ AC_DEFUN([gl_STDALIGN_H],
        [gl_cv_header_working_stdalign_h=no])])
 
   if test $gl_cv_header_working_stdalign_h = yes; then
-    STDALIGN_H=''
+    GL_GENERATE_STDALIGN_H=false
   else
-    STDALIGN_H='stdalign.h'
+    GL_GENERATE_STDALIGN_H=true
   fi
-
-  AC_SUBST([STDALIGN_H])
-  AM_CONDITIONAL([GL_GENERATE_STDALIGN_H], [test -n "$STDALIGN_H"])
 ])
diff --git a/m4/stddef_h.m4 b/m4/stddef_h.m4
index 1303d2e06c..abfd203038 100644
--- a/m4/stddef_h.m4
+++ b/m4/stddef_h.m4
@@ -1,5 +1,5 @@
-# stddef_h.m4 serial 11
-dnl Copyright (C) 2009-2021 Free Software Foundation, Inc.
+# stddef_h.m4 serial 12
+dnl Copyright (C) 2009-2022 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.
@@ -14,7 +14,7 @@ AC_DEFUN_ONCE([gl_STDDEF_H],
   dnl Persuade OpenBSD <stddef.h> to declare max_align_t.
   AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
 
-  STDDEF_H=
+  GL_GENERATE_STDDEF_H=false
 
   dnl Test whether the type max_align_t exists and whether its alignment
   dnl "is as great as is supported by the implementation in all contexts".
@@ -41,12 +41,12 @@ AC_DEFUN_ONCE([gl_STDDEF_H],
     ])
   if test $gl_cv_type_max_align_t = no; then
     HAVE_MAX_ALIGN_T=0
-    STDDEF_H=stddef.h
+    GL_GENERATE_STDDEF_H=true
   fi
 
   if test $gt_cv_c_wchar_t = no; then
     HAVE_WCHAR_T=0
-    STDDEF_H=stddef.h
+    GL_GENERATE_STDDEF_H=true
   fi
 
   AC_CACHE_CHECK([whether NULL can be used in arbitrary expressions],
@@ -58,12 +58,10 @@ AC_DEFUN_ONCE([gl_STDDEF_H],
       [gl_cv_decl_null_works=no])])
   if test $gl_cv_decl_null_works = no; then
     REPLACE_NULL=1
-    STDDEF_H=stddef.h
+    GL_GENERATE_STDDEF_H=true
   fi
 
-  AC_SUBST([STDDEF_H])
-  AM_CONDITIONAL([GL_GENERATE_STDDEF_H], [test -n "$STDDEF_H"])
-  if test -n "$STDDEF_H"; then
+  if $GL_GENERATE_STDDEF_H; then
     gl_NEXT_HEADERS([stddef.h])
   fi
 ])
diff --git a/m4/stdint.m4 b/m4/stdint.m4
index 2eb1652d8e..c3f0894277 100644
--- a/m4/stdint.m4
+++ b/m4/stdint.m4
@@ -1,5 +1,5 @@
-# stdint.m4 serial 60
-dnl Copyright (C) 2001-2021 Free Software Foundation, Inc.
+# stdint.m4 serial 61
+dnl Copyright (C) 2001-2022 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.
@@ -296,7 +296,7 @@ static const char *macro_values[] =
   HAVE_C99_STDINT_H=0
   HAVE_SYS_BITYPES_H=0
   HAVE_SYS_INTTYPES_H=0
-  STDINT_H=stdint.h
+  GL_GENERATE_STDINT_H=true
   case "$gl_cv_header_working_stdint_h" in
     *yes)
       HAVE_C99_STDINT_H=1
@@ -341,7 +341,7 @@ int32_t i32 = INT32_C (0x7fffffff);
               ]])],
            [gl_cv_header_stdint_width=yes])])
       if test "$gl_cv_header_stdint_width" = yes; then
-        STDINT_H=
+        GL_GENERATE_STDINT_H=false
       fi
       ;;
     *)
@@ -364,8 +364,6 @@ int32_t i32 = INT32_C (0x7fffffff);
   AC_SUBST([HAVE_C99_STDINT_H])
   AC_SUBST([HAVE_SYS_BITYPES_H])
   AC_SUBST([HAVE_SYS_INTTYPES_H])
-  AC_SUBST([STDINT_H])
-  AM_CONDITIONAL([GL_GENERATE_STDINT_H], [test -n "$STDINT_H"])
 ])
 
 dnl gl_STDINT_BITSIZEOF(TYPES, INCLUDES)
diff --git a/m4/stdio_h.m4 b/m4/stdio_h.m4
index e704383862..cc80e77365 100644
--- a/m4/stdio_h.m4
+++ b/m4/stdio_h.m4
@@ -1,5 +1,5 @@
-# stdio_h.m4 serial 56
-dnl Copyright (C) 2007-2021 Free Software Foundation, Inc.
+# stdio_h.m4 serial 57
+dnl Copyright (C) 2007-2022 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.
@@ -119,6 +119,7 @@ AC_DEFUN([gl_STDIO_H_REQUIRE_DEFAULTS],
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FGETC])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FGETS])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FOPEN])
+    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FOPEN_GNU])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPRINTF])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPRINTF_POSIX])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPURGE])
@@ -202,6 +203,7 @@ AC_DEFUN([gl_STDIO_H_DEFAULTS],
   REPLACE_FDOPEN=0;              AC_SUBST([REPLACE_FDOPEN])
   REPLACE_FFLUSH=0;              AC_SUBST([REPLACE_FFLUSH])
   REPLACE_FOPEN=0;               AC_SUBST([REPLACE_FOPEN])
+  REPLACE_FOPEN_FOR_FOPEN_GNU=0; AC_SUBST([REPLACE_FOPEN_FOR_FOPEN_GNU])
   REPLACE_FPRINTF=0;             AC_SUBST([REPLACE_FPRINTF])
   REPLACE_FPURGE=0;              AC_SUBST([REPLACE_FPURGE])
   REPLACE_FREOPEN=0;             AC_SUBST([REPLACE_FREOPEN])
diff --git a/m4/stdlib_h.m4 b/m4/stdlib_h.m4
index 9c1d1c76c1..9e2096976f 100644
--- a/m4/stdlib_h.m4
+++ b/m4/stdlib_h.m4
@@ -1,5 +1,5 @@
-# stdlib_h.m4 serial 63
-dnl Copyright (C) 2007-2021 Free Software Foundation, Inc.
+# stdlib_h.m4 serial 66
+dnl Copyright (C) 2007-2022 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.
@@ -68,12 +68,14 @@ AC_DEFUN([gl_STDLIB_H_REQUIRE_DEFAULTS],
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB__EXIT])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ALIGNED_ALLOC])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ATOLL])
+    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CALLOC_GNU])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CALLOC_POSIX])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CANONICALIZE_FILE_NAME])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREE_POSIX])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETLOADAVG])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETSUBOPT])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GRANTPT])
+    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MALLOC_GNU])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MALLOC_POSIX])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBTOWC])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKDTEMP])
@@ -90,6 +92,7 @@ AC_DEFUN([gl_STDLIB_H_REQUIRE_DEFAULTS],
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RANDOM])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RANDOM_R])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALLOCARRAY])
+    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALLOC_GNU])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALLOC_POSIX])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALPATH])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RPMATCH])
@@ -164,11 +167,13 @@ AC_DEFUN([gl_STDLIB_H_DEFAULTS],
   HAVE_UNLOCKPT=1;           AC_SUBST([HAVE_UNLOCKPT])
   HAVE_DECL_UNSETENV=1;      AC_SUBST([HAVE_DECL_UNSETENV])
   REPLACE_ALIGNED_ALLOC=0;   AC_SUBST([REPLACE_ALIGNED_ALLOC])
-  REPLACE_CALLOC=0;          AC_SUBST([REPLACE_CALLOC])
+  REPLACE_CALLOC_FOR_CALLOC_GNU=0;    AC_SUBST([REPLACE_CALLOC_FOR_CALLOC_GNU])
+  REPLACE_CALLOC_FOR_CALLOC_POSIX=0;  
AC_SUBST([REPLACE_CALLOC_FOR_CALLOC_POSIX])
   REPLACE_CANONICALIZE_FILE_NAME=0;  AC_SUBST([REPLACE_CANONICALIZE_FILE_NAME])
   REPLACE_FREE=0;            AC_SUBST([REPLACE_FREE])
   REPLACE_INITSTATE=0;       AC_SUBST([REPLACE_INITSTATE])
-  REPLACE_MALLOC=0;          AC_SUBST([REPLACE_MALLOC])
+  REPLACE_MALLOC_FOR_MALLOC_GNU=0;    AC_SUBST([REPLACE_MALLOC_FOR_MALLOC_GNU])
+  REPLACE_MALLOC_FOR_MALLOC_POSIX=0;  
AC_SUBST([REPLACE_MALLOC_FOR_MALLOC_POSIX])
   REPLACE_MBTOWC=0;          AC_SUBST([REPLACE_MBTOWC])
   REPLACE_MKSTEMP=0;         AC_SUBST([REPLACE_MKSTEMP])
   REPLACE_POSIX_MEMALIGN=0;  AC_SUBST([REPLACE_POSIX_MEMALIGN])
@@ -178,7 +183,8 @@ AC_DEFUN([gl_STDLIB_H_DEFAULTS],
   REPLACE_QSORT_R=0;         AC_SUBST([REPLACE_QSORT_R])
   REPLACE_RANDOM=0;          AC_SUBST([REPLACE_RANDOM])
   REPLACE_RANDOM_R=0;        AC_SUBST([REPLACE_RANDOM_R])
-  REPLACE_REALLOC=0;         AC_SUBST([REPLACE_REALLOC])
+  REPLACE_REALLOC_FOR_REALLOC_GNU=0;    
AC_SUBST([REPLACE_REALLOC_FOR_REALLOC_GNU])
+  REPLACE_REALLOC_FOR_REALLOC_POSIX=0;  
AC_SUBST([REPLACE_REALLOC_FOR_REALLOC_POSIX])
   REPLACE_REALLOCARRAY=0;    AC_SUBST([REPLACE_REALLOCARRAY])
   REPLACE_REALPATH=0;        AC_SUBST([REPLACE_REALPATH])
   REPLACE_SETENV=0;          AC_SUBST([REPLACE_SETENV])
diff --git a/m4/stpcpy.m4 b/m4/stpcpy.m4
index eb44f03adb..241e68c8c5 100644
--- a/m4/stpcpy.m4
+++ b/m4/stpcpy.m4
@@ -1,5 +1,5 @@
 # stpcpy.m4 serial 9
-dnl Copyright (C) 2002, 2007, 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2007, 2009-2022 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 e88ac9ca85..9e09b96e16 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 2007-2022 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 1d4f10616e..0934274de7 100644
--- a/m4/strnlen.m4
+++ b/m4/strnlen.m4
@@ -1,5 +1,5 @@
 # strnlen.m4 serial 14
-dnl Copyright (C) 2002-2003, 2005-2007, 2009-2021 Free Software Foundation,
+dnl Copyright (C) 2002-2003, 2005-2007, 2009-2022 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,
diff --git a/m4/strtoimax.m4 b/m4/strtoimax.m4
index d767d57451..08598936b3 100644
--- a/m4/strtoimax.m4
+++ b/m4/strtoimax.m4
@@ -1,5 +1,5 @@
 # strtoimax.m4 serial 16
-dnl Copyright (C) 2002-2004, 2006, 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2004, 2006, 2009-2022 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/strtoll.m4 b/m4/strtoll.m4
index 14455dc3db..dc37d9984d 100644
--- a/m4/strtoll.m4
+++ b/m4/strtoll.m4
@@ -1,5 +1,5 @@
 # strtoll.m4 serial 9
-dnl Copyright (C) 2002, 2004, 2006, 2008-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2004, 2006, 2008-2022 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/symlink.m4 b/m4/symlink.m4
index 209decee4c..5be2babbcb 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-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2022 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 37bc31606b..a5ba85c67c 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-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2020-2022 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 2e7d140dee..2743cd1795 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-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2006-2022 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 5676a0d217..ba3ae68e61 100644
--- a/m4/sys_socket_h.m4
+++ b/m4/sys_socket_h.m4
@@ -1,5 +1,5 @@
-# sys_socket_h.m4 serial 28
-dnl Copyright (C) 2005-2021 Free Software Foundation, Inc.
+# sys_socket_h.m4 serial 29
+dnl Copyright (C) 2005-2022 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.
@@ -22,6 +22,7 @@ AC_DEFUN_ONCE([gl_SYS_SOCKET_H],
       ;;
   esac
 
+  GL_GENERATE_SYS_SOCKET_H=false
   AC_CACHE_CHECK([whether <sys/socket.h> is self-contained],
     [gl_cv_header_sys_socket_h_selfcontained],
     [
@@ -44,7 +45,7 @@ AC_DEFUN_ONCE([gl_SYS_SOCKET_H],
             [gl_cv_header_sys_socket_h_shut=no])
         ])
       if test $gl_cv_header_sys_socket_h_shut = no; then
-        SYS_SOCKET_H='sys/socket.h'
+        GL_GENERATE_SYS_SOCKET_H=true
       fi
     fi
   fi
@@ -83,7 +84,7 @@ AC_DEFUN_ONCE([gl_SYS_SOCKET_H],
   fi
   if test $HAVE_STRUCT_SOCKADDR_STORAGE = 0 || test $HAVE_SA_FAMILY_T = 0 \
      || test $HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = 0; then
-    SYS_SOCKET_H='sys/socket.h'
+    GL_GENERATE_SYS_SOCKET_H=true
   fi
   gl_PREREQ_SYS_H_WINSOCK2
 
diff --git a/m4/sys_stat_h.m4 b/m4/sys_stat_h.m4
index ac91d425bb..b5a9789b81 100644
--- a/m4/sys_stat_h.m4
+++ b/m4/sys_stat_h.m4
@@ -1,5 +1,5 @@
 # sys_stat_h.m4 serial 41   -*- Autoconf -*-
-dnl Copyright (C) 2006-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2006-2022 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 c425a9639a..bc5e2b1364 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 2007, 2009-2022 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 6dd6fee10c..a5bef220c2 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-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2011-2022 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 14c796d3eb..22ccec1f8d 100644
--- a/m4/tempname.m4
+++ b/m4/tempname.m4
@@ -1,6 +1,6 @@
 #serial 5
 
-# Copyright (C) 2006-2007, 2009-2021 Free Software Foundation, Inc.
+# Copyright (C) 2006-2007, 2009-2022 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 b57474b48b..98d7b6e01b 100644
--- a/m4/time_h.m4
+++ b/m4/time_h.m4
@@ -1,8 +1,8 @@
 # Configure a more-standard replacement for <time.h>.
 
-# Copyright (C) 2000-2001, 2003-2007, 2009-2021 Free Software Foundation, Inc.
+# Copyright (C) 2000-2001, 2003-2007, 2009-2022 Free Software Foundation, Inc.
 
-# serial 18
+# serial 19
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -133,6 +133,7 @@ AC_DEFUN([gl_TIME_H_REQUIRE_DEFAULTS],
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRPTIME])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIMEGM])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIMESPEC_GET])
+    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIMESPEC_GETRES])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIME_R])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIME_RZ])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TZSET])
@@ -151,6 +152,7 @@ AC_DEFUN([gl_TIME_H_DEFAULTS],
   HAVE_STRPTIME=1;                       AC_SUBST([HAVE_STRPTIME])
   HAVE_TIMEGM=1;                         AC_SUBST([HAVE_TIMEGM])
   HAVE_TIMESPEC_GET=1;                   AC_SUBST([HAVE_TIMESPEC_GET])
+  HAVE_TIMESPEC_GETRES=1;                AC_SUBST([HAVE_TIMESPEC_GETRES])
   dnl Even GNU libc does not have timezone_t yet.
   HAVE_TIMEZONE_T=0;                     AC_SUBST([HAVE_TIMEZONE_T])
   dnl If another module says to replace or to not replace, do that.
diff --git a/m4/time_r.m4 b/m4/time_r.m4
index 2d49b64f12..8a1ad9dadf 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-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2006-2022 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 c5e85dc625..4cb6a06485 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-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2015-2022 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 58123beb0c..f1893941f8 100644
--- a/m4/timegm.m4
+++ b/m4/timegm.m4
@@ -1,5 +1,5 @@
 # timegm.m4 serial 13
-dnl Copyright (C) 2003, 2007, 2009-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2007, 2009-2022 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 003e36e9d1..8d41f945c5 100644
--- a/m4/timer_time.m4
+++ b/m4/timer_time.m4
@@ -1,5 +1,5 @@
 # timer_time.m4 serial 5
-dnl Copyright (C) 2011-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2011-2022 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 40307d4f60..6a1afef040 100644
--- a/m4/timespec.m4
+++ b/m4/timespec.m4
@@ -1,6 +1,6 @@
 #serial 15
 
-# Copyright (C) 2000-2001, 2003-2007, 2009-2021 Free Software Foundation, Inc.
+# Copyright (C) 2000-2001, 2003-2007, 2009-2022 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 2743999fbc..9275bed673 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-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2009-2022 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 0ce4ea4511..f93f97a1bd 100644
--- a/m4/unistd_h.m4
+++ b/m4/unistd_h.m4
@@ -1,5 +1,5 @@
-# unistd_h.m4 serial 89
-dnl Copyright (C) 2006-2021 Free Software Foundation, Inc.
+# unistd_h.m4 serial 90
+dnl Copyright (C) 2006-2022 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.
@@ -112,6 +112,7 @@ AC_DEFUN([gl_UNISTD_H_REQUIRE_DEFAULTS],
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETOPT_POSIX])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETPAGESIZE])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETPASS])
+    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETPASS_GNU])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETUSERSHELL])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GROUP_MEMBER])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISATTY])
@@ -170,98 +171,99 @@ AC_DEFUN([gl_UNISTD_H_REQUIRE_DEFAULTS],
 AC_DEFUN([gl_UNISTD_H_DEFAULTS],
 [
   dnl Assume proper GNU behavior unless another module says otherwise.
-  HAVE_CHOWN=1;           AC_SUBST([HAVE_CHOWN])
-  HAVE_COPY_FILE_RANGE=1; AC_SUBST([HAVE_COPY_FILE_RANGE])
-  HAVE_DUP3=1;            AC_SUBST([HAVE_DUP3])
-  HAVE_EUIDACCESS=1;      AC_SUBST([HAVE_EUIDACCESS])
-  HAVE_EXECVPE=1;         AC_SUBST([HAVE_EXECVPE])
-  HAVE_FACCESSAT=1;       AC_SUBST([HAVE_FACCESSAT])
-  HAVE_FCHDIR=1;          AC_SUBST([HAVE_FCHDIR])
-  HAVE_FCHOWNAT=1;        AC_SUBST([HAVE_FCHOWNAT])
-  HAVE_FDATASYNC=1;       AC_SUBST([HAVE_FDATASYNC])
-  HAVE_FSYNC=1;           AC_SUBST([HAVE_FSYNC])
-  HAVE_FTRUNCATE=1;       AC_SUBST([HAVE_FTRUNCATE])
-  HAVE_GETDTABLESIZE=1;   AC_SUBST([HAVE_GETDTABLESIZE])
-  HAVE_GETENTROPY=1;      AC_SUBST([HAVE_GETENTROPY])
-  HAVE_GETGROUPS=1;       AC_SUBST([HAVE_GETGROUPS])
-  HAVE_GETHOSTNAME=1;     AC_SUBST([HAVE_GETHOSTNAME])
-  HAVE_GETLOGIN=1;        AC_SUBST([HAVE_GETLOGIN])
-  HAVE_GETPAGESIZE=1;     AC_SUBST([HAVE_GETPAGESIZE])
-  HAVE_GETPASS=1;         AC_SUBST([HAVE_GETPASS])
-  HAVE_GROUP_MEMBER=1;    AC_SUBST([HAVE_GROUP_MEMBER])
-  HAVE_LCHOWN=1;          AC_SUBST([HAVE_LCHOWN])
-  HAVE_LINK=1;            AC_SUBST([HAVE_LINK])
-  HAVE_LINKAT=1;          AC_SUBST([HAVE_LINKAT])
-  HAVE_PIPE=1;            AC_SUBST([HAVE_PIPE])
-  HAVE_PIPE2=1;           AC_SUBST([HAVE_PIPE2])
-  HAVE_PREAD=1;           AC_SUBST([HAVE_PREAD])
-  HAVE_PWRITE=1;          AC_SUBST([HAVE_PWRITE])
-  HAVE_READLINK=1;        AC_SUBST([HAVE_READLINK])
-  HAVE_READLINKAT=1;      AC_SUBST([HAVE_READLINKAT])
-  HAVE_SETHOSTNAME=1;     AC_SUBST([HAVE_SETHOSTNAME])
-  HAVE_SLEEP=1;           AC_SUBST([HAVE_SLEEP])
-  HAVE_SYMLINK=1;         AC_SUBST([HAVE_SYMLINK])
-  HAVE_SYMLINKAT=1;       AC_SUBST([HAVE_SYMLINKAT])
-  HAVE_UNLINKAT=1;        AC_SUBST([HAVE_UNLINKAT])
-  HAVE_USLEEP=1;          AC_SUBST([HAVE_USLEEP])
-  HAVE_DECL_ENVIRON=1;    AC_SUBST([HAVE_DECL_ENVIRON])
-  HAVE_DECL_EXECVPE=1;    AC_SUBST([HAVE_DECL_EXECVPE])
-  HAVE_DECL_FCHDIR=1;     AC_SUBST([HAVE_DECL_FCHDIR])
-  HAVE_DECL_FDATASYNC=1;  AC_SUBST([HAVE_DECL_FDATASYNC])
-  HAVE_DECL_GETDOMAINNAME=1; AC_SUBST([HAVE_DECL_GETDOMAINNAME])
-  HAVE_DECL_GETLOGIN=1;   AC_SUBST([HAVE_DECL_GETLOGIN])
-  HAVE_DECL_GETLOGIN_R=1; AC_SUBST([HAVE_DECL_GETLOGIN_R])
-  HAVE_DECL_GETPAGESIZE=1; AC_SUBST([HAVE_DECL_GETPAGESIZE])
-  HAVE_DECL_GETUSERSHELL=1; AC_SUBST([HAVE_DECL_GETUSERSHELL])
-  HAVE_DECL_SETHOSTNAME=1; AC_SUBST([HAVE_DECL_SETHOSTNAME])
-  HAVE_DECL_TRUNCATE=1;   AC_SUBST([HAVE_DECL_TRUNCATE])
-  HAVE_DECL_TTYNAME_R=1;  AC_SUBST([HAVE_DECL_TTYNAME_R])
-  HAVE_OS_H=0;            AC_SUBST([HAVE_OS_H])
-  HAVE_SYS_PARAM_H=0;     AC_SUBST([HAVE_SYS_PARAM_H])
-  REPLACE_ACCESS=0;       AC_SUBST([REPLACE_ACCESS])
-  REPLACE_CHOWN=0;        AC_SUBST([REPLACE_CHOWN])
-  REPLACE_CLOSE=0;        AC_SUBST([REPLACE_CLOSE])
-  REPLACE_DUP=0;          AC_SUBST([REPLACE_DUP])
-  REPLACE_DUP2=0;         AC_SUBST([REPLACE_DUP2])
-  REPLACE_EXECL=0;        AC_SUBST([REPLACE_EXECL])
-  REPLACE_EXECLE=0;       AC_SUBST([REPLACE_EXECLE])
-  REPLACE_EXECLP=0;       AC_SUBST([REPLACE_EXECLP])
-  REPLACE_EXECV=0;        AC_SUBST([REPLACE_EXECV])
-  REPLACE_EXECVE=0;       AC_SUBST([REPLACE_EXECVE])
-  REPLACE_EXECVP=0;       AC_SUBST([REPLACE_EXECVP])
-  REPLACE_EXECVPE=0;      AC_SUBST([REPLACE_EXECVPE])
-  REPLACE_FACCESSAT=0;    AC_SUBST([REPLACE_FACCESSAT])
-  REPLACE_FCHOWNAT=0;     AC_SUBST([REPLACE_FCHOWNAT])
-  REPLACE_FTRUNCATE=0;    AC_SUBST([REPLACE_FTRUNCATE])
-  REPLACE_GETCWD=0;       AC_SUBST([REPLACE_GETCWD])
-  REPLACE_GETDOMAINNAME=0; AC_SUBST([REPLACE_GETDOMAINNAME])
-  REPLACE_GETDTABLESIZE=0; AC_SUBST([REPLACE_GETDTABLESIZE])
-  REPLACE_GETLOGIN_R=0;   AC_SUBST([REPLACE_GETLOGIN_R])
-  REPLACE_GETGROUPS=0;    AC_SUBST([REPLACE_GETGROUPS])
-  REPLACE_GETPAGESIZE=0;  AC_SUBST([REPLACE_GETPAGESIZE])
-  REPLACE_GETPASS=0;      AC_SUBST([REPLACE_GETPASS])
-  REPLACE_ISATTY=0;       AC_SUBST([REPLACE_ISATTY])
-  REPLACE_LCHOWN=0;       AC_SUBST([REPLACE_LCHOWN])
-  REPLACE_LINK=0;         AC_SUBST([REPLACE_LINK])
-  REPLACE_LINKAT=0;       AC_SUBST([REPLACE_LINKAT])
-  REPLACE_LSEEK=0;        AC_SUBST([REPLACE_LSEEK])
-  REPLACE_PREAD=0;        AC_SUBST([REPLACE_PREAD])
-  REPLACE_PWRITE=0;       AC_SUBST([REPLACE_PWRITE])
-  REPLACE_READ=0;         AC_SUBST([REPLACE_READ])
-  REPLACE_READLINK=0;     AC_SUBST([REPLACE_READLINK])
-  REPLACE_READLINKAT=0;   AC_SUBST([REPLACE_READLINKAT])
-  REPLACE_RMDIR=0;        AC_SUBST([REPLACE_RMDIR])
-  REPLACE_SLEEP=0;        AC_SUBST([REPLACE_SLEEP])
-  REPLACE_SYMLINK=0;      AC_SUBST([REPLACE_SYMLINK])
-  REPLACE_SYMLINKAT=0;    AC_SUBST([REPLACE_SYMLINKAT])
-  REPLACE_TRUNCATE=0;     AC_SUBST([REPLACE_TRUNCATE])
-  REPLACE_TTYNAME_R=0;    AC_SUBST([REPLACE_TTYNAME_R])
-  REPLACE_UNLINK=0;       AC_SUBST([REPLACE_UNLINK])
-  REPLACE_UNLINKAT=0;     AC_SUBST([REPLACE_UNLINKAT])
-  REPLACE_USLEEP=0;       AC_SUBST([REPLACE_USLEEP])
-  REPLACE_WRITE=0;        AC_SUBST([REPLACE_WRITE])
-  UNISTD_H_HAVE_SYS_RANDOM_H=0; AC_SUBST([UNISTD_H_HAVE_SYS_RANDOM_H])
-  UNISTD_H_HAVE_WINSOCK2_H=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H])
+  HAVE_CHOWN=1;                      AC_SUBST([HAVE_CHOWN])
+  HAVE_COPY_FILE_RANGE=1;            AC_SUBST([HAVE_COPY_FILE_RANGE])
+  HAVE_DUP3=1;                       AC_SUBST([HAVE_DUP3])
+  HAVE_EUIDACCESS=1;                 AC_SUBST([HAVE_EUIDACCESS])
+  HAVE_EXECVPE=1;                    AC_SUBST([HAVE_EXECVPE])
+  HAVE_FACCESSAT=1;                  AC_SUBST([HAVE_FACCESSAT])
+  HAVE_FCHDIR=1;                     AC_SUBST([HAVE_FCHDIR])
+  HAVE_FCHOWNAT=1;                   AC_SUBST([HAVE_FCHOWNAT])
+  HAVE_FDATASYNC=1;                  AC_SUBST([HAVE_FDATASYNC])
+  HAVE_FSYNC=1;                      AC_SUBST([HAVE_FSYNC])
+  HAVE_FTRUNCATE=1;                  AC_SUBST([HAVE_FTRUNCATE])
+  HAVE_GETDTABLESIZE=1;              AC_SUBST([HAVE_GETDTABLESIZE])
+  HAVE_GETENTROPY=1;                 AC_SUBST([HAVE_GETENTROPY])
+  HAVE_GETGROUPS=1;                  AC_SUBST([HAVE_GETGROUPS])
+  HAVE_GETHOSTNAME=1;                AC_SUBST([HAVE_GETHOSTNAME])
+  HAVE_GETLOGIN=1;                   AC_SUBST([HAVE_GETLOGIN])
+  HAVE_GETPAGESIZE=1;                AC_SUBST([HAVE_GETPAGESIZE])
+  HAVE_GETPASS=1;                    AC_SUBST([HAVE_GETPASS])
+  HAVE_GROUP_MEMBER=1;               AC_SUBST([HAVE_GROUP_MEMBER])
+  HAVE_LCHOWN=1;                     AC_SUBST([HAVE_LCHOWN])
+  HAVE_LINK=1;                       AC_SUBST([HAVE_LINK])
+  HAVE_LINKAT=1;                     AC_SUBST([HAVE_LINKAT])
+  HAVE_PIPE=1;                       AC_SUBST([HAVE_PIPE])
+  HAVE_PIPE2=1;                      AC_SUBST([HAVE_PIPE2])
+  HAVE_PREAD=1;                      AC_SUBST([HAVE_PREAD])
+  HAVE_PWRITE=1;                     AC_SUBST([HAVE_PWRITE])
+  HAVE_READLINK=1;                   AC_SUBST([HAVE_READLINK])
+  HAVE_READLINKAT=1;                 AC_SUBST([HAVE_READLINKAT])
+  HAVE_SETHOSTNAME=1;                AC_SUBST([HAVE_SETHOSTNAME])
+  HAVE_SLEEP=1;                      AC_SUBST([HAVE_SLEEP])
+  HAVE_SYMLINK=1;                    AC_SUBST([HAVE_SYMLINK])
+  HAVE_SYMLINKAT=1;                  AC_SUBST([HAVE_SYMLINKAT])
+  HAVE_UNLINKAT=1;                   AC_SUBST([HAVE_UNLINKAT])
+  HAVE_USLEEP=1;                     AC_SUBST([HAVE_USLEEP])
+  HAVE_DECL_ENVIRON=1;               AC_SUBST([HAVE_DECL_ENVIRON])
+  HAVE_DECL_EXECVPE=1;               AC_SUBST([HAVE_DECL_EXECVPE])
+  HAVE_DECL_FCHDIR=1;                AC_SUBST([HAVE_DECL_FCHDIR])
+  HAVE_DECL_FDATASYNC=1;             AC_SUBST([HAVE_DECL_FDATASYNC])
+  HAVE_DECL_GETDOMAINNAME=1;         AC_SUBST([HAVE_DECL_GETDOMAINNAME])
+  HAVE_DECL_GETLOGIN=1;              AC_SUBST([HAVE_DECL_GETLOGIN])
+  HAVE_DECL_GETLOGIN_R=1;            AC_SUBST([HAVE_DECL_GETLOGIN_R])
+  HAVE_DECL_GETPAGESIZE=1;           AC_SUBST([HAVE_DECL_GETPAGESIZE])
+  HAVE_DECL_GETUSERSHELL=1;          AC_SUBST([HAVE_DECL_GETUSERSHELL])
+  HAVE_DECL_SETHOSTNAME=1;           AC_SUBST([HAVE_DECL_SETHOSTNAME])
+  HAVE_DECL_TRUNCATE=1;              AC_SUBST([HAVE_DECL_TRUNCATE])
+  HAVE_DECL_TTYNAME_R=1;             AC_SUBST([HAVE_DECL_TTYNAME_R])
+  HAVE_OS_H=0;                       AC_SUBST([HAVE_OS_H])
+  HAVE_SYS_PARAM_H=0;                AC_SUBST([HAVE_SYS_PARAM_H])
+  REPLACE_ACCESS=0;                  AC_SUBST([REPLACE_ACCESS])
+  REPLACE_CHOWN=0;                   AC_SUBST([REPLACE_CHOWN])
+  REPLACE_CLOSE=0;                   AC_SUBST([REPLACE_CLOSE])
+  REPLACE_DUP=0;                     AC_SUBST([REPLACE_DUP])
+  REPLACE_DUP2=0;                    AC_SUBST([REPLACE_DUP2])
+  REPLACE_EXECL=0;                   AC_SUBST([REPLACE_EXECL])
+  REPLACE_EXECLE=0;                  AC_SUBST([REPLACE_EXECLE])
+  REPLACE_EXECLP=0;                  AC_SUBST([REPLACE_EXECLP])
+  REPLACE_EXECV=0;                   AC_SUBST([REPLACE_EXECV])
+  REPLACE_EXECVE=0;                  AC_SUBST([REPLACE_EXECVE])
+  REPLACE_EXECVP=0;                  AC_SUBST([REPLACE_EXECVP])
+  REPLACE_EXECVPE=0;                 AC_SUBST([REPLACE_EXECVPE])
+  REPLACE_FACCESSAT=0;               AC_SUBST([REPLACE_FACCESSAT])
+  REPLACE_FCHOWNAT=0;                AC_SUBST([REPLACE_FCHOWNAT])
+  REPLACE_FTRUNCATE=0;               AC_SUBST([REPLACE_FTRUNCATE])
+  REPLACE_GETCWD=0;                  AC_SUBST([REPLACE_GETCWD])
+  REPLACE_GETDOMAINNAME=0;           AC_SUBST([REPLACE_GETDOMAINNAME])
+  REPLACE_GETDTABLESIZE=0;           AC_SUBST([REPLACE_GETDTABLESIZE])
+  REPLACE_GETLOGIN_R=0;              AC_SUBST([REPLACE_GETLOGIN_R])
+  REPLACE_GETGROUPS=0;               AC_SUBST([REPLACE_GETGROUPS])
+  REPLACE_GETPAGESIZE=0;             AC_SUBST([REPLACE_GETPAGESIZE])
+  REPLACE_GETPASS=0;                 AC_SUBST([REPLACE_GETPASS])
+  REPLACE_GETPASS_FOR_GETPASS_GNU=0; 
AC_SUBST([REPLACE_GETPASS_FOR_GETPASS_GNU])
+  REPLACE_ISATTY=0;                  AC_SUBST([REPLACE_ISATTY])
+  REPLACE_LCHOWN=0;                  AC_SUBST([REPLACE_LCHOWN])
+  REPLACE_LINK=0;                    AC_SUBST([REPLACE_LINK])
+  REPLACE_LINKAT=0;                  AC_SUBST([REPLACE_LINKAT])
+  REPLACE_LSEEK=0;                   AC_SUBST([REPLACE_LSEEK])
+  REPLACE_PREAD=0;                   AC_SUBST([REPLACE_PREAD])
+  REPLACE_PWRITE=0;                  AC_SUBST([REPLACE_PWRITE])
+  REPLACE_READ=0;                    AC_SUBST([REPLACE_READ])
+  REPLACE_READLINK=0;                AC_SUBST([REPLACE_READLINK])
+  REPLACE_READLINKAT=0;              AC_SUBST([REPLACE_READLINKAT])
+  REPLACE_RMDIR=0;                   AC_SUBST([REPLACE_RMDIR])
+  REPLACE_SLEEP=0;                   AC_SUBST([REPLACE_SLEEP])
+  REPLACE_SYMLINK=0;                 AC_SUBST([REPLACE_SYMLINK])
+  REPLACE_SYMLINKAT=0;               AC_SUBST([REPLACE_SYMLINKAT])
+  REPLACE_TRUNCATE=0;                AC_SUBST([REPLACE_TRUNCATE])
+  REPLACE_TTYNAME_R=0;               AC_SUBST([REPLACE_TTYNAME_R])
+  REPLACE_UNLINK=0;                  AC_SUBST([REPLACE_UNLINK])
+  REPLACE_UNLINKAT=0;                AC_SUBST([REPLACE_UNLINKAT])
+  REPLACE_USLEEP=0;                  AC_SUBST([REPLACE_USLEEP])
+  REPLACE_WRITE=0;                   AC_SUBST([REPLACE_WRITE])
+  UNISTD_H_HAVE_SYS_RANDOM_H=0;      AC_SUBST([UNISTD_H_HAVE_SYS_RANDOM_H])
+  UNISTD_H_HAVE_WINSOCK2_H=0;        AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H])
   UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0;
                            AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS])
 ])
diff --git a/m4/unlocked-io.m4 b/m4/unlocked-io.m4
index b689020ff4..d42c95cedb 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 1998-2006, 2009-2022 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 2ee4ef9ec9..62aec78a63 100644
--- a/m4/utimens.m4
+++ b/m4/utimens.m4
@@ -1,4 +1,4 @@
-dnl Copyright (C) 2003-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2003-2022 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 b5bff1651f..3abdb86511 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-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2022 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 0440e78532..bf22161406 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-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2003-2005, 2009-2022 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 36946acc23..28e22a49df 100644
--- a/m4/vararrays.m4
+++ b/m4/vararrays.m4
@@ -4,7 +4,7 @@
 
 # From Paul Eggert
 
-# Copyright (C) 2001, 2009-2021 Free Software Foundation, Inc.
+# Copyright (C) 2001, 2009-2022 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 9e24d898e8..60088f93ed 100644
--- a/m4/warnings.m4
+++ b/m4/warnings.m4
@@ -1,5 +1,5 @@
 # warnings.m4 serial 16
-dnl Copyright (C) 2008-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2008-2022 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 34db10e5cc..268e3e5159 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-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2003, 2008-2022 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 da0f8d7303..06db589ba9 100644
--- a/m4/year2038.m4
+++ b/m4/year2038.m4
@@ -1,5 +1,5 @@
 # year2038.m4 serial 7
-dnl Copyright (C) 2017-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2017-2022 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 b9533847cb..fd73a201fd 100644
--- a/m4/zzgnulib.m4
+++ b/m4/zzgnulib.m4
@@ -1,5 +1,5 @@
 # zzgnulib.m4 serial 1
-dnl Copyright (C) 2020-2021 Free Software Foundation, Inc.
+dnl Copyright (C) 2020-2022 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 eb040150d9..447e90f018 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-2021 Free Software Foundation,
+## Copyright (C) 1995, 1997-1998, 2000-2022 Free Software Foundation,
 ## Inc.
 
 ## This file is part of GNU Emacs.
@@ -299,13 +299,6 @@ if [ $check = yes ]; then
     echo "${bogosities}"
   fi
 
-  ## This exits with non-zero status if any .info files need
-  ## rebuilding.
-  if [ -r Makefile ] && [ "$with_info" = "yes" ]; then
-      echo "Checking to see if info files are up-to-date..."
-      make --question info || error=yes
-  fi
-
   ## Is this a release?
   case $version in
       [1-9][0-9].[0-9])
@@ -392,9 +385,11 @@ manifest=MANIFEST
 # other way when adding or deleting a distributed file while not using Git.
 # TODO: maybe this should ignore $update, and always update MANIFEST
 # if .git is present.
+# Filter out the files in msdos/autogen/, as they aren't useful in the
+# tarball, and get in the way during the build of the MSDOS port.
 if ( [ $update = yes ] || [ ! -f $manifest ] ) && [ -r .git ]; then
   echo "Updating $manifest"
-  git ls-files > $manifest || exit
+  git ls-files | sed -e '/^msdos\/autogen\//d' > $manifest || exit
   printf '%s\n' $possibly_non_vc_files $info_files >>$manifest || exit
   sort -u -o $manifest $manifest || exit
 fi
diff --git a/modules/modhelp.py b/modules/modhelp.py
index 07dfdf3f73..d8b4dceb78 100755
--- a/modules/modhelp.py
+++ b/modules/modhelp.py
@@ -2,7 +2,7 @@
 
 # Module helper script.
 
-# Copyright 2015-2021 Free Software Foundation, Inc.
+# Copyright 2015-2022 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/msdos/ChangeLog.1 b/msdos/ChangeLog.1
index ce94d415ea..aef002c459 100644
--- a/msdos/ChangeLog.1
+++ b/msdos/ChangeLog.1
@@ -1550,7 +1550,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1994-1999, 2001-2021 Free Software Foundation, Inc.
+  Copyright (C) 1994-1999, 2001-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/msdos/INSTALL b/msdos/INSTALL
index 6bb71434d4..453bfa434a 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-2021 Free Software Foundation,
+Copyright (C) 1992, 1994, 1996-1997, 2000-2022 Free Software Foundation,
 Inc.
 See the end of the file for license conditions.
 
diff --git a/msdos/README b/msdos/README
index 9feaed8945..cdda15f00d 100644
--- a/msdos/README
+++ b/msdos/README
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2021 Free Software Foundation, Inc.
+Copyright (C) 2001-2022 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
@@ -10,7 +10,7 @@ The files emacs.ico and emacs.pif are for using the DJGPP 
version on
 Windows 3.X.  Since these are binary files, their copyright notice is
 reproduced here:
 
-# Copyright (C) 1993, 2002-2021 Free Software Foundation, Inc.
+# Copyright (C) 1993, 2002-2022 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/autogen/Makefile.in b/msdos/autogen/Makefile.in
index 0bdc408752..cd7c97b295 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 1994-2009, 2013-2022 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 560f5f346f..14782ab4bf 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-2021 Free Software
+Copyright (C) 1988, 1993-1994, 1999-2002, 2004-2022 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/msdos/depfiles.bat b/msdos/depfiles.bat
index 131f2fc04d..8c36fbcdef 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-2021 Free Software Foundation, Inc.
+rem   Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
 rem   This file is part of GNU Emacs.
 
diff --git a/msdos/inttypes.h b/msdos/inttypes.h
index 28633ca9ff..daaa80bfa5 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/inc/nl_types.h b/msdos/langinfo.h
similarity index 75%
copy from nt/inc/nl_types.h
copy to msdos/langinfo.h
index 8926f75f79..02137ba36c 100644
--- a/nt/inc/nl_types.h
+++ b/msdos/langinfo.h
@@ -1,6 +1,6 @@
-/* Replacement nl_types.h file for building GNU Emacs on Windows.
+/* Replacement langinfo.h file for building GNU Emacs on MS-DOS with DJGPP.
 
-Copyright (C) 2006-2021 Free Software Foundation, Inc.
+Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -17,9 +17,4 @@ 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/>.  */
 
-#ifndef _NL_TYPES_H
-#define _NL_TYPES_H
-
-typedef int nl_item;
-
-#endif /* _NL_TYPES_H */
+#define nl_langinfo(ignore)  "cp437"
diff --git a/msdos/mainmake.v2 b/msdos/mainmake.v2
index f22ebea590..2e7d242f0b 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 1996-2022 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/msdos/sed1v2.inp b/msdos/sed1v2.inp
index 5d82af66d9..e041e4e5b8 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 1996-1997, 1999-2022 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
@@ -55,6 +55,10 @@ s/ *@LIBJPEG@//
 s/ *@LIBPNG@//
 s/ *@LIBGIF@//
 s/ *@LIBXPM@//
+/^HAVE_NATIVE_COMP *=/s/@HAVE_NATIVE_COMP@/no/
+/^HAVE_PDUMPER *=/s/@HAVE_PDUMPER@/no/
+/^CHECK_STRUCTS *=/s/@CHECK_STRUCTS@//
+/^RUN_TEMACS \=/s/temacs/temacs.exe/
 /^XFT_LIBS *=/s/@XFT_LIBS@//
 /^XCB_LIBS *=/s/@XCB_LIBS@//
 /^FONTCONFIG_CFLAGS *=/s/@FONTCONFIG_CFLAGS@//
@@ -150,6 +154,18 @@ s/ *@LIBXPM@//
 /^CANNOT_DUMP *=/s/@CANNOT_DUMP@/no/
 /^W32_OBJ *=/s/@W32_OBJ@//
 /^W32_LIBS *=/s/@W32_LIBS@//
+/^JSON_OBJ *=/s/@JSON_OBJ@//
+/^JSON_CFLAGS *=/s/@JSON_CFLAGS@//
+/^JSON_LIBS *=/s/@JSON_LIBS@//
+/^LIBGCCJIT_OBJ *=/s/@LIBGCCJIT_OBJ@//
+/^LIBGCCJIT_CFLAGS *=/s/@LIBGCCJIT_CFLAGS@//
+/^LIBGCCJIT_LIBS *=/s/@LIBGCCJIT_LIBS@//
+/^HARFBUZZ_CFLAGS *=/s/@HARFBUZZ_CFLAGS@//
+/^HARFBUZZ_LIBS *=/s/@HARFBUZZ_LIBS@//
+/^LCMS2_CFLAGS *=/s/@LCMS2_CFLAGS@//
+/^LCMS2_LIBS *=/s/@LCMS2_LIBS@//
+/^LIBGMP *=/s/@LIBGMP@//
+/^DYNLIB_OBJ *=/s/@DYNLIB_OBJ@//
 /^version *=/s/@[^@\n]*@//
 /^EMACSRES *=/s/@EMACSRES@//
 /^W32_RES_LINK *=/s/@W32_RES_LINK@//
@@ -162,6 +178,7 @@ s/ *@LIBXPM@//
 /^AUTO_DEPEND *=/s/@AUTO_DEPEND@/yes/
 /^PAXCTL_dumped *=/s/=.*$/=/
 /^PAXCTL_notdumped *=/s/=.*$/=/
+/^DUMPING *=/s/@DUMPING@/unexec/
 /^lisp\.mk:/,/^$/c\
 lisp.mk: $(lispsource)/loadup.el\
        @rm -f $@\
@@ -183,6 +200,7 @@ lisp.mk: $(lispsource)/loadup.el\
 /^      *ifneq (\$(PAXCTL_dumped),)/,/^         *endif/d
 /^      *ln /s/ln /cp /
 /^     fi/d
+/ifeq (\$(HAVE_NATIVE_COMP):\$(NATIVE_DISABLED),yes:)/,/endif/d
 /^      *\$(RUN_TEMACS) /i\
        stubedit temacs.exe minstack=1024k
 /^      *LC_ALL=C \$(RUN_TEMACS)/i\
@@ -214,8 +232,8 @@ s/echo.*buildobj.lst/dj&/
 /^     -\{0,1\}rm -f/s/\\#/#/
 /^     echo.* buildobj.h/s|echo |djecho |
 /^buildobj\.h:/,/^      *\$(AM_V_at)mv /{
-  /^    *\$(AM_V_GEN)for /,/^   *done /c\
-       djecho "$(ALLOBJS)" | sed -e 's/^ */"/' -e 's/ *$$/"/' -e 's/  */", 
"/g' >>$@.tmp
+  /^    *\$(AM_V_GEN)for /,/mv \$@.tmp \$@/c\
+       djecho "$(ALLOBJS)" | sed -e 's/^ */"/' -e 's/ *$$/"/' -e 's/  */", 
"/g' >>$@
 }
 # Remove or replace dependencies we cannot have
 /^\.PRECIOUS: /s!\.\./config.status !!
@@ -236,3 +254,5 @@ s| -I\$(srcdir)/\.\./lib||
 s| -I\$(top_srcdir)/lib||
 s| -I\. -I\$(srcdir)| -I.|
 /^      *test "X/d
+/\$(CC) -o \$@.tmp/s/\$@.tmp/\$@/
+/mv \$@.tmp \$@/d
\ No newline at end of file
diff --git a/msdos/sed1x.inp b/msdos/sed1x.inp
index 30c242dcb9..858f565f41 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 1994-1997, 1999-2022 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/sed2v2.inp b/msdos/sed2v2.inp
index ef4bc24fe4..8728c8dac4 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-2021 Free Software
+# Copyright (C) 1993-1997, 1999-2000, 2002-2022 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) 2021 Free 
Software Foundation, Inc."/
+/^#undef COPYRIGHT *$/s/^.*$/#define COPYRIGHT "Copyright (C) 2022 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/
@@ -37,6 +37,7 @@
 /^#undef HAVE_STRUCT_UTIMBUF *$/s/^.*$/#define HAVE_STRUCT_UTIMBUF 1/
 /^#undef LOCALTIME_CACHE *$/s/^.*$/#define LOCALTIME_CACHE 1/
 /^#undef HAVE_TZSET *$/s/^.*$/#define HAVE_TZSET 1/
+/^#undef HAVE_UNEXEC *$/s/^.*$/#define HAVE_UNEXEC 1/
 /^#undef HAVE_RINT *$/s/^.*$/#define HAVE_RINT 1/
 /^#undef HAVE_C99_STRTOLD *$/s/^.*$/#define HAVE_C99_STRTOLD 1/
 /^#undef HAVE_DIFFTIME *$/s/^.*$/#define HAVE_DIFFTIME 1/
diff --git a/msdos/sed2x.inp b/msdos/sed2x.inp
index 00b5f07d1b..c147d62193 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 1994, 2001-2022 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/sed3v2.inp b/msdos/sed3v2.inp
index 8b9bb0679b..5b5d321607 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 1996, 1998, 2000-2022 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
@@ -34,6 +34,7 @@
 /^LIBS_SYSTEM *=/s/@[^@\n]*@//g
 /^LIB_CLOCK_GETTIME *=/s/@[^@\n]*@//g
 /^LIB_TIMER_TIME *=/s/@[^@\n]*@//g
+/^LIB_GETRANDOM *=/s/@[^@\n]*@//g
 /^CFLAGS *=/s!=.*$!=-O2 -g!
 /^CPPFLAGS *=/s/@CPPFLAGS@//
 /^LDFLAGS *=/s/@LDFLAGS@//
diff --git a/msdos/sed4.inp b/msdos/sed4.inp
index 09d3523d86..f1c6662bf5 100644
--- a/msdos/sed4.inp
+++ b/msdos/sed4.inp
@@ -2,7 +2,7 @@
 # Configuration script for src/paths.h
 # ----------------------------------------------------------------------
 #
-# Copyright (C) 1994, 2001-2021 Free Software Foundation, Inc.
+# Copyright (C) 1994, 2001-2022 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/sed5x.inp b/msdos/sed5x.inp
index 3639a07c3c..57895ed1c3 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 1994, 2001-2022 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/sed6.inp b/msdos/sed6.inp
index a0ab94599d..41cd41993b 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 1997, 2000-2022 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/sedadmin.inp b/msdos/sedadmin.inp
index 9f6dacad5d..79a18144f3 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 2014-2022 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/sedalloc.inp b/msdos/sedalloc.inp
index 90377dd5d8..0341148608 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 2008-2022 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/sedleim.inp b/msdos/sedleim.inp
index 1d5ee7a687..612cfb9235 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 1999-2022 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/sedlibcf.inp b/msdos/sedlibcf.inp
index 38c54e678e..741192c973 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 2011-2022 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/sedlibmk.inp b/msdos/sedlibmk.inp
index 825be84968..59ebec9e75 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 2011-2022 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
@@ -144,7 +144,7 @@ s/@PACKAGE@/emacs/
 /^CPP *=/s/@[^@\n]*@/gcc -e/
 /^CPPFLAGS *=/s/@[^@\n]*@//
 /^CCDEPMODE *=/s/@[^@\n]*@/depmode=gcc3/
-/^CFLAGS *=/s/@[^@\n]*@/-g -O2/
+/^CFLAGS *=/s/@[^@\n]*@/-g -O2 -I$\(srcdir\)\/..\/msdos/
 /^CYGPATH_W *=/s/@[^@\n]*@//
 /^CYGWIN_OBJ *=/s/@[^@\n]*@//
 /^C_SWITCH_MACHINE *=/s/@C_SWITCH_MACHINE@//
@@ -170,28 +170,28 @@ s/@PACKAGE@/emacs/
 /^BITSIZEOF_WCHAR_T *=/s/@BITSIZEOF_WCHAR_T@/16/
 /^BITSIZEOF_WINT_T *=/s/@BITSIZEOF_WINT_T@/32/
 /^APPLE_UNIVERSAL_BUILD *=/s/@APPLE_UNIVERSAL_BUILD@/0/
-#
-# Most GNULIB_* are replaced with zero even though DJGPP does not have
-# these features.  That's because the gnulib replacements cannot
+# Most GL_GNULIB_* are replaced with zero even though DJGPP does not
+# have these features.  That's because the gnulib replacements cannot
 # possibly work for DJGPP, so we prefer to fail the link than have a
 # subtly botched executable.  Those replacements that _are_ needed
 # should be before the last catch-all rule.
-/^GNULIB_ATOLL *=/s/@GNULIB_ATOLL@/1/
-/^GNULIB_DUP3 *=/s/@GNULIB_DUP3@/1/
-/^GNULIB_ENVIRON *=/s/@GNULIB_ENVIRON@/1/
-/^GNULIB_FDATASYNC *=/s/@GNULIB_FDATASYNC@/1/
-/^GNULIB_GETLOADAVG *=/s/@GNULIB_GETLOADAVG@/1/
-/^GNULIB_GL_UNISTD_H_GETOPT *=/s/@GNULIB_GL_UNISTD_H_GETOPT@/1/
-/^GNULIB_MEMRCHR *=/s/@GNULIB_MEMRCHR@/1/
-/^GNULIB_MKOSTEMP *=/s/@GNULIB_MKOSTEMP@/1/
-/^GNULIB_MKTIME *=/s/@GNULIB_MKTIME@/1/
-/^GNULIB_TIME_R *=/s/@GNULIB_TIME_R@/1/
-/^GNULIB_TIMEGM *=/s/@GNULIB_TIMEGM@/1/
-/^GNULIB_TIME_RZ *=/s/@GNULIB_TIME_RZ@/1/
-/^GNULIB_UNSETENV *=/s/@GNULIB_UNSETENV@/1/
-/^GNULIB_[^ =]* *= *@/s/@[^@\n]*@/0/
-/^GSETTINGS_CFLAGS *=/s/@[^@\n]*@//
-/^GSETTINGS_LIBS *=/s/@[^@\n]*@//
+/^GL_GNULIB_ATOLL *=/s/@GL_GNULIB_ATOLL@/1/
+/^GL_GNULIB_DUP3 *=/s/@GL_GNULIB_DUP3@/1/
+/^GL_GNULIB_ENVIRON *=/s/@GL_GNULIB_ENVIRON@/1/
+/^GL_GNULIB_FDATASYNC *=/s/@GL_GNULIB_FDATASYNC@/1/
+/^GL_GNULIB_GETLOADAVG *=/s/@GL_GNULIB_GETLOADAVG@/1/
+/^GL_GNULIB_UNISTD_H_GETOPT *=/s/@GL_GNULIB_UNISTD_H_GETOPT@/1/
+/^GL_GNULIB_MEMRCHR *=/s/@GL_GNULIB_MEMRCHR@/1/
+/^GL_GNULIB_MEMPCPY *=/s/@GL_GNULIB_MEMPCPY@/1/
+/^GL_GNULIB_MKOSTEMP *=/s/@GL_GNULIB_MKOSTEMP@/1/
+/^GL_GNULIB_MKTIME *=/s/@GL_GNULIB_MKTIME@/1/
+/^GL_GNULIB_TIME_R *=/s/@GL_GNULIB_TIME_R@/1/
+/^GL_GNULIB_TIMEGM *=/s/@GL_GNULIB_TIMEGM@/1/
+/^GL_GNULIB_TIME_RZ *=/s/@GL_GNULIB_TIME_RZ@/1/
+/^GL_GNULIB_UNSETENV *=/s/@GL_GNULIB_UNSETENV@/1/
+/^GL_GNULIB_[^ =]* *= *@/s/@[^@\n]*@/0/
+/^GL_GSETTINGS_CFLAGS *=/s/@[^@\n]*@//
+/^GL_GSETTINGS_LIBS *=/s/@[^@\n]*@//
 #
 # Edit the HAVE_foo variables
 /^HAVE_ATOLL *=/s/@HAVE_ATOLL@/0/
@@ -253,6 +253,7 @@ s/@PACKAGE@/emacs/
 /^HAVE_USLEEP *=/s/@HAVE_USLEEP@/1/
 /^HAVE_WCHAR_H *=/s/@HAVE_WCHAR_H@/1/
 /^HAVE_WCHAR_T *=/s/@HAVE_WCHAR_T@/1/
+/^HAVE_LIBGMP *=/s/@HAVE_LIBGMP@/0/
 /^HAVE__BOOL *=/s/@HAVE__BOOL@/1/
 /^HAVE__EXIT *=/s/@HAVE__EXIT@/1/
 /^HAVE_[^ =]* *= *@/s/@[^@\n]*@/0/
@@ -265,7 +266,9 @@ s/@PACKAGE@/emacs/
 /^LIBS *=/s/@[^@\n]*@//
 /^MAKEINFO *=/s/@MAKEINFO@/makeinfo/
 # MKDIR_P lines are edited further below
-/^MKDIR_P *=/s/@MKDIR_P@//
+# MKDIR_P is only used to create lib/malloc, and the folder is
+# already present in the distribution, so this should work fine.
+/^MKDIR_P *=/s/@MKDIR_P@/echo/
 /^NEXT_AS_FIRST_DIRECTIVE_DIRENT_H *=/s/@[^@\n]*@/<dirent.h>/
 /^NEXT_AS_FIRST_DIRECTIVE_ERRNO_H *=/s/@[^@\n]*@//
 /^NEXT_AS_FIRST_DIRECTIVE_FCNTL_H *=/s/@[^@\n]*@/<fcntl.h>/
@@ -309,6 +312,7 @@ s/@PACKAGE@/emacs/
 /^REPLACE_MKTIME *=/s/@[^@\n]*@/1/
 # We don't want any other gnulib replacement functions
 /^REPLACE_[^ =]* *= *@/s/@[^@\n]*@/0/
+/^LIB_GETRANDOM[^ =]* *= *@/s/@[^@\n]*@//
 /^SIG_ATOMIC_T_SUFFIX *=/s/@SIG_ATOMIC_T_SUFFIX@//
 /^SIZE_T_SUFFIX *=/s/@SIZE_T_SUFFIX@/u/
 /^ALLOCA_H *=/s/@[^@\n]*@/alloca.h/
@@ -317,18 +321,23 @@ s/@PACKAGE@/emacs/
 /^ERRNO_H *=/s/@[^@\n]*@//
 /^EXECINFO_H *=/s/@[^@\n]*@/execinfo.h/
 /^GETOPT_CDEFS_H *=/s/@[^@\n]*@/getopt-cdefs.h/
+/^GMP_H *=/s/@[^@\n]*@/gmp.h/
 /^LIMITS_H *=/s/@[^@\n]*@/limits.h/
+/^IEEE754_H *=/s/@[^@\n]*@/ieee754.h/
 /^STDALIGN_H *=/s/@[^@\n]*@/stdalign.h/
 /^STDDEF_H *=/s/@[^@\n]*@/stddef.h/
 /^STDINT_H *=/s/@[^@\n]*@/stdint.h/
 /^SYS_TIME_H_DEFINES_STRUCT_TIMESPEC *=/s/@[^@\n]*@/0/
 /^TIME_H_DEFINES_STRUCT_TIMESPEC *=/s/@[^@\n]*@/0/
+/^TIME_H_DEFINES_TIME_UTC *=/s/@[^@\n]*@/0/
+/^UNISTD_H_HAVE_SYS_RANDOM_H *=/s/@[^@\n]*@/0/
 /^UNISTD_H_HAVE_WINSOCK2_H *=/s/@[^@\n]*@/0/
 /^UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS *=/s/@[^@\n]*@/0/
 /^UNISTD_H_DEFINES_STRUCT_TIMESPEC *=/s/@[^@\n]*@/0/
 /^UNDEFINE_STRTOK_R *=/s/@UNDEFINE_STRTOK_R@/0/
 /^WCHAR_T_SUFFIX *=/s/@WCHAR_T_SUFFIX@/h/
 /^WINT_T_SUFFIX *=/s/@WINT_T_SUFFIX@//
+/^GNULIBHEADERS_OVERRIDE_WINT_T *=/s/@[^@\n]*@/0/
 /^WINDOWS_64_BIT_OFF_T *=/s/@WINDOWS_64_BIT_OFF_T@/0/
 /^WINDOWS_64_BIT_ST_SIZE *=/s/@WINDOWS_64_BIT_ST_SIZE@/0/
 /^WINDOWS_STAT_INODES *=/s/@WINDOWS_STAT_INODES@/0/
@@ -337,7 +346,7 @@ s/@PACKAGE@/emacs/
 /am__append_[1-9][0-9]* *=.*gettext\.h/s/@[^@\n]*@/\#/
 /am__append_2 *=.*verify\.h/s/@[^@\n]*@//
 /^@gl_GNULIB_ENABLED_tempname_TRUE@/s/@[^@\n]*@//
-/^gl_LIBOBJS *=/s/@[^@\n]*@/getopt.o getopt1.o memrchr.o sig2str.o time_r.o 
time_rz.o timegm.o mktime.o getloadavg.o pthread_sigmask.o mkostemp.o 
fpending.o fdatasync.o execinfo.o/
+/^gl_LIBOBJS *=/s/@[^@\n]*@/getopt.o getopt1.o getrandom.o memrchr.o mempcpy.o 
regex.o memmem.o sig2str.o sigdescr_np.o time_r.o time_rz.o timegm.o mktime.o 
mini-gmp-gnulib.o getloadavg.o pthread_sigmask.o mkostemp.o fpending.o 
execinfo.o tempname.o/
 /^am__append_[1-9][0-9]* *=/,/^[^      ]/{
   s/ *inttypes\.h//
   s| *sys/select\.h||
@@ -394,15 +403,19 @@ s/^       -*test -z.*|| rm/        -rm/
 s/@echo /@djecho /
 #
 # Determine which headers to generate
-s/= @GL_GENERATE_ALLOCA_H@/= 1/
+s/= @GL_GENERATE_ALLOCA_H_TRUE@/= 1/
 s/= @GL_GENERATE_BYTESWAP_H@/= 1/
 s/= @GL_GENERATE_EXECINFO_H@/= 1/
+s/= @GL_GENERATE_IEEE754_H@/= 1/
 s/= @GL_GENERATE_STDALIGN_H@/= 1/
 s/= @GL_GENERATE_STDDEF_H@/= 1/
 s/= @GL_GENERATE_STDINT_H@/= 1/
 s/= @GL_GENERATE_LIMITS_H@/= 1/
 s/= @GL_GENERATE_ERRNO_H@/= /
 s/= @GL_GENERATE_LIMITS_H@/= /
+s/= @GL_GENERATE_GMP_GMP_H@/= 1/
+s/= @GL_GENERATE_MINI_GMP_H@/= 1/
+s/\$\(MKDIR_P\) malloc//
 #
 # Determine which modules to build and which to omit
 /^noinst_LIBRARIES /a\
@@ -413,6 +426,7 @@ OMIT_GNULIB_MODULE_careadlinkat = true\
 OMIT_GNULIB_MODULE_cloexec = true\
 OMIT_GNULIB_MODULE_dirent = true\
 OMIT_GNULIB_MODULE_dirfd = true\
+OMIT_GNULIB_MODULE_scratch_buffer = true\
 OMIT_GNULIB_MODULE_dup2 = true\
 OMIT_GNULIB_MODULE_errno = true\
 OMIT_GNULIB_MODULE_euidaccess = true\
@@ -439,7 +453,8 @@ OMIT_GNULIB_MODULE_strtoimax = true\
 OMIT_GNULIB_MODULE_strtoll = true\
 OMIT_GNULIB_MODULE_symlink = true\
 OMIT_GNULIB_MODULE_sys_select = true\
-OMIT_GNULIB_MODULE_sys_time = true
+OMIT_GNULIB_MODULE_sys_time = true\
+OMIT_GNULIB_MODULE_crypto\/md5 = true
 /^arg-nonnull\.h:/,/^[         ][      ]*mv /c\
 arg-nonnull.h: $(top_srcdir)/build-aux/snippet/arg-nonnull.h\
        sed -n -e '/GL_ARG_NONNULL/,$$p' < 
$(top_srcdir)/build-aux/snippet/arg-nonnull.h > $@
diff --git a/msdos/sedlisp.inp b/msdos/sedlisp.inp
index 5b3dc26ec5..731bf0bb8e 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 2000-2022 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/nextstep/ChangeLog.1 b/nextstep/ChangeLog.1
index 8e7e2783ad..86583d227e 100644
--- a/nextstep/ChangeLog.1
+++ b/nextstep/ChangeLog.1
@@ -312,7 +312,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2008-2021 Free Software Foundation, Inc.
+  Copyright (C) 2008-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/nextstep/INSTALL b/nextstep/INSTALL
index 148be2d05c..945d67faa4 100644
--- a/nextstep/INSTALL
+++ b/nextstep/INSTALL
@@ -1,4 +1,4 @@
-Copyright (C) 2008-2021 Free Software Foundation, Inc.
+Copyright (C) 2008-2022 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/nextstep/Makefile.in b/nextstep/Makefile.in
index 42b2ab2715..92d7f28fe6 100644
--- a/nextstep/Makefile.in
+++ b/nextstep/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-## Copyright (C) 2012-2021 Free Software Foundation, Inc.
+## Copyright (C) 2012-2022 Free Software Foundation, Inc.
 
 ## This file is part of GNU Emacs.
 
diff --git a/nextstep/README b/nextstep/README
index 141a5b21fe..3ee437949c 100644
--- a/nextstep/README
+++ b/nextstep/README
@@ -105,7 +105,7 @@ future development.
 
 
 ----------------------------------------------------------------------
-Copyright 2008-2021 Free Software Foundation, Inc.
+Copyright 2008-2022 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 f9f0ec0857..170db67c11 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2008-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/ChangeLog.1 b/nt/ChangeLog.1
index d0aed936d1..632dc642cd 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-2021 Free Software Foundation, Inc.
+  Copyright (C) 1995-1999, 2001-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/nt/INSTALL b/nt/INSTALL
index c324fb4ae7..0b8ca98c8a 100644
--- a/nt/INSTALL
+++ b/nt/INSTALL
@@ -1,7 +1,7 @@
                    Building and Installing Emacs on MS-Windows
                           using the MSYS and MinGW tools
 
-  Copyright (C) 2013-2021 Free Software Foundation, Inc.
+  Copyright (C) 2013-2022 Free Software Foundation, Inc.
   See the end of the file for license conditions.
 
 The MSYS/MinGW build described here is supported on versions of
diff --git a/nt/INSTALL.W64 b/nt/INSTALL.W64
index c3845d5b17..fd8f60bb0b 100644
--- a/nt/INSTALL.W64
+++ b/nt/INSTALL.W64
@@ -1,7 +1,7 @@
          Building and Installing Emacs on 64-bit MS-Windows
                      using MSYS2 and MinGW-w64
 
-  Copyright (c) 2015-2021 Free Software Foundation, Inc.
+  Copyright (c) 2015-2022 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
diff --git a/nt/Makefile.in b/nt/Makefile.in
index 811680da85..c904e6d451 100644
--- a/nt/Makefile.in
+++ b/nt/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 2013-2021 Free Software Foundation, Inc.
+# Copyright (C) 2013-2022 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/nt/README b/nt/README
index 3da31d018b..a142994b74 100644
--- a/nt/README
+++ b/nt/README
@@ -1,6 +1,6 @@
             Emacs for Windows NT/2000 and Windows 95/98/ME
 
-  Copyright (C) 2001-2021 Free Software Foundation, Inc.
+  Copyright (C) 2001-2022 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 495af0baed..cbb5b12551 100644
--- a/nt/README.W32
+++ b/nt/README.W32
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2021 Free Software Foundation, Inc.
+Copyright (C) 2001-2022 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
                Emacs version 29.0.50 for MS-Windows
diff --git a/nt/addpm.c b/nt/addpm.c
index 4fbcf6c05e..22134e482a 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1995, 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/cmdproxy.c b/nt/cmdproxy.c
index f5a0550aa9..ad061306a3 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1997, 2001-2022 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 0cb1a632e2..60682a7a81 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-2021 Free Software Foundation, Inc.
+rem   Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 rem   This file is part of GNU Emacs.
 
diff --git a/nt/ddeclient.c b/nt/ddeclient.c
index 0a44cbfd77..87f209422c 100644
--- a/nt/ddeclient.c
+++ b/nt/ddeclient.c
@@ -1,5 +1,5 @@
 /* Simple client interface to DDE servers.
-   Copyright (C) 1998, 2001-2021 Free Software Foundation, Inc.
+   Copyright (C) 1998, 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/epaths.nt b/nt/epaths.nt
index a75ed52a34..da17883bf2 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-2021 Free Software
+Copyright (C) 1993, 1995, 1997, 1999, 2001-2022 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/nt/gnulib-cfg.mk b/nt/gnulib-cfg.mk
index e9f00e748e..4748474f1d 100644
--- a/nt/gnulib-cfg.mk
+++ b/nt/gnulib-cfg.mk
@@ -1,6 +1,6 @@
 # Configurations for ../lib/gnulib.mk.
 #
-# Copyright 2017-2021 Free Software Foundation, Inc.
+# Copyright 2017-2022 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 a8849b2eee..4d9fb15e52 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2008-2022 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later
 
 
 File: emacs22.ico
 Author: Andrew Zhilin
-Copyright (C) 2005-2021 Free Software Foundation, Inc.
+Copyright (C) 2005-2022 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1999, 2001-2022 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 41511477db..14866684a9 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2003-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/inc/inttypes.h b/nt/inc/inttypes.h
index 89c000238f..c41966b14a 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/inc/langinfo.h b/nt/inc/langinfo.h
index 86f4ce5bd9..9475e6a11c 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2006-2022 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 aad51b59cf..3f4b2f3489 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1993-1995, 2001-2022 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 8926f75f79..155a62f4c0 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2006-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/inc/stdint.h b/nt/inc/stdint.h
index 0ee3d4a9ff..812e54c402 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2011-2022 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 d35f89b8cd..87f396b1f2 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2016-2022 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 48b24628f8..87123dcc64 100644
--- a/nt/inc/sys/socket.h
+++ b/nt/inc/sys/socket.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995, 2001-2021 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 2001-2022 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 aa93bd4af4..17e5dd6264 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2008-2022 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 481ad9c38b..56f690baa1 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2012-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/preprep.c b/nt/preprep.c
index 8b054b19a7..a2de049d59 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/nt/runemacs.c b/nt/runemacs.c
index b4ed9fb156..ea1e420fab 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/oldXMenu/Activate.c b/oldXMenu/Activate.c
index 8ffa817f6c..646631df84 100644
--- a/oldXMenu/Activate.c
+++ b/oldXMenu/Activate.c
@@ -21,7 +21,7 @@ without express or implied warranty.
 
 
 /*
-Copyright (C) 2001-2021 Free Software Foundation, Inc.
+Copyright (C) 2001-2022 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 c237774a3f..ebbbcd2df2 100644
--- a/oldXMenu/ChangeLog.1
+++ b/oldXMenu/ChangeLog.1
@@ -712,7 +712,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1993-1999, 2001-2021 Free Software Foundation, Inc.
+  Copyright (C) 1993-1999, 2001-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/oldXMenu/Create.c b/oldXMenu/Create.c
index 2077a71848..69e5234940 100644
--- a/oldXMenu/Create.c
+++ b/oldXMenu/Create.c
@@ -21,7 +21,7 @@ without express or implied warranty.
 
 
 /*
-Copyright (C) 1993-1994, 2001-2021 Free Software Foundation, Inc.
+Copyright (C) 1993-1994, 2001-2022 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 53d14053b3..2db43df2f9 100644
--- a/oldXMenu/FindSel.c
+++ b/oldXMenu/FindSel.c
@@ -21,7 +21,7 @@ without express or implied warranty.
 
 
 /*
-Copyright (C) 2001-2021 Free Software Foundation, Inc.
+Copyright (C) 2001-2022 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 476336ce49..5d1a5d2bbc 100644
--- a/oldXMenu/Internal.c
+++ b/oldXMenu/Internal.c
@@ -21,7 +21,7 @@ without express or implied warranty.
 
 
 /*
-Copyright (C) 1993, 1996, 2001-2021 Free Software Foundation, Inc.
+Copyright (C) 1993, 1996, 2001-2022 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 39fd155735..5cbc8a4829 100644
--- a/oldXMenu/Makefile.in
+++ b/oldXMenu/Makefile.in
@@ -15,7 +15,7 @@
 ## without express or implied warranty.
 
 
-## Copyright (C) 2001-2021 Free Software Foundation, Inc.
+## Copyright (C) 2001-2022 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 f1876bf769..cef392815d 100644
--- a/oldXMenu/deps.mk
+++ b/oldXMenu/deps.mk
@@ -15,7 +15,7 @@
 ## without express or implied warranty.
 
 
-## Copyright (C) 2001-2021 Free Software Foundation, Inc.
+## Copyright (C) 2001-2022 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 c09d1292aa..75e59f3b33 100644
--- a/oldXMenu/insque.c
+++ b/oldXMenu/insque.c
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 1993-1998, 2001-2021 Free Software Foundation, Inc.
+Copyright (C) 1993-1998, 2001-2022 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 9f2a86b779..9ec536a96d 100644
--- a/src/.gdbinit
+++ b/src/.gdbinit
@@ -1,4 +1,4 @@
-# Copyright (C) 1992-1998, 2000-2021 Free Software Foundation, Inc.
+# Copyright (C) 1992-1998, 2000-2022 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
@@ -41,6 +41,11 @@ handle SIGUSR2 noprint pass
 # debugging.
 handle SIGALRM ignore
 
+# On selection send failed.
+if defined_HAVE_PGTK
+  handle SIGPIPE nostop noprint
+end
+
 # Use $bugfix so that the value isn't a constant.
 # Using a constant runs into GDB bugs sometimes.
 define xgetptr
@@ -1236,6 +1241,9 @@ set print pretty on
 set print sevenbit-strings
 
 show environment DISPLAY
+if defined_HAVE_PGTK
+  show environment WAYLAND_DISPLAY
+end
 show environment TERM
 
 # When debugging, it is handy to be able to "return" from
diff --git a/src/ChangeLog.1 b/src/ChangeLog.1
index 3429aa4947..7076a1e13f 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-2021 Free Software Foundation, Inc.
+    Copyright (C) 1985-1986, 2001-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.10 b/src/ChangeLog.10
index bba161d342..ba1cea18d4 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-2021 Free Software Foundation, Inc.
+    Copyright (C) 2001-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.11 b/src/ChangeLog.11
index cf5e7b7a2a..15ab227171 100644
--- a/src/ChangeLog.11
+++ b/src/ChangeLog.11
@@ -31385,7 +31385,7 @@ See ChangeLog.10 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2007-2021 Free Software Foundation, Inc.
+  Copyright (C) 2007-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.12 b/src/ChangeLog.12
index 77540ee5b1..18618bbfb2 100644
--- a/src/ChangeLog.12
+++ b/src/ChangeLog.12
@@ -22936,7 +22936,7 @@ See ChangeLog.11 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2011-2021 Free Software Foundation, Inc.
+  Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.13 b/src/ChangeLog.13
index 3fb23ceff3..abf2a9421a 100644
--- a/src/ChangeLog.13
+++ b/src/ChangeLog.13
@@ -17905,7 +17905,7 @@ See ChangeLog.12 for earlier changes.
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2011-2021 Free Software Foundation, Inc.
+  Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.2 b/src/ChangeLog.2
index 44c575c564..1642518532 100644
--- a/src/ChangeLog.2
+++ b/src/ChangeLog.2
@@ -4771,7 +4771,7 @@
 
 See ChangeLog.1 for earlier changes.
 
-    Copyright (C) 1986-1988, 2001-2021 Free Software Foundation, Inc.
+    Copyright (C) 1986-1988, 2001-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.3 b/src/ChangeLog.3
index 1cae9bfc65..4b3675eaa8 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-2021 Free Software Foundation, Inc.
+  Copyright (C) 1993, 2001-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.4 b/src/ChangeLog.4
index f34e4cb0f5..e55967673d 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-2021 Free Software Foundation, Inc.
+  Copyright (C) 1993-1994, 2001-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.5 b/src/ChangeLog.5
index af0f6b9c38..c74e44d7a2 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-2021 Free Software Foundation, Inc.
+  Copyright (C) 1994-1995, 2001-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.6 b/src/ChangeLog.6
index 709148569e..fc7cc5e4d4 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-2021 Free Software Foundation, Inc.
+  Copyright (C) 1995-1996, 2001-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.7 b/src/ChangeLog.7
index 7e9a085e50..e893a2a6d8 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-2021 Free Software Foundation, Inc.
+  Copyright (C) 1997-1998, 2001-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.8 b/src/ChangeLog.8
index 8587a14f2c..ef2472a0f3 100644
--- a/src/ChangeLog.8
+++ b/src/ChangeLog.8
@@ -13979,7 +13979,7 @@
 
 See ChangeLog.7 for earlier changes.
 
-  Copyright (C) 1999, 2001-2021 Free Software Foundation, Inc.
+  Copyright (C) 1999, 2001-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/ChangeLog.9 b/src/ChangeLog.9
index 25a17e74fe..b6d3f93445 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-2021 Free Software Foundation, Inc.
+  Copyright (C) 2001-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/src/Makefile.in b/src/Makefile.in
index d276df2247..04fabd5f42 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 1985, 1987-1988, 1993-1995, 1999-2021 Free Software
+# Copyright (C) 1985, 1987-1988, 1993-1995, 1999-2022 Free Software
 # Foundation, Inc.
 
 # This file is part of GNU Emacs.
@@ -238,6 +238,8 @@ IMAGEMAGICK_CFLAGS= @IMAGEMAGICK_CFLAGS@
 LIBXML2_LIBS = @LIBXML2_LIBS@
 LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
 
+SQLITE3_LIBS = @SQLITE3_LIBS@
+
 GETADDRINFO_A_LIBS = @GETADDRINFO_A_LIBS@
 
 LCMS2_LIBS = @LCMS2_LIBS@
@@ -295,6 +297,9 @@ W32_OBJ=@W32_OBJ@
 ## -lkernel32 if CYGWIN but not HAVE_W32, else empty.
 W32_LIBS=@W32_LIBS@
 
+PGTK_OBJ=@PGTK_OBJ@
+PGTK_LIBS=@PGTK_LIBS@
+
 ## emacs.res if HAVE_W32
 EMACSRES = @EMACSRES@
 ## If HAVE_W32, compiler arguments for including
@@ -374,7 +379,7 @@ pdmp :=
 endif
 
 # Flags that might be in WARN_CFLAGS but are not valid for Objective C.
-NON_OBJC_CFLAGS = -Wignored-attributes -Wignored-qualifiers -Wopenmp-simd
+NON_OBJC_CFLAGS = -Wignored-attributes -Wignored-qualifiers -Wopenmp-simd 
-Wnested-externs
 # Ditto, but for C++.
 NON_CXX_CFLAGS = -Wmissing-prototypes -Wnested-externs -Wold-style-definition \
   -Wstrict-prototypes -Wno-override-init
@@ -426,11 +431,11 @@ base_obj = dispnew.o frame.o scroll.o xdisp.o menu.o 
$(XMENU_OBJ) window.o \
        doprnt.o intervals.o textprop.o composite.o xml.o lcms.o $(NOTIFY_OBJ) \
        $(XWIDGETS_OBJ) \
        profiler.o decompress.o \
-       thread.o systhread.o \
+       thread.o systhread.o sqlite.o \
        $(if $(HYBRID_MALLOC),sheap.o) \
        $(MSDOS_OBJ) $(MSDOS_X_OBJ) $(NS_OBJ) $(CYGWIN_OBJ) $(FONT_OBJ) \
        $(W32_OBJ) $(WINDOW_SYSTEM_OBJ) $(XGSELOBJ) $(JSON_OBJ) \
-       $(HAIKU_OBJ)
+       $(HAIKU_OBJ) $(PGTK_OBJ)
 doc_obj = $(base_obj) $(NS_OBJC_OBJ)
 obj = $(doc_obj) $(HAIKU_CXX_OBJ)
 
@@ -520,11 +525,11 @@ endif
 ## but the second one seems like it could be more future-proof.
 shortlisp =
 lisp.mk: $(lispsource)/loadup.el
-       @rm -f $@
        ${AM_V_GEN}( printf 'shortlisp = \\\n'; \
        sed -n 's/^[ \t]*(load "\([^"]*\)".*/\1/p' $< | \
          sed -e 's/$$/.elc \\/' -e 's/\.el\.elc/.el/'; \
-       echo "" ) > $@
+       echo "" ) > $@.tmp
+       $(AM_V_at)mv -f $@.tmp $@
 
 -include lisp.mk
 shortlisp_filter = leim/leim-list.el site-load.elc site-init.elc
@@ -537,7 +542,7 @@ export LISP_PRELOADED = ${shortlisp}
 lisp = $(addprefix ${lispsource}/,${shortlisp})
 
 ## Construct full set of libraries to be linked.
-LIBES = $(LIBS) $(W32_LIBS) $(LIBS_GNUSTEP) $(LIBX_BASE) $(LIBIMAGE) \
+LIBES = $(LIBS) $(W32_LIBS) $(LIBS_GNUSTEP) $(PGTK_LIBS) $(LIBX_BASE) 
$(LIBIMAGE) \
    $(LIBX_OTHER) $(LIBSOUND) \
    $(RSVG_LIBS) $(IMAGEMAGICK_LIBS) $(LIB_ACL) $(LIB_CLOCK_GETTIME) \
    $(WEBKIT_LIBS) \
@@ -549,7 +554,8 @@ LIBES = $(LIBS) $(W32_LIBS) $(LIBS_GNUSTEP) $(LIBX_BASE) 
$(LIBIMAGE) \
    $(FREETYPE_LIBS) $(FONTCONFIG_LIBS) $(HARFBUZZ_LIBS) $(LIBOTF_LIBS) 
$(M17N_FLT_LIBS) \
    $(LIBGNUTLS_LIBS) $(LIB_PTHREAD) $(GETADDRINFO_A_LIBS) $(LCMS2_LIBS) \
    $(NOTIFY_LIBS) $(LIB_MATH) $(LIBZ) $(LIBMODULES) $(LIBSYSTEMD_LIBS) \
-   $(JSON_LIBS) $(LIBGMP) $(LIBGCCJIT_LIBS) $(XINPUT_LIBS) $(HAIKU_LIBS)
+   $(JSON_LIBS) $(LIBGMP) $(LIBGCCJIT_LIBS) $(XINPUT_LIBS) $(HAIKU_LIBS) \
+   $(SQLITE3_LIBS)
 
 ## FORCE it so that admin/unidata can decide whether this file is
 ## up-to-date.  Although since charprop depends on bootstrap-emacs,
@@ -611,8 +617,8 @@ endif
 
 ifeq ($(HAVE_BE_APP),yes)
 Emacs: emacs$(EXEEXT)
-       cp -f emacs$(EXEEXT) $@
-       $(AM_V_GEN) $(libsrc)/be-resources \
+       $(AM_V_GEN) cp -f emacs$(EXEEXT) $@
+       $(AM_V_at) $(libsrc)/be-resources \
          $(etc)/images/icons/hicolor/32x32/apps/emacs.png $@
 Emacs.pdmp: $(pdmp)
        $(AM_V_GEN) cp -f $(pdmp) $@
@@ -636,13 +642,13 @@ endif
 ## for the first time, this prevents any variation between configurations
 ## in the contents of the DOC file.
 ##
-$(etc)/DOC: lisp.mk $(libsrc)/make-docfile$(EXEEXT) $(doc_obj) $(lisp)
+$(etc)/DOC: $(libsrc)/make-docfile$(EXEEXT) $(doc_obj) 
$(lispsource)/loaddefs.el
        $(AM_V_GEN)$(MKDIR_P) $(etc)
        $(AM_V_at)rm -f $(etc)/DOC
        $(AM_V_at)$(libsrc)/make-docfile -d $(srcdir) \
          $(SOME_MACHINE_OBJECTS) $(doc_obj) > $(etc)/DOC
        $(AM_V_at)$(libsrc)/make-docfile -a $(etc)/DOC -d $(lispsource) \
-         $(shortlisp)
+         loaddefs.el
 
 $(libsrc)/make-docfile$(EXEEXT) $(libsrc)/make-fingerprint$(EXEEXT): \
   $(lib)/libgnu.a
diff --git a/src/README b/src/README
index 1f42449edd..54d83df57b 100644
--- a/src/README
+++ b/src/README
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2021 Free Software Foundation, Inc.
+Copyright (C) 2001-2022 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/src/alloc.c b/src/alloc.c
index 0d69f23048..e0b2c22023 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-1986, 1988, 1993-1995, 1997-2021 Free Software
+Copyright (C) 1985-1986, 1988, 1993-1995, 1997-2022 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -125,6 +125,7 @@ union emacs_align_type
   struct Lisp_Overlay Lisp_Overlay;
   struct Lisp_Sub_Char_Table Lisp_Sub_Char_Table;
   struct Lisp_Subr Lisp_Subr;
+  struct Lisp_Sqlite Lisp_Sqlite;
   struct Lisp_User_Ptr Lisp_User_Ptr;
   struct Lisp_Vector Lisp_Vector;
   struct terminal terminal;
@@ -3160,26 +3161,26 @@ cleanup_vector (struct Lisp_Vector *vector)
       module_finalize_function (function);
     }
 #endif
-  else if (NATIVE_COMP_FLAG
-          && PSEUDOVECTOR_TYPEP (&vector->header, PVEC_NATIVE_COMP_UNIT))
+#ifdef HAVE_NATIVE_COMP
+  else if (PSEUDOVECTOR_TYPEP (&vector->header, PVEC_NATIVE_COMP_UNIT))
     {
       struct Lisp_Native_Comp_Unit *cu =
        PSEUDOVEC_STRUCT (vector, Lisp_Native_Comp_Unit);
       unload_comp_unit (cu);
     }
-  else if (NATIVE_COMP_FLAG
-          && PSEUDOVECTOR_TYPEP (&vector->header, PVEC_SUBR))
+  else if (PSEUDOVECTOR_TYPEP (&vector->header, PVEC_SUBR))
     {
       struct Lisp_Subr *subr =
        PSEUDOVEC_STRUCT (vector, Lisp_Subr);
-      if (!NILP (subr->native_comp_u[0]))
+      if (!NILP (subr->native_comp_u))
        {
          /* FIXME Alternative and non invasive solution to this
             cast?  */
          xfree ((char *)subr->symbol_name);
-         xfree (subr->native_c_name[0]);
+         xfree (subr->native_c_name);
        }
     }
+#endif
 }
 
 /* Reclaim space used by unmarked vectors.  */
@@ -3902,6 +3903,7 @@ count as reachable for the purpose of deciding whether to 
run
 FUNCTION.  FUNCTION will be run once per finalizer object.  */)
   (Lisp_Object function)
 {
+  CHECK_TYPE (FUNCTIONP (function), Qfunctionp, function);
   struct Lisp_Finalizer *finalizer
     = ALLOCATE_PSEUDOVECTOR (struct Lisp_Finalizer, function, PVEC_FINALIZER);
   finalizer->function = function;
@@ -6159,6 +6161,9 @@ garbage_collect (void)
   mark_terminals ();
   mark_kboards ();
   mark_threads ();
+#ifdef HAVE_PGTK
+  mark_pgtkterm ();
+#endif
 
 #ifdef USE_GTK
   xg_mark_data ();
@@ -6803,15 +6808,17 @@ mark_object (Lisp_Object arg)
            break;
 
          case PVEC_SUBR:
+#ifdef HAVE_NATIVE_COMP
            if (SUBR_NATIVE_COMPILEDP (obj))
              {
                set_vector_marked (ptr);
                struct Lisp_Subr *subr = XSUBR (obj);
                mark_object (subr->native_intspec);
-               mark_object (subr->native_comp_u[0]);
-               mark_object (subr->lambda_list[0]);
-               mark_object (subr->type[0]);
+               mark_object (subr->native_comp_u);
+               mark_object (subr->lambda_list);
+               mark_object (subr->type);
              }
+#endif
            break;
 
          case PVEC_FREE:
@@ -7736,6 +7743,12 @@ enum defined_HAVE_X_WINDOWS { defined_HAVE_X_WINDOWS = 
true };
 enum defined_HAVE_X_WINDOWS { defined_HAVE_X_WINDOWS = false };
 #endif
 
+#ifdef HAVE_PGTK
+enum defined_HAVE_PGTK { defined_HAVE_PGTK = true };
+#else
+enum defined_HAVE_PGTK { defined_HAVE_PGTK = false };
+#endif
+
 /* When compiled with GCC, GDB might say "No enum type named
    pvec_type" if we don't have at least one symbol with that type, and
    then xbacktrace could fail.  Similarly for the other enums and
@@ -7755,5 +7768,6 @@ union
   enum More_Lisp_Bits More_Lisp_Bits;
   enum pvec_type pvec_type;
   enum defined_HAVE_X_WINDOWS defined_HAVE_X_WINDOWS;
+  enum defined_HAVE_PGTK defined_HAVE_PGTK;
 } const EXTERNALLY_VISIBLE gdb_make_enums_visible = {0};
 #endif /* __GNUC__ */
diff --git a/src/atimer.c b/src/atimer.c
index df35603f32..1c6c881fc0 100644
--- a/src/atimer.c
+++ b/src/atimer.c
@@ -1,5 +1,5 @@
 /* Asynchronous timers.
-   Copyright (C) 2000-2021 Free Software Foundation, Inc.
+   Copyright (C) 2000-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/atimer.h b/src/atimer.h
index e3e283a75c..7d6d853ffd 100644
--- a/src/atimer.h
+++ b/src/atimer.h
@@ -1,5 +1,5 @@
 /* Asynchronous timers.
-   Copyright (C) 2000-2021 Free Software Foundation, Inc.
+   Copyright (C) 2000-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/bidi.c b/src/bidi.c
index 890a60acc4..c5d524f049 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-2021 Free Software Foundation,
+Copyright (C) 2000-2001, 2004-2005, 2009-2022 Free Software Foundation,
 Inc.
 
 Author: Eli Zaretskii <eliz@gnu.org>
diff --git a/src/bignum.c b/src/bignum.c
index 1ac75c19e2..cb5322f291 100644
--- a/src/bignum.c
+++ b/src/bignum.c
@@ -1,6 +1,6 @@
 /* Big numbers for Emacs.
 
-Copyright 2018-2021 Free Software Foundation, Inc.
+Copyright 2018-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -53,6 +53,15 @@ init_bignum (void)
 {
   eassert (mp_bits_per_limb == GMP_NUMB_BITS);
   integer_width = 1 << 16;
+
+  /* FIXME: The Info node `(gmp) Custom Allocation' states: "No error
+     return is allowed from any of these functions, if they return
+     then they must have performed the specified operation. [...]
+     There's currently no defined way for the allocation functions to
+     recover from an error such as out of memory, they must terminate
+     program execution.  A 'longjmp' or throwing a C++ exception will
+     have undefined results."  But xmalloc and xrealloc do call
+     'longjmp'.  */
   mp_set_memory_functions (xmalloc, xrealloc_for_gmp, xfree_for_gmp);
 
   for (int i = 0; i < ARRAYELTS (mpz); i++)
diff --git a/src/bignum.h b/src/bignum.h
index 33a540e909..5f94ce850c 100644
--- a/src/bignum.h
+++ b/src/bignum.h
@@ -1,6 +1,6 @@
 /* Big numbers for Emacs.
 
-Copyright 2018-2021 Free Software Foundation, Inc.
+Copyright 2018-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/blockinput.h b/src/blockinput.h
index 8e4657b27c..a98fc69eb9 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1989, 1993, 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/buffer.c b/src/buffer.c
index 9d8892a797..10ac91915c 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -1,6 +1,6 @@
 /* Buffer manipulation primitives for GNU Emacs.
 
-Copyright (C) 1985-1989, 1993-1995, 1997-2021 Free Software Foundation,
+Copyright (C) 1985-1989, 1993-1995, 1997-2022 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
@@ -1552,7 +1552,7 @@ This does not change the name of the visited file (if 
any).  */)
 
   /* Catch redisplay's attention.  Unless we do this, the mode lines for
      any windows displaying current_buffer will stay unchanged.  */
-  update_mode_lines = 11;
+  bset_update_mode_line (current_buffer);
 
   XSETBUFFER (buf, current_buffer);
   Fsetcar (Frassq (buf, Vbuffer_alist), newname);
@@ -1562,6 +1562,9 @@ This does not change the name of the visited file (if 
any).  */)
 
   run_buffer_list_update_hook (current_buffer);
 
+  call2 (intern ("uniquify--rename-buffer-advice"),
+         BVAR (current_buffer, name), unique);
+
   /* Refetch since that last call may have done GC.  */
   return BVAR (current_buffer, name);
 }
@@ -6020,15 +6023,16 @@ specifies.  */);
 
   DEFVAR_PER_BUFFER ("indicate-empty-lines",
                     &BVAR (current_buffer, indicate_empty_lines), Qnil,
-                    doc: /* Visually indicate empty lines after the buffer end.
-If non-nil, a bitmap is displayed in the left fringe of a window on
-window-systems.  */);
+                    doc: /* Visually indicate unused ("empty") screen lines 
after the buffer end.
+If non-nil, a bitmap is displayed in the left fringe of a window
+on graphical displays for each screen line that doesn't correspond
+to any buffer text.  */);
 
   DEFVAR_PER_BUFFER ("indicate-buffer-boundaries",
                     &BVAR (current_buffer, indicate_buffer_boundaries), Qnil,
                     doc: /* Visually indicate buffer boundaries and scrolling.
 If non-nil, the first and last line of the buffer are marked in the fringe
-of a window on window-systems with angle bitmaps, or if the window can be
+of a window on graphical displays with angle bitmaps, or if the window can be
 scrolled, the top and bottom line of the window are marked with up and down
 arrow bitmaps.
 
diff --git a/src/buffer.h b/src/buffer.h
index 8623bed08e..135eaf72d3 100644
--- a/src/buffer.h
+++ b/src/buffer.h
@@ -1,6 +1,6 @@
 /* Header file for the buffer manipulation primitives.
 
-Copyright (C) 1985-1986, 1993-1995, 1997-2021 Free Software Foundation,
+Copyright (C) 1985-1986, 1993-1995, 1997-2022 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/bytecode.c b/src/bytecode.c
index 4fd41acab8..472992be18 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-2021 Free Software Foundation,
+   Copyright (C) 1985-1988, 1993, 2000-2022 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/callint.c b/src/callint.c
index 44dae361c1..ce77c893f4 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-2021 Free Software
+   Copyright (C) 1985-1986, 1993-1995, 1997, 2000-2022 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -364,11 +364,14 @@ invoke it (via an `interactive' spec that contains, for 
instance, an
 
   /* The index of the next element of this_command_keys to examine for
      the 'e' interactive code.  Initialize it to point to the first
-     event with parameters.  */
-  ptrdiff_t next_event;
-  for (next_event = 0; next_event < key_count; next_event++)
-    if (EVENT_HAS_PARAMETERS (AREF (keys, next_event)))
-      break;
+     event with parameters.  When `inhibit_mouse_event_check' is non-nil,
+     the command can accept an event without parameters,
+     so don't search for the event with parameters in this case.  */
+  ptrdiff_t next_event = 0;
+  if (!inhibit_mouse_event_check)
+    for (; next_event < key_count; next_event++)
+      if (EVENT_HAS_PARAMETERS (AREF (keys, next_event)))
+       break;
 
   /* Handle special starting chars `*' and `@'.  Also `-'.  */
   /* Note that `+' is reserved for user extensions.  */
@@ -606,7 +609,7 @@ invoke it (via an `interactive' spec that contains, for 
instance, an
          break;
 
        case 'e':               /* The invoking event.  */
-         if (!inhibit_mouse_event_check && next_event >= key_count)
+         if (next_event >= key_count)
            error ("%s must be bound to an event with parameters",
                   (SYMBOLP (function)
                    ? SSDATA (SYMBOL_NAME (function))
@@ -614,11 +617,15 @@ invoke it (via an `interactive' spec that contains, for 
instance, an
          args[i] = AREF (keys, next_event);
          varies[i] = -1;
 
-         /* Find the next parameterized event.  */
-         do
+         /* `inhibit_mouse_event_check' allows non-parameterized events.  */
+         if (inhibit_mouse_event_check)
            next_event++;
-         while (next_event < key_count
-                && ! EVENT_HAS_PARAMETERS (AREF (keys, next_event)));
+         else
+           /* Find the next parameterized event.  */
+           do
+             next_event++;
+           while (next_event < key_count
+                  && ! EVENT_HAS_PARAMETERS (AREF (keys, next_event)));
 
          break;
 
diff --git a/src/callproc.c b/src/callproc.c
index c949fff4db..4d3b0bb8e0 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-2021 Free Software Foundation,
+Copyright (C) 1985-1988, 1993-1995, 1999-2022 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
@@ -25,6 +25,10 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 #include <sys/types.h>
 #include <unistd.h>
 
+#ifdef MSDOS
+extern char **environ;
+#endif
+
 #include <sys/file.h>
 #include <fcntl.h>
 
@@ -1199,6 +1203,11 @@ static CHILD_SETUP_TYPE
 child_setup (int in, int out, int err, char **new_argv, char **env,
             const char *current_dir)
 {
+#ifdef MSDOS
+  char *pwd_var;
+  char *temp;
+  ptrdiff_t i;
+#endif
 #ifdef WINDOWSNT
   int cpid;
   HANDLE handles[3];
@@ -1251,6 +1260,22 @@ child_setup (int in, int out, int err, char **new_argv, 
char **env,
   exec_failed (new_argv[0], errnum);
 
 #else /* MSDOS */
+  i = strlen (current_dir);
+  pwd_var = xmalloc (i + 5);
+  temp = pwd_var + 4;
+  memcpy (pwd_var, "PWD=", 4);
+  stpcpy (temp, current_dir);
+
+  if (i > 2 && IS_DEVICE_SEP (temp[1]) && IS_DIRECTORY_SEP (temp[2]))
+    {
+      temp += 2;
+      i -= 2;
+    }
+
+  /* Strip trailing slashes for PWD, but leave "/" and "//" alone.  */
+  while (i > 2 && IS_DIRECTORY_SEP (temp[i - 1]))
+    temp[--i] = 0;
+
   pid = run_msdos_command (new_argv, pwd_var + 4, in, out, err, env);
   xfree (pwd_var);
   if (pid == -1)
@@ -1582,11 +1607,13 @@ emacs_spawn (pid_t *newpid, int std_in, int std_out, 
int std_err,
       signal (SIGPROF, SIG_DFL);
 #endif
 
+#ifdef subprocesses
       /* Stop blocking SIGCHLD in the child.  */
       unblock_child_signal (oldset);
 
       if (pty_flag)
        child_setup_tty (std_out);
+#endif
 
       if (std_err < 0)
        std_err = std_out;
diff --git a/src/casefiddle.c b/src/casefiddle.c
index 81e9ed153f..2ea5f09b4c 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-2021 Free Software Foundation,
+Copyright (C) 1985, 1994, 1997-1999, 2001-2022 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/casetab.c b/src/casetab.c
index 4699857cb8..6ea27318bc 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1993-1994, 2001-2022 Free Software Foundation, Inc.
 
 Author: Howard Gayle
 
diff --git a/src/category.c b/src/category.c
index ec8f61f7f0..bedde0de45 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1998, 2001-2022 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 7c033afc88..377eb3a0ea 100644
--- a/src/ccl.c
+++ b/src/ccl.c
@@ -1,5 +1,5 @@
 /* CCL (Code Conversion Language) interpreter.
-   Copyright (C) 2001-2021 Free Software Foundation, Inc.
+   Copyright (C) 2001-2022 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 38a81d36b0..eba417d005 100644
--- a/src/character.c
+++ b/src/character.c
@@ -1,6 +1,6 @@
 /* Basic character support.
 
-Copyright (C) 2001-2021 Free Software Foundation, Inc.
+Copyright (C) 2001-2022 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 7cd0fa78f0..dec9d56df2 100644
--- a/src/charset.c
+++ b/src/charset.c
@@ -1,6 +1,6 @@
 /* Basic character set support.
 
-Copyright (C) 2001-2021 Free Software Foundation, Inc.
+Copyright (C) 2001-2022 Free Software Foundation, Inc.
 
 Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
   2005, 2006, 2007, 2008, 2009, 2010, 2011
@@ -63,7 +63,7 @@ Lisp_Object Vcharset_hash_table;
 /* Table of struct charset.  */
 struct charset *charset_table;
 int charset_table_size;
-static int charset_table_used;
+int charset_table_used;
 
 /* Special charsets corresponding to symbols.  */
 int charset_ascii;
diff --git a/src/charset.h b/src/charset.h
index 97122d82a6..4f4a14f1bd 100644
--- a/src/charset.h
+++ b/src/charset.h
@@ -1,5 +1,5 @@
 /* Header for charset handler.
-   Copyright (C) 2001-2021 Free Software Foundation, Inc.
+   Copyright (C) 2001-2022 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)
@@ -249,6 +249,7 @@ extern Lisp_Object Vcharset_hash_table;
 /* Table of struct charset.  */
 extern struct charset *charset_table;
 extern int charset_table_size;
+extern int charset_table_used;
 
 #define CHARSET_FROM_ID(id) (charset_table + (id))
 
diff --git a/src/cm.c b/src/cm.c
index fe81ca869e..a175b4a338 100644
--- a/src/cm.c
+++ b/src/cm.c
@@ -1,5 +1,5 @@
 /* Cursor motion subroutines for GNU Emacs.
-   Copyright (C) 1985, 1995, 2001-2021 Free Software Foundation, Inc.
+   Copyright (C) 1985, 1995, 2001-2022 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 9bea33299c..f8034997c6 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1985, 1989, 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/cmds.c b/src/cmds.c
index 00fde0ef79..626c9198aa 100644
--- a/src/cmds.c
+++ b/src/cmds.c
@@ -1,6 +1,6 @@
 /* Simple built-in editing commands.
 
-Copyright (C) 1985, 1993-1998, 2001-2021 Free Software Foundation, Inc.
+Copyright (C) 1985, 1993-1998, 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/coding.c b/src/coding.c
index 02dccf5bdb..df6c423caa 100644
--- a/src/coding.c
+++ b/src/coding.c
@@ -1,5 +1,5 @@
 /* Coding system handler (conversion, detection, etc).
-   Copyright (C) 2001-2021 Free Software Foundation, Inc.
+   Copyright (C) 2001-2022 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)
@@ -9454,8 +9454,9 @@ code_convert_region (Lisp_Object start, Lisp_Object end,
 
 DEFUN ("decode-coding-region", Fdecode_coding_region, Sdecode_coding_region,
        3, 4, "r\nzCoding system: ",
-       doc: /* Decode the current region from the specified coding system.
-Interactively, prompt for the coding system to decode the region.
+       doc: /* Decode the current region using the specified coding system.
+Interactively, prompt for the coding system to decode the region, and
+replace the region with the decoded text.
 
 \"Decoding\" means transforming bytes into readable text (characters).
 If, for instance, you have a region that contains data that represents
@@ -9485,7 +9486,9 @@ not fully specified.)  */)
 
 DEFUN ("encode-coding-region", Fencode_coding_region, Sencode_coding_region,
        3, 4, "r\nzCoding system: ",
-       doc: /* Encode the current region by specified coding system.
+       doc: /* Encode the current region using th specified coding system.
+Interactively, prompt for the coding system to encode the region, and
+replace the region with the bytes that are the result of the encoding.
 
 What's meant by \"encoding\" is transforming textual data (characters)
 into bytes.  If, for instance, you have a region that contains the
diff --git a/src/coding.h b/src/coding.h
index d06bed3f5d..d86c17d18b 100644
--- a/src/coding.h
+++ b/src/coding.h
@@ -1,5 +1,5 @@
 /* Header for coding system handler.
-   Copyright (C) 2001-2021 Free Software Foundation, Inc.
+   Copyright (C) 2001-2022 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 2205ebf7d3..6cc3e78de0 100644
--- a/src/commands.h
+++ b/src/commands.h
@@ -1,5 +1,5 @@
 /* Definitions needed by most editing commands.
-   Copyright (C) 1985, 1994, 2001-2021 Free Software Foundation, Inc.
+   Copyright (C) 1985, 1994, 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/comp.c b/src/comp.c
index 73555c0d2c..9abc5d9690 100644
--- a/src/comp.c
+++ b/src/comp.c
@@ -1,5 +1,5 @@
 /* Compile Emacs Lisp into native code.
-   Copyright (C) 2019-2021 Free Software Foundation, Inc.
+   Copyright (C) 2019-2022 Free Software Foundation, Inc.
 
 Author: Andrea Corallo <akrl@sdf.org>
 
@@ -5069,10 +5069,6 @@ register_native_comp_unit (Lisp_Object comp_u)
 /* Deferred compilation mechanism. */
 /***********************************/
 
-/* List of sources we'll compile and load after having conventionally
-   loaded the compiler and its dependencies.  */
-static Lisp_Object delayed_sources;
-
 /* Queue an asynchronous compilation for the source file defining
    FUNCTION_NAME and perform a late load.
 
@@ -5129,30 +5125,16 @@ maybe_defer_native_compilation (Lisp_Object 
function_name,
 
   /* This is so deferred compilation is able to compile comp
      dependencies breaking circularity.  */
-  if (!NILP (Ffeaturep (Qcomp, Qnil)))
+  if (comp__loadable)
     {
-      /* Comp already loaded.  */
-      if (!NILP (delayed_sources))
-       {
-         CALLN (Ffuncall, intern_c_string ("native--compile-async"),
-                delayed_sources, Qnil, Qlate);
-         delayed_sources = Qnil;
-       }
+      /* Startup is done, comp is usable.  */
+      Frequire (Qcomp, Qnil, Qnil);
       Fputhash (function_name, definition, Vcomp_deferred_pending_h);
       CALLN (Ffuncall, intern_c_string ("native--compile-async"),
             src, Qnil, Qlate);
     }
   else
-    {
-      delayed_sources = Fcons (src, delayed_sources);
-      /* Require comp only once.  */
-      static bool comp_required = false;
-      if (!comp_required)
-       {
-         comp_required = true;
-         Frequire (Qcomp, Qnil, Qnil);
-       }
-    }
+    Vcomp__delayed_sources = Fcons (src, Vcomp__delayed_sources);
 }
 
 
@@ -5441,21 +5423,29 @@ make_subr (Lisp_Object symbol_name, Lisp_Object minarg, 
Lisp_Object maxarg,
   if (CONSP (minarg))
     {
       /* Dynamic code.  */
-      x->s.lambda_list[0] = maxarg;
+#ifdef HAVE_NATIVE_COMP
+      x->s.lambda_list = maxarg;
+#endif
       maxarg = XCDR (minarg);
       minarg = XCAR (minarg);
     }
   else
-    x->s.lambda_list[0] = Qnil;
+    {
+#ifdef HAVE_NATIVE_COMP
+      x->s.lambda_list = Qnil;
+#endif
+    }
   x->s.function.a0 = func;
   x->s.min_args = XFIXNUM (minarg);
   x->s.max_args = FIXNUMP (maxarg) ? XFIXNUM (maxarg) : MANY;
   x->s.symbol_name = xstrdup (SSDATA (symbol_name));
   x->s.native_intspec = intspec;
   x->s.doc = XFIXNUM (doc_idx);
-  x->s.native_comp_u[0] = comp_u;
-  x->s.native_c_name[0] = xstrdup (SSDATA (c_name));
-  x->s.type[0] = type;
+#ifdef HAVE_NATIVE_COMP
+  x->s.native_comp_u = comp_u;
+  x->s.native_c_name = xstrdup (SSDATA (c_name));
+  x->s.type = type;
+#endif
   Lisp_Object tem;
   XSETSUBR (tem, &x->s);
 
@@ -5575,16 +5565,16 @@ LATE_LOAD has to be non-nil when loading for deferred 
compilation.  */)
        Fmake_temp_file_internal (filename, Qnil, build_string (".eln.tmp"),
                                  Qnil);
       if (NILP (Ffile_writable_p (tmp_filename)))
-       comp_u->handle = dynlib_open (SSDATA (encoded_filename));
+       comp_u->handle = dynlib_open_for_eln (SSDATA (encoded_filename));
       else
        {
          Frename_file (filename, tmp_filename, Qt);
-         comp_u->handle = dynlib_open (SSDATA (ENCODE_FILE (tmp_filename)));
+         comp_u->handle = dynlib_open_for_eln (SSDATA (ENCODE_FILE 
(tmp_filename)));
          Frename_file (tmp_filename, filename, Qnil);
        }
     }
   else
-    comp_u->handle = dynlib_open (SSDATA (encoded_filename));
+    comp_u->handle = dynlib_open_for_eln (SSDATA (encoded_filename));
 
   if (!comp_u->handle)
     xsignal2 (Qnative_lisp_load_failed, filename,
@@ -5615,6 +5605,13 @@ void
 syms_of_comp (void)
 {
 #ifdef HAVE_NATIVE_COMP
+  DEFVAR_LISP ("comp--delayed-sources", Vcomp__delayed_sources,
+              doc: /* List of sources to be native-compiled when startup is 
finished.
+For internal use.  */);
+  DEFVAR_BOOL ("comp--loadable",
+              comp__loadable,
+              doc: /* Non-nil when comp.el can be loaded.
+For internal use. */);
   /* Compiler control customizes.  */
   DEFVAR_BOOL ("native-comp-deferred-compilation",
               native_comp_deferred_compilation,
@@ -5756,8 +5753,6 @@ compiled one.  */);
   staticpro (&comp.func_blocks_h);
   staticpro (&comp.emitter_dispatcher);
   comp.emitter_dispatcher = Qnil;
-  staticpro (&delayed_sources);
-  delayed_sources = Qnil;
   staticpro (&loadsearch_re_list);
   loadsearch_re_list = Qnil;
 
@@ -5814,9 +5809,9 @@ protect the trampolines against GC.  */);
   Vcomp_installed_trampolines_h = CALLN (Fmake_hash_table);
 
   DEFVAR_LISP ("comp-no-native-file-h", V_comp_no_native_file_h,
-              doc: /* Files for which no deferred compilation has to
-be performed because the bytecode version was explicitly requested by
-the user during load.
+              doc: /* Files for which no deferred compilation has to be 
performed.
+These files' compilation should not be deferred because the bytecode
+version was explicitly requested by the user during load.
 For internal use.  */);
   V_comp_no_native_file_h = CALLN (Fmake_hash_table, QCtest, Qequal);
 
diff --git a/src/comp.h b/src/comp.h
index c4af4193d0..40f1e9b979 100644
--- a/src/comp.h
+++ b/src/comp.h
@@ -1,6 +1,6 @@
 /* Elisp native compiler definitions
 
-Copyright (C) 2019-2021 Free Software Foundation, Inc.
+Copyright (C) 2019-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -20,16 +20,6 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 #ifndef COMP_H
 #define COMP_H
 
-/* To keep ifdefs under control.  */
-enum {
-  NATIVE_COMP_FLAG =
-#ifdef HAVE_NATIVE_COMP
-  1
-#else
-  0
-#endif
-};
-
 #include <dynlib.h>
 
 struct Lisp_Native_Comp_Unit
diff --git a/src/composite.c b/src/composite.c
index c170805d9d..711284ba6f 100644
--- a/src/composite.c
+++ b/src/composite.c
@@ -1,5 +1,5 @@
 /* Composite sequence support.
-   Copyright (C) 2001-2021 Free Software Foundation, Inc.
+   Copyright (C) 2001-2022 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 945f261291..d77dd0d506 100644
--- a/src/composite.h
+++ b/src/composite.h
@@ -1,5 +1,5 @@
 /* Header for composite sequence handler.
-   Copyright (C) 2001-2021 Free Software Foundation, Inc.
+   Copyright (C) 2001-2022 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 2c6fbb0dba..6db76a2dfa 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-2021 Free Software
+Copyright (C) 1988, 1993-1994, 1999-2002, 2004-2022 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/cygw32.c b/src/cygw32.c
index b11d94d3a6..1b43de2c05 100644
--- a/src/cygw32.c
+++ b/src/cygw32.c
@@ -1,5 +1,5 @@
 /* Cygwin support routines.
-   Copyright (C) 2011-2021 Free Software Foundation, Inc.
+   Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/cygw32.h b/src/cygw32.h
index 19cb77539b..fe1f6da11a 100644
--- a/src/cygw32.h
+++ b/src/cygw32.h
@@ -1,5 +1,5 @@
 /* Header for Cygwin support routines.
-   Copyright (C) 2011-2021 Free Software Foundation, Inc.
+   Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/data.c b/src/data.c
index 6d9c0aef93..e999cee242 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-2021 Free Software
+   Copyright (C) 1985-1986, 1988, 1993-1995, 1997-2022 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -260,6 +260,8 @@ for example, (type-of 1) returns `integer'.  */)
           return Qxwidget;
         case PVEC_XWIDGET_VIEW:
           return Qxwidget_view;
+        case PVEC_SQLITE:
+          return Qsqlite;
         /* "Impossible" cases.  */
        case PVEC_MISC_PTR:
         case PVEC_OTHER:
@@ -968,9 +970,11 @@ function or t otherwise.  */)
 {
   CHECK_SUBR (subr);
 
-  return SUBR_NATIVE_COMPILED_DYNP (subr)
-    ? XSUBR (subr)->lambda_list[0]
-    : Qt;
+#ifdef HAVE_NATIVE_COMP
+  if (SUBR_NATIVE_COMPILED_DYNP (subr))
+    return XSUBR (subr)->lambda_list;
+#endif
+  return Qt;
 }
 
 DEFUN ("subr-type", Fsubr_type,
@@ -994,7 +998,7 @@ DEFUN ("subr-native-comp-unit", Fsubr_native_comp_unit,
   (Lisp_Object subr)
 {
   CHECK_SUBR (subr);
-  return XSUBR (subr)->native_comp_u[0];
+  return XSUBR (subr)->native_comp_u;
 }
 
 DEFUN ("native-comp-unit-file", Fnative_comp_unit_file,
diff --git a/src/dbusbind.c b/src/dbusbind.c
index c005474d44..7cfdbbe23c 100644
--- a/src/dbusbind.c
+++ b/src/dbusbind.c
@@ -1,5 +1,5 @@
 /* Elisp bindings for D-Bus.
-   Copyright (C) 2007-2021 Free Software Foundation, Inc.
+   Copyright (C) 2007-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/decompress.c b/src/decompress.c
index 17224f6123..60f8bfd6a2 100644
--- a/src/decompress.c
+++ b/src/decompress.c
@@ -1,5 +1,5 @@
 /* Interface to zlib.
-   Copyright (C) 2013-2021 Free Software Foundation, Inc.
+   Copyright (C) 2013-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/deps.mk b/src/deps.mk
index eda2ed6338..deffab93ec 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-2021 Free Software
+## Copyright (C) 1985, 1987-1988, 1993-1995, 1999-2022 Free Software
 ## Foundation, Inc.
 
 ## This file is part of GNU Emacs.
diff --git a/src/dired.c b/src/dired.c
index ebcf77bc26..7fb54f2f67 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-2021 Free Software
+   Copyright (C) 1985-1986, 1993-1994, 1999-2022 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/dispextern.h b/src/dispextern.h
index ff4e7293d8..368507732c 100644
--- a/src/dispextern.h
+++ b/src/dispextern.h
@@ -1,6 +1,6 @@
 /* Interface definitions for display code.
 
-Copyright (C) 1985, 1993-1994, 1997-2021 Free Software Foundation, Inc.
+Copyright (C) 1985, 1993-1994, 1997-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -123,17 +123,20 @@ typedef HDC Emacs_Pix_Context;
 
 #ifdef HAVE_NS
 #include "nsgui.h"
-#define FACE_COLOR_TO_PIXEL(face_color, frame) (FRAME_NS_P (frame) \
-                                                ? ns_color_index_to_rgba 
(face_color, frame) \
-                                                : face_color)
 /* Following typedef needed to accommodate the MSDOS port, believe it or not.  
*/
 typedef struct ns_display_info Display_Info;
 typedef Emacs_Pixmap Emacs_Pix_Container;
 typedef Emacs_Pixmap Emacs_Pix_Context;
-#else
-#define FACE_COLOR_TO_PIXEL(face_color, frame) face_color
 #endif
 
+#ifdef HAVE_PGTK
+#include "pgtkgui.h"
+/* Following typedef needed to accommodate the MSDOS port, believe it or not.  
*/
+typedef struct pgtk_display_info Display_Info;
+typedef Emacs_Pixmap XImagePtr;
+typedef XImagePtr XImagePtr_or_DC;
+#endif /* HAVE_PGTK */
+
 #ifdef HAVE_HAIKU
 #include "haikugui.h"
 typedef struct haiku_display_info Display_Info;
@@ -1400,6 +1403,9 @@ struct glyph_string
   Emacs_GC *gc;
   HDC hdc;
 #endif
+#if defined (HAVE_PGTK)
+  Emacs_GC xgcv;
+#endif
 
   /* A pointer to the first glyph in the string.  This glyph
      corresponds to char2b[0].  Needed to draw rectangles if
@@ -1714,6 +1720,12 @@ struct face
   int box_vertical_line_width;
   int box_horizontal_line_width;
 
+
+  /* The amount of pixels above the descent line the underline should
+     be displayed.  It does not take effect unless
+     `underline_at_descent_line_p` is t.  */
+  int underline_pixels_above_descent_line;
+
   /* Type of box drawn.  A value of FACE_NO_BOX means no box is drawn
      around text in this face.  A value of FACE_SIMPLE_BOX means a box
      of width box_line_width is drawn in color box_color.  A value of
@@ -1747,6 +1759,9 @@ struct face
   bool_bf strike_through_color_defaulted_p : 1;
   bool_bf box_color_defaulted_p : 1;
 
+  /* True means the underline should be drawn at the descent line.  */
+  bool_bf underline_at_descent_line_p : 1;
+
   /* TTY appearances.  Colors are found in `lface' with empty color
      string meaning the default color of the TTY.  */
   bool_bf tty_bold_p : 1;
diff --git a/src/dispnew.c b/src/dispnew.c
index f3f110a8f2..6337bcf130 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-2021 Free Software Foundation,
+Copyright (C) 1985-1988, 1993-1995, 1997-2022 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
@@ -1034,7 +1034,7 @@ copy_row_except_pointers (struct glyph_row *to, struct 
glyph_row *from)
 {
   enum { off = offsetof (struct glyph_row, x) };
 
-  memcpy (&to->x, &from->x, sizeof *to - off);
+  memcpy ((char *) to + off, (char *) from + off, sizeof *to - off);
 }
 
 
@@ -6453,6 +6453,15 @@ init_display_interactive (void)
     }
 #endif
 
+#ifdef HAVE_PGTK
+  if (!inhibit_window_system && !will_dump_p ())
+    {
+      Vinitial_window_system = Qpgtk;
+      Vwindow_system_version = make_fixnum (3);
+      return;
+    }
+#endif
+
 #ifdef HAVE_HAIKU
   if (!inhibit_window_system && !will_dump_p ())
     {
@@ -6653,6 +6662,8 @@ The value is a symbol:
  `w32' for an Emacs frame that is a window on MS-Windows display,
  `ns' for an Emacs frame on a GNUstep or Macintosh Cocoa display,
  `pc' for a direct-write MS-DOS frame.
+ `pgtk' for an Emacs frame using pure GTK facilities.
+ `haiku' for an Emacs frame running in Haiku.
 
 Use of this variable as a boolean is deprecated.  Instead,
 use `display-graphic-p' or any of the other `display-*-p'
@@ -6666,6 +6677,8 @@ The value is a symbol:
  `w32' for an Emacs frame that is a window on MS-Windows display,
  `ns' for an Emacs frame on a GNUstep or Macintosh Cocoa display,
  `pc' for a direct-write MS-DOS frame.
+ `pgtk' for an Emacs frame using pure GTK facilities.
+ `haiku' for an Emacs frame running in Haiku.
 
 Use of this variable as a boolean is deprecated.  Instead,
 use `display-graphic-p' or any of the other `display-*-p'
diff --git a/src/disptab.h b/src/disptab.h
index adf411b805..49764727f8 100644
--- a/src/disptab.h
+++ b/src/disptab.h
@@ -1,5 +1,5 @@
 /* Things for GLYPHS and glyph tables.
-   Copyright (C) 1993, 2001-2021 Free Software Foundation, Inc.
+   Copyright (C) 1993, 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/dmpstruct.awk b/src/dmpstruct.awk
index c7b93da3bc..b40d2979d5 100644
--- a/src/dmpstruct.awk
+++ b/src/dmpstruct.awk
@@ -1,4 +1,4 @@
-# Copyright (C) 2018-2021 Free Software Foundation, Inc.
+# Copyright (C) 2018-2022 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/src/doc.c b/src/doc.c
index 6be023bb93..0b12eb154d 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-2021 Free Software Foundation,
+Copyright (C) 1985-1986, 1993-1995, 1997-2022 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
@@ -84,16 +84,19 @@ get_doc_string (Lisp_Object filepos, bool unibyte, bool 
definition)
   char *from, *to, *name, *p, *p1;
   Lisp_Object file, pos;
   ptrdiff_t count = SPECPDL_INDEX ();
+  Lisp_Object dir;
   USE_SAFE_ALLOCA;
 
   if (FIXNUMP (filepos))
     {
       file = Vdoc_file_name;
+      dir = Vdoc_directory;
       pos = filepos;
     }
   else if (CONSP (filepos))
     {
       file = XCAR (filepos);
+      dir = Fsymbol_value (Qlisp_directory);
       pos = XCDR (filepos);
     }
   else
@@ -101,7 +104,7 @@ get_doc_string (Lisp_Object filepos, bool unibyte, bool 
definition)
 
   EMACS_INT position = eabs (XFIXNUM (pos));
 
-  if (!STRINGP (Vdoc_directory))
+  if (!STRINGP (dir))
     return Qnil;
 
   if (!STRINGP (file))
@@ -113,7 +116,7 @@ get_doc_string (Lisp_Object filepos, bool unibyte, bool 
definition)
   Lisp_Object tem = Ffile_name_absolute_p (file);
   file = ENCODE_FILE (file);
   Lisp_Object docdir
-    = NILP (tem) ? ENCODE_FILE (Vdoc_directory) : empty_unibyte_string;
+    = NILP (tem) ? ENCODE_FILE (dir) : empty_unibyte_string;
   ptrdiff_t docdir_sizemax = SBYTES (docdir) + 1;
   if (will_dump_p ())
     docdir_sizemax = max (docdir_sizemax, sizeof sibling_etc);
@@ -703,6 +706,7 @@ See variable `text-quoting-style'.  */)
 void
 syms_of_doc (void)
 {
+  DEFSYM (Qlisp_directory, "lisp-directory");
   DEFSYM (Qsubstitute_command_keys, "substitute-command-keys");
   DEFSYM (Qfunction_documentation, "function-documentation");
   DEFSYM (Qgrave, "grave");
diff --git a/src/doprnt.c b/src/doprnt.c
index fe484b8e76..19f58d0844 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1985, 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/dosfns.c b/src/dosfns.c
index 10023c8c7f..e9792cbb82 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-2021 Free Software
+   Copyright (C) 1991, 1993, 1996-1998, 2001-2022 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -58,8 +58,8 @@ DEFUN ("int86", Fint86, Sint86, 2, 2, 0,
 Return the updated REGISTER vector.
 
 INTERRUPT should be an integer in the range 0 to 255.
-REGISTERS should be a vector produced by `make-register' and
-`set-register-value'.  */)
+REGISTERS should be a vector produced by `dos-make-register' and
+`dos-set-register-value'.  */)
   (Lisp_Object interrupt, Lisp_Object registers)
 {
   register int i;
diff --git a/src/dosfns.h b/src/dosfns.h
index 6ad2a03470..1115a9c726 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-2021 Free Software
+Copyright (C) 1991, 1994-1995, 1997, 1999, 2001-2022 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/dynlib.c b/src/dynlib.c
index a8c8843961..8cb9a23374 100644
--- a/src/dynlib.c
+++ b/src/dynlib.c
@@ -1,6 +1,6 @@
 /* Portable API for dynamic loading.
 
-Copyright 2015-2021 Free Software Foundation, Inc.
+Copyright 2015-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -104,6 +104,12 @@ dynlib_open (const char *dll_fname)
   return (dynlib_handle_ptr) hdll;
 }
 
+dynlib_handle_ptr
+dynlib_open_for_eln (const char *dll_fname)
+{
+  return dynlib_open (dll_fname);
+}
+
 void *
 dynlib_sym (dynlib_handle_ptr h, const char *sym)
 {
@@ -269,6 +275,12 @@ dynlib_close (dynlib_handle_ptr h)
 
 dynlib_handle_ptr
 dynlib_open (const char *path)
+{
+  return dlopen (path, RTLD_LAZY | RTLD_GLOBAL);
+}
+
+dynlib_handle_ptr
+dynlib_open_for_eln (const char *path)
 {
   return dlopen (path, RTLD_LAZY);
 }
diff --git a/src/dynlib.h b/src/dynlib.h
index e20d8891a2..ac3d8e58ab 100644
--- a/src/dynlib.h
+++ b/src/dynlib.h
@@ -1,6 +1,6 @@
 /* Portable API for dynamic loading.
 
-Copyright 2015-2021 Free Software Foundation, Inc.
+Copyright 2015-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -24,6 +24,7 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 
 typedef void *dynlib_handle_ptr;
 dynlib_handle_ptr dynlib_open (const char *path);
+dynlib_handle_ptr dynlib_open_for_eln (const char *path);
 int dynlib_close (dynlib_handle_ptr h);
 const char *dynlib_error (void);
 
diff --git a/src/editfns.c b/src/editfns.c
index c8219decb0..790f66e3a0 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -1,6 +1,6 @@
 /* Lisp functions pertaining to editing.                 -*- coding: utf-8 -*-
 
-Copyright (C) 1985-1987, 1989, 1993-2021 Free Software Foundation, Inc.
+Copyright (C) 1985-1987, 1989, 1993-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -1233,7 +1233,11 @@ return "unknown".
 If optional argument UID is an integer, return the full name
 of the user with that uid, or nil if there is no such user.
 If UID is a string, return the full name of the user with that login
-name, or nil if there is no such user.  */)
+name, or nil if there is no such user.
+
+If the full name includes commas, remove everything starting with
+the first comma, because the \\='gecos\\=' field of the \\='/etc/passwd\\=' 
file
+is in general a comma-separated list.  */)
   (Lisp_Object uid)
 {
   struct passwd *pw;
@@ -1263,7 +1267,8 @@ name, or nil if there is no such user.  */)
     return Qnil;
 
   p = USER_FULL_NAME;
-  /* Chop off everything after the first comma. */
+  /* Chop off everything after the first comma, since 'pw_gecos' is a
+     comma-separated list. */
   q = strchr (p, ',');
   full = make_string (p, q ? q - p : strlen (p));
 
@@ -4265,9 +4270,6 @@ ring.  */)
      enough to use as the temporary storage?  That would avoid an
      allocation... interesting.  Later, don't fool with it now.  */
 
-  /* Working without memmove, for portability (sigh), so must be
-     careful of overlapping subsections of the array...  */
-
   if (end1 == start2)          /* adjacent regions */
     {
       modify_text (start1, end2);
diff --git a/src/emacs-icon.h b/src/emacs-icon.h
index 87790bbc29..1c7bb7f884 100644
--- a/src/emacs-icon.h
+++ b/src/emacs-icon.h
@@ -1,7 +1,7 @@
 /* XPM */
 /* Emacs icon
 
-Copyright (C) 2008-2021 Free Software Foundation, Inc.
+Copyright (C) 2008-2022 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 f8fb54c072..392b3ba965 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2015-2022 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 a56e4dd12a..6642b55d93 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2015-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/emacs.c b/src/emacs.c
index 4734faf33c..f6e2c01ee7 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-2021 Free Software
+Copyright (C) 1985-1987, 1993-1995, 1997-1999, 2001-2022 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -875,9 +875,14 @@ load_pdump (int argc, char **argv)
     }
 
   /* Where's our executable?  */
-  ptrdiff_t bufsize, exec_bufsize;
+  ptrdiff_t bufsize;
+#ifndef NS_SELF_CONTAINED
+  ptrdiff_t exec_bufsize;
+#endif
   emacs_executable = load_pdump_find_executable (argv[0], &bufsize);
+#ifndef NS_SELF_CONTAINED
   exec_bufsize = bufsize;
+#endif
 
   /* If we couldn't find our executable, go straight to looking for
      the dump in the hardcoded location.  */
@@ -1909,6 +1914,9 @@ Using an Emacs configured with --with-x-toolkit=lucid 
does not have this problem
   init_bignum ();
   init_threads ();
   init_eval ();
+#ifdef HAVE_PGTK
+  init_pgtkterm ();   /* before init_atimer(). */
+#endif
   running_asynch_code = 0;
   init_random ();
 
@@ -2183,6 +2191,7 @@ Using an Emacs configured with --with-x-toolkit=lucid 
does not have this problem
 #endif
       syms_of_window ();
       syms_of_xdisp ();
+      syms_of_sqlite ();
       syms_of_font ();
 #ifdef HAVE_WINDOW_SYSTEM
       syms_of_fringe ();
@@ -2244,6 +2253,15 @@ Using an Emacs configured with --with-x-toolkit=lucid 
does not have this problem
       syms_of_fontset ();
 #endif /* HAVE_NS */
 
+#ifdef HAVE_PGTK
+      syms_of_pgtkterm ();
+      syms_of_pgtkfns ();
+      syms_of_pgtkselect ();
+      syms_of_pgtkmenu ();
+      syms_of_pgtkim ();
+      syms_of_fontset ();
+      syms_of_xsettings ();
+#endif /* HAVE_PGTK */
 #ifdef HAVE_HAIKU
       syms_of_haikuterm ();
       syms_of_haikufns ();
@@ -2327,7 +2345,7 @@ Using an Emacs configured with --with-x-toolkit=lucid 
does not have this problem
 #ifdef HAVE_DBUS
   init_dbusbind ();
 #endif
-#ifdef USE_GTK
+#if defined(USE_GTK) && !defined(HAVE_PGTK)
   init_xterm ();
 #endif
 
diff --git a/src/emacsgtkfixed.c b/src/emacsgtkfixed.c
index 1f5b0947e5..da56031e2a 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -22,8 +22,11 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 
 #include "lisp.h"
 #include "frame.h"
+#ifdef HAVE_PGTK
+#include "pgtkterm.h"
+#else
 #include "xterm.h"
-#include "xwidget.h"
+#endif
 #include "emacsgtkfixed.h"
 
 /* Silence a bogus diagnostic; see GNOME bug 683906.  */
@@ -47,7 +50,9 @@ static void emacs_fixed_get_preferred_width  (GtkWidget 
*widget,
 static void emacs_fixed_get_preferred_height (GtkWidget *widget,
                                               gint      *minimum,
                                               gint      *natural);
+#ifndef HAVE_PGTK
 static GType emacs_fixed_get_type (void);
+#endif
 G_DEFINE_TYPE (EmacsFixed, emacs_fixed, GTK_TYPE_FIXED)
 
 static EmacsFixed *
@@ -93,9 +98,15 @@ emacs_fixed_get_preferred_width (GtkWidget *widget,
 {
   EmacsFixed *fixed = EMACS_FIXED (widget);
   EmacsFixedPrivate *priv = fixed->priv;
+#ifdef HAVE_PGTK
+  int w = priv->f->output_data.pgtk->size_hints.min_width;
+  if (minimum) *minimum = w;
+  if (natural) *natural = priv->f->output_data.pgtk->preferred_width;
+#else
   int w = priv->f->output_data.x->size_hints.min_width;
   if (minimum) *minimum = w;
   if (natural) *natural = w;
+#endif
 }
 
 static void
@@ -105,12 +116,20 @@ emacs_fixed_get_preferred_height (GtkWidget *widget,
 {
   EmacsFixed *fixed = EMACS_FIXED (widget);
   EmacsFixedPrivate *priv = fixed->priv;
+#ifdef HAVE_PGTK
+  int h = priv->f->output_data.pgtk->size_hints.min_height;
+  if (minimum) *minimum = h;
+  if (natural) *natural = priv->f->output_data.pgtk->preferred_height;
+#else
   int h = priv->f->output_data.x->size_hints.min_height;
   if (minimum) *minimum = h;
   if (natural) *natural = h;
+#endif
 }
 
 
+#ifndef HAVE_PGTK
+
 /* Override the X function so we can intercept Gtk+ 3 calls.
    Use our values for min_width/height so that KDE don't freak out
    (Bug#8919), and so users can resize our frames as they wish.  */
@@ -145,8 +164,13 @@ XSetWMSizeHints (Display *d,
 
   if ((hints->flags & PMinSize) && f)
     {
+#ifdef HAVE_PGTK
+      int w = f->output_data.pgtk->size_hints.min_width;
+      int h = f->output_data.pgtk->size_hints.min_height;
+#else
       int w = f->output_data.x->size_hints.min_width;
       int h = f->output_data.x->size_hints.min_height;
+#endif
       data[5] = w;
       data[6] = h;
     }
@@ -164,3 +188,5 @@ XSetWMNormalHints (Display *d, Window w, XSizeHints *hints)
 {
   XSetWMSizeHints (d, w, hints, XA_WM_NORMAL_HINTS);
 }
+
+#endif
diff --git a/src/emacsgtkfixed.h b/src/emacsgtkfixed.h
index 78879764d8..af5e22e6f4 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -27,6 +27,11 @@ struct frame;
 
 G_BEGIN_DECLS
 
+#ifdef HAVE_PGTK
+#define EMACS_TYPE_FIXED        (emacs_fixed_get_type ())
+#define EMACS_IS_FIXED(obj)     (G_TYPE_CHECK_INSTANCE_TYPE ((obj), 
EMACS_TYPE_FIXED))
+#endif
+
 struct frame;
 
 typedef struct _EmacsFixedPrivate       EmacsFixedPrivate;
@@ -44,6 +49,10 @@ struct _EmacsFixedClass
   GtkFixedClass parent_class;
 };
 
+#ifdef HAVE_PGTK
+extern GType emacs_fixed_get_type (void);
+#endif
+
 extern GtkWidget *emacs_fixed_new (struct frame *f);
 
 G_END_DECLS
diff --git a/src/epaths.in b/src/epaths.in
index 0c72610c6c..2eccd0ac60 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-2021 Free Software
+Copyright (C) 1993, 1995, 1997, 1999, 2001-2022 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/eval.c b/src/eval.c
index 5cb673ab22..6a8c759c1d 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-2021 Free Software Foundation,
+Copyright (C) 1985-1987, 1993-1995, 1999-2022 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
@@ -220,17 +220,14 @@ void
 init_eval_once (void)
 {
   /* Don't forget to update docs (lispref node "Local Variables").  */
-  if (!NATIVE_COMP_FLAG)
-    {
-      max_specpdl_size = 1800; /* See bug#46818.  */
-      max_lisp_eval_depth = 800;
-    }
-  else
-    {
-      /* Original values increased for comp.el.  */
-      max_specpdl_size = 2500;
-      max_lisp_eval_depth = 1600;
-    }
+#ifndef HAVE_NATIVE_COMP
+  max_specpdl_size = 1800; /* See bug#46818.  */
+  max_lisp_eval_depth = 800;
+#else
+  /* Original values increased for comp.el.  */
+  max_specpdl_size = 2500;
+  max_lisp_eval_depth = 1600;
+#endif
   Vrun_hooks = Qnil;
   pdumper_do_now_and_after_load (init_eval_once_for_pdumper);
 }
@@ -2610,6 +2607,19 @@ eval_sub (Lisp_Object form)
             interpreted using lexical-binding or not.  */
          specbind (Qlexical_binding,
                    NILP (Vinternal_interpreter_environment) ? Qnil : Qt);
+
+         /* Make the macro aware of any defvar declarations in scope. */
+         Lisp_Object dynvars = Vmacroexp__dynvars;
+         for (Lisp_Object p = Vinternal_interpreter_environment;
+              !NILP (p); p = XCDR(p))
+           {
+             Lisp_Object e = XCAR (p);
+             if (SYMBOLP (e))
+               dynvars = Fcons(e, dynvars);
+           }
+         if (!EQ (dynvars, Vmacroexp__dynvars))
+           specbind (Qmacroexp__dynvars, dynvars);
+
          exp = apply1 (Fcdr (fun), original_args);
          exp = unbind_to (count1, exp);
          val = eval_sub (exp);
@@ -3277,11 +3287,13 @@ funcall_lambda (Lisp_Object fun, ptrdiff_t nargs,
   else if (MODULE_FUNCTIONP (fun))
     return funcall_module (fun, nargs, arg_vector);
 #endif
+#ifdef HAVE_NATIVE_COMP
   else if (SUBR_NATIVE_COMPILED_DYNP (fun))
     {
-      syms_left = XSUBR (fun)->lambda_list[0];
+      syms_left = XSUBR (fun)->lambda_list;
       lexenv = Qnil;
     }
+#endif
   else
     emacs_abort ();
 
@@ -4581,5 +4593,6 @@ alist of active lexical bindings.  */);
   defsubr (&Sbacktrace_eval);
   defsubr (&Sbacktrace__locals);
   defsubr (&Sspecial_variable_p);
+  DEFSYM (Qfunctionp, "functionp");
   defsubr (&Sfunctionp);
 }
diff --git a/src/fileio.c b/src/fileio.c
index 859b30564a..9c50cbb35a 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -1,6 +1,6 @@
 /* File IO for GNU Emacs.
 
-Copyright (C) 1985-1988, 1993-2021 Free Software Foundation, Inc.
+Copyright (C) 1985-1988, 1993-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -195,7 +195,11 @@ get_file_errno_data (char const *string, Lisp_Object name, 
int errorno)
   if (errorno == EEXIST)
     return Fcons (Qfile_already_exists, errdata);
   else
-    return Fcons (errorno == ENOENT ? Qfile_missing : Qfile_error,
+    return Fcons (errorno == ENOENT
+                 ? Qfile_missing
+                 : (errorno == EACCES
+                    ? Qpermission_denied
+                    : Qfile_error),
                  Fcons (build_string (string), errdata));
 }
 
@@ -2286,6 +2290,7 @@ permissions.  */)
       off_t insize = st.st_size;
       ssize_t copied;
 
+#ifndef MSDOS
       for (newsize = 0; newsize < insize; newsize += copied)
        {
          /* Copy at most COPY_MAX bytes at a time; this is min
@@ -2300,6 +2305,7 @@ permissions.  */)
            break;
          maybe_quit ();
        }
+#endif /* MSDOS */
 
       /* Fall back on read+write if copy_file_range failed, or if the
         input is empty and so could be a /proc file.  read+write will
@@ -2386,7 +2392,9 @@ permissions.  */)
 
   if (!NILP (keep_time))
     {
-      struct timespec ts[] = { get_stat_atime (&st), get_stat_mtime (&st) };
+      struct timespec ts[2];
+      ts[0] = get_stat_atime (&st);
+      ts[1] = get_stat_mtime (&st);
       if (futimens (ofd, ts) != 0)
        xsignal2 (Qfile_date_error,
                  build_string ("Cannot set file date"), newname);
@@ -6376,6 +6384,7 @@ syms_of_fileio (void)
   DEFSYM (Qfile_already_exists, "file-already-exists");
   DEFSYM (Qfile_date_error, "file-date-error");
   DEFSYM (Qfile_missing, "file-missing");
+  DEFSYM (Qpermission_denied, "permission-denied");
   DEFSYM (Qfile_notify_error, "file-notify-error");
   DEFSYM (Qremote_file_error, "remote-file-error");
   DEFSYM (Qexcl, "excl");
@@ -6434,6 +6443,11 @@ behaves as if file names were encoded in `utf-8'.  */);
   Fput (Qfile_missing, Qerror_message,
        build_pure_c_string ("File is missing"));
 
+  Fput (Qpermission_denied, Qerror_conditions,
+       Fpurecopy (list3 (Qpermission_denied, Qfile_error, Qerror)));
+  Fput (Qpermission_denied, Qerror_message,
+       build_pure_c_string ("Cannot access file or directory"));
+
   Fput (Qfile_notify_error, Qerror_conditions,
        Fpurecopy (list3 (Qfile_notify_error, Qfile_error, Qerror)));
   Fput (Qfile_notify_error, Qerror_message,
diff --git a/src/filelock.c b/src/filelock.c
index c12776246b..eb8d9ab5e0 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-2021 Free Software
+Copyright (C) 1985-1987, 1993-1994, 1996, 1998-2022 Free Software
 Foundation, Inc.
 
 Author: Richard King
@@ -490,15 +490,29 @@ read_lock_data (char *lfname, char lfinfo[MAX_LFINFO + 1])
   return nbytes;
 }
 
+/* True if errno values are negative.  Although the C standard
+   requires them to be positive, they are negative in Haiku.  */
+enum { NEGATIVE_ERRNO = EDOM < 0 };
+
+/* Nonzero values that are not errno values.  */
+enum
+  {
+    /* Another process on this machine owns it.  */
+    ANOTHER_OWNS_IT = NEGATIVE_ERRNO ? 1 : -1,
+
+    /* This Emacs process owns it.  */
+    I_OWN_IT = 2 * ANOTHER_OWNS_IT
+  };
+
 /* Return 0 if nobody owns the lock file LFNAME or the lock is obsolete,
-   -1 if another process owns it (and set OWNER (if non-null) to info),
-   -2 if the current process owns it,
+   ANOTHER_OWNS_IT if another process owns it
+     (and set OWNER (if non-null) to info),
+   I_OWN_IT if the current process owns it,
    or an errno value if something is wrong with the locking mechanism.  */
 
 static int
 current_lock_owner (lock_info_type *owner, char *lfname)
 {
-  int ret;
   lock_info_type local_owner;
   ptrdiff_t lfinfolen;
   intmax_t pid, boot_time;
@@ -571,13 +585,13 @@ current_lock_owner (lock_info_type *owner, char *lfname)
       && memcmp (at + 1, SSDATA (system_name), SBYTES (system_name)) == 0)
     {
       if (pid == getpid ())
-        ret = -2; /* We own it.  */
+        return I_OWN_IT;
       else if (0 < pid && pid <= TYPE_MAXIMUM (pid_t)
                && (kill (pid, 0) >= 0 || errno == EPERM)
               && (boot_time == 0
                   || (boot_time <= TYPE_MAXIMUM (time_t)
                       && within_one_second (boot_time, get_boot_time ()))))
-        ret = -1; /* An existing process on this machine owns it.  */
+        return ANOTHER_OWNS_IT;
       /* The owner process is dead or has a strange pid, so try to
          zap the lockfile.  */
       else
@@ -586,18 +600,16 @@ current_lock_owner (lock_info_type *owner, char *lfname)
   else
     { /* If we wanted to support the check for stale locks on remote machines,
          here's where we'd do it.  */
-      ret = -1;
+      return ANOTHER_OWNS_IT;
     }
-
-  return ret;
 }
 
 
 /* Lock the lock named LFNAME if possible.
    Return 0 in that case.
-   Return negative if some other process owns the lock, and info about
+   Return ANOTHER_OWNS_IT if some other process owns the lock, and info about
      that process in CLASHER.
-   Return positive errno value if cannot lock for any other reason.  */
+   Return errno value if cannot lock for any other reason.  */
 
 static int
 lock_if_free (lock_info_type *clasher, char *lfname)
@@ -606,14 +618,14 @@ lock_if_free (lock_info_type *clasher, char *lfname)
   while ((err = lock_file_1 (lfname, 0)) == EEXIST)
     {
       err = current_lock_owner (clasher, lfname);
+
+      /* Return if we locked it, or another process owns it, or it is
+        a strange error.  */
       if (err != 0)
-       {
-         if (err < 0)
-           return -2 - err; /* We locked it, or someone else has it.  */
-         break; /* current_lock_owner returned strange error.  */
-       }
+       return err == I_OWN_IT ? 0 : err;
 
-      /* We deleted a stale lock; try again to lock the file.  */
+      /* We deleted a stale lock or some other process deleted the lock;
+        try again to lock the file.  */
     }
 
   return err;
@@ -674,12 +686,12 @@ lock_file (Lisp_Object fn)
   if (!NILP (subject_buf)
       && NILP (Fverify_visited_file_modtime (subject_buf))
       && !NILP (Ffile_exists_p (fn))
-      && current_lock_owner (NULL, lfname) != -2)
+      && current_lock_owner (NULL, lfname) != I_OWN_IT)
     call1 (intern ("userlock--ask-user-about-supersession-threat"), fn);
 
   /* Try to lock the lock.  FIXME: This ignores errors when
-     lock_if_free returns a positive errno value.  */
-  if (lock_if_free (&lock_info, lfname) < 0)
+     lock_if_free returns an errno value.  */
+  if (lock_if_free (&lock_info, lfname) == ANOTHER_OWNS_IT)
     {
       /* Someone else has the lock.  Consider breaking it.  */
       Lisp_Object attack;
@@ -710,9 +722,9 @@ unlock_file (Lisp_Object fn)
   lfname = SSDATA (ENCODE_FILE (lock_filename));
 
   int err = current_lock_owner (0, lfname);
-  if (err == -2 && unlink (lfname) != 0 && errno != ENOENT)
-    err = errno;
-  if (0 < err)
+  if (! (err == 0 || err == ANOTHER_OWNS_IT
+        || (err == I_OWN_IT
+            && (unlink (lfname) == 0 || (err = errno) == ENOENT))))
     report_file_errno ("Unlocking file", fn, err);
 
   return Qnil;
@@ -858,8 +870,10 @@ t if it is locked by you, else a string saying which user 
has locked it.  */)
   owner = current_lock_owner (&locker, lfname);
   switch (owner)
     {
-    case -2: ret = Qt; break;
-    case -1: ret = make_string (locker.user, locker.at - locker.user); break;
+    case I_OWN_IT: ret = Qt; break;
+    case ANOTHER_OWNS_IT:
+      ret = make_string (locker.user, locker.at - locker.user);
+      break;
     case  0: ret = Qnil; break;
     default: report_file_errno ("Testing file lock", filename, owner);
     }
diff --git a/src/firstfile.c b/src/firstfile.c
index 2733e1b5d6..719c29db8b 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1997, 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/floatfns.c b/src/floatfns.c
index f52dae4719..f2b3b13acd 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-2021 Free Software Foundation,
+Copyright (C) 1988, 1993-1994, 1999, 2001-2022 Free Software Foundation,
 Inc.
 
 Author: Wolfgang Rupprecht (according to ack.texi)
diff --git a/src/fns.c b/src/fns.c
index 5df4ecfb36..9f39d56dd3 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -1,6 +1,6 @@
 /* Random utility Lisp functions.
 
-Copyright (C) 1985-1987, 1993-1995, 1997-2021 Free Software Foundation,
+Copyright (C) 1985-1987, 1993-1995, 1997-2022 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
@@ -3117,25 +3117,25 @@ require_unwind (Lisp_Object old_value)
 }
 
 DEFUN ("require", Frequire, Srequire, 1, 3, 0,
-       doc: /* If feature FEATURE is not loaded, load it from FILENAME.
-If FEATURE is not a member of the list `features', then the feature is
-not loaded; so load the file FILENAME.
+       doc: /* If FEATURE is not already loaded, load it from FILENAME.
+If FEATURE is not a member of the list `features', then the feature was
+not yet loaded; so load it from file FILENAME.
 
 If FILENAME is omitted, the printname of FEATURE is used as the file
-name, and `load' will try to load this name appended with the suffix
-`.elc', `.el', or the system-dependent suffix for dynamic module
-files, in that order.  The name without appended suffix will not be
-used.  See `get-load-suffixes' for the complete list of suffixes.
+name, and `load' is called to try to load the file by that name, after
+appending the suffix `.elc', `.el', or the system-dependent suffix for
+dynamic module files, in that order; but the function will not try to
+load the file without any suffix.  See `get-load-suffixes' for the
+complete list of suffixes.
 
-The directories in `load-path' are searched when trying to find the
-file name.
+To find the file, this function searches that directories in `load-path'.
 
-If the optional third argument NOERROR is non-nil, then return nil if
-the file is not found instead of signaling an error.  Normally the
-return value is FEATURE.
+If the optional third argument NOERROR is non-nil, then, if
+the file is not found, the function returns nil instead of signaling
+an error.  Normally the return value is FEATURE.
 
-The normal messages at start and end of loading FILENAME are
-suppressed.  */)
+The normal messages issued by `load' at start and end of loading
+FILENAME are suppressed.  */)
   (Lisp_Object feature, Lisp_Object filename, Lisp_Object noerror)
 {
   Lisp_Object tem;
@@ -3665,7 +3665,7 @@ base64_encode_1 (const char *from, char *to, ptrdiff_t 
length,
          c = string_char_and_length ((unsigned char *) from + i, &bytes);
          if (CHAR_BYTE8_P (c))
            c = CHAR_TO_BYTE8 (c);
-         else if (c >= 256)
+         else if (c >= 128)
            return -1;
          i += bytes;
        }
@@ -3708,7 +3708,7 @@ base64_encode_1 (const char *from, char *to, ptrdiff_t 
length,
          c = string_char_and_length ((unsigned char *) from + i, &bytes);
          if (CHAR_BYTE8_P (c))
            c = CHAR_TO_BYTE8 (c);
-         else if (c >= 256)
+         else if (c >= 128)
            return -1;
          i += bytes;
        }
@@ -3733,7 +3733,7 @@ base64_encode_1 (const char *from, char *to, ptrdiff_t 
length,
          c = string_char_and_length ((unsigned char *) from + i, &bytes);
          if (CHAR_BYTE8_P (c))
            c = CHAR_TO_BYTE8 (c);
-         else if (c >= 256)
+         else if (c >= 128)
            return -1;
          i += bytes;
        }
diff --git a/src/font.c b/src/font.c
index d780d781f6..266e5bc75c 100644
--- a/src/font.c
+++ b/src/font.c
@@ -1,6 +1,6 @@
 /* font.c -- "Font" primitives.
 
-Copyright (C) 2006-2021 Free Software Foundation, Inc.
+Copyright (C) 2006-2022 Free Software Foundation, Inc.
 Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011
   National Institute of Advanced Industrial Science and Technology (AIST)
   Registration Number H13PRO009
@@ -5741,7 +5741,11 @@ match.  */);
   syms_of_xftfont ();
 #endif  /* HAVE_XFT */
 #endif  /* not USE_CAIRO */
-#endif /* HAVE_X_WINDOWS */
+#else  /* not HAVE_X_WINDOWS */
+#ifdef USE_CAIRO
+  syms_of_ftcrfont ();
+#endif
+#endif /* not HAVE_X_WINDOWS */
 #else  /* not HAVE_FREETYPE */
 #ifdef HAVE_X_WINDOWS
   syms_of_xfont ();
diff --git a/src/font.h b/src/font.h
index 2da5ec4504..424616a4a1 100644
--- a/src/font.h
+++ b/src/font.h
@@ -1,5 +1,5 @@
 /* font.h -- Interface definition for font handling.
-   Copyright (C) 2006-2021 Free Software Foundation, Inc.
+   Copyright (C) 2006-2022 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 7d4bd65f70..eb563a69e2 100644
--- a/src/fontset.c
+++ b/src/fontset.c
@@ -1,6 +1,6 @@
 /* Fontset handler.
 
-Copyright (C) 2001-2021 Free Software Foundation, Inc.
+Copyright (C) 2001-2022 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 42cca50d38..79210eab86 100644
--- a/src/fontset.h
+++ b/src/fontset.h
@@ -1,5 +1,5 @@
 /* Header for fontset handler.
-   Copyright (C) 1998, 2001-2021 Free Software Foundation, Inc.
+   Copyright (C) 1998, 2001-2022 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 33e9606e41..c0f4f3ecde 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -1,6 +1,6 @@
 /* Generic frame functions.
 
-Copyright (C) 1993-1995, 1997, 1999-2021 Free Software Foundation, Inc.
+Copyright (C) 1993-1995, 1997, 1999-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -225,7 +225,8 @@ Value is:
  `x' for an Emacs frame that is really an X window,
  `w32' for an Emacs frame that is a window on MS-Windows display,
  `ns' for an Emacs frame on a GNUstep or Macintosh Cocoa display,
- `pc' for a direct-write MS-DOS frame.
+ `pc' for a direct-write MS-DOS frame,
+ `pgtk' for an Emacs frame running on pure GTK.
  `haiku' for an Emacs frame running in Haiku.
 See also `frame-live-p'.  */)
   (Lisp_Object object)
@@ -245,6 +246,8 @@ See also `frame-live-p'.  */)
       return Qpc;
     case output_ns:
       return Qns;
+    case output_pgtk:
+      return Qpgtk;
     case output_haiku:
       return Qhaiku;
     default:
@@ -274,6 +277,8 @@ The value is a symbol:
  `w32' for an Emacs frame that is a window on MS-Windows display,
  `ns' for an Emacs frame on a GNUstep or Macintosh Cocoa display,
  `pc' for a direct-write MS-DOS frame.
+ `pgtk' for an Emacs frame using pure GTK facilities.
+ `haiku' for an Emacs frame running in Haiku.
 
 FRAME defaults to the currently selected frame.
 
@@ -2215,7 +2220,8 @@ delete_frame (Lisp_Object frame, Lisp_Object force)
     /* Since a similar behavior was observed on the Lucid and Motif
        builds (see Bug#5802, Bug#21509, Bug#23499, Bug#27816), we now
        don't delete the terminal for these builds either.  */
-    if (terminal->reference_count == 0 && terminal->type == output_x_window)
+    if (terminal->reference_count == 0 &&
+       (terminal->type == output_x_window || terminal->type == output_pgtk))
       terminal->reference_count = 1;
 #endif /* USE_X_TOOLKIT || USE_GTK */
     if (terminal->reference_count == 0)
@@ -5896,7 +5902,7 @@ This function is for internal use only.  */)
 
 #ifdef HAVE_WINDOW_SYSTEM
 
-# if (defined USE_GTK || defined HAVE_NS || defined HAVE_XINERAMA \
+# if (defined USE_GTK || defined HAVE_PGTK || defined HAVE_NS || defined 
HAVE_XINERAMA \
       || defined HAVE_XRANDR)
 void
 free_monitors (struct MonitorInfo *monitors, int n_monitors)
@@ -5934,6 +5940,10 @@ make_monitor_attribute_list (struct MonitorInfo 
*monitors,
                           attributes);
       attributes = Fcons (Fcons (Qframes, AREF (monitor_frames, i)),
                          attributes);
+#ifdef HAVE_PGTK
+      attributes = Fcons (Fcons (Qscale_factor, make_float (mi->scale_factor)),
+                         attributes);
+#endif
       attributes = Fcons (Fcons (Qmm_size,
                                  list2i (mi->mm_width, mi->mm_height)),
                           attributes);
@@ -6023,6 +6033,7 @@ syms_of_frame (void)
   DEFSYM (Qw32, "w32");
   DEFSYM (Qpc, "pc");
   DEFSYM (Qns, "ns");
+  DEFSYM (Qpgtk, "pgtk");
   DEFSYM (Qhaiku, "haiku");
   DEFSYM (Qvisible, "visible");
   DEFSYM (Qbuffer_predicate, "buffer-predicate");
@@ -6046,6 +6057,9 @@ syms_of_frame (void)
 
   DEFSYM (Qworkarea, "workarea");
   DEFSYM (Qmm_size, "mm-size");
+#ifdef HAVE_PGTK
+  DEFSYM (Qscale_factor, "scale-factor");
+#endif
   DEFSYM (Qframes, "frames");
   DEFSYM (Qsource, "source");
 
diff --git a/src/frame.h b/src/frame.h
index cb2bad71c5..cb2f58e261 100644
--- a/src/frame.h
+++ b/src/frame.h
@@ -1,5 +1,5 @@
 /* Define frame-object for GNU Emacs.
-   Copyright (C) 1993-1994, 1999-2021 Free Software Foundation, Inc.
+   Copyright (C) 1993-1994, 1999-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -585,6 +585,7 @@ struct frame
     struct x_output *x;         /* From xterm.h.  */
     struct w32_output *w32;     /* From w32term.h.  */
     struct ns_output *ns;       /* From nsterm.h.  */
+    struct pgtk_output *pgtk; /* From pgtkterm.h. */
     struct haiku_output *haiku; /* From haikuterm.h. */
   }
   output_data;
@@ -853,6 +854,11 @@ default_pixels_per_inch_y (void)
 #else
 #define FRAME_NS_P(f) ((f)->output_method == output_ns)
 #endif
+#ifndef HAVE_PGTK
+#define FRAME_PGTK_P(f) false
+#else
+#define FRAME_PGTK_P(f) ((f)->output_method == output_pgtk)
+#endif
 #ifndef HAVE_HAIKU
 #define FRAME_HAIKU_P(f) false
 #else
@@ -870,6 +876,9 @@ default_pixels_per_inch_y (void)
 #ifdef HAVE_NS
 #define FRAME_WINDOW_P(f) FRAME_NS_P(f)
 #endif
+#ifdef HAVE_PGTK
+#define FRAME_WINDOW_P(f) FRAME_PGTK_P(f)
+#endif
 #ifdef HAVE_HAIKU
 #define FRAME_WINDOW_P(f) FRAME_HAIKU_P (f)
 #endif
@@ -925,6 +934,8 @@ default_pixels_per_inch_y (void)
 /* Scale factor of frame F.  */
 #if defined HAVE_NS
 # define FRAME_SCALE_FACTOR(f) (FRAME_NS_P (f) ? ns_frame_scale_factor (f) : 1)
+#elif defined HAVE_PGTK
+# define FRAME_SCALE_FACTOR(f) (FRAME_PGTK_P (f) ? pgtk_frame_scale_factor (f) 
: 1)
 #else
 # define FRAME_SCALE_FACTOR(f) 1
 #endif
@@ -1682,7 +1693,7 @@ extern const char *x_get_resource_string (const char *, 
const char *);
 extern void x_sync (struct frame *);
 #endif /* HAVE_X_WINDOWS */
 
-#ifndef HAVE_NS
+#if !defined (HAVE_NS) && !defined (HAVE_PGTK)
 
 /* Set F's bitmap icon, if specified among F's parameters.  */
 
@@ -1718,6 +1729,9 @@ struct MonitorInfo {
   Emacs_Rectangle geom, work;
   int mm_width, mm_height;
   char *name;
+#ifdef HAVE_PGTK
+  double scale_factor;
+#endif
 };
 
 extern void free_monitors (struct MonitorInfo *monitors, int n_monitors);
diff --git a/src/fringe.c b/src/fringe.c
index b651a4eb0d..1f4dd46ec5 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-2021 Free Software
+   Copyright (C) 1985-1988, 1993-1995, 1997-2022 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -30,6 +30,8 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 #include "termhooks.h"
 #include "pdumper.h"
 
+#include "pgtkterm.h"
+
 /* Fringe bitmaps are represented in three different ways:
 
    Logical bitmaps are used internally to denote things like
@@ -1408,7 +1410,7 @@ If BITMAP overrides a standard fringe bitmap, the 
original bitmap is restored.
    On W32 and MAC (little endian), there's no need to do this.
 */
 
-#if defined (HAVE_X_WINDOWS)
+#if defined (HAVE_X_WINDOWS) || defined (HAVE_PGTK)
 static const unsigned char swap_nibble[16] = {
   0x0, 0x8, 0x4, 0xc,           /* 0000 1000 0100 1100 */
   0x2, 0xa, 0x6, 0xe,           /* 0010 1010 0110 1110 */
@@ -1471,6 +1473,25 @@ init_fringe_bitmap (int which, struct fringe_bitmap *fb, 
int once_p)
 #endif /* not USE_CAIRO */
 #endif /* HAVE_X_WINDOWS */
 
+#if !defined(HAVE_X_WINDOWS) && defined (HAVE_PGTK)
+      unsigned short *bits = fb->bits;
+      int j;
+
+      for (j = 0; j < fb->height; j++)
+       {
+         unsigned short b = *bits;
+#ifdef WORDS_BIGENDIAN
+         *bits++ = (b << (16 - fb->width));
+#else
+         b = (unsigned short)((swap_nibble[b & 0xf] << 12)
+                              | (swap_nibble[(b>>4) & 0xf] << 8)
+                              | (swap_nibble[(b>>8) & 0xf] << 4)
+                              | (swap_nibble[(b>>12) & 0xf]));
+         *bits++ = (b >> (16 - fb->width));
+#endif
+       }
+#endif /* !HAVE_X_WINDOWS && HAVE_PGTK */
+
 #ifdef HAVE_NTGUI
       unsigned short *bits = fb->bits;
       int j;
diff --git a/src/ftcrfont.c b/src/ftcrfont.c
index 5d75f18357..558e44d5b9 100644
--- a/src/ftcrfont.c
+++ b/src/ftcrfont.c
@@ -1,5 +1,5 @@
 /* ftcrfont.c -- FreeType font driver on cairo.
-   Copyright (C) 2015-2021 Free Software Foundation, Inc.
+   Copyright (C) 2015-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -24,10 +24,12 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 #include "lisp.h"
 #ifdef HAVE_X_WINDOWS
 #include "xterm.h"
-#else /* Otherwise, Haiku */
+#elif HAVE_HAIKU
 #include "haikuterm.h"
 #include "haiku_support.h"
 #include "termchar.h"
+#else
+#include "pgtkterm.h"
 #endif
 #include "blockinput.h"
 #include "charset.h"
@@ -167,6 +169,10 @@ ftcrfont_open (struct frame *f, Lisp_Object entity, int 
pixel_size)
   cairo_matrix_init_scale (&font_matrix, pixel_size, pixel_size);
   cairo_matrix_init_identity (&ctm);
   cairo_font_options_t *options = cairo_font_options_create ();
+#ifdef USE_BE_CAIRO
+  if (be_use_subpixel_antialiasing ())
+    cairo_font_options_set_antialias (options, CAIRO_ANTIALIAS_SUBPIXEL);
+#endif
   cairo_scaled_font_t *scaled_font
     = cairo_scaled_font_create (font_face, &font_matrix, &ctm, options);
   cairo_font_face_destroy (font_face);
@@ -526,7 +532,11 @@ ftcrfont_draw (struct glyph_string *s,
   block_input ();
 
 #ifndef USE_BE_CAIRO
+#ifdef HAVE_X_WINDOWS
   cr = x_begin_cr_clip (f, s->gc);
+#else
+  cr = pgtk_begin_cr_clip (f);
+#endif
 #else
   BView_draw_lock (FRAME_HAIKU_VIEW (f));
   EmacsWindow_begin_cr_critical_section (FRAME_HAIKU_WINDOW (f));
@@ -544,8 +554,11 @@ ftcrfont_draw (struct glyph_string *s,
   if (with_background)
     {
 #ifndef USE_BE_CAIRO
+#ifdef HAVE_X_WINDOWS
       x_set_cr_source_with_gc_background (f, s->gc);
-      s->background_filled_p = 1;
+#else
+      pgtk_set_cr_source_with_color (f, s->xgcv.background);
+#endif
 #else
       struct face *face = s->face;
 
@@ -556,6 +569,7 @@ ftcrfont_draw (struct glyph_string *s,
                            GREEN_FROM_ULONG (col) / 255.0,
                            BLUE_FROM_ULONG (col) / 255.0);
 #endif
+      s->background_filled_p = 1;
       cairo_rectangle (cr, x, y - FONT_BASE (face->font),
                       s->width, FONT_HEIGHT (face->font));
       cairo_fill (cr);
@@ -572,7 +586,11 @@ ftcrfont_draw (struct glyph_string *s,
                                                        NULL));
     }
 #ifndef USE_BE_CAIRO
+#ifdef HAVE_X_WINDOWS
   x_set_cr_source_with_gc_foreground (f, s->gc);
+#else
+  pgtk_set_cr_source_with_color (f, s->xgcv.foreground);
+#endif
 #else
   uint32_t col = s->hl == DRAW_CURSOR ?
     FRAME_OUTPUT_DATA (s->f)->cursor_fg : face->foreground;
@@ -584,7 +602,11 @@ ftcrfont_draw (struct glyph_string *s,
   cairo_set_scaled_font (cr, ftcrfont_info->cr_scaled_font);
   cairo_show_glyphs (cr, glyphs, len);
 #ifndef USE_BE_CAIRO
+#ifdef HAVE_X_WINDOWS
   x_end_cr_clip (f);
+#else
+  pgtk_end_cr_clip (f);
+#endif
 #else
   haiku_end_cr_clip (cr);
   EmacsWindow_end_cr_critical_section (FRAME_HAIKU_WINDOW (f));
diff --git a/src/ftfont.c b/src/ftfont.c
index cf592759ab..2bdcce306b 100644
--- a/src/ftfont.c
+++ b/src/ftfont.c
@@ -1,5 +1,5 @@
 /* ftfont.c -- FreeType font driver.
-   Copyright (C) 2006-2021 Free Software Foundation, Inc.
+   Copyright (C) 2006-2022 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/ftfont.h b/src/ftfont.h
index 0e0bebb6f6..cfab8d3154 100644
--- a/src/ftfont.h
+++ b/src/ftfont.h
@@ -25,6 +25,7 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 #include <ft2build.h>
 #include FT_FREETYPE_H
 #include FT_SIZES_H
+#include FT_TRUETYPE_TABLES_H
 #ifdef FT_BDF_H
 # include FT_BDF_H
 #endif
diff --git a/src/getpagesize.h b/src/getpagesize.h
index ec497d0404..446c1e374a 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-2021 Free Software Foundation,
+   Copyright (C) 1986, 1992, 1995, 2001-2022 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/gfilenotify.c b/src/gfilenotify.c
index 4da6156943..70c503af54 100644
--- a/src/gfilenotify.c
+++ b/src/gfilenotify.c
@@ -1,5 +1,5 @@
 /* Filesystem notifications support with glib API.
-   Copyright (C) 2013-2021 Free Software Foundation, Inc.
+   Copyright (C) 2013-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/gmalloc.c b/src/gmalloc.c
index 55ae7365d9..f063af60cf 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-2021 Free
+   Copyright (C) 1990-1993, 1995-1996, 1999, 2002-2007, 2013-2022 Free
    Software Foundation, Inc.
                  Written May 1989 by Mike Haertel.
 
diff --git a/src/gnutls.c b/src/gnutls.c
index 22e7f2cbc1..3ec3837067 100644
--- a/src/gnutls.c
+++ b/src/gnutls.c
@@ -1,5 +1,5 @@
 /* GnuTLS glue for GNU Emacs.
-   Copyright (C) 2010-2021 Free Software Foundation, Inc.
+   Copyright (C) 2010-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/gnutls.h b/src/gnutls.h
index 5fa08f8b12..791e5340c2 100644
--- a/src/gnutls.h
+++ b/src/gnutls.h
@@ -1,5 +1,5 @@
 /* GnuTLS glue for GNU Emacs.
-   Copyright (C) 2010-2021 Free Software Foundation, Inc.
+   Copyright (C) 2010-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/gtkutil.c b/src/gtkutil.c
index 9e676cd025..1db166b1ba 100644
--- a/src/gtkutil.c
+++ b/src/gtkutil.c
@@ -1,6 +1,6 @@
 /* Functions for creating and updating GTK widgets.
 
-Copyright (C) 2003-2021 Free Software Foundation, Inc.
+Copyright (C) 2003-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -17,13 +17,6 @@ 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/>.  */
 
-/* FIXME: This code is problematic; it misuses GTK, so the GTK
-   developers don't think they should fix the resulting problems in GTK
-   itself.  The right way to fix this is by rewriting the code in Emacs
-   to use GTK3 properly.  As of 2020, there is a project to do this.
-   Talk with Yuuki Harano <masm+emacs@masm11.me> if you are interested
-   in doing substantial work on this.  */
-
 #include <config.h>
 
 #ifdef USE_GTK
@@ -37,7 +30,14 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 #include "dispextern.h"
 #include "frame.h"
 #include "systime.h"
+#ifndef HAVE_PGTK
 #include "xterm.h"
+#define xp x
+typedef struct x_output xp_output;
+#else
+#define xp pgtk
+typedef struct pgtk_output xp_output;
+#endif
 #include "blockinput.h"
 #include "window.h"
 #include "gtkutil.h"
@@ -56,7 +56,9 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 #endif
 
 #ifdef HAVE_GTK3
+#ifndef HAVE_PGTK
 #include <gtk/gtkx.h>
+#endif
 #include "emacsgtkfixed.h"
 #endif
 
@@ -74,6 +76,13 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 #define XG_TEXT_OPEN   GTK_STOCK_OPEN
 #endif
 
+#ifndef HAVE_PGTK
+static void xg_im_context_commit (GtkIMContext *, gchar *, gpointer);
+static void xg_im_context_preedit_changed (GtkIMContext *, gpointer);
+static void xg_im_context_preedit_end (GtkIMContext *, gpointer);
+static bool xg_widget_key_press_event_cb (GtkWidget *, GdkEvent *, gpointer);
+#endif
+
 #ifndef HAVE_GTK3
 
 #ifdef HAVE_FREETYPE
@@ -131,6 +140,7 @@ static GdkDisplay *gdpy_def;
 static void
 xg_set_screen (GtkWidget *w, struct frame *f)
 {
+#ifndef HAVE_PGTK
   if (FRAME_X_DISPLAY (f) != DEFAULT_GDK_DISPLAY ())
     {
       GdkDisplay *gdpy = gdk_x11_lookup_xdisplay (FRAME_X_DISPLAY (f));
@@ -141,6 +151,17 @@ xg_set_screen (GtkWidget *w, struct frame *f)
       else
         gtk_window_set_screen (GTK_WINDOW (w), gscreen);
     }
+#else
+  if (FRAME_X_DISPLAY (f) != DEFAULT_GDK_DISPLAY ())
+    {
+      GdkScreen *gscreen = gdk_display_get_default_screen (FRAME_X_DISPLAY 
(f));
+
+      if (GTK_IS_MENU (w))
+       gtk_menu_set_screen (GTK_MENU (w), gscreen);
+      else
+       gtk_window_set_screen (GTK_WINDOW (w), gscreen);
+    }
+#endif
 }
 
 
@@ -152,12 +173,20 @@ xg_set_screen (GtkWidget *w, struct frame *f)
    multiple displays.  */
 
 void
+#ifndef HAVE_PGTK
 xg_display_open (char *display_name, Display **dpy)
+#else
+xg_display_open (char *display_name, GdkDisplay **dpy)
+#endif
 {
   GdkDisplay *gdpy;
 
   unrequest_sigio ();  /* See comment in x_display_ok, xterm.c.  */
+#ifndef HAVE_PGTK
   gdpy = gdk_display_open (display_name);
+#else
+  gdpy = gdk_display_open (strlen (display_name) == 0 ? NULL : display_name);
+#endif
   request_sigio ();
   if (!gdpy_def && gdpy)
     {
@@ -166,7 +195,11 @@ xg_display_open (char *display_name, Display **dpy)
                                               gdpy);
     }
 
+#ifndef HAVE_PGTK
   *dpy = gdpy ? GDK_DISPLAY_XDISPLAY (gdpy) : NULL;
+#else
+  *dpy = gdpy;
+#endif
 }
 
 /* Scaling/HiDPI functions. */
@@ -188,6 +221,9 @@ xg_get_gdk_scale (void)
 int
 xg_get_scale (struct frame *f)
 {
+#ifdef HAVE_PGTK
+  return 1;
+#endif
 #ifdef HAVE_GTK3
   if (FRAME_GTK_WIDGET (f))
     return gtk_widget_get_scale_factor (FRAME_GTK_WIDGET (f));
@@ -198,8 +234,13 @@ xg_get_scale (struct frame *f)
 /* Close display DPY.  */
 
 void
+#ifndef HAVE_PGTK
 xg_display_close (Display *dpy)
+#else
+xg_display_close (GdkDisplay *gdpy)
+#endif
 {
+#ifndef HAVE_PGTK
   GdkDisplay *gdpy = gdk_x11_lookup_xdisplay (dpy);
 
   /* If this is the default display, try to change it before closing.
@@ -223,6 +264,31 @@ xg_display_close (Display *dpy)
     }
 
   gdk_display_close (gdpy);
+
+#else
+
+  /* If this is the default display, try to change it before closing.
+     If there is no other display to use, gdpy_def is set to NULL, and
+     the next call to xg_display_open resets the default display.  */
+  if (gdk_display_get_default () == gdpy)
+    {
+      struct pgtk_display_info *dpyinfo;
+      GdkDisplay *gdpy_new = NULL;
+
+      /* Find another display.  */
+      for (dpyinfo = x_display_list; dpyinfo; dpyinfo = dpyinfo->next)
+       if (dpyinfo->gdpy != gdpy)
+         {
+           gdpy_new = dpyinfo->gdpy;
+           gdk_display_manager_set_default_display (gdk_display_manager_get (),
+                                                    gdpy_new);
+            break;
+        }
+      gdpy_def = gdpy_new;
+    }
+
+  gdk_display_close (gdpy);
+#endif
 }
 
 
@@ -234,12 +300,19 @@ xg_display_close (Display *dpy)
    scroll bars on display DPY.  */
 
 GdkCursor *
+#ifndef HAVE_PGTK
 xg_create_default_cursor (Display *dpy)
+#else
+xg_create_default_cursor (GdkDisplay *gdpy)
+#endif
 {
+#ifndef HAVE_PGTK
   GdkDisplay *gdpy = gdk_x11_lookup_xdisplay (dpy);
+#endif
   return gdk_cursor_new_for_display (gdpy, GDK_LEFT_PTR);
 }
 
+#ifndef HAVE_PGTK
 /* Apply GMASK to GPIX and return a GdkPixbuf with an alpha channel.  */
 
 static GdkPixbuf *
@@ -339,6 +412,8 @@ xg_get_pixbuf_from_surface (cairo_surface_t *surface)
 }
 #endif /* USE_CAIRO && !HAVE_GTK3 */
 
+#endif /* !HAVE_PGTK */
+
 static Lisp_Object
 file_for_image (Lisp_Object image)
 {
@@ -609,8 +684,13 @@ xg_check_special_colors (struct frame *f,
   block_input ();
   {
 #ifdef HAVE_GTK3
+#ifndef HAVE_PGTK
     GtkStyleContext *gsty
       = gtk_widget_get_style_context (FRAME_GTK_OUTER_WIDGET (f));
+#else
+    GtkStyleContext *gsty
+      = gtk_widget_get_style_context (FRAME_WIDGET (f));
+#endif
     GdkRGBA col;
     char buf[sizeof "rgb://rrrr/gggg/bbbb"];
     int state = GTK_STATE_FLAG_SELECTED|GTK_STATE_FLAG_FOCUSED;
@@ -634,8 +714,13 @@ xg_check_special_colors (struct frame *f,
       r = col.red * 65535,
       g = col.green * 65535,
       b = col.blue * 65535;
+#ifndef HAVE_PGTK
     sprintf (buf, "rgb:%04x/%04x/%04x", r, g, b);
     success_p = x_parse_color (f, buf, color) != 0;
+#else
+    sprintf (buf, "#%04x%04x%04x", r, g, b);
+    success_p = pgtk_parse_color (f, buf, color) != 0;
+#endif
 #else
     GtkStyle *gsty = gtk_widget_get_style (FRAME_GTK_WIDGET (f));
     GdkColor *grgb = get_bg
@@ -659,6 +744,9 @@ xg_check_special_colors (struct frame *f,
 /***********************************************************************
                               Tooltips
  ***********************************************************************/
+
+#ifndef HAVE_PGTK
+
 /* Gtk+ calls this callback when the parent of our tooltip dummy changes.
    We use that to pop down the tooltip.  This happens if Gtk+ for some
    reason wants to change or hide the tooltip.  */
@@ -669,7 +757,7 @@ hierarchy_ch_cb (GtkWidget *widget,
                  gpointer   user_data)
 {
   struct frame *f = user_data;
-  struct x_output *x = f->output_data.x;
+  xp_output *x = f->output_data.xp;
   GtkWidget *top = gtk_widget_get_toplevel (x->ttip_lbl);
 
   if (! top || ! GTK_IS_WINDOW (top))
@@ -691,7 +779,7 @@ qttip_cb (GtkWidget  *widget,
           gpointer    user_data)
 {
   struct frame *f = user_data;
-  struct x_output *x = f->output_data.x;
+  xp_output *x = f->output_data.xp;
   if (x->ttip_widget == NULL)
     {
       GtkWidget *p;
@@ -738,7 +826,7 @@ xg_prepare_tooltip (struct frame *f,
                     int *width,
                     int *height)
 {
-  struct x_output *x = f->output_data.x;
+  xp_output *x = f->output_data.xp;
   GtkWidget *widget;
   GdkWindow *gwin;
   GdkScreen *screen;
@@ -789,13 +877,19 @@ xg_prepare_tooltip (struct frame *f,
 void
 xg_show_tooltip (struct frame *f, int root_x, int root_y)
 {
-  struct x_output *x = f->output_data.x;
+  xp_output *x = f->output_data.xp;
   if (x->ttip_window)
     {
       block_input ();
+#ifndef HAVE_PGTK
       gtk_window_move (x->ttip_window, root_x / xg_get_scale (f),
                       root_y / xg_get_scale (f));
       gtk_widget_show (GTK_WIDGET (x->ttip_window));
+#else
+      gtk_widget_show (GTK_WIDGET (x->ttip_window));
+      gtk_window_move (x->ttip_window, root_x / xg_get_scale (f),
+                      root_y / xg_get_scale (f));
+#endif
       unblock_input ();
     }
 }
@@ -807,10 +901,9 @@ xg_show_tooltip (struct frame *f, int root_x, int root_y)
 bool
 xg_hide_tooltip (struct frame *f)
 {
-  if (f->output_data.x->ttip_window)
+  if (f->output_data.xp->ttip_window)
     {
-      GtkWindow *win = f->output_data.x->ttip_window;
-
+      GtkWindow *win = f->output_data.xp->ttip_window;
       block_input ();
       gtk_widget_hide (GTK_WIDGET (win));
 
@@ -828,6 +921,30 @@ xg_hide_tooltip (struct frame *f)
   return FALSE;
 }
 
+#else  /* HAVE_PGTK */
+
+void
+xg_show_tooltip (struct frame *f,
+                Lisp_Object string)
+{
+  Lisp_Object encoded_string = ENCODE_UTF_8 (string);
+  gtk_widget_set_tooltip_text (FRAME_GTK_OUTER_WIDGET (f)
+                              ? FRAME_GTK_OUTER_WIDGET (f)
+                              : FRAME_GTK_WIDGET (f),
+                              SSDATA (encoded_string));
+}
+
+bool
+xg_hide_tooltip (struct frame *f)
+{
+  if (FRAME_GTK_OUTER_WIDGET (f))
+    gtk_widget_set_tooltip_text (FRAME_GTK_OUTER_WIDGET (f), NULL);
+  gtk_widget_set_tooltip_text (FRAME_GTK_WIDGET (f), NULL);
+  return TRUE;
+}
+
+#endif /* HAVE_PGTK */
+
 
 /***********************************************************************
     General functions for creating widgets, resizing, events, e.t.c.
@@ -853,7 +970,11 @@ xg_is_menu_window (Display *dpy, Window wdesc)
     {
       GtkWidget *fw = gtk_bin_get_child (GTK_BIN (gwdesc));
       if (GTK_IS_MENU (fw))
-       return true;
+       {
+         GtkWidget *parent
+           = gtk_menu_shell_get_parent_shell (GTK_MENU_SHELL (fw));
+         return GTK_IS_MENU_BAR (parent);
+       }
     }
 
   return false;
@@ -975,8 +1096,23 @@ xg_frame_set_char_size (struct frame *f, int width, int 
height)
   bool was_visible = false;
   bool hide_child_frame;
 
+#ifndef HAVE_PGTK
   gtk_window_get_size (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
                       &gwidth, &gheight);
+#else
+  if (FRAME_GTK_OUTER_WIDGET (f))
+    {
+      gtk_window_get_size (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
+                          &gwidth, &gheight);
+    }
+  else
+    {
+      GtkAllocation alloc;
+      gtk_widget_get_allocation (FRAME_GTK_WIDGET (f), &alloc);
+      gwidth = alloc.width;
+      gheight = alloc.height;
+    }
+#endif
 
   /* Do this before resize, as we don't know yet if we will be resized.  */
   FRAME_RIF (f)->clear_under_internal_border (f);
@@ -996,11 +1132,37 @@ xg_frame_set_char_size (struct frame *f, int width, int 
height)
      remain unchanged but giving the frame back its normal size will
      be broken ... */
   if (EQ (fullscreen, Qfullwidth) && width == FRAME_PIXEL_WIDTH (f))
+#ifndef HAVE_PGTK
     gtk_window_resize (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
                       gwidth, outer_height);
+#else
+    if (FRAME_GTK_OUTER_WIDGET (f))
+      {
+       gtk_window_resize (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
+                          gwidth, outer_height);
+      }
+    else
+      {
+       gtk_widget_set_size_request (FRAME_GTK_WIDGET (f),
+                                    gwidth, outer_height);
+      }
+#endif
   else if (EQ (fullscreen, Qfullheight) && height == FRAME_PIXEL_HEIGHT (f))
+#ifndef HAVE_PGTK
     gtk_window_resize (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
                       outer_width, gheight);
+#else
+    if (FRAME_GTK_OUTER_WIDGET (f))
+      {
+       gtk_window_resize (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
+                          outer_width, gheight);
+      }
+    else
+      {
+       gtk_widget_set_size_request (FRAME_GTK_WIDGET (f),
+                                    outer_width, gheight);
+      }
+#endif
   else if (FRAME_PARENT_FRAME (f) && FRAME_VISIBLE_P (f))
     {
       was_visible = true;
@@ -1011,17 +1173,38 @@ xg_frame_set_char_size (struct frame *f, int width, int 
height)
           if (hide_child_frame)
             {
               block_input ();
+#ifndef HAVE_PGTK
               gtk_widget_hide (FRAME_GTK_OUTER_WIDGET (f));
+#else
+             gtk_widget_hide (FRAME_WIDGET (f));
+#endif
               unblock_input ();
             }
 
+#ifndef HAVE_PGTK
          gtk_window_resize (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
                             outer_width, outer_height);
+#else
+         if (FRAME_GTK_OUTER_WIDGET (f))
+           {
+             gtk_window_resize (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
+                                outer_width, outer_height);
+           }
+         else
+           {
+             gtk_widget_set_size_request (FRAME_GTK_WIDGET (f),
+                                          outer_width, outer_height);
+           }
+#endif
 
           if (hide_child_frame)
             {
               block_input ();
+#ifndef HAVE_PGTK
               gtk_widget_show_all (FRAME_GTK_OUTER_WIDGET (f));
+#else
+             gtk_widget_show_all (FRAME_WIDGET (f));
+#endif
               unblock_input ();
             }
 
@@ -1030,8 +1213,21 @@ xg_frame_set_char_size (struct frame *f, int width, int 
height)
     }
   else
     {
+#ifndef HAVE_PGTK
       gtk_window_resize (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
                         outer_width, outer_height);
+#else
+      if (FRAME_GTK_OUTER_WIDGET (f))
+       {
+         gtk_window_resize (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
+                            outer_width, outer_height);
+       }
+      else
+       {
+         gtk_widget_set_size_request (FRAME_GTK_WIDGET (f),
+                                      outer_width, outer_height);
+       }
+#endif
       fullscreen = Qnil;
     }
 
@@ -1056,7 +1252,9 @@ xg_frame_set_char_size (struct frame *f, int width, int 
height)
       /* Must call this to flush out events */
       (void)gtk_events_pending ();
       gdk_flush ();
+#ifndef HAVE_PGTK
       x_wait_for_event (f, ConfigureNotify);
+#endif
 
       if (!NILP (fullscreen))
        /* Try to restore fullscreen state.  */
@@ -1089,11 +1287,12 @@ xg_height_or_width_changed (struct frame *f)
   gtk_window_resize (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
                      FRAME_TOTAL_PIXEL_WIDTH (f),
                      FRAME_TOTAL_PIXEL_HEIGHT (f));
-  f->output_data.x->hint_flags = 0;
+  f->output_data.xp->hint_flags = 0;
   x_wm_set_size_hint (f, 0, 0);
 }
 #endif
 
+#ifndef HAVE_PGTK
 /* Convert an X Window WSESC on display DPY to its corresponding GtkWidget.
    Must be done like this, because GtkWidget:s can have "hidden"
    X Window that aren't accessible.
@@ -1121,6 +1320,7 @@ xg_win_to_widget (Display *dpy, Window wdesc)
   unblock_input ();
   return gwdesc;
 }
+#endif
 
 /* Set the background of widget W to PIXEL.  */
 
@@ -1128,9 +1328,18 @@ static void
 xg_set_widget_bg (struct frame *f, GtkWidget *w, unsigned long pixel)
 {
 #ifdef HAVE_GTK3
-  XColor xbg;
+  Emacs_Color xbg;
   xbg.pixel = pixel;
+#ifndef HAVE_PGTK
   if (XQueryColor (FRAME_X_DISPLAY (f), FRAME_X_COLORMAP (f), &xbg))
+#else
+  xbg.red = (pixel >> 16) & 0xff;
+  xbg.green = (pixel >> 8) & 0xff;
+  xbg.blue = (pixel >> 0) & 0xff;
+  xbg.red |= xbg.red << 8;
+  xbg.green |= xbg.green << 8;
+  xbg.blue |= xbg.blue << 8;
+#endif
     {
       const char format[] = "* { background-color: #%02x%02x%02x; }";
       /* The format is always longer than the resulting string.  */
@@ -1165,7 +1374,16 @@ style_changed_cb (GObject *go,
   struct input_event event;
   GdkDisplay *gdpy = user_data;
   const char *display_name = gdk_display_get_name (gdpy);
+#ifndef HAVE_PGTK
   Display *dpy = GDK_DISPLAY_XDISPLAY (gdpy);
+#else
+  GdkDisplay *dpy = gdpy;
+#endif
+
+#ifndef HAVE_PGTK
+  if (display_name == NULL)
+    display_name = "";
+#endif
 
   EVENT_INIT (event);
   event.kind = CONFIG_CHANGED_EVENT;
@@ -1186,7 +1404,11 @@ style_changed_cb (GObject *go,
         {
           struct frame *f = XFRAME (frame);
           if (FRAME_LIVE_P (f)
+#ifndef HAVE_PGTK
               && FRAME_X_P (f)
+#else
+              && FRAME_PGTK_P (f)
+#endif
               && FRAME_X_DISPLAY (f) == dpy)
             {
               FRAME_TERMINAL (f)->set_scroll_bar_default_width_hook (f);
@@ -1200,6 +1422,7 @@ style_changed_cb (GObject *go,
 
 /* Called when a delete-event occurs on WIDGET.  */
 
+#ifndef HAVE_PGTK
 static gboolean
 delete_cb (GtkWidget *widget,
            GdkEvent  *event,
@@ -1207,6 +1430,7 @@ delete_cb (GtkWidget *widget,
 {
   return TRUE;
 }
+#endif
 
 /* Create and set up the GTK widgets for frame F.
    Return true if creation succeeded.  */
@@ -1220,17 +1444,30 @@ xg_create_frame_widgets (struct frame *f)
 #ifndef HAVE_GTK3
   GtkRcStyle *style;
 #endif
+#ifndef HAVE_PGTK
+  GtkIMContext *imc;
+#endif
+  GtkWindowType type = GTK_WINDOW_TOPLEVEL;
   char *title = 0;
 
   block_input ();
 
+#ifndef HAVE_PGTK  /* gtk_plug not found. */
   if (FRAME_X_EMBEDDED_P (f))
     {
       GdkDisplay *gdpy = gdk_x11_lookup_xdisplay (FRAME_X_DISPLAY (f));
-      wtop = gtk_plug_new_for_display (gdpy, f->output_data.x->parent_desc);
+      wtop = gtk_plug_new_for_display (gdpy, f->output_data.xp->parent_desc);
     }
   else
-    wtop = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+    wtop = gtk_window_new (type);
+#else
+  if (f->tooltip)
+    {
+      type = GTK_WINDOW_POPUP;
+    }
+  wtop = gtk_window_new (type);
+  gtk_widget_add_events (wtop, GDK_ALL_EVENTS_MASK);
+#endif
 
   /* gtk_window_set_has_resize_grip is a Gtk+ 3.0 function but Ubuntu
      has backported it to Gtk+ 2.0 and they add the resize grip for
@@ -1287,8 +1524,8 @@ xg_create_frame_widgets (struct frame *f)
 
   FRAME_GTK_OUTER_WIDGET (f) = wtop;
   FRAME_GTK_WIDGET (f) = wfixed;
-  f->output_data.x->vbox_widget = wvbox;
-  f->output_data.x->hbox_widget = whbox;
+  f->output_data.xp->vbox_widget = wvbox;
+  f->output_data.xp->hbox_widget = whbox;
 
   gtk_widget_set_has_window (wfixed, TRUE);
 
@@ -1307,7 +1544,10 @@ xg_create_frame_widgets (struct frame *f)
      FIXME: gtk_widget_set_double_buffered is deprecated and might stop
      working in the future.  We need to migrate away from combining
      X and GTK+ drawing to a pure GTK+ build.  */
+
+#ifndef HAVE_PGTK
   gtk_widget_set_double_buffered (wfixed, FALSE);
+#endif
 
 #if ! GTK_CHECK_VERSION (3, 22, 0)
   gtk_window_set_wmclass (GTK_WINDOW (wtop),
@@ -1315,10 +1555,12 @@ xg_create_frame_widgets (struct frame *f)
                           SSDATA (Vx_resource_class));
 #endif
 
+#ifndef HAVE_PGTK
   /* Add callback to do nothing on WM_DELETE_WINDOW.  The default in
      GTK is to destroy the widget.  We want Emacs to do that instead.  */
   g_signal_connect (G_OBJECT (wtop), "delete-event",
                     G_CALLBACK (delete_cb), f);
+#endif
 
   /* Convert our geometry parameters into a geometry string
      and specify it.
@@ -1329,7 +1571,9 @@ xg_create_frame_widgets (struct frame *f)
 
   gtk_widget_add_events (wfixed,
                          GDK_POINTER_MOTION_MASK
+#ifndef HAVE_PGTK
                          | GDK_EXPOSURE_MASK
+#endif
                          | GDK_BUTTON_PRESS_MASK
                          | GDK_BUTTON_RELEASE_MASK
                          | GDK_KEY_PRESS_MASK
@@ -1337,13 +1581,19 @@ xg_create_frame_widgets (struct frame *f)
                          | GDK_LEAVE_NOTIFY_MASK
                          | GDK_FOCUS_CHANGE_MASK
                          | GDK_STRUCTURE_MASK
+#ifdef HAVE_PGTK
+                         | GDK_SCROLL_MASK
+                         | GDK_SMOOTH_SCROLL_MASK
+#endif
                          | GDK_VISIBILITY_NOTIFY_MASK);
 
+#ifndef HAVE_PGTK
   /* Must realize the windows so the X window gets created.  It is used
      by callers of this function.  */
   gtk_widget_realize (wfixed);
   FRAME_X_WINDOW (f) = GTK_WIDGET_TO_X_WIN (wfixed);
   initial_set_up_x_back_buffer (f);
+#endif
 
   /* Since GTK clears its window by filling with the background color,
      we must keep X and GTK background in sync.  */
@@ -1358,8 +1608,12 @@ xg_create_frame_widgets (struct frame *f)
   /* Must use g_strdup because gtk_widget_modify_style does g_free.  */
   style->bg_pixmap_name[GTK_STATE_NORMAL] = g_strdup ("<none>");
   gtk_widget_modify_style (wfixed, style);
+  gtk_widget_set_can_focus (wfixed, TRUE);
 #else
   gtk_widget_set_can_focus (wfixed, TRUE);
+#ifdef HAVE_PGTK
+  gtk_widget_grab_focus (wfixed);
+#endif
   gtk_window_set_resizable (GTK_WINDOW (wtop), TRUE);
 #endif
 
@@ -1372,12 +1626,30 @@ xg_create_frame_widgets (struct frame *f)
     }
 
   /* Steal a tool tip window we can move ourselves.  */
-  f->output_data.x->ttip_widget = 0;
-  f->output_data.x->ttip_lbl = 0;
-  f->output_data.x->ttip_window = 0;
+  f->output_data.xp->ttip_widget = 0;
+  f->output_data.xp->ttip_lbl = 0;
+  f->output_data.xp->ttip_window = 0;
+#ifndef HAVE_PGTK
   gtk_widget_set_tooltip_text (wtop, "Dummy text");
   g_signal_connect (wtop, "query-tooltip", G_CALLBACK (qttip_cb), f);
 
+  imc = gtk_im_multicontext_new ();
+  g_object_ref (imc);
+  gtk_im_context_set_use_preedit (imc, TRUE);
+
+  g_signal_connect (G_OBJECT (imc), "commit",
+                   G_CALLBACK (xg_im_context_commit), f);
+  g_signal_connect (G_OBJECT (imc), "preedit-changed",
+                   G_CALLBACK (xg_im_context_preedit_changed), NULL);
+  g_signal_connect (G_OBJECT (imc), "preedit-end",
+                   G_CALLBACK (xg_im_context_preedit_end), NULL);
+  FRAME_X_OUTPUT (f)->im_context = imc;
+
+  g_signal_connect (G_OBJECT (wfixed), "key-press-event",
+                   G_CALLBACK (xg_widget_key_press_event_cb),
+                   NULL);
+#endif
+
   {
     GdkScreen *screen = gtk_widget_get_screen (wtop);
     GtkSettings *gs = gtk_settings_get_for_screen (screen);
@@ -1399,12 +1671,114 @@ xg_create_frame_widgets (struct frame *f)
   return 1;
 }
 
+#ifdef HAVE_PGTK
+void
+xg_create_frame_outer_widgets (struct frame *f)
+{
+  GtkWidget *wtop;
+  GtkWidget *wvbox, *whbox;
+  GtkWindowType type = GTK_WINDOW_TOPLEVEL;
+  char *title = 0;
+
+  block_input ();
+
+  wtop = gtk_window_new (type);
+  gtk_widget_add_events (wtop, GDK_ALL_EVENTS_MASK);
+
+  xg_set_screen (wtop, f);
+
+  wvbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+  whbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+  gtk_box_set_homogeneous (GTK_BOX (wvbox), FALSE);
+  gtk_box_set_homogeneous (GTK_BOX (whbox), FALSE);
+
+  /* Use same names as the Xt port does.  I.e. Emacs.pane.emacs by default */
+  gtk_widget_set_name (wtop, EMACS_CLASS);
+  gtk_widget_set_name (wvbox, "pane");
+
+  /* If this frame has a title or name, set it in the title bar.  */
+  if (! NILP (f->title))
+    title = SSDATA (ENCODE_UTF_8 (f->title));
+  else if (! NILP (f->name))
+    title = SSDATA (ENCODE_UTF_8 (f->name));
+
+  if (title)
+    gtk_window_set_title (GTK_WINDOW (wtop), title);
+
+  if (FRAME_UNDECORATED (f))
+    {
+      gtk_window_set_decorated (GTK_WINDOW (wtop), FALSE);
+      store_frame_param (f, Qundecorated, Qt);
+    }
+
+  FRAME_GTK_OUTER_WIDGET (f) = wtop;
+  f->output_data.xp->vbox_widget = wvbox;
+  f->output_data.xp->hbox_widget = whbox;
+
+  gtk_container_add (GTK_CONTAINER (wtop), wvbox);
+  gtk_box_pack_start (GTK_BOX (wvbox), whbox, TRUE, TRUE, 0);
+
+  if (FRAME_EXTERNAL_TOOL_BAR (f))
+    update_frame_tool_bar (f);
+
+#if ! GTK_CHECK_VERSION (3, 22, 0)
+  gtk_window_set_wmclass (GTK_WINDOW (wtop),
+                          SSDATA (Vx_resource_name),
+                          SSDATA (Vx_resource_class));
+#endif
+
+  /* Convert our geometry parameters into a geometry string
+     and specify it.
+     GTK will itself handle calculating the real position this way.  */
+  xg_set_geometry (f);
+  f->win_gravity
+    = gtk_window_get_gravity (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)));
+
+  gtk_window_set_resizable (GTK_WINDOW (wtop), TRUE);
+
+  if (FRAME_OVERRIDE_REDIRECT (f))
+    {
+      GdkWindow *gwin = gtk_widget_get_window (wtop);
+
+      if (gwin)
+       gdk_window_set_override_redirect (gwin, TRUE);
+    }
+
+  /* Steal a tool tip window we can move ourselves.  */
+  f->output_data.xp->ttip_widget = 0;
+  f->output_data.xp->ttip_lbl = 0;
+  f->output_data.xp->ttip_window = 0;
+#ifndef HAVE_PGTK
+  gtk_widget_set_tooltip_text (wtop, "Dummy text");
+  g_signal_connect (wtop, "query-tooltip", G_CALLBACK (qttip_cb), f);
+#endif
+
+  {
+    GdkScreen *screen = gtk_widget_get_screen (wtop);
+    GtkSettings *gs = gtk_settings_get_for_screen (screen);
+    /* Only connect this signal once per screen.  */
+    if (! g_signal_handler_find (G_OBJECT (gs),
+                                 G_SIGNAL_MATCH_FUNC,
+                                 0, 0, 0,
+                                 (gpointer) G_CALLBACK (style_changed_cb),
+                                 0))
+      {
+        g_signal_connect (G_OBJECT (gs), "notify::gtk-theme-name",
+                          G_CALLBACK (style_changed_cb),
+                          gdk_screen_get_display (screen));
+      }
+  }
+
+  unblock_input ();
+}
+#endif
+
 void
 xg_free_frame_widgets (struct frame *f)
 {
   if (FRAME_GTK_OUTER_WIDGET (f))
     {
-      struct x_output *x = f->output_data.x;
+      xp_output *x = f->output_data.xp;
       struct xg_frame_tb_info *tbinfo
         = g_object_get_data (G_OBJECT (FRAME_GTK_OUTER_WIDGET (f)),
                              TB_INFO_KEY);
@@ -1412,10 +1786,15 @@ xg_free_frame_widgets (struct frame *f)
         xfree (tbinfo);
 
       /* x_free_frame_resources should have taken care of it */
+#ifndef HAVE_PGTK
       eassert (!FRAME_X_DOUBLE_BUFFERED_P (f));
+      g_object_unref (FRAME_X_OUTPUT (f)->im_context);
+#endif
       gtk_widget_destroy (FRAME_GTK_OUTER_WIDGET (f));
       FRAME_X_WINDOW (f) = 0; /* Set to avoid XDestroyWindow in xterm.c */
+#ifndef HAVE_PGTK
       FRAME_X_RAW_DRAWABLE (f) = 0;
+#endif
       FRAME_GTK_OUTER_WIDGET (f) = 0;
       if (x->ttip_widget)
         {
@@ -1457,9 +1836,12 @@ x_wm_set_size_hint (struct frame *f, long int flags, 
bool user_position)
 
   XSETFRAME (frame, f);
   fs_state = Fframe_parameter (frame, Qfullscreen);
-  if ((EQ (fs_state, Qmaximized) || EQ (fs_state, Qfullboth)) &&
-      (x_wm_supports (f, FRAME_DISPLAY_INFO (f)->Xatom_net_wm_state) ||
-       x_wm_supports (f, FRAME_DISPLAY_INFO 
(f)->Xatom_net_wm_state_fullscreen)))
+  if ((EQ (fs_state, Qmaximized) || EQ (fs_state, Qfullboth))
+#ifndef HAVE_PGTK
+      && (x_wm_supports (f, FRAME_DISPLAY_INFO (f)->Xatom_net_wm_state) ||
+         x_wm_supports (f, FRAME_DISPLAY_INFO 
(f)->Xatom_net_wm_state_fullscreen))
+#endif
+      )
     {
       /* Don't set hints when maximized or fullscreen.  Apparently KWin and
          Gtk3 don't get along and the frame shrinks (!).
@@ -1470,14 +1852,14 @@ x_wm_set_size_hint (struct frame *f, long int flags, 
bool user_position)
   if (flags)
     {
       memset (&size_hints, 0, sizeof (size_hints));
-      f->output_data.x->size_hints = size_hints;
-      f->output_data.x->hint_flags = hint_flags;
+      f->output_data.xp->size_hints = size_hints;
+      f->output_data.xp->hint_flags = hint_flags;
     }
   else
     flags = f->size_hint_flags;
 
-  size_hints = f->output_data.x->size_hints;
-  hint_flags = f->output_data.x->hint_flags;
+  size_hints = f->output_data.xp->size_hints;
+  hint_flags = f->output_data.xp->hint_flags;
 
   hint_flags |= GDK_HINT_RESIZE_INC | GDK_HINT_MIN_SIZE;
   size_hints.width_inc = frame_resize_pixelwise ? 1 : FRAME_COLUMN_WIDTH (f);
@@ -1539,16 +1921,16 @@ x_wm_set_size_hint (struct frame *f, long int flags, 
bool user_position)
   size_hints.width_inc /= scale;
   size_hints.height_inc /= scale;
 
-  if (hint_flags != f->output_data.x->hint_flags
+  if (hint_flags != f->output_data.xp->hint_flags
       || memcmp (&size_hints,
-                &f->output_data.x->size_hints,
+                &f->output_data.xp->size_hints,
                 sizeof (size_hints)) != 0)
     {
       block_input ();
       gtk_window_set_geometry_hints (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
                                      NULL, &size_hints, hint_flags);
-      f->output_data.x->size_hints = size_hints;
-      f->output_data.x->hint_flags = hint_flags;
+      f->output_data.xp->size_hints = size_hints;
+      f->output_data.xp->hint_flags = hint_flags;
       unblock_input ();
     }
 }
@@ -1588,6 +1970,10 @@ xg_set_background_color (struct frame *f, unsigned long 
bg)
 void
 xg_set_undecorated (struct frame *f, Lisp_Object undecorated)
 {
+#ifdef HAVE_PGTK
+  if (!FRAME_GTK_OUTER_WIDGET (f))
+    return;
+#endif
   if (FRAME_GTK_WIDGET (f))
     {
       block_input ();
@@ -1614,7 +2000,11 @@ xg_frame_restack (struct frame *f1, struct frame *f2, 
bool above_flag)
       XSETFRAME (frame2, f2);
 
       gdk_window_restack (gwin1, gwin2, above_flag);
+#ifndef HAVE_PGTK
       x_sync (f1);
+#else
+      gdk_flush ();
+#endif
     }
   unblock_input ();
 }
@@ -1625,10 +2015,17 @@ void
 xg_set_skip_taskbar (struct frame *f, Lisp_Object skip_taskbar)
 {
   block_input ();
+#ifndef HAVE_PGTK
   if (FRAME_GTK_WIDGET (f))
     gdk_window_set_skip_taskbar_hint
       (gtk_widget_get_window (FRAME_GTK_OUTER_WIDGET (f)),
        NILP (skip_taskbar) ? FALSE : TRUE);
+#else
+  if (FRAME_GTK_OUTER_WIDGET (f))
+    gdk_window_set_skip_taskbar_hint
+      (gtk_widget_get_window (FRAME_GTK_OUTER_WIDGET (f)),
+       NILP (skip_taskbar) ? FALSE : TRUE);
+#endif
   unblock_input ();
 }
 
@@ -1637,6 +2034,10 @@ xg_set_skip_taskbar (struct frame *f, Lisp_Object 
skip_taskbar)
 void
 xg_set_no_focus_on_map (struct frame *f, Lisp_Object no_focus_on_map)
 {
+#ifdef HAVE_PGTK
+  if (!FRAME_GTK_OUTER_WIDGET (f))
+    return;
+#endif
   block_input ();
   if (FRAME_GTK_WIDGET (f))
     {
@@ -1652,12 +2053,19 @@ xg_set_no_focus_on_map (struct frame *f, Lisp_Object 
no_focus_on_map)
 void
 xg_set_no_accept_focus (struct frame *f, Lisp_Object no_accept_focus)
 {
+  gboolean g_no_accept_focus = NILP (no_accept_focus) ? TRUE : FALSE;
+#ifdef HAVE_PGTK
+  if (!FRAME_GTK_OUTER_WIDGET (f))
+    {
+      if (FRAME_WIDGET (f))
+       gtk_widget_set_can_focus (FRAME_WIDGET (f), g_no_accept_focus);
+      return;
+    }
+#endif
   block_input ();
   if (FRAME_GTK_WIDGET (f))
     {
       GtkWindow *gwin = GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f));
-      gboolean g_no_accept_focus = NILP (no_accept_focus) ? TRUE : FALSE;
-
       gtk_window_set_accept_focus (gwin, g_no_accept_focus);
     }
   unblock_input ();
@@ -1678,18 +2086,24 @@ xg_set_override_redirect (struct frame *f, Lisp_Object 
override_redirect)
   unblock_input ();
 }
 
+#ifndef HAVE_PGTK
 /* Set the frame icon to ICON_PIXMAP/MASK.  This must be done with GTK
    functions so GTK does not overwrite the icon.  */
 
 void
 xg_set_frame_icon (struct frame *f, Pixmap icon_pixmap, Pixmap icon_mask)
 {
+#ifdef HAVE_PGTK
+  if (!FRAME_GTK_OUTER_WIDGET (f))
+    return;
+#endif
   GdkPixbuf *gp = xg_get_pixbuf_from_pix_and_mask (f,
                                                    icon_pixmap,
                                                    icon_mask);
   if (gp)
     gtk_window_set_icon (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)), gp);
 }
+#endif
 
 
 
@@ -2226,6 +2640,11 @@ xg_get_file_name (struct frame *f,
   int filesel_done = 0;
   xg_get_file_func func;
 
+#ifdef HAVE_PGTK
+  if (!FRAME_GTK_OUTER_WIDGET (f))
+    error ("Can't open dialog from child frames");
+#endif
+
 #ifdef HAVE_GTK_FILE_SELECTION_NEW
 
   if (xg_uses_old_file_dialog ())
@@ -2323,6 +2742,11 @@ xg_get_font (struct frame *f, const char *default_name)
   int done = 0;
   Lisp_Object font = Qnil;
 
+#ifdef HAVE_PGTK
+  if (!FRAME_GTK_OUTER_WIDGET (f))
+    error ("Can't open dialog from child frames");
+#endif
+
   w = gtk_font_chooser_dialog_new
     ("Pick a font", GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)));
 
@@ -2520,7 +2944,7 @@ xg_mark_data (void)
     {
       struct frame *f = XFRAME (frame);
 
-      if (FRAME_X_P (f) && FRAME_GTK_OUTER_WIDGET (f))
+      if ((FRAME_X_P (f) || FRAME_PGTK_P (f)) && FRAME_GTK_OUTER_WIDGET (f))
         {
           struct xg_frame_tb_info *tbinfo
             = g_object_get_data (G_OBJECT (FRAME_GTK_OUTER_WIDGET (f)),
@@ -2532,6 +2956,16 @@ xg_mark_data (void)
             }
         }
     }
+
+#ifndef HAVE_PGTK
+  if (xg_pending_quit_event.kind != NO_EVENT)
+    {
+      eassert (xg_pending_quit_event.kind == ASCII_KEYSTROKE_EVENT);
+
+      mark_object (xg_pending_quit_event.frame_or_window);
+      mark_object (xg_pending_quit_event.arg);
+    }
+#endif
 }
 
 /* Callback called when a menu item is destroyed.  Used to free data.
@@ -2684,6 +3118,11 @@ make_menu_item (const char *utf8_label,
   if (wtoadd) gtk_container_add (GTK_CONTAINER (w), wtoadd);
   if (! item->enabled) gtk_widget_set_sensitive (w, FALSE);
 
+#ifdef HAVE_PGTK
+  if (!NILP (item->help))
+    gtk_widget_set_tooltip_text (w, SSDATA (item->help));
+#endif
+
   return w;
 }
 
@@ -2750,6 +3189,20 @@ xg_create_one_menuitem (widget_value *item,
   return w;
 }
 
+#ifdef HAVE_PGTK
+static gboolean
+menu_bar_button_pressed_cb (GtkWidget *widget, GdkEvent *event,
+                           gpointer user_data)
+{
+  struct frame *f = user_data;
+
+  if (event->button.button < 4)
+    set_frame_menubar (f, true);
+
+  return false;
+}
+#endif
+
 /* Create a full menu tree specified by DATA.
    F is the frame the created menu belongs to.
    SELECT_CB is the callback to use when a menu item is selected.
@@ -2807,6 +3260,10 @@ create_menus (widget_value *data,
       else
         {
           wmenu = gtk_menu_bar_new ();
+#ifdef HAVE_PGTK
+         g_signal_connect (G_OBJECT (wmenu), "button-press-event",
+                           G_CALLBACK (menu_bar_button_pressed_cb), f);
+#endif
           /* Set width of menu bar to a small value so it doesn't enlarge
              a small initial frame size.  The width will be set to the
              width of the frame later on when it is added to a container.
@@ -2823,9 +3280,15 @@ create_menus (widget_value *data,
       if (name)
         gtk_widget_set_name (wmenu, name);
 
+#ifndef HAVE_PGTK
       if (deactivate_cb)
         g_signal_connect (G_OBJECT (wmenu),
                           "selection-done", deactivate_cb, 0);
+#else
+      if (deactivate_cb)
+        g_signal_connect (G_OBJECT (wmenu),
+                          "deactivate", deactivate_cb, 0);
+#endif
     }
 
   for (item = data; item; item = item->next)
@@ -3547,7 +4010,7 @@ menubar_map_cb (GtkWidget *w, gpointer user_data)
 void
 xg_update_frame_menubar (struct frame *f)
 {
-  struct x_output *x = f->output_data.x;
+  xp_output *x = f->output_data.xp;
   GtkRequisition req;
 
   if (!x->menubar_widget || gtk_widget_get_mapped (x->menubar_widget))
@@ -3580,7 +4043,7 @@ xg_update_frame_menubar (struct frame *f)
 void
 free_frame_menubar (struct frame *f)
 {
-  struct x_output *x = f->output_data.x;
+  xp_output *x = f->output_data.xp;
 
   if (x->menubar_widget)
     {
@@ -3596,6 +4059,7 @@ free_frame_menubar (struct frame *f)
     }
 }
 
+#ifndef HAVE_PGTK
 bool
 xg_event_is_for_menubar (struct frame *f, const XEvent *event)
 {
@@ -3612,7 +4076,7 @@ xg_event_is_for_menubar (struct frame *f, const XEvent 
*event)
 
 #ifdef HAVE_XINPUT2
   XIDeviceEvent *xev = (XIDeviceEvent *) event->xcookie.data;
-  if (event->type == GenericEvent) /* XI_ButtonPress or XI_ButtonRelease */
+  if (event->type == GenericEvent) /* XI_ButtonPress or XI_ButtonRelease or a 
touch event.  */
     {
       if (! (xev->event_x >= 0
             && xev->event_x < FRAME_PIXEL_WIDTH (f)
@@ -3649,8 +4113,21 @@ xg_event_is_for_menubar (struct frame *f, const XEvent 
*event)
   list = gtk_container_get_children (GTK_CONTAINER (x->menubar_widget));
   if (! list) return 0;
   int scale = xg_get_scale (f);
-  rec.x = event->xbutton.x / scale;
-  rec.y = event->xbutton.y / scale;
+#ifdef HAVE_XINPUT2
+  if (event->type == GenericEvent)
+    {
+      rec.x = xev->event_x / scale;
+      rec.y = xev->event_y / scale;
+    }
+  else
+    {
+#else
+      rec.x = event->xbutton.x / scale;
+      rec.y = event->xbutton.y / scale;
+#endif
+#ifdef HAVE_XINPUT2
+    }
+#endif
   rec.width = 1;
   rec.height = 1;
 
@@ -3663,6 +4140,7 @@ xg_event_is_for_menubar (struct frame *f, const XEvent 
*event)
   g_list_free (list);
   return iter != 0;
 }
+#endif
 
 
 
@@ -3818,6 +4296,7 @@ xg_get_default_scrollbar_height (struct frame *f)
   return scroll_bar_width_for_theme * xg_get_scale (f);
 }
 
+#ifndef HAVE_PGTK
 /* Return the scrollbar id for X Window WID on display DPY.
    Return -1 if WID not in id_to_widget.  */
 
@@ -3838,6 +4317,7 @@ xg_get_scroll_id_for_window (Display *dpy, Window wid)
 
   return -1;
 }
+#endif
 
 /* Callback invoked when scroll bar WIDGET is destroyed.
    DATA is the index into id_to_widget for WIDGET.
@@ -3887,7 +4367,7 @@ xg_finish_scroll_bar_creation (struct frame *f,
      also, which causes flicker.  Put an event box between the edit widget
      and the scroll bar, so the scroll bar instead draws itself on the
      event box window.  */
-  gtk_fixed_put (GTK_FIXED (f->output_data.x->edit_widget), webox, -1, -1);
+  gtk_fixed_put (GTK_FIXED (f->output_data.xp->edit_widget), webox, -1, -1);
   gtk_container_add (GTK_CONTAINER (webox), wscroll);
 
   xg_set_widget_bg (f, webox, FRAME_BACKGROUND_PIXEL (f));
@@ -3897,11 +4377,28 @@ xg_finish_scroll_bar_creation (struct frame *f,
      real X window, it and its scroll-bar child try to draw on the
      Emacs main window, which we draw over using Xlib.  */
   gtk_widget_realize (webox);
+#ifdef HAVE_PGTK
+  gtk_widget_show_all (webox);
+#endif
+#ifndef HAVE_PGTK
   GTK_WIDGET_TO_X_WIN (webox);
+#endif
 
   /* Set the cursor to an arrow.  */
   xg_set_cursor (webox, FRAME_DISPLAY_INFO (f)->xg_cursor);
 
+#ifdef HAVE_PGTK
+  GtkStyleContext *ctxt = gtk_widget_get_style_context (wscroll);
+  gtk_style_context_add_provider (ctxt,
+                                 GTK_STYLE_PROVIDER (FRAME_OUTPUT_DATA (f)->
+                                                     
scrollbar_foreground_css_provider),
+                                 GTK_STYLE_PROVIDER_PRIORITY_USER);
+  gtk_style_context_add_provider (ctxt,
+                                 GTK_STYLE_PROVIDER (FRAME_OUTPUT_DATA (f)->
+                                                     
scrollbar_background_css_provider),
+                                 GTK_STYLE_PROVIDER_PRIORITY_USER);
+#endif
+
   bar->x_window = scroll_id;
 }
 
@@ -4002,7 +4499,7 @@ xg_update_scrollbar_pos (struct frame *f,
   GtkWidget *wscroll = xg_get_widget_from_map (scrollbar_id);
   if (wscroll)
     {
-      GtkWidget *wfixed = f->output_data.x->edit_widget;
+      GtkWidget *wfixed = f->output_data.xp->edit_widget;
       GtkWidget *wparent = gtk_widget_get_parent (wscroll);
       gint msl;
       int scale = xg_get_scale (f);
@@ -4042,7 +4539,11 @@ xg_update_scrollbar_pos (struct frame *f,
           /* Clear under old scroll bar position.  */
           oldw += (scale - 1) * oldw;
          oldx -= (scale - 1) * oldw;
+#ifndef HAVE_PGTK
           x_clear_area (f, oldx, oldy, oldw, oldh);
+#else
+          pgtk_clear_area (f, oldx, oldy, oldw, oldh);
+#endif
         }
 
       if (!hidden)
@@ -4050,15 +4551,23 @@ xg_update_scrollbar_pos (struct frame *f,
          GtkWidget *scrollbar = xg_get_widget_from_map (scrollbar_id);
          GtkWidget *webox = gtk_widget_get_parent (scrollbar);
 
+#ifndef HAVE_PGTK
          /* Don't obscure any child frames.  */
          XLowerWindow (FRAME_X_DISPLAY (f), GTK_WIDGET_TO_X_WIN (webox));
+#else
+         gdk_window_lower (gtk_widget_get_window (webox));
+#endif
        }
 
       /* GTK does not redraw until the main loop is entered again, but
          if there are no X events pending we will not enter it.  So we sync
          here to get some events.  */
 
+#ifndef HAVE_PGTK
       x_sync (f);
+#else
+      gdk_flush ();
+#endif
       SET_FRAME_GARBAGED (f);
       cancel_mouse_face (f);
     }
@@ -4083,7 +4592,7 @@ xg_update_horizontal_scrollbar_pos (struct frame *f,
 
   if (wscroll)
     {
-      GtkWidget *wfixed = f->output_data.x->edit_widget;
+      GtkWidget *wfixed = f->output_data.xp->edit_widget;
       GtkWidget *wparent = gtk_widget_get_parent (wscroll);
       gint msl;
       int scale = xg_get_scale (f);
@@ -4119,7 +4628,11 @@ xg_update_horizontal_scrollbar_pos (struct frame *f,
         }
       if (oldx != -1 && oldw > 0 && oldh > 0)
         /* Clear under old scroll bar position.  */
+#ifndef HAVE_PGTK
         x_clear_area (f, oldx, oldy, oldw, oldh);
+#else
+        pgtk_clear_area (f, oldx, oldy, oldw, oldh);
+#endif
 
       /* GTK does not redraw until the main loop is entered again, but
          if there are no X events pending we will not enter it.  So we sync
@@ -4130,11 +4643,19 @@ xg_update_horizontal_scrollbar_pos (struct frame *f,
          xg_get_widget_from_map (scrollbar_id);
        GtkWidget *webox = gtk_widget_get_parent (scrollbar);
 
+#ifndef HAVE_PGTK
        /* Don't obscure any child frames.  */
        XLowerWindow (FRAME_X_DISPLAY (f), GTK_WIDGET_TO_X_WIN (webox));
+#else
+       gdk_window_lower (gtk_widget_get_window (webox));
+#endif
       }
 
+#ifndef HAVE_PGTK
       x_sync (f);
+#else
+      gdk_flush ();
+#endif
       SET_FRAME_GARBAGED (f);
       cancel_mouse_face (f);
     }
@@ -4278,7 +4799,7 @@ xg_set_toolkit_horizontal_scroll_bar_thumb (struct 
scroll_bar *bar,
    frame.  This function does additional checks.  */
 
 bool
-xg_event_is_for_scrollbar (struct frame *f, const XEvent *event)
+xg_event_is_for_scrollbar (struct frame *f, const EVENT *event)
 {
   bool retval = 0;
 
@@ -4294,11 +4815,21 @@ xg_event_is_for_scrollbar (struct frame *f, const 
XEvent *event)
            || (event->type == ButtonPress
                && event->xbutton.button < 4)))
 #else
-  if (f && event->type == ButtonPress && event->xbutton.button < 4)
+  if (f
+#ifndef HAVE_PGTK
+      && event->type == ButtonPress && event->xbutton.button < 4
+#else
+      && event->type == GDK_BUTTON_PRESS && event->button.button < 4
+#endif
+      )
 #endif /* HAVE_XINPUT2 */
     {
       /* Check if press occurred outside the edit widget.  */
+#ifndef HAVE_PGTK
       GdkDisplay *gdpy = gdk_x11_lookup_xdisplay (FRAME_X_DISPLAY (f));
+#else
+      GdkDisplay *gdpy = FRAME_X_DISPLAY (f);
+#endif
       GdkWindow *gwin;
 #ifdef HAVE_GTK3
 #if GTK_CHECK_VERSION (3, 20, 0)
@@ -4312,7 +4843,13 @@ xg_event_is_for_scrollbar (struct frame *f, const XEvent 
*event)
 #else
       gwin = gdk_display_get_window_at_pointer (gdpy, NULL, NULL);
 #endif
-      retval = gwin != gtk_widget_get_window (f->output_data.x->edit_widget);
+#ifndef HAVE_XINPUT2
+      retval = gwin != gtk_widget_get_window (f->output_data.xp->edit_widget);
+#else
+      retval = (gwin
+               && (gwin
+                   != gtk_widget_get_window (f->output_data.xp->edit_widget)));
+#endif
 #ifdef HAVE_XINPUT2
       GtkWidget *grab = gtk_grab_get_current ();
       if (event->type == GenericEvent
@@ -4333,8 +4870,14 @@ xg_event_is_for_scrollbar (struct frame *f, const XEvent 
*event)
                     || event->type == MotionNotify)))
 #else
   else if (f
+#ifndef HAVE_PGTK
            && ((event->type == ButtonRelease && event->xbutton.button < 4)
-               || event->type == MotionNotify))
+               || event->type == MotionNotify)
+#else
+           && ((event->type == GDK_BUTTON_RELEASE && event->button.button < 4)
+               || event->type == GDK_MOTION_NOTIFY)
+#endif
+          )
 #endif /* HAVE_XINPUT2 */
     {
       /* If we are releasing or moving the scroll bar, it has the grab.  */
@@ -4413,7 +4956,11 @@ draw_page (GtkPrintOperation *operation, GtkPrintContext 
*context,
   struct frame *f = XFRAME (Fnth (make_fixnum (page_nr), frames));
   cairo_t *cr = gtk_print_context_get_cairo_context (context);
 
+#ifndef HAVE_PGTK
   x_cr_draw_frame (cr, f);
+#else
+  pgtk_cr_draw_frame (cr, f);
+#endif
 }
 
 void
@@ -4514,7 +5061,11 @@ xg_tool_bar_callback (GtkWidget *w, gpointer client_data)
   /* Convert between the modifier bits GDK uses and the modifier bits
      Emacs uses.  This assumes GDK and X masks are the same, which they are 
when
      this is written.  */
+#ifndef HAVE_PGTK
   event.modifiers = x_x_to_emacs_modifiers (FRAME_DISPLAY_INFO (f), mod);
+#else
+  event.modifiers = pgtk_gtk_to_emacs_modifiers (FRAME_DISPLAY_INFO (f), mod);
+#endif
   kbd_buffer_store_event (&event);
 
   /* Return focus to the frame after we have clicked on a detached
@@ -4611,7 +5162,7 @@ xg_tool_bar_item_expose_callback (GtkWidget *w,
 static void
 xg_pack_tool_bar (struct frame *f, Lisp_Object pos)
 {
-  struct x_output *x = f->output_data.x;
+  xp_output *x = f->output_data.xp;
   bool into_hbox = EQ (pos, Qleft) || EQ (pos, Qright);
   GtkWidget *top_widget = x->toolbar_widget;
 
@@ -4667,7 +5218,7 @@ tb_size_cb (GtkWidget    *widget,
 static void
 xg_create_tool_bar (struct frame *f)
 {
-  struct x_output *x = f->output_data.x;
+  xp_output *x = f->output_data.xp;
 #ifdef HAVE_GTK3
   GtkStyleContext *gsty;
 #endif
@@ -4906,7 +5457,7 @@ xg_tool_item_stale_p (GtkWidget *wbutton, const char 
*stock_name,
 static bool
 xg_update_tool_bar_sizes (struct frame *f)
 {
-  struct x_output *x = f->output_data.x;
+  xp_output *x = f->output_data.xp;
   GtkRequisition req;
   int nl = 0, nr = 0, nt = 0, nb = 0;
   GtkWidget *top_widget = x->toolbar_widget;
@@ -4992,7 +5543,7 @@ void
 update_frame_tool_bar (struct frame *f)
 {
   int i, j;
-  struct x_output *x = f->output_data.x;
+  xp_output *x = f->output_data.xp;
   int hmargin = 0, vmargin = 0;
   GtkToolbar *wtoolbar;
   GtkToolItem *ti;
@@ -5007,6 +5558,11 @@ update_frame_tool_bar (struct frame *f)
   if (! FRAME_GTK_WIDGET (f))
     return;
 
+#ifdef HAVE_PGTK
+  if (! FRAME_GTK_OUTER_WIDGET (f))
+    return;
+#endif
+
   block_input ();
 
   if (RANGED_FIXNUMP (1, Vtool_bar_button_margin, INT_MAX))
@@ -5302,7 +5858,7 @@ update_frame_tool_bar (struct frame *f)
 void
 free_frame_tool_bar (struct frame *f)
 {
-  struct x_output *x = f->output_data.x;
+  xp_output *x = f->output_data.xp;
 
   if (x->toolbar_widget)
     {
@@ -5347,7 +5903,7 @@ free_frame_tool_bar (struct frame *f)
 void
 xg_change_toolbar_position (struct frame *f, Lisp_Object pos)
 {
-  struct x_output *x = f->output_data.x;
+  xp_output *x = f->output_data.xp;
   GtkWidget *top_widget = x->toolbar_widget;
 
   if (! x->toolbar_widget || ! top_widget)
@@ -5445,4 +6001,355 @@ xg_initialize (void)
 #endif
 }
 
+#ifndef HAVE_PGTK
+static void
+xg_add_virtual_mods (struct x_display_info *dpyinfo, GdkEventKey *key)
+{
+  guint modifiers = key->state;
+
+  if (modifiers & dpyinfo->meta_mod_mask)
+    {
+      /* GDK always assumes Mod1 is alt, but that's no reason for
+        us to make that mistake as well.  */
+      if (!dpyinfo->alt_mod_mask)
+       key->state |= GDK_MOD1_MASK;
+      else
+       key->state |= GDK_META_MASK;
+    }
+
+  if (modifiers & dpyinfo->alt_mod_mask)
+    key->state |= GDK_MOD1_MASK;
+  if (modifiers & dpyinfo->super_mod_mask)
+    key->state |= GDK_SUPER_MASK;
+  if (modifiers & dpyinfo->hyper_mod_mask)
+    key->state |= GDK_HYPER_MASK;
+}
+
+static unsigned int
+xg_virtual_mods_to_x (struct x_display_info *dpyinfo, guint virtual)
+{
+  unsigned int modifiers = virtual & ~(GDK_SUPER_MASK
+                                      | GDK_META_MASK
+                                      | GDK_HYPER_MASK
+                                      | GDK_MOD2_MASK
+                                      | GDK_MOD3_MASK
+                                      | GDK_MOD4_MASK
+                                      | GDK_MOD5_MASK);
+
+  if (virtual & GDK_META_MASK)
+    modifiers |= dpyinfo->meta_mod_mask;
+  if (virtual & GDK_SUPER_MASK)
+    modifiers |= dpyinfo->super_mod_mask;
+  if (virtual & GDK_HYPER_MASK)
+    modifiers |= dpyinfo->hyper_mod_mask;
+
+  return modifiers;
+}
+
+static void
+xg_im_context_commit (GtkIMContext *imc, gchar *str,
+                     gpointer user_data)
+{
+  struct frame *f = user_data;
+  struct input_event ie;
+  gunichar *ucs4_str;
+
+  ucs4_str = g_utf8_to_ucs4_fast (str, -1, NULL);
+
+  if (!ucs4_str)
+    return;
+
+  for (gunichar *c = ucs4_str; *c; c++)
+    {
+      EVENT_INIT (ie);
+      ie.kind = (SINGLE_BYTE_CHAR_P (*c)
+                ? ASCII_KEYSTROKE_EVENT
+                : MULTIBYTE_CHAR_KEYSTROKE_EVENT);
+      ie.arg = Qnil;
+      ie.code = *c;
+      XSETFRAME (ie.frame_or_window, f);
+      ie.modifiers = 0;
+      ie.timestamp = 0;
+
+      kbd_buffer_store_event (&ie);
+    }
+
+  g_free (ucs4_str);
+}
+
+static void
+xg_im_context_preedit_changed (GtkIMContext *imc, gpointer user_data)
+{
+  PangoAttrList *list;
+  gchar *str;
+  gint cursor;
+  struct input_event inev;
+
+  gtk_im_context_get_preedit_string (imc, &str, &list, &cursor);
+
+  EVENT_INIT (inev);
+  inev.kind = PREEDIT_TEXT_EVENT;
+  inev.arg = build_string_from_utf8 (str);
+
+  if (SCHARS (inev.arg))
+    Fput_text_property (make_fixnum (min (SCHARS (inev.arg) - 1,
+                                         max (0, cursor))),
+                       make_fixnum (min (SCHARS (inev.arg),
+                                         max (0, cursor) + 1)),
+                       Qcursor, Qt, inev.arg);
+
+  kbd_buffer_store_event (&inev);
+
+  g_free (str);
+  pango_attr_list_unref (list);
+}
+
+static void
+xg_im_context_preedit_end (GtkIMContext *imc, gpointer user_data)
+{
+  struct input_event inev;
+
+  EVENT_INIT (inev);
+  inev.kind = PREEDIT_TEXT_EVENT;
+  inev.arg = Qnil;
+  kbd_buffer_store_event (&inev);
+}
+
+static bool
+xg_widget_key_press_event_cb (GtkWidget *widget, GdkEvent *event,
+                             gpointer user_data)
+{
+  Lisp_Object tail, tem;
+  struct frame *f = NULL;
+  union buffered_input_event inev;
+  guint keysym = event->key.keyval;
+  unsigned int xstate;
+  gunichar uc;
+
+  FOR_EACH_FRAME (tail, tem)
+    {
+      if (FRAME_X_P (XFRAME (tem))
+         && (FRAME_GTK_WIDGET (XFRAME (tem)) == widget))
+       {
+         f = XFRAME (tem);
+         break;
+       }
+    }
+
+  if (!f)
+    return true;
+
+  if (!x_gtk_use_native_input
+      && !FRAME_DISPLAY_INFO (f)->prefer_native_input)
+    return true;
+
+  EVENT_INIT (inev.ie);
+  XSETFRAME (inev.ie.frame_or_window, f);
+
+  xstate = xg_virtual_mods_to_x (FRAME_DISPLAY_INFO (f),
+                                event->key.state);
+
+  inev.ie.modifiers
+    |= x_x_to_emacs_modifiers (FRAME_DISPLAY_INFO (f), xstate);
+
+  if (event->key.is_modifier)
+    goto done;
+
+  /* First deal with keysyms which have defined
+     translations to characters.  */
+  if (keysym >= 32 && keysym < 128)
+    /* Avoid explicitly decoding each ASCII character.  */
+    {
+      inev.ie.kind = ASCII_KEYSTROKE_EVENT;
+      inev.ie.code = keysym;
+      goto done;
+    }
+
+  /* Keysyms directly mapped to Unicode characters.  */
+  if (keysym >= 0x01000000 && keysym <= 0x0110FFFF)
+    {
+      if (keysym < 0x01000080)
+       inev.ie.kind = ASCII_KEYSTROKE_EVENT;
+      else
+       inev.ie.kind = MULTIBYTE_CHAR_KEYSTROKE_EVENT;
+      inev.ie.code = keysym & 0xFFFFFF;
+      goto done;
+    }
+
+  /* Random non-modifier sorts of keysyms.  */
+  if (((keysym >= GDK_KEY_BackSpace && keysym <= GDK_KEY_Escape)
+       || keysym == GDK_KEY_Delete
+#ifdef GDK_KEY_ISO_Left_Tab
+       || (keysym >= GDK_KEY_ISO_Left_Tab && keysym <= GDK_KEY_ISO_Enter)
+#endif
+       || IsCursorKey (keysym) /* 0xff50 <= x < 0xff60 */
+       || IsMiscFunctionKey (keysym)   /* 0xff60 <= x < VARIES */
+#ifdef GDK_KEY_dead_circumflex
+       || keysym == GDK_KEY_dead_circumflex
+#endif
+#ifdef GDK_KEY_dead_grave
+       || keysym == GDK_KEY_dead_grave
+#endif
+#ifdef GDK_KEY_dead_tilde
+       || keysym == GDK_KEY_dead_tilde
+#endif
+#ifdef GDK_KEY_dead_diaeresis
+       || keysym == GDK_KEY_dead_diaeresis
+#endif
+#ifdef GDK_KEY_dead_macron
+       || keysym == GDK_KEY_dead_macron
+#endif
+#ifdef GDK_KEY_dead_degree
+       || keysym == GDK_KEY_dead_degree
+#endif
+#ifdef GDK_KEY_dead_acute
+       || keysym == GDK_KEY_dead_acute
+#endif
+#ifdef GDK_KEY_dead_cedilla
+       || keysym == GDK_KEY_dead_cedilla
+#endif
+#ifdef GDK_KEY_dead_breve
+       || keysym == GDK_KEY_dead_breve
+#endif
+#ifdef GDK_KEY_dead_ogonek
+       || keysym == GDK_KEY_dead_ogonek
+#endif
+#ifdef GDK_KEY_dead_caron
+       || keysym == GDK_KEY_dead_caron
+#endif
+#ifdef GDK_KEY_dead_doubleacute
+       || keysym == GDK_KEY_dead_doubleacute
+#endif
+#ifdef GDK_KEY_dead_abovedot
+       || keysym == GDK_KEY_dead_abovedot
+#endif
+       || IsKeypadKey (keysym) /* 0xff80 <= x < 0xffbe */
+       || IsFunctionKey (keysym)       /* 0xffbe <= x < 0xffe1 */
+       /* Any "vendor-specific" key is ok.  */
+       || (keysym & (1 << 28))))
+    {
+      inev.ie.kind = NON_ASCII_KEYSTROKE_EVENT;
+      inev.ie.code = keysym;
+      goto done;
+    }
+
+  uc = gdk_keyval_to_unicode (keysym);
+
+  if (uc)
+    {
+      inev.ie.kind = (SINGLE_BYTE_CHAR_P (uc)
+                     ? ASCII_KEYSTROKE_EVENT
+                     : MULTIBYTE_CHAR_KEYSTROKE_EVENT);
+      inev.ie.code = uc;
+    }
+  else
+    {
+      inev.ie.kind = NON_ASCII_KEYSTROKE_EVENT;
+      inev.ie.code = keysym;
+    }
+
+ done:
+  if (inev.ie.kind != NO_EVENT)
+    {
+      xg_pending_quit_event.kind = NO_EVENT;
+      kbd_buffer_store_buffered_event (&inev, &xg_pending_quit_event);
+    }
+
+#ifdef USABLE_SIGIO
+  raise (SIGIO);
+#endif
+  return true;
+}
+
+bool
+xg_filter_key (struct frame *frame, XEvent *xkey)
+{
+  GdkEvent *xg_event = gdk_event_new (GDK_KEY_PRESS);
+  GdkDisplay *dpy = gtk_widget_get_display (FRAME_GTK_WIDGET (frame));
+  GdkKeymap *keymap = gdk_keymap_get_for_display (dpy);
+  GdkModifierType consumed;
+  struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (frame);
+  bool result;
+
+  xg_event->any.window = gtk_widget_get_window (FRAME_GTK_WIDGET (frame));
+  g_object_ref (xg_event->any.window);
+
+#if GTK_CHECK_VERSION (3, 20, 0)
+  GdkSeat *seat = gdk_display_get_default_seat (dpy);
+
+  gdk_event_set_device (xg_event,
+                       gdk_seat_get_keyboard (seat));
+#elif GTK_CHECK_VERSION (3, 16, 0)
+  GdkDeviceManager *manager = gdk_display_get_device_manager (dpy);
+  GList *devices = gdk_device_manager_list_devices (manager,
+                                                   GDK_DEVICE_TYPE_MASTER);
+  GdkDevice *device;
+  GList *tem;
+  for (tem = devices; tem; tem = tem->next)
+    {
+      device = GDK_DEVICE (tem->data);
+
+      if (gdk_device_get_source (device) == GDK_SOURCE_KEYBOARD)
+       {
+         gdk_event_set_device (xg_event, device);
+         break;
+       }
+    }
+
+  g_list_free (devices);
+#endif
+
+#ifdef HAVE_XINPUT2
+  if (xkey->type != GenericEvent)
+    {
+#endif
+      xg_event->key.hardware_keycode = xkey->xkey.keycode;
+
+#ifdef HAVE_XKB
+      if (dpyinfo->supports_xkb)
+       xg_event->key.group = XkbGroupForCoreState (xkey->xkey.state);
+#endif
+      xg_event->key.state = xkey->xkey.state;
+      gdk_keymap_translate_keyboard_state (keymap,
+                                          xkey->xkey.keycode,
+                                          xkey->xkey.state,
+                                          xg_event->key.group,
+                                          &xg_event->key.keyval,
+                                          NULL, NULL, &consumed);
+      xg_add_virtual_mods (dpyinfo, &xg_event->key);
+      xg_event->key.state &= ~consumed;
+#if GTK_CHECK_VERSION (3, 6, 0)
+      xg_event->key.is_modifier = gdk_x11_keymap_key_is_modifier (keymap,
+                                                                 
xg_event->key.hardware_keycode);
+#endif
+#ifdef HAVE_XINPUT2
+    }
+  else
+    {
+      XIDeviceEvent *xev = (XIDeviceEvent *) xkey->xcookie.data;
+
+      xg_event->key.hardware_keycode = xev->detail;
+      xg_event->key.group = xev->group.effective;
+      xg_event->key.state = xev->mods.effective;
+      gdk_keymap_translate_keyboard_state (keymap,
+                                          xev->detail,
+                                          xev->mods.effective,
+                                          xg_event->key.group,
+                                          &xg_event->key.keyval,
+                                          NULL, NULL, &consumed);
+      xg_add_virtual_mods (dpyinfo, &xg_event->key);
+      xg_event->key.state &= ~consumed;
+      xg_event->key.is_modifier = gdk_x11_keymap_key_is_modifier (keymap,
+                                                                 
xg_event->key.hardware_keycode);
+    }
+#endif
+
+  result = gtk_im_context_filter_keypress (FRAME_X_OUTPUT (frame)->im_context,
+                                          &xg_event->key);
+
+  gdk_event_free (xg_event);
+
+  return result;
+}
+#endif
 #endif /* USE_GTK */
diff --git a/src/gtkutil.h b/src/gtkutil.h
index 95dd75b7fa..b74244d84d 100644
--- a/src/gtkutil.h
+++ b/src/gtkutil.h
@@ -1,6 +1,6 @@
 /* Definitions and headers for GTK widgets.
 
-Copyright (C) 2003-2021 Free Software Foundation, Inc.
+Copyright (C) 2003-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -25,7 +25,13 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 
 #include <gtk/gtk.h>
 #include "../lwlib/lwlib-widget.h"
+#ifdef HAVE_PGTK
+#include "pgtkterm.h"
+#define EVENT GdkEvent
+#else
 #include "xterm.h"
+#define EVENT XEvent
+#endif
 
 /* Minimum and maximum values used for GTK scroll bars  */
 
@@ -105,7 +111,7 @@ extern void xg_modify_menubar_widgets (GtkWidget *menubar,
 
 extern void xg_update_frame_menubar (struct frame *f);
 
-extern bool xg_event_is_for_menubar (struct frame *, const XEvent *);
+extern bool xg_event_is_for_menubar (struct frame *, const EVENT *);
 
 extern ptrdiff_t xg_get_scroll_id_for_window (Display *dpy, Window wid);
 
@@ -142,7 +148,7 @@ extern void xg_set_toolkit_horizontal_scroll_bar_thumb 
(struct scroll_bar *bar,
                                                        int portion,
                                                        int position,
                                                        int whole);
-extern bool xg_event_is_for_scrollbar (struct frame *, const XEvent *);
+extern bool xg_event_is_for_scrollbar (struct frame *, const EVENT *);
 extern int xg_get_default_scrollbar_width (struct frame *f);
 extern int xg_get_default_scrollbar_height (struct frame *f);
 
@@ -157,9 +163,15 @@ extern void xg_frame_set_char_size (struct frame *f, int 
width, int height);
 extern GtkWidget * xg_win_to_widget (Display *dpy, Window wdesc);
 
 extern int xg_get_scale (struct frame *f);
+#ifndef HAVE_PGTK
 extern void xg_display_open (char *display_name, Display **dpy);
 extern void xg_display_close (Display *dpy);
 extern GdkCursor * xg_create_default_cursor (Display *dpy);
+#else
+extern void xg_display_open (char *display_name, GdkDisplay **dpy);
+extern void xg_display_close (GdkDisplay *gdpy);
+extern GdkCursor * xg_create_default_cursor (GdkDisplay *gdpy);
+#endif
 
 extern bool xg_create_frame_widgets (struct frame *f);
 extern void xg_free_frame_widgets (struct frame *f);
@@ -167,10 +179,15 @@ extern void xg_set_background_color (struct frame *f, 
unsigned long bg);
 extern bool xg_check_special_colors (struct frame *f,
                                     const char *color_name,
                                     Emacs_Color *color);
+#ifdef HAVE_PGTK
+extern void xg_create_frame_outer_widgets (struct frame *f);
+#endif
 
+#ifndef HAVE_PGTK
 extern void xg_set_frame_icon (struct frame *f,
                                Pixmap icon_pixmap,
                                Pixmap icon_mask);
+#endif
 
 extern void xg_set_undecorated (struct frame *f, Lisp_Object undecorated);
 extern void xg_frame_restack (struct frame *f1, struct frame *f2, bool above);
@@ -183,7 +200,11 @@ extern bool xg_prepare_tooltip (struct frame *f,
                                Lisp_Object string,
                                int *width,
                                int *height);
+#ifndef HAVE_PGTK
 extern void xg_show_tooltip (struct frame *f, int root_x, int root_y);
+#else
+extern void xg_show_tooltip (struct frame *f, Lisp_Object string);
+#endif
 extern bool xg_hide_tooltip (struct frame *f);
 
 #ifdef USE_CAIRO
@@ -196,6 +217,10 @@ extern void xg_print_frames_dialog (Lisp_Object);
 extern bool xg_is_menu_window (Display *dpy, Window);
 #endif
 
+#ifndef HAVE_PGTK
+extern bool xg_filter_key (struct frame *frame, XEvent *xkey);
+#endif
+
 /* Mark all callback data that are Lisp_object:s during GC.  */
 extern void xg_mark_data (void);
 
diff --git a/src/haiku.c b/src/haiku.c
index 485d86983c..1c78601255 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 Free Software Foundation, Inc.
+   Copyright (C) 2021-2022 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 5b1eccfbe6..5d355ac205 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 Free Software Foundation, Inc.
+   Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -310,9 +310,10 @@ BView_DrawBitmapWithEraseOp (void *view, void *bitmap, int 
x,
   if (bm->ColorSpace () == B_GRAY1)
     {
       rgb_color low_color = vw->LowColor ();
-      for (int y = 0; y <= bc.Bounds ().Height (); ++y)
+      BRect bounds = bc.Bounds ();
+      for (int y = 0; y < BE_RECT_HEIGHT (bounds); ++y)
        {
-         for (int x = 0; x <= bc.Bounds ().Width (); ++x)
+         for (int x = 0; x <= BE_RECT_WIDTH (bounds); ++x)
            {
              if (bits[y * (stride / 4) + x] == 0xFF000000)
                bits[y * (stride / 4) + x] = RGB_COLOR_UINT32 (low_color);
@@ -336,11 +337,13 @@ BView_DrawMask (void *src, void *view,
 {
   BBitmap *source = (BBitmap *) src;
   BBitmap bm (source->Bounds (), B_RGBA32);
+  BRect bounds = bm.Bounds ();
+
   if (bm.InitCheck () != B_OK)
     return;
-  for (int y = 0; y <= bm.Bounds ().Height (); ++y)
+  for (int y = 0; y < BE_RECT_HEIGHT (bounds); ++y)
     {
-      for (int x = 0; x <= bm.Bounds ().Width (); ++x)
+      for (int x = 0; x < BE_RECT_WIDTH (bounds); ++x)
        {
          int bit = haiku_get_pixel ((void *) source, x, y);
 
@@ -364,8 +367,8 @@ rotate_bitmap_270 (BBitmap *bmp)
                             bmp->ColorSpace (), true);
   if (bm->InitCheck () != B_OK)
     gui_abort ("Failed to init bitmap for rotate");
-  int w = bmp->Bounds ().Width () + 1;
-  int h = bmp->Bounds ().Height () + 1;
+  int w = BE_RECT_WIDTH (r);
+  int h = BE_RECT_HEIGHT (r);
 
   for (int y = 0; y < h; ++y)
     for (int x = 0; x < w; ++x)
@@ -383,8 +386,8 @@ rotate_bitmap_90 (BBitmap *bmp)
                             bmp->ColorSpace (), true);
   if (bm->InitCheck () != B_OK)
     gui_abort ("Failed to init bitmap for rotate");
-  int w = bmp->Bounds ().Width () + 1;
-  int h = bmp->Bounds ().Height () + 1;
+  int w = BE_RECT_WIDTH (r);
+  int h = BE_RECT_HEIGHT (r);
 
   for (int y = 0; y < h; ++y)
     for (int x = 0; x < w; ++x)
@@ -418,45 +421,42 @@ BBitmap_transform_bitmap (void *bitmap, void *mask, 
uint32_t m_color,
        mk = rotate_bitmap_270 (mk);
     }
 
-  BRect r = bm->Bounds ();
-  if (r.Width () != desw || r.Height () != desh)
-    {
-      BRect n = BRect (0, 0, desw - 1, desh - 1);
-      BView vw (n, NULL, B_FOLLOW_NONE, 0);
-      BBitmap *dst = new BBitmap (n, bm->ColorSpace (), true);
-      if (dst->InitCheck () != B_OK)
-       if (bm->InitCheck () != B_OK)
-         gui_abort ("Failed to init bitmap for scale");
-      dst->AddChild (&vw);
-
-      if (!vw.LockLooper ())
-       gui_abort ("Failed to lock offscreen view for scale");
-
-      if (rot != 90 && rot != 270)
-       {
-         BAffineTransform tr;
-         tr.RotateBy (BPoint (desw / 2, desh / 2), rot * M_PI / 180.0);
-         vw.SetTransform (tr);
-       }
+  BRect n = BRect (0, 0, desw - 1, desh - 1);
+  BView vw (n, NULL, B_FOLLOW_NONE, 0);
+  BBitmap *dst = new BBitmap (n, bm->ColorSpace (), true);
+  if (dst->InitCheck () != B_OK)
+    if (bm->InitCheck () != B_OK)
+      gui_abort ("Failed to init bitmap for scale");
+  dst->AddChild (&vw);
 
-      vw.MovePenTo (0, 0);
-      vw.DrawBitmap (bm, n);
-      if (mk)
-       BView_DrawMask ((void *) mk, (void *) &vw,
-                       0, 0, mk->Bounds ().Width (),
-                       mk->Bounds ().Height (),
-                       0, 0, desw, desh, m_color);
-      vw.Sync ();
-      vw.RemoveSelf ();
-
-      if (copied_p)
-       delete bm;
-      if (copied_p && mk)
-       delete mk;
-      return dst;
+  if (!vw.LockLooper ())
+    gui_abort ("Failed to lock offscreen view for scale");
+
+  if (rot != 90 && rot != 270)
+    {
+      BAffineTransform tr;
+      tr.RotateBy (BPoint (desw / 2, desh / 2), rot * M_PI / 180.0);
+      vw.SetTransform (tr);
     }
 
-  return bm;
+  vw.MovePenTo (0, 0);
+  vw.DrawBitmap (bm, n);
+  if (mk)
+    {
+      BRect k = mk->Bounds ();
+      BView_DrawMask ((void *) mk, (void *) &vw,
+                     0, 0, BE_RECT_WIDTH (k),
+                     BE_RECT_HEIGHT (k),
+                     0, 0, desw, desh, m_color);
+    }
+  vw.Sync ();
+  vw.RemoveSelf ();
+
+  if (copied_p)
+    delete bm;
+  if (copied_p && mk)
+    delete mk;
+  return dst;
 }
 
 void
diff --git a/src/haiku_font_support.cc b/src/haiku_font_support.cc
index 9ac0400969..e6d21c28fe 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 Free Software Foundation, Inc.
+   Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -126,9 +126,28 @@ BFont_have_char_block (void *font, int32_t beg, int32_t 
end)
   return ft->IncludesBlock (beg, end);
 }
 
-/* Compute bounds for MB_STR, a character in multibyte encoding,
-   used with font.  The width (in pixels) is returned in ADVANCE,
-   the left bearing in LB, and the right bearing in RB.  */
+/* Compute bounds for MB_STR, a character in multibyte encoding, used
+   with FONT.  The distance to move rightwards before reaching to the
+   next character's left escapement boundary is returned in ADVANCE,
+   the left bearing in LB, and the right bearing in RB.
+
+   The left bearing is the amount of pixels from the left escapement
+   boundary (origin) to the left-most pixel that constitutes the glyph
+   corresponding to mb_str, and RB is the amount of pixels from the
+   origin to the right-most pixel constituting the glyph.
+
+   Both the left and right bearings are positive values measured
+   towards the right, which means that the left bearing will only be
+   negative if the left-most pixel is to the left of the origin.
+
+   The bearing values correspond to X11 XCharStruct semantics, which
+   is what Emacs code operates on.  Haiku itself uses a slightly
+   different scheme, where the "left edge" is the distance from the
+   origin to the left-most pixel, where leftwards is negative and
+   rightwards is positive, and the "right edge" is the distance (where
+   leftwards is similarly negative) between the right-most pixel and
+   the right escapement boundary, which is the left escapement
+   boundary plus the advance.  */
 void
 BFont_char_bounds (void *font, const char *mb_str, int *advance,
                   int *lb, int *rb)
@@ -141,7 +160,7 @@ BFont_char_bounds (void *font, const char *mb_str, int 
*advance,
   ft->GetEdges (mb_str, 1, &edge_info);
   ft->GetEscapements (mb_str, 1, &escapement);
   *advance = std::lrint (escapement * size);
-  *lb = std::lrint (edge_info.left * size);
+  *lb =  std::lrint (edge_info.left * size);
   *rb = *advance + std::lrint (edge_info.right * size);
 }
 
@@ -515,14 +534,15 @@ BFont_open_pattern (struct haiku_font_pattern *pat, void 
**font, float size)
       font_family_style_matches_p (name, NULL, flags, pat, 1))
     {
       BFont *ft = new BFont;
+      ft->SetSize (size);
+      ft->SetEncoding (B_UNICODE_UTF8);
+      ft->SetSpacing (B_BITMAP_SPACING);
+
       if (ft->SetFamilyAndStyle (name, NULL) != B_OK)
        {
          delete ft;
          return 1;
        }
-      ft->SetSize (size);
-      ft->SetEncoding (B_UNICODE_UTF8);
-      ft->SetSpacing (B_BITMAP_SPACING);
       *font = (void *) ft;
       return 0;
     }
@@ -534,14 +554,15 @@ BFont_open_pattern (struct haiku_font_pattern *pat, void 
**font, float size)
              font_family_style_matches_p (name, (char *) &sname, flags, pat))
            {
              BFont *ft = new BFont;
+             ft->SetSize (size);
+             ft->SetEncoding (B_UNICODE_UTF8);
+             ft->SetSpacing (B_BITMAP_SPACING);
+
              if (ft->SetFamilyAndStyle (name, sname) != B_OK)
                {
                  delete ft;
                  return 1;
                }
-             ft->SetSize (size);
-             ft->SetEncoding (B_UNICODE_UTF8);
-             ft->SetSpacing (B_BITMAP_SPACING);
              *font = (void *) ft;
              return 0;
            }
diff --git a/src/haiku_io.c b/src/haiku_io.c
index c152d9b086..cb7750634c 100644
--- a/src/haiku_io.c
+++ b/src/haiku_io.c
@@ -1,5 +1,5 @@
 /* Haiku window system support.
-   Copyright (C) 2021 Free Software Foundation, Inc.
+   Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/haiku_select.cc b/src/haiku_select.cc
index 6cd6ee879e..041e244f3e 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 Free Software Foundation, Inc.
+   Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/haiku_support.cc b/src/haiku_support.cc
index d6d7967524..531dfb5c64 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 Free Software Foundation, Inc.
+   Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -62,6 +62,7 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 #include <kernel/scheduler.h>
 
 #include <private/interface/ToolTip.h>
+#include <private/interface/WindowPrivate.h>
 
 #include <cmath>
 #include <cstring>
@@ -85,6 +86,37 @@ static key_map *key_map = NULL;
 static char *key_chars = NULL;
 static BLocker key_map_lock;
 
+/* The locking semantics of BWindows running in multiple threads are
+   so complex that child frame state (which is the only state that is
+   shared between different BWindows at runtime) does best with a
+   single global lock.  */
+
+static BLocker child_frame_lock;
+
+/* A LeaveNotify event (well, the closest equivalent on Haiku, which
+   is a B_MOUSE_MOVED event with `transit' set to B_EXITED_VIEW) might
+   be sent out-of-order with regards to motion events from other
+   windows, such as when the mouse pointer rapidly moves from an
+   undecorated child frame to its parent.  This can cause a failure to
+   clear the mouse face on the former if an event for the latter is
+   read by Emacs first and ends up showing the mouse face there.
+
+   While this lock doesn't really ensure that the events will be
+   delivered in the correct order, it makes them arrive in the correct
+   order "most of the time" on my machine, which is good enough and
+   preferable to adding a lot of extra complexity to the event
+   handling code to sort motion events by their timestamps.
+
+   Obviously this depends on the number of execution units that are
+   available, and the scheduling priority of each thread involved in
+   the input handling, but it will be good enough for most people.  */
+
+static BLocker movement_locker;
+
+/* This could be a private API, but it's used by (at least) the Qt
+   port, so it's probably here to stay.  */
+extern status_t get_subpixel_antialiasing (bool *);
+
 extern "C"
 {
   extern _Noreturn void emacs_abort (void);
@@ -104,27 +136,64 @@ gui_abort (const char *msg)
   emacs_abort ();
 }
 
-#ifdef USE_BE_CAIRO
-static cairo_format_t
-cairo_format_from_color_space (color_space space)
+static int
+keysym_from_raw_char (int32 raw, int32 key, unsigned *code)
 {
-  switch (space)
+  switch (raw)
     {
-    case B_RGBA32:
-      return CAIRO_FORMAT_ARGB32;
-    case B_RGB32:
-      return CAIRO_FORMAT_RGB24;
-    case B_RGB16:
-      return CAIRO_FORMAT_RGB16_565;
-    case B_GRAY8:
-      return CAIRO_FORMAT_A8;
-    case B_GRAY1:
-      return CAIRO_FORMAT_A1;
+    case B_BACKSPACE:
+      *code = XK_BackSpace;
+      break;
+    case B_RETURN:
+      *code = XK_Return;
+      break;
+    case B_TAB:
+      *code = XK_Tab;
+      break;
+    case B_ESCAPE:
+      *code = XK_Escape;
+      break;
+    case B_LEFT_ARROW:
+      *code = XK_Left;
+      break;
+    case B_RIGHT_ARROW:
+      *code = XK_Right;
+      break;
+    case B_UP_ARROW:
+      *code = XK_Up;
+      break;
+    case B_DOWN_ARROW:
+      *code = XK_Down;
+      break;
+    case B_INSERT:
+      *code = XK_Insert;
+      break;
+    case B_DELETE:
+      *code = XK_Delete;
+      break;
+    case B_HOME:
+      *code = XK_Home;
+      break;
+    case B_END:
+      *code = XK_End;
+      break;
+    case B_PAGE_UP:
+      *code = XK_Page_Up;
+      break;
+    case B_PAGE_DOWN:
+      *code = XK_Page_Down;
+      break;
+
+    case B_FUNCTION_KEY:
+      *code = XK_F1 + key - 2;
+      break;
+
     default:
-      gui_abort ("Unsupported color space");
+      return 0;
     }
+
+  return 1;
 }
-#endif
 
 static void
 map_key (char *chars, int32 offset, uint32_t *c)
@@ -168,6 +237,40 @@ map_shift (uint32_t kc, uint32_t *ch)
   key_map_lock.Unlock ();
 }
 
+static void
+map_caps (uint32_t kc, uint32_t *ch)
+{
+  if (!key_map_lock.Lock ())
+    gui_abort ("Failed to lock keymap");
+  if (!key_map)
+    get_key_map (&key_map, &key_chars);
+  if (!key_map)
+    return;
+  if (kc >= 128)
+    return;
+
+  int32_t m = key_map->caps_map[kc];
+  map_key (key_chars, m, ch);
+  key_map_lock.Unlock ();
+}
+
+static void
+map_caps_shift (uint32_t kc, uint32_t *ch)
+{
+  if (!key_map_lock.Lock ())
+    gui_abort ("Failed to lock keymap");
+  if (!key_map)
+    get_key_map (&key_map, &key_chars);
+  if (!key_map)
+    return;
+  if (kc >= 128)
+    return;
+
+  int32_t m = key_map->caps_shift_map[kc];
+  map_key (key_chars, m, ch);
+  key_map_lock.Unlock ();
+}
+
 static void
 map_normal (uint32_t kc, uint32_t *ch)
 {
@@ -188,8 +291,25 @@ map_normal (uint32_t kc, uint32_t *ch)
 class Emacs : public BApplication
 {
 public:
+  BMessage settings;
+  bool settings_valid_p = false;
+
   Emacs () : BApplication ("application/x-vnd.GNU-emacs")
   {
+    BPath settings_path;
+
+    if (find_directory (B_USER_SETTINGS_DIRECTORY, &settings_path) != B_OK)
+      return;
+
+    settings_path.Append (PACKAGE_NAME);
+
+    BEntry entry (settings_path.Path ());
+    BFile settings_file (&entry, B_READ_ONLY | B_CREATE_FILE);
+
+    if (settings.Unflatten (&settings_file) != B_OK)
+      return;
+
+    settings_valid_p = true;
   }
 
   void
@@ -242,7 +362,7 @@ public:
   }
 };
 
-class EmacsWindow : public BDirectWindow
+class EmacsWindow : public BWindow
 {
 public:
   struct child_frame
@@ -260,41 +380,35 @@ public:
   int fullscreen_p = 0;
   int zoomed_p = 0;
   int shown_flag = 0;
+  volatile int was_shown_p = 0;
+  bool menu_bar_active_p = false;
+  window_look pre_override_redirect_style;
+  window_feel pre_override_redirect_feel;
 
-#ifdef USE_BE_CAIRO
-  BLocker surface_lock;
-  cairo_surface_t *cr_surface = NULL;
-#endif
-
-  EmacsWindow () : BDirectWindow (BRect (0, 0, 0, 0), "", B_TITLED_WINDOW_LOOK,
-                                 B_NORMAL_WINDOW_FEEL, 
B_NO_SERVER_SIDE_WINDOW_MODIFIERS)
+  EmacsWindow () : BWindow (BRect (0, 0, 0, 0), "", B_TITLED_WINDOW_LOOK,
+                           B_NORMAL_WINDOW_FEEL, 
B_NO_SERVER_SIDE_WINDOW_MODIFIERS)
   {
 
   }
 
   ~EmacsWindow ()
   {
+    if (!child_frame_lock.Lock ())
+      gui_abort ("Failed to lock child frame state lock");
     struct child_frame *next;
     for (struct child_frame *f = subset_windows; f; f = next)
       {
+       if (f->window->LockLooper ())
+         gui_abort ("Failed to lock looper for unparent");
        f->window->Unparent ();
+       f->window->UnlockLooper ();
        next = f->next;
        delete f;
       }
 
     if (this->parent)
       UnparentAndUnlink ();
-
-#ifdef USE_BE_CAIRO
-    if (!surface_lock.Lock ())
-      gui_abort ("Failed to lock cairo surface");
-    if (cr_surface)
-      {
-       cairo_surface_destroy (cr_surface);
-       cr_surface = NULL;
-      }
-    surface_lock.Unlock ();
-#endif
+    child_frame_lock.Unlock ();
   }
 
   void
@@ -307,10 +421,16 @@ public:
   void
   UpwardsSubsetChildren (EmacsWindow *w)
   {
+    if (!LockLooper ())
+      gui_abort ("Failed to lock looper for subset");
+    if (!child_frame_lock.Lock ())
+      gui_abort ("Failed to lock child frame state lock");
     UpwardsSubset (w);
     for (struct child_frame *f = subset_windows; f;
         f = f->next)
       f->window->UpwardsSubsetChildren (w);
+    child_frame_lock.Unlock ();
+    UnlockLooper ();
   }
 
   void
@@ -323,15 +443,23 @@ public:
   void
   UpwardsUnSubsetChildren (EmacsWindow *w)
   {
+    if (!LockLooper ())
+      gui_abort ("Failed to lock looper for unsubset");
+    if (!child_frame_lock.Lock ())
+      gui_abort ("Failed to lock child frame state lock");
     UpwardsUnSubset (w);
     for (struct child_frame *f = subset_windows; f;
         f = f->next)
       f->window->UpwardsUnSubsetChildren (w);
+    child_frame_lock.Unlock ();
+    UnlockLooper ();
   }
 
   void
   Unparent (void)
   {
+    if (!child_frame_lock.Lock ())
+      gui_abort ("Failed to lock child frame state lock");
     this->SetFeel (B_NORMAL_WINDOW_FEEL);
     UpwardsUnSubsetChildren (parent);
     this->RemoveFromSubset (this);
@@ -341,13 +469,17 @@ public:
        fullscreen_p = 0;
        MakeFullscreen (1);
       }
+    child_frame_lock.Unlock ();
   }
 
   void
   UnparentAndUnlink (void)
   {
+    if (!child_frame_lock.Lock ())
+      gui_abort ("Failed to lock child frame state lock");
     this->parent->UnlinkChild (this);
     this->Unparent ();
+    child_frame_lock.Unlock ();
   }
 
   void
@@ -362,8 +494,8 @@ public:
          {
            if (last)
              last->next = tem->next;
-           if (tem == subset_windows)
-             subset_windows = NULL;
+           else
+             subset_windows = tem->next;
            delete tem;
            return;
          }
@@ -375,6 +507,9 @@ public:
   void
   ParentTo (EmacsWindow *window)
   {
+    if (!child_frame_lock.Lock ())
+      gui_abort ("Failed to lock child frame state lock");
+
     if (this->parent)
       UnparentAndUnlink ();
 
@@ -390,6 +525,8 @@ public:
       }
     this->Sync ();
     window->LinkChild (this);
+
+    child_frame_lock.Unlock ();
   }
 
   void
@@ -418,7 +555,6 @@ public:
     BRect frame = this->Frame ();
     f->window->MoveTo (frame.left + f->xoff,
                       frame.top + f->yoff);
-    this->Sync ();
   }
 
   void
@@ -431,6 +567,9 @@ public:
   MoveChild (EmacsWindow *window, int xoff, int yoff,
             int weak_p)
   {
+    if (!child_frame_lock.Lock ())
+      gui_abort ("Failed to lock child frame state lock");
+
     for (struct child_frame *f = subset_windows; f;
         f = f->next)
       {
@@ -440,10 +579,13 @@ public:
            f->yoff = yoff;
            if (!weak_p)
              DoMove (f);
+
+           child_frame_lock.Unlock ();
            return;
          }
       }
 
+    child_frame_lock.Unlock ();
     gui_abort ("Trying to move a child frame that doesn't exist");
   }
 
@@ -457,43 +599,6 @@ public:
     haiku_write (ACTIVATION, &rq);
   }
 
-  void
-  DirectConnected (direct_buffer_info *info)
-  {
-#ifdef USE_BE_CAIRO
-    if (!surface_lock.Lock ())
-      gui_abort ("Failed to lock window direct cr surface");
-    if (cr_surface)
-      {
-       cairo_surface_destroy (cr_surface);
-       cr_surface = NULL;
-      }
-
-    if (info->buffer_state != B_DIRECT_STOP)
-      {
-       int left, top, right, bottom;
-       left = info->clip_bounds.left;
-       top = info->clip_bounds.top;
-       right = info->clip_bounds.right;
-       bottom = info->clip_bounds.bottom;
-
-       unsigned char *bits = (unsigned char *) info->bits;
-       if ((info->bits_per_pixel % 8) == 0)
-         {
-           bits += info->bytes_per_row * top;
-           bits += (left * info->bits_per_pixel / 8);
-           cr_surface = cairo_image_surface_create_for_data
-             (bits,
-              cairo_format_from_color_space (info->pixel_format),
-              right - left + 1,
-              bottom - top + 1,
-              info->bytes_per_row);
-         }
-      }
-    surface_lock.Unlock ();
-#endif
-  }
-
   void
   MessageReceived (BMessage *msg)
   {
@@ -567,7 +672,7 @@ public:
        haiku_write (FILE_PANEL_EVENT, &rq);
       }
     else
-      BDirectWindow::MessageReceived (msg);
+      BWindow::MessageReceived (msg);
   }
 
   void
@@ -576,9 +681,20 @@ public:
     if (msg->what == B_KEY_DOWN || msg->what == B_KEY_UP)
       {
        struct haiku_key_event rq;
+
+       /* Pass through key events to the regular dispatch mechanism
+          if the menu bar active, so that key navigation can work.  */
+       if (menu_bar_active_p)
+         {
+           BWindow::DispatchMessage (msg, handler);
+           return;
+         }
+
        rq.window = this;
 
-       int32_t code = msg->GetInt32 ("raw_char", 0);
+       int32 raw, key;
+       msg->FindInt32 ("raw_char", &raw);
+       msg->FindInt32 ("key", &key);
 
        rq.modifiers = 0;
        uint32_t mods = modifiers ();
@@ -595,15 +711,28 @@ public:
        if (mods & B_OPTION_KEY)
          rq.modifiers |= HAIKU_MODIFIER_SUPER;
 
-       rq.mb_char = code;
-       rq.kc = msg->GetInt32 ("key", -1);
-       rq.unraw_mb_char =
-         BUnicodeChar::FromUTF8 (msg->GetString ("bytes"));
+       if (!keysym_from_raw_char (raw, key, &rq.keysym))
+         rq.keysym = 0;
 
-       if ((mods & B_SHIFT_KEY) && rq.kc >= 0)
-         map_shift (rq.kc, &rq.unraw_mb_char);
-       else if (rq.kc >= 0)
-         map_normal (rq.kc, &rq.unraw_mb_char);
+       rq.multibyte_char = 0;
+
+       if (!rq.keysym)
+         {
+           if (mods & B_SHIFT_KEY)
+             {
+               if (mods & B_CAPS_LOCK)
+                 map_caps_shift (key, &rq.multibyte_char);
+               else
+                 map_shift (key, &rq.multibyte_char);
+             }
+           else
+             {
+               if (mods & B_CAPS_LOCK)
+                 map_caps (key, &rq.multibyte_char);
+               else
+                 map_normal (key, &rq.multibyte_char);
+             }
+         }
 
        haiku_write (msg->what == B_KEY_DOWN ? KEY_DOWN : KEY_UP, &rq);
       }
@@ -638,7 +767,7 @@ public:
          };
       }
     else
-      BDirectWindow::DispatchMessage (msg, handler);
+      BWindow::DispatchMessage (msg, handler);
   }
 
   void
@@ -648,6 +777,7 @@ public:
     rq.window = this;
 
     haiku_write (MENU_BAR_OPEN, &rq);
+    menu_bar_active_p = true;
   }
 
   void
@@ -657,6 +787,7 @@ public:
     rq.window = this;
 
     haiku_write (MENU_BAR_CLOSE, &rq);
+    menu_bar_active_p = false;
   }
 
   void
@@ -668,7 +799,7 @@ public:
     rq.px_widthf = newWidth + 1.0f;
 
     haiku_write (FRAME_RESIZED, &rq);
-    BDirectWindow::FrameResized (newWidth, newHeight);
+    BWindow::FrameResized (newWidth, newHeight);
   }
 
   void
@@ -681,27 +812,39 @@ public:
 
     haiku_write (MOVE_EVENT, &rq);
 
+    if (!child_frame_lock.Lock ())
+      gui_abort ("Failed to lock child frame state lock");
     for (struct child_frame *f = subset_windows;
         f; f = f->next)
       DoMove (f);
-    BDirectWindow::FrameMoved (newPosition);
+    child_frame_lock.Unlock ();
+
+    Sync ();
+    BWindow::FrameMoved (newPosition);
   }
 
   void
   WorkspacesChanged (uint32_t old, uint32_t n)
   {
+    if (!child_frame_lock.Lock ())
+      gui_abort ("Failed to lock child frames for changing workspaces");
     for (struct child_frame *f = subset_windows;
         f; f = f->next)
       DoUpdateWorkspace (f);
+    child_frame_lock.Unlock ();
   }
 
   void
   EmacsMoveTo (int x, int y)
   {
+    if (!child_frame_lock.Lock ())
+      gui_abort ("Failed to lock child frame state lock");
+
     if (!this->parent)
       this->MoveTo (x, y);
     else
       this->parent->MoveChild (this, x, y, 0);
+    child_frame_lock.Unlock ();
   }
 
   bool
@@ -716,7 +859,7 @@ public:
   void
   Minimize (bool minimized_p)
   {
-    BDirectWindow::Minimize (minimized_p);
+    BWindow::Minimize (minimized_p);
     struct haiku_iconification_event rq;
     rq.window = this;
     rq.iconified_p = !parent && minimized_p;
@@ -729,9 +872,14 @@ public:
   {
     if (this->IsHidden ())
       return;
+    if (!child_frame_lock.Lock ())
+      gui_abort ("Failed to lock child frame state lock");
+
     Hide ();
     if (this->parent)
       UpwardsUnSubsetChildren (this->parent);
+
+    child_frame_lock.Unlock ();
   }
 
   void
@@ -739,11 +887,29 @@ public:
   {
     if (!this->IsHidden ())
       return;
+
+    if (!child_frame_lock.Lock ())
+      gui_abort ("Failed to lock child frame state lock");
+
+    if (!was_shown_p)
+      {
+       /* This window is being shown for the first time, which means
+          Show will unlock the looper.  In this case, it should be
+          locked again, since the looper is unlocked when the window
+          is first created.  */
+
+       if (!LockLooper ())
+         gui_abort ("Failed to lock looper during first window show");
+       was_shown_p = true;
+      }
+
     if (this->parent)
       shown_flag = 1;
     Show ();
     if (this->parent)
       UpwardsSubsetChildren (this->parent);
+
+    child_frame_lock.Unlock ();
   }
 
   void
@@ -776,7 +942,7 @@ public:
        x_before_zoom = y_before_zoom = INT_MIN;
       }
 
-    BDirectWindow::Zoom (o, w, h);
+    BWindow::Zoom (o, w, h);
   }
 
   void
@@ -787,29 +953,40 @@ public:
     zoomed_p = 0;
 
     EmacsMoveTo (pre_zoom_rect.left, pre_zoom_rect.top);
-    ResizeTo (pre_zoom_rect.Width (),
-             pre_zoom_rect.Height ());
+    ResizeTo (BE_RECT_WIDTH (pre_zoom_rect),
+             BE_RECT_HEIGHT (pre_zoom_rect));
   }
 
   void
   GetParentWidthHeight (int *width, int *height)
   {
+    if (!child_frame_lock.Lock ())
+      gui_abort ("Failed to lock child frame state lock");
+
     if (parent)
       {
-       *width = parent->Frame ().Width ();
-       *height = parent->Frame ().Height ();
+       BRect frame = parent->Frame ();
+       *width = BE_RECT_WIDTH (frame);
+       *height = BE_RECT_HEIGHT (frame);
       }
     else
       {
        BScreen s (this);
-       *width = s.Frame ().Width ();
-       *height = s.Frame ().Height ();
+       BRect frame = s.Frame ();
+
+       *width = BE_RECT_WIDTH (frame);
+       *height = BE_RECT_HEIGHT (frame);
       }
+
+    child_frame_lock.Unlock ();
   }
 
   void
   OffsetChildRect (BRect *r, EmacsWindow *c)
   {
+    if (!child_frame_lock.Lock ())
+      gui_abort ("Failed to lock child frame state lock");
+
     for (struct child_frame *f; f; f = f->next)
       if (f->window == c)
        {
@@ -817,9 +994,11 @@ public:
          r->bottom -= f->yoff;
          r->left -= f->xoff;
          r->right -= f->xoff;
+         child_frame_lock.Unlock ();
          return;
        }
 
+    child_frame_lock.Lock ();
     gui_abort ("Trying to calculate offsets for a child frame that doesn't 
exist");
   }
 
@@ -828,8 +1007,8 @@ public:
   {
     BScreen screen (this);
 
-      if (!screen.IsValid ())
-       gui_abort ("Trying to make a window fullscreen without a screen");
+    if (!screen.IsValid ())
+      gui_abort ("Trying to make a window fullscreen without a screen");
 
     if (make_fullscreen_p == fullscreen_p)
       return;
@@ -843,9 +1022,15 @@ public:
 
        flags |= B_NOT_MOVABLE | B_NOT_ZOOMABLE;
        pre_fullscreen_rect = Frame ();
+
+       if (!child_frame_lock.Lock ())
+         gui_abort ("Failed to lock child frame state lock");
+
        if (parent)
          parent->OffsetChildRect (&pre_fullscreen_rect, this);
 
+       child_frame_lock.Unlock ();
+
        int w, h;
        EmacsMoveTo (0, 0);
        GetParentWidthHeight (&w, &h);
@@ -856,8 +1041,8 @@ public:
        flags &= ~(B_NOT_MOVABLE | B_NOT_ZOOMABLE);
        EmacsMoveTo (pre_fullscreen_rect.left,
                     pre_fullscreen_rect.top);
-       ResizeTo (pre_fullscreen_rect.Width (),
-                 pre_fullscreen_rect.Height ());
+       ResizeTo (BE_RECT_WIDTH (pre_fullscreen_rect),
+                 BE_RECT_HEIGHT (pre_fullscreen_rect));
       }
     SetFlags (flags);
   }
@@ -870,6 +1055,14 @@ public:
   {
   }
 
+  void
+  AttachedToWindow (void)
+  {
+    BWindow *window = Window ();
+
+    window->SetKeyMenuBar (this);
+  }
+
   void
   FrameResized (float newWidth, float newHeight)
   {
@@ -940,10 +1133,12 @@ public:
       gui_abort ("Could not lock cr surface during attachment");
     if (cr_surface)
       gui_abort ("Trying to attach cr surface when one already exists");
+    BRect bounds = offscreen_draw_bitmap_1->Bounds ();
+
     cr_surface = cairo_image_surface_create_for_data
       ((unsigned char *) offscreen_draw_bitmap_1->Bits (),
-       CAIRO_FORMAT_ARGB32, offscreen_draw_bitmap_1->Bounds ().Width (),
-       offscreen_draw_bitmap_1->Bounds ().Height (),
+       CAIRO_FORMAT_ARGB32, BE_RECT_WIDTH (bounds),
+       BE_RECT_HEIGHT (bounds),
        offscreen_draw_bitmap_1->BytesPerRow ());
     if (!cr_surface)
       gui_abort ("Cr surface allocation failed for double-buffered view");
@@ -997,8 +1192,11 @@ public:
        if (offscreen_draw_bitmap_1->InitCheck () != B_OK)
          gui_abort ("Offscreen draw bitmap initialization failed");
 
-       offscreen_draw_view->MoveTo (Frame ().left, Frame ().top);
-       offscreen_draw_view->ResizeTo (Frame ().Width (), Frame ().Height ());
+       BRect frame = Frame ();
+
+       offscreen_draw_view->MoveTo (frame.left, frame.top);
+       offscreen_draw_view->ResizeTo (BE_RECT_WIDTH (frame),
+                                      BE_RECT_HEIGHT (frame));
        offscreen_draw_bitmap_1->AddChild (offscreen_draw_view);
 #ifdef USE_BE_CAIRO
        AttachCairoSurface ();
@@ -1037,7 +1235,7 @@ public:
        return;
       }
 
-    if (w->shown_flag)
+    if (w->shown_flag && offscreen_draw_view)
       {
        PushState ();
        SetDrawingMode (B_OP_ERASE);
@@ -1140,7 +1338,7 @@ public:
     if (looper_locked_count)
       {
        if (!offscreen_draw_bitmap_1->Lock ())
-         gui_abort ("Failed to lock bitmap after double buffering was set 
up.");
+         gui_abort ("Failed to lock bitmap after double buffering was set up");
       }
 
     UnlockLooper ();
@@ -1162,7 +1360,11 @@ public:
       ToolTip ()->SetMouseRelativeLocation (BPoint (-(point.x - tt_absl_pos.x),
                                                    -(point.y - 
tt_absl_pos.y)));
 
-    haiku_write (MOUSE_MOTION, &rq);
+    if (movement_locker.Lock ())
+      {
+       haiku_write (MOUSE_MOTION, &rq);
+       movement_locker.Unlock ();
+      }
   }
 
   void
@@ -1383,7 +1585,7 @@ public:
       {
        BRect r = menu->Frame ();
        int w = menu->StringWidth (key);
-       menu->MovePenTo (BPoint (r.Width () - w - 4,
+       menu->MovePenTo (BPoint (BE_RECT_WIDTH (r) - w - 4,
                                 menu->PenLocation ().y));
        menu->DrawString (key);
       }
@@ -1551,10 +1753,18 @@ BWindow_new (void *_view)
   if (!vw)
     {
       *v = NULL;
-      window->Lock ();
+      window->LockLooper ();
       window->Quit ();
       return NULL;
     }
+
+  /* Windows are created locked by the current thread, but calling
+     Show for the first time causes them to be unlocked.  To avoid a
+     deadlock when a frame is created invisible in one thread, and
+     another thread later tries to lock it, the window is unlocked
+     here, and EmacsShow will lock it manually if it's being shown for
+     the first time.  */
+  window->UnlockLooper ();
   window->AddChild (vw);
   *v = vw;
   return window;
@@ -1563,7 +1773,7 @@ BWindow_new (void *_view)
 void
 BWindow_quit (void *window)
 {
-  ((BWindow *) window)->Lock ();
+  ((BWindow *) window)->LockLooper ();
   ((BWindow *) window)->Quit ();
 }
 
@@ -1610,7 +1820,6 @@ BWindow_set_visible (void *window, int visible_p)
        win->Minimize (false);
       win->EmacsHide ();
     }
-  win->Sync ();
 }
 
 /* Change the title of WINDOW to the multibyte string TITLE.  */
@@ -1718,71 +1927,6 @@ BWindow_Flush (void *window)
   ((BWindow *) window)->Flush ();
 }
 
-/* Map the keycode KC, storing the result in CODE and 1 in
-   NON_ASCII_P if it should be used.  */
-void
-BMapKey (uint32_t kc, int *non_ascii_p, unsigned *code)
-{
-  if (*code == 10 && kc != 0x42)
-    {
-      *code = XK_Return;
-      *non_ascii_p = 1;
-      return;
-    }
-
-  switch (kc)
-    {
-    default:
-      *non_ascii_p = 0;
-      if (kc < 0xe && kc > 0x1)
-       {
-         *code = XK_F1 + kc - 2;
-         *non_ascii_p = 1;
-       }
-      return;
-    case 0x1e:
-      *code = XK_BackSpace;
-      break;
-    case 0x61:
-      *code = XK_Left;
-      break;
-    case 0x63:
-      *code = XK_Right;
-      break;
-    case 0x57:
-      *code = XK_Up;
-      break;
-    case 0x62:
-      *code = XK_Down;
-      break;
-    case 0x64:
-      *code = XK_Insert;
-      break;
-    case 0x65:
-      *code = XK_Delete;
-      break;
-    case 0x37:
-      *code = XK_Home;
-      break;
-    case 0x58:
-      *code = XK_End;
-      break;
-    case 0x39:
-      *code = XK_Page_Up;
-      break;
-    case 0x5a:
-      *code = XK_Page_Down;
-      break;
-    case 0x1:
-      *code = XK_Escape;
-      break;
-    case 0x68:
-      *code = XK_Menu;
-      break;
-    }
-  *non_ascii_p = 1;
-}
-
 /* Make a scrollbar, attach it to VIEW's window, and return it.  */
 void *
 BScrollBar_make_for_view (void *view, int horizontal_p,
@@ -2224,8 +2368,14 @@ BMenuBar_delete (void *menubar)
 {
   BView *vw = (BView *) menubar;
   BView *p = vw->Parent ();
+  EmacsWindow *window = (EmacsWindow *) p->Window ();
+
   if (!p->LockLooper ())
     gui_abort ("Failed to lock menu bar parent while removing menubar");
+  window->SetKeyMenuBar (NULL);
+  /* MenusEnded isn't called if the menu bar is destroyed
+     before it closes.  */
+  window->menu_bar_active_p = false;
   vw->RemoveSelf ();
   p->UnlockLooper ();
   delete vw;
@@ -2597,7 +2747,8 @@ char *
 be_popup_file_dialog (int open_p, const char *default_dir, int must_match_p, 
int dir_only_p,
                      void *window, const char *save_text, const char *prompt,
                      void (*block_input_function) (void),
-                     void (*unblock_input_function) (void))
+                     void (*unblock_input_function) (void),
+                     void (*maybe_quit_function) (void))
 {
   ptrdiff_t idx = c_specpdl_idx_from_cxx ();
   /* setjmp/longjmp is UB with automatic objects. */
@@ -2608,7 +2759,6 @@ be_popup_file_dialog (int open_p, const char 
*default_dir, int must_match_p, int
   BMessage *msg = new BMessage ('FPSE');
   BFilePanel *panel = new BFilePanel (open_p ? B_OPEN_PANEL : B_SAVE_PANEL,
                                      NULL, NULL, mode);
-  unblock_input_function ();
 
   struct popup_file_dialog_data dat;
   dat.entry = path;
@@ -2632,7 +2782,7 @@ be_popup_file_dialog (int open_p, const char 
*default_dir, int must_match_p, int
   be_popup_file_dialog_safe_set_target (panel, w);
 
   panel->Show ();
-  panel->Window ()->Show ();
+  unblock_input_function ();
 
   void *buf = alloca (200);
   while (1)
@@ -2642,19 +2792,26 @@ be_popup_file_dialog (int open_p, const char 
*default_dir, int must_match_p, int
 
       if (!haiku_read_with_timeout (&type, buf, 200, 100000))
        {
+         block_input_function ();
          if (type != FILE_PANEL_EVENT)
            haiku_write (type, buf);
          else if (!ptr)
            ptr = (char *) ((struct haiku_file_panel_event *) buf)->ptr;
+         unblock_input_function ();
+
+         maybe_quit_function ();
        }
 
       ssize_t b_s;
+      block_input_function ();
       haiku_read_size (&b_s);
-      if (!b_s || b_s == -1 || ptr || panel->Window ()->IsHidden ())
+      if (!b_s || ptr || panel->Window ()->IsHidden ())
        {
          c_unbind_to_nil_from_cxx (idx);
+         unblock_input_function ();
          return ptr;
        }
+      unblock_input_function ();
     }
 }
 
@@ -2663,10 +2820,8 @@ be_app_quit (void)
 {
   if (be_app)
     {
-      status_t e;
       while (!be_app->Lock ());
       be_app->Quit ();
-      wait_for_thread (app_thread, &e);
     }
 }
 
@@ -2818,8 +2973,7 @@ cairo_surface_t *
 EmacsView_cairo_surface (void *view)
 {
   EmacsView *vw = (EmacsView *) view;
-  EmacsWindow *wn = (EmacsWindow *) vw->Window ();
-  return vw->cr_surface ? vw->cr_surface : wn->cr_surface;
+  return vw->cr_surface;
 }
 
 /* Transfer each clip rectangle in VIEW to the cairo context
@@ -2834,8 +2988,9 @@ BView_cr_dump_clipping (void *view, cairo_t *ctx)
   for (int i = 0; i < cr.CountRects (); ++i)
     {
       BRect r = cr.RectAt (i);
-      cairo_rectangle (ctx, r.left, r.top, r.Width () + 1,
-                      r.Height () + 1);
+      cairo_rectangle (ctx, r.left, r.top,
+                      BE_RECT_WIDTH (r),
+                      BE_RECT_HEIGHT (r));
     }
 
   cairo_clip (ctx);
@@ -2845,10 +3000,7 @@ BView_cr_dump_clipping (void *view, cairo_t *ctx)
 void
 EmacsWindow_begin_cr_critical_section (void *window)
 {
-  EmacsWindow *w = (EmacsWindow *) window;
-  if (!w->surface_lock.Lock ())
-    gui_abort ("Couldn't lock cairo surface");
-
+  BWindow *w = (BWindow *) window;
   BView *vw = (BView *) w->FindView ("Emacs");
   EmacsView *ev = dynamic_cast <EmacsView *> (vw);
   if (ev && !ev->cr_surface_lock.Lock ())
@@ -2859,8 +3011,7 @@ EmacsWindow_begin_cr_critical_section (void *window)
 void
 EmacsWindow_end_cr_critical_section (void *window)
 {
-  EmacsWindow *w = (EmacsWindow *) window;
-  w->surface_lock.Unlock ();
+  BWindow *w = (BWindow *) window;
   BView *vw = (BView *) w->FindView ("Emacs");
   EmacsView *ev = dynamic_cast <EmacsView *> (vw);
   if (ev)
@@ -2912,6 +3063,18 @@ BWindow_set_min_size (void *window, int width, int 
height)
   w->UnlockLooper ();
 }
 
+/* Synchronize WINDOW's connection to the App Server.  */
+void
+BWindow_sync (void *window)
+{
+  BWindow *w = (BWindow *) window;
+
+  if (!w->LockLooper ())
+    gui_abort ("Failed to lock window looper for sync");
+  w->Sync ();
+  w->UnlockLooper ();
+}
+
 /* Set the alignment of WINDOW's dimensions.  */
 void
 BWindow_set_size_alignment (void *window, int align_width, int align_height)
@@ -2928,3 +3091,80 @@ BWindow_set_size_alignment (void *window, int 
align_width, int align_height)
 #endif
   w->UnlockLooper ();
 }
+
+void
+BWindow_send_behind (void *window, void *other_window)
+{
+  BWindow *w = (BWindow *) window;
+  BWindow *other = (BWindow *) other_window;
+
+  if (!w->LockLooper ())
+    gui_abort ("Failed to lock window in order to send it behind another");
+  w->SendBehind (other);
+  w->UnlockLooper ();
+}
+
+bool
+BWindow_is_active (void *window)
+{
+  BWindow *w = (BWindow *) window;
+  return w->IsActive ();
+}
+
+bool
+be_use_subpixel_antialiasing (void)
+{
+  bool current_subpixel_antialiasing;
+
+  if (get_subpixel_antialiasing (&current_subpixel_antialiasing) != B_OK)
+    return false;
+
+  return current_subpixel_antialiasing;
+}
+
+/* This isn't implemented very properly (for example: what if
+   decorations are changed while the window is under override
+   redirect?) but it works well enough for most use cases.  */
+void
+BWindow_set_override_redirect (void *window, bool override_redirect_p)
+{
+  EmacsWindow *w = (EmacsWindow *) window;
+
+  if (w->LockLooper ())
+    {
+      if (override_redirect_p)
+       {
+         w->pre_override_redirect_feel = w->Feel ();
+         w->pre_override_redirect_style = w->Look ();
+         w->SetFeel (kMenuWindowFeel);
+         w->SetLook (B_NO_BORDER_WINDOW_LOOK);
+       }
+      else
+       {
+         w->SetFeel (w->pre_override_redirect_feel);
+         w->SetLook (w->pre_override_redirect_style);
+       }
+
+      w->UnlockLooper ();
+    }
+}
+
+/* Find a resource by the name NAME inside the settings file.  The
+   string returned is in UTF-8 encoding, and will stay allocated as
+   long as the BApplication (a.k.a display) is alive.  */
+const char *
+be_find_setting (const char *name)
+{
+  Emacs *app = (Emacs *) be_app;
+  const char *value;
+
+  /* Note that this is thread-safe since the constructor of `Emacs'
+     runs in the main thread.  */
+  if (!app->settings_valid_p)
+    return NULL;
+
+  if (app->settings.FindString (name, 0, &value) != B_OK)
+    return NULL;
+
+  return value;
+}
diff --git a/src/haiku_support.h b/src/haiku_support.h
index 9f5f3c77e3..83f22972ce 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 Free Software Foundation, Inc.
+   Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -32,6 +32,8 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 #include <cairo.h>
 #endif
 
+#include <math.h>
+
 enum haiku_cursor
   {
     CURSOR_ID_NO_CURSOR = 12,
@@ -128,9 +130,8 @@ struct haiku_key_event
 {
   void *window;
   int modifiers;
-  uint32_t mb_char;
-  uint32_t unraw_mb_char;
-  short kc;
+  unsigned keysym;
+  uint32_t multibyte_char;
 };
 
 struct haiku_activation_event
@@ -310,6 +311,28 @@ struct haiku_menu_bar_state_event
 #define HAIKU_BLACK 1000
 #define HAIKU_MEDIUM 2000
 
+#ifdef __cplusplus
+/* Haiku's built in Height and Width functions for calculating
+   rectangle sizes are broken, probably for compatibility with BeOS:
+   they do not round up in a reasonable fashion, and they return the
+   numerical difference between the end and start sides in both
+   directions, instead of the actual size.
+
+   For example:
+
+     BRect (1, 1, 5, 5).IntegerWidth ()
+
+   Will return 4, when in reality the rectangle is 5 pixels wide,
+   since the left corner is also a pixel!
+
+   All code in Emacs should use the macros below to calculate the
+   dimensions of a BRect, instead of relying on the broken Width and
+   Height functions.  */
+
+#define BE_RECT_HEIGHT(rect) (ceil (((rect).bottom - (rect).top) + 1))
+#define BE_RECT_WIDTH(rect) (ceil (((rect).right - (rect).left) + 1))
+#endif /* __cplusplus */
+
 #ifdef __cplusplus
 extern "C"
 {
@@ -536,9 +559,6 @@ extern "C"
   extern void
   BWindow_Flush (void *window);
 
-  extern void
-  BMapKey (uint32_t kc, int *non_ascii_p, unsigned *code);
-
   extern void *
   BScrollBar_make_for_view (void *view, int horizontal_p,
                            int x, int y, int x1, int y1,
@@ -740,7 +760,8 @@ extern "C"
                        int dir_only_p, void *window, const char *save_text,
                        const char *prompt,
                        void (*block_input_function) (void),
-                       void (*unblock_input_function) (void));
+                       void (*unblock_input_function) (void),
+                       void (*maybe_quit_function) (void));
 
   extern void
   record_c_unwind_protect_from_cxx (void (*) (void *), void *);
@@ -819,6 +840,24 @@ extern "C"
   extern void
   BWindow_set_size_alignment (void *window, int align_width, int align_height);
 
+  extern void
+  BWindow_sync (void *window);
+
+  extern void
+  BWindow_send_behind (void *window, void *other_window);
+
+  extern bool
+  BWindow_is_active (void *window);
+
+  extern bool
+  be_use_subpixel_antialiasing (void);
+
+  extern void
+  BWindow_set_override_redirect (void *window, bool override_redirect_p);
+
+  extern const char *
+  be_find_setting (const char *name);
+
 #ifdef __cplusplus
   extern void *
   find_appropriate_view_for_draw (void *vw);
diff --git a/src/haikufns.c b/src/haikufns.c
index 868fc71f97..52bb13bc89 100644
--- a/src/haikufns.c
+++ b/src/haikufns.c
@@ -1,5 +1,5 @@
 /* Haiku window system support
-   Copyright (C) 2021 Free Software Foundation, Inc.
+   Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -835,6 +835,7 @@ haiku_create_frame (Lisp_Object parms, int ttip_p)
     haiku_set_parent_frame (f, parent_frame, Qnil);
 
   gui_default_parameter (f, parms, Qundecorated, Qnil, NULL, NULL, 
RES_TYPE_BOOLEAN);
+  gui_default_parameter (f, parms, Qoverride_redirect, Qnil, NULL, NULL, 
RES_TYPE_BOOLEAN);
 
   gui_default_parameter (f, parms, Qicon_type, Qnil,
                          "bitmapIcon", "BitmapIcon", RES_TYPE_SYMBOL);
@@ -1067,6 +1068,20 @@ haiku_set_undecorated (struct frame *f, Lisp_Object 
new_value,
   unblock_input ();
 }
 
+static void
+haiku_set_override_redirect (struct frame *f, Lisp_Object new_value,
+                            Lisp_Object old_value)
+{
+  if (EQ (new_value, old_value))
+    return;
+
+  block_input ();
+  BWindow_set_override_redirect (FRAME_HAIKU_WINDOW (f),
+                                !NILP (new_value));
+  FRAME_OVERRIDE_REDIRECT (f) = !NILP (new_value);
+  unblock_input ();
+}
+
 static void
 haiku_set_menu_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object 
oldval)
 {
@@ -1238,7 +1253,7 @@ haiku_get_pixel (haiku bitmap, int x, int y)
   BBitmap_dimensions (bitmap, &left, &top, &right, &bottom,
                      &bytes_per_row, &mono_p);
 
-  if (x < left || x > right || y < top || y > bottom)
+  if (x < 0 || x > right - left || y < 0 || y > bottom - top)
     emacs_abort ();
 
   if (!mono_p)
@@ -1263,7 +1278,7 @@ haiku_put_pixel (haiku bitmap, int x, int y, unsigned 
long pixel)
   BBitmap_dimensions (bitmap, &left, &top, &right, &bottom,
                      &bytes_per_row, &mono_p);
 
-  if (x < left || x > right || y < top || y > bottom)
+  if (x < 0 || x > right - left || y < 0 || y > bottom - top)
     emacs_abort ();
 
   if (mono_p)
@@ -1291,8 +1306,8 @@ haiku_free_frame_resources (struct frame *f)
   Lisp_Object bar;
   struct scroll_bar *b;
 
-  block_input ();
   check_window_system (f);
+  block_input ();
 
   hlinfo = MOUSE_HL_INFO (f);
   window = FRAME_HAIKU_WINDOW (f);
@@ -1393,6 +1408,7 @@ haiku_visualize_frame (struct frame *f)
       if (FRAME_NO_FOCUS_ON_MAP (f) &&
          !FRAME_NO_ACCEPT_FOCUS (f))
        BWindow_set_avoid_focus (FRAME_HAIKU_WINDOW (f), 0);
+      BWindow_sync (FRAME_HAIKU_WINDOW (f));
 
       haiku_set_offset (f, f->left_pos, f->top_pos, 0);
 
@@ -1409,6 +1425,7 @@ haiku_unvisualize_frame (struct frame *f)
   block_input ();
 
   BWindow_set_visible (FRAME_HAIKU_WINDOW (f), 0);
+  BWindow_sync (FRAME_HAIKU_WINDOW (f));
   SET_FRAME_VISIBLE (f, 0);
   SET_FRAME_ICONIFIED (f, 0);
 
@@ -1510,20 +1527,24 @@ haiku_set_inhibit_double_buffering (struct frame *f,
                                    Lisp_Object old_value)
 {
   block_input ();
+#ifndef USE_BE_CAIRO
   if (FRAME_HAIKU_WINDOW (f))
     {
       if (NILP (new_value))
        {
+#endif
          EmacsView_set_up_double_buffering (FRAME_HAIKU_VIEW (f));
          if (!NILP (old_value))
            {
              SET_FRAME_GARBAGED (f);
              expose_frame (f, 0, 0, 0, 0);
            }
+#ifndef USE_BE_CAIRO
        }
       else
        EmacsView_disable_double_buffering (FRAME_HAIKU_VIEW (f));
     }
+#endif
   unblock_input ();
 }
 
@@ -1970,7 +1991,8 @@ DEFUN ("x-show-tip", Fx_show_tip, Sx_show_tip, 1, 6, 0,
   try_window (window, pos, TRY_WINDOW_IGNORE_FONTS_CHANGE);
   /* Calculate size of tooltip window.  */
   size = Fwindow_text_pixel_size (window, Qnil, Qnil, Qnil,
-                                 make_fixnum (w->pixel_height), Qnil);
+                                 make_fixnum (w->pixel_height), Qnil,
+                                 Qnil);
   /* Add the frame's internal border to calculated size.  */
   width = XFIXNUM (Fcar (size)) + 2 * FRAME_INTERNAL_BORDER_WIDTH (tip_f);
   height = XFIXNUM (Fcdr (size)) + 2 * FRAME_INTERNAL_BORDER_WIDTH (tip_f);
@@ -2231,7 +2253,7 @@ Optional arg SAVE_TEXT, if non-nil, specifies some text 
to show in the entry fie
                                   FRAME_HAIKU_WINDOW (f),
                                   !NILP (save_text) ? SSDATA (ENCODE_UTF_8 
(save_text)) : NULL,
                                   SSDATA (ENCODE_UTF_8 (prompt)),
-                                  block_input, unblock_input);
+                                  block_input, unblock_input, maybe_quit);
 
   unbind_to (idx, Qnil);
 
@@ -2314,6 +2336,67 @@ DEFUN ("x-display-save-under", Fx_display_save_under,
   return Qnil;
 }
 
+DEFUN ("haiku-frame-restack", Fhaiku_frame_restack, Shaiku_frame_restack, 2, 
3, 0,
+       doc: /* Restack FRAME1 below FRAME2.
+This means that if both frames are visible and the display areas of
+these frames overlap, FRAME2 (partially) obscures FRAME1.  If optional
+third argument ABOVE is non-nil, restack FRAME1 above FRAME2.  This
+means that if both frames are visible and the display areas of these
+frames overlap, FRAME1 (partially) obscures FRAME2.
+
+Some window managers may refuse to restack windows.  */)
+     (Lisp_Object frame1, Lisp_Object frame2, Lisp_Object above)
+{
+  struct frame *f1 = decode_live_frame (frame1);
+  struct frame *f2 = decode_live_frame (frame2);
+
+  check_window_system (f1);
+  check_window_system (f2);
+
+  block_input ();
+
+  if (NILP (above))
+    {
+      /* If the window that is currently active will be sent behind
+        another window, make the window that it is being sent behind
+        active first, to avoid both windows being moved to the back of
+        the display.  */
+
+      if (BWindow_is_active (FRAME_HAIKU_WINDOW (f1))
+         /* But don't do this if any of the frames involved have
+            child frames, since they are guaranteed to be in front of
+            their toplevel parents.  */
+         && !FRAME_PARENT_FRAME (f1)
+         && !FRAME_PARENT_FRAME (f2))
+       {
+         BWindow_activate (FRAME_HAIKU_WINDOW (f2));
+         BWindow_sync (FRAME_HAIKU_WINDOW (f2));
+       }
+
+      BWindow_send_behind (FRAME_HAIKU_WINDOW (f1),
+                          FRAME_HAIKU_WINDOW (f2));
+    }
+  else
+    {
+      if (BWindow_is_active (FRAME_HAIKU_WINDOW (f2))
+         && !FRAME_PARENT_FRAME (f1)
+         && !FRAME_PARENT_FRAME (f2))
+       {
+         BWindow_activate (FRAME_HAIKU_WINDOW (f1));
+         BWindow_sync (FRAME_HAIKU_WINDOW (f1));
+       }
+
+      BWindow_send_behind (FRAME_HAIKU_WINDOW (f2),
+                          FRAME_HAIKU_WINDOW (f1));
+    }
+  BWindow_sync (FRAME_HAIKU_WINDOW (f1));
+  BWindow_sync (FRAME_HAIKU_WINDOW (f2));
+
+  unblock_input ();
+
+  return Qnil;
+}
+
 frame_parm_handler haiku_frame_parm_handlers[] =
   {
     gui_set_autoraise,
@@ -2362,7 +2445,7 @@ frame_parm_handler haiku_frame_parm_handlers[] =
     haiku_set_no_focus_on_map,
     haiku_set_no_accept_focus,
     NULL, /* set z group */
-    NULL, /* set override redir */
+    haiku_set_override_redirect,
     gui_set_no_special_glyphs
   };
 
@@ -2408,6 +2491,7 @@ syms_of_haikufns (void)
   defsubr (&Shaiku_put_resource);
   defsubr (&Shaiku_frame_list_z_order);
   defsubr (&Sx_display_save_under);
+  defsubr (&Shaiku_frame_restack);
 
   tip_timer = Qnil;
   staticpro (&tip_timer);
diff --git a/src/haikufont.c b/src/haikufont.c
index 811fa62a84..e08792be4b 100644
--- a/src/haikufont.c
+++ b/src/haikufont.c
@@ -1,6 +1,6 @@
 /* Font support for Haiku windowing
 
-Copyright (C) 2021 Free Software Foundation, Inc.
+Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -956,7 +956,6 @@ haikufont_draw (struct glyph_string *s, int from, int to,
   prepare_face_for_display (s->f, face);
 
   BView_draw_lock (view);
-  BView_StartClip (view);
   if (with_background)
     {
       int height = FONT_HEIGHT (s->font), ascent = FONT_BASE (s->font);
@@ -984,13 +983,6 @@ haikufont_draw (struct glyph_string *s, int from, int to,
       s->background_filled_p = 1;
     }
 
-  if (s->left_overhang && s->clip_head && !s->for_overlaps)
-    {
-      /* XXX: Why is this neccessary? */
-      BView_ClipToRect (view, s->clip_head->x, 0,
-                       FRAME_PIXEL_WIDTH (f), FRAME_PIXEL_HEIGHT (f));
-    }
-
   if (s->hl == DRAW_CURSOR)
     BView_SetHighColor (view, FRAME_OUTPUT_DATA (s->f)->cursor_fg);
   else
@@ -1022,7 +1014,6 @@ haikufont_draw (struct glyph_string *s, int from, int to,
       BView_DrawString (view, b, b_len);
       xfree (b);
     }
-  BView_EndClip (view);
   BView_draw_unlock (view);
   unblock_input ();
   return 1;
diff --git a/src/haikugui.h b/src/haikugui.h
index cfc693fb55..b744885a42 100644
--- a/src/haikugui.h
+++ b/src/haikugui.h
@@ -1,5 +1,5 @@
 /* Haiku window system support
-   Copyright (C) 2021 Free Software Foundation, Inc.
+   Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/haikuimage.c b/src/haikuimage.c
index 138e5b84e6..fe960bbc29 100644
--- a/src/haikuimage.c
+++ b/src/haikuimage.c
@@ -1,5 +1,5 @@
 /* Haiku window system support.
-   Copyright (C) 2021 Free Software Foundation, Inc.
+   Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -52,6 +52,8 @@ haiku_can_use_native_image_api (Lisp_Object type)
     mime_type = "image/svg";
   else if (EQ (type, Qpbm))
     mime_type = "image/pbm";
+  else if (EQ (type, Qwebp))
+    mime_type = "image/webp";
 
   if (!mime_type)
     return 0;
diff --git a/src/haikumenu.c b/src/haikumenu.c
index 698da9d639..f335bdacb4 100644
--- a/src/haikumenu.c
+++ b/src/haikumenu.c
@@ -1,5 +1,5 @@
 /* Haiku window system support
-   Copyright (C) 2021 Free Software Foundation, Inc.
+   Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -59,10 +59,17 @@ digest_menu_items (void *first_menu, int start, int 
menu_items_used,
   menus[0] = first_menu;
 
   void *window = NULL;
+  void *view = NULL;
   if (FRAMEP (Vmenu_updating_frame) &&
       FRAME_LIVE_P (XFRAME (Vmenu_updating_frame)) &&
       FRAME_HAIKU_P (XFRAME (Vmenu_updating_frame)))
-    window = FRAME_HAIKU_WINDOW (XFRAME (Vmenu_updating_frame));
+    {
+      window = FRAME_HAIKU_WINDOW (XFRAME (Vmenu_updating_frame));
+      view = FRAME_HAIKU_VIEW (XFRAME (Vmenu_updating_frame));
+    }
+
+  if (view)
+    BView_draw_lock (view);
 
   while (i < menu_items_used)
     {
@@ -161,6 +168,9 @@ digest_menu_items (void *first_menu, int start, int 
menu_items_used,
          i += MENU_ITEMS_ITEM_LENGTH;
        }
     }
+
+  if (view)
+    BView_draw_unlock (view);
 }
 
 static Lisp_Object
@@ -314,9 +324,8 @@ haiku_menu_show (struct frame *f, int x, int y, int 
menuflags,
     }
   digest_menu_items (menu, 0, menu_items_used, 0);
   BView_convert_to_screen (view, &x, &y);
-  unblock_input ();
-
   menu_item_selection = BMenu_run (menu, x, y);
+  unblock_input ();
 
   FRAME_DISPLAY_INFO (f)->grabbed = 0;
 
@@ -366,7 +375,9 @@ haiku_menu_show (struct frame *f, int x, int y, int 
menuflags,
                        if (!NILP (subprefix_stack[j]))
                          entry = Fcons (subprefix_stack[j], entry);
                    }
+                 block_input ();
                  BPopUpMenu_delete (menu);
+                 unblock_input ();
                  return entry;
                }
              i += MENU_ITEMS_ITEM_LENGTH;
@@ -375,10 +386,14 @@ haiku_menu_show (struct frame *f, int x, int y, int 
menuflags,
     }
   else if (!(menuflags & MENU_FOR_CLICK))
     {
+      block_input ();
       BPopUpMenu_delete (menu);
+      unblock_input ();
       quit ();
     }
+  block_input ();
   BPopUpMenu_delete (menu);
+  unblock_input ();
   return Qnil;
 }
 
@@ -615,12 +630,12 @@ DEFUN ("menu-or-popup-active-p", Fmenu_or_popup_active_p, 
Smenu_or_popup_active_
 }
 
 DEFUN ("haiku-menu-bar-open", Fhaiku_menu_bar_open, Shaiku_menu_bar_open, 0, 
1, "i",
-       doc: /* Show the menu bar in FRAME.
-
-Move the mouse pointer onto the first element of FRAME's menu bar, and
-cause it to be opened.  If FRAME is nil or not given, use the selected
-frame.  If FRAME has no menu bar, a pop-up is displayed at the position
-of the last non-menu event instead.  */)
+       doc: /* Show and start key navigation of the menu bar in FRAME.
+This initially opens the first menu bar item and you can then navigate
+with the arrow keys, select a menu entry with the return key, or
+cancel with the escape key.  If FRAME is nil or not given, use the
+selected frame.  If FRAME has no menu bar, a pop-up is displayed at
+the position of the last non-menu event instead.  */)
   (Lisp_Object frame)
 {
   struct frame *f = decode_window_system_frame (frame);
diff --git a/src/haikuselect.c b/src/haikuselect.c
index 38cceb1de7..2e619c69f7 100644
--- a/src/haikuselect.c
+++ b/src/haikuselect.c
@@ -1,5 +1,5 @@
 /* Haiku window system selection support.
-   Copyright (C) 2021 Free Software Foundation, Inc.
+   Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -24,6 +24,8 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 #include "haikuselect.h"
 #include "haikuterm.h"
 
+#include <stdlib.h>
+
 static Lisp_Object
 haiku_selection_data_1 (Lisp_Object clipboard)
 {
diff --git a/src/haikuselect.h b/src/haikuselect.h
index 1a3a945f98..80f33c6ed2 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 Free Software Foundation, Inc.
+   Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/haikuterm.c b/src/haikuterm.c
index 6bf4589406..be28649aef 100644
--- a/src/haikuterm.c
+++ b/src/haikuterm.c
@@ -1,5 +1,5 @@
 /* Haiku window system support
-   Copyright (C) 2021 Free Software Foundation, Inc.
+   Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -107,6 +107,8 @@ haiku_delete_terminal (struct terminal *terminal)
 static const char *
 get_string_resource (void *ignored, const char *name, const char *class)
 {
+  const char *native;
+
   if (!name)
     return NULL;
 
@@ -115,6 +117,9 @@ get_string_resource (void *ignored, const char *name, const 
char *class)
   if (!NILP (lval))
     return SSDATA (XCDR (lval));
 
+  if ((native = be_find_setting (name)))
+    return native;
+
   return NULL;
 }
 
@@ -145,15 +150,32 @@ haiku_clip_to_string (struct glyph_string *s)
   int n = get_glyph_string_clip_rects (s, (struct haiku_rect *) &r, 2);
 
   if (n)
-    BView_ClipToRect (FRAME_HAIKU_VIEW (s->f), r[0].x, r[0].y,
-                     r[0].width, r[0].height);
-  if (n > 1)
     {
-      BView_ClipToRect (FRAME_HAIKU_VIEW (s->f), r[1].x, r[1].y,
-                       r[1].width, r[1].height);
+      /* If n[FOO].width is 0, it means to not draw at all, so set the
+        clipping to some impossible value.  */
+      if (r[0].width <= 0)
+       BView_ClipToRect (FRAME_HAIKU_VIEW (s->f),
+                         FRAME_PIXEL_WIDTH (s->f),
+                         FRAME_PIXEL_HEIGHT (s->f),
+                         10, 10);
+      else
+       BView_ClipToRect (FRAME_HAIKU_VIEW (s->f), r[0].x,
+                         r[0].y, r[0].width, r[0].height);
     }
 
-  s->num_clips = n;
+  if (n > 1)
+    {
+      /* If n[FOO].width is 0, it means to not draw at all, so set the
+        clipping to some impossible value.  */
+      if (r[1].width <= 0)
+       BView_ClipToRect (FRAME_HAIKU_VIEW (s->f),
+                         FRAME_PIXEL_WIDTH (s->f),
+                         FRAME_PIXEL_HEIGHT (s->f),
+                         10, 10);
+      else
+       BView_ClipToRect (FRAME_HAIKU_VIEW (s->f), r[1].x, r[1].y,
+                         r[1].width, r[1].height);
+    }
 }
 
 static void
@@ -161,7 +183,6 @@ haiku_clip_to_string_exactly (struct glyph_string *s, 
struct glyph_string *dst)
 {
   BView_ClipToRect (FRAME_HAIKU_VIEW (s->f), s->x, s->y,
                    s->width, s->height);
-  dst->num_clips = 1;
 }
 
 static void
@@ -218,11 +239,11 @@ haiku_clear_frame (struct frame *f)
   block_input ();
   BView_draw_lock (view);
   BView_StartClip (view);
-  BView_ClipToRect (view, 0, 0, FRAME_PIXEL_WIDTH (f) + 1,
-                   FRAME_PIXEL_HEIGHT (f) + 1);
+  BView_ClipToRect (view, 0, 0, FRAME_PIXEL_WIDTH (f),
+                   FRAME_PIXEL_HEIGHT (f));
   BView_SetHighColor (view, FRAME_BACKGROUND_PIXEL (f));
-  BView_FillRectangle (view, 0, 0, FRAME_PIXEL_WIDTH (f) + 1,
-                      FRAME_PIXEL_HEIGHT (f) + 1);
+  BView_FillRectangle (view, 0, 0, FRAME_PIXEL_WIDTH (f) ,
+                      FRAME_PIXEL_HEIGHT (f));
   BView_EndClip (view);
   BView_draw_unlock (view);
   unblock_input ();
@@ -346,7 +367,7 @@ haiku_frame_raise_lower (struct frame *f, bool raise_p)
     {
       block_input ();
       BWindow_activate (FRAME_HAIKU_WINDOW (f));
-      flush_frame (f);
+      BWindow_sync (FRAME_HAIKU_WINDOW (f));
       unblock_input ();
     }
 }
@@ -412,7 +433,6 @@ haiku_draw_box_rect (struct glyph_string *s,
   void *view = FRAME_HAIKU_VIEW (s->f);
   struct face *face = s->face;
 
-  BView_StartClip (view);
   BView_SetHighColor (view, face->box_color);
   if (clip_rect)
     BView_ClipToRect (view, clip_rect->x, clip_rect->y, clip_rect->width,
@@ -426,7 +446,6 @@ haiku_draw_box_rect (struct glyph_string *s,
   if (right_p)
     BView_FillRectangle (view, right_x - vwidth + 1,
                         top_y, vwidth, bottom_y - top_y + 1);
-  BView_EndClip (view);
 }
 
 static void
@@ -467,8 +486,6 @@ haiku_draw_relief_rect (struct glyph_string *s,
                                 &color_corner);
 
   void *view = FRAME_HAIKU_VIEW (s->f);
-  BView_StartClip (view);
-
   BView_SetHighColor (view, raised_p ? color_white : color_black);
   if (clip_rect)
     BView_ClipToRect (view, clip_rect->x, clip_rect->y, clip_rect->width,
@@ -531,164 +548,6 @@ haiku_draw_relief_rect (struct glyph_string *s,
       if (right_p && bot_p)
        BView_FillRectangle (view, right_x, bottom_y, 1, 1);
     }
-
-  BView_EndClip (view);
-}
-
-static void
-haiku_draw_string_box (struct glyph_string *s, int clip_p)
-{
-  int hwidth, vwidth, left_x, right_x, top_y, bottom_y, last_x;
-  bool raised_p, left_p, right_p;
-  struct glyph *last_glyph;
-  struct haiku_rect clip_rect;
-
-  struct face *face = s->face;
-
-  last_x = ((s->row->full_width_p && !s->w->pseudo_window_p)
-           ? WINDOW_RIGHT_EDGE_X (s->w)
-           : window_box_right (s->w, s->area));
-
-  /* The glyph that may have a right box line.  For static
-     compositions and images, the right-box flag is on the first glyph
-     of the glyph string; for other types it's on the last glyph.  */
-  if (s->cmp || s->img)
-    last_glyph = s->first_glyph;
-  else if (s->first_glyph->type == COMPOSITE_GLYPH
-          && s->first_glyph->u.cmp.automatic)
-    {
-      /* For automatic compositions, we need to look up the last glyph
-        in the composition.  */
-        struct glyph *end = s->row->glyphs[s->area] + s->row->used[s->area];
-       struct glyph *g = s->first_glyph;
-       for (last_glyph = g++;
-            g < end && g->u.cmp.automatic && g->u.cmp.id == s->cmp_id
-              && g->slice.cmp.to < s->cmp_to;
-            last_glyph = g++)
-         ;
-    }
-  else
-    last_glyph = s->first_glyph + s->nchars - 1;
-
-  vwidth = eabs (face->box_vertical_line_width);
-  hwidth = eabs (face->box_horizontal_line_width);
-  raised_p = face->box == FACE_RAISED_BOX;
-  left_x = s->x;
-  right_x = (s->row->full_width_p && s->extends_to_end_of_line_p
-            ? last_x - 1
-            : min (last_x, s->x + s->background_width) - 1);
-
-  top_y = s->y;
-  bottom_y = top_y + s->height - 1;
-
-  left_p = (s->first_glyph->left_box_line_p
-           || (s->hl == DRAW_MOUSE_FACE
-               && (s->prev == NULL
-                   || s->prev->hl != s->hl)));
-  right_p = (last_glyph->right_box_line_p
-            || (s->hl == DRAW_MOUSE_FACE
-                && (s->next == NULL
-                    || s->next->hl != s->hl)));
-
-  get_glyph_string_clip_rect (s, &clip_rect);
-
-  if (face->box == FACE_SIMPLE_BOX)
-    haiku_draw_box_rect (s, left_x, top_y, right_x, bottom_y, hwidth,
-                        vwidth, left_p, right_p, &clip_rect);
-  else
-    haiku_draw_relief_rect (s, left_x, top_y, right_x, bottom_y, hwidth,
-                           vwidth, raised_p, true, true, left_p, right_p,
-                           &clip_rect, 1);
-
-  if (clip_p)
-    {
-      void *view = FRAME_HAIKU_VIEW (s->f);
-      BView_ClipToInverseRect (view, left_x, top_y, right_x - left_x + 1, 
hwidth);
-      if (left_p)
-       BView_ClipToInverseRect (view, left_x, top_y, vwidth, bottom_y - top_y 
+ 1);
-      BView_ClipToInverseRect (view, left_x, bottom_y - hwidth + 1,
-                              right_x - left_x + 1, hwidth);
-      if (right_p)
-       BView_ClipToInverseRect (view, right_x - vwidth + 1,
-                                top_y, vwidth, bottom_y - top_y + 1);
-    }
-}
-
-static void
-haiku_draw_plain_background (struct glyph_string *s, struct face *face,
-                            int box_line_hwidth, int box_line_vwidth)
-{
-  void *view = FRAME_HAIKU_VIEW (s->f);
-  BView_StartClip (view);
-  if (s->hl == DRAW_CURSOR)
-    BView_SetHighColor (view, FRAME_CURSOR_COLOR (s->f).pixel);
-  else
-    BView_SetHighColor (view, face->background_defaulted_p ?
-                       FRAME_BACKGROUND_PIXEL (s->f) :
-                     face->background);
-
-  BView_FillRectangle (view, s->x,
-                      s->y + box_line_hwidth,
-                      s->background_width,
-                      s->height - 2 * box_line_hwidth);
-  BView_EndClip (view);
-}
-
-static void
-haiku_draw_stipple_background (struct glyph_string *s, struct face *face,
-                              int box_line_hwidth, int box_line_vwidth)
-{
-}
-
-static void
-haiku_maybe_draw_background (struct glyph_string *s, int force_p)
-{
-  if ((s->first_glyph->type != IMAGE_GLYPH) && !s->background_filled_p)
-    {
-      struct face *face = s->face;
-      int box_line_width = max (face->box_horizontal_line_width, 0);
-      int box_vline_width = max (face->box_vertical_line_width, 0);
-
-      if (FONT_HEIGHT (s->font) < s->height - 2 * box_vline_width
-         || FONT_TOO_HIGH (s->font)
-          || s->font_not_found_p || s->extends_to_end_of_line_p || force_p)
-       {
-         if (!face->stipple)
-           haiku_draw_plain_background (s, face, box_line_width,
-                                        box_vline_width);
-         else
-           haiku_draw_stipple_background (s, face, box_line_width,
-                                          box_vline_width);
-         s->background_filled_p = 1;
-       }
-    }
-}
-
-static void
-haiku_mouse_face_colors (struct glyph_string *s, uint32_t *fg,
-                        uint32_t *bg)
-{
-  int face_id;
-  struct face *face;
-
-  /* What face has to be used last for the mouse face?  */
-  face_id = MOUSE_HL_INFO (s->f)->mouse_face_face_id;
-  face = FACE_FROM_ID_OR_NULL (s->f, face_id);
-  if (face == NULL)
-    face = FACE_FROM_ID (s->f, MOUSE_FACE_ID);
-
-  if (s->first_glyph->type == CHAR_GLYPH)
-    face_id = FACE_FOR_CHAR (s->f, face, s->first_glyph->u.ch, -1, Qnil);
-  else
-    face_id = FACE_FOR_CHAR (s->f, face, 0, -1, Qnil);
-
-  face = FACE_FROM_ID (s->f, face_id);
-  prepare_face_for_display (s->f, s->face);
-
-  if (fg)
-    *fg = face->foreground;
-  if (bg)
-    *bg = face->background;
 }
 
 static void
@@ -706,6 +565,7 @@ haiku_draw_underwave (struct glyph_string *s, int width, 
int x)
   void *view = FRAME_HAIKU_VIEW (s->f);
 
   BView_StartClip (view);
+  haiku_clip_to_string (s);
   BView_ClipToRect (view, x, y, width, wave_height);
   ax = x - ((int) (x) % dx) + (float) 0.5;
   bx = ax + dx;
@@ -736,7 +596,6 @@ haiku_draw_text_decoration (struct glyph_string *s, struct 
face *face,
 
   void *view = FRAME_HAIKU_VIEW (s->f);
   BView_draw_lock (view);
-  BView_StartClip (view);
 
   if (face->underline)
     {
@@ -754,7 +613,12 @@ haiku_draw_text_decoration (struct glyph_string *s, struct 
face *face,
          unsigned long thickness, position;
          int y;
 
-         if (s->prev && s->prev && s->prev->hl == DRAW_MOUSE_FACE)
+         if (s->prev
+             && s->prev->face->underline == FACE_UNDER_LINE
+             && (s->prev->face->underline_at_descent_line_p
+                 == s->face->underline_at_descent_line_p)
+             && (s->prev->face->underline_pixels_above_descent_line
+                 == s->face->underline_pixels_above_descent_line))
            {
              struct face *prev_face = s->prev->face;
 
@@ -785,7 +649,8 @@ haiku_draw_text_decoration (struct glyph_string *s, struct 
face *face,
              val = (WINDOW_BUFFER_LOCAL_VALUE
                     (Qx_underline_at_descent_line, s->w));
              underline_at_descent_line
-               = !(NILP (val) || EQ (val, Qunbound));
+               = (!(NILP (val) || EQ (val, Qunbound))
+                  || s->face->underline_at_descent_line_p);
 
              val = (WINDOW_BUFFER_LOCAL_VALUE
                     (Qx_use_underline_position_properties, s->w));
@@ -798,7 +663,9 @@ haiku_draw_text_decoration (struct glyph_string *s, struct 
face *face,
              else
                thickness = 1;
              if (underline_at_descent_line)
-               position = (s->height - thickness) - (s->ybase - s->y);
+               position = ((s->height - thickness)
+                           - (s->ybase - s->y)
+                           - s->face->underline_pixels_above_descent_line);
              else
                {
                  /* Get the underline position.  This is the
@@ -871,10 +738,165 @@ haiku_draw_text_decoration (struct glyph_string *s, 
struct face *face,
       BView_FillRectangle (view, s->x, glyph_y + dy, s->width, h);
     }
 
-  BView_EndClip (view);
   BView_draw_unlock (view);
 }
 
+static void
+haiku_draw_string_box (struct glyph_string *s, int clip_p)
+{
+  int hwidth, vwidth, left_x, right_x, top_y, bottom_y, last_x;
+  bool raised_p, left_p, right_p;
+  struct glyph *last_glyph;
+  struct haiku_rect clip_rect;
+
+  struct face *face = s->face;
+
+  last_x = ((s->row->full_width_p && !s->w->pseudo_window_p)
+           ? WINDOW_RIGHT_EDGE_X (s->w)
+           : window_box_right (s->w, s->area));
+
+  /* The glyph that may have a right box line.  For static
+     compositions and images, the right-box flag is on the first glyph
+     of the glyph string; for other types it's on the last glyph.  */
+  if (s->cmp || s->img)
+    last_glyph = s->first_glyph;
+  else if (s->first_glyph->type == COMPOSITE_GLYPH
+          && s->first_glyph->u.cmp.automatic)
+    {
+      /* For automatic compositions, we need to look up the last glyph
+        in the composition.  */
+        struct glyph *end = s->row->glyphs[s->area] + s->row->used[s->area];
+       struct glyph *g = s->first_glyph;
+       for (last_glyph = g++;
+            g < end && g->u.cmp.automatic && g->u.cmp.id == s->cmp_id
+              && g->slice.cmp.to < s->cmp_to;
+            last_glyph = g++)
+         ;
+    }
+  else
+    last_glyph = s->first_glyph + s->nchars - 1;
+
+  vwidth = eabs (face->box_vertical_line_width);
+  hwidth = eabs (face->box_horizontal_line_width);
+  raised_p = face->box == FACE_RAISED_BOX;
+  left_x = s->x;
+  right_x = (s->row->full_width_p && s->extends_to_end_of_line_p
+            ? last_x - 1
+            : min (last_x, s->x + s->background_width) - 1);
+
+  top_y = s->y;
+  bottom_y = top_y + s->height - 1;
+
+  left_p = (s->first_glyph->left_box_line_p
+           || (s->hl == DRAW_MOUSE_FACE
+               && (s->prev == NULL
+                   || s->prev->hl != s->hl)));
+  right_p = (last_glyph->right_box_line_p
+            || (s->hl == DRAW_MOUSE_FACE
+                && (s->next == NULL
+                    || s->next->hl != s->hl)));
+
+  get_glyph_string_clip_rect (s, &clip_rect);
+
+  if (face->box == FACE_SIMPLE_BOX)
+    haiku_draw_box_rect (s, left_x, top_y, right_x, bottom_y, hwidth,
+                        vwidth, left_p, right_p, &clip_rect);
+  else
+    haiku_draw_relief_rect (s, left_x, top_y, right_x, bottom_y, hwidth,
+                           vwidth, raised_p, true, true, left_p, right_p,
+                           &clip_rect, 1);
+
+  if (clip_p)
+    {
+      void *view = FRAME_HAIKU_VIEW (s->f);
+
+      haiku_draw_text_decoration (s, face, face->foreground, s->width, s->x);
+      BView_ClipToInverseRect (view, left_x, top_y, right_x - left_x + 1, 
hwidth);
+      if (left_p)
+       BView_ClipToInverseRect (view, left_x, top_y, vwidth, bottom_y - top_y 
+ 1);
+      BView_ClipToInverseRect (view, left_x, bottom_y - hwidth + 1,
+                              right_x - left_x + 1, hwidth);
+      if (right_p)
+       BView_ClipToInverseRect (view, right_x - vwidth + 1,
+                                top_y, vwidth, bottom_y - top_y + 1);
+    }
+}
+
+static void
+haiku_draw_plain_background (struct glyph_string *s, struct face *face,
+                            int box_line_hwidth, int box_line_vwidth)
+{
+  void *view = FRAME_HAIKU_VIEW (s->f);
+  if (s->hl == DRAW_CURSOR)
+    BView_SetHighColor (view, FRAME_CURSOR_COLOR (s->f).pixel);
+  else
+    BView_SetHighColor (view, face->background_defaulted_p ?
+                       FRAME_BACKGROUND_PIXEL (s->f) :
+                     face->background);
+
+  BView_FillRectangle (view, s->x,
+                      s->y + box_line_hwidth,
+                      s->background_width,
+                      s->height - 2 * box_line_hwidth);
+}
+
+static void
+haiku_draw_stipple_background (struct glyph_string *s, struct face *face,
+                              int box_line_hwidth, int box_line_vwidth)
+{
+}
+
+static void
+haiku_maybe_draw_background (struct glyph_string *s, int force_p)
+{
+  if ((s->first_glyph->type != IMAGE_GLYPH) && !s->background_filled_p)
+    {
+      struct face *face = s->face;
+      int box_line_width = max (face->box_horizontal_line_width, 0);
+      int box_vline_width = max (face->box_vertical_line_width, 0);
+
+      if (FONT_HEIGHT (s->font) < s->height - 2 * box_vline_width
+         || FONT_TOO_HIGH (s->font)
+          || s->font_not_found_p || s->extends_to_end_of_line_p || force_p)
+       {
+         if (!face->stipple)
+           haiku_draw_plain_background (s, face, box_line_width,
+                                        box_vline_width);
+         else
+           haiku_draw_stipple_background (s, face, box_line_width,
+                                          box_vline_width);
+         s->background_filled_p = 1;
+       }
+    }
+}
+
+static void
+haiku_mouse_face_colors (struct glyph_string *s, uint32_t *fg,
+                        uint32_t *bg)
+{
+  int face_id;
+  struct face *face;
+
+  /* What face has to be used last for the mouse face?  */
+  face_id = MOUSE_HL_INFO (s->f)->mouse_face_face_id;
+  face = FACE_FROM_ID_OR_NULL (s->f, face_id);
+  if (face == NULL)
+    face = FACE_FROM_ID (s->f, MOUSE_FACE_ID);
+
+  if (s->first_glyph->type == CHAR_GLYPH)
+    face_id = FACE_FOR_CHAR (s->f, face, s->first_glyph->u.ch, -1, Qnil);
+  else
+    face_id = FACE_FOR_CHAR (s->f, face, 0, -1, Qnil);
+
+  face = FACE_FROM_ID (s->f, face_id);
+  prepare_face_for_display (s->f, s->face);
+
+  if (fg)
+    *fg = face->foreground;
+  if (bg)
+    *bg = face->background;
+}
+
 static void
 haiku_draw_glyph_string_foreground (struct glyph_string *s)
 {
@@ -891,7 +913,6 @@ haiku_draw_glyph_string_foreground (struct glyph_string *s)
 
   if (s->font_not_found_p)
     {
-      BView_StartClip (view);
       if (s->hl == DRAW_CURSOR)
        BView_SetHighColor (view, FRAME_OUTPUT_DATA (s->f)->cursor_fg);
       else
@@ -903,7 +924,6 @@ haiku_draw_glyph_string_foreground (struct glyph_string *s)
                                 s->height);
          x += g->pixel_width;
        }
-      BView_EndClip (view);
     }
   else
     {
@@ -994,13 +1014,11 @@ haiku_draw_glyphless_glyph_string_foreground (struct 
glyph_string *s)
                                 s->ybase + glyph->slice.glyphless.lower_yoff,
                                 false);
        }
-      BView_StartClip (FRAME_HAIKU_VIEW (s->f));
       if (glyph->u.glyphless.method != GLYPHLESS_DISPLAY_THIN_SPACE)
        BView_FillRectangle (FRAME_HAIKU_VIEW (s->f),
                             x, s->ybase - glyph->ascent,
                             glyph->pixel_width - 1,
                             glyph->ascent + glyph->descent - 1);
-      BView_EndClip (FRAME_HAIKU_VIEW (s->f));
       x += glyph->pixel_width;
    }
 }
@@ -1042,10 +1060,8 @@ haiku_draw_stretch_glyph_string (struct glyph_string *s)
        x -= width;
 
       void *view = FRAME_HAIKU_VIEW (s->f);
-      BView_StartClip (view);
       BView_SetHighColor (view, FRAME_CURSOR_COLOR (s->f).pixel);
       BView_FillRectangle (view, x, s->y, width, s->height);
-      BView_EndClip (view);
 
       if (width < background_width)
        {
@@ -1060,17 +1076,13 @@ haiku_draw_stretch_glyph_string (struct glyph_string *s)
          if (!face->stipple)
            {
              uint32_t bkg;
-             if (s->hl == DRAW_MOUSE_FACE || (s->hl == DRAW_CURSOR
-                                              && s->row->mouse_face_p
-                                              && cursor_in_mouse_face_p 
(s->w)))
-                 haiku_mouse_face_colors (s, NULL, &bkg);
+             if (s->row->mouse_face_p && cursor_in_mouse_face_p (s->w))
+               haiku_mouse_face_colors (s, NULL, &bkg);
              else
                bkg = face->background;
 
-             BView_StartClip (view);
              BView_SetHighColor (view, bkg);
              BView_FillRectangle (view, x, y, w, h);
-             BView_EndClip (view);
            }
        }
     }
@@ -1091,18 +1103,14 @@ haiku_draw_stretch_glyph_string (struct glyph_string *s)
       if (background_width > 0)
        {
          void *view = FRAME_HAIKU_VIEW (s->f);
-         BView_StartClip (view);
          uint32_t bkg;
-         if (s->hl == DRAW_MOUSE_FACE)
-           haiku_mouse_face_colors (s, NULL, &bkg);
-         else if (s->hl == DRAW_CURSOR)
+         if (s->hl == DRAW_CURSOR)
            bkg = FRAME_CURSOR_COLOR (s->f).pixel;
          else
            bkg = s->face->background;
 
          BView_SetHighColor (view, bkg);
          BView_FillRectangle (view, x, s->y, background_width, s->height);
-         BView_EndClip (view);
        }
     }
   s->background_filled_p = 1;
@@ -1181,13 +1189,11 @@ haiku_draw_composite_glyph_string_foreground (struct 
glyph_string *s)
 
   if (s->font_not_found_p && !s->cmp_from)
     {
-      BView_StartClip (view);
       if (s->hl == DRAW_CURSOR)
        BView_SetHighColor (view, FRAME_OUTPUT_DATA (s->f)->cursor_fg);
       else
        BView_SetHighColor (view, s->face->foreground);
       BView_StrokeRectangle (view, s->x, s->y, s->width - 1, s->height - 1);
-      BView_EndClip (view);
     }
   else if (!s->first_glyph->u.cmp.automatic)
     {
@@ -1377,12 +1383,8 @@ haiku_draw_image_glyph_string (struct glyph_string *s)
 
   s->stippled_p = face->stipple != 0;
 
-  BView_draw_lock (view);
-  BView_StartClip (view);
   BView_SetHighColor (view, face->background);
   BView_FillRectangle (view, x, y, width, height);
-  BView_EndClip (view);
-  BView_draw_unlock (view);
 
   if (bitmap)
     {
@@ -1414,10 +1416,6 @@ haiku_draw_image_glyph_string (struct glyph_string *s)
 
       if (gui_intersect_rectangles (&cr, &ir, &r))
        {
-         BView_draw_lock (view);
-         BView_StartClip (view);
-
-         haiku_clip_to_string (s);
          if (s->img->have_be_transforms_p)
            {
              bitmap = BBitmap_transform_bitmap (bitmap,
@@ -1446,19 +1444,13 @@ haiku_draw_image_glyph_string (struct glyph_string *s)
 
          if (s->img->have_be_transforms_p)
            BBitmap_free (bitmap);
-         BView_EndClip (view);
-         BView_draw_unlock (view);
        }
 
       if (s->hl == DRAW_CURSOR)
        {
-         BView_draw_lock (view);
-         BView_StartClip (view);
          BView_SetPenSize (view, 1);
          BView_SetHighColor (view, FRAME_CURSOR_COLOR (s->f).pixel);
          BView_StrokeRectangle (view, r.x, r.y, r.width, r.height);
-         BView_EndClip (view);
-         BView_draw_unlock (view);
        }
     }
 
@@ -1495,7 +1487,6 @@ haiku_draw_glyph_string (struct glyph_string *s)
              haiku_maybe_draw_background (s->next, 1);
             else
              haiku_draw_stretch_glyph_string (s->next);
-            next->num_clips = 0;
            haiku_end_clip (s);
           }
     }
@@ -1513,9 +1504,13 @@ haiku_draw_glyph_string (struct glyph_string *s)
       box_filled_p = 1;
       haiku_draw_string_box (s, 0);
     }
-  else if (!s->clip_head && !s->clip_tail &&
-          ((s->prev && s->left_overhang && s->prev->hl != s->hl) ||
-           (s->next && s->right_overhang && s->next->hl != s->hl)))
+  else if (!s->clip_head /* draw_glyphs didn't specify a clip mask. */
+          && !s->clip_tail
+          && ((s->prev && s->prev->hl != s->hl && s->left_overhang)
+              || (s->next && s->next->hl != s->hl && s->right_overhang)))
+    /* We must clip just this glyph.  left_overhang part has already
+       drawn when s->prev was drawn, and right_overhang part will be
+       drawn later when s->next is drawn. */
     haiku_clip_to_string_exactly (s, s);
   else
     haiku_clip_to_string (s);
@@ -1553,17 +1548,17 @@ haiku_draw_glyph_string (struct glyph_string *s)
        haiku_maybe_draw_background (s, 1);
       haiku_draw_glyphless_glyph_string_foreground (s);
       break;
+    default:
+      emacs_abort ();
     }
 
-  if (!box_filled_p && face->box != FACE_NO_BOX)
-    haiku_draw_string_box (s, 1);
-
   if (!s->for_overlaps)
     {
-      uint32_t dcol;
-      dcol = face->foreground;
-
-      haiku_draw_text_decoration (s, face, dcol, s->width, s->x);
+      if (!box_filled_p && face->box != FACE_NO_BOX)
+       haiku_draw_string_box (s, 1);
+      else
+       haiku_draw_text_decoration (s, face, face->foreground,
+                                   s->width, s->x);
 
       if (s->prev)
        {
@@ -1576,11 +1571,10 @@ haiku_draw_glyph_string (struct glyph_string *s)
                /* As prev was drawn while clipped to its own area, we
                   must draw the right_overhang part using s->hl now.  */
                enum draw_glyphs_face save = prev->hl;
-               struct face *save_face = prev->face;
 
                prev->hl = s->hl;
-               prev->face = s->face;
                haiku_start_clip (s);
+               haiku_clip_to_string (s);
                haiku_clip_to_string_exactly (s, prev);
                if (prev->first_glyph->type == CHAR_GLYPH)
                  haiku_draw_glyph_string_foreground (prev);
@@ -1588,8 +1582,6 @@ haiku_draw_glyph_string (struct glyph_string *s)
                  haiku_draw_composite_glyph_string_foreground (prev);
                haiku_end_clip (s);
                prev->hl = save;
-               prev->face = save_face;
-               prev->num_clips = 0;
              }
        }
 
@@ -1604,11 +1596,10 @@ haiku_draw_glyph_string (struct glyph_string *s)
                /* As next will be drawn while clipped to its own area,
                   we must draw the left_overhang part using s->hl now.  */
                enum draw_glyphs_face save = next->hl;
-               struct face *save_face = next->face;
 
                next->hl = s->hl;
-               next->face = s->face;
                haiku_start_clip (s);
+               haiku_clip_to_string (s);
                haiku_clip_to_string_exactly (s, next);
                if (next->first_glyph->type == CHAR_GLYPH)
                  haiku_draw_glyph_string_foreground (next);
@@ -1616,15 +1607,11 @@ haiku_draw_glyph_string (struct glyph_string *s)
                  haiku_draw_composite_glyph_string_foreground (next);
                haiku_end_clip (s);
 
-               next->background_filled_p = 0;
                next->hl = save;
-               next->face = save_face;
-               next->clip_head = next;
-               next->num_clips = 0;
+               next->clip_head = s->next;
              }
        }
     }
-  s->num_clips = 0;
   haiku_end_clip (s);
   unblock_input ();
 }
@@ -2572,6 +2559,25 @@ haiku_make_fullscreen_consistent (struct frame *f)
   store_frame_param (f, Qfullscreen, lval);
 }
 
+static void
+flush_dirty_back_buffers (void)
+{
+  block_input ();
+  Lisp_Object tail, frame;
+  FOR_EACH_FRAME (tail, frame)
+    {
+      struct frame *f = XFRAME (frame);
+      if (FRAME_LIVE_P (f) &&
+          FRAME_HAIKU_P (f) &&
+          FRAME_HAIKU_WINDOW (f) &&
+          !FRAME_GARBAGED_P (f) &&
+          !buffer_flipping_blocked_p () &&
+          FRAME_DIRTY_P (f))
+        haiku_flip_buffers (f);
+    }
+  unblock_input ();
+}
+
 static int
 haiku_read_socket (struct terminal *terminal, struct input_event *hold_quit)
 {
@@ -2581,6 +2587,7 @@ haiku_read_socket (struct terminal *terminal, struct 
input_event *hold_quit)
   ssize_t b_size;
   struct unhandled_event *unhandled_events = NULL;
   int button_or_motion_p;
+  int need_flush = 0;
 
   if (!buf)
     buf = xmalloc (200);
@@ -2674,16 +2681,26 @@ haiku_read_socket (struct terminal *terminal, struct 
input_event *hold_quit)
        case KEY_DOWN:
          {
            struct haiku_key_event *b = buf;
+           Mouse_HLInfo *hlinfo = &x_display_list->mouse_highlight;
            struct frame *f = haiku_window_to_frame (b->window);
-           int non_ascii_p;
            if (!f)
              continue;
 
-           inev.code = b->unraw_mb_char;
+           /* If mouse-highlight is an integer, input clears out
+              mouse highlighting.  */
+           if (!hlinfo->mouse_face_hidden && FIXNUMP (Vmouse_highlight)
+               && (f == 0
+                   || !EQ (f->tool_bar_window, hlinfo->mouse_face_window)
+                   || !EQ (f->tab_bar_window, hlinfo->mouse_face_window)))
+             {
+               clear_mouse_face (hlinfo);
+               hlinfo->mouse_face_hidden = true;
+               need_flush = 1;
+             }
 
-           BMapKey (b->kc, &non_ascii_p, &inev.code);
+           inev.code = b->keysym ? b->keysym : b->multibyte_char;
 
-           if (non_ascii_p)
+           if (b->keysym)
              inev.kind = NON_ASCII_KEYSTROKE_EVENT;
            else
              inev.kind = inev.code > 127 ? MULTIBYTE_CHAR_KEYSTROKE_EVENT :
@@ -2719,8 +2736,9 @@ haiku_read_socket (struct terminal *terminal, struct 
input_event *hold_quit)
          {
            struct haiku_mouse_motion_event *b = buf;
            struct frame *f = haiku_window_to_frame (b->window);
+           Mouse_HLInfo *hlinfo = &x_display_list->mouse_highlight;
 
-           if (!f)
+           if (!f || FRAME_TOOLTIP_P (f))
              continue;
 
            Lisp_Object frame;
@@ -2729,6 +2747,13 @@ haiku_read_socket (struct terminal *terminal, struct 
input_event *hold_quit)
            x_display_list->last_mouse_movement_time = time (NULL);
            button_or_motion_p = 1;
 
+           if (hlinfo->mouse_face_hidden)
+             {
+               hlinfo->mouse_face_hidden = false;
+               clear_mouse_face (hlinfo);
+               need_flush = 1;
+             }
+
            if (b->just_exited_p)
              {
                Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (f);
@@ -2738,6 +2763,8 @@ haiku_read_socket (struct terminal *terminal, struct 
input_event *hold_quit)
                       certainly no longer on any text in the frame.  */
                    clear_mouse_face (hlinfo);
                    hlinfo->mouse_face_mouse_frame = 0;
+
+                   need_flush = 1;
                  }
 
                haiku_new_focus_frame (x_display_list->focused_frame);
@@ -2756,6 +2783,27 @@ haiku_read_socket (struct terminal *terminal, struct 
input_event *hold_quit)
                previous_help_echo_string = help_echo_string;
                help_echo_string = Qnil;
 
+               /* A LeaveNotify event (well, the closest equivalent on Haiku, 
which
+                  is a B_MOUSE_MOVED event with `transit' set to 
B_EXITED_VIEW) might
+                  be sent out-of-order with regards to motion events from other
+                  windows, such as when the mouse pointer rapidly moves from an
+                  undecorated child frame to its parent.  This can cause a 
failure to
+                  clear the mouse face on the former if an event for the 
latter is
+                  read by Emacs first and ends up showing the mouse face there.
+
+                  In case the `movement_locker' (also see the comment
+                  there) doesn't take care of the problem, work
+                  around it by clearing the mouse face now, if it is
+                  currently shown on a different frame.  */
+
+               if (hlinfo->mouse_face_hidden
+                   || (f != hlinfo->mouse_face_mouse_frame
+                       && !NILP (hlinfo->mouse_face_window)))
+                 {
+                   hlinfo->mouse_face_hidden = 0;
+                   clear_mouse_face (hlinfo);
+                 }
+
                if (f != dpyinfo->last_mouse_glyph_frame
                    || b->x < r.x || b->x >= r.x + r.width
                    || b->y < r.y || b->y >= r.y + r.height)
@@ -2770,12 +2818,6 @@ haiku_read_socket (struct terminal *terminal, struct 
input_event *hold_quit)
                                    help_echo_object, help_echo_pos);
                  }
 
-               if (MOUSE_HL_INFO (f)->mouse_face_hidden)
-                 {
-                   MOUSE_HL_INFO (f)->mouse_face_hidden = 0;
-                   clear_mouse_face (MOUSE_HL_INFO (f));
-                 }
-
                if (!NILP (Vmouse_autoselect_window))
                  {
                    static Lisp_Object last_mouse_window;
@@ -2828,8 +2870,11 @@ haiku_read_socket (struct terminal *terminal, struct 
input_event *hold_quit)
                tab_bar_p = EQ (window, f->tab_bar_window);
 
                if (tab_bar_p)
-                 tab_bar_arg = handle_tab_bar_click
-                   (f, x, y, type == BUTTON_DOWN, inev.modifiers);
+                 {
+                   tab_bar_arg = handle_tab_bar_click
+                     (f, x, y, type == BUTTON_DOWN, inev.modifiers);
+                   need_flush = 1;
+                 }
              }
 
            if (WINDOWP (f->tool_bar_window)
@@ -2846,7 +2891,7 @@ haiku_read_socket (struct terminal *terminal, struct 
input_event *hold_quit)
                  {
                    handle_tool_bar_click
                      (f, x, y, type == BUTTON_DOWN, inev.modifiers);
-                   redisplay ();
+                   need_flush = 1;
                  }
              }
 
@@ -3000,13 +3045,28 @@ haiku_read_socket (struct terminal *terminal, struct 
input_event *hold_quit)
          {
            struct haiku_wheel_move_event *b = buf;
            struct frame *f = haiku_window_to_frame (b->window);
-           int x, y;
+           int x, y, scroll_width, scroll_height;
            static float px = 0.0f, py = 0.0f;
+           Lisp_Object wheel_window;
 
            if (!f)
              continue;
+
            BView_get_mouse (FRAME_HAIKU_VIEW (f), &x, &y);
 
+           wheel_window = window_from_coordinates (f, x, y, 0, false, false);
+
+           if (NILP (wheel_window))
+             {
+               scroll_width = FRAME_PIXEL_WIDTH (f);
+               scroll_height = FRAME_PIXEL_HEIGHT (f);
+             }
+           else
+             {
+               scroll_width = XWINDOW (wheel_window)->pixel_width;
+               scroll_height = XWINDOW (wheel_window)->pixel_height;
+             }
+
            inev.modifiers = haiku_modifiers_to_emacs (b->modifiers);
 
            inev2.modifiers = inev.modifiers;
@@ -3018,13 +3078,13 @@ haiku_read_socket (struct terminal *terminal, struct 
input_event *hold_quit)
              py = 0;
 
            px += (b->delta_x
-                  * powf (FRAME_PIXEL_HEIGHT (f), 2.0f / 3.0f));
+                  * powf (scroll_width, 2.0f / 3.0f));
            py += (b->delta_y
-                  * powf (FRAME_PIXEL_HEIGHT (f), 2.0f / 3.0f));
+                  * powf (scroll_height, 2.0f / 3.0f));
 
            if (fabsf (py) >= FRAME_LINE_HEIGHT (f)
                || fabsf (px) >= FRAME_COLUMN_WIDTH (f)
-               || !x_coalesce_scroll_events)
+               || !mwheel_coalesce_scroll_events)
              {
                inev.kind = (fabsf (px) > fabsf (py)
                             ? HORIZ_WHEEL_EVENT
@@ -3224,6 +3284,9 @@ haiku_read_socket (struct terminal *terminal, struct 
input_event *hold_quit)
       xfree (old);
     }
 
+  if (need_flush)
+    flush_dirty_back_buffers ();
+
   unblock_input ();
   return message_count;
 }
@@ -3565,10 +3628,6 @@ syms_of_haikuterm (void)
      doc: /* SKIP: real doc in xterm.c.  */);
   Vx_toolkit_scroll_bars = Qt;
 
-  DEFVAR_BOOL ("x-coalesce-scroll-events", x_coalesce_scroll_events,
-              doc: /* SKIP: real doc in xterm.c.  */);
-  x_coalesce_scroll_events = true;
-
   DEFVAR_BOOL ("haiku-debug-on-fatal-error", haiku_debug_on_fatal_error,
      doc: /* If non-nil, Emacs will launch the system debugger upon a fatal 
error.  */);
   haiku_debug_on_fatal_error = 1;
diff --git a/src/haikuterm.h b/src/haikuterm.h
index 7ed7485ef5..3e39403ab4 100644
--- a/src/haikuterm.h
+++ b/src/haikuterm.h
@@ -1,5 +1,5 @@
 /* Haiku window system support
-   Copyright (C) 2021 Free Software Foundation, Inc.
+   Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/hbfont.c b/src/hbfont.c
index e9f4085b1a..2721a66120 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2019-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/image.c b/src/image.c
index f2597f529d..a4976caba8 100644
--- a/src/image.c
+++ b/src/image.c
@@ -1,6 +1,6 @@
 /* Functions for image support on window system.
 
-Copyright (C) 1989, 1992-2021 Free Software Foundation, Inc.
+Copyright (C) 1989, 1992-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -31,6 +31,7 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 
 #include <setjmp.h>
 
+#include <math.h>
 #include <stdint.h>
 #include <c-ctype.h>
 #include <flexmember.h>
@@ -79,27 +80,40 @@ typedef struct x_bitmap_record Bitmap_Record;
 #endif /* !USE_CAIRO */
 #endif /* HAVE_X_WINDOWS */
 
-#ifdef USE_CAIRO
-#define GET_PIXEL image_pix_context_get_pixel
-#define PUT_PIXEL image_pix_container_put_pixel
-#define NO_PIXMAP 0
-
-#define PIX_MASK_RETAIN        0
-#define PIX_MASK_DRAW  255
-
+#if defined(USE_CAIRO) || defined(HAVE_NS)
 #define RGB_TO_ULONG(r, g, b) (((r) << 16) | ((g) << 8) | (b))
+#ifndef HAVE_NS
 #define ARGB_TO_ULONG(a, r, g, b) (((a) << 24) | ((r) << 16) | ((g) << 8) | 
(b))
+#endif
 #define RED_FROM_ULONG(color)  (((color) >> 16) & 0xff)
 #define GREEN_FROM_ULONG(color)        (((color) >> 8) & 0xff)
 #define BLUE_FROM_ULONG(color) ((color) & 0xff)
 #define RED16_FROM_ULONG(color)                (RED_FROM_ULONG (color) * 0x101)
 #define GREEN16_FROM_ULONG(color)      (GREEN_FROM_ULONG (color) * 0x101)
 #define BLUE16_FROM_ULONG(color)       (BLUE_FROM_ULONG (color) * 0x101)
+#endif
+
+#ifdef USE_CAIRO
+#define GET_PIXEL image_pix_context_get_pixel
+#define PUT_PIXEL image_pix_container_put_pixel
+#define NO_PIXMAP 0
+
+#define PIX_MASK_RETAIN        0
+#define PIX_MASK_DRAW  255
 
 static unsigned long image_alloc_image_color (struct frame *, struct image *,
                                              Lisp_Object, unsigned long);
 #endif /* USE_CAIRO */
 
+#if defined HAVE_PGTK && defined HAVE_IMAGEMAGICK
+/* In pgtk, we don't want to create scaled image.  If we create scaled
+ * image on scale=2.0 environment, the created image is half size and
+ * Gdk scales it back, and the result is blurry.  To avoid this, we
+ * hold original size image as far as we can, and let Gdk to scale it
+ * when it is shown.  */
+# define DONT_CREATE_TRANSFORMED_IMAGEMAGICK_IMAGE
+#endif
+
 #ifdef HAVE_NTGUI
 
 /* We need (or want) w32.h only when we're _not_ compiling for Cygwin.  */
@@ -130,6 +144,10 @@ typedef struct ns_bitmap_record Bitmap_Record;
 
 #endif /* HAVE_NS */
 
+#ifdef HAVE_PGTK
+typedef struct pgtk_bitmap_record Bitmap_Record;
+#endif /* HAVE_PGTK */
+
 #if (defined HAVE_X_WINDOWS \
      && ! (defined HAVE_NTGUI || defined USE_CAIRO || defined HAVE_NS))
 /* W32_TODO : Color tables on W32.  */
@@ -418,6 +436,34 @@ image_reference_bitmap (struct frame *f, ptrdiff_t id)
   ++FRAME_DISPLAY_INFO (f)->bitmaps[id - 1].refcount;
 }
 
+#ifdef HAVE_PGTK
+static cairo_pattern_t *
+image_create_pattern_from_pixbuf (struct frame *f, GdkPixbuf * pixbuf)
+{
+  GdkPixbuf *pb = gdk_pixbuf_add_alpha (pixbuf, TRUE, 255, 255, 255);
+  cairo_surface_t *surface =
+    cairo_surface_create_similar_image (cairo_get_target
+                                       (f->output_data.pgtk->cr_context),
+                                       CAIRO_FORMAT_A1,
+                                       gdk_pixbuf_get_width (pb),
+                                       gdk_pixbuf_get_height (pb));
+
+  cairo_t *cr = cairo_create (surface);
+  gdk_cairo_set_source_pixbuf (cr, pb, 0, 0);
+  cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
+  cairo_paint (cr);
+  cairo_destroy (cr);
+
+  cairo_pattern_t *pat = cairo_pattern_create_for_surface (surface);
+  cairo_pattern_set_extend (pat, CAIRO_EXTEND_REPEAT);
+
+  cairo_surface_destroy (surface);
+  g_object_unref (pb);
+
+  return pat;
+}
+#endif
+
 /* Create a bitmap for frame F from a HEIGHT x WIDTH array of bits at BITS.  */
 
 ptrdiff_t
@@ -452,6 +498,49 @@ image_create_bitmap_from_data (struct frame *f, char *bits,
       return -1;
 #endif
 
+#ifdef HAVE_PGTK
+  GdkPixbuf *pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
+                                     FALSE,
+                                     8,
+                                     width,
+                                     height);
+  {
+    char *sp = bits;
+    int mask = 0x01;
+    unsigned char *buf = gdk_pixbuf_get_pixels (pixbuf);
+    int rowstride = gdk_pixbuf_get_rowstride (pixbuf);
+    for (int y = 0; y < height; y++)
+      {
+       unsigned char *dp = buf + rowstride * y;
+       for (int x = 0; x < width; x++)
+         {
+           if (*sp & mask)
+             {
+               *dp++ = 0xff;
+               *dp++ = 0xff;
+               *dp++ = 0xff;
+             }
+           else
+             {
+               *dp++ = 0x00;
+               *dp++ = 0x00;
+               *dp++ = 0x00;
+             }
+           if ((mask <<= 1) >= 0x100)
+             {
+               mask = 0x01;
+               sp++;
+             }
+         }
+       if (mask != 0x01)
+         {
+           mask = 0x01;
+           sp++;
+         }
+      }
+  }
+#endif /* HAVE_PGTK */
+
 #ifdef HAVE_HAIKU
   void *bitmap = BBitmap_new (width, height, 1);
   BBitmap_import_mono_bits (bitmap, bits, width, height);
@@ -464,6 +553,13 @@ image_create_bitmap_from_data (struct frame *f, char *bits,
   dpyinfo->bitmaps[id - 1].depth = 1;
 #endif
 
+#ifdef HAVE_PGTK
+  dpyinfo->bitmaps[id - 1].img = pixbuf;
+  dpyinfo->bitmaps[id - 1].depth = 1;
+  dpyinfo->bitmaps[id - 1].pattern =
+    image_create_pattern_from_pixbuf (f, pixbuf);
+#endif
+
 #ifdef HAVE_HAIKU
   dpyinfo->bitmaps[id - 1].img = bitmap;
   dpyinfo->bitmaps[id - 1].depth = 1;
@@ -521,6 +617,30 @@ image_create_bitmap_from_file (struct frame *f, 
Lisp_Object file)
   return id;
 #endif
 
+#ifdef HAVE_PGTK
+  GError *err = NULL;
+  ptrdiff_t id;
+  void * bitmap = gdk_pixbuf_new_from_file (SSDATA (file), &err);
+
+  if (!bitmap)
+    {
+      g_error_free (err);
+      return -1;
+    }
+
+  id = image_allocate_bitmap_record (f);
+
+  dpyinfo->bitmaps[id - 1].img = bitmap;
+  dpyinfo->bitmaps[id - 1].refcount = 1;
+  dpyinfo->bitmaps[id - 1].file = xlispstrdup (file);
+  //dpyinfo->bitmaps[id - 1].depth = 1;
+  dpyinfo->bitmaps[id - 1].height = gdk_pixbuf_get_width (bitmap);
+  dpyinfo->bitmaps[id - 1].width = gdk_pixbuf_get_height (bitmap);
+  dpyinfo->bitmaps[id - 1].pattern
+    = image_create_pattern_from_pixbuf (f, bitmap);
+  return id;
+#endif
+
 #ifdef HAVE_X_WINDOWS
   unsigned int width, height;
   Pixmap bitmap;
@@ -593,6 +713,11 @@ free_bitmap_record (Display_Info *dpyinfo, Bitmap_Record 
*bm)
   ns_release_object (bm->img);
 #endif
 
+#ifdef HAVE_PGTK
+  if (bm->pattern != NULL)
+    cairo_pattern_destroy (bm->pattern);
+#endif
+
 #ifdef HAVE_HAIKU
   BBitmap_free (bm->img);
 #endif
@@ -1357,7 +1482,6 @@ image_ascent (struct image *img, struct face *face, 
struct glyph_slice *slice)
   return ascent;
 }
 
-
 
 /* Image background colors.  */
 
@@ -1381,6 +1505,7 @@ four_corners_best (Emacs_Pix_Context pimg, int *corners,
       corner_pixels[3] = GET_PIXEL (pimg, corners[LEFT_CORNER], 
corners[BOT_CORNER] - 1);
     }
   else
+
     {
       /* Get the colors at the corner_pixels of pimg.  */
       corner_pixels[0] = GET_PIXEL (pimg, 0, 0);
@@ -2016,14 +2141,16 @@ postprocess_image (struct frame *f, struct image *img)
    safely rounded and clipped to int range.  */
 
 static int
-scale_image_size (int size, size_t divisor, size_t multiplier)
+scale_image_size (int size, double divisor, double multiplier)
 {
   if (divisor != 0)
     {
-      double s = size;
-      double scaled = s * multiplier / divisor + 0.5;
+      double scaled = size * multiplier / divisor;
       if (scaled < INT_MAX)
-       return scaled;
+       {
+         /* Use ceil, as rounding can discard fractional SVG pixels.  */
+         return ceil (scaled);
+       }
     }
   return INT_MAX;
 }
@@ -2044,84 +2171,77 @@ image_get_dimension (struct image *img, Lisp_Object 
symbol)
   if (FIXNATP (value))
     return min (XFIXNAT (value), INT_MAX);
   if (CONSP (value) && NUMBERP (CAR (value)) && EQ (Qem, CDR (value)))
-    return min (img->face_font_size * XFLOATINT (CAR (value)), INT_MAX);
+    return scale_image_size (img->face_font_size, 1, XFLOATINT (CAR (value)));
 
   return -1;
 }
 
 /* Compute the desired size of an image with native size WIDTH x HEIGHT.
-   Use SPEC to deduce the size.  Store the desired size into
+   Use IMG to deduce the size.  Store the desired size into
    *D_WIDTH x *D_HEIGHT.  Store -1 x -1 if the native size is OK.  */
 static void
-compute_image_size (size_t width, size_t height,
+compute_image_size (double width, double height,
                    struct image *img,
                    int *d_width, int *d_height)
 {
-  Lisp_Object value;
-  int int_value;
-  int desired_width = -1, desired_height = -1, max_width = -1, max_height = -1;
   double scale = 1;
-
-  value = image_spec_value (img->spec, QCscale, NULL);
+  Lisp_Object value = image_spec_value (img->spec, QCscale, NULL);
   if (NUMBERP (value))
-    scale = XFLOATINT (value);
-
-  int_value = image_get_dimension (img, QCmax_width);
-  if (int_value >= 0)
-    max_width = int_value;
-
-  int_value = image_get_dimension (img, QCmax_height);
-  if (int_value >= 0)
-    max_height = int_value;
+    {
+      double dval = XFLOATINT (value);
+      if (0 <= dval)
+       scale = dval;
+    }
 
   /* If width and/or height is set in the display spec assume we want
      to scale to those values.  If either h or w is unspecified, the
      unspecified should be calculated from the specified to preserve
      aspect ratio.  */
-  int_value = image_get_dimension (img, QCwidth);
-  if (int_value >= 0)
+  int desired_width = image_get_dimension (img, QCwidth), max_width;
+  if (desired_width < 0)
+    max_width = image_get_dimension (img, QCmax_width);
+  else
     {
-      desired_width = int_value * scale;
+      desired_width = scale_image_size (desired_width, 1, scale);
       /* :width overrides :max-width. */
       max_width = -1;
     }
 
-  int_value = image_get_dimension (img, QCheight);
-  if (int_value >= 0)
+  int desired_height = image_get_dimension (img, QCheight), max_height;
+  if (desired_height < 0)
+    max_height = image_get_dimension (img, QCmax_height);
+  else
     {
-      desired_height = int_value * scale;
+      desired_height = scale_image_size (desired_height, 1, scale);
       /* :height overrides :max-height. */
       max_height = -1;
     }
 
   /* If we have both width/height set explicitly, we skip past all the
      aspect ratio-preserving computations below. */
-  if (desired_width != -1 && desired_height != -1)
+  if (0 <= desired_width && 0 <= desired_height)
     goto out;
 
-  width = width * scale;
-  height = height * scale;
-
-  if (desired_width != -1)
+  if (0 <= desired_width)
     /* Width known, calculate height. */
     desired_height = scale_image_size (desired_width, width, height);
-  else if (desired_height != -1)
+  else if (0 <= desired_height)
     /* Height known, calculate width. */
     desired_width = scale_image_size (desired_height, height, width);
   else
     {
-      desired_width = width;
-      desired_height = height;
+      desired_width = scale_image_size (width, 1, scale);
+      desired_height = scale_image_size (height, 1, scale);
     }
 
-  if (max_width != -1 && desired_width > max_width)
+  if (0 <= max_width && max_width < desired_width)
     {
       /* The image is wider than :max-width. */
       desired_width = max_width;
       desired_height = scale_image_size (desired_width, width, height);
     }
 
-  if (max_height != -1 && desired_height > max_height)
+  if (0 <= max_height && max_height < desired_height)
     {
       /* The image is higher than :max-height. */
       desired_height = max_height;
@@ -2254,7 +2374,8 @@ compute_image_rotation (struct image *img, double 
*rotation)
 static void
 image_set_transform (struct frame *f, struct image *img)
 {
-# ifdef HAVE_IMAGEMAGICK
+# if (defined HAVE_IMAGEMAGICK \
+      && !defined DONT_CREATE_TRANSFORMED_IMAGEMAGICK_IMAGE)
   /* ImageMagick images already have the correct transform.  */
   if (EQ (image_spec_value (img->spec, QCtype, NULL), Qimagemagick))
     return;
@@ -2507,8 +2628,8 @@ lookup_image (struct frame *f, Lisp_Object spec, int 
face_id)
     face_id = DEFAULT_FACE_ID;
 
   struct face *face = FACE_FROM_ID (f, face_id);
-  unsigned long foreground = FACE_COLOR_TO_PIXEL (face->foreground, f);
-  unsigned long background = FACE_COLOR_TO_PIXEL (face->background, f);
+  unsigned long foreground = face->foreground;
+  unsigned long background = face->background;
   int font_size = face->font->pixel_size;
   char *font_family = SSDATA (face->lface[LFACE_FAMILY_INDEX]);
 
@@ -3068,14 +3189,6 @@ gui_put_x_image (struct frame *f, Emacs_Pix_Container 
pimg,
   XFreeGC (FRAME_X_DISPLAY (f), gc);
 #endif /* HAVE_X_WINDOWS */
 
-#ifdef HAVE_NTGUI
-#if 0  /* I don't think this is necessary looking at where it is used.  */
-  HDC hdc = get_frame_dc (f);
-  SetDIBits (hdc, pixmap, 0, height, pimg->data, &(pimg->info), 
DIB_RGB_COLORS);
-  release_frame_dc (f, hdc);
-#endif
-#endif /* HAVE_NTGUI */
-
 #ifdef HAVE_NS
   eassert (pimg == pixmap);
   ns_retain_object (pimg);
@@ -4109,6 +4222,13 @@ xbm_load (struct frame *f, struct image *img)
                              XPM images
  ***********************************************************************/
 
+#if defined (HAVE_XPM) || defined (HAVE_NS) || defined (HAVE_PGTK)
+
+static bool xpm_image_p (Lisp_Object object);
+static bool xpm_load (struct frame *f, struct image *img);
+
+#endif /* HAVE_XPM || HAVE_NS */
+
 #ifdef HAVE_XPM
 #ifdef HAVE_NTGUI
 /* Indicate to xpm.h that we don't have Xlib.  */
@@ -4152,7 +4272,7 @@ enum xpm_keyword_index
   XPM_LAST
 };
 
-#if defined HAVE_XPM || defined HAVE_NS || defined HAVE_HAIKU
+#if defined HAVE_XPM || defined HAVE_NS || defined HAVE_HAIKU || defined 
HAVE_PGTK
 /* Vector of image_keyword structures describing the format
    of valid XPM image specifications.  */
 
@@ -4170,7 +4290,7 @@ static const struct image_keyword xpm_format[XPM_LAST] =
   {":color-symbols",   IMAGE_DONT_CHECK_VALUE_TYPE,            0},
   {":background",      IMAGE_STRING_OR_NIL_VALUE,              0}
 };
-#endif /* HAVE_XPM || HAVE_NS || HAVE_HAIKU */
+#endif /* HAVE_XPM || HAVE_NS || HAVE_HAIKU || HAVE_PGTK */
 
 #if defined HAVE_X_WINDOWS && !defined USE_CAIRO
 
@@ -4394,7 +4514,7 @@ init_xpm_functions (void)
 
 #endif /* WINDOWSNT */
 
-#if defined HAVE_XPM || defined HAVE_NS || defined HAVE_HAIKU
+#if defined HAVE_XPM || defined HAVE_NS || defined HAVE_HAIKU || defined 
HAVE_PGTK
 /* Value is true if COLOR_SYMBOLS is a valid color symbols list
    for XPM images.  Such a list must consist of conses whose car and
    cdr are strings.  */
@@ -4430,7 +4550,7 @@ xpm_image_p (Lisp_Object object)
          && (! fmt[XPM_COLOR_SYMBOLS].count
              || xpm_valid_color_symbols_p (fmt[XPM_COLOR_SYMBOLS].value)));
 }
-#endif /* HAVE_XPM || HAVE_NS || HAVE_HAIKU */
+#endif /* HAVE_XPM || HAVE_NS || HAVE_HAIKU || HAVE_PGTK */
 
 #endif /* HAVE_XPM || USE_CAIRO || HAVE_NS || HAVE_HAIKU */
 
@@ -4802,7 +4922,8 @@ xpm_load (struct frame *f, struct image *img)
 
 #if (defined USE_CAIRO && defined HAVE_XPM)    \
   || (defined HAVE_NS && !defined HAVE_XPM)    \
-  || (defined HAVE_HAIKU && !defined HAVE_XPM)
+  || (defined HAVE_HAIKU && !defined HAVE_XPM)  \
+  || (defined HAVE_PGTK && !defined HAVE_XPM)
 
 /* XPM support functions for NS and Haiku where libxpm is not available, and 
for
    Cairo.  Only XPM version 3 (without any extensions) is supported.  */
@@ -5001,7 +5122,7 @@ xpm_load_image (struct frame *f,
   Lisp_Object (*get_color_table) (Lisp_Object, const char *, int);
   Lisp_Object frame, color_symbols, color_table;
   int best_key;
-#ifndef HAVE_NS
+#if !defined (HAVE_NS)
   bool have_mask = false;
 #endif
   Emacs_Pix_Container ximg = NULL, mask_img = NULL;
@@ -8974,7 +9095,7 @@ webp_load (struct frame *f, struct image *img)
 {
   ptrdiff_t size = 0;
   uint8_t *contents;
-  Lisp_Object file;
+  Lisp_Object file = Qnil;
 
   /* Open the WebP file.  */
   Lisp_Object specified_file = image_spec_value (img->spec, QCfile, NULL);
@@ -9011,7 +9132,7 @@ webp_load (struct frame *f, struct image *img)
   /* Validate the WebP image header.  */
   if (!WebPGetInfo (contents, size, NULL, NULL))
     {
-      if (NILP (specified_data))
+      if (!NILP (file))
        image_error ("Not a WebP file: `%s'", file);
       else
        image_error ("Invalid header in WebP image data");
@@ -9034,7 +9155,7 @@ webp_load (struct frame *f, struct image *img)
     case VP8_STATUS_USER_ABORT:
     default:
       /* Error out in all other cases.  */
-      if (NILP (specified_data))
+      if (!NILP (file))
        image_error ("Error when interpreting WebP image data: `%s'", file);
       else
        image_error ("Error when interpreting WebP image data");
@@ -9051,6 +9172,12 @@ webp_load (struct frame *f, struct image *img)
     /* Linear [r0, g0, b0, r1, g1, b1, ...] order.  */
     decoded = WebPDecodeRGB (contents, size, &width, &height);
 
+  if (!decoded)
+    {
+      image_error ("Error when interpreting WebP image data");
+      goto webp_error1;
+    }
+
   if (!(width <= INT_MAX && height <= INT_MAX
        && check_image_size (f, width, height)))
     {
@@ -9517,11 +9644,15 @@ imagemagick_load_image (struct frame *f, struct image 
*img,
   PixelWand **pixels, *bg_wand = NULL;
   MagickPixelPacket  pixel;
   Lisp_Object image;
+#ifndef DONT_CREATE_TRANSFORMED_IMAGEMAGICK_IMAGE
   Lisp_Object value;
+#endif
   Lisp_Object crop;
   EMACS_INT ino;
   int desired_width, desired_height;
+#ifndef DONT_CREATE_TRANSFORMED_IMAGEMAGICK_IMAGE
   double rotation;
+#endif
   char hint_buffer[MaxTextExtent];
   char *filename_hint = NULL;
   imagemagick_initialize ();
@@ -9638,9 +9769,13 @@ imagemagick_load_image (struct frame *f, struct image 
*img,
     PixelSetBlue  (bg_wand, (double) bgcolor.blue  / 65535);
   }
 
+#ifndef DONT_CREATE_TRANSFORMED_IMAGEMAGICK_IMAGE
   compute_image_size (MagickGetImageWidth (image_wand),
                      MagickGetImageHeight (image_wand),
                      img, &desired_width, &desired_height);
+#else
+  desired_width = desired_height = -1;
+#endif
 
   if (desired_width != -1 && desired_height != -1)
     {
@@ -9684,6 +9819,7 @@ imagemagick_load_image (struct frame *f, struct image 
*img,
        }
     }
 
+#ifndef DONT_CREATE_TRANSFORMED_IMAGEMAGICK_IMAGE
   /* Furthermore :rotation. we need background color and angle for
      rotation.  */
   /*
@@ -9702,6 +9838,7 @@ imagemagick_load_image (struct frame *f, struct image 
*img,
           goto imagemagick_error;
         }
     }
+#endif
 
   /* Set the canvas background color to the frame or specified
      background, and flatten the image.  Note: as of ImageMagick
@@ -9833,8 +9970,8 @@ imagemagick_load_image (struct frame *f, struct image 
*img,
                                           color_scale * pixel.red,
                                           color_scale * pixel.green,
                                           color_scale * pixel.blue));
-            }
-        }
+           }
+       }
       DestroyPixelIterator (iterator);
     }
 
@@ -10070,6 +10207,10 @@ DEF_DLL_FN (gboolean, rsvg_handle_close, (RsvgHandle 
*, GError **));
 DEF_DLL_FN (void, rsvg_handle_set_dpi_x_y,
            (RsvgHandle * handle, double dpi_x, double dpi_y));
 
+#  if LIBRSVG_CHECK_VERSION (2, 52, 1)
+DEF_DLL_FN (gboolean, rsvg_handle_get_intrinsic_size_in_pixels,
+            (RsvgHandle *, gdouble *, gdouble *));
+#  endif
 #  if LIBRSVG_CHECK_VERSION (2, 46, 0)
 DEF_DLL_FN (void, rsvg_handle_get_intrinsic_dimensions,
             (RsvgHandle *, gboolean *, RsvgLength *, gboolean *,
@@ -10133,6 +10274,9 @@ init_svg_functions (void)
   LOAD_DLL_FN (library, rsvg_handle_close);
 #endif
   LOAD_DLL_FN (library, rsvg_handle_set_dpi_x_y);
+#if LIBRSVG_CHECK_VERSION (2, 52, 1)
+  LOAD_DLL_FN (library, rsvg_handle_get_intrinsic_size_in_pixels);
+#endif
 #if LIBRSVG_CHECK_VERSION (2, 46, 0)
   LOAD_DLL_FN (library, rsvg_handle_get_intrinsic_dimensions);
   LOAD_DLL_FN (library, rsvg_handle_get_geometry_for_layer);
@@ -10176,6 +10320,9 @@ init_svg_functions (void)
 #  undef g_clear_error
 #  undef g_object_unref
 #  undef g_type_init
+#  if LIBRSVG_CHECK_VERSION (2, 52, 1)
+#   undef rsvg_handle_get_intrinsic_size_in_pixels
+#  endif
 #  if LIBRSVG_CHECK_VERSION (2, 46, 0)
 #   undef rsvg_handle_get_intrinsic_dimensions
 #   undef rsvg_handle_get_geometry_for_layer
@@ -10211,6 +10358,10 @@ init_svg_functions (void)
 #  if ! GLIB_CHECK_VERSION (2, 36, 0)
 #   define g_type_init fn_g_type_init
 #  endif
+#  if LIBRSVG_CHECK_VERSION (2, 52, 1)
+#   define rsvg_handle_get_intrinsic_size_in_pixels \
+       fn_rsvg_handle_get_intrinsic_size_in_pixels
+#  endif
 #  if LIBRSVG_CHECK_VERSION (2, 46, 0)
 #   define rsvg_handle_get_intrinsic_dimensions \
        fn_rsvg_handle_get_intrinsic_dimensions
@@ -10448,50 +10599,71 @@ svg_load_image (struct frame *f, struct image *img, 
char *contents,
 
   /* Get the image dimensions.  */
 #if LIBRSVG_CHECK_VERSION (2, 46, 0)
-  RsvgRectangle zero_rect, viewbox, out_logical_rect;
-
-  /* Try the intrinsic dimensions first.  */
-  gboolean has_width, has_height, has_viewbox;
-  RsvgLength iwidth, iheight;
-  double dpi = FRAME_DISPLAY_INFO (f)->resx;
-
-  rsvg_handle_get_intrinsic_dimensions (rsvg_handle,
-                                        &has_width, &iwidth,
-                                        &has_height, &iheight,
-                                        &has_viewbox, &viewbox);
+  gdouble gviewbox_width = 0, gviewbox_height = 0;
+  gboolean has_viewbox = FALSE;
+# if LIBRSVG_CHECK_VERSION (2, 52, 1)
+  has_viewbox = rsvg_handle_get_intrinsic_size_in_pixels (rsvg_handle,
+                                                         &gviewbox_width,
+                                                         &gviewbox_height);
+# endif
 
-  if (has_width && has_height)
+  if (has_viewbox)
     {
-      /* Success!  We can use these values directly.  */
-      viewbox_width = svg_css_length_to_pixels (iwidth, dpi, 
img->face_font_size);
-      viewbox_height = svg_css_length_to_pixels (iheight, dpi, 
img->face_font_size);
-    }
-  else if (has_width && has_viewbox)
-    {
-      viewbox_width = svg_css_length_to_pixels (iwidth, dpi, 
img->face_font_size);
-      viewbox_height = svg_css_length_to_pixels (iwidth, dpi, 
img->face_font_size)
-        * viewbox.height / viewbox.width;
-    }
-  else if (has_height && has_viewbox)
-    {
-      viewbox_height = svg_css_length_to_pixels (iheight, dpi, 
img->face_font_size);
-      viewbox_width = svg_css_length_to_pixels (iheight, dpi, 
img->face_font_size)
-        * viewbox.width / viewbox.height;
-    }
-  else if (has_viewbox)
-    {
-      viewbox_width = viewbox.width;
-      viewbox_height = viewbox.height;
+      viewbox_width = gviewbox_width;
+      viewbox_height = gviewbox_height;
     }
   else
     {
-      /* We haven't found a usable set of sizes, so try working out
-         the visible area.  */
-      rsvg_handle_get_geometry_for_layer (rsvg_handle, NULL,
-                                          &zero_rect, &viewbox,
-                                          &out_logical_rect, NULL);
-      viewbox_width = viewbox.x + viewbox.width;
-      viewbox_height = viewbox.y + viewbox.height;
+      RsvgRectangle zero_rect, viewbox, out_logical_rect;
+
+      /* Try the intrinsic dimensions first.  */
+      gboolean has_width, has_height;
+      RsvgLength iwidth, iheight;
+      double dpi = FRAME_DISPLAY_INFO (f)->resx;
+
+      rsvg_handle_get_intrinsic_dimensions (rsvg_handle,
+                                           &has_width, &iwidth,
+                                           &has_height, &iheight,
+                                           &has_viewbox, &viewbox);
+
+      if (has_width && has_height)
+       {
+         /* Success!  We can use these values directly.  */
+         viewbox_width = svg_css_length_to_pixels (iwidth, dpi,
+                                                   img->face_font_size);
+         viewbox_height = svg_css_length_to_pixels (iheight, dpi,
+                                                    img->face_font_size);
+       }
+      else if (has_width && has_viewbox)
+       {
+         viewbox_width = svg_css_length_to_pixels (iwidth, dpi,
+                                                   img->face_font_size);
+         viewbox_height = viewbox_width * viewbox.height / viewbox.width;
+       }
+      else if (has_height && has_viewbox)
+       {
+         viewbox_height = svg_css_length_to_pixels (iheight, dpi,
+                                                    img->face_font_size);
+         viewbox_width = viewbox_height * viewbox.width / viewbox.height;
+       }
+      else if (has_viewbox)
+       {
+         viewbox_width = viewbox.width;
+         viewbox_height = viewbox.height;
+       }
+      else
+       viewbox_width = viewbox_height = 0;
+
+      if (! (0 < viewbox_width && 0 < viewbox_height))
+       {
+         /* We haven't found a usable set of sizes, so try working out
+            the visible area.  */
+         rsvg_handle_get_geometry_for_layer (rsvg_handle, NULL,
+                                             &zero_rect, &viewbox,
+                                             &out_logical_rect, NULL);
+         viewbox_width = viewbox.x + viewbox.width;
+         viewbox_height = viewbox.y + viewbox.height;
+       }
     }
 #else
   /* In librsvg before 2.46.0, guess the viewbox from the image dimensions.  */
@@ -10504,8 +10676,8 @@ svg_load_image (struct frame *f, struct image *img, 
char *contents,
   compute_image_size (viewbox_width, viewbox_height, img,
                       &width, &height);
 
-  width *= FRAME_SCALE_FACTOR (f);
-  height *= FRAME_SCALE_FACTOR (f);
+  width = scale_image_size (width, 1, FRAME_SCALE_FACTOR (f));
+  height = scale_image_size (height, 1, FRAME_SCALE_FACTOR (f));
 
   if (! check_image_size (f, width, height))
     {
@@ -10952,16 +11124,6 @@ x_kill_gs_process (Pixmap pixmap, struct frame *f)
          free_color_table ();
 #endif
          XDestroyImage (ximg);
-
-#if 0 /* This doesn't seem to be the case.  If we free the colors
-        here, we get a BadAccess later in image_clear_image when
-        freeing the colors.  */
-         /* We have allocated colors once, but Ghostscript has also
-            allocated colors on behalf of us.  So, to get the
-            reference counts right, free them once.  */
-         if (img->ncolors)
-           x_free_colors (f, img->colors, img->ncolors);
-#endif
        }
       else
        image_error ("Cannot get X image of `%s'; colors will not be freed",
@@ -11121,7 +11283,7 @@ static struct image_type const image_types[] =
  { SYMBOL_INDEX (Qjpeg), jpeg_image_p, jpeg_load, image_clear_image,
    IMAGE_TYPE_INIT (init_jpeg_functions) },
 #endif
-#if defined HAVE_XPM || defined HAVE_NS || defined HAVE_HAIKU
+#if defined HAVE_XPM || defined HAVE_NS || defined HAVE_HAIKU || defined 
HAVE_PGTK
  { SYMBOL_INDEX (Qxpm), xpm_image_p, xpm_load, image_clear_image,
    IMAGE_TYPE_INIT (init_xpm_functions) },
 #endif
@@ -11269,7 +11431,8 @@ non-numeric, there is no explicit limit on the size of 
images.  */);
   DEFSYM (Qxbm, "xbm");
   add_image_type (Qxbm);
 
-#if defined (HAVE_XPM) || defined (HAVE_NS) || defined (HAVE_HAIKU)
+#if defined (HAVE_XPM) || defined (HAVE_NS) \
+  || defined (HAVE_HAIKU) || defined (HAVE_PGTK)
   DEFSYM (Qxpm, "xpm");
   add_image_type (Qxpm);
 #endif
@@ -11294,7 +11457,8 @@ non-numeric, there is no explicit limit on the size of 
images.  */);
   add_image_type (Qpng);
 #endif
 
-#if defined (HAVE_WEBP)
+#if defined (HAVE_WEBP) || (defined (HAVE_NATIVE_IMAGE_API) \
+                           && defined (HAVE_HAIKU))
   DEFSYM (Qwebp, "webp");
   add_image_type (Qwebp);
 #endif
@@ -11320,6 +11484,11 @@ non-numeric, there is no explicit limit on the size of 
images.  */);
 #endif /* HAVE_NTGUI  */
 #endif /* HAVE_RSVG  */
 
+#ifdef HAVE_NS
+  DEFSYM (Qheic, "heic");
+  add_image_type (Qheic);
+#endif
+
 #if HAVE_NATIVE_IMAGE_API
   DEFSYM (Qnative_image, "native-image");
 # ifdef HAVE_NTGUI
diff --git a/src/indent.c b/src/indent.c
index 914dabf1e7..5c21cd8f99 100644
--- a/src/indent.c
+++ b/src/indent.c
@@ -1,5 +1,5 @@
 /* Indentation functions.
-   Copyright (C) 1985-1988, 1993-1995, 1998, 2000-2021 Free Software
+   Copyright (C) 1985-1988, 1993-1995, 1998, 2000-2022 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/indent.h b/src/indent.h
index 776fe7ba4b..cc4365f41f 100644
--- a/src/indent.h
+++ b/src/indent.h
@@ -1,5 +1,5 @@
 /* Definitions for interface to indent.c
-   Copyright (C) 1985-1986, 2001-2021 Free Software Foundation, Inc.
+   Copyright (C) 1985-1986, 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/inotify.c b/src/inotify.c
index df6145d702..e92ad40abc 100644
--- a/src/inotify.c
+++ b/src/inotify.c
@@ -1,6 +1,6 @@
 /* Inotify support for Emacs
 
-Copyright (C) 2012-2021 Free Software Foundation, Inc.
+Copyright (C) 2012-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/insdel.c b/src/insdel.c
index 40674e15e4..d9ba222b1d 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-2021 Free Software
+   Copyright (C) 1985-1986, 1993-1995, 1997-2022 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/intervals.c b/src/intervals.c
index 11d5b6bbb6..ed374f16b5 100644
--- a/src/intervals.c
+++ b/src/intervals.c
@@ -1,5 +1,5 @@
 /* Code for doing intervals.
-   Copyright (C) 1993-1995, 1997-1998, 2001-2021 Free Software
+   Copyright (C) 1993-1995, 1997-1998, 2001-2022 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/intervals.h b/src/intervals.h
index c1b19345d2..484fca2e75 100644
--- a/src/intervals.h
+++ b/src/intervals.h
@@ -1,5 +1,5 @@
 /* Definitions and global variables for intervals.
-   Copyright (C) 1993-1994, 2000-2021 Free Software Foundation, Inc.
+   Copyright (C) 1993-1994, 2000-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/json.c b/src/json.c
index b0779b912a..21a6df6785 100644
--- a/src/json.c
+++ b/src/json.c
@@ -1,6 +1,6 @@
 /* JSON parsing and serialization.
 
-Copyright (C) 2017-2021 Free Software Foundation, Inc.
+Copyright (C) 2017-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/keyboard.c b/src/keyboard.c
index 050537b95c..d2ab3a8024 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-2021 Free Software Foundation,
+Copyright (C) 1985-1989, 1993-1997, 1999-2022 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
@@ -65,6 +65,7 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 #include <sys/types.h>
 #include <unistd.h>
 #include <fcntl.h>
+#include <math.h>
 
 #include <ignore-value.h>
 
@@ -3974,6 +3975,7 @@ kbd_buffer_get_event (KBOARD **kbp,
          *used_mouse_menu = true;
        FALLTHROUGH;
 #endif
+      case PREEDIT_TEXT_EVENT:
 #ifdef HAVE_NTGUI
       case END_SESSION_EVENT:
       case LANGUAGE_CHANGE_EVENT:
@@ -4036,6 +4038,61 @@ kbd_buffer_get_event (KBOARD **kbp,
             and build a real event from the queue entry.  */
          if (NILP (obj))
            {
+             double pinch_dx, pinch_dy, pinch_angle;
+
+             /* Pinch events are often sent in rapid succession, so
+                large amounts of such events have the potential to
+                queue up inside the keyboard buffer.  In that case,
+                find the last pinch event in succession on the same
+                frame with the same modifiers, and send that instead.  */
+
+             if (event->ie.kind == PINCH_EVENT
+                 /* Ignore if this is the start of a pinch sequence.
+                    These events should always be sent so that we
+                    never miss a sequence starting, and they don't
+                    have the potential to queue up.  */
+                 && ((pinch_dx
+                      = XFLOAT_DATA (XCAR (event->ie.arg))) != 0.0
+                     || XFLOAT_DATA (XCAR (XCDR (event->ie.arg))) != 0.0
+                     || XFLOAT_DATA (Fnth (make_fixnum (3), event->ie.arg)) != 
0.0))
+               {
+                 union buffered_input_event *maybe_event = next_kbd_event 
(event);
+
+                 pinch_dy = XFLOAT_DATA (XCAR (XCDR (event->ie.arg)));
+                 pinch_angle = XFLOAT_DATA (Fnth (make_fixnum (3), 
event->ie.arg));
+
+                 while (maybe_event != kbd_store_ptr
+                        && maybe_event->ie.kind == PINCH_EVENT
+                        /* Make sure we never miss an event that has
+                           different modifiers.  */
+                        && maybe_event->ie.modifiers == event->ie.modifiers
+                        /* Make sure that the event is for the same
+                           frame.  */
+                        && EQ (maybe_event->ie.frame_or_window,
+                               event->ie.frame_or_window)
+                        /* Make sure that the event isn't the start
+                           of a new pinch gesture sequence.  */
+                        && (XFLOAT_DATA (XCAR (maybe_event->ie.arg)) != 0.0
+                            || XFLOAT_DATA (XCAR (XCDR (maybe_event->ie.arg))) 
!= 0.0
+                            || XFLOAT_DATA (Fnth (make_fixnum (3),
+                                                  maybe_event->ie.arg)) != 
0.0))
+                   {
+                     event = maybe_event;
+                     /* Add up relative deltas inside events we skip.  */
+                     pinch_dx += XFLOAT_DATA (XCAR (maybe_event->ie.arg));
+                     pinch_dy += XFLOAT_DATA (XCAR (XCDR 
(maybe_event->ie.arg)));
+                     pinch_angle += XFLOAT_DATA (Fnth (make_fixnum (3),
+                                                       maybe_event->ie.arg));
+
+                     XSETCAR (maybe_event->ie.arg, make_float (pinch_dx));
+                     XSETCAR (XCDR (maybe_event->ie.arg), make_float 
(pinch_dy));
+                     XSETCAR (Fnthcdr (make_fixnum (3),
+                                       maybe_event->ie.arg),
+                              make_float (fmod (pinch_angle, 360.0)));
+                     maybe_event = next_kbd_event (event);
+                   }
+               }
+
              obj = make_lispy_event (&event->ie);
 
 #ifdef HAVE_EXT_MENU_BAR
@@ -4465,6 +4522,7 @@ static Lisp_Object func_key_syms;
 static Lisp_Object mouse_syms;
 static Lisp_Object wheel_syms;
 static Lisp_Object drag_n_drop_syms;
+static Lisp_Object pinch_syms;
 
 /* This is a list of keysym codes for special "accent" characters.
    It parallels lispy_accent_keys.  */
@@ -5996,6 +6054,77 @@ make_lispy_event (struct input_event *event)
          return list2 (head, position);
       }
 
+    case TOUCH_END_EVENT:
+      {
+       Lisp_Object position;
+
+       /* Build the position as appropriate for this mouse click.  */
+       struct frame *f = XFRAME (event->frame_or_window);
+
+       if (! FRAME_LIVE_P (f))
+         return Qnil;
+
+       position = make_lispy_position (f, event->x, event->y,
+                                       event->timestamp);
+
+       return list2 (Qtouch_end, position);
+      }
+
+    case TOUCHSCREEN_BEGIN_EVENT:
+    case TOUCHSCREEN_END_EVENT:
+      {
+       Lisp_Object x, y, id, position;
+       struct frame *f = XFRAME (event->frame_or_window);
+
+       id = event->arg;
+       x = event->x;
+       y = event->y;
+
+       position = make_lispy_position (f, x, y, event->timestamp);
+
+       return list2 (((event->kind
+                       == TOUCHSCREEN_BEGIN_EVENT)
+                      ? Qtouchscreen_begin
+                      : Qtouchscreen_end),
+                     Fcons (id, position));
+      }
+
+    case PINCH_EVENT:
+      {
+       Lisp_Object x, y, position;
+       struct frame *f = XFRAME (event->frame_or_window);
+
+       x = event->x;
+       y = event->y;
+
+       position = make_lispy_position (f, x, y, event->timestamp);
+
+       return Fcons (modify_event_symbol (0, event->modifiers, Qpinch,
+                                          Qnil, (const char *[]) {"pinch"},
+                                          &pinch_syms, 1),
+                     Fcons (position, event->arg));
+      }
+
+    case TOUCHSCREEN_UPDATE_EVENT:
+      {
+       Lisp_Object x, y, id, position, tem, it, evt;
+       struct frame *f = XFRAME (event->frame_or_window);
+       evt = Qnil;
+
+       for (tem = event->arg; CONSP (tem); tem = XCDR (tem))
+         {
+           it = XCAR (tem);
+
+           x = XCAR (it);
+           y = XCAR (XCDR (it));
+           id = XCAR (XCDR (XCDR (it)));
+
+           position = make_lispy_position (f, x, y, event->timestamp);
+           evt = Fcons (Fcons (id, position), evt);
+         }
+
+       return list2 (Qtouchscreen_update, evt);
+      }
 
 #ifdef USE_TOOLKIT_SCROLL_BARS
 
@@ -6159,6 +6288,10 @@ make_lispy_event (struct input_event *event)
     case CONFIG_CHANGED_EVENT:
        return list3 (Qconfig_changed_event,
                      event->arg, event->frame_or_window);
+
+    case PREEDIT_TEXT_EVENT:
+      return list2 (Qpreedit_text, event->arg);
+
       /* The 'kind' field of the event is something we don't recognize.  */
     default:
       emacs_abort ();
@@ -11747,6 +11880,8 @@ syms_of_keyboard (void)
   DEFSYM (Qfile_notify, "file-notify");
 #endif /* USE_FILE_NOTIFY */
 
+  DEFSYM (Qtouch_end, "touch-end");
+
   /* Menu and tool bar item parts.  */
   DEFSYM (QCenable, ":enable");
   DEFSYM (QCvisible, ":visible");
@@ -11866,6 +12001,8 @@ syms_of_keyboard (void)
   DEFSYM (Qno_record, "no-record");
   DEFSYM (Qencoded, "encoded");
 
+  DEFSYM (Qpreedit_text, "preedit-text");
+
   button_down_location = make_nil_vector (5);
   staticpro (&button_down_location);
   staticpro (&frame_relative_event_pos);
@@ -11906,6 +12043,9 @@ syms_of_keyboard (void)
   drag_n_drop_syms = Qnil;
   staticpro (&drag_n_drop_syms);
 
+  pinch_syms = Qnil;
+  staticpro (&pinch_syms);
+
   unread_switch_frame = Qnil;
   staticpro (&unread_switch_frame);
 
@@ -12242,6 +12382,10 @@ See also `pre-command-hook'.  */);
               doc: /* Normal hook run when clearing the echo area.  */);
 #endif
   DEFSYM (Qecho_area_clear_hook, "echo-area-clear-hook");
+  DEFSYM (Qtouchscreen_begin, "touchscreen-begin");
+  DEFSYM (Qtouchscreen_end, "touchscreen-end");
+  DEFSYM (Qtouchscreen_update, "touchscreen-update");
+  DEFSYM (Qpinch, "pinch");
   Fset (Qecho_area_clear_hook, Qnil);
 
   DEFVAR_LISP ("lucid-menu-bar-dirty-flag", Vlucid_menu_bar_dirty_flag,
@@ -12573,6 +12717,12 @@ other similar functions ignore input events in 
`while-no-input-ignore-events'.
 This flag may eventually be removed once this behavior is deemed safe.  */);
   input_pending_p_filter_events = true;
 
+  DEFVAR_BOOL ("mwheel-coalesce-scroll-events", mwheel_coalesce_scroll_events,
+              doc: /* Non-nil means send a wheel event only for scrolling at 
least one screen line.
+Otherwise, a wheel event will be sent every time the mouse wheel is
+moved.  */);
+  mwheel_coalesce_scroll_events = true;
+
   pdumper_do_now_and_after_load (syms_of_keyboard_for_pdumper);
 }
 
diff --git a/src/keyboard.h b/src/keyboard.h
index 21c51ec386..167b7d79e8 100644
--- a/src/keyboard.h
+++ b/src/keyboard.h
@@ -1,5 +1,5 @@
 /* Declarations useful when processing input.
-   Copyright (C) 1985-1987, 1993, 2001-2021 Free Software Foundation,
+   Copyright (C) 1985-1987, 1993, 2001-2022 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
@@ -491,7 +491,7 @@ extern void process_pending_signals (void);
 extern struct timespec timer_check (void);
 extern void mark_kboards (void);
 
-#if defined HAVE_NTGUI || defined HAVE_X_WINDOWS
+#if defined HAVE_NTGUI || defined HAVE_X_WINDOWS || defined HAVE_PGTK
 extern const char *const lispy_function_keys[];
 #endif
 
diff --git a/src/keymap.c b/src/keymap.c
index 0b882958b9..ed69b1c427 100644
--- a/src/keymap.c
+++ b/src/keymap.c
@@ -1,5 +1,5 @@
 /* Manipulation of keymaps
-   Copyright (C) 1985-1988, 1993-1995, 1998-2021 Free Software
+   Copyright (C) 1985-1988, 1993-1995, 1998-2022 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/keymap.h b/src/keymap.h
index f417301c8f..3c6aede9f1 100644
--- a/src/keymap.h
+++ b/src/keymap.h
@@ -1,5 +1,5 @@
 /* Functions to manipulate keymaps.
-   Copyright (C) 2001-2021 Free Software Foundation, Inc.
+   Copyright (C) 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/kqueue.c b/src/kqueue.c
index 0a0650d208..c3c4631784 100644
--- a/src/kqueue.c
+++ b/src/kqueue.c
@@ -1,6 +1,6 @@
 /* Filesystem notifications support with kqueue API.
 
-Copyright (C) 2015-2021 Free Software Foundation, Inc.
+Copyright (C) 2015-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/lastfile.c b/src/lastfile.c
index 7df6cf10b1..4960131a47 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1985, 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/lcms.c b/src/lcms.c
index b998c8c4eb..78001c9cbc 100644
--- a/src/lcms.c
+++ b/src/lcms.c
@@ -1,5 +1,5 @@
 /* Interface to Little CMS
-   Copyright (C) 2017-2021 Free Software Foundation, Inc.
+   Copyright (C) 2017-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/lisp.h b/src/lisp.h
index 00d9843d6a..97ed084ce8 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-1987, 1993-1995, 1997-2021 Free Software Foundation,
+Copyright (C) 1985-1987, 1993-1995, 1997-2022 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
@@ -137,25 +137,9 @@ verify (BITS_WORD_MAX >> (BITS_PER_BITS_WORD - 1) == 1);
 /* Use pD to format ptrdiff_t values, which suffice for indexes into
    buffers and strings.  Emacs never allocates objects larger than
    PTRDIFF_MAX bytes, as they cause problems with pointer subtraction.
-   In C99, pD can always be "t"; configure it here for the sake of
-   pre-C99 libraries such as glibc 2.0 and Solaris 8.
-
-   On Haiku, the size of ptrdiff_t is inconsistent with the value of
-   PTRDIFF_MAX.  In that case, "t" should be sufficient. */
-
-#ifndef HAIKU
-#if PTRDIFF_MAX == INT_MAX
-# define pD ""
-#elif PTRDIFF_MAX == LONG_MAX
-# define pD "l"
-#elif PTRDIFF_MAX == LLONG_MAX
-# define pD "ll"
-#else
-# define pD "t"
-#endif
-#else
-# define pD "t"
-#endif
+   In C99, pD can always be "t", as we no longer need to worry about
+   pre-C99 libraries such as glibc 2.0 (1997) and Solaris 8 (2000).  */
+#define pD "t"
 
 /* Convenience macro for rarely-used functions that do not return.  */
 #define AVOID _Noreturn ATTRIBUTE_COLD void
@@ -259,6 +243,11 @@ DEFINE_GDB_SYMBOL_BEGIN (EMACS_INT, VALMASK)
 # define VALMASK (USE_LSB_TAG ? - (1 << GCTYPEBITS) : VAL_MAX)
 DEFINE_GDB_SYMBOL_END (VALMASK)
 
+/* Ignore 'alignas' on compilers lacking it.  */
+#if !defined alignas && !defined __alignas_is_defined
+# define alignas(a)
+#endif
+
 /* Minimum alignment requirement for Lisp objects, imposed by the
    internal representation of tagged pointers.  It is 2**GCTYPEBITS if
    USE_LSB_TAG, 1 otherwise.  It must be a literal integer constant,
@@ -974,7 +963,7 @@ typedef EMACS_UINT Lisp_Word_tag;
                        ? ((y) - 1 + (x)) & ~ ((y) - 1)                 \
                        : ((y) - 1 + (x)) - ((y) - 1 + (x)) % (y))
 
-#include "globals.h"
+#include <globals.h>
 
 /* Header of vector-like objects.  This documents the layout constraints on
    vectors and pseudovectors (objects of PVEC_xxx subtype).  It also prevents
@@ -1059,6 +1048,7 @@ enum pvec_type
   PVEC_CONDVAR,
   PVEC_MODULE_FUNCTION,
   PVEC_NATIVE_COMP_UNIT,
+  PVEC_SQLITE,
 
   /* These should be last, for internal_equal and sxhash_obj.  */
   PVEC_COMPILED,
@@ -2150,10 +2140,12 @@ struct Lisp_Subr
       Lisp_Object native_intspec;
     };
     EMACS_INT doc;
-    Lisp_Object native_comp_u[NATIVE_COMP_FLAG];
-    char *native_c_name[NATIVE_COMP_FLAG];
-    Lisp_Object lambda_list[NATIVE_COMP_FLAG];
-    Lisp_Object type[NATIVE_COMP_FLAG];
+#ifdef HAVE_NATIVE_COMP
+    Lisp_Object native_comp_u;
+    char *native_c_name;
+    Lisp_Object lambda_list;
+    Lisp_Object type;
+#endif
   } GCALIGNED_STRUCT;
 union Aligned_Lisp_Subr
   {
@@ -2622,6 +2614,17 @@ xmint_pointer (Lisp_Object a)
   return XUNTAG (a, Lisp_Vectorlike, struct Lisp_Misc_Ptr)->pointer;
 }
 
+struct Lisp_Sqlite
+{
+  union vectorlike_header header;
+  void *db;
+  void *stmt;
+  char *name;
+  void (*finalizer) (void *);
+  bool eof;
+  bool is_statement;
+} GCALIGNED_STRUCT;
+
 struct Lisp_User_Ptr
 {
   union vectorlike_header header;
@@ -2715,6 +2718,31 @@ XUSER_PTR (Lisp_Object a)
   return XUNTAG (a, Lisp_Vectorlike, struct Lisp_User_Ptr);
 }
 
+INLINE bool
+SQLITEP (Lisp_Object x)
+{
+  return PSEUDOVECTORP (x, PVEC_SQLITE);
+}
+
+INLINE bool
+SQLITE (Lisp_Object a)
+{
+  return PSEUDOVECTORP (a, PVEC_SQLITE);
+}
+
+INLINE void
+CHECK_SQLITE (Lisp_Object x)
+{
+  CHECK_TYPE (SQLITE (x), Qsqlitep, x);
+}
+
+INLINE struct Lisp_Sqlite *
+XSQLITE (Lisp_Object a)
+{
+  eassert (SQLITEP (a));
+  return XUNTAG (a, Lisp_Vectorlike, struct Lisp_Sqlite);
+}
+
 INLINE bool
 BIGNUMP (Lisp_Object x)
 {
@@ -3861,6 +3889,9 @@ extern Lisp_Object safe_eval (Lisp_Object);
 extern bool pos_visible_p (struct window *, ptrdiff_t, int *,
                           int *, int *, int *, int *, int *);
 
+/* Defined in sqlite.c.  */
+extern void syms_of_sqlite (void);
+
 /* Defined in xsettings.c.  */
 extern void syms_of_xsettings (void);
 
@@ -4862,19 +4893,19 @@ extern char *emacs_root_dir (void);
 INLINE bool
 SUBR_NATIVE_COMPILEDP (Lisp_Object a)
 {
-  return SUBRP (a) && !NILP (XSUBR (a)->native_comp_u[0]);
+  return SUBRP (a) && !NILP (XSUBR (a)->native_comp_u);
 }
 
 INLINE bool
 SUBR_NATIVE_COMPILED_DYNP (Lisp_Object a)
 {
-  return SUBR_NATIVE_COMPILEDP (a) && !NILP (XSUBR (a)->lambda_list[0]);
+  return SUBR_NATIVE_COMPILEDP (a) && !NILP (XSUBR (a)->lambda_list);
 }
 
 INLINE Lisp_Object
 SUBR_TYPE (Lisp_Object a)
 {
-  return XSUBR (a)->type[0];
+  return XSUBR (a)->type;
 }
 
 INLINE struct Lisp_Native_Comp_Unit *
diff --git a/src/lread.c b/src/lread.c
index 835228439f..7cefe6cb99 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-2021 Free Software Foundation,
+Copyright (C) 1985-1989, 1993-1995, 1997-2022 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
@@ -1278,7 +1278,10 @@ Return t if the file exists and loads successfully.  */)
               || suffix_p (file, MODULES_SECONDARY_SUFFIX)
 #endif
 #endif
-              || (NATIVE_COMP_FLAG && suffix_p (file, NATIVE_ELISP_SUFFIX)))
+#ifdef HAVE_NATIVE_COMP
+              || suffix_p (file, NATIVE_ELISP_SUFFIX)
+#endif
+             )
            must_suffix = Qnil;
          /* Don't insist on adding a suffix
             if the argument includes a directory name.  */
@@ -1358,8 +1361,11 @@ Return t if the file exists and loads successfully.  */)
   bool is_module = false;
 #endif
 
-  bool is_native_elisp =
-    NATIVE_COMP_FLAG && suffix_p (found, NATIVE_ELISP_SUFFIX) ? true : false;
+#ifdef HAVE_NATIVE_COMP
+  bool is_native_elisp = suffix_p (found, NATIVE_ELISP_SUFFIX);
+#else
+  bool is_native_elisp = false;
+#endif
 
   /* Check if we're stuck in a recursive load cycle.
 
@@ -1538,7 +1544,7 @@ Return t if the file exists and loads successfully.  */)
        message_with_string ("Loading %s...", file, 1);
     }
 
-  specbind (Qload_file_name, found_eff);
+  specbind (Qload_file_name, hist_file_name);
   specbind (Qload_true_file_name, found);
   specbind (Qinhibit_file_name_operation, Qnil);
   specbind (Qload_in_progress, Qt);
@@ -2202,6 +2208,7 @@ readevalloop (Lisp_Object readcharfun,
   specbind (Qinternal_interpreter_environment,
            (NILP (lex_bound) || EQ (lex_bound, Qunbound)
             ? Qnil : list1 (Qt)));
+  specbind (Qmacroexp__dynvars, Vmacroexp__dynvars);
 
   /* Ensure sourcename is absolute, except whilst preloading.  */
   if (!will_dump_p ()
@@ -3249,23 +3256,6 @@ read1 (Lisp_Object readcharfun, int *pch, bool 
first_in_list, bool locate_syms)
                    Fstring_as_unibyte (AREF (tmp, COMPILED_BYTECODE)));
            }
 
-         if (COMPILED_DOC_STRING < ASIZE (tmp)
-             && EQ (AREF (tmp, COMPILED_DOC_STRING), make_fixnum (0)))
-           {
-             /* read_list found a docstring like '(#$ . 5521)' and treated it
-                as 0.  This placeholder 0 would lead to accidental sharing in
-                purecopy's hash-consing, so replace it with a (hopefully)
-                unique integer placeholder, which is negative so that it is
-                not confused with a DOC file offset (the USE_LSB_TAG shift
-                relies on the fact that VALMASK is one bit narrower than
-                INTMASK).  Eventually Snarf-documentation should replace the
-                placeholder with the actual docstring.  */
-             verify (INTMASK & ~VALMASK);
-             EMACS_UINT hash = ((XHASH (tmp) >> USE_LSB_TAG)
-                                | (INTMASK - INTMASK / 2));
-             ASET (tmp, COMPILED_DOC_STRING, make_ufixnum (hash));
-           }
-
          XSETPVECTYPE (vec, PVEC_COMPILED);
          return tmp;
        }
@@ -4243,31 +4233,13 @@ read_list (bool flag, Lisp_Object readcharfun, bool 
locate_syms)
 
       /* While building, if the list starts with #$, treat it specially.  */
       if (EQ (elt, Vload_file_name)
-         && ! NILP (elt)
-         && !NILP (Vpurify_flag))
+         && ! NILP (elt))
        {
-         if (NILP (Vdoc_file_name))
-           /* We have not yet called Snarf-documentation, so assume
-              this file is described in the DOC file
-              and Snarf-documentation will fill in the right value later.
-              For now, replace the whole list with 0.  */
-           doc_reference = 1;
-         else
-           /* We have already called Snarf-documentation, so make a relative
-              file name for this file, so it can be found properly
-              in the installed Lisp directory.
-              We don't use Fexpand_file_name because that would make
-              the directory absolute now.  */
-           {
-             AUTO_STRING (dot_dot_lisp, "../lisp/");
-             elt = concat2 (dot_dot_lisp, Ffile_name_nondirectory (elt));
-           }
+         if (!NILP (Vpurify_flag))
+           doc_reference = 0;
+         else if (load_force_doc_strings)
+           doc_reference = 2;
        }
-      else if (EQ (elt, Vload_file_name)
-              && ! NILP (elt)
-              && load_force_doc_strings)
-       doc_reference = 2;
-
       if (ch)
        {
          if (flag > 0)
@@ -4288,8 +4260,6 @@ read_list (bool flag, Lisp_Object readcharfun, bool 
locate_syms)
 
              if (ch == ')')
                {
-                 if (doc_reference == 1)
-                   return make_fixnum (0);
                  if (doc_reference == 2 && FIXNUMP (XCDR (val)))
                    {
                      char *saved = NULL;
@@ -5506,4 +5476,10 @@ This variable's value can only be set via file-local 
variables.
 See Info node `(elisp)Shorthands' for more details.  */);
   Vread_symbol_shorthands = Qnil;
   DEFSYM (Qobarray_cache, "obarray-cache");
+
+  DEFSYM (Qmacroexp__dynvars, "macroexp--dynvars");
+  DEFVAR_LISP ("macroexp--dynvars", Vmacroexp__dynvars,
+        doc:   /* List of variables declared dynamic in the current scope.
+Only valid during macro-expansion.  Internal use only. */);
+  Vmacroexp__dynvars = Qnil;
 }
diff --git a/src/macfont.h b/src/macfont.h
index 0ec11f513c..e57d0193fb 100644
--- a/src/macfont.h
+++ b/src/macfont.h
@@ -1,5 +1,5 @@
 /* Interface definition for macOS Core text font backend.
-   Copyright (C) 2009-2021 Free Software Foundation, Inc.
+   Copyright (C) 2009-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/macfont.m b/src/macfont.m
index ce7a5ec8cd..f623c3ca2f 100644
--- a/src/macfont.m
+++ b/src/macfont.m
@@ -1,5 +1,5 @@
 /* Font driver on macOS Core text.
-   Copyright (C) 2009-2021 Free Software Foundation, Inc.
+   Copyright (C) 2009-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -598,9 +598,9 @@ mac_screen_font_shape (ScreenFontRef font, CFStringRef 
string,
 }
 
 static CGColorRef
-get_cgcolor(unsigned long idx, struct frame *f)
+get_cgcolor(unsigned long color)
 {
-  NSColor *nsColor = ns_lookup_indexed_color (idx, f);
+  NSColor *nsColor = [NSColor colorWithUnsignedLong:color];
   [nsColor set];
   CGColorSpaceRef colorSpace = [[nsColor colorSpace] CGColorSpace];
   NSInteger noc = [nsColor numberOfComponents];
@@ -628,21 +628,21 @@ get_cgcolor_from_nscolor (NSColor *nsColor, struct frame 
*f)
   return cgColor;
 }
 
-#define CG_SET_FILL_COLOR_WITH_FACE_FOREGROUND(context, face, f)        \
+#define CG_SET_FILL_COLOR_WITH_FACE_FOREGROUND(context, face)           \
   do {                                                                  \
-    CGColorRef refcol_ = get_cgcolor (NS_FACE_FOREGROUND (face), f);    \
+    CGColorRef refcol_ = get_cgcolor (NS_FACE_FOREGROUND (face));       \
     CGContextSetFillColorWithColor (context, refcol_) ;                 \
     CGColorRelease (refcol_);                                           \
   } while (0)
-#define CG_SET_FILL_COLOR_WITH_FACE_BACKGROUND(context, face, f)        \
+#define CG_SET_FILL_COLOR_WITH_FACE_BACKGROUND(context, face)           \
   do {                                                                  \
-    CGColorRef refcol_ = get_cgcolor (NS_FACE_BACKGROUND (face), f);    \
+    CGColorRef refcol_ = get_cgcolor (NS_FACE_BACKGROUND (face));       \
     CGContextSetFillColorWithColor (context, refcol_);                  \
     CGColorRelease (refcol_);                                           \
   } while (0)
-#define CG_SET_STROKE_COLOR_WITH_FACE_FOREGROUND(context, face, f)      \
+#define CG_SET_STROKE_COLOR_WITH_FACE_FOREGROUND(context, face)         \
   do {                                                                  \
-    CGColorRef refcol_ = get_cgcolor (NS_FACE_FOREGROUND (face), f);    \
+    CGColorRef refcol_ = get_cgcolor (NS_FACE_FOREGROUND (face));       \
     CGContextSetStrokeColorWithColor (context, refcol_);                \
     CGColorRelease (refcol_);                                           \
   } while (0)
@@ -2933,7 +2933,7 @@ macfont_draw (struct glyph_string *s, int from, int to, 
int x, int y,
          CGColorRelease (colorref);
         }
       else
-       CG_SET_FILL_COLOR_WITH_FACE_BACKGROUND (context, face, f);
+        CG_SET_FILL_COLOR_WITH_FACE_BACKGROUND (context, face);
       CGContextFillRects (context, &background_rect, 1);
     }
 
@@ -2949,7 +2949,7 @@ macfont_draw (struct glyph_string *s, int from, int to, 
int x, int y,
          CGColorRelease (colorref);
         }
       else
-       CG_SET_FILL_COLOR_WITH_FACE_FOREGROUND (context, face, s->f);
+        CG_SET_FILL_COLOR_WITH_FACE_FOREGROUND (context, face);
       if (macfont_info->synthetic_italic_p)
         atfm = synthetic_italic_atfm;
       else
@@ -2978,7 +2978,7 @@ macfont_draw (struct glyph_string *s, int from, int to, 
int x, int y,
 #if MAC_OS_X_VERSION_MIN_REQUIRED < 1070
             CGContextSetLineWidth (context, synthetic_bold_factor * font_size);
 #endif
-          CG_SET_STROKE_COLOR_WITH_FACE_FOREGROUND (context, face, f);
+          CG_SET_STROKE_COLOR_WITH_FACE_FOREGROUND (context, face);
         }
       if (no_antialias_p)
         CGContextSetShouldAntialias (context, false);
diff --git a/src/macros.c b/src/macros.c
index 0752a5bb6f..3d00c28838 100644
--- a/src/macros.c
+++ b/src/macros.c
@@ -1,6 +1,6 @@
 /* Keyboard macros.
 
-Copyright (C) 1985-1986, 1993, 2000-2021 Free Software Foundation, Inc.
+Copyright (C) 1985-1986, 1993, 2000-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/macros.h b/src/macros.h
index 23167a0763..10f4207b72 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1985, 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/marker.c b/src/marker.c
index 2b137b14c8..3c8e628762 100644
--- a/src/marker.c
+++ b/src/marker.c
@@ -1,5 +1,5 @@
 /* Markers: examining, setting and deleting.
-   Copyright (C) 1985, 1997-1998, 2001-2021 Free Software Foundation,
+   Copyright (C) 1985, 1997-1998, 2001-2022 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/menu.c b/src/menu.c
index 96d1c5208a..18ecaf0b0b 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-2021 Free Software
+Copyright (C) 1986, 1988, 1993-1994, 1996, 1999-2022 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -424,7 +424,7 @@ single_menu_item (Lisp_Object key, Lisp_Object item, 
Lisp_Object dummy, void *sk
                  AREF (item_properties, ITEM_PROPERTY_HELP));
 
 #if defined (USE_X_TOOLKIT) || defined (USE_GTK) || defined (HAVE_NS) \
-  || defined (HAVE_NTGUI) || defined (HAVE_HAIKU)
+  || defined (HAVE_NTGUI) || defined (HAVE_HAIKU) || defined (HAVE_PGTK)
   /* Display a submenu using the toolkit.  */
   if (FRAME_WINDOW_P (XFRAME (Vmenu_updating_frame))
       && ! (NILP (map) || NILP (enabled)))
diff --git a/src/menu.h b/src/menu.h
index 6c67ab20bb..836172b58f 100644
--- a/src/menu.h
+++ b/src/menu.h
@@ -1,5 +1,5 @@
 /* Functions to manipulate menus.
-   Copyright (C) 2008-2021 Free Software Foundation, Inc.
+   Copyright (C) 2008-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -59,6 +59,12 @@ extern Lisp_Object ns_menu_show (struct frame *, int, int, 
int,
                                 Lisp_Object, const char **);
 extern void ns_activate_menubar (struct frame *);
 #endif
+#ifdef HAVE_PGTK
+extern Lisp_Object pgtk_menu_show (struct frame *, int, int, int,
+                                Lisp_Object, const char **);
+extern void pgtk_activate_menubar (struct frame *);
+#endif
+
 extern Lisp_Object tty_menu_show (struct frame *, int, int, int,
                                  Lisp_Object, const char **);
 extern ptrdiff_t menu_item_width (const unsigned char *);
diff --git a/src/minibuf.c b/src/minibuf.c
index 6c0cd358c5..d0e58b61f2 100644
--- a/src/minibuf.c
+++ b/src/minibuf.c
@@ -1,6 +1,6 @@
 /* Minibuffer input and completion.
 
-Copyright (C) 1985-1986, 1993-2021 Free Software Foundation, Inc.
+Copyright (C) 1985-1986, 1993-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/msdos.c b/src/msdos.c
index bf058c8aff..f126d28c98 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1993-1997, 1999-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -1874,6 +1874,7 @@ initialize_msdos_display (struct terminal *term)
   term->redeem_scroll_bar_hook = 0;
   term->judge_scroll_bars_hook = 0;
   term->read_socket_hook = &tty_read_avail_input; /* from keyboard.c */
+  term->defined_color_hook = &tty_defined_color; /* from xfaces.c */
 }
 
 int
@@ -3915,6 +3916,50 @@ readlinkat (int fd, char const *name, char *buffer, 
size_t buffer_size)
   return readlink (name, buffer, buffer_size);
 }
 
+
+int
+openat (int fd, const char * path, int oflag, int mode)
+{
+  /* Rely on a hack: an open directory is modeled as file descriptor 0,
+     as in fstatat.  FIXME: Add proper support for openat.  */
+  char fullname[MAXPATHLEN];
+
+  if (fd != AT_FDCWD)
+    {
+      if (strlen (dir_pathname) + strlen (path) + 1 >= MAXPATHLEN)
+       {
+         errno = ENAMETOOLONG;
+         return -1;
+       }
+      sprintf (fullname, "%s/%s", dir_pathname, path);
+      path = fullname;
+    }
+
+  return open (path, oflag, mode);
+}
+
+int
+fchmodat (int fd, const char *path, mode_t mode, int flags)
+{
+  /* Rely on a hack: an open directory is modeled as file descriptor 0,
+     as in fstatat.  FIXME: Add proper support for openat.  */
+  char fullname[MAXPATHLEN];
+
+  if (fd != AT_FDCWD)
+    {
+      if (strlen (dir_pathname) + strlen (path) + 1 >= MAXPATHLEN)
+       {
+         errno = ENAMETOOLONG;
+         return -1;
+       }
+
+      sprintf (fullname, "%s/%s", dir_pathname, path);
+      path = fullname;
+    }
+
+  return chmod (path, mode);
+}
+
 char *
 careadlinkat (int fd, char const *filename,
               char *buffer, size_t buffer_size,
@@ -3942,6 +3987,63 @@ careadlinkat (int fd, char const *filename,
   return buffer;
 }
 
+int
+futimens (int fd, const struct timespec times[2])
+{
+  struct tm *tm;
+  struct ftime ft;
+  time_t t;
+
+  block_input ();
+  if (times[1].tv_sec == UTIME_NOW)
+    t = time (NULL);
+  else
+    t = times[1].tv_sec;
+
+  tm = localtime (&t);
+  ft.ft_tsec = min (29, tm->tm_sec / 2);
+  ft.ft_min = tm->tm_min;
+  ft.ft_hour = tm->tm_hour;
+  ft.ft_day = tm->tm_mday;
+  ft.ft_month = tm->tm_mon + 1;
+  ft.ft_year = max (0, tm->tm_year - 80);
+  unblock_input ();
+
+  return setftime (fd, &ft);
+}
+
+int
+utimensat (int dirfd, const char *pathname,
+          const struct timespec times[2], int flags)
+{
+  int fd, ret;
+  char fullname[MAXPATHLEN];
+
+  /* Rely on a hack: dirfd in its current usage in Emacs is always
+     AT_FDCWD.  */
+
+  if (dirfd != AT_FDCWD)
+    {
+      if (strlen (dir_pathname) + strlen (pathname) + 1 >= MAXPATHLEN)
+       {
+         errno = ENAMETOOLONG;
+         return -1;
+       }
+      sprintf (fullname, "%s/%s", dir_pathname, pathname);
+      pathname = fullname;
+    }
+
+  fd = open (pathname, O_WRONLY);
+
+  if (fd < 0)
+    return -1;
+
+  ret = futimens (fd, times);
+  close (fd);
+
+  return ret;
+}
+
 /* Emulate faccessat(2).  */
 int
 faccessat (int dirfd, const char * path, int mode, int flags)
diff --git a/src/msdos.h b/src/msdos.h
index f7d3b0d702..7e57c7c110 100644
--- a/src/msdos.h
+++ b/src/msdos.h
@@ -1,5 +1,5 @@
 /* MS-DOS specific C utilities, interface.
-   Copyright (C) 1993, 2001-2021 Free Software Foundation, Inc.
+   Copyright (C) 1993, 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -86,6 +86,8 @@ typedef int GC;
 typedef int Pixmap;
 typedef int Display;
 typedef int Window;
+
+#define FRAME_X_DISPLAY(ignored) NULL
 #define PIX_TYPE unsigned long
 #define XDISPLAY
 
diff --git a/src/nsfns.m b/src/nsfns.m
index f4d8172246..11132a294a 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-2021 Free Software
+Copyright (C) 1989, 1992-1994, 2005-2006, 2008-2022 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -236,7 +236,6 @@ static void
 ns_set_foreground_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
 {
   NSColor *col;
-  EmacsCGFloat r, g, b, alpha;
 
   /* Must block_input, because ns_lisp_to_color does block/unblock_input
      which means that col may be deallocated in its unblock_input if there
@@ -253,12 +252,7 @@ ns_set_foreground_color (struct frame *f, Lisp_Object arg, 
Lisp_Object oldval)
   [f->output_data.ns->foreground_color release];
   f->output_data.ns->foreground_color = col;
 
-  [col getRed: &r green: &g blue: &b alpha: &alpha];
-  FRAME_FOREGROUND_PIXEL (f) =
-    ARGB_TO_ULONG ((unsigned long) (alpha * 0xff),
-                   (unsigned long) (r * 0xff),
-                   (unsigned long) (g * 0xff),
-                   (unsigned long) (b * 0xff));
+  FRAME_FOREGROUND_PIXEL (f) = [col unsignedLong];
 
   if (FRAME_NS_VIEW (f))
     {
@@ -277,7 +271,7 @@ ns_set_background_color (struct frame *f, Lisp_Object arg, 
Lisp_Object oldval)
   struct face *face;
   NSColor *col;
   NSView *view = FRAME_NS_VIEW (f);
-  EmacsCGFloat r, g, b, alpha;
+  EmacsCGFloat alpha;
 
   block_input ();
   if (ns_lisp_to_color (arg, &col))
@@ -291,12 +285,8 @@ ns_set_background_color (struct frame *f, Lisp_Object arg, 
Lisp_Object oldval)
   [f->output_data.ns->background_color release];
   f->output_data.ns->background_color = col;
 
-  [col getRed: &r green: &g blue: &b alpha: &alpha];
-  FRAME_BACKGROUND_PIXEL (f) =
-    ARGB_TO_ULONG ((unsigned long) (alpha * 0xff),
-                   (unsigned long) (r * 0xff),
-                   (unsigned long) (g * 0xff),
-                   (unsigned long) (b * 0xff));
+  FRAME_BACKGROUND_PIXEL (f) = [col unsignedLong];
+  alpha = [col alphaComponent];
 
   if (view != nil)
     {
@@ -310,9 +300,9 @@ ns_set_background_color (struct frame *f, Lisp_Object arg, 
Lisp_Object oldval)
       face = FRAME_DEFAULT_FACE (f);
       if (face)
         {
-          col = ns_lookup_indexed_color (NS_FACE_BACKGROUND (face), f);
-          face->background = ns_index_color
-            ([col colorWithAlphaComponent: alpha], f);
+          col = [NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND (face)];
+          face->background = [[col colorWithAlphaComponent: alpha]
+                               unsignedLong];
 
           update_face_from_frame_parameter (f, Qbackground_color, arg);
         }
@@ -1365,6 +1355,10 @@ DEFUN ("x-create-frame", Fx_create_frame, 
Sx_create_frame,
                          NILP (Vmenu_bar_mode)
                          ? make_fixnum (0) : make_fixnum (1),
                          NULL, NULL, RES_TYPE_NUMBER);
+  gui_default_parameter (f, parms, Qtab_bar_lines,
+                         NILP (Vtab_bar_mode)
+                         ? make_fixnum (0) : make_fixnum (1),
+                        NULL, NULL, RES_TYPE_NUMBER);
   gui_default_parameter (f, parms, Qtool_bar_lines,
                          NILP (Vtool_bar_mode)
                          ? make_fixnum (0) : make_fixnum (1),
@@ -2358,6 +2352,47 @@ ns_get_string_resource (void *_rdb, const char *name, 
const char *class)
    ========================================================================== 
*/
 
 
+#if defined (NS_IMPL_COCOA) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1080
+/* Moving files to the system recycle bin.
+   Used by `move-file-to-trash' instead of the default moving to ~/.Trash  */
+DEFUN ("system-move-file-to-trash", Fsystem_move_file_to_trash,
+       Ssystem_move_file_to_trash, 1, 1, 0,
+       doc: /* Move file or directory named FILENAME to the recycle bin.  */)
+  (Lisp_Object filename)
+{
+  Lisp_Object handler;
+  Lisp_Object operation;
+
+  operation = Qdelete_file;
+  if (!NILP (Ffile_directory_p (filename))
+      && NILP (Ffile_symlink_p (filename)))
+    {
+      operation = intern ("delete-directory");
+      filename = Fdirectory_file_name (filename);
+    }
+
+  /* Must have fully qualified file names for moving files to Trash. */
+  filename = Fexpand_file_name (filename, Qnil);
+
+  handler = Ffind_file_name_handler (filename, operation);
+  if (!NILP (handler))
+    return call2 (handler, operation, filename);
+  else
+    {
+      NSFileManager *fm = [NSFileManager defaultManager];
+      BOOL result = NO;
+      NSURL *fileURL = [NSURL fileURLWithPath:[NSString 
stringWithLispString:filename]
+                                  isDirectory:!NILP (Ffile_directory_p 
(filename))];
+      if ([fm 
respondsToSelector:@selector(trashItemAtURL:resultingItemURL:error:)])
+        result = [fm trashItemAtURL:fileURL resultingItemURL:nil error:nil];
+
+      if (!result)
+       report_file_error ("Removing old name", list1 (filename));
+    }
+  return Qnil;
+}
+#endif
+
 DEFUN ("xw-color-defined-p", Fxw_color_defined_p, Sxw_color_defined_p, 1, 2, 0,
        doc: /* SKIP: real doc in xfns.c.  */)
      (Lisp_Object color, Lisp_Object frame)
@@ -3105,6 +3140,9 @@ all_nonzero_ascii (unsigned char *str, ptrdiff_t n)
    encoded form (e.g. UTF-8).  */
 + (NSString *)stringWithLispString:(Lisp_Object)string
 {
+  if (!STRINGP (string))
+    return nil;
+
   /* Shortcut for the common case.  */
   if (all_nonzero_ascii (SDATA (string), SBYTES (string)))
     return [NSString stringWithCString: SSDATA (string)
@@ -3239,6 +3277,10 @@ Default is t.  */);
   defsubr (&Sx_show_tip);
   defsubr (&Sx_hide_tip);
 
+#if defined (NS_IMPL_COCOA) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1080
+  defsubr (&Ssystem_move_file_to_trash);
+#endif
+
   as_status = 0;
   as_script = Qnil;
   staticpro (&as_script);
diff --git a/src/nsfont.m b/src/nsfont.m
index b3224629f0..f3c8a82930 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2006-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -1196,7 +1196,7 @@ nsfont_draw (struct glyph_string *s, int from, int to, 
int x, int y,
        {
          if (s->hl != DRAW_CURSOR)
            [(NS_FACE_BACKGROUND (face) != 0
-             ? ns_lookup_indexed_color (NS_FACE_BACKGROUND (face), s->f)
+             ? [NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND (face)]
              : FRAME_BACKGROUND_COLOR (s->f)) set];
          else
            [FRAME_CURSOR_COLOR (s->f) set];
@@ -1216,28 +1216,16 @@ nsfont_draw (struct glyph_string *s, int from, int to, 
int x, int y,
     col = FRAME_BACKGROUND_COLOR (s->f);
   else
     col = (NS_FACE_FOREGROUND (face) != 0
-          ? ns_lookup_indexed_color (NS_FACE_FOREGROUND (face), s->f)
+          ? [NSColor colorWithUnsignedLong:NS_FACE_FOREGROUND (face)]
           : FRAME_FOREGROUND_COLOR (s->f));
 
   /* render under GNUstep using DPS */
   {
     NSGraphicsContext *context = [NSGraphicsContext currentContext];
-    DPSgsave (context);
-    if (s->clip_head)
-      {
-       DPSrectclip (context, s->clip_head->x, 0,
-                    FRAME_PIXEL_WIDTH (s->f),
-                    FRAME_PIXEL_HEIGHT (s->f));
-      }
     [font->nsfont set];
-
     [col set];
-
     DPSmoveto (context, r.origin.x, r.origin.y);
     GSShowGlyphs (context, c, len);
-    DPSstroke (context);
-
-    DPSgrestore (context);
   }
 
   unblock_input ();
diff --git a/src/nsgui.h b/src/nsgui.h
index e4038d3226..0ba1fce80b 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1995, 2005, 2008-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -58,9 +58,6 @@ typedef struct _XCharStruct
   int descent;
 } XCharStruct;
 
-/* Used in xdisp.c when comparing faces and frame colors.  */
-extern unsigned long ns_color_index_to_rgba(int idx, struct frame *f);
-
 #ifdef __OBJC__
 typedef id Emacs_Pixmap;
 #else
diff --git a/src/nsimage.m b/src/nsimage.m
index dd2bb3b0d7..2fff987f9f 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-2021 Free Software
+   Copyright (C) 1989, 1992-1994, 2005-2006, 2008-2022 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -76,6 +76,8 @@ ns_can_use_native_image_api (Lisp_Object type)
     imageType = @"public.tiff";
   else if (EQ (type, Qsvg))
     imageType = @"public.svg-image";
+  else if (EQ (type, Qheic))
+    imageType = @"public.heic";
 
   /* NSImage also supports a host of other types such as PDF and BMP,
      but we don't yet support these in image.c.  */
diff --git a/src/nsmenu.m b/src/nsmenu.m
index 29201e6907..4d3c752816 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2007-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -1081,9 +1081,7 @@ update_frame_tool_bar_1 (struct frame *f, EmacsToolbar 
*toolbar)
       struct image *img;
       Lisp_Object image;
       Lisp_Object labelObj;
-      const char *labelText;
       Lisp_Object helpObj;
-      const char *helpText;
 
       /* Check if this is a separator.  */
       if (EQ (TOOLPROP (TOOL_BAR_ITEM_TYPE), Qt))
@@ -1109,11 +1107,9 @@ update_frame_tool_bar_1 (struct frame *f, EmacsToolbar 
*toolbar)
           idx = -1;
         }
       labelObj = TOOLPROP (TOOL_BAR_ITEM_LABEL);
-      labelText = NILP (labelObj) ? "" : SSDATA (labelObj);
       helpObj = TOOLPROP (TOOL_BAR_ITEM_HELP);
       if (NILP (helpObj))
         helpObj = TOOLPROP (TOOL_BAR_ITEM_CAPTION);
-      helpText = NILP (helpObj) ? "" : SSDATA (helpObj);
 
       /* Ignore invalid image specifications.  */
       if (!valid_image_p (image))
@@ -1135,8 +1131,8 @@ update_frame_tool_bar_1 (struct frame *f, EmacsToolbar 
*toolbar)
       [toolbar addDisplayItemWithImage: img->pixmap
                                    idx: k++
                                    tag: i
-                             labelText: labelText
-                              helpText: helpText
+                             labelText: [NSString 
stringWithLispString:labelObj]
+                              helpText: [NSString stringWithLispString:helpObj]
                                enabled: enabled_p];
 #undef TOOLPROP
     }
@@ -1252,15 +1248,15 @@ update_frame_tool_bar (struct frame *f)
 - (void) addDisplayItemWithImage: (EmacsImage *)img
                              idx: (int)idx
                              tag: (int)tag
-                       labelText: (const char *)label
-                        helpText: (const char *)help
+                       labelText: (NSString *)label
+                        helpText: (NSString *)help
                          enabled: (BOOL)enabled
 {
   NSTRACE ("[EmacsToolbar addDisplayItemWithImage: ...]");
 
   /* 1) come up w/identifier */
-  NSString *identifier
-    = [NSString stringWithFormat: @"%lu", (unsigned long)[img hash]];
+  NSString *identifier = [NSString stringWithFormat: @"%lu%@",
+                                   (unsigned long)[img hash], label];
   [activeIdentifiers addObject: identifier];
 
   /* 2) create / reuse item */
@@ -1270,8 +1266,8 @@ update_frame_tool_bar (struct frame *f)
       item = [[[NSToolbarItem alloc] initWithItemIdentifier: identifier]
                autorelease];
       [item setImage: img];
-      [item setLabel: [NSString stringWithUTF8String: label]];
-      [item setToolTip: [NSString stringWithUTF8String: help]];
+      [item setLabel: label];
+      [item setToolTip: help];
       [item setTarget: emacsView];
       [item setAction: @selector (toolbarClicked:)];
       [identifierToItem setObject: item forKey: identifier];
diff --git a/src/nsselect.m b/src/nsselect.m
index 8b23f6f51a..13ca9b9c44 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-2021 Free Software
+   Copyright (C) 1993-1994, 2005-2006, 2008-2022 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/nsterm.h b/src/nsterm.h
index a32b8fe149..f027646123 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-2021 Free Software Foundation,
+   Copyright (C) 1989, 1993, 2005, 2008-2022 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
@@ -357,8 +357,9 @@ typedef id instancetype;
 @interface NSColor (EmacsColor)
 + (NSColor *)colorForEmacsRed:(CGFloat)red green:(CGFloat)green
                          blue:(CGFloat)blue alpha:(CGFloat)alpha;
++ (NSColor *)colorWithUnsignedLong:(unsigned long)c;
 - (NSColor *)colorUsingDefaultColorSpace;
-
+- (unsigned long)unsignedLong;
 @end
 
 
@@ -550,8 +551,8 @@ typedef id instancetype;
 - (void) addDisplayItemWithImage: (EmacsImage *)img
                              idx: (int)idx
                              tag: (int)tag
-                       labelText: (const char *)label
-                        helpText: (const char *)help
+                       labelText: (NSString *)label
+                        helpText: (NSString *)help
                          enabled: (BOOL)enabled;
 
 /* delegate methods */
@@ -766,35 +767,6 @@ struct ns_bitmap_record
   int height, width, depth;
 };
 
-/* This maps between emacs color indices and NSColor objects.  */
-struct ns_color_table
-{
-  ptrdiff_t size;
-  ptrdiff_t avail;
-#ifdef __OBJC__
-  NSColor **colors;
-  NSMutableSet *empty_indices;
-#else
-  void **items;
-  void *availIndices;
-#endif
-};
-#define NS_COLOR_CAPACITY 256
-
-#define RGB_TO_ULONG(r, g, b) (((r) << 16) | ((g) << 8) | (b))
-#define ARGB_TO_ULONG(a, r, g, b) (((a) << 24) | ((r) << 16) | ((g) << 8) | 
(b))
-
-#define ALPHA_FROM_ULONG(color) ((color) >> 24)
-#define RED_FROM_ULONG(color) (((color) >> 16) & 0xff)
-#define GREEN_FROM_ULONG(color) (((color) >> 8) & 0xff)
-#define BLUE_FROM_ULONG(color) ((color) & 0xff)
-
-/* Do not change `* 0x101' in the following lines to `<< 8'.  If
-   changed, image masks in 1-bit depth will not work.  */
-#define RED16_FROM_ULONG(color) (RED_FROM_ULONG(color) * 0x101)
-#define GREEN16_FROM_ULONG(color) (GREEN_FROM_ULONG(color) * 0x101)
-#define BLUE16_FROM_ULONG(color) (BLUE_FROM_ULONG(color) * 0x101)
-
 #ifdef NS_IMPL_GNUSTEP
 /* this extends font backend font */
 struct nsfont_info
@@ -850,8 +822,6 @@ struct ns_display_info
   ptrdiff_t bitmaps_size;
   ptrdiff_t bitmaps_last;
 
-  struct ns_color_table *color_table;
-
   /* DPI resolution of this screen */
   double resx, resy;
 
@@ -1127,13 +1097,9 @@ ns_defined_color (struct frame *f,
                   const char *name,
                   Emacs_Color *color_def, bool alloc,
                   bool makeIndex);
-extern void
-ns_query_color (void *col, Emacs_Color *color_def, bool setPixel);
 
 #ifdef __OBJC__
 extern int ns_lisp_to_color (Lisp_Object color, NSColor **col);
-extern NSColor *ns_lookup_indexed_color (unsigned long idx, struct frame *f);
-extern unsigned long ns_index_color (NSColor *color, struct frame *f);
 extern const char *ns_get_pending_menu_title (void);
 #endif
 
@@ -1352,9 +1318,7 @@ enum NSWindowTabbingMode
 #define NSPasteboardTypeTabularText NSTabularTextPboardType
 #define NSPasteboardTypeURL NSURLPboardType
 #define NSPasteboardTypeHTML NSHTMLPboardType
-#define NSPasteboardTypeMultipleTextSelection NSMultipleTextSelectionPboardType
 #define NSPasteboardTypePDF NSPDFPboardType
-#define NSPasteboardTypePNG NSPNGPboardType
 #define NSPasteboardTypeRTF NSRTFPboardType
 #define NSPasteboardTypeRTFD NSRTFDPboardType
 #define NSPasteboardTypeTIFF NSTIFFPboardType
diff --git a/src/nsterm.m b/src/nsterm.m
index 747539eae6..4f60cc737d 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-2021 Free Software
+Copyright (C) 1989, 1993-1994, 2005-2006, 2008-2022 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -166,6 +166,27 @@ char const * nstrace_fullscreen_type_name (int fs_type)
   return [self colorUsingColorSpace: [NSColorSpace deviceRGBColorSpace]];
 }
 
++ (NSColor *)colorWithUnsignedLong:(unsigned long)c
+{
+  EmacsCGFloat a = (double)((c >> 24) & 0xff) / 255.0;
+  EmacsCGFloat r = (double)((c >> 16) & 0xff) / 255.0;
+  EmacsCGFloat g = (double)((c >> 8) & 0xff) / 255.0;
+  EmacsCGFloat b = (double)(c & 0xff) / 255.0;
+
+  return [NSColor colorForEmacsRed:r green:g blue:b alpha:a];
+}
+
+- (unsigned long)unsignedLong
+{
+  EmacsCGFloat r, g, b, a;
+  [self getRed:&r green:&g blue:&b alpha:&a];
+
+  return (((unsigned long) (a * 255)) << 24)
+    | (((unsigned long) (r * 255)) << 16)
+    | (((unsigned long) (g * 255)) << 8)
+    | ((unsigned long) (b * 255));
+}
+
 @end
 
 /* ==========================================================================
@@ -432,14 +453,6 @@ ev_modifiers_helper (unsigned int flags, unsigned int 
left_mask,
     }
 
 
-/* These flags will be OR'd or XOR'd with the NSWindow's styleMask
-   property depending on what we're doing.  */
-#define FRAME_DECORATED_FLAGS (NSWindowStyleMaskTitled              \
-                               | NSWindowStyleMaskResizable         \
-                               | NSWindowStyleMaskMiniaturizable    \
-                               | NSWindowStyleMaskClosable)
-#define FRAME_UNDECORATED_FLAGS NSWindowStyleMaskBorderless
-
 /* TODO: Get rid of need for these forward declarations.  */
 static void ns_condemn_scroll_bars (struct frame *f);
 static void ns_judge_scroll_bars (struct frame *f);
@@ -1604,10 +1617,17 @@ ns_destroy_window (struct frame *f)
 
   /* If this frame has a parent window, detach it as not doing so can
      cause a crash in GNUStep.  */
-  if (FRAME_PARENT_FRAME (f) != NULL)
+  if (FRAME_PARENT_FRAME (f))
     {
       NSWindow *child = [FRAME_NS_VIEW (f) window];
-      NSWindow *parent = [FRAME_NS_VIEW (FRAME_PARENT_FRAME (f)) window];
+      NSWindow *parent;
+
+      /* Pacify a incorrect GCC warning about FRAME_PARENT_FRAME (f)
+        being NULL. */
+      if (FRAME_PARENT_FRAME (f))
+       parent = [FRAME_NS_VIEW (FRAME_PARENT_FRAME (f)) window];
+      else
+       emacs_abort ();
 
       [parent removeChildWindow: child];
     }
@@ -1949,59 +1969,6 @@ ns_fullscreen_hook (struct frame *f)
    ========================================================================== 
*/
 
 
-NSColor *
-ns_lookup_indexed_color (unsigned long idx, struct frame *f)
-{
-  struct ns_color_table *color_table = FRAME_DISPLAY_INFO (f)->color_table;
-  if (idx < 1 || idx >= color_table->avail)
-    return nil;
-  return color_table->colors[idx];
-}
-
-
-unsigned long
-ns_index_color (NSColor *color, struct frame *f)
-{
-  struct ns_color_table *color_table = FRAME_DISPLAY_INFO (f)->color_table;
-  ptrdiff_t idx;
-  ptrdiff_t i;
-
-  if (!color_table->colors)
-    {
-      color_table->size = NS_COLOR_CAPACITY;
-      color_table->avail = 1; /* skip idx=0 as marker */
-      color_table->colors = xmalloc (color_table->size * sizeof (NSColor *));
-      color_table->colors[0] = nil;
-      color_table->empty_indices = [[NSMutableSet alloc] init];
-    }
-
-  /* Do we already have this color?  */
-  for (i = 1; i < color_table->avail; i++)
-    if (color_table->colors[i] && [color_table->colors[i] isEqual: color])
-      return i;
-
-  if ([color_table->empty_indices count] > 0)
-    {
-      NSNumber *index = [color_table->empty_indices anyObject];
-      [color_table->empty_indices removeObject: index];
-      idx = [index unsignedLongValue];
-    }
-  else
-    {
-      if (color_table->avail == color_table->size)
-       color_table->colors =
-         xpalloc (color_table->colors, &color_table->size, 1,
-                  min (ULONG_MAX, PTRDIFF_MAX), sizeof *color_table->colors);
-      idx = color_table->avail++;
-    }
-
-  color_table->colors[idx] = color;
-  [color retain];
-  /* fprintf(stderr, "color_table: allocated %d\n",idx); */
-  return idx;
-}
-
-
 static int
 ns_get_color (const char *name, NSColor **col)
 /* --------------------------------------------------------------------------
@@ -2126,31 +2093,11 @@ ns_lisp_to_color (Lisp_Object color, NSColor **col)
   return 1;
 }
 
-/* Convert an index into the color table into an RGBA value.  Used in
-   xdisp.c:extend_face_to_end_of_line when comparing faces and frame
-   color values.  */
-
-unsigned long
-ns_color_index_to_rgba(int idx, struct frame *f)
-{
-  NSColor *col;
-  col = ns_lookup_indexed_color (idx, f);
-
-  EmacsCGFloat r, g, b, a;
-  [col getRed: &r green: &g blue: &b alpha: &a];
-
-  return ARGB_TO_ULONG((unsigned long) (a * 255),
-                       (unsigned long) (r * 255),
-                       (unsigned long) (g * 255),
-                       (unsigned long) (b * 255));
-}
-
-void
-ns_query_color(void *col, Emacs_Color *color_def, bool setPixel)
+static void
+ns_query_color (void *col, Emacs_Color *color_def)
 /* --------------------------------------------------------------------------
-         Get ARGB values out of NSColor col and put them into color_def.
-         If setPixel, set the pixel to a concatenated version.
-         and set color_def pixel to the resulting index.
+         Get ARGB values out of NSColor col and put them into color_def
+         and set color_def pixel to the ARGB color.
    -------------------------------------------------------------------------- 
*/
 {
   EmacsCGFloat r, g, b, a;
@@ -2160,12 +2107,7 @@ ns_query_color(void *col, Emacs_Color *color_def, bool 
setPixel)
   color_def->green = g * 65535;
   color_def->blue  = b * 65535;
 
-  if (setPixel == YES)
-    color_def->pixel
-      = ARGB_TO_ULONG((unsigned long) (a * 255),
-                      (unsigned long) (r * 255),
-                      (unsigned long) (g * 255),
-                      (unsigned long) (b * 255));
+  color_def->pixel = [(NSColor *)col unsignedLong];
 }
 
 bool
@@ -2173,12 +2115,9 @@ ns_defined_color (struct frame *f,
                   const char *name,
                   Emacs_Color *color_def,
                   bool alloc,
-                  bool makeIndex)
+                  bool _makeIndex)
 /* --------------------------------------------------------------------------
          Return true if named color found, and set color_def rgb accordingly.
-         If makeIndex and alloc are nonzero put the color in the color_table,
-         and set color_def pixel to the resulting index.
-         If makeIndex is zero, set color_def pixel to ARGB.
          Return false if not found.
    -------------------------------------------------------------------------- 
*/
 {
@@ -2191,9 +2130,7 @@ ns_defined_color (struct frame *f,
       unblock_input ();
       return 0;
     }
-  if (makeIndex && alloc)
-    color_def->pixel = ns_index_color (col, f);
-  ns_query_color (col, color_def, !makeIndex);
+  ns_query_color (col, color_def);
   unblock_input ();
   return 1;
 }
@@ -2204,7 +2141,7 @@ ns_query_frame_background_color (struct frame *f, 
Emacs_Color *bgcolor)
      External (hook): Store F's background color into *BGCOLOR
    -------------------------------------------------------------------------- 
*/
 {
-  ns_query_color (FRAME_BACKGROUND_COLOR (f), bgcolor, true);
+  ns_query_color (FRAME_BACKGROUND_COLOR (f), bgcolor);
 }
 
 static void
@@ -2623,8 +2560,8 @@ ns_clear_frame (struct frame *f)
 
   block_input ();
   ns_focus (f, &r, 1);
-  [ns_lookup_indexed_color (NS_FACE_BACKGROUND
-                           (FACE_FROM_ID (f, DEFAULT_FACE_ID)), f) set];
+  [[NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND
+                           (FACE_FROM_ID (f, DEFAULT_FACE_ID))] set];
   NSRectFill (r);
   ns_unfocus (f);
 
@@ -2652,7 +2589,7 @@ ns_clear_frame_area (struct frame *f, int x, int y, int 
width, int height)
 
   r = NSIntersectionRect (r, [view frame]);
   ns_focus (f, &r, 1);
-  [ns_lookup_indexed_color (NS_FACE_BACKGROUND (face), f) set];
+  [[NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND (face)] set];
 
   NSRectFill (r);
 
@@ -2755,8 +2692,7 @@ ns_clear_under_internal_border (struct frame *f)
         return;
 
       ns_focus (f, NULL, 1);
-      [ns_lookup_indexed_color (NS_FACE_BACKGROUND (face), f) set];
-
+      [[NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND (face)] set];
       NSRectFill (NSMakeRect (0, margin, width, border));
       NSRectFill (NSMakeRect (0, 0, border, height));
       NSRectFill (NSMakeRect (0, margin, width, border));
@@ -2807,7 +2743,7 @@ ns_after_update_window_line (struct window *w, struct 
glyph_row *desired_row)
           NSRect r = NSMakeRect (0, y, FRAME_PIXEL_WIDTH (f), height);
           ns_focus (f, &r, 1);
 
-          [ns_lookup_indexed_color (NS_FACE_BACKGROUND (face), f) set];
+          [[NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND (face)] set];
           NSRectFill (NSMakeRect (0, y, width, height));
           NSRectFill (NSMakeRect (FRAME_PIXEL_WIDTH (f) - width,
                                   y, width, height));
@@ -2975,7 +2911,7 @@ ns_draw_fringe_bitmap (struct window *w, struct glyph_row 
*row,
     {
       NSTRACE_RECT ("clearRect", clearRect);
 
-      [ns_lookup_indexed_color(face->background, f) set];
+      [[NSColor colorWithUnsignedLong:face->background] set];
       NSRectFill (clearRect);
     }
 
@@ -2992,9 +2928,9 @@ ns_draw_fringe_bitmap (struct window *w, struct glyph_row 
*row,
       [bmp transformUsingAffineTransform:transform];
 
       if (!p->cursor_p)
-        bm_color = ns_lookup_indexed_color(face->foreground, f);
+        bm_color = [NSColor colorWithUnsignedLong:face->foreground];
       else if (p->overlay_p)
-        bm_color = ns_lookup_indexed_color(face->background, f);
+        bm_color = [NSColor colorWithUnsignedLong:face->background];
       else
         bm_color = f->output_data.ns->cursor_color;
 
@@ -3145,7 +3081,7 @@ ns_draw_vertical_window_border (struct window *w, int x, 
int y0, int y1)
 
   ns_focus (f, &r, 1);
   if (face)
-    [ns_lookup_indexed_color(face->foreground, f) set];
+    [[NSColor colorWithUnsignedLong:face->foreground] set];
 
   NSRectFill(r);
   ns_unfocus (f);
@@ -3181,29 +3117,29 @@ ns_draw_window_divider (struct window *w, int x0, int 
x1, int y0, int y1)
     /* A vertical divider, at least three pixels wide: Draw first and
        last pixels differently.  */
     {
-      [ns_lookup_indexed_color(color_first, f) set];
+      [[NSColor colorWithUnsignedLong:color_first] set];
       NSRectFill(NSMakeRect (x0, y0, 1, y1 - y0));
-      [ns_lookup_indexed_color(color, f) set];
+      [[NSColor colorWithUnsignedLong:color] set];
       NSRectFill(NSMakeRect (x0 + 1, y0, x1 - x0 - 2, y1 - y0));
-      [ns_lookup_indexed_color(color_last, f) set];
+      [[NSColor colorWithUnsignedLong:color_last] set];
       NSRectFill(NSMakeRect (x1 - 1, y0, 1, y1 - y0));
     }
   else if ((x1 - x0 > y1 - y0) && (y1 - y0 >= 3))
     /* A horizontal divider, at least three pixels high: Draw first and
        last pixels differently.  */
     {
-      [ns_lookup_indexed_color(color_first, f) set];
+      [[NSColor colorWithUnsignedLong:color_first] set];
       NSRectFill(NSMakeRect (x0, y0, x1 - x0, 1));
-      [ns_lookup_indexed_color(color, f) set];
+      [[NSColor colorWithUnsignedLong:color] set];
       NSRectFill(NSMakeRect (x0, y0 + 1, x1 - x0, y1 - y0 - 2));
-      [ns_lookup_indexed_color(color_last, f) set];
+      [[NSColor colorWithUnsignedLong:color_last] set];
       NSRectFill(NSMakeRect (x0, y1 - 1, x1 - x0, 1));
     }
   else
     {
       /* In any other case do not draw the first and last pixels
          differently.  */
-      [ns_lookup_indexed_color(color, f) set];
+      [[NSColor colorWithUnsignedLong:color] set];
       NSRectFill(divider);
     }
 
@@ -3307,16 +3243,17 @@ ns_draw_text_decoration (struct glyph_string *s, struct 
face *face,
 
   if (s->hl == DRAW_CURSOR)
     [FRAME_BACKGROUND_COLOR (s->f) set];
-  else if (face->underline_defaulted_p)
-    [defaultCol set];
   else
-    [ns_lookup_indexed_color (face->underline_color, s->f) set];
+    [defaultCol set];
 
   /* Do underline.  */
   if (face->underline)
     {
       if (s->face->underline == FACE_UNDER_WAVE)
         {
+          if (!face->underline_defaulted_p)
+            [[NSColor colorWithUnsignedLong:face->underline_color] set];
+
           ns_draw_underwave (s, width, x);
         }
       else if (s->face->underline == FACE_UNDER_LINE)
@@ -3328,7 +3265,11 @@ ns_draw_text_decoration (struct glyph_string *s, struct 
face *face,
           /* If the prev was underlined, match its appearance.  */
           if (s->prev
              && s->prev->face->underline == FACE_UNDER_LINE
-              && s->prev->underline_thickness > 0)
+              && s->prev->underline_thickness > 0
+             && (s->prev->face->underline_at_descent_line_p
+                 == s->face->underline_at_descent_line_p)
+             && (s->prev->face->underline_pixels_above_descent_line
+                 == s->face->underline_pixels_above_descent_line))
             {
               thickness = s->prev->underline_thickness;
               position = s->prev->underline_position;
@@ -3349,7 +3290,8 @@ ns_draw_text_decoration (struct glyph_string *s, struct 
face *face,
 
              val = (WINDOW_BUFFER_LOCAL_VALUE
                     (Qx_underline_at_descent_line, s->w));
-             underline_at_descent_line = !(NILP (val) || EQ (val, Qunbound));
+             underline_at_descent_line = (!(NILP (val) || EQ (val, Qunbound))
+                                          || 
s->face->underline_at_descent_line_p);
 
              val = (WINDOW_BUFFER_LOCAL_VALUE
                     (Qx_use_underline_position_properties, s->w));
@@ -3362,7 +3304,8 @@ ns_draw_text_decoration (struct glyph_string *s, struct 
face *face,
 
               /* Determine the offset of underlining from the baseline.  */
               if (underline_at_descent_line)
-                position = descent - thickness;
+                position = (descent - thickness
+                           - s->face->underline_pixels_above_descent_line);
               else if (use_underline_position_properties
                        && font && font->underline_position >= 0)
                 position = font->underline_position;
@@ -3371,7 +3314,8 @@ ns_draw_text_decoration (struct glyph_string *s, struct 
face *face,
               else
                 position = minimum_offset;
 
-              position = max (position, minimum_offset);
+             if (!s->face->underline_pixels_above_descent_line)
+               position = max (position, minimum_offset);
 
               /* Ensure underlining is not cropped.  */
               if (descent <= position)
@@ -3387,6 +3331,10 @@ ns_draw_text_decoration (struct glyph_string *s, struct 
face *face,
           s->underline_position = position;
 
           r = NSMakeRect (x, s->ybase + position, width, thickness);
+
+          if (!face->underline_defaulted_p)
+            [[NSColor colorWithUnsignedLong:face->underline_color] set];
+
           NSRectFill (r);
         }
     }
@@ -3396,6 +3344,10 @@ ns_draw_text_decoration (struct glyph_string *s, struct 
face *face,
     {
       NSRect r;
       r = NSMakeRect (x, s->y, width, 1);
+
+      if (!face->overline_color_defaulted_p)
+        [[NSColor colorWithUnsignedLong:face->overline_color] set];
+
       NSRectFill (r);
     }
 
@@ -3418,6 +3370,9 @@ ns_draw_text_decoration (struct glyph_string *s, struct 
face *face,
       dy = lrint ((glyph_height - h) / 2);
       r = NSMakeRect (x, glyph_y + dy, width, 1);
 
+      if (!face->strike_through_color_defaulted_p)
+        [[NSColor colorWithUnsignedLong:face->strike_through_color] set];
+
       NSRectFill (r);
     }
 }
@@ -3475,7 +3430,7 @@ ns_draw_relief (NSRect outer, int hthickness, int 
vthickness, char raised_p,
 
   if (s->face->use_box_color_for_shadows_p)
     {
-      newBaseCol = ns_lookup_indexed_color (s->face->box_color, s->f);
+      newBaseCol = [NSColor colorWithUnsignedLong:s->face->box_color];
     }
 /*     else if (s->first_glyph->type == IMAGE_GLYPH
           && s->img->pixmap
@@ -3485,7 +3440,7 @@ ns_draw_relief (NSRect outer, int hthickness, int 
vthickness, char raised_p,
        } */
   else
     {
-      newBaseCol = ns_lookup_indexed_color (s->face->background, s->f);
+      newBaseCol = [NSColor colorWithUnsignedLong:s->face->background];
     }
 
   if (newBaseCol == nil)
@@ -3607,7 +3562,7 @@ ns_dumpglyphs_box_or_relief (struct glyph_string *s)
   if (s->face->box == FACE_SIMPLE_BOX && s->face->box_color)
     {
       ns_draw_box (r, abs (hthickness), abs (vthickness),
-                   ns_lookup_indexed_color (face->box_color, s->f),
+                   [NSColor colorWithUnsignedLong:face->box_color],
                    left_p, right_p);
     }
   else
@@ -3644,7 +3599,7 @@ ns_maybe_dumpglyphs_background (struct glyph_string *s, 
char force_p)
            {
              if (s->hl != DRAW_CURSOR)
                [(NS_FACE_BACKGROUND (face) != 0
-                 ? ns_lookup_indexed_color (NS_FACE_BACKGROUND (face), s->f)
+                 ? [NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND (face)]
                  : FRAME_BACKGROUND_COLOR (s->f)) set];
              else
                [FRAME_CURSOR_COLOR (s->f) set];
@@ -3701,7 +3656,7 @@ ns_dumpglyphs_image (struct glyph_string *s, NSRect r)
      otherwise, since we composite the image under NS (instead of mucking
      with its background color), we must clear just the image area.  */
 
-  [ns_lookup_indexed_color (NS_FACE_BACKGROUND (face), s->f) set];
+  [[NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND (face)] set];
 
   if (bg_height > s->slice.height || s->img->hmargin || s->img->vmargin
       || s->img->mask || s->img->pixmap == 0 || s->width != 
s->background_width)
@@ -3771,11 +3726,11 @@ ns_dumpglyphs_image (struct glyph_string *s, NSRect r)
   if (s->hl == DRAW_CURSOR)
     {
       [FRAME_CURSOR_COLOR (s->f) set];
-      tdCol = ns_lookup_indexed_color (NS_FACE_BACKGROUND (face), s->f);
+      tdCol = [NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND (face)];
     }
   else
     {
-      tdCol = ns_lookup_indexed_color (NS_FACE_FOREGROUND (face), s->f);
+      tdCol = [NSColor colorWithUnsignedLong:NS_FACE_FOREGROUND (face)];
     }
 
   /* Draw underline, overline, strike-through.  */
@@ -3832,8 +3787,8 @@ ns_dumpglyphs_stretch (struct glyph_string *s)
 
       face = s->face;
 
-      bgCol = ns_lookup_indexed_color (NS_FACE_BACKGROUND (face), s->f);
-      fgCol = ns_lookup_indexed_color (NS_FACE_FOREGROUND (face), s->f);
+      bgCol = [NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND (face)];
+      fgCol = [NSColor colorWithUnsignedLong:NS_FACE_FOREGROUND (face)];
 
       if (s->hl == DRAW_CURSOR)
        {
@@ -3847,10 +3802,14 @@ ns_dumpglyphs_stretch (struct glyph_string *s)
 
       NSRectFill (glyphRect);
 
-      /* Draw overlining, etc. on the stretch glyph (or the part
-         of the stretch glyph after the cursor). */
-      ns_draw_text_decoration (s, face, fgCol, NSWidth (glyphRect),
-                               NSMinX (glyphRect));
+      /* Draw overlining, etc. on the stretch glyph (or the part of
+         the stretch glyph after the cursor).  If the glyph has a box,
+         then decorations will be drawn after drawing the box in
+         ns_draw_glyph_string, in order to prevent them from being
+         overwritten by the box.  */
+      if (s->face->box == FACE_NO_BOX)
+       ns_draw_text_decoration (s, face, fgCol, NSWidth (glyphRect),
+                                NSMinX (glyphRect));
 
       s->background_filled_p = 1;
     }
@@ -4063,10 +4022,8 @@ ns_draw_glyph_string (struct glyph_string *s)
 
        {
          NSColor *col = (NS_FACE_FOREGROUND (s->face) != 0
-                         ? ns_lookup_indexed_color (NS_FACE_FOREGROUND 
(s->face),
-                                                    s->f)
+                         ? [NSColor colorWithUnsignedLong:NS_FACE_FOREGROUND 
(s->face)]
                          : FRAME_FOREGROUND_COLOR (s->f));
-         [col set];
 
          /* Draw underline, overline, strike-through. */
          ns_draw_text_decoration (s, s->face, col, s->width, s->x);
@@ -4095,6 +4052,16 @@ ns_draw_glyph_string (struct glyph_string *s)
   if (!s->for_overlaps && !box_drawn_p && s->face->box != FACE_NO_BOX)
     ns_dumpglyphs_box_or_relief (s);
 
+  if (s->face->box != FACE_NO_BOX
+      && s->first_glyph->type == STRETCH_GLYPH)
+    {
+      NSColor *fg_color;
+
+      fg_color = [NSColor colorWithUnsignedLong:NS_FACE_FOREGROUND (s->face)];
+      ns_draw_text_decoration (s, s->face, fg_color,
+                              s->background_width, s->x);
+    }
+
   ns_unfocus (s->f);
 
   /* Draw surrounding overhangs. */
@@ -4110,19 +4077,22 @@ ns_draw_glyph_string (struct glyph_string *s)
            /* As prev was drawn while clipped to its own area, we
               must draw the right_overhang part using s->hl now.  */
            enum draw_glyphs_face save = prev->hl;
-           struct face *save_face = prev->face;
 
-           prev->face = s->face;
+           prev->hl = s->hl;
            NSRect r = NSMakeRect (s->x, s->y, s->width, s->height);
+           NSRect rc;
+           get_glyph_string_clip_rect (s, &rc);
            [[NSGraphicsContext currentContext] saveGraphicsState];
            NSRectClip (r);
+           if (n)
+             NSRectClip (rc);
 #ifdef NS_IMPL_GNUSTEP
            DPSgsave ([NSGraphicsContext currentContext]);
            DPSrectclip ([NSGraphicsContext currentContext], s->x, s->y,
                         s->width, s->height);
+           DPSrectclip ([NSGraphicsContext currentContext], NSMinX (rc),
+                        NSMinY (rc), NSWidth (rc), NSHeight (rc));
 #endif
-           prev->num_clips = 1;
-           prev->hl = s->hl;
            if (prev->first_glyph->type == CHAR_GLYPH)
              ns_draw_glyph_string_foreground (prev);
            else
@@ -4132,8 +4102,6 @@ ns_draw_glyph_string (struct glyph_string *s)
 #endif
            [[NSGraphicsContext currentContext] restoreGraphicsState];
            prev->hl = save;
-           prev->face = save_face;
-           prev->num_clips = 0;
          }
       ns_unfocus (s->f);
     }
@@ -4150,19 +4118,21 @@ ns_draw_glyph_string (struct glyph_string *s)
            /* As next will be drawn while clipped to its own area,
               we must draw the left_overhang part using s->hl now.  */
            enum draw_glyphs_face save = next->hl;
-           struct face *save_face = next->face;
 
            next->hl = s->hl;
-           next->face = s->face;
            NSRect r = NSMakeRect (s->x, s->y, s->width, s->height);
+           NSRect rc;
+           get_glyph_string_clip_rect (s, &rc);
            [[NSGraphicsContext currentContext] saveGraphicsState];
            NSRectClip (r);
+           NSRectClip (rc);
 #ifdef NS_IMPL_GNUSTEP
            DPSgsave ([NSGraphicsContext currentContext]);
            DPSrectclip ([NSGraphicsContext currentContext], s->x, s->y,
                         s->width, s->height);
+           DPSrectclip ([NSGraphicsContext currentContext], NSMinX (rc),
+                        NSMinY (rc), NSWidth (rc), NSHeight (rc));
 #endif
-           next->num_clips = 1;
            if (next->first_glyph->type == CHAR_GLYPH)
              ns_draw_glyph_string_foreground (next);
            else
@@ -4172,10 +4142,7 @@ ns_draw_glyph_string (struct glyph_string *s)
 #endif
            [[NSGraphicsContext currentContext] restoreGraphicsState];
            next->hl = save;
-           next->num_clips = 0;
-           next->face = save_face;
-           next->clip_head = next;
-           next->background_filled_p = 0;
+           next->clip_head = s->next;
          }
       ns_unfocus (s->f);
     }
@@ -4528,7 +4495,7 @@ ns_select (int nfds, fd_set *readfds, fd_set *writefds,
 
 #ifdef HAVE_PTHREAD
 void
-ns_run_loop_break ()
+ns_run_loop_break (void)
 /* Break out of the NS run loop in ns_select or ns_read_socket.  */
 {
   NSTRACE_WHEN (NSTRACE_GROUP_EVENTS, "ns_run_loop_break");
@@ -4909,8 +4876,6 @@ ns_initialize_display_info (struct ns_display_info 
*dpyinfo)
                 && ![NSCalibratedWhiteColorSpace isEqualToString:
                                                  NSColorSpaceFromDepth 
(depth)];
     dpyinfo->n_planes = NSBitsPerPixelFromDepth (depth);
-    dpyinfo->color_table = xmalloc (sizeof *dpyinfo->color_table);
-    dpyinfo->color_table->colors = NULL;
     dpyinfo->root_window = 42; /* A placeholder.  */
     dpyinfo->highlight_frame = dpyinfo->ns_focus_frame = NULL;
     dpyinfo->n_fonts = 0;
@@ -5198,11 +5163,9 @@ ns_term_init (Lisp_Object display_name)
             color = XCAR (color_map);
             name = XCAR (color);
             c = XFIXNUM (XCDR (color));
+            c |= 0xFF000000;
             [cl setColor:
-                  [NSColor colorForEmacsRed: RED_FROM_ULONG (c) / 255.0
-                                      green: GREEN_FROM_ULONG (c) / 255.0
-                                       blue: BLUE_FROM_ULONG (c) / 255.0
-                                      alpha: 1.0]
+                  [NSColor colorWithUnsignedLong:c]
                   forKey: [NSString stringWithLispString: name]];
           }
 
@@ -6563,6 +6526,22 @@ not_in_argv (NSString *arg)
           int x = 0, y = 0;
           int scrollUp = NO;
 
+         static bool end_flag = false;
+
+         if (!ns_use_mwheel_momentum && !end_flag
+             && [theEvent momentumPhase] != NSEventPhaseNone)
+           {
+             emacs_event->kind = TOUCH_END_EVENT;
+             emacs_event->arg = Qnil;
+             end_flag = [theEvent momentumPhase] != NSEventPhaseNone;
+             XSETINT (emacs_event->x, lrint (p.x));
+             XSETINT (emacs_event->y, lrint (p.y));
+             EV_TRAILER (theEvent);
+             return;
+           }
+
+         end_flag = [theEvent momentumPhase] != NSEventPhaseNone;
+
           /* FIXME: At the top or bottom of the buffer we should
            * ignore momentum-phase events.  */
           if (! ns_use_mwheel_momentum
@@ -6596,7 +6575,7 @@ not_in_argv (NSString *arg)
                * reset the total delta for the direction we're NOT
                * scrolling so that small movements don't add up.  */
               if (abs (totalDeltaX) > abs (totalDeltaY)
-                  && (!x_coalesce_scroll_events
+                  && (!mwheel_coalesce_scroll_events
                      || abs (totalDeltaX) > lineHeight))
                 {
                   horizontal = YES;
@@ -6604,14 +6583,14 @@ not_in_argv (NSString *arg)
 
                   lines = abs (totalDeltaX / lineHeight);
                  x = totalDeltaX;
-                 if (!x_coalesce_scroll_events)
+                 if (!mwheel_coalesce_scroll_events)
                    totalDeltaX = 0;
                  else
                    totalDeltaX = totalDeltaX % lineHeight;
                   totalDeltaY = 0;
                 }
               else if (abs (totalDeltaY) >= abs (totalDeltaX)
-                       && (!x_coalesce_scroll_events
+                       && (!mwheel_coalesce_scroll_events
                           || abs (totalDeltaY) > lineHeight))
                 {
                   horizontal = NO;
@@ -6619,7 +6598,7 @@ not_in_argv (NSString *arg)
 
                   lines = abs (totalDeltaY / lineHeight);
                  y = totalDeltaY;
-                 if (!x_coalesce_scroll_events)
+                 if (!mwheel_coalesce_scroll_events)
                    totalDeltaY = 0;
                  else
                    totalDeltaY = totalDeltaY % lineHeight;
@@ -6648,13 +6627,21 @@ not_in_argv (NSString *arg)
                 ? ceil (fabs (delta)) : 1;
 
               scrollUp = delta > 0;
-             x = [theEvent scrollingDeltaX];
-             y = [theEvent scrollingDeltaY];
+             x = ([theEvent scrollingDeltaX]
+                  * FRAME_COLUMN_WIDTH (emacsframe));
+             y = ([theEvent scrollingDeltaY]
+                  * FRAME_LINE_HEIGHT (emacsframe));
             }
 
-          if (lines == 0 && x_coalesce_scroll_events)
+          if (lines == 0 && mwheel_coalesce_scroll_events)
             return;
 
+         if (NUMBERP (Vns_scroll_event_delta_factor))
+           {
+             x *= XFLOATINT (Vns_scroll_event_delta_factor);
+             y *= XFLOATINT (Vns_scroll_event_delta_factor);
+           }
+
           emacs_event->kind = horizontal ? HORIZ_WHEEL_EVENT : WHEEL_EVENT;
           emacs_event->arg = list3 (make_fixnum (lines),
                                    make_float (x),
@@ -6864,6 +6851,42 @@ not_in_argv (NSString *arg)
   [self mouseMoved: e];
 }
 
+#ifdef NS_IMPL_COCOA
+- (void) magnifyWithEvent: (NSEvent *) event
+{
+  NSPoint pt = [self convertPoint: [event locationInWindow] fromView: nil];
+  static CGFloat last_scale;
+
+  NSTRACE ("[EmacsView magnifyWithEvent]");
+  if (emacs_event)
+    {
+      emacs_event->kind = PINCH_EVENT;
+      emacs_event->modifiers = EV_MODIFIERS (event);
+      XSETINT (emacs_event->x, lrint (pt.x));
+      XSETINT (emacs_event->y, lrint (pt.y));
+      XSETFRAME (emacs_event->frame_or_window, emacsframe);
+
+      if ([event phase] == NSEventPhaseBegan)
+       {
+         last_scale = 1.0 + [event magnification];
+         emacs_event->arg = list4 (make_float (0.0),
+                                   make_float (0.0),
+                                   make_float (last_scale),
+                                   make_float (0.0));
+       }
+      else
+       /* Report a tiny change so that Lisp code doesn't think this
+          is the beginning of an event sequence.  This is the best we
+          can do because NS doesn't report pinch events in as much
+          detail as XInput 2 or GTK+ do.  */
+       emacs_event->arg = list4 (make_float (0.01),
+                                 make_float (0.0),
+                                 make_float (last_scale += [event 
magnification]),
+                                 make_float (0.0));
+      EV_TRAILER (event);
+    }
+}
+#endif
 
 - (BOOL)windowShouldClose: (id)sender
 {
@@ -7572,7 +7595,7 @@ not_in_argv (NSString *arg)
   EmacsWindow *w, *fw;
   BOOL onFirstScreen;
   struct frame *f;
-  NSRect r, wr;
+  NSRect r;
   NSColor *col;
 
   NSTRACE ("[EmacsView toggleFullScreen:]");
@@ -7591,10 +7614,8 @@ not_in_argv (NSString *arg)
   w = (EmacsWindow *)[self window];
   onFirstScreen = [[w screen] isEqual:[[NSScreen screens] objectAtIndex:0]];
   f = emacsframe;
-  wr = [w frame];
-  col = ns_lookup_indexed_color (NS_FACE_BACKGROUND
-                                (FACE_FROM_ID (f, DEFAULT_FACE_ID)),
-                                 f);
+  col = [NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND
+                                (FACE_FROM_ID (f, DEFAULT_FACE_ID))];
 
   if (fs_state != FULLSCREEN_BOTH)
     {
@@ -8274,10 +8295,17 @@ not_in_argv (NSString *arg)
   if (fullscreen)
     styleMask = NSWindowStyleMaskBorderless;
   else if (FRAME_UNDECORATED (f))
-    styleMask = FRAME_UNDECORATED_FLAGS;
+    {
+      styleMask = NSWindowStyleMaskBorderless;
+#ifdef NS_IMPL_COCOA
+      styleMask |= NSWindowStyleMaskResizable;
+#endif
+    }
   else
-    styleMask = FRAME_DECORATED_FLAGS;
-
+    styleMask = NSWindowStyleMaskTitled
+      | NSWindowStyleMaskResizable
+      | NSWindowStyleMaskMiniaturizable
+      | NSWindowStyleMaskClosable;
 
   self = [super initWithContentRect:
                   NSMakeRect (0, 0,
@@ -8342,9 +8370,8 @@ not_in_argv (NSString *arg)
 
       f->border_width = [self borderWidth];
 
-      col = ns_lookup_indexed_color (NS_FACE_BACKGROUND
-                                     (FACE_FROM_ID (f, DEFAULT_FACE_ID)),
-                                     f);
+      col = [NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND
+                                     (FACE_FROM_ID (f, DEFAULT_FACE_ID))];
       [self setBackgroundColor:col];
       if ([col alphaComponent] != (EmacsCGFloat) 1.0)
         [self setOpaque:NO];
@@ -8437,6 +8464,15 @@ not_in_argv (NSString *arg)
 #if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
   [ourView updateCollectionBehavior];
 #endif
+
+  /* Child frames are often used in ways that may mean they should
+     "disappear" into the contents of the parent frame.  macOs's
+     drop-shadows break this effect, so remove them on undecorated
+     child frames.  */
+  if (parentFrame && FRAME_UNDECORATED (ourFrame))
+    [self setHasShadow:NO];
+  else
+    [self setHasShadow:YES];
 #endif
 
 
@@ -10021,12 +10057,14 @@ This variable is ignored on macOS < 10.7 and GNUstep. 
 Default is t.  */);
      doc: /* SKIP: real doc in xterm.c.  */);
   x_underline_at_descent_line = 0;
 
-  DEFVAR_BOOL ("x-coalesce-scroll-events", x_coalesce_scroll_events,
-              doc: /* SKIP: real doc in xterm.c.  */);
-  x_coalesce_scroll_events = true;
-
   DEFSYM (Qx_underline_at_descent_line, "x-underline-at-descent-line");
 
+  DEFVAR_LISP ("ns-scroll-event-delta-factor", Vns_scroll_event_delta_factor,
+              doc: /* A factor to apply to pixel deltas reported in scroll 
events.
+ This is only effective for pixel deltas generated from touch pads or
+ mice with smooth scrolling capability.  */);
+  Vns_scroll_event_delta_factor = make_float (1.0);
+
   /* Tell Emacs about this window system.  */
   Fprovide (Qns, Qnil);
 
diff --git a/src/nsxwidget.h b/src/nsxwidget.h
index 9cc90b0d09..666509744a 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2019-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/nsxwidget.m b/src/nsxwidget.m
index eff5f0a9ce..f79873235c 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2019-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/pdumper.c b/src/pdumper.c
index 9eff5c48d0..eeebb7ed0e 100644
--- a/src/pdumper.c
+++ b/src/pdumper.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2018-2021 Free Software Foundation, Inc.
+/* Copyright (C) 2018-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -2854,19 +2854,24 @@ dump_bool_vector (struct dump_context *ctx, const 
struct Lisp_Vector *v)
 static dump_off
 dump_subr (struct dump_context *ctx, const struct Lisp_Subr *subr)
 {
-#if CHECK_STRUCTS && !defined (HASH_Lisp_Subr_AA236F7759)
+#if CHECK_STRUCTS && !defined (HASH_Lisp_Subr_F09D8E8E19)
 # error "Lisp_Subr changed. See CHECK_STRUCTS comment in config.h."
 #endif
   struct Lisp_Subr out;
   dump_object_start (ctx, &out, sizeof (out));
   DUMP_FIELD_COPY (&out, subr, header.size);
-  if (NATIVE_COMP_FLAG && !NILP (subr->native_comp_u[0]))
+#ifdef HAVE_NATIVE_COMP
+  bool native_comp = !NILP (subr->native_comp_u);
+#else
+  bool native_comp = false;
+#endif
+  if (native_comp)
     out.function.a0 = NULL;
   else
     dump_field_emacs_ptr (ctx, &out, subr, &subr->function.a0);
   DUMP_FIELD_COPY (&out, subr, min_args);
   DUMP_FIELD_COPY (&out, subr, max_args);
-  if (NATIVE_COMP_FLAG && !NILP (subr->native_comp_u[0]))
+  if (native_comp)
     {
       dump_field_fixup_later (ctx, &out, subr, &subr->symbol_name);
       dump_remember_cold_op (ctx,
@@ -2880,19 +2885,16 @@ dump_subr (struct dump_context *ctx, const struct 
Lisp_Subr *subr)
       dump_field_emacs_ptr (ctx, &out, subr, &subr->intspec);
     }
   DUMP_FIELD_COPY (&out, subr, doc);
-  if (NATIVE_COMP_FLAG)
-    {
-      dump_field_lv (ctx, &out, subr, &subr->native_comp_u[0], WEIGHT_NORMAL);
-      if (!NILP (subr->native_comp_u[0]))
-       dump_field_fixup_later (ctx, &out, subr, &subr->native_c_name[0]);
+#ifdef HAVE_NATIVE_COMP
+  dump_field_lv (ctx, &out, subr, &subr->native_comp_u, WEIGHT_NORMAL);
+  if (!NILP (subr->native_comp_u))
+    dump_field_fixup_later (ctx, &out, subr, &subr->native_c_name);
 
-      dump_field_lv (ctx, &out, subr, &subr->lambda_list[0], WEIGHT_NORMAL);
-      dump_field_lv (ctx, &out, subr, &subr->type[0], WEIGHT_NORMAL);
-    }
+  dump_field_lv (ctx, &out, subr, &subr->lambda_list, WEIGHT_NORMAL);
+  dump_field_lv (ctx, &out, subr, &subr->type, WEIGHT_NORMAL);
+#endif
   dump_off subr_off = dump_object_finish (ctx, &out, sizeof (out));
-  if (NATIVE_COMP_FLAG
-      && ctx->flags.dump_object_contents
-      && !NILP (subr->native_comp_u[0]))
+  if (native_comp && ctx->flags.dump_object_contents)
     /* We'll do the final addr relocation during VERY_LATE_RELOCS time
        after the compilation units has been loaded. */
     dump_push (&ctx->dump_relocs[VERY_LATE_RELOCS],
@@ -2946,7 +2948,7 @@ dump_vectorlike (struct dump_context *ctx,
                  Lisp_Object lv,
                  dump_off offset)
 {
-#if CHECK_STRUCTS && !defined HASH_pvec_type_F5BA506141
+#if CHECK_STRUCTS && !defined HASH_pvec_type_19F6CF5169
 # error "pvec_type changed. See CHECK_STRUCTS comment in config.h."
 #endif
   const struct Lisp_Vector *v = XVECTOR (lv);
@@ -3026,6 +3028,8 @@ dump_vectorlike (struct dump_context *ctx,
       error_unsupported_dump_object (ctx, lv, "mutex");
     case PVEC_CONDVAR:
       error_unsupported_dump_object (ctx, lv, "condvar");
+    case PVEC_SQLITE:
+      error_unsupported_dump_object (ctx, lv, "sqlite");
     case PVEC_MODULE_FUNCTION:
       error_unsupported_dump_object (ctx, lv, "module function");
     default:
@@ -3173,7 +3177,7 @@ dump_charset (struct dump_context *ctx, int cs_i)
   DUMP_FIELD_COPY (&out, cs, hash_index);
   DUMP_FIELD_COPY (&out, cs, dimension);
   memcpy (out.code_space, &cs->code_space, sizeof (cs->code_space));
-  if (cs->code_space_mask)
+  if (cs_i < charset_table_used && cs->code_space_mask)
     dump_field_fixup_later (ctx, &out, cs, &cs->code_space_mask);
   DUMP_FIELD_COPY (&out, cs, code_linear_p);
   DUMP_FIELD_COPY (&out, cs, iso_chars_96);
@@ -3194,7 +3198,7 @@ dump_charset (struct dump_context *ctx, int cs_i)
   memcpy (out.fast_map, &cs->fast_map, sizeof (cs->fast_map));
   DUMP_FIELD_COPY (&out, cs, code_offset);
   dump_off offset = dump_object_finish (ctx, &out, sizeof (out));
-  if (cs->code_space_mask)
+  if (cs_i < charset_table_used && cs->code_space_mask)
     dump_remember_cold_op (ctx, COLD_OP_CHARSET,
                            Fcons (dump_off_to_lisp (cs_i),
                                   dump_off_to_lisp (offset)));
@@ -3422,9 +3426,9 @@ dump_cold_native_subr (struct dump_context *ctx, 
Lisp_Object subr)
 
   dump_remember_fixup_ptr_raw
     (ctx,
-     subr_offset + dump_offsetof (struct Lisp_Subr, native_c_name[0]),
+     subr_offset + dump_offsetof (struct Lisp_Subr, native_c_name),
      ctx->offset);
-  const char *c_name = XSUBR (subr)->native_c_name[0];
+  const char *c_name = XSUBR (subr)->native_c_name;
   dump_write (ctx, c_name, 1 + strlen (c_name));
 }
 #endif
@@ -5349,7 +5353,7 @@ dump_do_dump_relocation (const uintptr_t dump_base,
           their file names through expand-file-name and
           decode-coding-string.  */
        comp_u->file = eln_fname;
-       comp_u->handle = dynlib_open (SSDATA (eln_fname));
+       comp_u->handle = dynlib_open_for_eln (SSDATA (eln_fname));
        if (!comp_u->handle)
          {
            fprintf (stderr, "Error using execdir %s:\n",
@@ -5361,20 +5365,16 @@ dump_do_dump_relocation (const uintptr_t dump_base,
       }
     case RELOC_NATIVE_SUBR:
       {
-       if (!NATIVE_COMP_FLAG)
-         /* This cannot happen.  */
-         emacs_abort ();
-
        /* When resurrecting from a dump given non all the original
           native compiled subrs may be still around we can't rely on
           a 'top_level_run' mechanism, we revive them one-by-one
           here.  */
        struct Lisp_Subr *subr = dump_ptr (dump_base, reloc_offset);
        struct Lisp_Native_Comp_Unit *comp_u =
-         XNATIVE_COMP_UNIT (subr->native_comp_u[0]);
+         XNATIVE_COMP_UNIT (subr->native_comp_u);
        if (!comp_u->handle)
          error ("NULL handle in compilation unit %s", SSDATA (comp_u->file));
-       const char *c_name = subr->native_c_name[0];
+       const char *c_name = subr->native_c_name;
        eassert (c_name);
        void *func = dynlib_sym (comp_u->handle, c_name);
        if (!func)
diff --git a/src/pdumper.h b/src/pdumper.h
index 7f1f5e46ad..ffc743df42 100644
--- a/src/pdumper.h
+++ b/src/pdumper.h
@@ -1,6 +1,6 @@
 /* Header file for the portable dumper.
 
-Copyright (C) 2016, 2018-2021 Free Software Foundation, Inc.
+Copyright (C) 2016, 2018-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/pgtkfns.c b/src/pgtkfns.c
new file mode 100644
index 0000000000..c604e2f100
--- /dev/null
+++ b/src/pgtkfns.c
@@ -0,0 +1,4119 @@
+/* Functions for the pure Gtk+-3.
+
+Copyright (C) 1989, 1992-1994, 2005-2006, 2008-2020, 2022 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/>.  */
+
+/* This should be the first include, as it may set up #defines affecting
+   interpretation of even the system includes. */
+#include <config.h>
+
+#include <math.h>
+#include <c-strcase.h>
+
+#include "lisp.h"
+#include "blockinput.h"
+#include "gtkutil.h"
+#include "window.h"
+#include "character.h"
+#include "buffer.h"
+#include "keyboard.h"
+#include "termhooks.h"
+#include "fontset.h"
+#include "font.h"
+#include "xsettings.h"
+#include "atimer.h"
+
+
+#ifdef HAVE_PGTK
+
+/* Static variables to handle applescript execution.  */
+static Lisp_Object as_script, *as_result;
+static int as_status;
+
+static ptrdiff_t image_cache_refcount;
+
+static int x_decode_color (struct frame *f, Lisp_Object color_name,
+                          int mono_color);
+static struct pgtk_display_info *pgtk_display_info_for_name (Lisp_Object);
+
+static const char *pgtk_app_name = "Emacs";
+
+/* Scale factor manually set per monitor.  */
+static Lisp_Object monitor_scale_factor_alist;
+
+/* ==========================================================================
+
+    Internal utility functions
+
+   ========================================================================== 
*/
+
+static double
+pgtk_get_monitor_scale_factor (const char *model)
+{
+  if (model == NULL)
+    return 0.0;
+
+  Lisp_Object mdl = build_string (model);
+  Lisp_Object tem = Fassoc (mdl, monitor_scale_factor_alist, Qnil);
+  if (NILP (tem))
+    return 0;
+  Lisp_Object cdr = Fcdr (tem);
+  if (NILP (cdr))
+    return 0;
+  if (FIXNUMP (cdr))
+    return XFIXNUM (cdr);
+  else if (FLOATP (cdr))
+    return XFLOAT_DATA (cdr);
+  else
+    error ("unknown type of scale-factor");
+}
+
+struct pgtk_display_info *
+check_pgtk_display_info (Lisp_Object object)
+{
+  struct pgtk_display_info *dpyinfo = NULL;
+
+  if (NILP (object))
+    {
+      struct frame *sf = XFRAME (selected_frame);
+
+      if (FRAME_PGTK_P (sf) && FRAME_LIVE_P (sf))
+       dpyinfo = FRAME_DISPLAY_INFO (sf);
+      else if (x_display_list != 0)
+       dpyinfo = x_display_list;
+      else
+       error ("Frames are not in use or not initialized");
+    }
+  else if (TERMINALP (object))
+    {
+      struct terminal *t = decode_live_terminal (object);
+
+      if (t->type != output_pgtk)
+       error ("Terminal %d is not a display", t->id);
+
+      dpyinfo = t->display_info.pgtk;
+    }
+  else if (STRINGP (object))
+    dpyinfo = pgtk_display_info_for_name (object);
+  else
+    {
+      struct frame *f = decode_window_system_frame (object);
+      dpyinfo = FRAME_DISPLAY_INFO (f);
+    }
+
+  return dpyinfo;
+}
+
+/* On Wayland, even if without WAYLAND_DISPLAY, --display DISPLAY
+   works, but gdk_display_get_name always return "wayland-0", which
+   may be different from DISPLAY.  If with WAYLAND_DISPLAY, then it
+   always returns WAYLAND_DISPLAY.  So pgtk Emacs is confused and
+   enters multi display environment.  To workaround this situation,
+   treat all the wayland-* as the same display.  */
+static Lisp_Object
+is_wayland_display (Lisp_Object dpyname)
+{
+  const char *p = SSDATA (dpyname);
+  if (strncmp (p, "wayland-", 8) != 0)
+    return Qnil;
+  p += 8;
+  do {
+    if (*p < '0' || *p > '9')
+      return Qnil;
+  } while (*++p != '\0');
+  return Qt;
+}
+
+/* Return the X display structure for the display named NAME.
+   Open a new connection if necessary.  */
+static struct pgtk_display_info *
+pgtk_display_info_for_name (Lisp_Object name)
+{
+  struct pgtk_display_info *dpyinfo;
+
+  CHECK_STRING (name);
+
+  if (!NILP (is_wayland_display (name)))
+    {
+      for (dpyinfo = x_display_list; dpyinfo; dpyinfo = dpyinfo->next)
+       if (!NILP (is_wayland_display (XCAR (dpyinfo->name_list_element))))
+         return dpyinfo;
+    }
+  else
+    {
+      for (dpyinfo = x_display_list; dpyinfo; dpyinfo = dpyinfo->next)
+       if (!NILP (Fstring_equal (XCAR (dpyinfo->name_list_element), name)))
+         return dpyinfo;
+    }
+
+  /* Use this general default value to start with.  */
+  Vx_resource_name = Vinvocation_name;
+
+  validate_x_resource_name ();
+
+  dpyinfo = pgtk_term_init (name, SSDATA (Vx_resource_name));
+
+  if (dpyinfo == 0)
+    error ("Cannot connect to display server %s", SDATA (name));
+
+  XSETFASTINT (Vwindow_system_version, 11);
+
+  return dpyinfo;
+}
+
+/* ==========================================================================
+
+    Frame parameter setters
+
+   ========================================================================== 
*/
+
+
+static void
+x_set_foreground_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
+{
+  unsigned long fg, old_fg;
+
+  block_input ();
+  old_fg = FRAME_FOREGROUND_COLOR (f);
+  fg = x_decode_color (f, arg, BLACK_PIX_DEFAULT (f));
+  FRAME_FOREGROUND_PIXEL (f) = fg;
+  FRAME_X_OUTPUT (f)->foreground_color = fg;
+
+  if (FRAME_GTK_WIDGET (f))
+    {
+      if (FRAME_X_OUTPUT (f)->cursor_color == old_fg)
+       {
+         FRAME_X_OUTPUT (f)->cursor_color = fg;
+         FRAME_X_OUTPUT (f)->cursor_xgcv.background = fg;
+       }
+
+      update_face_from_frame_parameter (f, Qforeground_color, arg);
+      if (FRAME_VISIBLE_P (f))
+       SET_FRAME_GARBAGED (f);
+    }
+  unblock_input ();
+}
+
+
+static void
+x_set_background_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
+{
+  unsigned long bg;
+
+  block_input ();
+  bg = x_decode_color (f, arg, WHITE_PIX_DEFAULT (f));
+  FRAME_BACKGROUND_PIXEL (f) = bg;
+
+  /* Clear the frame.  */
+  if (FRAME_VISIBLE_P (f))
+    pgtk_clear_frame (f);
+
+  FRAME_X_OUTPUT (f)->background_color = bg;
+  FRAME_X_OUTPUT (f)->cursor_xgcv.foreground = bg;
+
+  xg_set_background_color (f, bg);
+  update_face_from_frame_parameter (f, Qbackground_color, arg);
+
+  if (FRAME_VISIBLE_P (f))
+    SET_FRAME_GARBAGED (f);
+  unblock_input ();
+}
+
+static void
+x_set_border_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
+{
+  int pix;
+
+  CHECK_STRING (arg);
+  pix = x_decode_color (f, arg, BLACK_PIX_DEFAULT (f));
+  FRAME_X_OUTPUT (f)->border_pixel = pix;
+  pgtk_frame_rehighlight (FRAME_DISPLAY_INFO (f));
+}
+
+static void
+x_set_cursor_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
+{
+  unsigned long fore_pixel, pixel;
+  struct pgtk_output *x = f->output_data.pgtk;
+
+  if (!NILP (Vx_cursor_fore_pixel))
+    {
+      fore_pixel = x_decode_color (f, Vx_cursor_fore_pixel,
+                                  WHITE_PIX_DEFAULT (f));
+    }
+  else
+    fore_pixel = FRAME_BACKGROUND_PIXEL (f);
+
+  pixel = x_decode_color (f, arg, BLACK_PIX_DEFAULT (f));
+
+  /* Make sure that the cursor color differs from the background color.  */
+  if (pixel == FRAME_BACKGROUND_PIXEL (f))
+    {
+      pixel = x->mouse_color;
+      if (pixel == fore_pixel)
+       {
+         fore_pixel = FRAME_BACKGROUND_PIXEL (f);
+       }
+    }
+
+  x->cursor_foreground_color = fore_pixel;
+  x->cursor_color = pixel;
+
+  if (FRAME_X_WINDOW (f) != 0)
+    {
+      x->cursor_xgcv.background = x->cursor_color;
+      x->cursor_xgcv.foreground = fore_pixel;
+
+      if (FRAME_VISIBLE_P (f))
+       {
+         gui_update_cursor (f, false);
+         gui_update_cursor (f, true);
+       }
+    }
+
+  update_face_from_frame_parameter (f, Qcursor_color, arg);
+}
+
+static void
+pgtk_set_name_internal (struct frame *f, Lisp_Object name)
+{
+  if (FRAME_GTK_OUTER_WIDGET (f))
+    {
+      block_input ();
+      {
+       Lisp_Object encoded_name;
+
+       /* As ENCODE_UTF_8 may cause GC and relocation of string data,
+          we use it before x_encode_text that may return string data.  */
+       encoded_name = ENCODE_UTF_8 (name);
+
+       gtk_window_set_title (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
+                             SSDATA (encoded_name));
+      }
+      unblock_input ();
+    }
+}
+
+static void
+pgtk_set_name (struct frame *f, Lisp_Object name, int explicit)
+{
+  /* Make sure that requests from lisp code override requests from
+     Emacs redisplay code.  */
+  if (explicit)
+    {
+      /* If we're switching from explicit to implicit, we had better
+         update the mode lines and thereby update the title.  */
+      if (f->explicit_name && NILP (name))
+       update_mode_lines = 12;
+
+      f->explicit_name = !NILP (name);
+    }
+  else if (f->explicit_name)
+    return;
+
+  if (NILP (name))
+    name = build_string (pgtk_app_name);
+  else
+    CHECK_STRING (name);
+
+  /* Don't change the name if it's already NAME.  */
+  if (!NILP (Fstring_equal (name, f->name)))
+    return;
+
+  fset_name (f, name);
+
+  /* Title overrides explicit name.  */
+  if (!NILP (f->title))
+    name = f->title;
+
+  pgtk_set_name_internal (f, name);
+}
+
+
+/* This function should be called when the user's lisp code has
+   specified a name for the frame; the name will override any set by the
+   redisplay code.  */
+static void
+x_explicitly_set_name (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
+{
+  pgtk_set_name (f, arg, true);
+}
+
+
+/* This function should be called by Emacs redisplay code to set the
+   name; names set this way will never override names set by the user's
+   lisp code.  */
+void
+pgtk_implicitly_set_name (struct frame *f, Lisp_Object arg,
+                         Lisp_Object oldval)
+{
+  pgtk_set_name (f, arg, false);
+}
+
+
+/* Change the title of frame F to NAME.
+   If NAME is nil, use the frame name as the title.  */
+
+static void
+x_set_title (struct frame *f, Lisp_Object name, Lisp_Object old_name)
+{
+  /* Don't change the title if it's already NAME.  */
+  if (EQ (name, f->title))
+    return;
+
+  update_mode_lines = 22;
+
+  fset_title (f, name);
+
+  if (NILP (name))
+    name = f->name;
+  else
+    CHECK_STRING (name);
+
+  pgtk_set_name_internal (f, name);
+}
+
+
+void
+pgtk_set_doc_edited (void)
+{
+}
+
+
+static void
+x_set_menu_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval)
+{
+  int nlines;
+  /* Right now, menu bars don't work properly in minibuf-only frames;
+     most of the commands try to apply themselves to the minibuffer
+     frame itself, and get an error because you can't switch buffers
+     in or split the minibuffer window.  */
+  if (FRAME_MINIBUF_ONLY_P (f) || FRAME_PARENT_FRAME (f))
+    return;
+
+  if (TYPE_RANGED_FIXNUMP (int, value))
+    nlines = XFIXNUM (value);
+  else
+    nlines = 0;
+
+  /* Make sure we redisplay all windows in this frame.  */
+  fset_redisplay (f);
+
+  FRAME_MENU_BAR_LINES (f) = 0;
+  FRAME_MENU_BAR_HEIGHT (f) = 0;
+  if (nlines)
+    {
+      FRAME_EXTERNAL_MENU_BAR (f) = 1;
+      if (FRAME_PGTK_P (f) && f->output_data.pgtk->menubar_widget == 0)
+       /* Make sure next redisplay shows the menu bar.  */
+       XWINDOW (FRAME_SELECTED_WINDOW (f))->update_mode_line = true;
+    }
+  else
+    {
+      if (FRAME_EXTERNAL_MENU_BAR (f) == 1)
+       free_frame_menubar (f);
+      FRAME_EXTERNAL_MENU_BAR (f) = 0;
+      if (FRAME_X_P (f))
+       f->output_data.pgtk->menubar_widget = 0;
+    }
+
+  adjust_frame_glyphs (f);
+}
+
+/* Set the number of lines used for the tab bar of frame F to VALUE.
+   VALUE not an integer, or < 0 means set the lines to zero.  OLDVAL
+   is the old number of tab bar lines.  This function changes the
+   height of all windows on frame F to match the new tab bar height.
+   The frame's height doesn't change.  */
+
+static void
+x_set_tab_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval)
+{
+  int nlines;
+
+  /* Treat tab bars like menu bars.  */
+  if (FRAME_MINIBUF_ONLY_P (f))
+    return;
+
+  /* Use VALUE only if an int >= 0.  */
+  if (RANGED_FIXNUMP (0, value, INT_MAX))
+    nlines = XFIXNAT (value);
+  else
+    nlines = 0;
+
+  x_change_tab_bar_height (f, nlines * FRAME_LINE_HEIGHT (f));
+}
+
+
+/* Set the pixel height of the tab bar of frame F to HEIGHT.  */
+void
+x_change_tab_bar_height (struct frame *f, int height)
+{
+  int unit = FRAME_LINE_HEIGHT (f);
+  int old_height = FRAME_TAB_BAR_HEIGHT (f);
+  int lines = (height + unit - 1) / unit;
+  Lisp_Object fullscreen = get_frame_param (f, Qfullscreen);
+
+  /* Make sure we redisplay all windows in this frame.  */
+  fset_redisplay (f);
+
+  /* Recalculate tab bar and frame text sizes.  */
+  FRAME_TAB_BAR_HEIGHT (f) = height;
+  FRAME_TAB_BAR_LINES (f) = lines;
+  store_frame_param (f, Qtab_bar_lines, make_fixnum (lines));
+
+  if (FRAME_X_WINDOW (f) && FRAME_TAB_BAR_HEIGHT (f) == 0)
+    {
+      clear_frame (f);
+      clear_current_matrices (f);
+    }
+
+  if ((height < old_height) && WINDOWP (f->tab_bar_window))
+    clear_glyph_matrix (XWINDOW (f->tab_bar_window)->current_matrix);
+
+  if (!f->tab_bar_resized)
+    {
+      /* As long as tab_bar_resized is false, effectively try to change
+        F's native height.  */
+      if (NILP (fullscreen) || EQ (fullscreen, Qfullwidth))
+       adjust_frame_size (f, FRAME_TEXT_WIDTH (f), FRAME_TEXT_HEIGHT (f),
+                          1, false, Qtab_bar_lines);
+      else
+       adjust_frame_size (f, -1, -1, 4, false, Qtab_bar_lines);
+
+      f->tab_bar_resized = f->tab_bar_redisplayed;
+    }
+  else
+    /* Any other change may leave the native size of F alone.  */
+    adjust_frame_size (f, -1, -1, 3, false, Qtab_bar_lines);
+
+  /* adjust_frame_size might not have done anything, garbage frame
+     here.  */
+  adjust_frame_glyphs (f);
+  SET_FRAME_GARBAGED (f);
+  if (FRAME_X_WINDOW (f))
+    pgtk_clear_under_internal_border (f);
+}
+
+/* Set the pixel height of the tool bar of frame F to HEIGHT.  */
+static void
+x_change_tool_bar_height (struct frame *f, int height)
+{
+  FRAME_TOOL_BAR_LINES (f) = 0;
+  FRAME_TOOL_BAR_HEIGHT (f) = 0;
+  if (height)
+    {
+      FRAME_EXTERNAL_TOOL_BAR (f) = true;
+      if (FRAME_X_P (f) && f->output_data.pgtk->toolbar_widget == 0)
+       /* Make sure next redisplay shows the tool bar.  */
+       XWINDOW (FRAME_SELECTED_WINDOW (f))->update_mode_line = true;
+      update_frame_tool_bar (f);
+    }
+  else
+    {
+      if (FRAME_EXTERNAL_TOOL_BAR (f))
+       free_frame_tool_bar (f);
+      FRAME_EXTERNAL_TOOL_BAR (f) = false;
+    }
+}
+
+/* Toolbar support.  */
+static void
+x_set_tool_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval)
+{
+  int nlines;
+
+  /* Treat tool bars like menu bars.  */
+  if (FRAME_MINIBUF_ONLY_P (f))
+    return;
+
+  /* Use VALUE only if an int >= 0.  */
+  if (RANGED_FIXNUMP (0, value, INT_MAX))
+    nlines = XFIXNAT (value);
+  else
+    nlines = 0;
+
+  x_change_tool_bar_height (f, nlines * FRAME_LINE_HEIGHT (f));
+
+}
+
+static void
+x_set_child_frame_border_width (struct frame *f, Lisp_Object arg, Lisp_Object 
oldval)
+{
+  int border = check_int_nonnegative (arg);
+
+  if (border != FRAME_CHILD_FRAME_BORDER_WIDTH (f))
+    {
+      f->child_frame_border_width = border;
+
+      if (FRAME_X_WINDOW (f))
+       {
+         adjust_frame_size (f, -1, -1, 3, false, Qchild_frame_border_width);
+         pgtk_clear_under_internal_border (f);
+       }
+    }
+
+}
+
+static void
+x_set_internal_border_width (struct frame *f, Lisp_Object arg,
+                            Lisp_Object oldval)
+{
+  int border = check_int_nonnegative (arg);
+
+  if (border != FRAME_INTERNAL_BORDER_WIDTH (f))
+    {
+      f->internal_border_width = border;
+
+      if (FRAME_X_WINDOW (f))
+       {
+         adjust_frame_size (f, -1, -1, 3, false, Qinternal_border_width);
+         pgtk_clear_under_internal_border (f);
+       }
+    }
+}
+
+static void
+x_set_icon_type (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
+{
+  bool result;
+
+  if (STRINGP (arg))
+    {
+      if (STRINGP (oldval) && EQ (Fstring_equal (oldval, arg), Qt))
+       return;
+    }
+  else if (!STRINGP (oldval) && NILP (oldval) == NILP (arg))
+    return;
+
+  block_input ();
+  if (NILP (arg))
+    result = pgtk_text_icon (f,
+                            SSDATA ((!NILP (f->icon_name)
+                                     ? f->icon_name : f->name)));
+  else
+    result = FRAME_TERMINAL (f)->set_bitmap_icon_hook (f, arg);
+
+  if (result)
+    {
+      unblock_input ();
+      error ("No icon window available");
+    }
+
+  unblock_input ();
+}
+
+static void
+x_set_icon_name (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
+{
+  bool result;
+
+  if (STRINGP (arg))
+    {
+      if (STRINGP (oldval) && EQ (Fstring_equal (oldval, arg), Qt))
+       return;
+    }
+  else if (!NILP (arg) || NILP (oldval))
+    return;
+
+  fset_icon_name (f, arg);
+
+  block_input ();
+
+  result = pgtk_text_icon (f,
+                          SSDATA ((!NILP (f->icon_name)
+                                   ? f->icon_name
+                                   : !NILP (f->title)
+                                   ? f->title : f->name)));
+
+  if (result)
+    {
+      unblock_input ();
+      error ("No icon window available");
+    }
+
+  unblock_input ();
+}
+
+/* This is the same as the xfns.c definition.  */
+static void
+x_set_cursor_type (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
+{
+  set_frame_cursor_types (f, arg);
+}
+
+/* called to set mouse pointer color, but all other terms use it to
+   initialize pointer types (and don't set the color ;) */
+static void
+x_set_mouse_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
+{
+}
+
+
+static void
+x_icon (struct frame *f, Lisp_Object parms)
+/* --------------------------------------------------------------------------
+   Strangely-named function to set icon position parameters in frame.
+   This is irrelevant under macOS, but might be needed under GNUstep,
+   depending on the window manager used.  Note, this is not a standard
+   frame parameter-setter; it is called directly from x-create-frame.
+   -------------------------------------------------------------------------- 
*/
+{
+#if 0
+  Lisp_Object icon_x, icon_y;
+  struct pgtk_display_info *dpyinfo = check_pgtk_display_info (Qnil);
+
+  FRAME_X_OUTPUT (f)->icon_top = -1;
+  FRAME_X_OUTPUT (f)->icon_left = -1;
+
+  /* Set the position of the icon.  */
+  icon_x =
+    gui_display_get_arg (dpyinfo, parms, Qicon_left, 0, 0, RES_TYPE_NUMBER);
+  icon_y =
+    gui_display_get_arg (dpyinfo, parms, Qicon_top, 0, 0, RES_TYPE_NUMBER);
+  if (!EQ (icon_x, Qunbound) && !EQ (icon_y, Qunbound))
+    {
+      CHECK_NUMBER (icon_x);
+      CHECK_NUMBER (icon_y);
+      FRAME_X_OUTPUT (f)->icon_top = XFIXNUM (icon_y);
+      FRAME_X_OUTPUT (f)->icon_left = XFIXNUM (icon_x);
+    }
+  else if (!EQ (icon_x, Qunbound) || !EQ (icon_y, Qunbound))
+    error ("Both left and top icon corners of icon must be specified");
+#endif
+}
+
+/**
+ * x_set_undecorated:
+ *
+ * Set frame F's `undecorated' parameter.  If non-nil, F's window-system
+ * window is drawn without decorations, title, minimize/maximize boxes
+ * and external borders.  This usually means that the window cannot be
+ * dragged, resized, iconified, maximized or deleted with the mouse.  If
+ * nil, draw the frame with all the elements listed above unless these
+ * have been suspended via window manager settings.
+ *
+ * Some window managers may not honor this parameter.
+ */
+static void
+x_set_undecorated (struct frame *f, Lisp_Object new_value,
+                  Lisp_Object old_value)
+{
+  if (!EQ (new_value, old_value))
+    {
+      FRAME_UNDECORATED (f) = NILP (new_value) ? false : true;
+      xg_set_undecorated (f, new_value);
+    }
+}
+
+/**
+ * x_set_skip_taskbar:
+ *
+ * Set frame F's `skip-taskbar' parameter.  If non-nil, this should
+ * remove F's icon from the taskbar associated with the display of F's
+ * window-system window and inhibit switching to F's window via
+ * <Alt>-<TAB>.  If nil, lift these restrictions.
+ *
+ * Some window managers may not honor this parameter.
+ */
+static void
+x_set_skip_taskbar (struct frame *f, Lisp_Object new_value,
+                   Lisp_Object old_value)
+{
+  if (!EQ (new_value, old_value))
+    {
+      xg_set_skip_taskbar (f, new_value);
+      FRAME_SKIP_TASKBAR (f) = !NILP (new_value);
+    }
+}
+
+/**
+ * x_set_override_redirect:
+ *
+ * Set frame F's `override_redirect' parameter which, if non-nil, hints
+ * that the window manager doesn't want to deal with F.  Usually, such
+ * frames have no decorations and always appear on top of all frames.
+ *
+ * Some window managers may not honor this parameter.
+ */
+static void
+x_set_override_redirect (struct frame *f, Lisp_Object new_value,
+                        Lisp_Object old_value)
+{
+  if (!EQ (new_value, old_value))
+    {
+      /* Here (xfwm) override_redirect can be changed for invisible
+         frames only.  */
+      pgtk_make_frame_invisible (f);
+
+      xg_set_override_redirect (f, new_value);
+
+      pgtk_make_frame_visible (f);
+      FRAME_OVERRIDE_REDIRECT (f) = !NILP (new_value);
+    }
+}
+
+/* Set icon from FILE for frame F.  By using GTK functions the icon
+   may be any format that GdkPixbuf knows about, i.e. not just bitmaps.  */
+
+bool
+xg_set_icon (struct frame *f, Lisp_Object file)
+{
+  bool result = false;
+  Lisp_Object found;
+
+  if (!FRAME_GTK_OUTER_WIDGET (f))
+    return false;
+
+  found = image_find_image_file (file);
+
+  if (!NILP (found))
+    {
+      GdkPixbuf *pixbuf;
+      GError *err = NULL;
+      char *filename = SSDATA (ENCODE_FILE (found));
+      block_input ();
+
+      pixbuf = gdk_pixbuf_new_from_file (filename, &err);
+
+      if (pixbuf)
+       {
+         gtk_window_set_icon (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
+                              pixbuf);
+         g_object_unref (pixbuf);
+
+         result = true;
+       }
+      else
+       g_error_free (err);
+
+      unblock_input ();
+    }
+
+  return result;
+}
+
+bool
+xg_set_icon_from_xpm_data (struct frame *f, const char **data)
+{
+  GdkPixbuf *pixbuf = gdk_pixbuf_new_from_xpm_data (data);
+
+  if (!pixbuf)
+    return false;
+
+  if (!FRAME_GTK_OUTER_WIDGET (f))
+    return false;
+
+  gtk_window_set_icon (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)), pixbuf);
+  g_object_unref (pixbuf);
+  return true;
+}
+
+static void
+pgtk_set_sticky (struct frame *f, Lisp_Object new_value,
+                Lisp_Object old_value)
+{
+  if (!FRAME_GTK_OUTER_WIDGET (f))
+    return;
+
+  if (!NILP (new_value))
+    gtk_window_stick (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)));
+  else
+    gtk_window_unstick (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)));
+}
+
+static void
+pgtk_set_tool_bar_position (struct frame *f,
+                           Lisp_Object new_value, Lisp_Object old_value)
+{
+  Lisp_Object choice = list4 (Qleft, Qright, Qtop, Qbottom);
+
+  if (!NILP (Fmemq (new_value, choice)))
+    {
+      if (!EQ (new_value, old_value))
+       {
+         xg_change_toolbar_position (f, new_value);
+         fset_tool_bar_position (f, new_value);
+       }
+    }
+  else
+    wrong_choice (choice, new_value);
+}
+
+static void
+pgtk_set_scroll_bar_foreground (struct frame *f, Lisp_Object new_value,
+                               Lisp_Object old_value)
+{
+  GtkCssProvider *css_provider =
+    FRAME_X_OUTPUT (f)->scrollbar_foreground_css_provider;
+
+  if (NILP (new_value))
+    {
+      gtk_css_provider_load_from_data (css_provider, "", -1, NULL);
+      update_face_from_frame_parameter (f, Qscroll_bar_foreground, new_value);
+    }
+  else if (STRINGP (new_value))
+    {
+      Emacs_Color rgb;
+
+      if (!pgtk_parse_color (f, SSDATA (new_value), &rgb))
+       error ("Unknown color.");
+
+      /* On pgtk, this frame parameter should be ignored, and honor gtk theme. 
*/
+#if 0
+      char css[64];
+      sprintf (css, "scrollbar slider { background-color: #%06x; }",
+              (unsigned int) rgb.pixel & 0xffffff);
+      gtk_css_provider_load_from_data (css_provider, css, -1, NULL);
+#endif
+      update_face_from_frame_parameter (f, Qscroll_bar_foreground, new_value);
+
+    }
+  else
+    error ("Invalid scroll-bar-foreground.");
+}
+
+static void
+pgtk_set_scroll_bar_background (struct frame *f, Lisp_Object new_value,
+                               Lisp_Object old_value)
+{
+  GtkCssProvider *css_provider =
+    FRAME_X_OUTPUT (f)->scrollbar_background_css_provider;
+
+  if (NILP (new_value))
+    {
+      gtk_css_provider_load_from_data (css_provider, "", -1, NULL);
+      update_face_from_frame_parameter (f, Qscroll_bar_background, new_value);
+    }
+  else if (STRINGP (new_value))
+    {
+      Emacs_Color rgb;
+
+      if (!pgtk_parse_color (f, SSDATA (new_value), &rgb))
+       error ("Unknown color.");
+
+      /* On pgtk, this frame parameter should be ignored, and honor gtk theme. 
*/
+#if 0
+      char css[64];
+      sprintf (css, "scrollbar trough { background-color: #%06x; }",
+              (unsigned int) rgb.pixel & 0xffffff);
+      gtk_css_provider_load_from_data (css_provider, css, -1, NULL);
+#endif
+      update_face_from_frame_parameter (f, Qscroll_bar_background, new_value);
+
+    }
+  else
+    error ("Invalid scroll-bar-background.");
+}
+
+
+/***********************************************************************
+                              Printing
+ ***********************************************************************/
+
+
+DEFUN ("x-export-frames", Fx_export_frames, Sx_export_frames, 0, 2, 0,
+       doc: /* Return image data of FRAMES in TYPE format.
+FRAMES should be nil (the selected frame), a frame, or a list of
+frames (each of which corresponds to one page).  Each frame should be
+visible.  Optional arg TYPE should be either `pdf' (default), `png',
+`postscript', or `svg'.  Supported types are determined by the
+compile-time configuration of cairo.
+
+Note: Text drawn with the `x' font backend is shown with hollow boxes
+unless TYPE is `png'.  */)
+     (Lisp_Object frames, Lisp_Object type)
+{
+  Lisp_Object rest, tmp;
+  cairo_surface_type_t surface_type;
+
+  if (!CONSP (frames))
+    frames = list1 (frames);
+
+  tmp = Qnil;
+  for (rest = frames; CONSP (rest); rest = XCDR (rest))
+    {
+      struct frame *f = decode_window_system_frame (XCAR (rest));
+      Lisp_Object frame;
+
+      XSETFRAME (frame, f);
+      if (!FRAME_VISIBLE_P (f))
+       error ("Frames to be exported must be visible.");
+      tmp = Fcons (frame, tmp);
+    }
+  frames = Fnreverse (tmp);
+
+#ifdef CAIRO_HAS_PDF_SURFACE
+  if (NILP (type) || EQ (type, Qpdf))
+    surface_type = CAIRO_SURFACE_TYPE_PDF;
+  else
+#endif
+#ifdef CAIRO_HAS_PNG_FUNCTIONS
+  if (EQ (type, Qpng))
+    {
+      if (!NILP (XCDR (frames)))
+       error ("PNG export cannot handle multiple frames.");
+      surface_type = CAIRO_SURFACE_TYPE_IMAGE;
+    }
+  else
+#endif
+#ifdef CAIRO_HAS_PS_SURFACE
+  if (EQ (type, Qpostscript))
+    surface_type = CAIRO_SURFACE_TYPE_PS;
+  else
+#endif
+#ifdef CAIRO_HAS_SVG_SURFACE
+  if (EQ (type, Qsvg))
+    {
+      /* For now, we stick to SVG 1.1.  */
+      if (!NILP (XCDR (frames)))
+       error ("SVG export cannot handle multiple frames.");
+      surface_type = CAIRO_SURFACE_TYPE_SVG;
+    }
+  else
+#endif
+    error ("Unsupported export type");
+
+  return pgtk_cr_export_frames (frames, surface_type);
+}
+
+
+/* Note: see frame.c for template, also where generic functions are impl */
+frame_parm_handler pgtk_frame_parm_handlers[] = {
+  gui_set_autoraise,           /* generic OK */
+  gui_set_autolower,           /* generic OK */
+  x_set_background_color,
+  x_set_border_color,
+  gui_set_border_width,
+  x_set_cursor_color,
+  x_set_cursor_type,
+  gui_set_font,                        /* generic OK */
+  x_set_foreground_color,
+  x_set_icon_name,
+  x_set_icon_type,
+  x_set_child_frame_border_width,
+  x_set_internal_border_width, /* generic OK */
+  gui_set_right_divider_width,
+  gui_set_bottom_divider_width,
+  x_set_menu_bar_lines,
+  x_set_mouse_color,
+  x_explicitly_set_name,
+  gui_set_scroll_bar_width,    /* generic OK */
+  gui_set_scroll_bar_height,   /* generic OK */
+  x_set_title,
+  gui_set_unsplittable,                /* generic OK */
+  gui_set_vertical_scroll_bars,        /* generic OK */
+  gui_set_horizontal_scroll_bars,      /* generic OK */
+  gui_set_visibility,          /* generic OK */
+  x_set_tab_bar_lines,
+  x_set_tool_bar_lines,
+  pgtk_set_scroll_bar_foreground,
+  pgtk_set_scroll_bar_background,
+  gui_set_screen_gamma,                /* generic OK */
+  gui_set_line_spacing,                /* generic OK, sets 
f->extra_line_spacing to int */
+  gui_set_left_fringe,         /* generic OK */
+  gui_set_right_fringe,                /* generic OK */
+  0,                           /* x_set_wait_for_wm */
+  gui_set_fullscreen,          /* generic OK */
+  gui_set_font_backend,                /* generic OK */
+  gui_set_alpha,
+  pgtk_set_sticky,
+  pgtk_set_tool_bar_position,
+  0,                           /* x_set_inhibit_double_buffering */
+  x_set_undecorated,
+  x_set_parent_frame,
+  x_set_skip_taskbar,
+  x_set_no_focus_on_map,
+  x_set_no_accept_focus,
+  x_set_z_group,
+  x_set_override_redirect,
+  gui_set_no_special_glyphs,
+};
+
+
+/* Handler for signals raised during x_create_frame and
+   x_create_tip_frame.  FRAME is the frame which is partially
+   constructed.  */
+
+static Lisp_Object
+unwind_create_frame (Lisp_Object frame)
+{
+  struct frame *f = XFRAME (frame);
+
+  /* If frame is already dead, nothing to do.  This can happen if the
+     display is disconnected after the frame has become official, but
+     before x_create_frame removes the unwind protect.  */
+  if (!FRAME_LIVE_P (f))
+    return Qnil;
+
+  /* If frame is ``official'', nothing to do.  */
+  if (NILP (Fmemq (frame, Vframe_list)))
+    {
+      /* If the frame's image cache refcount is still the same as our
+         private shadow variable, it means we are unwinding a frame
+         for which we didn't yet call init_frame_faces, where the
+         refcount is incremented.  Therefore, we increment it here, so
+         that free_frame_faces, called in x_free_frame_resources
+         below, will not mistakenly decrement the counter that was not
+         incremented yet to account for this new frame.  */
+      if (FRAME_IMAGE_CACHE (f) != NULL
+         && FRAME_IMAGE_CACHE (f)->refcount == image_cache_refcount)
+       FRAME_IMAGE_CACHE (f)->refcount++;
+
+      x_free_frame_resources (f);
+      free_glyphs (f);
+      return Qt;
+    }
+
+  return Qnil;
+}
+
+static void
+do_unwind_create_frame (Lisp_Object frame)
+{
+  unwind_create_frame (frame);
+}
+
+/* Return the pixel color value for color COLOR_NAME on frame F.  If F
+   is a monochrome frame, return MONO_COLOR regardless of what ARG says.
+   Signal an error if color can't be allocated.  */
+
+static int
+x_decode_color (struct frame *f, Lisp_Object color_name, int mono_color)
+{
+  Emacs_Color cdef;
+
+  CHECK_STRING (color_name);
+
+  /* Return MONO_COLOR for monochrome frames.  */
+  if (FRAME_DISPLAY_INFO (f)->n_planes == 1)
+    return mono_color;
+
+  /* x_defined_color is responsible for coping with failures
+     by looking for a near-miss.  */
+  if (pgtk_defined_color (f, SSDATA (color_name), &cdef, true, 0))
+    return cdef.pixel;
+
+  signal_error ("Undefined color", color_name);
+}
+
+void
+pgtk_default_font_parameter (struct frame *f, Lisp_Object parms)
+{
+  struct pgtk_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
+  Lisp_Object font_param =
+    gui_display_get_arg (dpyinfo, parms, Qfont, NULL, NULL,
+                        RES_TYPE_STRING);
+  Lisp_Object font = Qnil;
+  if (EQ (font_param, Qunbound))
+    font_param = Qnil;
+
+  if (NILP (font_param))
+    {
+      /* System font should take precedence over X resources.  We suggest this
+         regardless of font-use-system-font because .emacs may not have been
+         read yet.  */
+      const char *system_font = xsettings_get_system_font ();
+      if (system_font)
+       font = font_open_by_name (f, build_unibyte_string (system_font));
+    }
+
+  if (NILP (font))
+    font = !NILP (font_param) ? font_param
+      : gui_display_get_arg (dpyinfo, parms, Qfont, "font", "Font",
+                            RES_TYPE_STRING);
+
+  if (!FONTP (font) && !STRINGP (font))
+    {
+      const char *names[] = {
+       "monospace-10",
+       "-adobe-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-1",
+       "-misc-fixed-medium-r-normal-*-*-140-*-*-c-*-iso8859-1",
+       "-*-*-medium-r-normal-*-*-140-*-*-c-*-iso8859-1",
+       /* This was formerly the first thing tried, but it finds
+          too many fonts and takes too long.  */
+       "-*-*-medium-r-*-*-*-*-*-*-c-*-iso8859-1",
+       /* If those didn't work, look for something which will
+          at least work.  */
+       "-*-fixed-*-*-*-*-*-140-*-*-c-*-iso8859-1",
+       "fixed",
+       NULL
+      };
+      int i;
+
+      for (i = 0; names[i]; i++)
+       {
+         font = font_open_by_name (f, build_unibyte_string (names[i]));
+         if (!NILP (font))
+           break;
+       }
+      if (NILP (font))
+       error ("No suitable font was found");
+    }
+  else if (!NILP (font_param))
+    {
+      /* Remember the explicit font parameter, so we can re-apply it after
+         we've applied the `default' face settings.  */
+      AUTO_FRAME_ARG (arg, Qfont_parameter, font_param);
+      gui_set_frame_parameters (f, arg);
+    }
+
+  /* This call will make X resources override any system font setting.  */
+  gui_default_parameter (f, parms, Qfont, font, "font", "Font",
+                        RES_TYPE_STRING);
+}
+
+static void
+update_watched_scale_factor (struct atimer *timer)
+{
+  struct frame *f = timer->client_data;
+  double scale_factor = FRAME_SCALE_FACTOR (f);
+
+  if (scale_factor != FRAME_X_OUTPUT (f)->watched_scale_factor)
+    {
+      FRAME_X_OUTPUT (f)->watched_scale_factor = scale_factor;
+      pgtk_cr_update_surface_desired_size (f,
+                                          FRAME_CR_SURFACE_DESIRED_WIDTH (f),
+                                          FRAME_CR_SURFACE_DESIRED_HEIGHT (f),
+                                          true);
+    }
+}
+
+/* ==========================================================================
+
+    Lisp definitions
+
+   ========================================================================== 
*/
+
+DEFUN ("pgtk-set-monitor-scale-factor", Fpgtk_set_monitor_scale_factor,
+       Spgtk_set_monitor_scale_factor, 2, 2, 0,
+       doc: /* Set monitor MONITOR-MODEL's scale factor to SCALE-FACTOR.
+Since Gdk's scale factor is integer, physical pixel width/height is
+incorrect when you specify fractional scale factor in compositor.
+If you set scale factor by this function, it is used instead of Gdk's one.
+
+Pass nil as SCALE-FACTOR if you want to reset the specified monitor's
+scale factor. */ )
+  (Lisp_Object monitor_model, Lisp_Object scale_factor)
+{
+  CHECK_STRING (monitor_model);
+  if (!NILP (scale_factor))
+    {
+      CHECK_NUMBER (scale_factor);
+      if (FIXNUMP (scale_factor))
+       {
+         if (XFIXNUM (scale_factor) <= 0)
+           error ("scale factor must be > 0.");
+       }
+      else if (FLOATP (scale_factor))
+       {
+         if (XFLOAT_DATA (scale_factor) <= 0.0)
+           error ("scale factor must be > 0.");
+       }
+      else
+       error ("unknown type of scale-factor");
+    }
+
+  Lisp_Object tem = Fassoc (monitor_model, monitor_scale_factor_alist, Qnil);
+  if (NILP (tem))
+    {
+      if (!NILP (scale_factor))
+       monitor_scale_factor_alist = Fcons (Fcons (monitor_model, scale_factor),
+                                           monitor_scale_factor_alist);
+    }
+  else
+    Fsetcdr (tem, scale_factor);
+
+  return scale_factor;
+}
+
+DEFUN ("x-create-frame", Fx_create_frame, Sx_create_frame, 1, 1, 0,
+       doc: /* Make a new X window, which is called a "frame" in Emacs terms.
+Return an Emacs frame object.  PARMS is an alist of frame parameters.
+If the parameters specify that the frame should not have a minibuffer,
+and do not specify a specific minibuffer window to use, then
+`default-minibuffer-frame' must be a frame whose minibuffer can be
+shared by the new frame.
+
+This function is an internal primitive--use `make-frame' instead.  */ )
+  (Lisp_Object parms)
+{
+  struct frame *f;
+  Lisp_Object frame, tem;
+  Lisp_Object name;
+  bool minibuffer_only = false;
+  bool undecorated = false, override_redirect = false;
+  long window_prompting = 0;
+  ptrdiff_t count = SPECPDL_INDEX ();
+  Lisp_Object display;
+  struct pgtk_display_info *dpyinfo = NULL;
+  Lisp_Object parent, parent_frame;
+  struct kboard *kb;
+
+  parms = Fcopy_alist (parms);
+
+  /* Use this general default value to start with
+     until we know if this frame has a specified name.  */
+  Vx_resource_name = Vinvocation_name;
+
+  display =
+    gui_display_get_arg (dpyinfo, parms, Qterminal, 0, 0, RES_TYPE_NUMBER);
+  if (EQ (display, Qunbound))
+    display =
+      gui_display_get_arg (dpyinfo, parms, Qdisplay, 0, 0, RES_TYPE_STRING);
+  if (EQ (display, Qunbound))
+    display = Qnil;
+  dpyinfo = check_pgtk_display_info (display);
+  kb = dpyinfo->terminal->kboard;
+
+  if (!dpyinfo->terminal->name)
+    error ("Terminal is not live, can't create new frames on it");
+
+  name =
+    gui_display_get_arg (dpyinfo, parms, Qname, "name", "Name",
+                        RES_TYPE_STRING);
+  if (!STRINGP (name) && !EQ (name, Qunbound) && !NILP (name))
+    error ("Invalid frame name--not a string or nil");
+
+  if (STRINGP (name))
+    Vx_resource_name = name;
+
+  /* See if parent window is specified.  */
+  parent =
+    gui_display_get_arg (dpyinfo, parms, Qparent_id, NULL, NULL,
+                        RES_TYPE_NUMBER);
+  if (EQ (parent, Qunbound))
+    parent = Qnil;
+  if (!NILP (parent))
+    CHECK_NUMBER (parent);
+
+  frame = Qnil;
+  tem =
+    gui_display_get_arg (dpyinfo, parms, Qminibuffer, "minibuffer",
+                        "Minibuffer", RES_TYPE_SYMBOL);
+  if (EQ (tem, Qnone) || NILP (tem))
+    f = make_frame_without_minibuffer (Qnil, kb, display);
+  else if (EQ (tem, Qonly))
+    {
+      f = make_minibuffer_frame ();
+      minibuffer_only = true;
+    }
+  else if (WINDOWP (tem))
+    f = make_frame_without_minibuffer (tem, kb, display);
+  else
+    f = make_frame (true);
+
+  parent_frame =
+    gui_display_get_arg (dpyinfo, parms, Qparent_frame, NULL, NULL,
+                        RES_TYPE_SYMBOL);
+  /* Accept parent-frame iff parent-id was not specified.  */
+  if (!NILP (parent)
+      || EQ (parent_frame, Qunbound)
+      || NILP (parent_frame)
+      || !FRAMEP (parent_frame)
+      || !FRAME_LIVE_P (XFRAME (parent_frame))
+      || !FRAME_PGTK_P (XFRAME (parent_frame)))
+    parent_frame = Qnil;
+
+  fset_parent_frame (f, parent_frame);
+  store_frame_param (f, Qparent_frame, parent_frame);
+
+  if (!NILP
+      (tem =
+       (gui_display_get_arg
+       (dpyinfo, parms, Qundecorated, NULL, NULL, RES_TYPE_BOOLEAN)))
+      && !(EQ (tem, Qunbound)))
+    undecorated = true;
+
+  FRAME_UNDECORATED (f) = undecorated;
+  store_frame_param (f, Qundecorated, undecorated ? Qt : Qnil);
+
+  if (!NILP
+      (tem =
+       (gui_display_get_arg
+       (dpyinfo, parms, Qoverride_redirect, NULL, NULL, RES_TYPE_BOOLEAN)))
+      && !(EQ (tem, Qunbound)))
+    override_redirect = true;
+
+  FRAME_OVERRIDE_REDIRECT (f) = override_redirect;
+  store_frame_param (f, Qoverride_redirect, override_redirect ? Qt : Qnil);
+
+  XSETFRAME (frame, f);
+
+  f->terminal = dpyinfo->terminal;
+
+  f->output_method = output_pgtk;
+  FRAME_X_OUTPUT (f) = xzalloc (sizeof *FRAME_X_OUTPUT (f));
+#if 0
+  FRAME_X_OUTPUT (f)->icon_bitmap = -1;
+#endif
+  FRAME_FONTSET (f) = -1;
+  FRAME_X_OUTPUT (f)->white_relief.pixel = -1;
+  FRAME_X_OUTPUT (f)->black_relief.pixel = -1;
+
+  FRAME_X_OUTPUT (f)->scrollbar_foreground_css_provider =
+    gtk_css_provider_new ();
+  FRAME_X_OUTPUT (f)->scrollbar_background_css_provider =
+    gtk_css_provider_new ();
+
+  fset_icon_name (f,
+                 gui_display_get_arg (dpyinfo, parms, Qicon_name, "iconName",
+                                      "Title", RES_TYPE_STRING));
+  if (!STRINGP (f->icon_name))
+    fset_icon_name (f, Qnil);
+
+  FRAME_DISPLAY_INFO (f) = dpyinfo;
+
+  /* With FRAME_DISPLAY_INFO set up, this unwind-protect is safe.  */
+  record_unwind_protect (do_unwind_create_frame, frame);
+
+  /* These colors will be set anyway later, but it's important
+     to get the color reference counts right, so initialize them!  */
+  {
+    Lisp_Object black;
+
+    /* Function x_decode_color can signal an error.  Make
+       sure to initialize color slots so that we won't try
+       to free colors we haven't allocated.  */
+    FRAME_FOREGROUND_PIXEL (f) = -1;
+    FRAME_BACKGROUND_PIXEL (f) = -1;
+    FRAME_X_OUTPUT (f)->cursor_color = -1;
+    FRAME_X_OUTPUT (f)->cursor_foreground_color = -1;
+    FRAME_X_OUTPUT (f)->border_pixel = -1;
+    FRAME_X_OUTPUT (f)->mouse_color = -1;
+
+    black = build_string ("black");
+    FRAME_FOREGROUND_PIXEL (f)
+      = x_decode_color (f, black, BLACK_PIX_DEFAULT (f));
+    FRAME_BACKGROUND_PIXEL (f)
+      = x_decode_color (f, black, BLACK_PIX_DEFAULT (f));
+    FRAME_X_OUTPUT (f)->cursor_color
+      = x_decode_color (f, black, BLACK_PIX_DEFAULT (f));
+    FRAME_X_OUTPUT (f)->cursor_foreground_color
+      = x_decode_color (f, black, BLACK_PIX_DEFAULT (f));
+    FRAME_X_OUTPUT (f)->border_pixel
+      = x_decode_color (f, black, BLACK_PIX_DEFAULT (f));
+    FRAME_X_OUTPUT (f)->mouse_color
+      = x_decode_color (f, black, BLACK_PIX_DEFAULT (f));
+  }
+
+  /* Specify the parent under which to make this X window.  */
+  if (!NILP (parent))
+    {
+      FRAME_X_OUTPUT (f)->parent_desc = (Window) XFIXNAT (parent);
+      FRAME_X_OUTPUT (f)->explicit_parent = true;
+    }
+  else
+    {
+      FRAME_X_OUTPUT (f)->parent_desc = FRAME_DISPLAY_INFO (f)->root_window;
+      FRAME_X_OUTPUT (f)->explicit_parent = false;
+    }
+
+  /* Set the name; the functions to which we pass f expect the name to
+     be set.  */
+  if (EQ (name, Qunbound) || NILP (name))
+    {
+      fset_name (f, build_string (dpyinfo->x_id_name));
+      f->explicit_name = false;
+    }
+  else
+    {
+      fset_name (f, name);
+      f->explicit_name = true;
+      /* Use the frame's title when getting resources for this frame.  */
+      specbind (Qx_resource_name, name);
+    }
+
+  register_font_driver (&ftcrfont_driver, f);
+#ifdef HAVE_HARFBUZZ
+  register_font_driver (&ftcrhbfont_driver, f);
+#endif /* HAVE_HARFBUZZ */
+
+  image_cache_refcount =
+    FRAME_IMAGE_CACHE (f) ? FRAME_IMAGE_CACHE (f)->refcount : 0;
+
+  gui_default_parameter (f, parms, Qfont_backend, Qnil,
+                        "fontBackend", "FontBackend", RES_TYPE_STRING);
+
+  /* Extract the window parameters from the supplied values
+     that are needed to determine window geometry.  */
+  pgtk_default_font_parameter (f, parms);
+  if (!FRAME_FONT (f))
+    {
+      delete_frame (frame, Qnoelisp);
+      error ("Invalid frame font");
+    }
+
+  /* Frame contents get displaced if an embedded X window has a border.  */
+#if 0
+  if (!FRAME_X_EMBEDDED_P (f))
+#endif
+    gui_default_parameter (f, parms, Qborder_width, make_fixnum (0),
+                          "borderWidth", "BorderWidth", RES_TYPE_NUMBER);
+
+  if (NILP (Fassq (Qinternal_border_width, parms)))
+    {
+      Lisp_Object value;
+
+      value = gui_display_get_arg (dpyinfo, parms, Qinternal_border_width,
+                                  "internalBorder", "internalBorder",
+                                  RES_TYPE_NUMBER);
+      if (!EQ (value, Qunbound))
+       parms = Fcons (Fcons (Qinternal_border_width, value), parms);
+    }
+
+  gui_default_parameter (f, parms, Qinternal_border_width,
+                        make_fixnum (0),
+                        "internalBorderWidth", "internalBorderWidth",
+                        RES_TYPE_NUMBER);
+
+  /* Same for child frames.  */
+  if (NILP (Fassq (Qchild_frame_border_width, parms)))
+    {
+      Lisp_Object value;
+
+      value = gui_display_get_arg (dpyinfo, parms, Qchild_frame_border_width,
+                                   "childFrameBorder", "childFrameBorder",
+                                   RES_TYPE_NUMBER);
+      if (! EQ (value, Qunbound))
+       parms = Fcons (Fcons (Qchild_frame_border_width, value),
+                      parms);
+
+    }
+
+  gui_default_parameter (f, parms, Qchild_frame_border_width,
+                        make_fixnum (0),
+                        "childFrameBorderWidth", "childFrameBorderWidth",
+                        RES_TYPE_NUMBER);
+  gui_default_parameter (f, parms, Qright_divider_width, make_fixnum (0),
+                        NULL, NULL, RES_TYPE_NUMBER);
+  gui_default_parameter (f, parms, Qbottom_divider_width, make_fixnum (0),
+                        NULL, NULL, RES_TYPE_NUMBER);
+  gui_default_parameter (f, parms, Qvertical_scroll_bars,
+                        Qright,
+                        "verticalScrollBars", "ScrollBars", RES_TYPE_SYMBOL);
+  gui_default_parameter (f, parms, Qhorizontal_scroll_bars, Qnil,
+                        "horizontalScrollBars", "ScrollBars",
+                        RES_TYPE_SYMBOL);
+  /* Also do the stuff which must be set before the window exists.  */
+  gui_default_parameter (f, parms, Qforeground_color, build_string ("black"),
+                        "foreground", "Foreground", RES_TYPE_STRING);
+  gui_default_parameter (f, parms, Qbackground_color, build_string ("white"),
+                        "background", "Background", RES_TYPE_STRING);
+  gui_default_parameter (f, parms, Qmouse_color, build_string ("black"),
+                        "pointerColor", "Foreground", RES_TYPE_STRING);
+  gui_default_parameter (f, parms, Qborder_color, build_string ("black"),
+                        "borderColor", "BorderColor", RES_TYPE_STRING);
+  gui_default_parameter (f, parms, Qscreen_gamma, Qnil,
+                        "screenGamma", "ScreenGamma", RES_TYPE_FLOAT);
+  gui_default_parameter (f, parms, Qline_spacing, Qnil,
+                        "lineSpacing", "LineSpacing", RES_TYPE_NUMBER);
+  gui_default_parameter (f, parms, Qleft_fringe, Qnil,
+                        "leftFringe", "LeftFringe", RES_TYPE_NUMBER);
+  gui_default_parameter (f, parms, Qright_fringe, Qnil,
+                        "rightFringe", "RightFringe", RES_TYPE_NUMBER);
+  gui_default_parameter (f, parms, Qno_special_glyphs, Qnil,
+                        NULL, NULL, RES_TYPE_BOOLEAN);
+
+  gui_default_parameter (f, parms, Qscroll_bar_foreground, Qnil,
+                        "scrollBarForeground", "ScrollBarForeground",
+                        RES_TYPE_STRING);
+  gui_default_parameter (f, parms, Qscroll_bar_background, Qnil,
+                        "scrollBarBackground", "ScrollBarBackground",
+                        RES_TYPE_STRING);
+
+  /* Init faces before gui_default_parameter is called for the
+     scroll-bar-width parameter because otherwise we end up in
+     init_iterator with a null face cache, which should not happen.  */
+  init_frame_faces (f);
+
+  /* We have to call adjust_frame_size here since otherwise
+     x_set_tool_bar_lines will already work with the character sizes
+     installed by init_frame_faces while the frame's pixel size is still
+     calculated from a character size of 1 and we subsequently hit the
+     (height >= 0) assertion in window_box_height.
+
+     The non-pixelwise code apparently worked around this because it
+     had one frame line vs one toolbar line which left us with a zero
+     root window height which was obviously wrong as well ...
+
+     Also process `min-width' and `min-height' parameters right here
+     because `frame-windows-min-size' needs them.  */
+  tem =
+    gui_display_get_arg (dpyinfo, parms, Qmin_width, NULL, NULL,
+                        RES_TYPE_NUMBER);
+  if (NUMBERP (tem))
+    store_frame_param (f, Qmin_width, tem);
+  tem =
+    gui_display_get_arg (dpyinfo, parms, Qmin_height, NULL, NULL,
+                        RES_TYPE_NUMBER);
+  if (NUMBERP (tem))
+    store_frame_param (f, Qmin_height, tem);
+  adjust_frame_size (f, FRAME_COLS (f) * FRAME_COLUMN_WIDTH (f),
+                    FRAME_LINES (f) * FRAME_LINE_HEIGHT (f), 5, true,
+                    Qx_create_frame_1);
+
+  /* Set the menu-bar-lines and tool-bar-lines parameters.  We don't
+     look up the X resources controlling the menu-bar and tool-bar
+     here; they are processed specially at startup, and reflected in
+     the values of the mode variables.  */
+
+  gui_default_parameter (f, parms, Qmenu_bar_lines,
+                        NILP (Vmenu_bar_mode)
+                        ? make_fixnum (0) : make_fixnum (1),
+                        NULL, NULL, RES_TYPE_NUMBER);
+  gui_default_parameter (f, parms, Qtab_bar_lines,
+                        NILP (Vtab_bar_mode)
+                        ? make_fixnum (0) : make_fixnum (1),
+                        NULL, NULL, RES_TYPE_NUMBER);
+  gui_default_parameter (f, parms, Qtool_bar_lines,
+                        NILP (Vtool_bar_mode)
+                        ? make_fixnum (0) : make_fixnum (1),
+                        NULL, NULL, RES_TYPE_NUMBER);
+
+  gui_default_parameter (f, parms, Qbuffer_predicate, Qnil,
+                        "bufferPredicate", "BufferPredicate",
+                        RES_TYPE_SYMBOL);
+  gui_default_parameter (f, parms, Qtitle, Qnil,
+                        "title", "Title", RES_TYPE_STRING);
+  gui_default_parameter (f, parms, Qwait_for_wm, Qt,
+                        "waitForWM", "WaitForWM", RES_TYPE_BOOLEAN);
+  gui_default_parameter (f, parms, Qtool_bar_position,
+                        FRAME_TOOL_BAR_POSITION (f), 0, 0, RES_TYPE_SYMBOL);
+  gui_default_parameter (f, parms, Qinhibit_double_buffering, Qnil,
+                        "inhibitDoubleBuffering", "InhibitDoubleBuffering",
+                        RES_TYPE_BOOLEAN);
+
+  /* Compute the size of the X window.  */
+  window_prompting =
+    gui_figure_window_size (f, parms, true, true);
+
+  tem =
+    gui_display_get_arg (dpyinfo, parms, Qunsplittable, 0, 0,
+                        RES_TYPE_BOOLEAN);
+  f->no_split = minibuffer_only || EQ (tem, Qt);
+
+#if 0
+  x_icon_verify (f, parms);
+#endif
+
+  /* Create the X widget or window.  */
+  /* x_window (f); */
+  xg_create_frame_widgets (f);
+  pgtk_set_event_handler (f);
+
+
+#define INSTALL_CURSOR(FIELD, NAME) \
+  FRAME_X_OUTPUT (f)->FIELD = gdk_cursor_new_for_display (FRAME_X_DISPLAY (f), 
GDK_ ## NAME)
+
+  INSTALL_CURSOR (text_cursor, XTERM);
+  INSTALL_CURSOR (nontext_cursor, LEFT_PTR);
+  INSTALL_CURSOR (modeline_cursor, XTERM);
+  INSTALL_CURSOR (hand_cursor, HAND2);
+  INSTALL_CURSOR (hourglass_cursor, WATCH);
+  INSTALL_CURSOR (horizontal_drag_cursor, SB_H_DOUBLE_ARROW);
+  INSTALL_CURSOR (vertical_drag_cursor, SB_V_DOUBLE_ARROW);
+  INSTALL_CURSOR (left_edge_cursor, LEFT_SIDE);
+  INSTALL_CURSOR (right_edge_cursor, RIGHT_SIDE);
+  INSTALL_CURSOR (top_edge_cursor, TOP_SIDE);
+  INSTALL_CURSOR (bottom_edge_cursor, BOTTOM_SIDE);
+  INSTALL_CURSOR (top_left_corner_cursor, TOP_LEFT_CORNER);
+  INSTALL_CURSOR (top_right_corner_cursor, TOP_RIGHT_CORNER);
+  INSTALL_CURSOR (bottom_right_corner_cursor, BOTTOM_RIGHT_CORNER);
+  INSTALL_CURSOR (bottom_left_corner_cursor, BOTTOM_LEFT_CORNER);
+
+#undef INSTALL_CURSOR
+
+  x_icon (f, parms);
+#if 0
+  x_make_gc (f);
+#endif
+
+  /* Now consider the frame official.  */
+  f->terminal->reference_count++;
+  FRAME_DISPLAY_INFO (f)->reference_count++;
+  Vframe_list = Fcons (frame, Vframe_list);
+
+  /* We need to do this after creating the X window, so that the
+     icon-creation functions can say whose icon they're describing.  */
+  gui_default_parameter (f, parms, Qicon_type, Qt,
+                        "bitmapIcon", "BitmapIcon", RES_TYPE_BOOLEAN);
+
+  gui_default_parameter (f, parms, Qauto_raise, Qnil,
+                        "autoRaise", "AutoRaiseLower", RES_TYPE_BOOLEAN);
+  gui_default_parameter (f, parms, Qauto_lower, Qnil,
+                        "autoLower", "AutoRaiseLower", RES_TYPE_BOOLEAN);
+  gui_default_parameter (f, parms, Qcursor_type, Qbox,
+                        "cursorType", "CursorType", RES_TYPE_SYMBOL);
+  gui_default_parameter (f, parms, Qscroll_bar_width, Qnil,
+                        "scrollBarWidth", "ScrollBarWidth", RES_TYPE_NUMBER);
+  gui_default_parameter (f, parms, Qscroll_bar_height, Qnil,
+                        "scrollBarHeight", "ScrollBarHeight",
+                        RES_TYPE_NUMBER);
+  gui_default_parameter (f, parms, Qalpha, Qnil,
+                        "alpha", "Alpha", RES_TYPE_NUMBER);
+
+  if (!NILP (parent_frame))
+    {
+      struct frame *p = XFRAME (parent_frame);
+
+      block_input ();
+
+      GtkWidget *fixed = FRAME_GTK_WIDGET (f);
+      GtkWidget *fixed_of_p = FRAME_GTK_WIDGET (p);
+      GtkWidget *whbox_of_f = gtk_widget_get_parent (fixed);
+      g_object_ref (fixed);
+      gtk_container_remove (GTK_CONTAINER (whbox_of_f), fixed);
+      gtk_fixed_put (GTK_FIXED (fixed_of_p), fixed, f->left_pos, f->top_pos);
+      gtk_widget_show_all (fixed);
+      g_object_unref (fixed);
+
+      gtk_widget_destroy (FRAME_GTK_OUTER_WIDGET (f));
+      FRAME_GTK_OUTER_WIDGET (f) = NULL;
+      FRAME_OUTPUT_DATA (f)->vbox_widget = NULL;
+      FRAME_OUTPUT_DATA (f)->hbox_widget = NULL;
+      FRAME_OUTPUT_DATA (f)->menubar_widget = NULL;
+      FRAME_OUTPUT_DATA (f)->toolbar_widget = NULL;
+      FRAME_OUTPUT_DATA (f)->ttip_widget = NULL;
+      FRAME_OUTPUT_DATA (f)->ttip_lbl = NULL;
+      FRAME_OUTPUT_DATA (f)->ttip_window = NULL;
+
+      unblock_input ();
+    }
+
+  if (FRAME_GTK_OUTER_WIDGET (f))
+    {
+      GList *w = gtk_container_get_children (GTK_CONTAINER 
(FRAME_GTK_OUTER_WIDGET (f)));
+      for (; w != NULL; w = w->next)
+       gtk_widget_show_all (GTK_WIDGET (w->data));
+    }
+
+  gui_default_parameter (f, parms, Qno_focus_on_map, Qnil,
+                        NULL, NULL, RES_TYPE_BOOLEAN);
+  gui_default_parameter (f, parms, Qno_accept_focus, Qnil,
+                        NULL, NULL, RES_TYPE_BOOLEAN);
+
+  /* Create the menu bar.  */
+  if (!minibuffer_only && FRAME_EXTERNAL_MENU_BAR (f))
+    {
+      /* If this signals an error, we haven't set size hints for the
+         frame and we didn't make it visible.  */
+      initialize_frame_menubar (f);
+
+    }
+
+  /* Consider frame official, now.  */
+  f->can_set_window_size = true;
+
+  /* Tell the server what size and position, etc, we want, and how
+     badly we want them.  This should be done after we have the menu
+     bar so that its size can be taken into account.  */
+  block_input ();
+  x_wm_set_size_hint (f, window_prompting, false);
+  unblock_input ();
+
+  adjust_frame_size (f, FRAME_TEXT_WIDTH (f), FRAME_TEXT_HEIGHT (f),
+                    0, true, Qx_create_frame_2);
+
+  /* Process fullscreen parameter here in the hope that normalizing a
+     fullheight/fullwidth frame will produce the size set by the last
+     adjust_frame_size call.  */
+  gui_default_parameter (f, parms, Qfullscreen, Qnil,
+                        "fullscreen", "Fullscreen", RES_TYPE_SYMBOL);
+
+  /* Make the window appear on the frame and enable display, unless
+     the caller says not to.  However, with explicit parent, Emacs
+     cannot control visibility, so don't try.  */
+  if (!FRAME_X_OUTPUT (f)->explicit_parent)
+    {
+      Lisp_Object visibility
+       =
+       gui_display_get_arg (dpyinfo, parms, Qvisibility, 0, 0,
+                            RES_TYPE_SYMBOL);
+
+      if (EQ (visibility, Qicon))
+       pgtk_iconify_frame (f);
+      else
+       {
+         if (EQ (visibility, Qunbound))
+           visibility = Qt;
+
+         if (!NILP (visibility))
+           pgtk_make_frame_visible (f);
+       }
+
+      store_frame_param (f, Qvisibility, visibility);
+    }
+
+  /* Works iff frame has been already mapped.  */
+  gui_default_parameter (f, parms, Qskip_taskbar, Qnil,
+                        NULL, NULL, RES_TYPE_BOOLEAN);
+  /* The `z-group' parameter works only for visible frames.  */
+  gui_default_parameter (f, parms, Qz_group, Qnil,
+                        NULL, NULL, RES_TYPE_SYMBOL);
+
+  /* Initialize `default-minibuffer-frame' in case this is the first
+     frame on this terminal.  */
+  if (FRAME_HAS_MINIBUF_P (f)
+      && (!FRAMEP (KVAR (kb, Vdefault_minibuffer_frame))
+         || !FRAME_LIVE_P (XFRAME (KVAR (kb, Vdefault_minibuffer_frame)))))
+    kset_default_minibuffer_frame (kb, frame);
+
+  /* All remaining specified parameters, which have not been "used"
+     by gui_display_get_arg and friends, now go in the misc. alist of the 
frame.  */
+  for (tem = parms; CONSP (tem); tem = XCDR (tem))
+    if (CONSP (XCAR (tem)) && !NILP (XCAR (XCAR (tem))))
+      fset_param_alist (f, Fcons (XCAR (tem), f->param_alist));
+
+  FRAME_X_OUTPUT (f)->border_color_css_provider = NULL;
+
+  FRAME_X_OUTPUT (f)->cr_surface_visible_bell = NULL;
+  FRAME_X_OUTPUT (f)->atimer_visible_bell = NULL;
+  FRAME_X_OUTPUT (f)->watched_scale_factor = 1.0;
+  struct timespec ts = make_timespec (1, 0);
+  FRAME_X_OUTPUT (f)->scale_factor_atimer = start_atimer(ATIMER_CONTINUOUS,
+                                                        ts,
+                                                        
update_watched_scale_factor,
+                                                        f);
+
+  /* Make sure windows on this frame appear in calls to next-window
+     and similar functions.  */
+  Vwindow_list = Qnil;
+
+  return unbind_to (count, frame);
+}
+
+
+#if 0
+static int
+pgtk_window_is_ancestor (PGTKWindow * win, PGTKWindow * candidate)
+/* Test whether CANDIDATE is an ancestor window of WIN. */
+{
+  if (candidate == NULL)
+    return 0;
+  else if (win == candidate)
+    return 1;
+  else
+    return pgtk_window_is_ancestor (win,[candidate parentWindow]);
+}
+#endif
+
+/**
+ * x_frame_restack:
+ *
+ * Restack frame F1 below frame F2, above if ABOVE_FLAG is non-nil.  In
+ * practice this is a two-step action: The first step removes F1's
+ * window-system window from the display.  The second step reinserts
+ * F1's window below (above if ABOVE_FLAG is true) that of F2.
+ */
+static void
+pgtk_frame_restack (struct frame *f1, struct frame *f2, bool above_flag)
+{
+  block_input ();
+  xg_frame_restack (f1, f2, above_flag);
+  unblock_input ();
+}
+
+
+DEFUN ("pgtk-frame-restack", Fpgtk_frame_restack, Spgtk_frame_restack, 2, 3, 0,
+       doc: /* Restack FRAME1 below FRAME2.
+This means that if both frames are visible and the display areas of
+these frames overlap, FRAME2 (partially) obscures FRAME1.  If optional
+third argument ABOVE is non-nil, restack FRAME1 above FRAME2.  This
+means that if both frames are visible and the display areas of these
+frames overlap, FRAME1 (partially) obscures FRAME2.
+
+This may be thought of as an atomic action performed in two steps: The
+first step removes FRAME1's window-step window from the display.  The
+second step reinserts FRAME1's window below (above if ABOVE is true)
+that of FRAME2.  Hence the position of FRAME2 in its display's Z
+\(stacking) order relative to all other frames excluding FRAME1 remains
+unaltered.
+
+Some window managers may refuse to restack windows.  */)
+  (Lisp_Object frame1, Lisp_Object frame2, Lisp_Object above)
+{
+  struct frame *f1 = decode_live_frame (frame1);
+  struct frame *f2 = decode_live_frame (frame2);
+
+  if (!(FRAME_GTK_OUTER_WIDGET (f1) && FRAME_GTK_OUTER_WIDGET (f2)))
+    error ("Cannot restack frames");
+  pgtk_frame_restack (f1, f2, !NILP (above));
+  return Qt;
+}
+
+#ifdef HAVE_GSETTINGS
+
+#define RESOURCE_KEY_MAX_LEN 128
+#define SCHEMA_ID "org.gnu.emacs.defaults"
+#define PATH_FOR_CLASS_TYPE "/org/gnu/emacs/defaults-by-class/"
+#define PATH_PREFIX_FOR_NAME_TYPE "/org/gnu/emacs/defaults-by-name/"
+
+static inline int
+pgtk_is_lower_char (int c)
+{
+  return c >= 'a' && c <= 'z';
+}
+
+static inline int
+pgtk_is_upper_char (int c)
+{
+  return c >= 'A' && c <= 'Z';
+}
+
+static inline int
+pgtk_is_numeric_char (int c)
+{
+  return c >= '0' && c <= '9';
+}
+
+static GSettings *
+parse_resource_key (const char *res_key, char *setting_key)
+{
+  char path[32 + RESOURCE_KEY_MAX_LEN];
+  const char *sp = res_key;
+  char *dp;
+
+  /*
+   * res_key="emacs.cursorBlink"
+   *   -> path="/org/gnu/emacs/defaults-by-name/emacs/"
+   *      setting_key="cursor-blink"
+   *
+   * res_key="Emacs.CursorBlink"
+   *   -> path="/org/gnu/emacs/defaults-by-class/"
+   *      setting_key="cursor-blink"
+   *
+   * Returns GSettings* if setting_key exists in schema, otherwise NULL.
+   */
+
+  /* generate path */
+  if (pgtk_is_upper_char (*sp))
+    {
+      /* First letter is upper case. It should be "Emacs",
+       * but don't care.
+       */
+      strcpy (path, PATH_FOR_CLASS_TYPE);
+      while (*sp != '\0')
+       {
+         if (*sp == '.')
+           break;
+         sp++;
+       }
+    }
+  else
+    {
+      strcpy (path, PATH_PREFIX_FOR_NAME_TYPE);
+      dp = path + strlen (path);
+      while (*sp != '\0')
+       {
+         int c = *sp;
+         if (c == '.')
+           break;
+         if (pgtk_is_lower_char (c))
+           (void) 0;           /* lower -> NOP */
+         else if (pgtk_is_upper_char (c))
+           c = c - 'A' + 'a';  /* upper -> lower */
+         else if (pgtk_is_numeric_char (c))
+           (void) 0;           /* numeric -> NOP */
+         else
+           return NULL;        /* invalid */
+         *dp++ = c;
+         sp++;
+       }
+      *dp++ = '/';             /* must ends with '/' */
+      *dp = '\0';
+    }
+
+  if (*sp++ != '.')
+    return NULL;
+
+  /* generate setting_key */
+  dp = setting_key;
+  while (*sp != '\0')
+    {
+      int c = *sp;
+      if (pgtk_is_lower_char (c))
+       (void) 0;               /* lower -> NOP */
+      else if (pgtk_is_upper_char (c))
+       {
+         c = c - 'A' + 'a';    /* upper -> lower */
+         if (dp != setting_key)
+           *dp++ = '-';        /* store '-' unless first char */
+       }
+      else if (pgtk_is_numeric_char (c))
+       (void) 0;               /* numeric -> NOP */
+      else
+       return NULL;            /* invalid */
+
+      *dp++ = c;
+      sp++;
+    }
+  *dp = '\0';
+
+  /* check existence of setting_key */
+  GSettingsSchemaSource *ssrc = g_settings_schema_source_get_default ();
+  GSettingsSchema *scm = g_settings_schema_source_lookup (ssrc, SCHEMA_ID, 
FALSE);
+  if (!scm)
+    return NULL;       /* *.schema.xml is not installed. */
+  if (!g_settings_schema_has_key (scm, setting_key))
+    {
+      g_settings_schema_unref (scm);
+      return NULL;
+    }
+
+  /* create GSettings, and return it */
+  GSettings *gs = g_settings_new_full (scm, NULL, path);
+
+  g_settings_schema_unref (scm);
+  return gs;
+}
+
+const char *
+pgtk_get_defaults_value (const char *key)
+{
+  char skey[(RESOURCE_KEY_MAX_LEN + 1) * 2];
+
+  if (strlen (key) >= RESOURCE_KEY_MAX_LEN)
+    error ("resource key too long.");
+
+  GSettings *gs = parse_resource_key (key, skey);
+  if (gs == NULL)
+    {
+      return NULL;
+    }
+
+  gchar *str = g_settings_get_string (gs, skey);
+
+  /* There is no timing to free str.
+   * So, copy it here and free it.
+   *
+   * MEMO: Resource values for emacs shouldn't need such a long string value.
+   */
+  static char holder[128];
+  strncpy (holder, str, 128);
+  holder[127] = '\0';
+
+  g_object_unref (gs);
+  g_free (str);
+  return holder[0] != '\0' ? holder : NULL;
+}
+
+static void
+pgtk_set_defaults_value (const char *key, const char *value)
+{
+  char skey[(RESOURCE_KEY_MAX_LEN + 1) * 2];
+
+  if (strlen (key) >= RESOURCE_KEY_MAX_LEN)
+    error ("resource key too long.");
+
+  GSettings *gs = parse_resource_key (key, skey);
+  if (gs == NULL)
+    error ("unknown resource key.");
+
+  if (value != NULL)
+    {
+      g_settings_set_string (gs, skey, value);
+    }
+  else
+    {
+      g_settings_reset (gs, skey);
+    }
+
+  g_object_unref (gs);
+}
+
+#undef RESOURCE_KEY_MAX_LEN
+#undef SCHEMA_ID
+#undef PATH_FOR_CLASS_TYPE
+#undef PATH_PREFIX_FOR_NAME_TYPE
+
+#else /* not HAVE_GSETTINGS */
+
+const char *
+pgtk_get_defaults_value (const char *key)
+{
+  return NULL;
+}
+
+static void
+pgtk_set_defaults_value (const char *key, const char *value)
+{
+  error ("gsettings not supported.");
+}
+
+#endif
+
+
+DEFUN ("pgtk-set-resource", Fpgtk_set_resource, Spgtk_set_resource, 2, 2, 0,
+       doc: /* Set the value of ATTRIBUTE, of class CLASS, as VALUE, into 
defaults database. */ )
+  (Lisp_Object attribute, Lisp_Object value)
+{
+  check_window_system (NULL);
+
+  CHECK_STRING (attribute);
+  if (!NILP (value))
+    CHECK_STRING (value);
+
+  char *res = SSDATA (Vx_resource_name);
+  char *attr = SSDATA (attribute);
+  if (attr[0] >= 'A' && attr[0] <= 'Z')
+    res = SSDATA (Vx_resource_class);
+
+  char *key = g_strdup_printf ("%s.%s", res, attr);
+
+  pgtk_set_defaults_value (key, NILP (value) ? NULL : SSDATA (value));
+
+  return Qnil;
+}
+
+
+DEFUN ("x-server-max-request-size", Fx_server_max_request_size, 
Sx_server_max_request_size, 0, 1, 0,
+       doc: /* This function is a no-op.  It is only present for completeness. 
 */ )
+  (Lisp_Object terminal)
+{
+  check_pgtk_display_info (terminal);
+  /* This function has no real equivalent under PGTK.  Return nil to
+     indicate this. */
+  return Qnil;
+}
+
+
+DEFUN ("x-display-screens", Fx_display_screens, Sx_display_screens, 0, 1, 0,
+       doc: /* Return the number of screens on the display server TERMINAL.
+The optional argument TERMINAL specifies which display to ask about.
+TERMINAL should be a terminal object, a frame or a display name (a string).
+If omitted or nil, that stands for the selected frame's display.
+
+Note: "screen" here is not in X11's.  For the number of physical monitors,
+use `(length \(display-monitor-attributes-list TERMINAL))' instead.  */)
+  (Lisp_Object terminal)
+{
+  check_pgtk_display_info (terminal);
+  return make_fixnum (1);
+}
+
+
+DEFUN ("x-display-mm-height", Fx_display_mm_height, Sx_display_mm_height, 0, 
1, 0,
+       doc: /* Return the height in millimeters of the the display TERMINAL.
+The optional argument TERMINAL specifies which display to ask about.
+TERMINAL should be a terminal object, a frame or a display name (a string).
+If omitted or nil, that stands for the selected frame's display.
+
+On \"multi-monitor\" setups this refers to the height in millimeters for
+all physical monitors associated with TERMINAL.  To get information
+for each physical monitor, use `display-monitor-attributes-list'.  */)
+  (Lisp_Object terminal)
+{
+  struct pgtk_display_info *dpyinfo = check_pgtk_display_info (terminal);
+  GdkDisplay *gdpy;
+  gint n_monitors, i;
+  int height_mm_at_0 = 0, height_mm_at_other = 0;
+
+  block_input ();
+  gdpy = dpyinfo->gdpy;
+  n_monitors = gdk_display_get_n_monitors (gdpy);
+
+  for (i = 0; i < n_monitors; ++i)
+    {
+      GdkRectangle rec;
+
+      GdkMonitor *monitor = gdk_display_get_monitor (gdpy, i);
+      gdk_monitor_get_geometry (monitor, &rec);
+
+      int mm = gdk_monitor_get_height_mm (monitor);
+
+      if (rec.y == 0)
+       height_mm_at_0 = max (height_mm_at_0, mm);
+      else
+       height_mm_at_other += mm;
+    }
+
+  unblock_input ();
+
+  return make_fixnum (height_mm_at_0 + height_mm_at_other);
+}
+
+
+DEFUN ("x-display-mm-width", Fx_display_mm_width, Sx_display_mm_width, 0, 1, 0,
+       doc: /* Return the width in millimeters of the the display TERMINAL.
+The optional argument TERMINAL specifies which display to ask about.
+TERMINAL should be a terminal object, a frame or a display name (a string).
+If omitted or nil, that stands for the selected frame's display.
+
+On \"multi-monitor\" setups this refers to the width in millimeters for
+all physical monitors associated with TERMINAL.  To get information
+for each physical monitor, use `display-monitor-attributes-list'.  */)
+  (Lisp_Object terminal)
+{
+  struct pgtk_display_info *dpyinfo = check_pgtk_display_info (terminal);
+  GdkDisplay *gdpy;
+  gint n_monitors, i;
+  int width_mm_at_0 = 0, width_mm_at_other = 0;
+
+  block_input ();
+  gdpy = dpyinfo->gdpy;
+  n_monitors = gdk_display_get_n_monitors (gdpy);
+
+  for (i = 0; i < n_monitors; ++i)
+    {
+      GdkRectangle rec;
+
+      GdkMonitor *monitor = gdk_display_get_monitor (gdpy, i);
+      gdk_monitor_get_geometry (monitor, &rec);
+
+      int mm = gdk_monitor_get_width_mm (monitor);
+
+      if (rec.x == 0)
+       width_mm_at_0 = max (width_mm_at_0, mm);
+      else
+       width_mm_at_other += mm;
+    }
+
+  unblock_input ();
+
+  return make_fixnum (width_mm_at_0 + width_mm_at_other);
+}
+
+
+DEFUN ("x-display-backing-store", Fx_display_backing_store, 
Sx_display_backing_store, 0, 1, 0,
+       doc: /* Return an indication of whether the the display TERMINAL does 
backing store.
+The value may be `buffered', `retained', or `non-retained'.
+The optional argument TERMINAL specifies which display to ask about.
+TERMINAL should be a terminal object, a frame or a display name (a string).
+If omitted or nil, that stands for the selected frame's display.  */)
+  (Lisp_Object terminal)
+{
+  check_pgtk_display_info (terminal);
+  return Qnil;
+}
+
+
+DEFUN ("x-display-visual-class", Fx_display_visual_class, 
Sx_display_visual_class, 0, 1, 0,
+       doc: /* Return the visual class of the the display TERMINAL.
+The value is one of the symbols `static-gray', `gray-scale',
+`static-color', `pseudo-color', `true-color', or `direct-color'.
+
+The optional argument TERMINAL specifies which display to ask about.
+TERMINAL should a terminal object, a frame or a display name (a string).
+If omitted or nil, that stands for the selected frame's display.
+
+On PGTK, always return true-color.  */)
+  (Lisp_Object terminal)
+{
+  return intern ("true-color");
+}
+
+
+DEFUN ("x-display-save-under", Fx_display_save_under, Sx_display_save_under, 
0, 1, 0,
+       doc: /* Return t if TERMINAL supports the save-under feature.
+The optional argument TERMINAL specifies which display to ask about.
+TERMINAL should be a terminal object, a frame or a display name (a string).
+If omitted or nil, that stands for the selected frame's display.  */)
+  (Lisp_Object terminal)
+{
+  check_pgtk_display_info (terminal);
+  return Qnil;
+}
+
+
+DEFUN ("x-open-connection", Fx_open_connection, Sx_open_connection, 1, 3, 0,
+       doc: /* Open a connection to a display server.
+DISPLAY is the name of the display to connect to.
+Optional second arg XRM-STRING is a string of resources in xrdb format.
+If the optional third arg MUST-SUCCEED is non-nil,
+terminate Emacs if we can't open the connection.  */)
+  (Lisp_Object display, Lisp_Object resource_string, Lisp_Object must_succeed)
+{
+  struct pgtk_display_info *dpyinfo;
+
+  if (NILP (display))
+    display = build_string ("");
+
+  CHECK_STRING (display);
+
+  nxatoms_of_pgtkselect ();
+  dpyinfo = pgtk_term_init (display, SSDATA (Vx_resource_name));
+  if (dpyinfo == 0)
+    {
+      if (!NILP (must_succeed))
+       fatal ("Display on %s not responding.\n", SSDATA (display));
+      else
+       error ("Display on %s not responding.\n", SSDATA (display));
+    }
+
+  return Qnil;
+}
+
+
+DEFUN ("x-close-connection", Fx_close_connection, Sx_close_connection, 1, 1, 0,
+       doc: /* Close the connection to TERMINAL's display server.
+For TERMINAL, specify a terminal object, a frame or a display name (a
+string).  If TERMINAL is nil, that stands for the selected frame's
+terminal.  */)
+  (Lisp_Object terminal)
+{
+  struct pgtk_display_info *dpyinfo = check_pgtk_display_info (terminal);
+
+  if (dpyinfo->reference_count > 0)
+    error ("Display still has frames on it");
+
+  pgtk_delete_terminal (dpyinfo->terminal);
+
+  return Qnil;
+}
+
+
+DEFUN ("x-display-list", Fx_display_list, Sx_display_list, 0, 0, 0,
+       doc: /* Return the list of display names that Emacs has connections to. 
 */)
+  (void)
+{
+  Lisp_Object result = Qnil;
+  struct pgtk_display_info *ndi;
+
+  for (ndi = x_display_list; ndi; ndi = ndi->next)
+    result = Fcons (XCAR (ndi->name_list_element), result);
+
+  return result;
+}
+
+
+DEFUN ("pgtk-hide-others", Fpgtk_hide_others, Spgtk_hide_others, 0, 0, 0,
+       doc: /* Hides all applications other than Emacs.  */)
+  (void)
+{
+  check_window_system (NULL);
+  return Qnil;
+}
+
+DEFUN ("pgtk-hide-emacs", Fpgtk_hide_emacs, Spgtk_hide_emacs, 1, 1, 0,
+       doc: /* If ON is non-nil, the entire Emacs application is hidden.
+Otherwise if Emacs is hidden, it is unhidden.
+If ON is equal to `activate', Emacs is unhidden and becomes
+the active application.  */)
+  (Lisp_Object on)
+{
+  check_window_system (NULL);
+  return Qnil;
+}
+
+
+DEFUN ("pgtk-font-name", Fpgtk_font_name, Spgtk_font_name, 1, 1, 0,
+       doc: /* Determine font PostScript or family name for font NAME.
+NAME should be a string containing either the font name or an XLFD
+font descriptor.  If string contains `fontset' and not
+`fontset-startup', it is left alone. */)
+  (Lisp_Object name)
+{
+  char *nm;
+  CHECK_STRING (name);
+  nm = SSDATA (name);
+
+  if (nm[0] != '-')
+    return name;
+  if (strstr (nm, "fontset") && !strstr (nm, "fontset-startup"))
+    return name;
+
+  char *str = pgtk_xlfd_to_fontname (SSDATA (name));
+  name = build_string (str);
+  xfree (str);
+  return name;
+}
+
+/* ==========================================================================
+
+    Miscellaneous functions not called through hooks
+
+   ========================================================================== 
*/
+
+/* Called from frame.c.  */
+struct pgtk_display_info *
+check_x_display_info (Lisp_Object frame)
+{
+  return check_pgtk_display_info (frame);
+}
+
+
+void
+pgtk_set_scroll_bar_default_width (struct frame *f)
+{
+  int unit = FRAME_COLUMN_WIDTH (f);
+  int minw = xg_get_default_scrollbar_width (f);
+  /* A minimum width of 14 doesn't look good for toolkit scroll bars.  */
+  FRAME_CONFIG_SCROLL_BAR_COLS (f) = (minw + unit - 1) / unit;
+  FRAME_CONFIG_SCROLL_BAR_WIDTH (f) = minw;
+}
+
+void
+pgtk_set_scroll_bar_default_height (struct frame *f)
+{
+  int height = FRAME_LINE_HEIGHT (f);
+  int min_height = xg_get_default_scrollbar_height (f);
+  /* A minimum height of 14 doesn't look good for toolkit scroll bars.  */
+  FRAME_CONFIG_SCROLL_BAR_HEIGHT (f) = min_height;
+  FRAME_CONFIG_SCROLL_BAR_LINES (f) = (min_height + height - 1) / height;
+}
+
+/* Terminals implement this instead of x-get-resource directly.  */
+const char *
+pgtk_get_string_resource (XrmDatabase rdb, const char *name,
+                         const char *class)
+{
+  check_window_system (NULL);
+
+  if (inhibit_x_resources)
+    /* --quick was passed, so this is a no-op.  */
+    return NULL;
+
+  const char *res = pgtk_get_defaults_value (name);
+  if (res == NULL)
+    res = pgtk_get_defaults_value (class);
+
+  if (res == NULL)
+    return NULL;
+
+  if (c_strncasecmp (res, "YES", 3) == 0)
+    return "true";
+
+  if (c_strncasecmp (res, "NO", 2) == 0)
+    return "false";
+
+  return res;
+}
+
+
+Lisp_Object
+x_get_focus_frame (struct frame *frame)
+{
+  struct pgtk_display_info *dpyinfo = FRAME_DISPLAY_INFO (frame);
+  Lisp_Object focus;
+
+  if (!dpyinfo->x_focus_frame)
+    return Qnil;
+
+  XSETFRAME (focus, dpyinfo->x_focus_frame);
+  return focus;
+}
+
+/* ==========================================================================
+
+    Lisp definitions that, for whatever reason, we can't alias as 'ns-XXX'.
+
+   ========================================================================== 
*/
+
+
+DEFUN ("xw-color-defined-p", Fxw_color_defined_p, Sxw_color_defined_p, 1, 2, 0,
+       doc: /* Internal function called by `color-defined-p', which see.  */)
+  (Lisp_Object color, Lisp_Object frame)
+{
+  Emacs_Color col;
+  struct frame *f = decode_window_system_frame (frame);
+
+  CHECK_STRING (color);
+
+  if (pgtk_defined_color (f, SSDATA (color), &col, false, false))
+    return Qt;
+  else
+    return Qnil;
+}
+
+
+DEFUN ("xw-color-values", Fxw_color_values, Sxw_color_values, 1, 2, 0,
+       doc: /* Internal function called by `color-values', which see.  */)
+  (Lisp_Object color, Lisp_Object frame)
+{
+  Emacs_Color col;
+  struct frame *f = decode_window_system_frame (frame);
+
+  CHECK_STRING (color);
+
+  if (pgtk_defined_color (f, SSDATA (color), &col, false, false))
+    return list3i (col.red, col.green, col.blue);
+  else
+    return Qnil;
+}
+
+
+DEFUN ("xw-display-color-p", Fxw_display_color_p, Sxw_display_color_p, 0, 1, 0,
+       doc: /* Internal function called by `display-color-p', which see.  */)
+  (Lisp_Object terminal)
+{
+  check_pgtk_display_info (terminal);
+  return Qt;
+}
+
+
+DEFUN ("x-display-grayscale-p", Fx_display_grayscale_p, 
Sx_display_grayscale_p, 0, 1, 0,
+       doc: /* Return t if the display supports shades of gray.
+Note that color displays do support shades of gray.
+The optional argument TERMINAL specifies which display to ask about.
+TERMINAL should be a terminal object, a frame or a display name (a string).
+If omitted or nil, that stands for the selected frame's display.  */)
+  (Lisp_Object terminal)
+{
+  return Qnil;
+}
+
+
+DEFUN ("x-display-pixel-width", Fx_display_pixel_width, 
Sx_display_pixel_width, 0, 1, 0,
+       doc: /* Return the width in pixels of the display TERMINAL.
+The optional argument TERMINAL specifies which display to ask about.
+TERMINAL should be a terminal object, a frame or a display name (a string).
+If omitted or nil, that stands for the selected frame's display.
+
+On \"multi-monitor\" setups this refers to the pixel width for all
+physical monitors associated with TERMINAL.  To get information for
+each physical monitor, use `display-monitor-attributes-list'.  */)
+  (Lisp_Object terminal)
+{
+  struct pgtk_display_info *dpyinfo = check_pgtk_display_info (terminal);
+  GdkDisplay *gdpy;
+  gint n_monitors, i;
+  int width = 0;
+
+  block_input ();
+  gdpy = dpyinfo->gdpy;
+  n_monitors = gdk_display_get_n_monitors (gdpy);
+
+  for (i = 0; i < n_monitors; ++i)
+    {
+      GdkRectangle rec;
+      double scale = 1;
+
+      GdkMonitor *monitor = gdk_display_get_monitor (gdpy, i);
+      gdk_monitor_get_geometry (monitor, &rec);
+
+      /* GTK returns scaled sizes for the workareas.  */
+      scale = pgtk_get_monitor_scale_factor (gdk_monitor_get_model (monitor));
+      if (scale == 0.0)
+       scale = gdk_monitor_get_scale_factor (monitor);
+      rec.x = rec.x * scale + 0.5;
+      rec.y = rec.y * scale + 0.5;
+      rec.width = rec.width * scale + 0.5;
+      rec.height = rec.height * scale + 0.5;
+
+      width = max (width, rec.x + rec.width);
+    }
+
+  unblock_input ();
+
+  return make_fixnum (width);
+}
+
+
+DEFUN ("x-display-pixel-height", Fx_display_pixel_height, 
Sx_display_pixel_height, 0, 1, 0,
+       doc: /* Return the height in pixels of the display TERMINAL.
+The optional argument TERMINAL specifies which display to ask about.
+TERMINAL should be a terminal object, a frame or a display name (a string).
+If omitted or nil, that stands for the selected frame's display.
+
+On \"multi-monitor\" setups this refers to the pixel height for all
+physical monitors associated with TERMINAL.  To get information for
+each physical monitor, use `display-monitor-attributes-list'.  */)
+  (Lisp_Object terminal)
+{
+  struct pgtk_display_info *dpyinfo = check_pgtk_display_info (terminal);
+  GdkDisplay *gdpy;
+  gint n_monitors, i;
+  int height = 0;
+
+  block_input ();
+  gdpy = dpyinfo->gdpy;
+  n_monitors = gdk_display_get_n_monitors (gdpy);
+
+  for (i = 0; i < n_monitors; ++i)
+    {
+      GdkRectangle rec;
+      double scale = 1;
+
+      GdkMonitor *monitor = gdk_display_get_monitor (gdpy, i);
+      gdk_monitor_get_geometry (monitor, &rec);
+
+      /* GTK returns scaled sizes for the workareas.  */
+      scale = pgtk_get_monitor_scale_factor (gdk_monitor_get_model (monitor));
+      if (scale == 0.0)
+       scale = gdk_monitor_get_scale_factor (monitor);
+      rec.x = rec.x * scale + 0.5;
+      rec.y = rec.y * scale + 0.5;
+      rec.width = rec.width * scale + 0.5;
+      rec.height = rec.height * scale + 0.5;
+
+      height = max (height, rec.y + rec.height);
+    }
+
+  unblock_input ();
+
+  return make_fixnum (height);
+}
+
+DEFUN ("pgtk-display-monitor-attributes-list", 
Fpgtk_display_monitor_attributes_list,
+       Spgtk_display_monitor_attributes_list,
+       0, 1, 0,
+       doc: /* Return a list of physical monitor attributes on the X display 
TERMINAL.
+
+The optional argument TERMINAL specifies which display to ask about.
+TERMINAL should be a terminal object, a frame or a display name (a string).
+If omitted or nil, that stands for the selected frame's display.
+
+In addition to the standard attribute keys listed in
+`display-monitor-attributes-list', the following keys are contained in
+the attributes:
+
+ source -- String describing the source from which multi-monitor
+          information is obtained, \"Gdk\"
+
+Internal use only, use `display-monitor-attributes-list' instead.  */)
+  (Lisp_Object terminal)
+{
+  struct pgtk_display_info *dpyinfo = check_pgtk_display_info (terminal);
+  Lisp_Object attributes_list = Qnil;
+
+  GdkDisplay *gdpy;
+  gint primary_monitor = 0, n_monitors, i;
+  Lisp_Object monitor_frames, rest, frame;
+  static const char *source = "Gdk";
+  struct MonitorInfo *monitors;
+
+  block_input ();
+  gdpy = dpyinfo->gdpy;
+  n_monitors = gdk_display_get_n_monitors (gdpy);
+  monitor_frames = make_nil_vector (n_monitors);
+  monitors = xzalloc (n_monitors * sizeof *monitors);
+
+  FOR_EACH_FRAME (rest, frame)
+    {
+      struct frame *f = XFRAME (frame);
+
+      if (FRAME_PGTK_P (f)
+         && FRAME_DISPLAY_INFO (f) == dpyinfo
+         && !FRAME_TOOLTIP_P (f))
+       {
+         GdkWindow *gwin = gtk_widget_get_window (FRAME_GTK_WIDGET (f));
+
+          for (i = 0; i < n_monitors; i++)
+            if (gdk_display_get_monitor_at_window (gdpy, gwin)
+                == gdk_display_get_monitor (gdpy, i))
+              break;
+         ASET (monitor_frames, i, Fcons (frame, AREF (monitor_frames, i)));
+       }
+    }
+
+  for (i = 0; i < n_monitors; ++i)
+    {
+      gint width_mm, height_mm;
+      GdkRectangle rec, work;
+      struct MonitorInfo *mi = &monitors[i];
+      double scale = 1;
+
+      GdkMonitor *monitor = gdk_display_get_monitor (gdpy, i);
+      if (gdk_monitor_is_primary (monitor))
+        primary_monitor = i;
+      gdk_monitor_get_geometry (monitor, &rec);
+
+      width_mm = gdk_monitor_get_width_mm (monitor);
+      height_mm = gdk_monitor_get_height_mm (monitor);
+      gdk_monitor_get_workarea (monitor, &work);
+
+      /* GTK returns scaled sizes for the workareas.  */
+      scale = pgtk_get_monitor_scale_factor (gdk_monitor_get_model (monitor));
+      if (scale == 0.0)
+       scale = gdk_monitor_get_scale_factor (monitor);
+      rec.x = rec.x * scale + 0.5;
+      rec.y = rec.y * scale + 0.5;
+      rec.width = rec.width * scale + 0.5;
+      rec.height = rec.height * scale + 0.5;
+      work.x = work.x * scale + 0.5;
+      work.y = work.y * scale + 0.5;
+      work.width = work.width * scale + 0.5;
+      work.height = work.height * scale + 0.5;
+
+      mi->geom.x = rec.x;
+      mi->geom.y = rec.y;
+      mi->geom.width = rec.width;
+      mi->geom.height = rec.height;
+      mi->work.x = work.x;
+      mi->work.y = work.y;
+      mi->work.width = work.width;
+      mi->work.height = work.height;
+      mi->mm_width = width_mm;
+      mi->mm_height = height_mm;
+      mi->scale_factor = scale;
+
+      dupstring (&mi->name, (gdk_monitor_get_model (monitor)));
+    }
+
+  attributes_list = make_monitor_attribute_list (monitors,
+                                                 n_monitors,
+                                                 primary_monitor,
+                                                 monitor_frames,
+                                                 source);
+  free_monitors (monitors, n_monitors);
+  unblock_input ();
+
+  return attributes_list;
+}
+
+double
+pgtk_frame_scale_factor (struct frame *f)
+{
+  struct pgtk_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
+  GdkDisplay *gdpy = dpyinfo->gdpy;
+
+  block_input ();
+
+  GdkWindow *gwin = gtk_widget_get_window (FRAME_GTK_WIDGET (f));
+  GdkMonitor *gmon = gdk_display_get_monitor_at_window (gdpy, gwin);
+
+  /* GTK returns scaled sizes for the workareas.  */
+  double scale = pgtk_get_monitor_scale_factor (gdk_monitor_get_model (gmon));
+  if (scale == 0.0)
+    scale = gdk_monitor_get_scale_factor (gmon);
+
+  unblock_input ();
+
+  return scale;
+}
+
+DEFUN ("x-display-planes", Fx_display_planes, Sx_display_planes, 0, 1, 0,
+       doc: /* Return the number of bitplanes of the display TERMINAL.
+The optional argument TERMINAL specifies which display to ask about.
+TERMINAL should be a terminal object, a frame or a display name (a string).
+If omitted or nil, that stands for the selected frame's display.  */)
+  (Lisp_Object terminal)
+{
+  check_pgtk_display_info (terminal);
+  return make_fixnum (32);
+}
+
+
+DEFUN ("x-display-color-cells", Fx_display_color_cells, 
Sx_display_color_cells, 0, 1, 0,
+       doc: /* Returns the number of color cells of the display TERMINAL.
+The optional argument TERMINAL specifies which display to ask about.
+TERMINAL should be a terminal object, a frame or a display name (a string).
+If omitted or nil, that stands for the selected frame's display.  */)
+  (Lisp_Object terminal)
+{
+  struct pgtk_display_info *dpyinfo = check_pgtk_display_info (terminal);
+  /* We force 24+ bit depths to 24-bit to prevent an overflow.  */
+  return make_fixnum (1 << min (dpyinfo->n_planes, 24));
+}
+
+/***********************************************************************
+                               Tool tips
+ ***********************************************************************/
+
+/* The frame of the currently visible tooltip.  */
+static Lisp_Object tip_frame;
+
+/* The window-system window corresponding to the frame of the
+   currently visible tooltip.  */
+GtkWidget *tip_window;
+
+/* A timer that hides or deletes the currently visible tooltip when it
+   fires.  */
+static Lisp_Object tip_timer;
+
+/* STRING argument of last `x-show-tip' call.  */
+static Lisp_Object tip_last_string;
+
+/* Normalized FRAME argument of last `x-show-tip' call.  */
+static Lisp_Object tip_last_frame;
+
+/* PARMS argument of last `x-show-tip' call.  */
+static Lisp_Object tip_last_parms;
+
+
+static void
+unwind_create_tip_frame (Lisp_Object frame)
+{
+  Lisp_Object deleted;
+
+  deleted = unwind_create_frame (frame);
+  if (EQ (deleted, Qt))
+    {
+      tip_window = NULL;
+      tip_frame = Qnil;
+    }
+}
+
+
+/* Create a frame for a tooltip on the display described by DPYINFO.
+   PARMS is a list of frame parameters.  TEXT is the string to
+   display in the tip frame.  Value is the frame.
+
+   Note that functions called here, esp. gui_default_parameter can
+   signal errors, for instance when a specified color name is
+   undefined.  We have to make sure that we're in a consistent state
+   when this happens.  */
+
+static Lisp_Object
+x_create_tip_frame (struct pgtk_display_info *dpyinfo, Lisp_Object parms, 
struct frame *p)
+{
+  struct frame *f;
+  Lisp_Object frame;
+  Lisp_Object name;
+  ptrdiff_t count = SPECPDL_INDEX ();
+  bool face_change_before = face_change;
+
+  if (!dpyinfo->terminal->name)
+    error ("Terminal is not live, can't create new frames on it");
+
+  parms = Fcopy_alist (parms);
+
+  /* Get the name of the frame to use for resource lookup.  */
+  name = gui_display_get_arg (dpyinfo, parms, Qname, "name", "Name",
+                              RES_TYPE_STRING);
+  if (!STRINGP (name)
+      && !EQ (name, Qunbound)
+      && !NILP (name))
+    error ("Invalid frame name--not a string or nil");
+
+  frame = Qnil;
+  f = make_frame (false);
+  f->wants_modeline = false;
+  XSETFRAME (frame, f);
+  record_unwind_protect (unwind_create_tip_frame, frame);
+
+  f->terminal = dpyinfo->terminal;
+
+  /* By setting the output method, we're essentially saying that
+     the frame is live, as per FRAME_LIVE_P.  If we get a signal
+     from this point on, x_destroy_window might screw up reference
+     counts etc.  */
+  f->output_method = output_pgtk;
+  f->output_data.pgtk = xzalloc (sizeof *f->output_data.pgtk);
+#if 0
+  f->output_data.pgtk->icon_bitmap = -1;
+#endif
+  FRAME_FONTSET (f) = -1;
+  f->output_data.pgtk->white_relief.pixel = -1;
+  f->output_data.pgtk->black_relief.pixel = -1;
+
+  f->tooltip = true;
+  fset_icon_name (f, Qnil);
+  FRAME_DISPLAY_INFO (f) = dpyinfo;
+  f->output_data.pgtk->parent_desc = FRAME_DISPLAY_INFO (f)->root_window;
+  f->output_data.pgtk->explicit_parent = false;
+
+  /* These colors will be set anyway later, but it's important
+     to get the color reference counts right, so initialize them!  */
+  {
+    Lisp_Object black;
+
+    /* Function x_decode_color can signal an error.  Make
+       sure to initialize color slots so that we won't try
+       to free colors we haven't allocated.  */
+    FRAME_FOREGROUND_PIXEL (f) = -1;
+    FRAME_BACKGROUND_PIXEL (f) = -1;
+    f->output_data.pgtk->border_pixel = -1;
+
+    black = build_string ("black");
+    FRAME_FOREGROUND_PIXEL (f)
+      = x_decode_color (f, black, BLACK_PIX_DEFAULT (f));
+    FRAME_BACKGROUND_PIXEL (f)
+      = x_decode_color (f, black, BLACK_PIX_DEFAULT (f));
+    f->output_data.pgtk->border_pixel
+      = x_decode_color (f, black, BLACK_PIX_DEFAULT (f));
+  }
+
+  /* Set the name; the functions to which we pass f expect the name to
+     be set.  */
+  if (EQ (name, Qunbound) || NILP (name))
+    {
+      fset_name (f, build_string (dpyinfo->x_id_name));
+      f->explicit_name = false;
+    }
+  else
+    {
+      fset_name (f, name);
+      f->explicit_name = true;
+      /* use the frame's title when getting resources for this frame.  */
+      specbind (Qx_resource_name, name);
+    }
+
+  register_font_driver (&ftcrfont_driver, f);
+#ifdef HAVE_HARFBUZZ
+  register_font_driver (&ftcrhbfont_driver, f);
+#endif /* HAVE_HARFBUZZ */
+
+  image_cache_refcount =
+    FRAME_IMAGE_CACHE (f) ? FRAME_IMAGE_CACHE (f)->refcount : 0;
+
+  gui_default_parameter (f, parms, Qfont_backend, Qnil,
+                         "fontBackend", "FontBackend", RES_TYPE_STRING);
+
+  /* Extract the window parameters from the supplied values that are
+     needed to determine window geometry.  */
+  pgtk_default_font_parameter (f, parms);
+
+  gui_default_parameter (f, parms, Qborder_width, make_fixnum (0),
+                         "borderWidth", "BorderWidth", RES_TYPE_NUMBER);
+
+  /* This defaults to 2 in order to match xterm.  We recognize either
+     internalBorderWidth or internalBorder (which is what xterm calls
+     it).  */
+  if (NILP (Fassq (Qinternal_border_width, parms)))
+    {
+      Lisp_Object value;
+
+      value = gui_display_get_arg (dpyinfo, parms, Qinternal_border_width,
+                                   "internalBorder", "internalBorder",
+                                   RES_TYPE_NUMBER);
+      if (! EQ (value, Qunbound))
+       parms = Fcons (Fcons (Qinternal_border_width, value),
+                      parms);
+    }
+
+  gui_default_parameter (f, parms, Qinternal_border_width, make_fixnum (1),
+                         "internalBorderWidth", "internalBorderWidth",
+                         RES_TYPE_NUMBER);
+  gui_default_parameter (f, parms, Qright_divider_width, make_fixnum (0),
+                         NULL, NULL, RES_TYPE_NUMBER);
+  gui_default_parameter (f, parms, Qbottom_divider_width, make_fixnum (0),
+                         NULL, NULL, RES_TYPE_NUMBER);
+
+  /* Also do the stuff which must be set before the window exists.  */
+  gui_default_parameter (f, parms, Qforeground_color, build_string ("black"),
+                         "foreground", "Foreground", RES_TYPE_STRING);
+  gui_default_parameter (f, parms, Qbackground_color, build_string ("white"),
+                         "background", "Background", RES_TYPE_STRING);
+  gui_default_parameter (f, parms, Qmouse_color, build_string ("black"),
+                         "pointerColor", "Foreground", RES_TYPE_STRING);
+  gui_default_parameter (f, parms, Qcursor_color, build_string ("black"),
+                         "cursorColor", "Foreground", RES_TYPE_STRING);
+  gui_default_parameter (f, parms, Qborder_color, build_string ("black"),
+                         "borderColor", "BorderColor", RES_TYPE_STRING);
+  gui_default_parameter (f, parms, Qno_special_glyphs, Qnil,
+                         NULL, NULL, RES_TYPE_BOOLEAN);
+
+  /* Init faces before gui_default_parameter is called for the
+     scroll-bar-width parameter because otherwise we end up in
+     init_iterator with a null face cache, which should not happen.  */
+  init_frame_faces (f);
+
+  f->output_data.pgtk->parent_desc = FRAME_DISPLAY_INFO (f)->root_window;
+
+  gui_default_parameter (f, parms, Qinhibit_double_buffering, Qnil,
+                         "inhibitDoubleBuffering", "InhibitDoubleBuffering",
+                         RES_TYPE_BOOLEAN);
+
+  gui_figure_window_size (f, parms, false, false);
+
+  xg_create_frame_widgets (f);
+  pgtk_set_event_handler (f);
+  tip_window = FRAME_GTK_OUTER_WIDGET (f);
+  gtk_window_set_transient_for (GTK_WINDOW (tip_window),
+                               GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (p)));
+  gtk_window_set_attached_to (GTK_WINDOW (tip_window), FRAME_GTK_WIDGET (p));
+  gtk_window_set_destroy_with_parent (GTK_WINDOW (tip_window), TRUE);
+  gtk_window_set_decorated (GTK_WINDOW (tip_window), FALSE);
+  gtk_window_set_type_hint (GTK_WINDOW (tip_window), 
GDK_WINDOW_TYPE_HINT_TOOLTIP);
+  f->output_data.pgtk->current_cursor = f->output_data.pgtk->text_cursor;
+
+#if 0
+  x_make_gc (f);
+#endif
+
+  gui_default_parameter (f, parms, Qauto_raise, Qnil,
+                         "autoRaise", "AutoRaiseLower", RES_TYPE_BOOLEAN);
+  gui_default_parameter (f, parms, Qauto_lower, Qnil,
+                         "autoLower", "AutoRaiseLower", RES_TYPE_BOOLEAN);
+  gui_default_parameter (f, parms, Qcursor_type, Qbox,
+                         "cursorType", "CursorType", RES_TYPE_SYMBOL);
+  gui_default_parameter (f, parms, Qalpha, Qnil,
+                         "alpha", "Alpha", RES_TYPE_NUMBER);
+
+  /* Add `tooltip' frame parameter's default value. */
+  if (NILP (Fframe_parameter (frame, Qtooltip)))
+    {
+      AUTO_FRAME_ARG (arg, Qtooltip, Qt);
+      Fmodify_frame_parameters (frame, arg);
+    }
+
+  /* FIXME - can this be done in a similar way to normal frames?
+     https://lists.gnu.org/r/emacs-devel/2007-10/msg00641.html */
+
+  /* Set the `display-type' frame parameter before setting up faces. */
+  {
+    Lisp_Object disptype;
+
+    disptype = intern ("color");
+
+    if (NILP (Fframe_parameter (frame, Qdisplay_type)))
+      {
+       AUTO_FRAME_ARG (arg, Qdisplay_type, disptype);
+       Fmodify_frame_parameters (frame, arg);
+      }
+  }
+
+  /* Set up faces after all frame parameters are known.  This call
+     also merges in face attributes specified for new frames.
+
+     Frame parameters may be changed if .Xdefaults contains
+     specifications for the default font.  For example, if there is an
+     `Emacs.default.attributeBackground: pink', the `background-color'
+     attribute of the frame get's set, which let's the internal border
+     of the tooltip frame appear in pink.  Prevent this.  */
+  {
+    Lisp_Object bg = Fframe_parameter (frame, Qbackground_color);
+
+    call2 (Qface_set_after_frame_default, frame, Qnil);
+
+    if (!EQ (bg, Fframe_parameter (frame, Qbackground_color)))
+      {
+       AUTO_FRAME_ARG (arg, Qbackground_color, bg);
+       Fmodify_frame_parameters (frame, arg);
+      }
+  }
+
+  f->no_split = true;
+
+  /* Now that the frame will be official, it counts as a reference to
+     its display and terminal.  */
+  FRAME_DISPLAY_INFO (f)->reference_count++;
+  f->terminal->reference_count++;
+
+  /* It is now ok to make the frame official even if we get an error
+     below.  And the frame needs to be on Vframe_list or making it
+     visible won't work.  */
+  Vframe_list = Fcons (frame, Vframe_list);
+  f->can_set_window_size = true;
+  adjust_frame_size (f, FRAME_TEXT_WIDTH (f), FRAME_TEXT_HEIGHT (f),
+                    0, true, Qtip_frame);
+
+  /* Setting attributes of faces of the tooltip frame from resources
+     and similar will set face_change, which leads to the clearing of
+     all current matrices.  Since this isn't necessary here, avoid it
+     by resetting face_change to the value it had before we created
+     the tip frame.  */
+  face_change = face_change_before;
+
+  /* Discard the unwind_protect.  */
+  return unbind_to (count, frame);
+}
+
+/* Compute where to display tip frame F.  PARMS is the list of frame
+   parameters for F.  DX and DY are specified offsets from the current
+   location of the mouse.  WIDTH and HEIGHT are the width and height
+   of the tooltip.  Return coordinates relative to the root window of
+   the display in *ROOT_X, and *ROOT_Y.  */
+
+static void
+compute_tip_xy (struct frame *f, Lisp_Object parms, Lisp_Object dx,
+               Lisp_Object dy, int width, int height, int *root_x,
+               int *root_y)
+{
+  Lisp_Object left, top, right, bottom;
+  int min_x, min_y, max_x, max_y = -1;
+
+  /* User-specified position?  */
+  left = Fcdr (Fassq (Qleft, parms));
+  top = Fcdr (Fassq (Qtop, parms));
+  right = Fcdr (Fassq (Qright, parms));
+  bottom = Fcdr (Fassq (Qbottom, parms));
+
+  /* Move the tooltip window where the mouse pointer is.  Resize and
+     show it.  */
+  if ((!INTEGERP (left) && !INTEGERP (right))
+      || (!INTEGERP (top) && !INTEGERP (bottom)))
+    {
+      Lisp_Object frame, attributes, monitor, geometry;
+      GdkSeat *seat =
+       gdk_display_get_default_seat (FRAME_DISPLAY_INFO (f)->gdpy);
+      GdkDevice *dev = gdk_seat_get_pointer (seat);
+      GdkScreen *scr;
+
+      block_input ();
+      gdk_device_get_position (dev, &scr, root_x, root_y);
+      unblock_input ();
+
+      XSETFRAME (frame, f);
+      attributes = Fpgtk_display_monitor_attributes_list (frame);
+
+      /* Try to determine the monitor where the mouse pointer is and
+         its geometry.  See bug#22549.  */
+      while (CONSP (attributes))
+       {
+         monitor = XCAR (attributes);
+         geometry = Fassq (Qgeometry, monitor);
+         if (CONSP (geometry))
+           {
+             min_x = XFIXNUM (Fnth (make_fixnum (1), geometry));
+             min_y = XFIXNUM (Fnth (make_fixnum (2), geometry));
+             max_x = min_x + XFIXNUM (Fnth (make_fixnum (3), geometry));
+             max_y = min_y + XFIXNUM (Fnth (make_fixnum (4), geometry));
+             if (min_x <= *root_x && *root_x < max_x
+                 && min_y <= *root_y && *root_y < max_y)
+               {
+                 break;
+               }
+             max_y = -1;
+           }
+
+         attributes = XCDR (attributes);
+       }
+    }
+
+  /* It was not possible to determine the monitor's geometry, so we
+     assign some sane defaults here: */
+  if (max_y < 0)
+    {
+      min_x = 0;
+      min_y = 0;
+      max_x = x_display_pixel_width (FRAME_DISPLAY_INFO (f));
+      max_y = x_display_pixel_height (FRAME_DISPLAY_INFO (f));
+    }
+
+  if (INTEGERP (top))
+    *root_y = XFIXNUM (top);
+  else if (INTEGERP (bottom))
+    *root_y = XFIXNUM (bottom) - height;
+  else if (*root_y + XFIXNUM (dy) <= min_y)
+    *root_y = min_y;           /* Can happen for negative dy */
+  else if (*root_y + XFIXNUM (dy) + height <= max_y)
+    /* It fits below the pointer */
+    *root_y += XFIXNUM (dy);
+  else if (height + XFIXNUM (dy) + min_y <= *root_y)
+    /* It fits above the pointer.  */
+    *root_y -= height + XFIXNUM (dy);
+  else
+    /* Put it on the top.  */
+    *root_y = min_y;
+
+  if (INTEGERP (left))
+    *root_x = XFIXNUM (left);
+  else if (INTEGERP (right))
+    *root_x = XFIXNUM (right) - width;
+  else if (*root_x + XFIXNUM (dx) <= min_x)
+    *root_x = 0;               /* Can happen for negative dx */
+  else if (*root_x + XFIXNUM (dx) + width <= max_x)
+    /* It fits to the right of the pointer.  */
+    *root_x += XFIXNUM (dx);
+  else if (width + XFIXNUM (dx) + min_x <= *root_x)
+    /* It fits to the left of the pointer.  */
+    *root_x -= width + XFIXNUM (dx);
+  else
+    /* Put it left justified on the screen -- it ought to fit that way.  */
+    *root_x = min_x;
+}
+
+
+/* Hide tooltip.  Delete its frame if DELETE is true.  */
+static Lisp_Object
+x_hide_tip (bool delete)
+{
+  if (!NILP (tip_timer))
+    {
+      call1 (Qcancel_timer, tip_timer);
+      tip_timer = Qnil;
+    }
+
+  /* Any GTK+ system tooltip can be found via the x_output structure of
+     tip_last_frame, provided that frame is still live.  Any Emacs
+     tooltip is found via the tip_frame variable.  Note that the current
+     value of x_gtk_use_system_tooltips might not be the same as used
+     for the tooltip we have to hide, see Bug#30399.  */
+  if ((NILP (tip_last_frame) && NILP (tip_frame))
+      || (!x_gtk_use_system_tooltips
+         && !delete
+         && FRAMEP (tip_frame)
+         && FRAME_LIVE_P (XFRAME (tip_frame))
+         && !FRAME_VISIBLE_P (XFRAME (tip_frame))))
+    /* Either there's no tooltip to hide or it's an already invisible
+       Emacs tooltip and we don't want to change its type.  Return
+       quickly.  */
+    return Qnil;
+  else
+    {
+      ptrdiff_t count;
+      Lisp_Object was_open = Qnil;
+
+      count = SPECPDL_INDEX ();
+      specbind (Qinhibit_redisplay, Qt);
+      specbind (Qinhibit_quit, Qt);
+
+      /* Try to hide the GTK+ system tip first.  */
+      if (FRAMEP (tip_last_frame))
+       {
+         struct frame *f = XFRAME (tip_last_frame);
+
+         if (FRAME_LIVE_P (f))
+           {
+             if (xg_hide_tooltip (f))
+               was_open = Qt;
+           }
+       }
+
+      /* When using GTK+ system tooltips (compare Bug#41200) reset
+        tip_last_frame.  It will be reassigned when showing the next
+        GTK+ system tooltip.  */
+      if (x_gtk_use_system_tooltips)
+       tip_last_frame = Qnil;
+
+      /* Now look whether there's an Emacs tip around.  */
+      if (FRAMEP (tip_frame))
+       {
+         struct frame *f = XFRAME (tip_frame);
+
+         if (FRAME_LIVE_P (f))
+           {
+             if (delete || x_gtk_use_system_tooltips)
+               {
+                 /* Delete the Emacs tooltip frame when DELETE is true
+                    or we change the tooltip type from an Emacs one to
+                    a GTK+ system one.  */
+                 delete_frame (tip_frame, Qnil);
+                 tip_frame = Qnil;
+               }
+             else
+               pgtk_make_frame_invisible (f);
+
+             was_open = Qt;
+           }
+         else
+           tip_frame = Qnil;
+       }
+      else
+       tip_frame = Qnil;
+
+      return unbind_to (count, was_open);
+    }
+}
+
+DEFUN ("x-show-tip", Fx_show_tip, Sx_show_tip, 1, 6, 0,
+       doc: /* Show STRING in a "tooltip" window on frame FRAME.
+A tooltip window is a small X window displaying a string.
+
+This is an internal function; Lisp code should call `tooltip-show'.
+
+FRAME nil or omitted means use the selected frame.
+
+PARMS is an optional list of frame parameters which can be used to
+change the tooltip's appearance.
+
+Automatically hide the tooltip after TIMEOUT seconds.  TIMEOUT nil
+means use the default timeout of 5 seconds.
+
+If the list of frame parameters PARMS contains a `left' parameter,
+display the tooltip at that x-position.  If the list of frame parameters
+PARMS contains no `left' but a `right' parameter, display the tooltip
+right-adjusted at that x-position. Otherwise display it at the
+x-position of the mouse, with offset DX added (default is 5 if DX isn't
+specified).
+
+Likewise for the y-position: If a `top' frame parameter is specified, it
+determines the position of the upper edge of the tooltip window.  If a
+`bottom' parameter but no `top' frame parameter is specified, it
+determines the position of the lower edge of the tooltip window.
+Otherwise display the tooltip window at the y-position of the mouse,
+with offset DY added (default is -10).
+
+A tooltip's maximum size is specified by `x-max-tooltip-size'.
+Text larger than the specified size is clipped.  */)
+  (Lisp_Object string, Lisp_Object frame, Lisp_Object parms,
+   Lisp_Object timeout, Lisp_Object dx, Lisp_Object dy)
+{
+  struct frame *f, *tip_f;
+  struct window *w;
+  int root_x, root_y;
+  struct buffer *old_buffer;
+  struct text_pos pos;
+  int width, height;
+  int old_windows_or_buffers_changed = windows_or_buffers_changed;
+  ptrdiff_t count = SPECPDL_INDEX ();
+  ptrdiff_t count_1;
+  Lisp_Object window, size, tip_buf;
+  AUTO_STRING (tip, " *tip*");
+
+  specbind (Qinhibit_redisplay, Qt);
+
+  CHECK_STRING (string);
+  if (SCHARS (string) == 0)
+    string = make_unibyte_string (" ", 1);
+
+  if (NILP (frame))
+    frame = selected_frame;
+  f = decode_window_system_frame (frame);
+
+  if (!FRAME_GTK_OUTER_WIDGET (f))
+    return unbind_to (count, Qnil);
+
+  if (NILP (timeout))
+    timeout = make_fixnum (5);
+  else
+    CHECK_FIXNAT (timeout);
+
+  if (NILP (dx))
+    dx = make_fixnum (5);
+  else
+    CHECK_FIXNUM (dx);
+
+  if (NILP (dy))
+    dy = make_fixnum (-10);
+  else
+    CHECK_FIXNUM (dy);
+
+  if (x_gtk_use_system_tooltips)
+    {
+      bool ok;
+
+      /* Hide a previous tip, if any.  */
+      Fx_hide_tip ();
+
+      block_input ();
+
+      ok = true;
+      xg_show_tooltip (f, string);
+      tip_last_frame = frame;
+
+      unblock_input ();
+      if (ok) goto start_timer;
+    }
+
+  if (FRAMEP (tip_frame) && FRAME_LIVE_P (XFRAME (tip_frame)))
+    {
+      if (FRAME_VISIBLE_P (XFRAME (tip_frame))
+         && EQ (frame, tip_last_frame)
+         && !NILP (Fequal_including_properties (tip_last_string, string))
+         && !NILP (Fequal (tip_last_parms, parms)))
+       {
+         /* Only DX and DY have changed.  */
+         tip_f = XFRAME (tip_frame);
+         if (!NILP (tip_timer))
+           {
+             call1 (Qcancel_timer, tip_timer);
+             tip_timer = Qnil;
+           }
+
+         block_input ();
+         compute_tip_xy (tip_f, parms, dx, dy, FRAME_PIXEL_WIDTH (tip_f),
+                         FRAME_PIXEL_HEIGHT (tip_f), &root_x, &root_y);
+         gtk_window_move (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (tip_f)), root_x, 
root_y);
+         unblock_input ();
+
+         goto start_timer;
+       }
+      else if (tooltip_reuse_hidden_frame && EQ (frame, tip_last_frame))
+       {
+         bool delete = false;
+         Lisp_Object tail, elt, parm, last;
+
+         /* Check if every parameter in PARMS has the same value in
+            tip_last_parms.  This may destruct tip_last_parms which,
+            however, will be recreated below.  */
+         for (tail = parms; CONSP (tail); tail = XCDR (tail))
+           {
+             elt = XCAR (tail);
+             parm = Fcar (elt);
+             /* The left, top, right and bottom parameters are handled
+                by compute_tip_xy so they can be ignored here.  */
+             if (!EQ (parm, Qleft) && !EQ (parm, Qtop)
+                 && !EQ (parm, Qright) && !EQ (parm, Qbottom))
+               {
+                 last = Fassq (parm, tip_last_parms);
+                 if (NILP (Fequal (Fcdr (elt), Fcdr (last))))
+                   {
+                     /* We lost, delete the old tooltip.  */
+                     delete = true;
+                     break;
+                   }
+                 else
+                   tip_last_parms =
+                     call2 (Qassq_delete_all, parm, tip_last_parms);
+               }
+             else
+               tip_last_parms =
+                 call2 (Qassq_delete_all, parm, tip_last_parms);
+           }
+
+         /* Now check if every parameter in what is left of
+            tip_last_parms with a non-nil value has an association in
+            PARMS.  */
+         for (tail = tip_last_parms; CONSP (tail); tail = XCDR (tail))
+           {
+             elt = XCAR (tail);
+             parm = Fcar (elt);
+             if (!EQ (parm, Qleft) && !EQ (parm, Qtop) && !EQ (parm, Qright)
+                 && !EQ (parm, Qbottom) && !NILP (Fcdr (elt)))
+               {
+                 /* We lost, delete the old tooltip.  */
+                 delete = true;
+                 break;
+               }
+           }
+
+         x_hide_tip (delete);
+       }
+      else
+       x_hide_tip (true);
+    }
+  else
+    x_hide_tip (true);
+
+  tip_last_frame = frame;
+  tip_last_string = string;
+  tip_last_parms = parms;
+
+  if (!FRAMEP (tip_frame) || !FRAME_LIVE_P (XFRAME (tip_frame)))
+    {
+      /* Add default values to frame parameters.  */
+      if (NILP (Fassq (Qname, parms)))
+       parms = Fcons (Fcons (Qname, build_string ("tooltip")), parms);
+      if (NILP (Fassq (Qinternal_border_width, parms)))
+       parms = Fcons (Fcons (Qinternal_border_width, make_fixnum (3)), parms);
+      if (NILP (Fassq (Qborder_width, parms)))
+       parms = Fcons (Fcons (Qborder_width, make_fixnum (1)), parms);
+      if (NILP (Fassq (Qborder_color, parms)))
+       parms = Fcons (Fcons (Qborder_color, build_string ("lightyellow")), 
parms);
+      if (NILP (Fassq (Qbackground_color, parms)))
+       parms = Fcons (Fcons (Qbackground_color, build_string ("lightyellow")),
+                      parms);
+
+      /* Create a frame for the tooltip, and record it in the global
+        variable tip_frame.  */
+      if (NILP (tip_frame = x_create_tip_frame (FRAME_DISPLAY_INFO (f), parms, 
f)))
+       /* Creating the tip frame failed.  */
+       return unbind_to (count, Qnil);
+    }
+
+  tip_f = XFRAME (tip_frame);
+  window = FRAME_ROOT_WINDOW (tip_f);
+  tip_buf = Fget_buffer_create (tip, Qnil);
+  /* We will mark the tip window a "pseudo-window" below, and such
+     windows cannot have display margins.  */
+  bset_left_margin_cols (XBUFFER (tip_buf), make_fixnum (0));
+  bset_right_margin_cols (XBUFFER (tip_buf), make_fixnum (0));
+  set_window_buffer (window, tip_buf, false, false);
+  w = XWINDOW (window);
+  w->pseudo_window_p = true;
+
+  /* Set up the frame's root window.  Note: The following code does not
+     try to size the window or its frame correctly.  Its only purpose is
+     to make the subsequent text size calculations work.  The right
+     sizes should get installed when the toolkit gets back to us.  */
+  w->left_col = 0;
+  w->top_line = 0;
+  w->pixel_left = 0;
+  w->pixel_top = 0;
+
+  if (CONSP (Vx_max_tooltip_size)
+      && RANGED_FIXNUMP (1, XCAR (Vx_max_tooltip_size), INT_MAX)
+      && RANGED_FIXNUMP (1, XCDR (Vx_max_tooltip_size), INT_MAX))
+    {
+      w->total_cols = XFIXNAT (XCAR (Vx_max_tooltip_size));
+      w->total_lines = XFIXNAT (XCDR (Vx_max_tooltip_size));
+    }
+  else
+    {
+      w->total_cols = 80;
+      w->total_lines = 40;
+    }
+
+  w->pixel_width = w->total_cols * FRAME_COLUMN_WIDTH (tip_f);
+  w->pixel_height = w->total_lines * FRAME_LINE_HEIGHT (tip_f);
+  FRAME_TOTAL_COLS (tip_f) = w->total_cols;
+  adjust_frame_glyphs (tip_f);
+
+  /* Insert STRING into root window's buffer and fit the frame to the
+     buffer.  */
+  count_1 = SPECPDL_INDEX ();
+  old_buffer = current_buffer;
+  set_buffer_internal_1 (XBUFFER (w->contents));
+  bset_truncate_lines (current_buffer, Qnil);
+  specbind (Qinhibit_read_only, Qt);
+  specbind (Qinhibit_modification_hooks, Qt);
+  specbind (Qinhibit_point_motion_hooks, Qt);
+  Ferase_buffer ();
+  Finsert (1, &string);
+  clear_glyph_matrix (w->desired_matrix);
+  clear_glyph_matrix (w->current_matrix);
+  SET_TEXT_POS (pos, BEGV, BEGV_BYTE);
+  try_window (window, pos, TRY_WINDOW_IGNORE_FONTS_CHANGE);
+  /* Calculate size of tooltip window.  */
+  size = Fwindow_text_pixel_size (window, Qnil, Qnil, Qnil,
+                                 make_fixnum (w->pixel_height), Qnil,
+                                 Qnil);
+  /* Add the frame's internal border to calculated size.  */
+  width = XFIXNUM (Fcar (size)) + 2 * FRAME_INTERNAL_BORDER_WIDTH (tip_f);
+  height = XFIXNUM (Fcdr (size)) + 2 * FRAME_INTERNAL_BORDER_WIDTH (tip_f);
+  width += FRAME_COLUMN_WIDTH (tip_f);
+
+  /* Calculate position of tooltip frame.  */
+  compute_tip_xy (tip_f, parms, dx, dy, width, height, &root_x, &root_y);
+
+  /* Show tooltip frame.  */
+  block_input ();
+  gtk_window_resize (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (tip_f)), width, 
height);
+  gtk_window_move (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (tip_f)), root_x, 
root_y);
+  gtk_widget_show_all (FRAME_GTK_OUTER_WIDGET (tip_f));
+  SET_FRAME_VISIBLE (tip_f, 1);
+  gdk_window_set_cursor (gtk_widget_get_window (FRAME_GTK_OUTER_WIDGET 
(tip_f)),
+                        f->output_data.pgtk->current_cursor);
+
+  unblock_input ();
+
+  pgtk_cr_update_surface_desired_size (tip_f, width, height, false);
+
+  w->must_be_updated_p = true;
+  update_single_window (w);
+  flush_frame (tip_f);
+  set_buffer_internal_1 (old_buffer);
+  unbind_to (count_1, Qnil);
+  windows_or_buffers_changed = old_windows_or_buffers_changed;
+
+ start_timer:
+  /* Let the tip disappear after timeout seconds.  */
+  tip_timer = call3 (intern ("run-at-time"), timeout, Qnil,
+                    intern ("x-hide-tip"));
+
+  return unbind_to (count, Qnil);
+}
+
+
+DEFUN ("x-hide-tip", Fx_hide_tip, Sx_hide_tip, 0, 0, 0,
+       doc: /* Hide the current tooltip window, if there is any.
+Value is t if tooltip was open, nil otherwise.  */)
+  (void)
+{
+  return x_hide_tip (!tooltip_reuse_hidden_frame);
+}
+
+/* Return geometric attributes of FRAME.  According to the value of
+   ATTRIBUTES return the outer edges of FRAME (Qouter_edges), the inner
+   edges of FRAME, the root window edges of frame (Qroot_edges).  Any
+   other value means to return the geometry as returned by
+   Fx_frame_geometry.  */
+static Lisp_Object
+frame_geometry (Lisp_Object frame, Lisp_Object attribute)
+{
+  struct frame *f = decode_live_frame (frame);
+  Lisp_Object fullscreen_symbol = Fframe_parameter (frame, Qfullscreen);
+  bool fullscreen = (EQ (fullscreen_symbol, Qfullboth)
+                    || EQ (fullscreen_symbol, Qfullscreen));
+  int border = fullscreen ? 0 : f->border_width;
+  int title_height = 0;
+  int native_width = FRAME_PIXEL_WIDTH (f);
+  int native_height = FRAME_PIXEL_HEIGHT (f);
+  int outer_width = native_width + 2 * border;
+  int outer_height = native_height + 2 * border + title_height;
+
+  /* Get these here because they can't be got in configure_event(). */
+  int left_pos, top_pos;
+
+  if (FRAME_GTK_OUTER_WIDGET (f))
+    {
+      gtk_window_get_position (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
+                              &left_pos, &top_pos);
+    }
+  else
+    {
+      GtkAllocation alloc;
+
+      if (FRAME_GTK_WIDGET (f) == NULL)
+       return Qnil;    /* This can occur while creating a frame.  */
+
+      gtk_widget_get_allocation (FRAME_GTK_WIDGET (f), &alloc);
+      left_pos = alloc.x;
+      top_pos = alloc.y;
+    }
+
+  int native_left = left_pos + border;
+  int native_top = top_pos + border + title_height;
+  int native_right = left_pos + outer_width - border;
+  int native_bottom = top_pos + outer_height - border;
+  int internal_border_width = FRAME_INTERNAL_BORDER_WIDTH (f);
+  int tab_bar_height = 0, tab_bar_width = 0;
+  int tool_bar_height = FRAME_TOOLBAR_HEIGHT (f);
+  int tool_bar_width = (tool_bar_height
+                       ? outer_width - 2 * internal_border_width : 0);
+
+  tab_bar_height = FRAME_TAB_BAR_HEIGHT (f);
+  tab_bar_width = (tab_bar_height
+                  ? native_width - 2 * internal_border_width : 0);
+  /* inner_top += tab_bar_height; */
+
+  /* Construct list.  */
+  if (EQ (attribute, Qouter_edges))
+    return list4 (make_fixnum (left_pos), make_fixnum (top_pos),
+                 make_fixnum (left_pos + outer_width),
+                 make_fixnum (top_pos + outer_height));
+  else if (EQ (attribute, Qnative_edges))
+    return list4 (make_fixnum (native_left), make_fixnum (native_top),
+                 make_fixnum (native_right), make_fixnum (native_bottom));
+  else if (EQ (attribute, Qinner_edges))
+    return list4 (make_fixnum (native_left + internal_border_width),
+                 make_fixnum (native_top
+                              + tool_bar_height
+                              + internal_border_width),
+                 make_fixnum (native_right - internal_border_width),
+                 make_fixnum (native_bottom - internal_border_width));
+  else
+    return
+      list (Fcons (Qouter_position,
+                  Fcons (make_fixnum (left_pos),
+                         make_fixnum (top_pos))),
+           Fcons (Qouter_size,
+                  Fcons (make_fixnum (outer_width),
+                         make_fixnum (outer_height))),
+           Fcons (Qexternal_border_size,
+                  (fullscreen
+                   ? Fcons (make_fixnum (0), make_fixnum (0))
+                   : Fcons (make_fixnum (border), make_fixnum (border)))),
+           Fcons (Qtitle_bar_size,
+                  Fcons (make_fixnum (0), make_fixnum (title_height))),
+           Fcons (Qmenu_bar_external, Qnil),
+           Fcons (Qmenu_bar_size, Fcons (make_fixnum (0), make_fixnum (0))),
+           Fcons (Qtab_bar_size,
+                  Fcons (make_fixnum (tab_bar_width),
+                         make_fixnum (tab_bar_height))),
+           Fcons (Qtool_bar_external,
+                  FRAME_EXTERNAL_TOOL_BAR (f) ? Qt : Qnil),
+           Fcons (Qtool_bar_position, FRAME_TOOL_BAR_POSITION (f)),
+           Fcons (Qtool_bar_size,
+                  Fcons (make_fixnum (tool_bar_width),
+                         make_fixnum (tool_bar_height))),
+           Fcons (Qinternal_border_width,
+                  make_fixnum (internal_border_width)));
+}
+
+DEFUN ("pgtk-frame-geometry", Fpgtk_frame_geometry, Spgtk_frame_geometry, 0, 
1, 0,
+       doc: /* Return geometric attributes of FRAME.
+FRAME must be a live frame and defaults to the selected one.  The return
+value is an association list of the attributes listed below.  All height
+and width values are in pixels.
+
+`outer-position' is a cons of the outer left and top edges of FRAME
+relative to the origin - the position (0, 0) - of FRAME's display.
+
+`outer-size' is a cons of the outer width and height of FRAME.  The
+outer size includes the title bar and the external borders as well as
+any menu and/or tool bar of frame.
+
+`external-border-size' is a cons of the horizontal and vertical width of
+FRAME's external borders as supplied by the window manager.
+
+`title-bar-size' is a cons of the width and height of the title bar of
+FRAME as supplied by the window manager.  If both of them are zero,
+FRAME has no title bar.  If only the width is zero, Emacs was not
+able to retrieve the width information.
+
+`menu-bar-external', if non-nil, means the menu bar is external (never
+included in the inner edges of FRAME).
+
+`menu-bar-size' is a cons of the width and height of the menu bar of
+FRAME.
+
+`tool-bar-external', if non-nil, means the tool bar is external (never
+included in the inner edges of FRAME).
+
+`tool-bar-position' tells on which side the tool bar on FRAME is and can
+be one of `left', `top', `right' or `bottom'.  If this is nil, FRAME
+has no tool bar.
+
+`tool-bar-size' is a cons of the width and height of the tool bar of
+FRAME.
+
+`internal-border-width' is the width of the internal border of
+FRAME.  */)
+  (Lisp_Object frame)
+{
+  return frame_geometry (frame, Qnil);
+}
+
+DEFUN ("pgtk-frame-edges", Fpgtk_frame_edges, Spgtk_frame_edges, 0, 2, 0,
+       doc: /* Return edge coordinates of FRAME.
+FRAME must be a live frame and defaults to the selected one.  The return
+value is a list of the form (LEFT, TOP, RIGHT, BOTTOM).  All values are
+in pixels relative to the origin - the position (0, 0) - of FRAME's
+display.
+
+If optional argument TYPE is the symbol `outer-edges', return the outer
+edges of FRAME.  The outer edges comprise the decorations of the window
+manager (like the title bar or external borders) as well as any external
+menu or tool bar of FRAME.  If optional argument TYPE is the symbol
+`native-edges' or nil, return the native edges of FRAME.  The native
+edges exclude the decorations of the window manager and any external
+menu or tool bar of FRAME.  If TYPE is the symbol `inner-edges', return
+the inner edges of FRAME.  These edges exclude title bar, any borders,
+menu bar or tool bar of FRAME.  */)
+  (Lisp_Object frame, Lisp_Object type)
+{
+  return frame_geometry (frame, ((EQ (type, Qouter_edges)
+                                 || EQ (type, Qinner_edges))
+                                ? type : Qnative_edges));
+}
+
+DEFUN ("pgtk-set-mouse-absolute-pixel-position", 
Fpgtk_set_mouse_absolute_pixel_position, 
Spgtk_set_mouse_absolute_pixel_position, 2, 2, 0,
+       doc: /* Move mouse pointer to absolute pixel position (X, Y).
+The coordinates X and Y are interpreted in pixels relative to a position
+\(0, 0) of the selected frame's display.  */)
+  (Lisp_Object x, Lisp_Object y)
+{
+  struct frame *f = SELECTED_FRAME ();
+  GtkWidget *widget = gtk_widget_get_toplevel (FRAME_WIDGET (f));
+  GdkWindow *window = gtk_widget_get_window (widget);
+  GdkDisplay *gdpy = gdk_window_get_display (window);
+  GdkScreen *gscr = gdk_window_get_screen (window);
+  GdkSeat *seat = gdk_display_get_default_seat (gdpy);
+  GdkDevice *device = gdk_seat_get_pointer (seat);
+
+  gdk_device_warp (device, gscr, XFIXNUM (x), XFIXNUM (y));    /* No effect on 
wayland. */
+
+  return Qnil;
+}
+
+DEFUN ("pgtk-mouse-absolute-pixel-position", 
Fpgtk_mouse_absolute_pixel_position, Spgtk_mouse_absolute_pixel_position, 0, 0, 
0,
+       doc: /* Return absolute position of mouse cursor in pixels.
+The position is returned as a cons cell (X . Y) of the
+coordinates of the mouse cursor position in pixels relative to a
+position (0, 0) of the selected frame's terminal. */)
+  (void)
+{
+  struct frame *f = SELECTED_FRAME ();
+  GtkWidget *widget = gtk_widget_get_toplevel (FRAME_WIDGET (f));
+  GdkWindow *window = gtk_widget_get_window (widget);
+  GdkDisplay *gdpy = gdk_window_get_display (window);
+  GdkScreen *gscr;
+  GdkSeat *seat = gdk_display_get_default_seat (gdpy);
+  GdkDevice *device = gdk_seat_get_pointer (seat);
+  int x = 0, y = 0;
+
+  gdk_device_get_position (device, &gscr, &x, &y);     /* can't get on 
wayland? */
+
+  return Fcons (make_fixnum (x), make_fixnum (y));
+}
+
+
+DEFUN ("pgtk-page-setup-dialog", Fpgtk_page_setup_dialog, 
Spgtk_page_setup_dialog, 0, 0, 0,
+       doc: /* Pop up a page setup dialog.
+The current page setup can be obtained using `x-get-page-setup'.  */)
+  (void)
+{
+  block_input ();
+  xg_page_setup_dialog ();
+  unblock_input ();
+
+  return Qnil;
+}
+
+DEFUN ("pgtk-get-page-setup", Fpgtk_get_page_setup, Spgtk_get_page_setup, 0, 
0, 0,
+       doc: /* Return the value of the current page setup.
+The return value is an alist containing the following keys:
+
+orientation: page orientation (symbol `portrait', `landscape',
+`reverse-portrait', or `reverse-landscape').
+width, height: page width/height in points not including margins.
+left-margin, right-margin, top-margin, bottom-margin: print margins,
+which is the parts of the page that the printer cannot print
+on, in points.
+
+The paper width can be obtained as the sum of width, left-margin, and
+right-margin values if the page orientation is `portrait' or
+`reverse-portrait'.  Otherwise, it is the sum of width, top-margin,
+and bottom-margin values.  Likewise, the paper height is the sum of
+height, top-margin, and bottom-margin values if the page orientation
+is `portrait' or `reverse-portrait'.  Otherwise, it is the sum of
+height, left-margin, and right-margin values.  */)
+  (void)
+{
+  Lisp_Object result;
+
+  block_input ();
+  result = xg_get_page_setup ();
+  unblock_input ();
+
+  return result;
+}
+
+DEFUN ("pgtk-print-frames-dialog", Fpgtk_print_frames_dialog, 
Spgtk_print_frames_dialog, 0, 1, "",
+       doc: /* Pop up a print dialog to print the current contents of FRAMES.
+FRAMES should be nil (the selected frame), a frame, or a list of
+frames (each of which corresponds to one page).  Each frame should be
+visible.  */)
+  (Lisp_Object frames)
+{
+  Lisp_Object rest, tmp;
+  int count;
+
+  if (!CONSP (frames))
+    frames = list1 (frames);
+
+  tmp = Qnil;
+  for (rest = frames; CONSP (rest); rest = XCDR (rest))
+    {
+      struct frame *f = decode_window_system_frame (XCAR (rest));
+      Lisp_Object frame;
+
+      XSETFRAME (frame, f);
+      if (!FRAME_VISIBLE_P (f))
+       error ("Frames to be printed must be visible.");
+      tmp = Fcons (frame, tmp);
+    }
+  frames = Fnreverse (tmp);
+
+  /* Make sure the current matrices are up-to-date.  */
+  count = SPECPDL_INDEX ();
+  specbind (Qredisplay_dont_pause, Qt);
+  redisplay_preserve_echo_area (32);
+  unbind_to (count, Qnil);
+
+  block_input ();
+  xg_print_frames_dialog (frames);
+  unblock_input ();
+
+  return Qnil;
+}
+
+static void
+clean_up_dialog (void)
+{
+  pgtk_menu_set_in_use (false);
+}
+
+DEFUN ("x-file-dialog", Fx_file_dialog, Sx_file_dialog, 2, 5, 0,
+       doc: /* Read file name, prompting with PROMPT in directory DIR.
+Use a file selection dialog.  Select DEFAULT-FILENAME in the dialog's file
+selection box, if specified.  If MUSTMATCH is non-nil, the returned file
+or directory must exist.
+
+This function is defined only on PGTK, NS, MS Windows, and X Windows with the
+Motif or Gtk toolkits.  With the Motif toolkit, ONLY-DIR-P is ignored.
+Otherwise, if ONLY-DIR-P is non-nil, the user can select only directories.
+On MS Windows 7 and later, the file selection dialog "remembers" the last
+directory where the user selected a file, and will open that directory
+instead of DIR on subsequent invocations of this function with the same
+value of DIR as in previous invocations; this is standard MS Windows behavior. 
 */)
+  (Lisp_Object prompt, Lisp_Object dir, Lisp_Object default_filename,
+   Lisp_Object mustmatch, Lisp_Object only_dir_p)
+{
+  struct frame *f = SELECTED_FRAME ();
+  char *fn;
+  Lisp_Object file = Qnil;
+  Lisp_Object decoded_file;
+  ptrdiff_t count = SPECPDL_INDEX ();
+  char *cdef_file;
+
+  check_window_system (f);
+
+  if (popup_activated ())
+    error ("Trying to use a menu from within a menu-entry");
+  else
+    pgtk_menu_set_in_use (true);
+
+  CHECK_STRING (prompt);
+  CHECK_STRING (dir);
+
+  /* Prevent redisplay.  */
+  specbind (Qinhibit_redisplay, Qt);
+  record_unwind_protect_void (clean_up_dialog);
+
+  block_input ();
+
+  if (STRINGP (default_filename))
+    cdef_file = SSDATA (default_filename);
+  else
+    cdef_file = SSDATA (dir);
+
+  fn = xg_get_file_name (f, SSDATA (prompt), cdef_file,
+                        !NILP (mustmatch), !NILP (only_dir_p));
+
+  if (fn)
+    {
+      file = build_string (fn);
+      xfree (fn);
+    }
+
+  unblock_input ();
+
+  /* Make "Cancel" equivalent to C-g.  */
+  if (NILP (file))
+    quit ();
+
+  decoded_file = DECODE_FILE (file);
+
+  return unbind_to (count, decoded_file);
+}
+
+DEFUN ("pgtk-backend-display-class", Fpgtk_backend_display_class, 
Spgtk_backend_display_class, 0, 1, "",
+       doc: /* Return the name of the Gdk backend display class of TERMINAL.
+The optional argument TERMINAL specifies which display to ask about.
+TERMINAL should be a terminal object, a frame or a display name (a string).
+If omitted or nil, that stands for the selected frame's display.  */)
+  (Lisp_Object terminal)
+{
+  struct pgtk_display_info *dpyinfo = check_pgtk_display_info (terminal);
+  GdkDisplay *gdpy = dpyinfo->gdpy;
+  const gchar *type_name = G_OBJECT_TYPE_NAME (G_OBJECT (gdpy));
+  return build_string (type_name);
+}
+
+DEFUN ("x-select-font", Fx_select_font, Sx_select_font, 0, 2, 0,
+       doc: /* Read a font using a GTK dialog and return a font spec.
+
+FRAME is the frame on which to pop up the font chooser.  If omitted or
+nil, it defaults to the selected frame. */)
+  (Lisp_Object frame, Lisp_Object ignored)
+{
+  struct frame *f = decode_window_system_frame (frame);
+  Lisp_Object font;
+  Lisp_Object font_param;
+  char *default_name = NULL;
+  ptrdiff_t count = SPECPDL_INDEX ();
+
+  if (popup_activated ())
+    error ("Trying to use a menu from within a menu-entry");
+  else
+    pgtk_menu_set_in_use (true);
+
+  /* Prevent redisplay.  */
+  specbind (Qinhibit_redisplay, Qt);
+  record_unwind_protect_void (clean_up_dialog);
+
+  block_input ();
+
+  XSETFONT (font, FRAME_FONT (f));
+  font_param = Ffont_get (font, QCname);
+  if (STRINGP (font_param))
+    default_name = xlispstrdup (font_param);
+  else
+    {
+      font_param = Fframe_parameter (frame, Qfont_parameter);
+      if (STRINGP (font_param))
+        default_name = xlispstrdup (font_param);
+    }
+
+  font = xg_get_font (f, default_name);
+  xfree (default_name);
+
+  unblock_input ();
+
+  if (NILP (font))
+    quit ();
+
+  return unbind_to (count, font);
+}
+
+/* ==========================================================================
+
+    Lisp interface declaration
+
+   ========================================================================== 
*/
+
+void
+syms_of_pgtkfns (void)
+{
+  DEFSYM (Qfont_parameter, "font-parameter");
+  DEFSYM (Qfontsize, "fontsize");
+  DEFSYM (Qcancel_timer, "cancel-timer");
+  DEFSYM (Qframe_title_format, "frame-title-format");
+  DEFSYM (Qicon_title_format, "icon-title-format");
+  DEFSYM (Qdark, "dark");
+  DEFSYM (Qhide, "hide");
+  DEFSYM (Qresize_mode, "resize-mode");
+
+  DEFVAR_LISP ("x-cursor-fore-pixel", Vx_cursor_fore_pixel,
+              doc: /* A string indicating the foreground color of the cursor 
box.  */);
+  Vx_cursor_fore_pixel = Qnil;
+
+  DEFVAR_LISP ("pgtk-icon-type-alist", Vpgtk_icon_type_alist,
+              doc: /* Alist of elements (REGEXP . IMAGE) for images of icons 
associated to frames.
+If the title of a frame matches REGEXP, then IMAGE.tiff is
+selected as the image of the icon representing the frame when it's
+miniaturized.  If an element is t, then Emacs tries to select an icon
+based on the filetype of the visited file.
+
+The images have to be installed in a folder called English.lproj in the
+Emacs folder.  You have to restart Emacs after installing new icons.
+
+Example: Install an icon Gnus.tiff and execute the following code
+
+(setq pgtk-icon-type-alist
+(append pgtk-icon-type-alist
+\\='((\"^\\\\*\\\\(Group\\\\*$\\\\|Summary \\\\|Article\\\\*$\\\\)\"
+. \"Gnus\"))))
+
+When you miniaturize a Group, Summary or Article frame, Gnus.tiff will
+be used as the image of the icon representing the frame.  */);
+  Vpgtk_icon_type_alist = list1 (Qt);
+
+
+  /* Provide x-toolkit also for GTK.  Internally GTK does not use Xt so it
+     is not an X toolkit in that sense (USE_X_TOOLKIT is not defined).
+     But for a user it is a toolkit for X, and indeed, configure
+     accepts --with-x-toolkit=gtk.  */
+  Fprovide (intern_c_string ("x-toolkit"), Qnil);
+  Fprovide (intern_c_string ("gtk"), Qnil);
+  Fprovide (intern_c_string ("move-toolbar"), Qnil);
+
+  DEFVAR_LISP ("gtk-version-string", Vgtk_version_string,
+              doc: /* Version info for GTK+.  */);
+  {
+    char *ver = g_strdup_printf ("%d.%d.%d",
+                                GTK_MAJOR_VERSION, GTK_MINOR_VERSION,
+                                GTK_MICRO_VERSION);
+    int len = strlen (ver);
+    Vgtk_version_string = make_pure_string (ver, len, len, false);
+    g_free (ver);
+  }
+
+
+  Fprovide (intern_c_string ("cairo"), Qnil);
+
+  DEFVAR_LISP ("cairo-version-string", Vcairo_version_string,
+              doc: /* Version info for cairo.  */);
+  {
+    char *ver = g_strdup_printf ("%d.%d.%d",
+                                CAIRO_VERSION_MAJOR, CAIRO_VERSION_MINOR,
+                                CAIRO_VERSION_MICRO);
+    int len = strlen (ver);
+    Vcairo_version_string = make_pure_string (ver, len, len, false);
+    g_free (ver);
+  }
+
+
+  defsubr (&Spgtk_set_resource);
+  defsubr (&Sxw_display_color_p);      /* this and next called directly by C 
code */
+  defsubr (&Sx_display_grayscale_p);
+  defsubr (&Spgtk_font_name);
+  defsubr (&Sxw_color_defined_p);
+  defsubr (&Sxw_color_values);
+  defsubr (&Sx_server_max_request_size);
+  defsubr (&Sx_display_pixel_width);
+  defsubr (&Sx_display_pixel_height);
+  defsubr (&Spgtk_display_monitor_attributes_list);
+  defsubr (&Spgtk_frame_geometry);
+  defsubr (&Spgtk_frame_edges);
+  defsubr (&Spgtk_frame_restack);
+  defsubr (&Spgtk_set_mouse_absolute_pixel_position);
+  defsubr (&Spgtk_mouse_absolute_pixel_position);
+  defsubr (&Sx_display_mm_width);
+  defsubr (&Sx_display_mm_height);
+  defsubr (&Sx_display_screens);
+  defsubr (&Sx_display_planes);
+  defsubr (&Sx_display_color_cells);
+  defsubr (&Sx_display_visual_class);
+  defsubr (&Sx_display_backing_store);
+  defsubr (&Sx_display_save_under);
+  defsubr (&Sx_create_frame);
+  defsubr (&Sx_open_connection);
+  defsubr (&Sx_close_connection);
+  defsubr (&Sx_display_list);
+
+  defsubr (&Spgtk_hide_others);
+  defsubr (&Spgtk_hide_emacs);
+
+  defsubr (&Sx_show_tip);
+  defsubr (&Sx_hide_tip);
+
+  defsubr (&Sx_export_frames);
+  defsubr (&Spgtk_page_setup_dialog);
+  defsubr (&Spgtk_get_page_setup);
+  defsubr (&Spgtk_print_frames_dialog);
+  defsubr (&Spgtk_backend_display_class);
+
+  defsubr (&Spgtk_set_monitor_scale_factor);
+
+  defsubr (&Sx_file_dialog);
+  defsubr (&Sx_select_font);
+
+  as_status = 0;
+  as_script = Qnil;
+  as_result = 0;
+
+  monitor_scale_factor_alist = Qnil;
+  staticpro (&monitor_scale_factor_alist);
+
+  tip_timer = Qnil;
+  staticpro (&tip_timer);
+  tip_frame = Qnil;
+  staticpro (&tip_frame);
+  tip_last_frame = Qnil;
+  staticpro (&tip_last_frame);
+  tip_last_string = Qnil;
+  staticpro (&tip_last_string);
+  tip_last_parms = Qnil;
+  staticpro (&tip_last_parms);
+
+  /* This is not ifdef:ed, so other builds than GTK can customize it.  */
+  DEFVAR_BOOL ("x-gtk-use-old-file-dialog", x_gtk_use_old_file_dialog,
+              doc: /* Non-nil means prompt with the old GTK file selection 
dialog.
+If nil or if the file selection dialog is not available, the new GTK file
+chooser is used instead.  To turn off all file dialogs set the
+variable `use-file-dialog'.  */);
+  x_gtk_use_old_file_dialog = false;
+
+  DEFVAR_BOOL ("x-gtk-show-hidden-files", x_gtk_show_hidden_files,
+              doc: /* If non-nil, the GTK file chooser will by default show 
hidden files.
+Note that this is just the default, there is a toggle button on the file
+chooser to show or not show hidden files on a case by case basis.  */);
+  x_gtk_show_hidden_files = false;
+
+  DEFVAR_BOOL ("x-gtk-file-dialog-help-text", x_gtk_file_dialog_help_text,
+              doc: /* If non-nil, the GTK file chooser will show additional 
help text.
+If more space for files in the file chooser dialog is wanted, set this to nil
+to turn the additional text off.  */);
+  x_gtk_file_dialog_help_text = true;
+
+  DEFVAR_BOOL ("x-gtk-use-system-tooltips", x_gtk_use_system_tooltips,
+              doc: /* If non-nil with a Gtk+ built Emacs, the Gtk+ tooltip is 
used.
+Otherwise use Emacs own tooltip implementation.
+When using Gtk+ tooltips, the tooltip face is not used.  */);
+  x_gtk_use_system_tooltips = true;
+
+  DEFVAR_LISP ("x-max-tooltip-size", Vx_max_tooltip_size,
+    doc: /* Maximum size for tooltips.
+Value is a pair (COLUMNS . ROWS).  Text larger than this is clipped.  */);
+  Vx_max_tooltip_size = Fcons (make_fixnum (80), make_fixnum (40));
+
+  DEFVAR_LISP ("x-gtk-resize-child-frames", x_gtk_resize_child_frames,
+    doc: /* If non-nil, resize child frames specially with GTK builds.
+If this is nil, resize child frames like any other frames.  This is the
+default and usually works with most desktops.  Some desktop environments
+(GNOME shell in particular when using the mutter window manager),
+however, may refuse to resize a child frame when Emacs is built with
+GTK3.  For those environments, the two settings below are provided.
+
+If this equals the symbol 'hide', Emacs temporarily hides the child
+frame during resizing.  This approach seems to work reliably, may
+however induce some flicker when the frame is made visible again.
+
+If this equals the symbol 'resize-mode', Emacs uses GTK's resize mode to
+always trigger an immediate resize of the child frame.  This method is
+deprecated by GTK and may not work in future versions of that toolkit.
+It also may freeze Emacs when used with other desktop environments.  It
+avoids, however, the unpleasant flicker induced by the hiding approach.
+
+This variable is considered a temporary workaround and will be hopefully
+eliminated in future versions of Emacs.  */);
+  x_gtk_resize_child_frames = Qnil;
+
+
+  DEFSYM (Qmono, "mono");
+  DEFSYM (Qassq_delete_all, "assq-delete-all");
+
+  DEFSYM (Qpdf, "pdf");
+
+  DEFSYM (Qorientation, "orientation");
+  DEFSYM (Qtop_margin, "top-margin");
+  DEFSYM (Qbottom_margin, "bottom-margin");
+  DEFSYM (Qportrait, "portrait");
+  DEFSYM (Qlandscape, "landscape");
+  DEFSYM (Qreverse_portrait, "reverse-portrait");
+  DEFSYM (Qreverse_landscape, "reverse-landscape");
+}
+
+#endif
diff --git a/src/pgtkgui.h b/src/pgtkgui.h
new file mode 100644
index 0000000000..389052631c
--- /dev/null
+++ b/src/pgtkgui.h
@@ -0,0 +1,119 @@
+/* Definitions and headers for communication on the pure Gtk+3.
+   Copyright (C) 1995, 2005, 2008-2022 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/>.  */
+
+#ifndef __PGTKGUI_H__
+#define __PGTKGUI_H__
+
+/* Emulate XCharStruct.  */
+typedef struct _XCharStruct
+{
+  int rbearing;
+  int lbearing;
+  int width;
+  int ascent;
+  int descent;
+} XCharStruct;
+
+/* Fake structure from Xlib.h to represent two-byte characters.  */
+typedef unsigned short unichar;
+typedef unichar XChar2b;
+
+#define STORE_XCHAR2B(chp, b1, b2) \
+  (*(chp) = ((XChar2b)((((b1) & 0x00ff) << 8) | ((b2) & 0x00ff))))
+
+#define XCHAR2B_BYTE1(chp) \
+  ((*(chp) & 0xff00) >> 8)
+
+#define XCHAR2B_BYTE2(chp) \
+  (*(chp) & 0x00ff)
+
+
+typedef struct _GdkCursor *Emacs_Cursor;
+
+typedef void *Color;
+typedef int Window;
+typedef struct _GdkDisplay Display;
+
+/* Xism */
+typedef void *XrmDatabase;
+
+
+/* Some sort of attempt to normalize rectangle handling.. seems a bit much
+   for what is accomplished.  */
+typedef struct
+{
+  int x, y;
+  unsigned width, height;
+} XRectangle;
+
+/* This stuff is needed by frame.c.  */
+#define ForgetGravity          0
+#define NorthWestGravity       1
+#define NorthGravity           2
+#define NorthEastGravity       3
+#define WestGravity            4
+#define CenterGravity          5
+#define EastGravity            6
+#define SouthWestGravity       7
+#define SouthGravity           8
+#define SouthEastGravity       9
+#define StaticGravity          10
+
+#define NoValue                0x0000
+#define XValue         0x0001
+#define YValue         0x0002
+#define WidthValue     0x0004
+#define HeightValue    0x0008
+#define AllValues      0x000F
+#define XNegative      0x0010
+#define YNegative      0x0020
+
+#define USPosition     (1L << 0)       /* user specified x, y */
+#define USSize         (1L << 1)       /* user specified width, height */
+
+#define PPosition      (1L << 2)       /* program specified position */
+#define PSize          (1L << 3)       /* program specified size */
+#define PMinSize       (1L << 4)       /* program specified minimum size */
+#define PMaxSize       (1L << 5)       /* program specified maximum size */
+#define PResizeInc     (1L << 6)       /* program specified resize increments 
*/
+#define PAspect                (1L << 7)       /* program specified min, max 
aspect ratios */
+#define PBaseSize      (1L << 8)       /* program specified base for 
incrementing */
+#define PWinGravity    (1L << 9)       /* program specified window gravity */
+
+
+#define NativeRectangle XRectangle
+
+#define CONVERT_TO_EMACS_RECT(xr, nr)          \
+  ((xr).x     = (nr).x,                                \
+   (xr).y     = (nr).y,                                \
+   (xr).width = (nr).width,                    \
+   (xr).height = (nr).height)
+
+#define CONVERT_FROM_EMACS_RECT(xr, nr)                \
+  ((nr).x      = (xr).x,                       \
+   (nr).y      = (xr).y,                       \
+   (nr).width  = (xr).width,                   \
+   (nr).height = (xr).height)
+
+#define STORE_NATIVE_RECT(nr, px, py, pwidth, pheight) \
+  ((nr).x      = (px),                                 \
+   (nr).y      = (py),                                 \
+   (nr).width  = (pwidth),                             \
+   (nr).height = (pheight))
+
+#endif /* __PGTKGUI_H__ */
diff --git a/src/pgtkim.c b/src/pgtkim.c
new file mode 100644
index 0000000000..8577ba2116
--- /dev/null
+++ b/src/pgtkim.c
@@ -0,0 +1,311 @@
+/* Pure Gtk+-3 communication module.
+
+Copyright (C) 1989, 1993-1994, 2005-2006, 2008-2022 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/>.  */
+
+/* This should be the first include, as it may set up #defines affecting
+   interpretation of even the system includes. */
+#include <config.h>
+
+#include "pgtkterm.h"
+
+static void
+im_context_commit_cb (GtkIMContext * imc, gchar * str, gpointer user_data)
+{
+  struct pgtk_display_info *dpyinfo = user_data;
+  struct frame *f = dpyinfo->im.focused_frame;
+
+  if (dpyinfo->im.context == NULL)
+    return;
+  if (f == NULL)
+    return;
+
+  pgtk_enqueue_string (f, str);
+}
+
+static gboolean
+im_context_retrieve_surrounding_cb (GtkIMContext * imc, gpointer user_data)
+{
+  gtk_im_context_set_surrounding (imc, "", -1, 0);
+  return TRUE;
+}
+
+static gboolean
+im_context_delete_surrounding_cb (GtkIMContext * imc, int offset, int n_chars,
+                                 gpointer user_data)
+{
+  return TRUE;
+}
+
+static Lisp_Object
+make_color_string (PangoAttrColor * pac)
+{
+  char buf[256];
+  sprintf (buf, "#%02x%02x%02x",
+          pac->color.red >> 8, pac->color.green >> 8, pac->color.blue >> 8);
+  return build_string (buf);
+}
+
+static void
+im_context_preedit_changed_cb (GtkIMContext * imc, gpointer user_data)
+{
+  struct pgtk_display_info *dpyinfo = user_data;
+  struct frame *f = dpyinfo->im.focused_frame;
+  char *str;
+  PangoAttrList *attrs;
+  int pos;
+
+  if (dpyinfo->im.context == NULL)
+    return;
+  if (f == NULL)
+    return;
+
+  gtk_im_context_get_preedit_string (imc, &str, &attrs, &pos);
+
+
+  /*
+   * (
+   *   (TEXT (ul . COLOR) (bg . COLOR) (fg . COLOR))
+   *   ...
+   * )
+   */
+  Lisp_Object list = Qnil;
+
+  PangoAttrIterator *iter;
+  iter = pango_attr_list_get_iterator (attrs);
+  do
+    {
+      int st, ed;
+      int has_underline = 0;
+      Lisp_Object part = Qnil;
+
+      pango_attr_iterator_range (iter, &st, &ed);
+
+      if (ed > strlen (str))
+       ed = strlen (str);
+      if (st >= ed)
+       continue;
+
+      Lisp_Object text = make_string (str + st, ed - st);
+      part = Fcons (text, part);
+
+      PangoAttrInt *ul =
+       (PangoAttrInt *) pango_attr_iterator_get (iter, PANGO_ATTR_UNDERLINE);
+      if (ul != NULL)
+       {
+         if (ul->value != PANGO_UNDERLINE_NONE)
+           has_underline = 1;
+       }
+
+      PangoAttrColor *pac;
+      if (has_underline)
+       {
+         pac =
+           (PangoAttrColor *) pango_attr_iterator_get (iter,
+                                                       
PANGO_ATTR_UNDERLINE_COLOR);
+         if (pac != NULL)
+           part = Fcons (Fcons (Qul, make_color_string (pac)), part);
+         else
+           part = Fcons (Fcons (Qul, Qt), part);
+       }
+
+      pac =
+       (PangoAttrColor *) pango_attr_iterator_get (iter,
+                                                   PANGO_ATTR_FOREGROUND);
+      if (pac != NULL)
+       part = Fcons (Fcons (Qfg, make_color_string (pac)), part);
+
+      pac =
+       (PangoAttrColor *) pango_attr_iterator_get (iter,
+                                                   PANGO_ATTR_BACKGROUND);
+      if (pac != NULL)
+       part = Fcons (Fcons (Qbg, make_color_string (pac)), part);
+
+      part = Fnreverse (part);
+      list = Fcons (part, list);
+    }
+  while (pango_attr_iterator_next (iter));
+
+  list = Fnreverse (list);
+  pgtk_enqueue_preedit (f, list);
+
+  g_free (str);
+  pango_attr_list_unref (attrs);
+}
+
+static void
+im_context_preedit_end_cb (GtkIMContext * imc, gpointer user_data)
+{
+  struct pgtk_display_info *dpyinfo = user_data;
+  struct frame *f = dpyinfo->im.focused_frame;
+
+  if (dpyinfo->im.context == NULL)
+    return;
+  if (f == NULL)
+    return;
+
+  pgtk_enqueue_preedit (f, Qnil);
+}
+
+static void
+im_context_preedit_start_cb (GtkIMContext * imc, gpointer user_data)
+{
+}
+
+void
+pgtk_im_focus_in (struct frame *f)
+{
+  struct pgtk_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
+  if (dpyinfo->im.context != NULL)
+    {
+      gtk_im_context_reset (dpyinfo->im.context);
+      gtk_im_context_set_client_window (dpyinfo->im.context,
+                                       gtk_widget_get_window
+                                       (FRAME_GTK_WIDGET (f)));
+      gtk_im_context_focus_in (dpyinfo->im.context);
+    }
+  dpyinfo->im.focused_frame = f;
+}
+
+void
+pgtk_im_focus_out (struct frame *f)
+{
+  struct pgtk_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
+  if (dpyinfo->im.focused_frame == f)
+    {
+      if (dpyinfo->im.context != NULL)
+       {
+         gtk_im_context_reset (dpyinfo->im.context);
+         gtk_im_context_focus_out (dpyinfo->im.context);
+         gtk_im_context_set_client_window (dpyinfo->im.context, NULL);
+       }
+      dpyinfo->im.focused_frame = NULL;
+    }
+}
+
+bool
+pgtk_im_filter_keypress (struct frame *f, GdkEventKey * ev)
+{
+  struct pgtk_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
+  if (dpyinfo->im.context != NULL)
+    {
+      if (gtk_im_context_filter_keypress (dpyinfo->im.context, ev))
+       return true;
+    }
+  return false;
+}
+
+void
+pgtk_im_set_cursor_location (struct frame *f, int x, int y, int width,
+                            int height)
+{
+  struct pgtk_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
+  if (dpyinfo->im.context != NULL && dpyinfo->im.focused_frame == f)
+    {
+      GdkRectangle area = { x, y, width, height };
+      gtk_im_context_set_cursor_location (dpyinfo->im.context, &area);
+    }
+}
+
+static void
+pgtk_im_use_context (struct pgtk_display_info *dpyinfo, bool use_p)
+{
+  if (!use_p)
+    {
+      if (dpyinfo->im.context != NULL)
+       {
+         gtk_im_context_reset (dpyinfo->im.context);
+         gtk_im_context_focus_out (dpyinfo->im.context);
+         gtk_im_context_set_client_window (dpyinfo->im.context, NULL);
+
+         g_object_unref (dpyinfo->im.context);
+         dpyinfo->im.context = NULL;
+       }
+    }
+  else
+    {
+      if (dpyinfo->im.context == NULL)
+       {
+         dpyinfo->im.context = gtk_im_multicontext_new ();
+         g_signal_connect (dpyinfo->im.context, "commit",
+                           G_CALLBACK (im_context_commit_cb), dpyinfo);
+         g_signal_connect (dpyinfo->im.context, "retrieve-surrounding",
+                           G_CALLBACK (im_context_retrieve_surrounding_cb),
+                           dpyinfo);
+         g_signal_connect (dpyinfo->im.context, "delete-surrounding",
+                           G_CALLBACK (im_context_delete_surrounding_cb),
+                           dpyinfo);
+         g_signal_connect (dpyinfo->im.context, "preedit-changed",
+                           G_CALLBACK (im_context_preedit_changed_cb),
+                           dpyinfo);
+         g_signal_connect (dpyinfo->im.context, "preedit-end",
+                           G_CALLBACK (im_context_preedit_end_cb), dpyinfo);
+         g_signal_connect (dpyinfo->im.context, "preedit-start",
+                           G_CALLBACK (im_context_preedit_start_cb),
+                           dpyinfo);
+         gtk_im_context_set_use_preedit (dpyinfo->im.context, TRUE);
+
+         if (dpyinfo->im.focused_frame)
+           pgtk_im_focus_in (dpyinfo->im.focused_frame);
+       }
+    }
+}
+
+void
+pgtk_im_init (struct pgtk_display_info *dpyinfo)
+{
+  dpyinfo->im.context = NULL;
+
+  pgtk_im_use_context (dpyinfo, !NILP 
(Vpgtk_use_im_context_on_new_connection));
+}
+
+void
+pgtk_im_finish (struct pgtk_display_info *dpyinfo)
+{
+  if (dpyinfo->im.context != NULL)
+    g_object_unref (dpyinfo->im.context);
+  dpyinfo->im.context = NULL;
+}
+
+DEFUN ("pgtk-use-im-context", Fpgtk_use_im_context, Spgtk_use_im_context, 1, 
2, 0,
+       doc: /* Set whether to use GtkIMContext. */)
+  (Lisp_Object use_p, Lisp_Object terminal)
+{
+  struct pgtk_display_info *dpyinfo = check_pgtk_display_info (terminal);
+
+  pgtk_im_use_context (dpyinfo, !NILP (use_p));
+
+  return Qnil;
+}
+
+void
+syms_of_pgtkim (void)
+{
+  defsubr (&Spgtk_use_im_context);
+
+  DEFSYM (Qpgtk_refresh_preedit, "pgtk-refresh-preedit");
+  DEFSYM (Qul, "ul");
+  DEFSYM (Qfg, "fg");
+  DEFSYM (Qbg, "bg");
+
+  DEFVAR_LISP ("pgtk-use-im-context-on-new-connection", 
Vpgtk_use_im_context_on_new_connection,
+              doc: /* Whether to use GtkIMContext on a new connection.
+If you want to change it after connection, use the `pgtk-use-im-context'
+function.  */ );
+  Vpgtk_use_im_context_on_new_connection = Qt;
+}
diff --git a/src/pgtkmenu.c b/src/pgtkmenu.c
new file mode 100644
index 0000000000..d1b1bfffb3
--- /dev/null
+++ b/src/pgtkmenu.c
@@ -0,0 +1,1159 @@
+/* Pure GTK3 menu and toolbar module.
+   Copyright (C) 2019-2022 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/>.  */
+
+/*
+ */
+
+
+/* This should be the first include, as it may set up #defines affecting
+   interpretation of even the system includes.  */
+#include <config.h>
+
+#include "lisp.h"
+#include "frame.h"
+#include "window.h"
+#include "character.h"
+#include "buffer.h"
+#include "keymap.h"
+#include "coding.h"
+#include "commands.h"
+#include "blockinput.h"
+#include "termhooks.h"
+#include "keyboard.h"
+#include "menu.h"
+#include "pdumper.h"
+#include "xgselect.h"
+
+#include "gtkutil.h"
+#include <gtk/gtk.h>
+
+/* Flag which when set indicates a dialog or menu has been posted by
+   Xt on behalf of one of the widget sets.  */
+static int popup_activated_flag;
+
+/* Set menu_items_inuse so no other popup menu or dialog is created.  */
+
+void
+pgtk_menu_set_in_use (bool in_use)
+{
+  Lisp_Object frames, frame;
+
+  menu_items_inuse = in_use;
+  popup_activated_flag = in_use;
+
+  /* Don't let frames in `above' z-group obscure popups.  */
+  FOR_EACH_FRAME (frames, frame)
+  {
+    struct frame *f = XFRAME (frame);
+
+    if (in_use && FRAME_Z_GROUP_ABOVE (f))
+      x_set_z_group (f, Qabove_suspended, Qabove);
+    else if (!in_use && FRAME_Z_GROUP_ABOVE_SUSPENDED (f))
+      x_set_z_group (f, Qabove, Qabove_suspended);
+  }
+}
+
+DEFUN ("x-menu-bar-open-internal", Fx_menu_bar_open_internal, 
Sx_menu_bar_open_internal, 0, 1, "i",
+       doc: /* Start key navigation of the menu bar in FRAME.
+       This initially opens the first menu bar item and you can then navigate 
with the
+       arrow keys, select a menu entry with the return key or cancel with the
+       escape key.  If FRAME has no menu bar this function does nothing.
+
+       If FRAME is nil or not given, use the selected frame.  */)
+  (Lisp_Object frame)
+{
+  GtkWidget *menubar;
+  struct frame *f;
+
+  block_input ();
+  f = decode_window_system_frame (frame);
+
+  if (FRAME_EXTERNAL_MENU_BAR (f))
+    set_frame_menubar (f, true);
+
+  menubar = FRAME_X_OUTPUT (f)->menubar_widget;
+  if (menubar)
+    {
+      /* Activate the first menu.  */
+      GList *children = gtk_container_get_children (GTK_CONTAINER (menubar));
+
+      if (children)
+       {
+         g_signal_emit_by_name (children->data, "activate_item");
+         g_list_free (children);
+       }
+    }
+  unblock_input ();
+
+  return Qnil;
+}
+
+/* Loop util popup_activated_flag is set to zero in a callback.
+   Used for popup menus and dialogs. */
+
+static void
+popup_widget_loop (bool do_timers, GtkWidget *widget)
+{
+  ++popup_activated_flag;
+
+  /* Process events in the Gtk event loop until done.  */
+  while (popup_activated_flag)
+    gtk_main_iteration ();
+}
+
+void
+pgtk_activate_menubar (struct frame *f)
+{
+  set_frame_menubar (f, true);
+
+  popup_activated_flag = 1;
+
+  /* f->output_data.pgtk->menubar_active = 1; */
+}
+
+/* This callback is invoked when a dialog or menu is finished being
+   used and has been unposted.  */
+
+static void
+popup_deactivate_callback (GtkWidget *widget, gpointer client_data)
+{
+  popup_activated_flag = 0;
+}
+
+/* Function that finds the frame for WIDGET and shows the HELP text
+   for that widget.
+   F is the frame if known, or NULL if not known.  */
+static void
+show_help_event (struct frame *f, GtkWidget *widget, Lisp_Object help)
+{
+  /* Don't show this tooltip.
+   * Tooltips are always tied to main widget, so stacking order
+   * on Wayland is:
+   *   (above)
+   *   - menu
+   *   - tooltip
+   *   - main widget
+   *   (below)
+   * This is applicable to tooltips for menu, and menu tooltips
+   * are shown below menus.
+   * As a workaround, I entrust Gtk with menu tooltips, and
+   * let emacs not to show menu tooltips.
+   */
+
+#if 0
+  Lisp_Object frame;
+
+  if (f)
+    {
+      XSETFRAME (frame, f);
+      kbd_buffer_store_help_event (frame, help);
+    }
+  else
+    show_help_echo (help, Qnil, Qnil, Qnil);
+#endif
+}
+
+/* Callback called when menu items are highlighted/unhighlighted
+   while moving the mouse over them.  WIDGET is the menu bar or menu
+   popup widget.  ID is its LWLIB_ID.  CALL_DATA contains a pointer to
+   the data structure for the menu item, or null in case of
+   unhighlighting.  */
+
+static void
+menu_highlight_callback (GtkWidget *widget, gpointer call_data)
+{
+  xg_menu_item_cb_data *cb_data;
+  Lisp_Object help;
+
+  cb_data = g_object_get_data (G_OBJECT (widget), XG_ITEM_DATA);
+  if (!cb_data)
+    return;
+
+  help = call_data ? cb_data->help : Qnil;
+
+  /* If popup_activated_flag is greater than 1 we are in a popup menu.
+     Don't pass the frame to show_help_event for those.
+     Passing frame creates an Emacs event.  As we are looping in
+     popup_widget_loop, it won't be handled.  Passing NULL shows the tip
+     directly without using an Emacs event.  This is what the Lucid code
+     does below.  */
+  show_help_event (popup_activated_flag <= 1 ? cb_data->cl_data->f : NULL,
+                  widget, help);
+}
+
+/* Gtk calls callbacks just because we tell it what item should be
+   selected in a radio group.  If this variable is set to a non-zero
+   value, we are creating menus and don't want callbacks right now.
+*/
+static bool xg_crazy_callback_abort;
+
+/* This callback is called from the menu bar pulldown menu
+   when the user makes a selection.
+   Figure out what the user chose
+   and put the appropriate events into the keyboard buffer.  */
+static void
+menubar_selection_callback (GtkWidget *widget, gpointer client_data)
+{
+  xg_menu_item_cb_data *cb_data = client_data;
+
+  if (xg_crazy_callback_abort)
+    return;
+
+  if (!cb_data || !cb_data->cl_data || !cb_data->cl_data->f)
+    return;
+
+  /* For a group of radio buttons, GTK calls the selection callback first
+     for the item that was active before the selection and then for the one 
that
+     is active after the selection.  For C-h k this means we get the help on
+     the deselected item and then the selected item is executed.  Prevent that
+     by ignoring the non-active item.  */
+  if (GTK_IS_RADIO_MENU_ITEM (widget)
+      && !gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (widget)))
+    return;
+
+  /* When a menu is popped down, X generates a focus event (i.e. focus
+     goes back to the frame below the menu).  Since GTK buffers events,
+     we force it out here before the menu selection event.  Otherwise
+     sit-for will exit at once if the focus event follows the menu selection
+     event.  */
+
+  block_input ();
+  while (gtk_events_pending ())
+    gtk_main_iteration ();
+  unblock_input ();
+
+  find_and_call_menu_selection (cb_data->cl_data->f,
+                               cb_data->cl_data->menu_bar_items_used,
+                               cb_data->cl_data->menu_bar_vector,
+                               cb_data->call_data);
+}
+
+/* Recompute all the widgets of frame F, when the menu bar has been
+   changed.  */
+
+static void
+update_frame_menubar (struct frame *f)
+{
+  xg_update_frame_menubar (f);
+}
+
+/* Set the contents of the menubar widgets of frame F.
+   The argument FIRST_TIME is currently ignored;
+   it is set the first time this is called, from initialize_frame_menubar.  */
+
+void
+set_frame_menubar (struct frame *f, bool deep_p)
+{
+  GtkWidget *menubar_widget;
+  Lisp_Object items;
+  widget_value *wv, *first_wv, *prev_wv = 0;
+  int i;
+  int *submenu_start, *submenu_end;
+  bool *submenu_top_level_items;
+  int *submenu_n_panes;
+
+
+  menubar_widget = f->output_data.pgtk->menubar_widget;
+
+  XSETFRAME (Vmenu_updating_frame, f);
+
+  if (!menubar_widget)
+    deep_p = true;
+
+  if (deep_p)
+    {
+      struct buffer *prev = current_buffer;
+      Lisp_Object buffer;
+      ptrdiff_t specpdl_count = SPECPDL_INDEX ();
+      int previous_menu_items_used = f->menu_bar_items_used;
+      Lisp_Object *previous_items
+       = alloca (previous_menu_items_used * sizeof *previous_items);
+      int subitems;
+
+      /* If we are making a new widget, its contents are empty,
+         do always reinitialize them.  */
+      if (!menubar_widget)
+       previous_menu_items_used = 0;
+
+      buffer = XWINDOW (FRAME_SELECTED_WINDOW (f))->contents;
+      specbind (Qinhibit_quit, Qt);
+      /* Don't let the debugger step into this code
+         because it is not reentrant.  */
+      specbind (Qdebug_on_next_call, Qnil);
+
+      record_unwind_save_match_data ();
+      if (NILP (Voverriding_local_map_menu_flag))
+       {
+         specbind (Qoverriding_terminal_local_map, Qnil);
+         specbind (Qoverriding_local_map, Qnil);
+       }
+
+      set_buffer_internal_1 (XBUFFER (buffer));
+
+      /* Run the Lucid hook.  */
+      safe_run_hooks (Qactivate_menubar_hook);
+
+      /* If it has changed current-menubar from previous value,
+         really recompute the menubar from the value.  */
+      if (!NILP (Vlucid_menu_bar_dirty_flag))
+       call0 (Qrecompute_lucid_menubar);
+      safe_run_hooks (Qmenu_bar_update_hook);
+      fset_menu_bar_items (f, menu_bar_items (FRAME_MENU_BAR_ITEMS (f)));
+
+      items = FRAME_MENU_BAR_ITEMS (f);
+
+      /* Save the frame's previous menu bar contents data.  */
+      if (previous_menu_items_used)
+       memcpy (previous_items, xvector_contents (f->menu_bar_vector),
+               previous_menu_items_used * word_size);
+
+      /* Fill in menu_items with the current menu bar contents.
+         This can evaluate Lisp code.  */
+      save_menu_items ();
+
+      menu_items = f->menu_bar_vector;
+      menu_items_allocated = VECTORP (menu_items) ? ASIZE (menu_items) : 0;
+      subitems = ASIZE (items) / 4;
+      submenu_start = alloca ((subitems + 1) * sizeof *submenu_start);
+      submenu_end = alloca (subitems * sizeof *submenu_end);
+      submenu_n_panes = alloca (subitems * sizeof *submenu_n_panes);
+      submenu_top_level_items = alloca (subitems
+                                       * sizeof *submenu_top_level_items);
+      init_menu_items ();
+      for (i = 0; i < subitems; i++)
+       {
+         Lisp_Object key, string, maps;
+
+         key = AREF (items, 4 * i);
+         string = AREF (items, 4 * i + 1);
+         maps = AREF (items, 4 * i + 2);
+         if (NILP (string))
+           break;
+
+         submenu_start[i] = menu_items_used;
+
+         menu_items_n_panes = 0;
+         submenu_top_level_items[i]
+           = parse_single_submenu (key, string, maps);
+         submenu_n_panes[i] = menu_items_n_panes;
+
+         submenu_end[i] = menu_items_used;
+       }
+
+      submenu_start[i] = -1;
+      finish_menu_items ();
+
+      /* Convert menu_items into widget_value trees
+         to display the menu.  This cannot evaluate Lisp code.  */
+
+      wv = make_widget_value ("menubar", NULL, true, Qnil);
+      wv->button_type = BUTTON_TYPE_NONE;
+      first_wv = wv;
+
+      for (i = 0; submenu_start[i] >= 0; i++)
+       {
+         menu_items_n_panes = submenu_n_panes[i];
+         wv = digest_single_submenu (submenu_start[i], submenu_end[i],
+                                     submenu_top_level_items[i]);
+         if (prev_wv)
+           prev_wv->next = wv;
+         else
+           first_wv->contents = wv;
+         /* Don't set wv->name here; GC during the loop might relocate it.  */
+         wv->enabled = true;
+         wv->button_type = BUTTON_TYPE_NONE;
+         prev_wv = wv;
+       }
+
+      set_buffer_internal_1 (prev);
+
+      /* If there has been no change in the Lisp-level contents
+         of the menu bar, skip redisplaying it.  Just exit.  */
+
+      /* Compare the new menu items with the ones computed last time.  */
+      for (i = 0; i < previous_menu_items_used; i++)
+       if (menu_items_used == i
+           || (!EQ (previous_items[i], AREF (menu_items, i))))
+         break;
+      if (i == menu_items_used && i == previous_menu_items_used && i != 0)
+       {
+         /* The menu items have not changed.  Don't bother updating
+            the menus in any form, since it would be a no-op.  */
+         free_menubar_widget_value_tree (first_wv);
+         discard_menu_items ();
+         unbind_to (specpdl_count, Qnil);
+         return;
+       }
+
+      /* The menu items are different, so store them in the frame.  */
+      fset_menu_bar_vector (f, menu_items);
+      f->menu_bar_items_used = menu_items_used;
+
+      /* This undoes save_menu_items.  */
+      unbind_to (specpdl_count, Qnil);
+
+      /* Now GC cannot happen during the lifetime of the widget_value,
+         so it's safe to store data from a Lisp_String.  */
+      wv = first_wv->contents;
+      for (i = 0; i < ASIZE (items); i += 4)
+       {
+         Lisp_Object string;
+         string = AREF (items, i + 1);
+         if (NILP (string))
+           break;
+         wv->name = SSDATA (string);
+         update_submenu_strings (wv->contents);
+         wv = wv->next;
+       }
+
+    }
+  else
+    {
+      /* Make a widget-value tree containing
+         just the top level menu bar strings.  */
+
+      wv = make_widget_value ("menubar", NULL, true, Qnil);
+      wv->button_type = BUTTON_TYPE_NONE;
+      first_wv = wv;
+
+      items = FRAME_MENU_BAR_ITEMS (f);
+      for (i = 0; i < ASIZE (items); i += 4)
+       {
+         Lisp_Object string;
+
+         string = AREF (items, i + 1);
+         if (NILP (string))
+           break;
+
+         wv = make_widget_value (SSDATA (string), NULL, true, Qnil);
+         wv->button_type = BUTTON_TYPE_NONE;
+         /* This prevents lwlib from assuming this
+            menu item is really supposed to be empty.  */
+         /* The intptr_t cast avoids a warning.
+            This value just has to be different from small integers.  */
+         wv->call_data = (void *) (intptr_t) (-1);
+
+         if (prev_wv)
+           prev_wv->next = wv;
+         else
+           first_wv->contents = wv;
+         prev_wv = wv;
+       }
+
+      /* Forget what we thought we knew about what is in the
+         detailed contents of the menu bar menus.
+         Changing the top level always destroys the contents.  */
+      f->menu_bar_items_used = 0;
+    }
+
+  block_input ();
+
+  xg_crazy_callback_abort = true;
+  if (menubar_widget)
+    {
+      /* The fourth arg is DEEP_P, which says to consider the entire
+         menu trees we supply, rather than just the menu bar item names.  */
+      xg_modify_menubar_widgets (menubar_widget,
+                                f,
+                                first_wv,
+                                deep_p,
+                                G_CALLBACK (menubar_selection_callback),
+                                G_CALLBACK (popup_deactivate_callback),
+                                G_CALLBACK (menu_highlight_callback));
+    }
+  else
+    {
+      menubar_widget
+       = xg_create_widget ("menubar", "menubar", f, first_wv,
+                           G_CALLBACK (menubar_selection_callback),
+                           G_CALLBACK (popup_deactivate_callback),
+                           G_CALLBACK (menu_highlight_callback));
+
+      f->output_data.pgtk->menubar_widget = menubar_widget;
+    }
+
+  free_menubar_widget_value_tree (first_wv);
+  update_frame_menubar (f);
+
+  xg_crazy_callback_abort = false;
+
+  unblock_input ();
+}
+
+/* Called from Fx_create_frame to create the initial menubar of a frame
+   before it is mapped, so that the window is mapped with the menubar already
+   there instead of us tacking it on later and thrashing the window after it
+   is visible.  */
+
+void
+initialize_frame_menubar (struct frame *f)
+{
+  /* This function is called before the first chance to redisplay
+     the frame.  It has to be, so the frame will have the right size.  */
+  fset_menu_bar_items (f, menu_bar_items (FRAME_MENU_BAR_ITEMS (f)));
+  set_frame_menubar (f, true);
+}
+
+
+/* x_menu_show actually displays a menu using the panes and items in menu_items
+   and returns the value selected from it.
+   There are two versions of x_menu_show, one for Xt and one for Xlib.
+   Both assume input is blocked by the caller.  */
+
+/* F is the frame the menu is for.
+   X and Y are the frame-relative specified position,
+   relative to the inside upper left corner of the frame F.
+   Bitfield MENUFLAGS bits are:
+   MENU_FOR_CLICK is set if this menu was invoked for a mouse click.
+   MENU_KEYMAPS is set if this menu was specified with keymaps;
+    in that case, we return a list containing the chosen item's value
+    and perhaps also the pane's prefix.
+   TITLE is the specified menu title.
+   ERROR is a place to store an error message string in case of failure.
+   (We return nil on failure, but the value doesn't actually matter.)  */
+
+/* The item selected in the popup menu.  */
+static Lisp_Object *volatile menu_item_selection;
+
+static void
+popup_selection_callback (GtkWidget *widget, gpointer client_data)
+{
+  xg_menu_item_cb_data *cb_data = client_data;
+
+  if (xg_crazy_callback_abort)
+    return;
+  if (cb_data)
+    menu_item_selection = cb_data->call_data;
+}
+
+static void
+pop_down_menu (void *arg)
+{
+  popup_activated_flag = 0;
+  block_input ();
+  gtk_widget_destroy (GTK_WIDGET (arg));
+  unblock_input ();
+}
+
+/* Pop up the menu for frame F defined by FIRST_WV at X/Y and loop until the
+   menu pops down.
+   menu_item_selection will be set to the selection.  */
+static void
+create_and_show_popup_menu (struct frame *f, widget_value * first_wv,
+                           int x, int y, bool for_click)
+{
+  GtkWidget *menu;
+  ptrdiff_t specpdl_count = SPECPDL_INDEX ();
+
+  eassert (FRAME_PGTK_P (f));
+
+  xg_crazy_callback_abort = true;
+  menu = xg_create_widget ("popup", first_wv->name, f, first_wv,
+                          G_CALLBACK (popup_selection_callback),
+                          G_CALLBACK (popup_deactivate_callback),
+                          G_CALLBACK (menu_highlight_callback));
+  xg_crazy_callback_abort = false;
+
+  /* Display the menu.  */
+  gtk_widget_show_all (menu);
+
+  if (for_click)
+    gtk_menu_popup_at_pointer (GTK_MENU (menu),
+                              FRAME_DISPLAY_INFO (f)->last_click_event);
+  else
+    {
+      GdkRectangle rect;
+      rect.x = x;
+      rect.y = y;
+      rect.width = 1;
+      rect.height = 1;
+      gtk_menu_popup_at_rect (GTK_MENU (menu),
+                             gtk_widget_get_window (FRAME_GTK_WIDGET (f)),
+                             &rect,
+                             GDK_GRAVITY_NORTH_WEST, GDK_GRAVITY_NORTH_WEST,
+                             FRAME_DISPLAY_INFO (f)->last_click_event);
+    }
+
+  record_unwind_protect_ptr (pop_down_menu, menu);
+
+  if (gtk_widget_get_mapped (menu))
+    {
+      /* Set this to one.  popup_widget_loop increases it by one, so it becomes
+         two.  show_help_echo uses this to detect popup menus.  */
+      popup_activated_flag = 1;
+      /* Process events that apply to the menu.  */
+      popup_widget_loop (true, menu);
+    }
+
+  unbind_to (specpdl_count, Qnil);
+
+  /* Must reset this manually because the button release event is not passed
+     to Emacs event loop. */
+  FRAME_DISPLAY_INFO (f)->grabbed = 0;
+}
+
+static void
+cleanup_widget_value_tree (void *arg)
+{
+  free_menubar_widget_value_tree (arg);
+}
+
+Lisp_Object
+pgtk_menu_show (struct frame *f, int x, int y, int menuflags,
+               Lisp_Object title, const char **error_name)
+{
+  int i;
+  widget_value *wv, *save_wv = 0, *first_wv = 0, *prev_wv = 0;
+  widget_value **submenu_stack
+    = alloca (menu_items_used * sizeof *submenu_stack);
+  Lisp_Object *subprefix_stack
+    = alloca (menu_items_used * sizeof *subprefix_stack);
+  int submenu_depth = 0;
+
+  ptrdiff_t specpdl_count = SPECPDL_INDEX ();
+
+  eassert (FRAME_PGTK_P (f));
+
+  *error_name = NULL;
+
+  if (!FRAME_GTK_OUTER_WIDGET (f)) {
+    *error_name = "Can't popup from child frames.";
+    return Qnil;
+  }
+
+  if (menu_items_used <= MENU_ITEMS_PANE_LENGTH)
+    {
+      *error_name = "Empty menu";
+      return Qnil;
+    }
+
+  block_input ();
+
+  /* Create a tree of widget_value objects
+     representing the panes and their items.  */
+  wv = make_widget_value ("menu", NULL, true, Qnil);
+  wv->button_type = BUTTON_TYPE_NONE;
+  first_wv = wv;
+  bool first_pane = true;
+
+  /* Loop over all panes and items, filling in the tree.  */
+  i = 0;
+  while (i < menu_items_used)
+    {
+      if (NILP (AREF (menu_items, i)))
+       {
+         submenu_stack[submenu_depth++] = save_wv;
+         save_wv = prev_wv;
+         prev_wv = 0;
+         first_pane = true;
+         i++;
+       }
+      else if (EQ (AREF (menu_items, i), Qlambda))
+       {
+         prev_wv = save_wv;
+         save_wv = submenu_stack[--submenu_depth];
+         first_pane = false;
+         i++;
+       }
+      else if (EQ (AREF (menu_items, i), Qt) && submenu_depth != 0)
+       i += MENU_ITEMS_PANE_LENGTH;
+      /* Ignore a nil in the item list.
+         It's meaningful only for dialog boxes.  */
+      else if (EQ (AREF (menu_items, i), Qquote))
+       i += 1;
+      else if (EQ (AREF (menu_items, i), Qt))
+       {
+         /* Create a new pane.  */
+         Lisp_Object pane_name, prefix;
+         const char *pane_string;
+
+         pane_name = AREF (menu_items, i + MENU_ITEMS_PANE_NAME);
+         prefix = AREF (menu_items, i + MENU_ITEMS_PANE_PREFIX);
+
+#ifndef HAVE_MULTILINGUAL_MENU
+         if (STRINGP (pane_name) && STRING_MULTIBYTE (pane_name))
+           {
+             pane_name = ENCODE_MENU_STRING (pane_name);
+             ASET (menu_items, i + MENU_ITEMS_PANE_NAME, pane_name);
+           }
+#endif
+         pane_string = (NILP (pane_name) ? "" : SSDATA (pane_name));
+         /* If there is just one top-level pane, put all its items directly
+            under the top-level menu.  */
+         if (menu_items_n_panes == 1)
+           pane_string = "";
+
+         /* If the pane has a meaningful name,
+            make the pane a top-level menu item
+            with its items as a submenu beneath it.  */
+         if (!(menuflags & MENU_KEYMAPS) && strcmp (pane_string, ""))
+           {
+             wv = make_widget_value (pane_string, NULL, true, Qnil);
+             if (save_wv)
+               save_wv->next = wv;
+             else
+               first_wv->contents = wv;
+             if ((menuflags & MENU_KEYMAPS) && !NILP (prefix))
+               wv->name++;
+             wv->button_type = BUTTON_TYPE_NONE;
+             save_wv = wv;
+             prev_wv = 0;
+           }
+         else if (first_pane)
+           {
+             save_wv = wv;
+             prev_wv = 0;
+           }
+         first_pane = false;
+         i += MENU_ITEMS_PANE_LENGTH;
+       }
+      else
+       {
+         /* Create a new item within current pane.  */
+         Lisp_Object item_name, enable, descrip, def, type, selected, help;
+         item_name = AREF (menu_items, i + MENU_ITEMS_ITEM_NAME);
+         enable = AREF (menu_items, i + MENU_ITEMS_ITEM_ENABLE);
+         descrip = AREF (menu_items, i + MENU_ITEMS_ITEM_EQUIV_KEY);
+         def = AREF (menu_items, i + MENU_ITEMS_ITEM_DEFINITION);
+         type = AREF (menu_items, i + MENU_ITEMS_ITEM_TYPE);
+         selected = AREF (menu_items, i + MENU_ITEMS_ITEM_SELECTED);
+         help = AREF (menu_items, i + MENU_ITEMS_ITEM_HELP);
+
+#ifndef HAVE_MULTILINGUAL_MENU
+         if (STRINGP (item_name) && STRING_MULTIBYTE (item_name))
+           {
+             item_name = ENCODE_MENU_STRING (item_name);
+             ASET (menu_items, i + MENU_ITEMS_ITEM_NAME, item_name);
+           }
+
+         if (STRINGP (descrip) && STRING_MULTIBYTE (descrip))
+           {
+             descrip = ENCODE_MENU_STRING (descrip);
+             ASET (menu_items, i + MENU_ITEMS_ITEM_EQUIV_KEY, descrip);
+           }
+#endif /* not HAVE_MULTILINGUAL_MENU */
+
+         wv = make_widget_value (SSDATA (item_name), NULL, !NILP (enable),
+                                 STRINGP (help) ? help : Qnil);
+         if (prev_wv)
+           prev_wv->next = wv;
+         else
+           save_wv->contents = wv;
+         if (!NILP (descrip))
+           wv->key = SSDATA (descrip);
+         /* If this item has a null value,
+            make the call_data null so that it won't display a box
+            when the mouse is on it.  */
+         wv->call_data = !NILP (def) ? aref_addr (menu_items, i) : 0;
+
+         if (NILP (type))
+           wv->button_type = BUTTON_TYPE_NONE;
+         else if (EQ (type, QCtoggle))
+           wv->button_type = BUTTON_TYPE_TOGGLE;
+         else if (EQ (type, QCradio))
+           wv->button_type = BUTTON_TYPE_RADIO;
+         else
+           emacs_abort ();
+
+         wv->selected = !NILP (selected);
+
+         prev_wv = wv;
+
+         i += MENU_ITEMS_ITEM_LENGTH;
+       }
+    }
+
+  /* Deal with the title, if it is non-nil.  */
+  if (!NILP (title))
+    {
+      widget_value *wv_title;
+      widget_value *wv_sep1 = make_widget_value ("--", NULL, false, Qnil);
+      widget_value *wv_sep2 = make_widget_value ("--", NULL, false, Qnil);
+
+      wv_sep2->next = first_wv->contents;
+      wv_sep1->next = wv_sep2;
+
+#ifndef HAVE_MULTILINGUAL_MENU
+      if (STRING_MULTIBYTE (title))
+       title = ENCODE_MENU_STRING (title);
+#endif
+
+      wv_title = make_widget_value (SSDATA (title), NULL, true, Qnil);
+      wv_title->button_type = BUTTON_TYPE_NONE;
+      wv_title->next = wv_sep1;
+      first_wv->contents = wv_title;
+    }
+
+  /* No selection has been chosen yet.  */
+  menu_item_selection = 0;
+
+  /* Make sure to free the widget_value objects we used to specify the
+     contents even with longjmp.  */
+  record_unwind_protect_ptr (cleanup_widget_value_tree, first_wv);
+
+  /* Actually create and show the menu until popped down.  */
+  create_and_show_popup_menu (f, first_wv, x, y, menuflags & MENU_FOR_CLICK);
+
+  unbind_to (specpdl_count, Qnil);
+
+  /* Find the selected item, and its pane, to return
+     the proper value.  */
+  if (menu_item_selection != 0)
+    {
+      Lisp_Object prefix, entry;
+
+      prefix = entry = Qnil;
+      i = 0;
+      while (i < menu_items_used)
+       {
+         if (NILP (AREF (menu_items, i)))
+           {
+             subprefix_stack[submenu_depth++] = prefix;
+             prefix = entry;
+             i++;
+           }
+         else if (EQ (AREF (menu_items, i), Qlambda))
+           {
+             prefix = subprefix_stack[--submenu_depth];
+             i++;
+           }
+         else if (EQ (AREF (menu_items, i), Qt))
+           {
+             prefix = AREF (menu_items, i + MENU_ITEMS_PANE_PREFIX);
+             i += MENU_ITEMS_PANE_LENGTH;
+           }
+         /* Ignore a nil in the item list.
+            It's meaningful only for dialog boxes.  */
+         else if (EQ (AREF (menu_items, i), Qquote))
+           i += 1;
+         else
+           {
+             entry = AREF (menu_items, i + MENU_ITEMS_ITEM_VALUE);
+             if (menu_item_selection == aref_addr (menu_items, i))
+               {
+                 if (menuflags & MENU_KEYMAPS)
+                   {
+                     int j;
+
+                     entry = list1 (entry);
+                     if (!NILP (prefix))
+                       entry = Fcons (prefix, entry);
+                     for (j = submenu_depth - 1; j >= 0; j--)
+                       if (!NILP (subprefix_stack[j]))
+                         entry = Fcons (subprefix_stack[j], entry);
+                   }
+                 unblock_input ();
+                 return entry;
+               }
+             i += MENU_ITEMS_ITEM_LENGTH;
+           }
+       }
+    }
+  else if (!(menuflags & MENU_FOR_CLICK))
+    {
+      unblock_input ();
+      /* Make "Cancel" equivalent to C-g.  */
+      quit ();
+    }
+
+  unblock_input ();
+  return Qnil;
+}
+
+static void
+dialog_selection_callback (GtkWidget *widget, gpointer client_data)
+{
+  /* Treat the pointer as an integer.  There's no problem
+     as long as pointers have enough bits to hold small integers.  */
+  if ((intptr_t) client_data != -1)
+    menu_item_selection = client_data;
+
+  popup_activated_flag = 0;
+}
+
+/* Pop up the dialog for frame F defined by FIRST_WV and loop until the
+   dialog pops down.
+   menu_item_selection will be set to the selection.  */
+static void
+create_and_show_dialog (struct frame *f, widget_value *first_wv)
+{
+  GtkWidget *menu;
+
+  eassert (FRAME_PGTK_P (f));
+
+  menu = xg_create_widget ("dialog", first_wv->name, f, first_wv,
+                          G_CALLBACK (dialog_selection_callback),
+                          G_CALLBACK (popup_deactivate_callback), 0);
+
+  if (menu)
+    {
+      ptrdiff_t specpdl_count = SPECPDL_INDEX ();
+      record_unwind_protect_ptr (pop_down_menu, menu);
+
+      /* Display the menu.  */
+      gtk_widget_show_all (menu);
+
+      /* Process events that apply to the menu.  */
+      popup_widget_loop (true, menu);
+
+      unbind_to (specpdl_count, Qnil);
+    }
+}
+
+static const char *button_names[] = {
+  "button1", "button2", "button3", "button4", "button5",
+  "button6", "button7", "button8", "button9", "button10"
+};
+
+Lisp_Object
+pgtk_dialog_show (struct frame *f, Lisp_Object title,
+                 Lisp_Object header, const char **error_name)
+{
+  int i, nb_buttons = 0;
+  char dialog_name[6];
+
+  widget_value *wv, *first_wv = 0, *prev_wv = 0;
+
+  /* Number of elements seen so far, before boundary.  */
+  int left_count = 0;
+  /* Whether we've seen the boundary between left-hand elts and right-hand.  */
+  bool boundary_seen = false;
+
+  ptrdiff_t specpdl_count = SPECPDL_INDEX ();
+
+  eassert (FRAME_PGTK_P (f));
+
+  *error_name = NULL;
+
+  if (!FRAME_GTK_OUTER_WIDGET (f)) {
+    *error_name = "Can't popup from child frames.";
+    return Qnil;
+  }
+
+  if (menu_items_n_panes > 1)
+    {
+      *error_name = "Multiple panes in dialog box";
+      return Qnil;
+    }
+
+  /* Create a tree of widget_value objects
+     representing the text label and buttons.  */
+  {
+    Lisp_Object pane_name;
+    const char *pane_string;
+    pane_name = AREF (menu_items, MENU_ITEMS_PANE_NAME);
+    pane_string = (NILP (pane_name) ? "" : SSDATA (pane_name));
+    prev_wv = make_widget_value ("message", (char *) pane_string, true, Qnil);
+    first_wv = prev_wv;
+
+    /* Loop over all panes and items, filling in the tree.  */
+    i = MENU_ITEMS_PANE_LENGTH;
+    while (i < menu_items_used)
+      {
+
+       /* Create a new item within current pane.  */
+       Lisp_Object item_name, enable, descrip;
+       item_name = AREF (menu_items, i + MENU_ITEMS_ITEM_NAME);
+       enable = AREF (menu_items, i + MENU_ITEMS_ITEM_ENABLE);
+       descrip = AREF (menu_items, i + MENU_ITEMS_ITEM_EQUIV_KEY);
+
+       if (NILP (item_name))
+         {
+           free_menubar_widget_value_tree (first_wv);
+           *error_name = "Submenu in dialog items";
+           return Qnil;
+         }
+       if (EQ (item_name, Qquote))
+         {
+           /* This is the boundary between left-side elts
+              and right-side elts.  Stop incrementing right_count.  */
+           boundary_seen = true;
+           i++;
+           continue;
+         }
+       if (nb_buttons >= 9)
+         {
+           free_menubar_widget_value_tree (first_wv);
+           *error_name = "Too many dialog items";
+           return Qnil;
+         }
+
+       wv = make_widget_value (button_names[nb_buttons],
+                               SSDATA (item_name), !NILP (enable), Qnil);
+       prev_wv->next = wv;
+       if (!NILP (descrip))
+         wv->key = SSDATA (descrip);
+       wv->call_data = aref_addr (menu_items, i);
+       prev_wv = wv;
+
+       if (!boundary_seen)
+         left_count++;
+
+       nb_buttons++;
+       i += MENU_ITEMS_ITEM_LENGTH;
+      }
+
+    /* If the boundary was not specified,
+       by default put half on the left and half on the right.  */
+    if (!boundary_seen)
+      left_count = nb_buttons - nb_buttons / 2;
+
+    wv = make_widget_value (dialog_name, NULL, false, Qnil);
+
+    /*  Frame title: 'Q' = Question, 'I' = Information.
+       Can also have 'E' = Error if, one day, we want
+       a popup for errors. */
+    if (NILP (header))
+      dialog_name[0] = 'Q';
+    else
+      dialog_name[0] = 'I';
+
+    /* Dialog boxes use a really stupid name encoding
+       which specifies how many buttons to use
+       and how many buttons are on the right. */
+    dialog_name[1] = '0' + nb_buttons;
+    dialog_name[2] = 'B';
+    dialog_name[3] = 'R';
+    /* Number of buttons to put on the right.  */
+    dialog_name[4] = '0' + nb_buttons - left_count;
+    dialog_name[5] = 0;
+    wv->contents = first_wv;
+    first_wv = wv;
+  }
+
+  /* No selection has been chosen yet.  */
+  menu_item_selection = 0;
+
+  /* Make sure to free the widget_value objects we used to specify the
+     contents even with longjmp.  */
+  record_unwind_protect_ptr (cleanup_widget_value_tree, first_wv);
+
+  /* Actually create and show the dialog.  */
+  create_and_show_dialog (f, first_wv);
+
+  unbind_to (specpdl_count, Qnil);
+
+  /* Find the selected item, and its pane, to return
+     the proper value.  */
+  if (menu_item_selection != 0)
+    {
+      i = 0;
+      while (i < menu_items_used)
+       {
+         Lisp_Object entry;
+
+         if (EQ (AREF (menu_items, i), Qt))
+           i += MENU_ITEMS_PANE_LENGTH;
+         else if (EQ (AREF (menu_items, i), Qquote))
+           {
+             /* This is the boundary between left-side elts and
+                right-side elts.  */
+             ++i;
+           }
+         else
+           {
+             entry = AREF (menu_items, i + MENU_ITEMS_ITEM_VALUE);
+             if (menu_item_selection == aref_addr (menu_items, i))
+               return entry;
+             i += MENU_ITEMS_ITEM_LENGTH;
+           }
+       }
+    }
+  else
+    /* Make "Cancel" equivalent to C-g.  */
+    quit ();
+
+  return Qnil;
+}
+
+Lisp_Object
+pgtk_popup_dialog (struct frame *f, Lisp_Object header, Lisp_Object contents)
+{
+  Lisp_Object title;
+  const char *error_name;
+  Lisp_Object selection;
+  ptrdiff_t specpdl_count = SPECPDL_INDEX ();
+
+  check_window_system (f);
+
+  /* Decode the dialog items from what was specified.  */
+  title = Fcar (contents);
+  CHECK_STRING (title);
+  record_unwind_protect_void (unuse_menu_items);
+
+  if (NILP (Fcar (Fcdr (contents))))
+    /* No buttons specified, add an "Ok" button so users can pop down
+       the dialog.  Also, the lesstif/motif version crashes if there are
+       no buttons.  */
+    contents = list2 (title, Fcons (build_string ("Ok"), Qt));
+
+  list_of_panes (list1 (contents));
+
+  /* Display them in a dialog box.  */
+  block_input ();
+  selection = pgtk_dialog_show (f, title, header, &error_name);
+  unblock_input ();
+
+  unbind_to (specpdl_count, Qnil);
+  discard_menu_items ();
+
+  if (error_name)
+    error ("%s", error_name);
+  return selection;
+}
+
+/* Detect if a dialog or menu has been posted.  MSDOS has its own
+   implementation on msdos.c.  */
+
+int
+popup_activated (void)
+{
+  return popup_activated_flag;
+}
+
+/* The following is used by delayed window autoselection.  */
+
+DEFUN ("menu-or-popup-active-p", Fmenu_or_popup_active_p, 
Smenu_or_popup_active_p, 0, 0, 0,
+       doc: /* Return t if a menu or popup dialog is active.
+\(On MS Windows, this refers to the selected frame.)  */)
+  (void)
+{
+  return (popup_activated ())? Qt : Qnil;
+}
+
+static void syms_of_pgtkmenu_for_pdumper (void);
+
+void
+syms_of_pgtkmenu (void)
+{
+  DEFSYM (Qdebug_on_next_call, "debug-on-next-call");
+  defsubr (&Smenu_or_popup_active_p);
+
+  DEFSYM (Qframe_monitor_workarea, "frame-monitor-workarea");
+
+  defsubr (&Sx_menu_bar_open_internal);
+  Ffset (intern_c_string ("accelerate-menu"),
+        intern_c_string (Sx_menu_bar_open_internal.s.symbol_name));
+
+  pdumper_do_now_and_after_load (syms_of_pgtkmenu_for_pdumper);
+}
+
+static void
+syms_of_pgtkmenu_for_pdumper (void)
+{
+}
diff --git a/src/pgtkselect.c b/src/pgtkselect.c
new file mode 100644
index 0000000000..23a79895d5
--- /dev/null
+++ b/src/pgtkselect.c
@@ -0,0 +1,632 @@
+/* Gtk selection processing for emacs.
+   Copyright (C) 1993-1994, 2005-2006, 2008-2022 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/>.  */
+
+/*
+Originally by Carl Edman
+Updated by Christian Limpach (chris@nice.ch)
+OpenStep/Rhapsody port by Scott Bender (sbender@harmony-ds.com)
+macOS/Aqua port by Christophe de Dinechin (descubes@earthlink.net)
+GNUstep port and post-20 update by Adrian Robert (arobert@cogsci.ucsd.edu)
+*/
+
+/* This should be the first include, as it may set up #defines affecting
+   interpretation of even the system includes.  */
+#include <config.h>
+
+#include "lisp.h"
+#include "pgtkterm.h"
+#include "termhooks.h"
+#include "keyboard.h"
+#include "pgtkselect.h"
+#include <gdk/gdk.h>
+
+#if 0
+static Lisp_Object Vselection_alist;
+#endif
+
+static GQuark quark_primary_data = 0;
+static GQuark quark_primary_size = 0;
+static GQuark quark_secondary_data = 0;
+static GQuark quark_secondary_size = 0;
+static GQuark quark_clipboard_data = 0;
+static GQuark quark_clipboard_size = 0;
+
+/* ==========================================================================
+
+    Internal utility functions
+
+   ========================================================================== 
*/
+
+/* From a Lisp_Object, return a suitable frame for selection
+   operations.  OBJECT may be a frame, a terminal object, or nil
+   (which stands for the selected frame--or, if that is not an pgtk
+   frame, the first pgtk display on the list).  If no suitable frame can
+   be found, return NULL.  */
+
+static struct frame *
+frame_for_pgtk_selection (Lisp_Object object)
+{
+  Lisp_Object tail, frame;
+  struct frame *f;
+
+  if (NILP (object))
+    {
+      f = XFRAME (selected_frame);
+      if (FRAME_PGTK_P (f) && FRAME_LIVE_P (f))
+       return f;
+
+      FOR_EACH_FRAME (tail, frame)
+      {
+       f = XFRAME (frame);
+       if (FRAME_PGTK_P (f) && FRAME_LIVE_P (f))
+         return f;
+      }
+    }
+  else if (TERMINALP (object))
+    {
+      struct terminal *t = decode_live_terminal (object);
+
+      if (t->type == output_pgtk)
+       FOR_EACH_FRAME (tail, frame)
+       {
+         f = XFRAME (frame);
+         if (FRAME_LIVE_P (f) && f->terminal == t)
+           return f;
+       }
+    }
+  else if (FRAMEP (object))
+    {
+      f = XFRAME (object);
+      if (FRAME_PGTK_P (f) && FRAME_LIVE_P (f))
+       return f;
+    }
+
+  return NULL;
+}
+
+static GtkClipboard *
+symbol_to_gtk_clipboard (GtkWidget * widget, Lisp_Object symbol)
+{
+  GdkAtom atom;
+
+  CHECK_SYMBOL (symbol);
+  if (NILP (symbol))
+    {
+      atom = GDK_SELECTION_PRIMARY;
+    }
+  else if (EQ (symbol, QCLIPBOARD))
+    {
+      atom = GDK_SELECTION_CLIPBOARD;
+    }
+  else if (EQ (symbol, QPRIMARY))
+    {
+      atom = GDK_SELECTION_PRIMARY;
+    }
+  else if (EQ (symbol, QSECONDARY))
+    {
+      atom = GDK_SELECTION_SECONDARY;
+    }
+  else if (EQ (symbol, Qt))
+    {
+      atom = GDK_SELECTION_SECONDARY;
+    }
+  else
+    {
+      atom = 0;
+      error ("Bad selection");
+    }
+
+  return gtk_widget_get_clipboard (widget, atom);
+}
+
+static void
+selection_type_to_quarks (GdkAtom type, GQuark * quark_data,
+                         GQuark * quark_size)
+{
+  if (type == GDK_SELECTION_PRIMARY)
+    {
+      *quark_data = quark_primary_data;
+      *quark_size = quark_primary_size;
+    }
+  else if (type == GDK_SELECTION_SECONDARY)
+    {
+      *quark_data = quark_secondary_data;
+      *quark_size = quark_secondary_size;
+    }
+  else if (type == GDK_SELECTION_CLIPBOARD)
+    {
+      *quark_data = quark_clipboard_data;
+      *quark_size = quark_clipboard_size;
+    }
+  else
+    {
+      /* fixme: Is it safe to use 'error' here? */
+      error ("Unknown selection type.");
+    }
+}
+
+static void
+get_func (GtkClipboard * cb, GtkSelectionData * data, guint info,
+         gpointer user_data_or_owner)
+{
+  GObject *obj = G_OBJECT (user_data_or_owner);
+  const char *str;
+  int size;
+  GQuark quark_data, quark_size;
+
+  selection_type_to_quarks (gtk_clipboard_get_selection (cb), &quark_data,
+                           &quark_size);
+
+  str = g_object_get_qdata (obj, quark_data);
+  size = GPOINTER_TO_SIZE (g_object_get_qdata (obj, quark_size));
+  gtk_selection_data_set_text (data, str, size);
+}
+
+static void
+clear_func (GtkClipboard * cb, gpointer user_data_or_owner)
+{
+  GObject *obj = G_OBJECT (user_data_or_owner);
+  GQuark quark_data, quark_size;
+
+  selection_type_to_quarks (gtk_clipboard_get_selection (cb), &quark_data,
+                           &quark_size);
+
+  g_object_set_qdata (obj, quark_data, NULL);
+  g_object_set_qdata (obj, quark_size, 0);
+}
+
+
+/* ==========================================================================
+
+    Functions used externally
+
+   ========================================================================== 
*/
+
+void
+pgtk_selection_init (void)
+{
+  if (quark_primary_data == 0)
+    {
+      quark_primary_data = g_quark_from_static_string ("pgtk-primary-data");
+      quark_primary_size = g_quark_from_static_string ("pgtk-primary-size");
+      quark_secondary_data =
+       g_quark_from_static_string ("pgtk-secondary-data");
+      quark_secondary_size =
+       g_quark_from_static_string ("pgtk-secondary-size");
+      quark_clipboard_data =
+       g_quark_from_static_string ("pgtk-clipboard-data");
+      quark_clipboard_size =
+       g_quark_from_static_string ("pgtk-clipboard-size");
+    }
+}
+
+void
+pgtk_selection_lost (GtkWidget * widget, GdkEventSelection * event,
+                    gpointer user_data)
+{
+  GQuark quark_data, quark_size;
+
+  selection_type_to_quarks (event->selection, &quark_data, &quark_size);
+
+  g_object_set_qdata (G_OBJECT (widget), quark_data, NULL);
+  g_object_set_qdata (G_OBJECT (widget), quark_size, 0);
+}
+
+static bool
+pgtk_selection_usable (void)
+{
+  if (pgtk_enable_selection_on_multi_display)
+    return true;
+
+  /*
+   * 
https://github.com/GNOME/gtk/blob/gtk-3-24/gdk/wayland/gdkselection-wayland.c#L1033
+   *
+   * Gdk uses gdk_display_get_default() when handling selections, so
+   * selections don't work properly on multi-display environment.
+   *
+   * ----------------
+   * #include <gtk/gtk.h>
+   *
+   * static GtkWidget *top1, *top2;
+   *
+   * int main (int argc, char **argv)
+   * {
+   *     GtkWidget *w;
+   *     GtkTextBuffer *buf;
+   *
+   *     gtk_init (&argc, &argv);
+   *
+   *     static char *text = "\
+   * It is fine today.\n\
+   * It will be fine tomorrow too.\n\
+   * It is too hot.";
+   *
+   *     top1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+   *     gtk_window_set_title (GTK_WINDOW (top1), "default");
+   *     gtk_widget_show (top1);
+   *     w = gtk_text_view_new ();
+   *     gtk_container_add (GTK_CONTAINER (top1), w);
+   *     gtk_widget_show (w);
+   *     buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (w));
+   *     gtk_text_buffer_insert_at_cursor (buf, text, strlen (text));
+   *     gtk_text_buffer_add_selection_clipboard (buf, 
gtk_widget_get_clipboard (w, GDK_SELECTION_PRIMARY));
+   *
+   *     unsetenv ("GDK_BACKEND");
+   *     GdkDisplay *gdpy;
+   *     const char *dpyname2;
+   *     if (strcmp (G_OBJECT_TYPE_NAME (gtk_widget_get_window (top1)), 
"GdkWaylandWindow") == 0)
+   *         dpyname2 = ":0";
+   *     else
+   *         dpyname2 = "wayland-0";
+   *     gdpy = gdk_display_open (dpyname2);
+   *     top2 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+   *     gtk_window_set_title (GTK_WINDOW (top2), dpyname2);
+   *     gtk_window_set_screen (GTK_WINDOW (top2), 
gdk_display_get_default_screen (gdpy));
+   *     gtk_widget_show (top2);
+   *     w = gtk_text_view_new ();
+   *     gtk_container_add (GTK_CONTAINER (top2), w);
+   *     gtk_widget_show (w);
+   *     buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (w));
+   *     gtk_text_buffer_insert_at_cursor (buf, text, strlen (text));
+   *     gtk_text_buffer_add_selection_clipboard (buf, 
gtk_widget_get_clipboard (w, GDK_SELECTION_PRIMARY));
+   *
+   *     gtk_main ();
+   *
+   *     return 0;
+   * }
+   * ----------------
+   *
+   * This code fails if
+   *   GDK_BACKEND=x11 ./test
+   * and select on both of windows.
+   *
+   * ----------------
+   * (test:15345): GLib-GObject-CRITICAL **: 01:56:38.041: g_object_ref: 
assertion 'G_IS_OBJECT (object)' failed
+   *
+   * (test:15345): GLib-GObject-CRITICAL **: 01:56:38.042: g_object_ref: 
assertion 'G_IS_OBJECT (object)' failed
+   *
+   * (test:15345): GLib-GObject-CRITICAL **: 01:56:39.113: g_object_ref: 
assertion 'G_IS_OBJECT (object)' failed
+   *
+   * (test:15345): GLib-GObject-CRITICAL **: 01:56:39.113: g_object_ref: 
assertion 'G_IS_OBJECT (object)' failed
+   * ----------------
+   * (gtk-3.24.10)
+   *
+   * This function checks whether selections work by the number of displays.
+   * If you use more than 2 displays, then selection is disabled.
+   */
+
+  GdkDisplayManager *dpyman = gdk_display_manager_get ();
+  GSList *list = gdk_display_manager_list_displays (dpyman);
+  int len = g_slist_length (list);
+  g_slist_free (list);
+  return len < 2;
+}
+
+/* ==========================================================================
+
+    Lisp Defuns
+
+   ========================================================================== 
*/
+
+
+DEFUN ("pgtk-own-selection-internal", Fpgtk_own_selection_internal, 
Spgtk_own_selection_internal, 2, 3, 0,
+       doc: /* Assert an X selection of type SELECTION and value VALUE.
+SELECTION is a symbol, typically `PRIMARY', `SECONDARY', or `CLIPBOARD'.
+\(Those are literal upper-case symbol names, since that's what X expects.)
+VALUE is typically a string, or a cons of two markers, but may be
+anything that the functions on `selection-converter-alist' know about.
+
+FRAME should be a frame that should own the selection.  If omitted or
+nil, it defaults to the selected frame. */)
+  (Lisp_Object selection, Lisp_Object value, Lisp_Object frame)
+{
+  Lisp_Object successful_p = Qnil;
+  Lisp_Object target_symbol, rest;
+  GtkClipboard *cb;
+  struct frame *f;
+  GQuark quark_data, quark_size;
+
+  check_window_system (NULL);
+
+  if (!pgtk_selection_usable ())
+    return Qnil;
+
+  if (NILP (frame))
+    frame = selected_frame;
+  if (!FRAME_LIVE_P (XFRAME (frame)) || !FRAME_PGTK_P (XFRAME (frame)))
+    error ("pgtk selection unavailable for this frame");
+  f = XFRAME (frame);
+
+  cb = symbol_to_gtk_clipboard (FRAME_GTK_WIDGET (f), selection);
+  selection_type_to_quarks (gtk_clipboard_get_selection (cb), &quark_data,
+                           &quark_size);
+
+  /* We only support copy of text.  */
+  target_symbol = QTEXT;
+  if (STRINGP (value))
+    {
+      GtkTargetList *list;
+      GtkTargetEntry *targets;
+      gint n_targets;
+      GtkWidget *widget;
+
+      list = gtk_target_list_new (NULL, 0);
+      gtk_target_list_add_text_targets (list, 0);
+
+      {
+       /* text/plain: Strings encoded by Gtk are not correctly decoded by 
Chromium(Wayland). */
+       GdkAtom atom_text_plain = gdk_atom_intern ("text/plain", false);
+       gtk_target_list_remove (list, atom_text_plain);
+      }
+
+      targets = gtk_target_table_new_from_list (list, &n_targets);
+
+      int size = SBYTES (value);
+      gchar *str = xmalloc (size + 1);
+      memcpy (str, SSDATA (value), size);
+      str[size] = '\0';
+
+      widget = FRAME_GTK_WIDGET (f);
+      g_object_set_qdata_full (G_OBJECT (widget), quark_data, str, xfree);
+      g_object_set_qdata_full (G_OBJECT (widget), quark_size,
+                              GSIZE_TO_POINTER (size), NULL);
+
+      if (gtk_clipboard_set_with_owner (cb,
+                                       targets, n_targets,
+                                       get_func, clear_func,
+                                       G_OBJECT (FRAME_GTK_WIDGET (f))))
+       {
+         successful_p = Qt;
+       }
+      gtk_clipboard_set_can_store (cb, NULL, 0);
+
+      gtk_target_table_free (targets, n_targets);
+      gtk_target_list_unref (list);
+    }
+
+  if (!EQ (Vpgtk_sent_selection_hooks, Qunbound))
+    {
+      /* FIXME: Use run-hook-with-args!  */
+      for (rest = Vpgtk_sent_selection_hooks; CONSP (rest);
+          rest = Fcdr (rest))
+       call3 (Fcar (rest), selection, target_symbol, successful_p);
+    }
+
+  return value;
+}
+
+
+DEFUN ("pgtk-disown-selection-internal", Fpgtk_disown_selection_internal, 
Spgtk_disown_selection_internal, 1, 3, 0,
+       doc: /* If we own the selection SELECTION, disown it.
+Disowning it means there is no such selection.
+
+Sets the last-change time for the selection to TIME-OBJECT (by default
+the time of the last event).
+
+TERMINAL should be a terminal object or a frame specifying the X
+server to query.  If omitted or nil, that stands for the selected
+frame's display, or the first available X display.
+
+On Nextstep, the TIME-OBJECT and TERMINAL arguments are unused.
+On MS-DOS, all this does is return non-nil if we own the selection.
+On PGTK, the TIME-OBJECT is unused.  */)
+  (Lisp_Object selection, Lisp_Object time_object, Lisp_Object terminal)
+{
+  struct frame *f = frame_for_pgtk_selection (terminal);
+  GtkClipboard *cb;
+
+  if (!pgtk_selection_usable ())
+    return Qnil;
+
+  if (!f)
+    return Qnil;
+
+  cb = symbol_to_gtk_clipboard (FRAME_GTK_WIDGET (f), selection);
+
+  gtk_clipboard_clear (cb);
+
+  return Qt;
+}
+
+
+DEFUN ("pgtk-selection-exists-p", Fpgtk_selection_exists_p, 
Spgtk_selection_exists_p, 0, 2, 0,
+       doc: /* Whether there is an owner for the given X selection.
+SELECTION should be the name of the selection in question, typically
+one of the symbols `PRIMARY', `SECONDARY', or `CLIPBOARD'.  (X expects
+these literal upper-case names.)  The symbol nil is the same as
+`PRIMARY', and t is the same as `SECONDARY'.
+
+TERMINAL should be a terminal object or a frame specifying the X
+server to query.  If omitted or nil, that stands for the selected
+frame's display, or the first available X display.
+
+On Nextstep, TERMINAL is unused.  */)
+  (Lisp_Object selection, Lisp_Object terminal)
+{
+  struct frame *f = frame_for_pgtk_selection (terminal);
+  GtkClipboard *cb;
+
+  if (!pgtk_selection_usable ())
+    return Qnil;
+
+  if (!f)
+    return Qnil;
+
+  cb = symbol_to_gtk_clipboard (FRAME_GTK_WIDGET (f), selection);
+
+  return gtk_clipboard_wait_is_text_available (cb) ? Qt : Qnil;
+}
+
+
+DEFUN ("pgtk-selection-owner-p", Fpgtk_selection_owner_p, 
Spgtk_selection_owner_p, 0, 2, 0,
+       doc: /* Whether the current Emacs process owns the given X Selection.
+The arg should be the name of the selection in question, typically one of
+the symbols `PRIMARY', `SECONDARY', or `CLIPBOARD'.
+\(Those are literal upper-case symbol names, since that's what X expects.)
+For convenience, the symbol nil is the same as `PRIMARY',
+and t is the same as `SECONDARY'.
+
+TERMINAL should be a terminal object or a frame specifying the X
+server to query.  If omitted or nil, that stands for the selected
+frame's display, or the first available X display.
+
+On Nextstep, TERMINAL is unused.  */)
+  (Lisp_Object selection, Lisp_Object terminal)
+{
+  struct frame *f = frame_for_pgtk_selection (terminal);
+  GtkClipboard *cb;
+  GObject *obj;
+  GQuark quark_data, quark_size;
+
+  if (!pgtk_selection_usable ())
+    return Qnil;
+
+  cb = symbol_to_gtk_clipboard (FRAME_GTK_WIDGET (f), selection);
+  selection_type_to_quarks (gtk_clipboard_get_selection (cb), &quark_data,
+                           &quark_size);
+
+  obj = gtk_clipboard_get_owner (cb);
+
+  return obj && g_object_get_qdata (obj, quark_data) != NULL ? Qt : Qnil;
+}
+
+
+DEFUN ("pgtk-get-selection-internal", Fpgtk_get_selection_internal, 
Spgtk_get_selection_internal, 2, 4, 0,
+       doc: /* Return text selected from some X window.
+SELECTION-SYMBOL is typically `PRIMARY', `SECONDARY', or `CLIPBOARD'.
+\(Those are literal upper-case symbol names, since that's what X expects.)
+TARGET-TYPE is the type of data desired, typically `STRING'.
+
+TIME-STAMP is the time to use in the XConvertSelection call for foreign
+selections.  If omitted, defaults to the time for the last event.
+
+TERMINAL should be a terminal object or a frame specifying the X
+server to query.  If omitted or nil, that stands for the selected
+frame's display, or the first available X display.
+
+On Nextstep, TIME-STAMP and TERMINAL are unused.
+On PGTK, TIME-STAMP is unused.  */)
+  (Lisp_Object selection_symbol, Lisp_Object target_type,
+   Lisp_Object time_stamp, Lisp_Object terminal)
+{
+  struct frame *f = frame_for_pgtk_selection (terminal);
+  GtkClipboard *cb;
+
+  CHECK_SYMBOL (selection_symbol);
+  CHECK_SYMBOL (target_type);
+  if (EQ (target_type, QMULTIPLE))
+    error ("Retrieving MULTIPLE selections is currently unimplemented");
+  if (!f)
+    error ("PGTK selection unavailable for this frame");
+
+  if (!pgtk_selection_usable ())
+    return Qnil;
+
+  cb = symbol_to_gtk_clipboard (FRAME_GTK_WIDGET (f), selection_symbol);
+
+  GdkAtom target_atom = gdk_atom_intern (SSDATA (SYMBOL_NAME (target_type)), 
false);
+  GtkSelectionData *seldata = gtk_clipboard_wait_for_contents (cb, 
target_atom);
+
+  if (seldata == NULL)
+    return Qnil;
+
+  const guchar *sd_data = gtk_selection_data_get_data (seldata);
+  int sd_len = gtk_selection_data_get_length (seldata);
+  int sd_format = gtk_selection_data_get_format (seldata);
+  GdkAtom sd_type = gtk_selection_data_get_data_type (seldata);
+
+  if (sd_format == 8)
+    {
+      Lisp_Object str, lispy_type;
+
+      str = make_unibyte_string ((char *) sd_data, sd_len);
+      /* Indicate that this string is from foreign selection by a text
+        property `foreign-selection' so that the caller of
+        x-get-selection-internal (usually x-get-selection) can know
+        that the string must be decode.  */
+      if (sd_type == gdk_atom_intern ("COMPOUND_TEXT", false))
+       lispy_type = QCOMPOUND_TEXT;
+      else if (sd_type == gdk_atom_intern ("UTF8_STRING", false))
+       lispy_type = QUTF8_STRING;
+      else if (sd_type == gdk_atom_intern ("text/plain;charset=utf-8", false))
+       lispy_type = Qtext_plain_charset_utf_8;
+      else
+       lispy_type = QSTRING;
+      Fput_text_property (make_fixnum (0), make_fixnum (sd_len),
+                         Qforeign_selection, lispy_type, str);
+
+      gtk_selection_data_free (seldata);
+      return str;
+    }
+
+  gtk_selection_data_free (seldata);
+  return Qnil;
+}
+
+
+void
+nxatoms_of_pgtkselect (void)
+{
+}
+
+void
+syms_of_pgtkselect (void)
+{
+  DEFSYM (QCLIPBOARD, "CLIPBOARD");
+  DEFSYM (QSECONDARY, "SECONDARY");
+  DEFSYM (QTEXT, "TEXT");
+  DEFSYM (QFILE_NAME, "FILE_NAME");
+  DEFSYM (QMULTIPLE, "MULTIPLE");
+
+  DEFSYM (Qforeign_selection, "foreign-selection");
+  DEFSYM (QUTF8_STRING, "UTF8_STRING");
+  DEFSYM (QSTRING, "STRING");
+  DEFSYM (QCOMPOUND_TEXT, "COMPOUND_TEXT");
+  DEFSYM (Qtext_plain_charset_utf_8, "text/plain;charset=utf-8");
+
+  defsubr (&Spgtk_disown_selection_internal);
+  defsubr (&Spgtk_get_selection_internal);
+  defsubr (&Spgtk_own_selection_internal);
+  defsubr (&Spgtk_selection_exists_p);
+  defsubr (&Spgtk_selection_owner_p);
+
+#if 0
+  Vselection_alist = Qnil;
+  staticpro (&Vselection_alist);
+#endif
+
+  DEFVAR_LISP ("pgtk-sent-selection-hooks", Vpgtk_sent_selection_hooks,
+              "A list of functions to be called when Emacs answers a selection 
request.\n\
+The functions are called with four arguments:\n\
+  - the selection name (typically `PRIMARY', `SECONDARY', or `CLIPBOARD');\n\
+  - the selection-type which Emacs was asked to convert the\n\
+    selection into before sending (for example, `STRING' or `LENGTH');\n\
+  - a flag indicating success or failure for responding to the request.\n\
+We might have failed (and declined the request) for any number of reasons,\n\
+including being asked for a selection that we no longer own, or being asked\n\
+to convert into a type that we don't know about or that is inappropriate.\n\
+This hook doesn't let you change the behavior of Emacs's selection replies,\n\
+it merely informs you that they have happened.");
+  Vpgtk_sent_selection_hooks = Qnil;
+
+  DEFVAR_BOOL ("pgtk-enable-selection-on-multi-display", 
pgtk_enable_selection_on_multi_display,
+              doc: /* Enable selection on multi display environment.
+This may cause crash.  */);
+  pgtk_enable_selection_on_multi_display = false;
+}
diff --git a/src/xgselect.h b/src/pgtkselect.h
similarity index 62%
copy from src/xgselect.h
copy to src/pgtkselect.h
index 2142a236b2..0509c83bde 100644
--- a/src/xgselect.h
+++ b/src/pgtkselect.h
@@ -1,6 +1,6 @@
-/* Header for xg_select.
-
-Copyright (C) 2009-2021 Free Software Foundation, Inc.
+/* Definitions and headers for selection of pure Gtk+3.
+   Copyright (C) 1989, 1993, 2005, 2008-2022 Free Software Foundation,
+   Inc.
 
 This file is part of GNU Emacs.
 
@@ -17,18 +17,17 @@ 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/>.  */
 
-#ifndef XGSELECT_H
-#define XGSELECT_H
 
-#include "lisp.h"
-#include "sysselect.h"
+#include "dispextern.h"
+#include "frame.h"
 
-struct timespec;
+#ifdef HAVE_PGTK
 
-extern int xg_select (int max_fds,
-                     fd_set *rfds, fd_set *wfds, fd_set *efds,
-                     struct timespec *timeout, sigset_t *sigmask);
+#include <gtk/gtk.h>
 
-extern void release_select_lock (void);
+extern void pgtk_selection_init (void);
+extern void pgtk_selection_lost (GtkWidget * widget,
+                                GdkEventSelection * event,
+                                gpointer user_data);
 
-#endif /* XGSELECT_H */
+#endif /* HAVE_PGTK */
diff --git a/src/pgtkterm.c b/src/pgtkterm.c
new file mode 100644
index 0000000000..0155ae991d
--- /dev/null
+++ b/src/pgtkterm.c
@@ -0,0 +1,7239 @@
+/* Pure Gtk+-3 communication module.      -*- coding: utf-8 -*-
+
+Copyright (C) 1989, 1993-1994, 2005-2006, 2008-2022 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/>.  */
+
+/* This should be the first include, as it may set up #defines affecting
+   interpretation of even the system includes. */
+#include <config.h>
+
+#include <cairo.h>
+#include <fcntl.h>
+#include <math.h>
+#include <pthread.h>
+#include <sys/types.h>
+#include <time.h>
+#include <signal.h>
+#include <unistd.h>
+#include <errno.h>
+
+#include <c-ctype.h>
+#include <c-strcase.h>
+#include <ftoastr.h>
+
+#include "lisp.h"
+#include "blockinput.h"
+#include "frame.h"
+#include "sysselect.h"
+#include "gtkutil.h"
+#include "systime.h"
+#include "character.h"
+#include "xwidget.h"
+#include "fontset.h"
+#include "composite.h"
+#include "ccl.h"
+#include "dynlib.h"
+
+#include "termhooks.h"
+#include "termopts.h"
+#include "termchar.h"
+#include "emacs-icon.h"
+#include "menu.h"
+#include "window.h"
+#include "keyboard.h"
+#include "atimer.h"
+#include "buffer.h"
+#include "font.h"
+#include "xsettings.h"
+#include "pgtkselect.h"
+#include "emacsgtkfixed.h"
+
+#ifdef GDK_WINDOWING_WAYLAND
+#include <gdk/gdkwayland.h>
+#endif
+
+#define STORE_KEYSYM_FOR_DEBUG(keysym) ((void)0)
+
+#define FRAME_CR_CONTEXT(f) ((f)->output_data.pgtk->cr_context)
+#define FRAME_CR_ACTIVE_CONTEXT(f)     ((f)->output_data.pgtk->cr_active)
+#define FRAME_CR_SURFACE(f) (cairo_get_target (FRAME_CR_CONTEXT (f)))
+
+/* Non-zero means that a HELP_EVENT has been generated since Emacs
+   start.  */
+
+static bool any_help_event_p;
+
+struct pgtk_display_info *x_display_list;      /* Chain of existing displays */
+extern Lisp_Object tip_frame;
+
+static struct event_queue_t
+{
+  union buffered_input_event *q;
+  int nr, cap;
+} event_q = {
+  NULL, 0, 0,
+};
+
+/* Non-zero timeout value means ignore next mouse click if it arrives
+   before that timeout elapses (i.e. as part of the same sequence of
+   events resulting from clicking on a frame to select it).  */
+
+static Time ignore_next_mouse_click_timeout;
+
+static Lisp_Object xg_default_icon_file;
+
+static void pgtk_delete_display (struct pgtk_display_info *dpyinfo);
+static void pgtk_clear_frame_area (struct frame *f, int x, int y, int width,
+                                  int height);
+static void pgtk_fill_rectangle (struct frame *f, unsigned long color, int x,
+                                int y, int width, int height);
+static void pgtk_clip_to_row (struct window *w, struct glyph_row *row,
+                             enum glyph_row_area area, cairo_t * cr);
+static struct frame *pgtk_any_window_to_frame (GdkWindow * window);
+
+/*
+ * This is not a flip context in the same sense as gpu rendering
+ * scences, it only occurs when a new context was required due to a
+ * resize or other fundamental change.  This is called when that
+ * context's surface has completed drawing
+ */
+
+static void
+flip_cr_context (struct frame *f)
+{
+  cairo_t *cr = FRAME_CR_ACTIVE_CONTEXT (f);
+
+  block_input ();
+  if (cr != FRAME_CR_CONTEXT (f))
+    {
+      cairo_destroy (cr);
+      FRAME_CR_ACTIVE_CONTEXT (f) = cairo_reference (FRAME_CR_CONTEXT (f));
+
+    }
+  unblock_input ();
+}
+
+
+static void
+evq_enqueue (union buffered_input_event *ev)
+{
+  struct event_queue_t *evq = &event_q;
+  if (evq->cap == 0)
+    {
+      evq->cap = 4;
+      evq->q = xmalloc (sizeof *evq->q * evq->cap);
+    }
+
+  if (evq->nr >= evq->cap)
+    {
+      evq->cap += evq->cap / 2;
+      evq->q = xrealloc (evq->q, sizeof *evq->q * evq->cap);
+    }
+
+  evq->q[evq->nr++] = *ev;
+  raise (SIGIO);
+}
+
+static int
+evq_flush (struct input_event *hold_quit)
+{
+  struct event_queue_t *evq = &event_q;
+  int i, n = evq->nr;
+  for (i = 0; i < n; i++)
+    kbd_buffer_store_buffered_event (&evq->q[i], hold_quit);
+  evq->nr = 0;
+  return n;
+}
+
+void
+mark_pgtkterm (void)
+{
+  struct event_queue_t *evq = &event_q;
+  int i, n = evq->nr;
+  for (i = 0; i < n; i++)
+    {
+      union buffered_input_event *ev = &evq->q[i];
+      mark_object (ev->ie.x);
+      mark_object (ev->ie.y);
+      mark_object (ev->ie.frame_or_window);
+      mark_object (ev->ie.arg);
+    }
+}
+
+char *
+get_keysym_name (int keysym)
+/* --------------------------------------------------------------------------
+    Called by keyboard.c.  Not sure if the return val is important, except
+    that it be unique.
+   -------------------------------------------------------------------------- 
*/
+{
+  static char value[16];
+  sprintf (value, "%d", keysym);
+  return value;
+}
+
+void
+frame_set_mouse_pixel_position (struct frame *f, int pix_x, int pix_y)
+/* --------------------------------------------------------------------------
+     Programmatically reposition mouse pointer in pixel coordinates
+   -------------------------------------------------------------------------- 
*/
+{
+}
+
+/* Raise frame F.  */
+
+static void
+pgtk_raise_frame (struct frame *f)
+{
+  /* This works only for non-child frames on X.
+     It does not work for child frames on X, and it does not work
+     on Wayland too. */
+  block_input ();
+  if (FRAME_VISIBLE_P (f))
+    gdk_window_raise (gtk_widget_get_window (FRAME_WIDGET (f)));
+  unblock_input ();
+}
+
+/* Lower frame F.  */
+
+static void
+pgtk_lower_frame (struct frame *f)
+{
+  if (FRAME_VISIBLE_P (f))
+    {
+      block_input ();
+      gdk_window_lower (gtk_widget_get_window (FRAME_WIDGET (f)));
+      unblock_input ();
+    }
+}
+
+static void
+pgtk_frame_raise_lower (struct frame *f, bool raise_flag)
+{
+  if (raise_flag)
+    pgtk_raise_frame (f);
+  else
+    pgtk_lower_frame (f);
+}
+
+/* Free X resources of frame F.  */
+
+void
+x_free_frame_resources (struct frame *f)
+{
+  struct pgtk_display_info *dpyinfo;
+  Mouse_HLInfo *hlinfo;
+
+  check_window_system (f);
+  dpyinfo = FRAME_DISPLAY_INFO (f);
+  hlinfo = MOUSE_HL_INFO (f);
+
+  block_input ();
+
+#ifdef HAVE_XWIDGETS
+  kill_frame_xwidget_views (f);
+#endif
+  free_frame_faces (f);
+
+  if (FRAME_X_OUTPUT (f)->scale_factor_atimer != NULL)
+    {
+      cancel_atimer (FRAME_X_OUTPUT (f)->scale_factor_atimer);
+      FRAME_X_OUTPUT (f)->scale_factor_atimer = NULL;
+    }
+
+#define CLEAR_IF_EQ(FIELD)     \
+  do { if (f == dpyinfo->FIELD) dpyinfo->FIELD = 0; } while (false)
+
+  CLEAR_IF_EQ (x_focus_frame);
+  CLEAR_IF_EQ (highlight_frame);
+  CLEAR_IF_EQ (x_focus_event_frame);
+  CLEAR_IF_EQ (last_mouse_frame);
+  CLEAR_IF_EQ (last_mouse_motion_frame);
+  CLEAR_IF_EQ (last_mouse_glyph_frame);
+  CLEAR_IF_EQ (im.focused_frame);
+
+#undef CLEAR_IF_EQ
+
+  if (f == hlinfo->mouse_face_mouse_frame)
+    reset_mouse_highlight (hlinfo);
+
+  g_clear_object (&FRAME_X_OUTPUT (f)->text_cursor);
+  g_clear_object (&FRAME_X_OUTPUT (f)->nontext_cursor);
+  g_clear_object (&FRAME_X_OUTPUT (f)->modeline_cursor);
+  g_clear_object (&FRAME_X_OUTPUT (f)->hand_cursor);
+  g_clear_object (&FRAME_X_OUTPUT (f)->hourglass_cursor);
+  g_clear_object (&FRAME_X_OUTPUT (f)->horizontal_drag_cursor);
+  g_clear_object (&FRAME_X_OUTPUT (f)->vertical_drag_cursor);
+  g_clear_object (&FRAME_X_OUTPUT (f)->left_edge_cursor);
+  g_clear_object (&FRAME_X_OUTPUT (f)->right_edge_cursor);
+  g_clear_object (&FRAME_X_OUTPUT (f)->top_edge_cursor);
+  g_clear_object (&FRAME_X_OUTPUT (f)->bottom_edge_cursor);
+  g_clear_object (&FRAME_X_OUTPUT (f)->top_left_corner_cursor);
+  g_clear_object (&FRAME_X_OUTPUT (f)->top_right_corner_cursor);
+  g_clear_object (&FRAME_X_OUTPUT (f)->bottom_right_corner_cursor);
+  g_clear_object (&FRAME_X_OUTPUT (f)->bottom_left_corner_cursor);
+
+
+  if (FRAME_X_OUTPUT (f)->border_color_css_provider != NULL)
+    {
+      GtkStyleContext *ctxt = gtk_widget_get_style_context (FRAME_WIDGET (f));
+      GtkCssProvider *old = FRAME_X_OUTPUT (f)->border_color_css_provider;
+      gtk_style_context_remove_provider (ctxt, GTK_STYLE_PROVIDER (old));
+      g_object_unref (old);
+      FRAME_X_OUTPUT (f)->border_color_css_provider = NULL;
+    }
+
+  if (FRAME_X_OUTPUT (f)->scrollbar_foreground_css_provider != NULL)
+    {
+      GtkCssProvider *old =
+       FRAME_X_OUTPUT (f)->scrollbar_foreground_css_provider;
+      g_object_unref (old);
+      FRAME_X_OUTPUT (f)->scrollbar_foreground_css_provider = NULL;
+    }
+
+  if (FRAME_X_OUTPUT (f)->scrollbar_background_css_provider != NULL)
+    {
+      GtkCssProvider *old =
+       FRAME_X_OUTPUT (f)->scrollbar_background_css_provider;
+      g_object_unref (old);
+      FRAME_X_OUTPUT (f)->scrollbar_background_css_provider = NULL;
+    }
+
+  gtk_widget_destroy (FRAME_WIDGET (f));
+
+  if (FRAME_X_OUTPUT (f)->cr_surface_visible_bell != NULL)
+    {
+      cairo_surface_destroy (FRAME_X_OUTPUT (f)->cr_surface_visible_bell);
+      FRAME_X_OUTPUT (f)->cr_surface_visible_bell = NULL;
+    }
+
+  if (FRAME_X_OUTPUT (f)->atimer_visible_bell != NULL)
+    {
+      cancel_atimer (FRAME_X_OUTPUT (f)->atimer_visible_bell);
+      FRAME_X_OUTPUT (f)->atimer_visible_bell = NULL;
+    }
+
+  xfree (f->output_data.pgtk);
+  f->output_data.pgtk = NULL;
+
+  unblock_input ();
+}
+
+void
+x_destroy_window (struct frame *f)
+/* --------------------------------------------------------------------------
+     External: Delete the window
+   -------------------------------------------------------------------------- 
*/
+{
+  struct pgtk_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
+
+  check_window_system (f);
+  if (dpyinfo->gdpy != NULL)
+    x_free_frame_resources (f);
+
+  dpyinfo->reference_count--;
+}
+
+/* Calculate the absolute position in frame F
+   from its current recorded position values and gravity.  */
+
+static void
+x_calc_absolute_position (struct frame *f)
+{
+  int flags = f->size_hint_flags;
+  struct frame *p = FRAME_PARENT_FRAME (f);
+
+  /* We have nothing to do if the current position
+     is already for the top-left corner.  */
+  if (! ((flags & XNegative) || (flags & YNegative)))
+    return;
+
+  /* Treat negative positions as relative to the leftmost bottommost
+     position that fits on the screen.  */
+  if ((flags & XNegative) && (f->left_pos <= 0))
+    {
+      int width = FRAME_PIXEL_WIDTH (f);
+
+      /* A frame that has been visible at least once should have outer
+        edges.  */
+      if (f->output_data.pgtk->has_been_visible && !p)
+       {
+         Lisp_Object frame;
+         Lisp_Object edges = Qnil;
+
+         XSETFRAME (frame, f);
+         edges = Fpgtk_frame_edges (frame, Qouter_edges);
+         if (!NILP (edges))
+           width = (XFIXNUM (Fnth (make_fixnum (2), edges))
+                    - XFIXNUM (Fnth (make_fixnum (0), edges)));
+       }
+
+      if (p)
+       f->left_pos = (FRAME_PIXEL_WIDTH (p) - width - 2 * f->border_width
+                      + f->left_pos);
+      else
+       f->left_pos = (x_display_pixel_width (FRAME_DISPLAY_INFO (f))
+                      - width + f->left_pos);
+
+    }
+
+  if ((flags & YNegative) && (f->top_pos <= 0))
+    {
+      int height = FRAME_PIXEL_HEIGHT (f);
+
+      if (f->output_data.pgtk->has_been_visible && !p)
+       {
+         Lisp_Object frame;
+         Lisp_Object edges = Qnil;
+
+         XSETFRAME (frame, f);
+         if (NILP (edges))
+           edges = Fpgtk_frame_edges (frame, Qouter_edges);
+         if (!NILP (edges))
+           height = (XFIXNUM (Fnth (make_fixnum (3), edges))
+                     - XFIXNUM (Fnth (make_fixnum (1), edges)));
+       }
+
+      if (p)
+       f->top_pos = (FRAME_PIXEL_HEIGHT (p) - height - 2 * f->border_width
+                      + f->top_pos);
+      else
+       f->top_pos = (x_display_pixel_height (FRAME_DISPLAY_INFO (f))
+                     - height + f->top_pos);
+  }
+
+  /* The left_pos and top_pos
+     are now relative to the top and left screen edges,
+     so the flags should correspond.  */
+  f->size_hint_flags &= ~ (XNegative | YNegative);
+}
+
+/* CHANGE_GRAVITY is 1 when calling from Fset_frame_position,
+   to really change the position, and 0 when calling from
+   x_make_frame_visible (in that case, XOFF and YOFF are the current
+   position values).  It is -1 when calling from x_set_frame_parameters,
+   which means, do adjust for borders but don't change the gravity.  */
+
+static void
+x_set_offset (struct frame *f, int xoff, int yoff, int change_gravity)
+/* --------------------------------------------------------------------------
+     External: Position the window
+   -------------------------------------------------------------------------- 
*/
+{
+  int modified_top, modified_left;
+
+  if (change_gravity > 0)
+    {
+      f->top_pos = yoff;
+      f->left_pos = xoff;
+      f->size_hint_flags &= ~ (XNegative | YNegative);
+      if (xoff < 0)
+       f->size_hint_flags |= XNegative;
+      if (yoff < 0)
+       f->size_hint_flags |= YNegative;
+      f->win_gravity = NorthWestGravity;
+    }
+
+  x_calc_absolute_position (f);
+
+  block_input ();
+  x_wm_set_size_hint (f, 0, false);
+
+  if (x_gtk_use_window_move)
+    {
+      if (change_gravity != 0)
+       {
+         if (FRAME_GTK_OUTER_WIDGET (f))
+           {
+             gtk_window_move (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
+                              f->left_pos, f->top_pos);
+           }
+         else
+           {
+             GtkWidget *fixed = FRAME_GTK_WIDGET (f);
+             GtkWidget *parent = gtk_widget_get_parent (fixed);
+             gtk_fixed_move (GTK_FIXED (parent), fixed,
+                             f->left_pos, f->top_pos);
+           }
+       }
+      unblock_input ();
+      return;
+    }
+
+  modified_left = f->left_pos;
+  modified_top = f->top_pos;
+
+  if (FRAME_GTK_OUTER_WIDGET (f))
+    {
+      gtk_window_move (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
+                      modified_left, modified_top);
+    }
+  else
+    {
+      GtkWidget *fixed = FRAME_GTK_WIDGET (f);
+      GtkWidget *parent = gtk_widget_get_parent (fixed);
+      gtk_fixed_move (GTK_FIXED (parent), fixed,
+                     modified_left, modified_top);
+    }
+
+  unblock_input ();
+}
+
+static void
+pgtk_set_window_size (struct frame *f, bool change_gravity,
+                     int width, int height)
+/* --------------------------------------------------------------------------
+     Adjust window pixel size based on given character grid size
+     Impl is a bit more complex than other terms, need to do some
+     internal clipping.
+   -------------------------------------------------------------------------- 
*/
+{
+  int pixelwidth, pixelheight;
+
+  block_input ();
+
+  gtk_widget_get_size_request (FRAME_GTK_WIDGET (f), &pixelwidth,
+                              &pixelheight);
+
+#if 0
+  if (pixelwise)
+    {
+      pixelwidth = FRAME_TEXT_TO_PIXEL_WIDTH (f, width);
+      pixelheight = FRAME_TEXT_TO_PIXEL_HEIGHT (f, height);
+    }
+  else
+    {
+      pixelwidth = FRAME_TEXT_COLS_TO_PIXEL_WIDTH (f, width);
+      pixelheight = FRAME_TEXT_LINES_TO_PIXEL_HEIGHT (f, height);
+    }
+#else
+  pixelwidth = width;
+  pixelheight = height;
+#endif
+
+#if 0
+  frame_size_history_add
+    (f, Qx_set_window_size_1, width, height,
+     list5 (Fcons (make_fixnum (pixelwidth), make_fixnum (pixelheight)),
+           Fcons (make_fixnum (pixelwidth), make_fixnum (pixelheight)),
+           make_fixnum (f->border_width),
+           make_fixnum (FRAME_PGTK_TITLEBAR_HEIGHT (f)),
+           make_fixnum (FRAME_TOOLBAR_HEIGHT (f))));
+#endif
+
+  for (GtkWidget * w = FRAME_GTK_WIDGET (f); w != NULL;
+       w = gtk_widget_get_parent (w))
+    {
+      gint wd, hi;
+      gtk_widget_get_size_request (w, &wd, &hi);
+    }
+
+  f->output_data.pgtk->preferred_width = pixelwidth;
+  f->output_data.pgtk->preferred_height = pixelheight;
+  x_wm_set_size_hint (f, 0, 0);
+  xg_frame_set_char_size (f, pixelwidth, pixelheight);
+  gtk_widget_queue_resize (FRAME_WIDGET (f));
+
+  unblock_input ();
+}
+
+void
+pgtk_iconify_frame (struct frame *f)
+/* --------------------------------------------------------------------------
+     External: Iconify window
+   -------------------------------------------------------------------------- 
*/
+{
+  /* Don't keep the highlight on an invisible frame.  */
+  if (FRAME_DISPLAY_INFO (f)->highlight_frame == f)
+    FRAME_DISPLAY_INFO (f)->highlight_frame = 0;
+
+  if (FRAME_ICONIFIED_P (f))
+    return;
+
+  block_input ();
+
+#if 0
+  x_set_bitmap_icon (f);
+#endif
+
+  if (FRAME_GTK_OUTER_WIDGET (f))
+    {
+      if (!FRAME_VISIBLE_P (f))
+       gtk_widget_show_all (FRAME_GTK_OUTER_WIDGET (f));
+
+      gtk_window_iconify (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)));
+      SET_FRAME_VISIBLE (f, 0);
+      SET_FRAME_ICONIFIED (f, true);
+      unblock_input ();
+      return;
+    }
+
+  /* Make sure the X server knows where the window should be positioned,
+     in case the user deiconifies with the window manager.  */
+  if (!FRAME_VISIBLE_P (f) && !FRAME_ICONIFIED_P (f)
+#if 0
+      && !FRAME_X_EMBEDDED_P (f)
+#endif
+    )
+    x_set_offset (f, f->left_pos, f->top_pos, 0);
+
+#if 0
+  if (!FRAME_VISIBLE_P (f))
+    {
+      /* If the frame was withdrawn, before, we must map it.  */
+      XMapRaised (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f));
+    }
+#endif
+
+  SET_FRAME_ICONIFIED (f, true);
+  SET_FRAME_VISIBLE (f, 0);
+
+  unblock_input ();
+}
+
+static gboolean
+pgtk_make_frame_visible_wait_for_map_event_cb (GtkWidget * widget,
+                                              GdkEventAny * event,
+                                              gpointer user_data)
+{
+  int *foundptr = user_data;
+  *foundptr = 1;
+  return FALSE;
+}
+
+static gboolean
+pgtk_make_frame_visible_wait_for_map_event_timeout (gpointer user_data)
+{
+  int *timedoutptr = user_data;
+  *timedoutptr = 1;
+  return FALSE;
+}
+
+static void
+pgtk_wait_for_map_event (struct frame *f, bool multiple_times)
+{
+  if (FLOATP (Vpgtk_wait_for_event_timeout))
+    {
+      guint msec =
+       (guint) (XFLOAT_DATA (Vpgtk_wait_for_event_timeout) * 1000);
+      int found = 0;
+      int timed_out = 0;
+      gulong id =
+       g_signal_connect (FRAME_WIDGET (f), "map-event",
+                         G_CALLBACK
+                         (pgtk_make_frame_visible_wait_for_map_event_cb),
+                         &found);
+      guint src =
+       g_timeout_add (msec,
+                      pgtk_make_frame_visible_wait_for_map_event_timeout,
+                      &timed_out);
+
+      if (!multiple_times)
+       {
+         while (!found && !timed_out)
+           gtk_main_iteration ();
+       }
+      else
+       {
+         while (!timed_out)
+           gtk_main_iteration ();
+       }
+
+      g_signal_handler_disconnect (FRAME_WIDGET (f), id);
+      if (!timed_out)
+       g_source_remove (src);
+    }
+}
+
+void
+pgtk_make_frame_visible (struct frame *f)
+/* --------------------------------------------------------------------------
+     External: Show the window (X11 semantics)
+   -------------------------------------------------------------------------- 
*/
+{
+  GtkWidget *win = FRAME_GTK_OUTER_WIDGET (f);
+
+  if (!FRAME_VISIBLE_P (f))
+    {
+      gtk_widget_show (FRAME_WIDGET (f));
+      if (win)
+       gtk_window_deiconify (GTK_WINDOW (win));
+
+      pgtk_wait_for_map_event (f, false);
+    }
+}
+
+
+void
+pgtk_make_frame_invisible (struct frame *f)
+/* --------------------------------------------------------------------------
+     External: Hide the window (X11 semantics)
+   -------------------------------------------------------------------------- 
*/
+{
+  gtk_widget_hide (FRAME_WIDGET (f));
+
+  /* Map events are emitted many times, and
+   * map_event() do SET_FRAME_VISIBLE(f, 1).
+   * I expect visible = 0, so process those map events here and
+   * SET_FRAME_VISIBLE(f, 0) after that.
+   */
+  pgtk_wait_for_map_event (f, true);
+
+  SET_FRAME_VISIBLE (f, 0);
+  SET_FRAME_ICONIFIED (f, false);
+}
+
+static void
+pgtk_make_frame_visible_invisible (struct frame *f, bool visible)
+{
+  if (visible)
+    pgtk_make_frame_visible (f);
+  else
+    pgtk_make_frame_invisible (f);
+}
+
+static Lisp_Object
+pgtk_new_font (struct frame *f, Lisp_Object font_object, int fontset)
+{
+  struct font *font = XFONT_OBJECT (font_object);
+  int font_ascent, font_descent;
+
+  if (fontset < 0)
+    fontset = fontset_from_font (font_object);
+  FRAME_FONTSET (f) = fontset;
+
+  if (FRAME_FONT (f) == font)
+    {
+      /* This font is already set in frame F.  There's nothing more to
+         do.  */
+      return font_object;
+    }
+
+  FRAME_FONT (f) = font;
+
+  FRAME_BASELINE_OFFSET (f) = font->baseline_offset;
+  FRAME_COLUMN_WIDTH (f) = font->average_width;
+  get_font_ascent_descent (font, &font_ascent, &font_descent);
+  FRAME_LINE_HEIGHT (f) = font_ascent + font_descent;
+
+  /* We could use a more elaborate calculation here.  */
+  FRAME_TAB_BAR_HEIGHT (f) = FRAME_TAB_BAR_LINES (f) * FRAME_LINE_HEIGHT (f);
+
+  /* Compute the scroll bar width in character columns.  */
+  if (FRAME_CONFIG_SCROLL_BAR_WIDTH (f) > 0)
+    {
+      int wid = FRAME_COLUMN_WIDTH (f);
+      FRAME_CONFIG_SCROLL_BAR_COLS (f)
+       = (FRAME_CONFIG_SCROLL_BAR_WIDTH (f) + wid - 1) / wid;
+    }
+  else
+    {
+      int wid = FRAME_COLUMN_WIDTH (f);
+      FRAME_CONFIG_SCROLL_BAR_COLS (f) = (14 + wid - 1) / wid;
+    }
+
+  /* Compute the scroll bar height in character lines.  */
+  if (FRAME_CONFIG_SCROLL_BAR_HEIGHT (f) > 0)
+    {
+      int height = FRAME_LINE_HEIGHT (f);
+      FRAME_CONFIG_SCROLL_BAR_LINES (f)
+       = (FRAME_CONFIG_SCROLL_BAR_HEIGHT (f) + height - 1) / height;
+    }
+  else
+    {
+      int height = FRAME_LINE_HEIGHT (f);
+      FRAME_CONFIG_SCROLL_BAR_LINES (f) = (14 + height - 1) / height;
+    }
+
+  /* Now make the frame display the given font.  */
+  if (FRAME_GTK_WIDGET (f) != NULL)
+    adjust_frame_size (f, FRAME_COLS (f) * FRAME_COLUMN_WIDTH (f),
+                      FRAME_LINES (f) * FRAME_LINE_HEIGHT (f), 3,
+                      false, Qfont);
+
+  return font_object;
+}
+
+int
+x_display_pixel_height (struct pgtk_display_info *dpyinfo)
+{
+  GdkDisplay *gdpy = dpyinfo->gdpy;
+  GdkScreen *gscr = gdk_display_get_default_screen (gdpy);
+  return gdk_screen_get_height (gscr);
+}
+
+int
+x_display_pixel_width (struct pgtk_display_info *dpyinfo)
+{
+  GdkDisplay *gdpy = dpyinfo->gdpy;
+  GdkScreen *gscr = gdk_display_get_default_screen (gdpy);
+  return gdk_screen_get_width (gscr);
+}
+
+void
+x_set_parent_frame (struct frame *f, Lisp_Object new_value,
+                   Lisp_Object old_value)
+/* --------------------------------------------------------------------------
+     Set frame F's `parent-frame' parameter.  If non-nil, make F a child
+     frame of the frame specified by that parameter.  Technically, this
+     makes F's window-system window a child window of the parent frame's
+     window-system window.  If nil, make F's window-system window a
+     top-level window--a child of its display's root window.
+
+     A child frame's `left' and `top' parameters specify positions
+     relative to the top-left corner of its parent frame's native
+     rectangle.  On macOS moving a parent frame moves all its child
+     frames too, keeping their position relative to the parent
+     unaltered.  When a parent frame is iconified or made invisible, its
+     child frames are made invisible.  When a parent frame is deleted,
+     its child frames are deleted too.
+
+     Whether a child frame has a tool bar may be window-system or window
+     manager dependent.  It's advisable to disable it via the frame
+     parameter settings.
+
+     Some window managers may not honor this parameter.
+   -------------------------------------------------------------------------- 
*/
+{
+  struct frame *p = NULL;
+
+  if (!NILP (new_value)
+      && (!FRAMEP (new_value)
+         || !FRAME_LIVE_P (p = XFRAME (new_value))
+         || !FRAME_PGTK_P (p)))
+    {
+      store_frame_param (f, Qparent_frame, old_value);
+      error ("Invalid specification of `parent-frame'");
+    }
+
+  if (p != FRAME_PARENT_FRAME (f))
+    {
+      block_input ();
+
+      if (p != NULL)
+       {
+         if (FRAME_DISPLAY_INFO (f) != FRAME_DISPLAY_INFO (p))
+           error ("Cross display reparent.");
+       }
+
+      GtkWidget *fixed = FRAME_GTK_WIDGET (f);
+
+      GtkAllocation alloc;
+      gtk_widget_get_allocation (fixed, &alloc);
+      g_object_ref (fixed);
+
+      /* Remember the css provider, and restore it later. */
+      GtkCssProvider *provider = FRAME_X_OUTPUT (f)->border_color_css_provider;
+      FRAME_X_OUTPUT (f)->border_color_css_provider = NULL;
+      {
+       GtkStyleContext *ctxt = gtk_widget_get_style_context (FRAME_WIDGET (f));
+       if (provider != NULL)
+         gtk_style_context_remove_provider (ctxt, GTK_STYLE_PROVIDER 
(provider));
+      }
+
+      {
+       GtkWidget *whbox_of_f = gtk_widget_get_parent (fixed);
+       /* Here, unhighlight can be called and may change 
border_color_css_provider. */
+       gtk_container_remove (GTK_CONTAINER (whbox_of_f), fixed);
+
+       if (FRAME_GTK_OUTER_WIDGET (f))
+         {
+           gtk_widget_destroy (FRAME_GTK_OUTER_WIDGET (f));
+           FRAME_GTK_OUTER_WIDGET (f) = NULL;
+           FRAME_OUTPUT_DATA (f)->vbox_widget = NULL;
+           FRAME_OUTPUT_DATA (f)->hbox_widget = NULL;
+           FRAME_OUTPUT_DATA (f)->menubar_widget = NULL;
+           FRAME_OUTPUT_DATA (f)->toolbar_widget = NULL;
+           FRAME_OUTPUT_DATA (f)->ttip_widget = NULL;
+           FRAME_OUTPUT_DATA (f)->ttip_lbl = NULL;
+           FRAME_OUTPUT_DATA (f)->ttip_window = NULL;
+         }
+      }
+
+      if (p == NULL)
+       {
+         xg_create_frame_outer_widgets (f);
+         pgtk_set_event_handler (f);
+         gtk_box_pack_start (GTK_BOX (f->output_data.pgtk->hbox_widget), 
fixed, TRUE, TRUE, 0);
+         f->output_data.pgtk->preferred_width = alloc.width;
+         f->output_data.pgtk->preferred_height = alloc.height;
+         x_wm_set_size_hint (f, 0, 0);
+         xg_frame_set_char_size (f, FRAME_PIXEL_TO_TEXT_WIDTH (f, alloc.width),
+                                 FRAME_PIXEL_TO_TEXT_HEIGHT (f, alloc.height));
+         gtk_widget_queue_resize (FRAME_WIDGET (f));
+         gtk_widget_show_all (FRAME_GTK_OUTER_WIDGET (f));
+       }
+      else
+       {
+         GtkWidget *fixed_of_p = FRAME_GTK_WIDGET (p);
+         gtk_fixed_put (GTK_FIXED (fixed_of_p), fixed, f->left_pos, 
f->top_pos);
+         gtk_widget_set_size_request (fixed, alloc.width, alloc.height);
+         gtk_widget_show_all (fixed);
+       }
+
+      /* Restore css provider. */
+      GtkStyleContext *ctxt = gtk_widget_get_style_context (FRAME_WIDGET (f));
+      GtkCssProvider *old = FRAME_X_OUTPUT (f)->border_color_css_provider;
+      FRAME_X_OUTPUT (f)->border_color_css_provider = provider;
+      if (provider != NULL)
+       {
+         gtk_style_context_add_provider (ctxt, GTK_STYLE_PROVIDER (provider),
+                                         GTK_STYLE_PROVIDER_PRIORITY_USER);
+       }
+      if (old != NULL)
+       {
+         gtk_style_context_remove_provider (ctxt, GTK_STYLE_PROVIDER (old));
+         g_object_unref(old);
+       }
+
+      g_object_unref (fixed);
+
+      if (FRAME_GTK_OUTER_WIDGET (f))
+       {
+         if (EQ (x_gtk_resize_child_frames, Qresize_mode))
+           gtk_container_set_resize_mode
+             (GTK_CONTAINER (FRAME_GTK_OUTER_WIDGET (f)),
+              p ? GTK_RESIZE_IMMEDIATE : GTK_RESIZE_QUEUE);
+       }
+
+      unblock_input ();
+
+      fset_parent_frame (f, new_value);
+    }
+}
+
+
+void
+x_set_no_focus_on_map (struct frame *f, Lisp_Object new_value,
+                      Lisp_Object old_value)
+/* Set frame F's `no-focus-on-map' parameter which, if non-nil, means
+ * that F's window-system window does not want to receive input focus
+ * when it is mapped.  (A frame's window is mapped when the frame is
+ * displayed for the first time and when the frame changes its state
+ * from `iconified' or `invisible' to `visible'.)
+ *
+ * Some window managers may not honor this parameter. */
+{
+  /* doesn't work on wayland. */
+
+  if (!EQ (new_value, old_value))
+    {
+      xg_set_no_focus_on_map (f, new_value);
+      FRAME_NO_FOCUS_ON_MAP (f) = !NILP (new_value);
+    }
+}
+
+void
+x_set_no_accept_focus (struct frame *f, Lisp_Object new_value,
+                      Lisp_Object old_value)
+/*  Set frame F's `no-accept-focus' parameter which, if non-nil, hints
+ * that F's window-system window does not want to receive input focus
+ * via mouse clicks or by moving the mouse into it.
+ *
+ * If non-nil, this may have the unwanted side-effect that a user cannot
+ * scroll a non-selected frame with the mouse.
+ *
+ * Some window managers may not honor this parameter. */
+{
+  /* doesn't work on wayland. */
+
+  xg_set_no_accept_focus (f, new_value);
+  FRAME_NO_ACCEPT_FOCUS (f) = !NILP (new_value);
+}
+
+void
+x_set_z_group (struct frame *f, Lisp_Object new_value, Lisp_Object old_value)
+/* Set frame F's `z-group' parameter.  If `above', F's window-system
+   window is displayed above all windows that do not have the `above'
+   property set.  If nil, F's window is shown below all windows that
+   have the `above' property set and above all windows that have the
+   `below' property set.  If `below', F's window is displayed below
+   all windows that do.
+
+   Some window managers may not honor this parameter. */
+{
+  /* doesn't work on wayland. */
+
+  if (!FRAME_GTK_OUTER_WIDGET (f))
+    return;
+
+  if (NILP (new_value))
+    {
+      gtk_window_set_keep_above (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
+                                FALSE);
+      gtk_window_set_keep_below (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
+                                FALSE);
+      FRAME_Z_GROUP (f) = z_group_none;
+    }
+  else if (EQ (new_value, Qabove))
+    {
+      gtk_window_set_keep_above (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
+                                TRUE);
+      gtk_window_set_keep_below (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
+                                FALSE);
+      FRAME_Z_GROUP (f) = z_group_above;
+    }
+  else if (EQ (new_value, Qabove_suspended))
+    {
+      gtk_window_set_keep_above (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
+                                FALSE);
+      FRAME_Z_GROUP (f) = z_group_above_suspended;
+    }
+  else if (EQ (new_value, Qbelow))
+    {
+      gtk_window_set_keep_above (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
+                                FALSE);
+      gtk_window_set_keep_below (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
+                                TRUE);
+      FRAME_Z_GROUP (f) = z_group_below;
+    }
+  else
+    error ("Invalid z-group specification");
+}
+
+static void
+pgtk_initialize_display_info (struct pgtk_display_info *dpyinfo)
+/* --------------------------------------------------------------------------
+      Initialize global info and storage for display.
+   -------------------------------------------------------------------------- 
*/
+{
+  dpyinfo->resx = 96;
+  dpyinfo->resy = 96;
+  dpyinfo->color_p = 1;
+  dpyinfo->n_planes = 32;
+  dpyinfo->root_window = 42;   /* a placeholder.. */
+  dpyinfo->highlight_frame = dpyinfo->x_focus_frame = NULL;
+  dpyinfo->n_fonts = 0;
+  dpyinfo->smallest_font_height = 1;
+  dpyinfo->smallest_char_width = 1;
+
+  reset_mouse_highlight (&dpyinfo->mouse_highlight);
+}
+
+/* Set S->gc to a suitable GC for drawing glyph string S in cursor
+   face.  */
+
+static void
+x_set_cursor_gc (struct glyph_string *s)
+{
+  if (s->font == FRAME_FONT (s->f)
+      && s->face->background == FRAME_BACKGROUND_PIXEL (s->f)
+      && s->face->foreground == FRAME_FOREGROUND_PIXEL (s->f) && !s->cmp)
+      s->xgcv = FRAME_X_OUTPUT (s->f)->cursor_xgcv;
+  else
+    {
+      /* Cursor on non-default face: must merge.  */
+      Emacs_GC xgcv;
+
+      xgcv.background = FRAME_X_OUTPUT (s->f)->cursor_color;
+      xgcv.foreground = s->face->background;
+
+      /* If the glyph would be invisible, try a different foreground.  */
+      if (xgcv.foreground == xgcv.background)
+       xgcv.foreground = s->face->foreground;
+      if (xgcv.foreground == xgcv.background)
+       xgcv.foreground = FRAME_X_OUTPUT (s->f)->cursor_foreground_color;
+      if (xgcv.foreground == xgcv.background)
+       xgcv.foreground = s->face->foreground;
+
+      /* Make sure the cursor is distinct from text in this face.  */
+      if (xgcv.background == s->face->background
+         && xgcv.foreground == s->face->foreground)
+       {
+         xgcv.background = s->face->foreground;
+         xgcv.foreground = s->face->background;
+       }
+
+      s->xgcv = xgcv;
+    }
+}
+
+
+/* Set up S->gc of glyph string S for drawing text in mouse face.  */
+
+static void
+x_set_mouse_face_gc (struct glyph_string *s)
+{
+  prepare_face_for_display (s->f, s->face);
+
+  if (s->font == s->face->font)
+    {
+      s->xgcv.foreground = s->face->foreground;
+      s->xgcv.background = s->face->background;
+    }
+  else
+    {
+      /* Otherwise construct scratch_cursor_gc with values from FACE
+         except for FONT.  */
+      Emacs_GC xgcv;
+
+      xgcv.background = s->face->background;
+      xgcv.foreground = s->face->foreground;
+
+      s->xgcv = xgcv;
+
+    }
+}
+
+
+/* Set S->gc of glyph string S to a GC suitable for drawing a mode line.
+   Faces to use in the mode line have already been computed when the
+   matrix was built, so there isn't much to do, here.  */
+
+static void
+x_set_mode_line_face_gc (struct glyph_string *s)
+{
+  s->xgcv.foreground = s->face->foreground;
+  s->xgcv.background = s->face->background;
+}
+
+
+/* Set S->gc of glyph string S for drawing that glyph string.  Set
+   S->stippled_p to a non-zero value if the face of S has a stipple
+   pattern.  */
+
+static void
+x_set_glyph_string_gc (struct glyph_string *s)
+{
+  prepare_face_for_display (s->f, s->face);
+
+  if (s->hl == DRAW_NORMAL_TEXT)
+    {
+      s->xgcv.foreground = s->face->foreground;
+      s->xgcv.background = s->face->background;
+      s->stippled_p = s->face->stipple != 0;
+    }
+  else if (s->hl == DRAW_INVERSE_VIDEO)
+    {
+      x_set_mode_line_face_gc (s);
+      s->stippled_p = s->face->stipple != 0;
+    }
+  else if (s->hl == DRAW_CURSOR)
+    {
+      x_set_cursor_gc (s);
+      s->stippled_p = false;
+    }
+  else if (s->hl == DRAW_MOUSE_FACE)
+    {
+      x_set_mouse_face_gc (s);
+      s->stippled_p = s->face->stipple != 0;
+    }
+  else if (s->hl == DRAW_IMAGE_RAISED || s->hl == DRAW_IMAGE_SUNKEN)
+    {
+      s->xgcv.foreground = s->face->foreground;
+      s->xgcv.background = s->face->background;
+      s->stippled_p = s->face->stipple != 0;
+    }
+  else
+    emacs_abort ();
+}
+
+
+/* Set clipping for output of glyph string S.  S may be part of a mode
+   line or menu if we don't have X toolkit support.  */
+
+static void
+x_set_glyph_string_clipping (struct glyph_string *s, cairo_t * cr)
+{
+  XRectangle r[2];
+  int n = get_glyph_string_clip_rects (s, r, 2);
+
+  if (n > 0)
+    {
+      for (int i = 0; i < n; i++)
+       {
+         cairo_rectangle (cr, r[i].x, r[i].y, r[i].width, r[i].height);
+       }
+      cairo_clip (cr);
+    }
+}
+
+
+/* Set SRC's clipping for output of glyph string DST.  This is called
+   when we are drawing DST's left_overhang or right_overhang only in
+   the area of SRC.  */
+
+static void
+x_set_glyph_string_clipping_exactly (struct glyph_string *src,
+                                    struct glyph_string *dst, cairo_t * cr)
+{
+  dst->clip[0].x = src->x;
+  dst->clip[0].y = src->y;
+  dst->clip[0].width = src->width;
+  dst->clip[0].height = src->height;
+  dst->num_clips = 1;
+
+  cairo_rectangle (cr, src->x, src->y, src->width, src->height);
+  cairo_clip (cr);
+}
+
+
+/* RIF:
+   Compute left and right overhang of glyph string S.  */
+
+static void
+pgtk_compute_glyph_string_overhangs (struct glyph_string *s)
+{
+  if (s->cmp == NULL
+      && (s->first_glyph->type == CHAR_GLYPH
+         || s->first_glyph->type == COMPOSITE_GLYPH))
+    {
+      struct font_metrics metrics;
+
+      if (s->first_glyph->type == CHAR_GLYPH)
+       {
+         unsigned *code = alloca (sizeof (unsigned) * s->nchars);
+         struct font *font = s->font;
+         int i;
+
+         for (i = 0; i < s->nchars; i++)
+           code[i] = s->char2b[i];
+         font->driver->text_extents (font, code, s->nchars, &metrics);
+       }
+      else
+       {
+         Lisp_Object gstring = composition_gstring_from_id (s->cmp_id);
+
+         composition_gstring_width (gstring, s->cmp_from, s->cmp_to,
+                                    &metrics);
+       }
+      s->right_overhang = (metrics.rbearing > metrics.width
+                          ? metrics.rbearing - metrics.width : 0);
+      s->left_overhang = metrics.lbearing < 0 ? -metrics.lbearing : 0;
+    }
+  else if (s->cmp)
+    {
+      s->right_overhang = s->cmp->rbearing - s->cmp->pixel_width;
+      s->left_overhang = -s->cmp->lbearing;
+    }
+}
+
+
+/* Fill rectangle X, Y, W, H with background color of glyph string S.  */
+
+static void
+x_clear_glyph_string_rect (struct glyph_string *s, int x, int y, int w, int h)
+{
+  pgtk_fill_rectangle (s->f, s->xgcv.background, x, y, w, h);
+}
+
+
+static void
+fill_background_by_face (struct frame *f, struct face *face, int x, int y,
+                        int width, int height)
+{
+  cairo_t *cr = pgtk_begin_cr_clip (f);
+
+  cairo_rectangle (cr, x, y, width, height);
+  cairo_clip (cr);
+
+  double r = ((face->background >> 16) & 0xff) / 255.0;
+  double g = ((face->background >> 8) & 0xff) / 255.0;
+  double b = ((face->background >> 0) & 0xff) / 255.0;
+  cairo_set_source_rgb (cr, r, g, b);
+  cairo_paint (cr);
+
+  if (face->stipple != 0)
+    {
+      cairo_pattern_t *mask =
+       FRAME_DISPLAY_INFO (f)->bitmaps[face->stipple - 1].pattern;
+
+      double r = ((face->foreground >> 16) & 0xff) / 255.0;
+      double g = ((face->foreground >> 8) & 0xff) / 255.0;
+      double b = ((face->foreground >> 0) & 0xff) / 255.0;
+      cairo_set_source_rgb (cr, r, g, b);
+      cairo_mask (cr, mask);
+    }
+
+  pgtk_end_cr_clip (f);
+}
+
+static void
+fill_background (struct glyph_string *s, int x, int y, int width, int height)
+{
+  fill_background_by_face (s->f, s->face, x, y, width, height);
+}
+
+/* Draw the background of glyph_string S.  If S->background_filled_p
+   is non-zero don't draw it.  FORCE_P non-zero means draw the
+   background even if it wouldn't be drawn normally.  This is used
+   when a string preceding S draws into the background of S, or S
+   contains the first component of a composition.  */
+
+static void
+x_draw_glyph_string_background (struct glyph_string *s, bool force_p)
+{
+  /* Nothing to do if background has already been drawn or if it
+     shouldn't be drawn in the first place.  */
+  if (!s->background_filled_p)
+    {
+      int box_line_width = max (s->face->box_horizontal_line_width, 0);
+
+      if (s->stippled_p)
+       {
+         /* Fill background with a stipple pattern.  */
+
+         fill_background (s,
+                          s->x, s->y + box_line_width,
+                          s->background_width,
+                          s->height - 2 * box_line_width);
+         s->background_filled_p = true;
+       }
+      else if (FONT_HEIGHT (s->font) < s->height - 2 * box_line_width
+              /* When xdisp.c ignores FONT_HEIGHT, we cannot trust
+                 font dimensions, since the actual glyphs might be
+                 much smaller.  So in that case we always clear the
+                 rectangle with background color.  */
+              || FONT_TOO_HIGH (s->font)
+              || s->font_not_found_p
+              || s->extends_to_end_of_line_p || force_p)
+       {
+         x_clear_glyph_string_rect (s, s->x, s->y + box_line_width,
+                                    s->background_width,
+                                    s->height - 2 * box_line_width);
+         s->background_filled_p = true;
+       }
+    }
+}
+
+
+static void
+pgtk_draw_rectangle (struct frame *f, unsigned long color, int x, int y,
+                    int width, int height)
+{
+  cairo_t *cr;
+
+  cr = pgtk_begin_cr_clip (f);
+  pgtk_set_cr_source_with_color (f, color);
+  cairo_rectangle (cr, x + 0.5, y + 0.5, width, height);
+  cairo_set_line_width (cr, 1);
+  cairo_stroke (cr);
+  pgtk_end_cr_clip (f);
+}
+
+/* Draw the foreground of glyph string S.  */
+
+static void
+x_draw_glyph_string_foreground (struct glyph_string *s)
+{
+  int i, x;
+
+  /* If first glyph of S has a left box line, start drawing the text
+     of S to the right of that box line.  */
+  if (s->face->box != FACE_NO_BOX && s->first_glyph->left_box_line_p)
+    x = s->x + max (s->face->box_vertical_line_width, 0);
+  else
+    x = s->x;
+
+  /* Draw characters of S as rectangles if S's font could not be
+     loaded.  */
+  if (s->font_not_found_p)
+    {
+      for (i = 0; i < s->nchars; ++i)
+       {
+         struct glyph *g = s->first_glyph + i;
+         pgtk_draw_rectangle (s->f,
+                              s->face->foreground, x, s->y,
+                              g->pixel_width - 1, s->height - 1);
+         x += g->pixel_width;
+       }
+    }
+  else
+    {
+      struct font *font = s->font;
+      int boff = font->baseline_offset;
+      int y;
+
+      if (font->vertical_centering)
+       boff = VCENTER_BASELINE_OFFSET (font, s->f) - boff;
+
+      y = s->ybase - boff;
+      if (s->for_overlaps || (s->background_filled_p && s->hl != DRAW_CURSOR))
+       font->driver->draw (s, 0, s->nchars, x, y, false);
+      else
+       font->driver->draw (s, 0, s->nchars, x, y, true);
+      if (s->face->overstrike)
+       font->driver->draw (s, 0, s->nchars, x + 1, y, false);
+    }
+}
+
+/* Draw the foreground of composite glyph string S.  */
+
+static void
+x_draw_composite_glyph_string_foreground (struct glyph_string *s)
+{
+  int i, j, x;
+  struct font *font = s->font;
+
+  /* If first glyph of S has a left box line, start drawing the text
+     of S to the right of that box line.  */
+  if (s->face && s->face->box != FACE_NO_BOX
+      && s->first_glyph->left_box_line_p)
+    x = s->x + max (s->face->box_vertical_line_width, 0);
+  else
+    x = s->x;
+
+  /* S is a glyph string for a composition.  S->cmp_from is the index
+     of the first character drawn for glyphs of this composition.
+     S->cmp_from == 0 means we are drawing the very first character of
+     this composition.  */
+
+  /* Draw a rectangle for the composition if the font for the very
+     first character of the composition could not be loaded.  */
+  if (s->font_not_found_p)
+    {
+      if (s->cmp_from == 0)
+       pgtk_draw_rectangle (s->f, s->face->foreground, x, s->y,
+                            s->width - 1, s->height - 1);
+    }
+  else if (!s->first_glyph->u.cmp.automatic)
+    {
+      int y = s->ybase;
+
+      for (i = 0, j = s->cmp_from; i < s->nchars; i++, j++)
+       /* TAB in a composition means display glyphs with padding
+          space on the left or right.  */
+       if (COMPOSITION_GLYPH (s->cmp, j) != '\t')
+         {
+           int xx = x + s->cmp->offsets[j * 2];
+           int yy = y - s->cmp->offsets[j * 2 + 1];
+
+           font->driver->draw (s, j, j + 1, xx, yy, false);
+           if (s->face->overstrike)
+             font->driver->draw (s, j, j + 1, xx + 1, yy, false);
+         }
+    }
+  else
+    {
+      Lisp_Object gstring = composition_gstring_from_id (s->cmp_id);
+      Lisp_Object glyph;
+      int y = s->ybase;
+      int width = 0;
+
+      for (i = j = s->cmp_from; i < s->cmp_to; i++)
+       {
+         glyph = LGSTRING_GLYPH (gstring, i);
+         if (NILP (LGLYPH_ADJUSTMENT (glyph)))
+           width += LGLYPH_WIDTH (glyph);
+         else
+           {
+             int xoff, yoff, wadjust;
+
+             if (j < i)
+               {
+                 font->driver->draw (s, j, i, x, y, false);
+                 if (s->face->overstrike)
+                   font->driver->draw (s, j, i, x + 1, y, false);
+                 x += width;
+               }
+             xoff = LGLYPH_XOFF (glyph);
+             yoff = LGLYPH_YOFF (glyph);
+             wadjust = LGLYPH_WADJUST (glyph);
+             font->driver->draw (s, i, i + 1, x + xoff, y + yoff, false);
+             if (s->face->overstrike)
+               font->driver->draw (s, i, i + 1, x + xoff + 1, y + yoff,
+                                   false);
+             x += wadjust;
+             j = i + 1;
+             width = 0;
+           }
+       }
+      if (j < i)
+       {
+         font->driver->draw (s, j, i, x, y, false);
+         if (s->face->overstrike)
+           font->driver->draw (s, j, i, x + 1, y, false);
+       }
+    }
+}
+
+
+/* Draw the foreground of glyph string S for glyphless characters.  */
+
+static void
+x_draw_glyphless_glyph_string_foreground (struct glyph_string *s)
+{
+  struct glyph *glyph = s->first_glyph;
+  unsigned char2b[8];
+  int x, i, j;
+
+  /* If first glyph of S has a left box line, start drawing the text
+     of S to the right of that box line.  */
+  if (s->face && s->face->box != FACE_NO_BOX
+      && s->first_glyph->left_box_line_p)
+    x = s->x + max (s->face->box_vertical_line_width, 0);
+  else
+    x = s->x;
+
+  s->char2b = char2b;
+
+  for (i = 0; i < s->nchars; i++, glyph++)
+    {
+#ifdef GCC_LINT
+      enum
+      { PACIFY_GCC_BUG_81401 = 1 };
+#else
+      enum
+      { PACIFY_GCC_BUG_81401 = 0 };
+#endif
+      char buf[7 + PACIFY_GCC_BUG_81401];
+      char *str = NULL;
+      int len = glyph->u.glyphless.len;
+
+      if (glyph->u.glyphless.method == GLYPHLESS_DISPLAY_ACRONYM)
+       {
+         if (len > 0
+             && CHAR_TABLE_P (Vglyphless_char_display)
+             &&
+             (CHAR_TABLE_EXTRA_SLOTS (XCHAR_TABLE (Vglyphless_char_display))
+              >= 1))
+           {
+             Lisp_Object acronym
+               = (!glyph->u.glyphless.for_no_font
+                  ? CHAR_TABLE_REF (Vglyphless_char_display,
+                                    glyph->u.glyphless.ch)
+                  : XCHAR_TABLE (Vglyphless_char_display)->extras[0]);
+             if (STRINGP (acronym))
+               str = SSDATA (acronym);
+           }
+       }
+      else if (glyph->u.glyphless.method == GLYPHLESS_DISPLAY_HEX_CODE)
+       {
+         unsigned int ch = glyph->u.glyphless.ch;
+         eassume (ch <= MAX_CHAR);
+         sprintf (buf, "%0*X", ch < 0x10000 ? 4 : 6, ch);
+         str = buf;
+       }
+
+      if (str)
+       {
+         int upper_len = (len + 1) / 2;
+
+         /* It is assured that all LEN characters in STR is ASCII.  */
+         for (j = 0; j < len; j++)
+           char2b[j] =
+             s->font->driver->encode_char (s->font, str[j]) & 0xFFFF;
+         s->font->driver->draw (s, 0, upper_len,
+                                x + glyph->slice.glyphless.upper_xoff,
+                                s->ybase + glyph->slice.glyphless.upper_yoff,
+                                false);
+         s->font->driver->draw (s, upper_len, len,
+                                x + glyph->slice.glyphless.lower_xoff,
+                                s->ybase + glyph->slice.glyphless.lower_yoff,
+                                false);
+       }
+      if (glyph->u.glyphless.method != GLYPHLESS_DISPLAY_THIN_SPACE)
+       pgtk_draw_rectangle (s->f, s->face->foreground,
+                            x, s->ybase - glyph->ascent,
+                            glyph->pixel_width - 1,
+                            glyph->ascent + glyph->descent - 1);
+      x += glyph->pixel_width;
+    }
+}
+
+/* Brightness beyond which a color won't have its highlight brightness
+   boosted.
+
+   Nominally, highlight colors for `3d' faces are calculated by
+   brightening an object's color by a constant scale factor, but this
+   doesn't yield good results for dark colors, so for colors who's
+   brightness is less than this value (on a scale of 0-65535) have an
+   use an additional additive factor.
+
+   The value here is set so that the default menu-bar/mode-line color
+   (grey75) will not have its highlights changed at all.  */
+#define HIGHLIGHT_COLOR_DARK_BOOST_LIMIT 48000
+
+
+/* Allocate a color which is lighter or darker than *PIXEL by FACTOR
+   or DELTA.  Try a color with RGB values multiplied by FACTOR first.
+   If this produces the same color as PIXEL, try a color where all RGB
+   values have DELTA added.  Return the allocated color in *PIXEL.
+   DISPLAY is the X display, CMAP is the colormap to operate on.
+   Value is non-zero if successful.  */
+
+static bool
+x_alloc_lighter_color (struct frame *f, unsigned long *pixel, double factor,
+                      int delta)
+{
+  Emacs_Color color, new;
+  long bright;
+  bool success_p;
+
+  /* Get RGB color values.  */
+  color.pixel = *pixel;
+  pgtk_query_color (f, &color);
+
+  /* Change RGB values by specified FACTOR.  Avoid overflow!  */
+  eassert (factor >= 0);
+  new.red = min (0xffff, factor * color.red);
+  new.green = min (0xffff, factor * color.green);
+  new.blue = min (0xffff, factor * color.blue);
+
+  /* Calculate brightness of COLOR.  */
+  bright = (2 * color.red + 3 * color.green + color.blue) / 6;
+
+  /* We only boost colors that are darker than
+     HIGHLIGHT_COLOR_DARK_BOOST_LIMIT.  */
+  if (bright < HIGHLIGHT_COLOR_DARK_BOOST_LIMIT)
+    /* Make an additive adjustment to NEW, because it's dark enough so
+       that scaling by FACTOR alone isn't enough.  */
+    {
+      /* How far below the limit this color is (0 - 1, 1 being darker).  */
+      double dimness = 1 - (double) bright / HIGHLIGHT_COLOR_DARK_BOOST_LIMIT;
+      /* The additive adjustment.  */
+      int min_delta = delta * dimness * factor / 2;
+
+      if (factor < 1)
+       {
+         new.red = max (0, new.red - min_delta);
+         new.green = max (0, new.green - min_delta);
+         new.blue = max (0, new.blue - min_delta);
+       }
+      else
+       {
+         new.red = min (0xffff, min_delta + new.red);
+         new.green = min (0xffff, min_delta + new.green);
+         new.blue = min (0xffff, min_delta + new.blue);
+       }
+    }
+
+  /* Try to allocate the color.  */
+  new.pixel = new.red >> 8 << 16 | new.green >> 8 << 8 | new.blue >> 8;
+  success_p = true;
+  if (success_p)
+    {
+      if (new.pixel == *pixel)
+       {
+         /* If we end up with the same color as before, try adding
+            delta to the RGB values.  */
+         new.red = min (0xffff, delta + color.red);
+         new.green = min (0xffff, delta + color.green);
+         new.blue = min (0xffff, delta + color.blue);
+         new.pixel =
+           new.red >> 8 << 16 | new.green >> 8 << 8 | new.blue >> 8;
+         success_p = true;
+       }
+      else
+       success_p = true;
+      *pixel = new.pixel;
+    }
+
+  return success_p;
+}
+
+static void
+x_fill_trapezoid_for_relief (struct frame *f, unsigned long color, int x,
+                            int y, int width, int height, int top_p)
+{
+  cairo_t *cr;
+
+  cr = pgtk_begin_cr_clip (f);
+  pgtk_set_cr_source_with_color (f, color);
+  cairo_move_to (cr, top_p ? x : x + height, y);
+  cairo_line_to (cr, x, y + height);
+  cairo_line_to (cr, top_p ? x + width - height : x + width, y + height);
+  cairo_line_to (cr, x + width, y);
+  cairo_fill (cr);
+  pgtk_end_cr_clip (f);
+}
+
+enum corners
+{
+  CORNER_BOTTOM_RIGHT,         /* 0 -> pi/2 */
+  CORNER_BOTTOM_LEFT,          /* pi/2 -> pi */
+  CORNER_TOP_LEFT,             /* pi -> 3pi/2 */
+  CORNER_TOP_RIGHT,            /* 3pi/2 -> 2pi */
+  CORNER_LAST
+};
+
+static void
+x_erase_corners_for_relief (struct frame *f, unsigned long color, int x,
+                           int y, int width, int height, double radius,
+                           double margin, int corners)
+{
+  cairo_t *cr;
+  int i;
+
+  cr = pgtk_begin_cr_clip (f);
+  pgtk_set_cr_source_with_color (f, color);
+  for (i = 0; i < CORNER_LAST; i++)
+    if (corners & (1 << i))
+      {
+       double xm, ym, xc, yc;
+
+       if (i == CORNER_TOP_LEFT || i == CORNER_BOTTOM_LEFT)
+         xm = x - margin, xc = xm + radius;
+       else
+         xm = x + width + margin, xc = xm - radius;
+       if (i == CORNER_TOP_LEFT || i == CORNER_TOP_RIGHT)
+         ym = y - margin, yc = ym + radius;
+       else
+         ym = y + height + margin, yc = ym - radius;
+
+       cairo_move_to (cr, xm, ym);
+       cairo_arc (cr, xc, yc, radius, i * M_PI_2, (i + 1) * M_PI_2);
+      }
+  cairo_clip (cr);
+  cairo_rectangle (cr, x, y, width, height);
+  cairo_fill (cr);
+  pgtk_end_cr_clip (f);
+}
+
+/* Set up the foreground color for drawing relief lines of glyph
+   string S.  RELIEF is a pointer to a struct relief containing the GC
+   with which lines will be drawn.  Use a color that is FACTOR or
+   DELTA lighter or darker than the relief's background which is found
+   in S->f->output_data.pgtk->relief_background.  If such a color cannot
+   be allocated, use DEFAULT_PIXEL, instead.  */
+
+static void
+x_setup_relief_color (struct frame *f, struct relief *relief, double factor,
+                     int delta, unsigned long default_pixel)
+{
+  Emacs_GC xgcv;
+  struct pgtk_output *di = FRAME_X_OUTPUT (f);
+  unsigned long pixel;
+  unsigned long background = di->relief_background;
+
+  /* Allocate new color.  */
+  xgcv.foreground = default_pixel;
+  pixel = background;
+  if (x_alloc_lighter_color (f, &pixel, factor, delta))
+    xgcv.foreground = relief->pixel = pixel;
+
+  relief->xgcv = xgcv;
+}
+
+/* Set up colors for the relief lines around glyph string S.  */
+
+static void
+x_setup_relief_colors (struct glyph_string *s)
+{
+  struct pgtk_output *di = FRAME_X_OUTPUT (s->f);
+  unsigned long color;
+
+  if (s->face->use_box_color_for_shadows_p)
+    color = s->face->box_color;
+  else if (s->first_glyph->type == IMAGE_GLYPH
+          && s->img->pixmap
+          && !IMAGE_BACKGROUND_TRANSPARENT (s->img, s->f, 0))
+    color = IMAGE_BACKGROUND (s->img, s->f, 0);
+  else
+    {
+      /* Get the background color of the face.  */
+      color = s->xgcv.background;
+    }
+
+  if (TRUE)
+    {
+      di->relief_background = color;
+      x_setup_relief_color (s->f, &di->white_relief, 1.2, 0x8000,
+                           WHITE_PIX_DEFAULT (s->f));
+      x_setup_relief_color (s->f, &di->black_relief, 0.6, 0x4000,
+                           BLACK_PIX_DEFAULT (s->f));
+    }
+}
+
+
+static void
+x_set_clip_rectangles (struct frame *f, cairo_t * cr, XRectangle * rectangles,
+                      int n)
+{
+  if (n > 0)
+    {
+      for (int i = 0; i < n; i++)
+       {
+         cairo_rectangle (cr,
+                          rectangles[i].x,
+                          rectangles[i].y,
+                          rectangles[i].width, rectangles[i].height);
+       }
+      cairo_clip (cr);
+    }
+}
+
+/* Draw a relief on frame F inside the rectangle given by LEFT_X,
+   TOP_Y, RIGHT_X, and BOTTOM_Y.  WIDTH is the thickness of the relief
+   to draw, it must be >= 0.  RAISED_P means draw a raised
+   relief.  LEFT_P means draw a relief on the left side of
+   the rectangle.  RIGHT_P means draw a relief on the right
+   side of the rectangle.  CLIP_RECT is the clipping rectangle to use
+   when drawing.  */
+
+static void
+x_draw_relief_rect (struct frame *f,
+                   int left_x, int top_y, int right_x, int bottom_y,
+                   int hwidth, int vwidth, bool raised_p, bool top_p,
+                   bool bot_p, bool left_p, bool right_p,
+                   XRectangle * clip_rect)
+{
+  unsigned long top_left_color, bottom_right_color;
+  int corners = 0;
+
+  cairo_t *cr = pgtk_begin_cr_clip (f);
+
+  if (raised_p)
+    {
+      top_left_color = FRAME_X_OUTPUT (f)->white_relief.xgcv.foreground;
+      bottom_right_color = FRAME_X_OUTPUT (f)->black_relief.xgcv.foreground;
+    }
+  else
+    {
+      top_left_color = FRAME_X_OUTPUT (f)->black_relief.xgcv.foreground;
+      bottom_right_color = FRAME_X_OUTPUT (f)->white_relief.xgcv.foreground;
+    }
+
+  x_set_clip_rectangles (f, cr, clip_rect, 1);
+
+  if (left_p)
+    {
+      pgtk_fill_rectangle (f, top_left_color, left_x, top_y,
+                          vwidth, bottom_y + 1 - top_y);
+      if (top_p)
+       corners |= 1 << CORNER_TOP_LEFT;
+      if (bot_p)
+       corners |= 1 << CORNER_BOTTOM_LEFT;
+    }
+  if (right_p)
+    {
+      pgtk_fill_rectangle (f, bottom_right_color, right_x + 1 - vwidth, top_y,
+                          vwidth, bottom_y + 1 - top_y);
+      if (top_p)
+       corners |= 1 << CORNER_TOP_RIGHT;
+      if (bot_p)
+       corners |= 1 << CORNER_BOTTOM_RIGHT;
+    }
+  if (top_p)
+    {
+      if (!right_p)
+       pgtk_fill_rectangle (f, top_left_color, left_x, top_y,
+                            right_x + 1 - left_x, hwidth);
+      else
+       x_fill_trapezoid_for_relief (f, top_left_color, left_x, top_y,
+                                    right_x + 1 - left_x, hwidth, 1);
+    }
+  if (bot_p)
+    {
+      if (!left_p)
+       pgtk_fill_rectangle (f, bottom_right_color, left_x,
+                            bottom_y + 1 - hwidth, right_x + 1 - left_x,
+                            hwidth);
+      else
+       x_fill_trapezoid_for_relief (f, bottom_right_color,
+                                    left_x, bottom_y + 1 - hwidth,
+                                    right_x + 1 - left_x, hwidth, 0);
+    }
+  if (left_p && vwidth > 1)
+    pgtk_fill_rectangle (f, bottom_right_color, left_x, top_y,
+                        1, bottom_y + 1 - top_y);
+  if (top_p && hwidth > 1)
+    pgtk_fill_rectangle (f, bottom_right_color, left_x, top_y,
+                        right_x + 1 - left_x, 1);
+  if (corners)
+    {
+      x_erase_corners_for_relief (f, FRAME_BACKGROUND_PIXEL (f), left_x,
+                                 top_y, right_x - left_x + 1,
+                                 bottom_y - top_y + 1, 6, 1, corners);
+    }
+
+  pgtk_end_cr_clip (f);
+}
+
+/* Draw a box on frame F inside the rectangle given by LEFT_X, TOP_Y,
+   RIGHT_X, and BOTTOM_Y.  WIDTH is the thickness of the lines to
+   draw, it must be >= 0.  LEFT_P means draw a line on the
+   left side of the rectangle.  RIGHT_P means draw a line
+   on the right side of the rectangle.  CLIP_RECT is the clipping
+   rectangle to use when drawing.  */
+
+static void
+x_draw_box_rect (struct glyph_string *s,
+                int left_x, int top_y, int right_x, int bottom_y, int hwidth,
+                int vwidth, bool left_p, bool right_p,
+                XRectangle * clip_rect)
+{
+  unsigned long foreground_backup;
+
+  cairo_t *cr = pgtk_begin_cr_clip (s->f);
+
+  foreground_backup = s->xgcv.foreground;
+  s->xgcv.foreground = s->face->box_color;
+
+  x_set_clip_rectangles (s->f, cr, clip_rect, 1);
+
+  /* Top.  */
+  pgtk_fill_rectangle (s->f, s->xgcv.foreground,
+                      left_x, top_y, right_x - left_x + 1, hwidth);
+
+  /* Left.  */
+  if (left_p)
+    pgtk_fill_rectangle (s->f, s->xgcv.foreground,
+                        left_x, top_y, vwidth, bottom_y - top_y + 1);
+
+  /* Bottom.  */
+  pgtk_fill_rectangle (s->f, s->xgcv.foreground,
+                      left_x, bottom_y - hwidth + 1, right_x - left_x + 1,
+                      hwidth);
+
+  /* Right.  */
+  if (right_p)
+    pgtk_fill_rectangle (s->f, s->xgcv.foreground,
+                        right_x - vwidth + 1, top_y, vwidth,
+                        bottom_y - top_y + 1);
+
+  s->xgcv.foreground = foreground_backup;
+
+  pgtk_end_cr_clip (s->f);
+}
+
+
+/* Draw a box around glyph string S.  */
+
+static void
+x_draw_glyph_string_box (struct glyph_string *s)
+{
+  int hwidth, vwidth, left_x, right_x, top_y, bottom_y, last_x;
+  bool raised_p, left_p, right_p;
+  struct glyph *last_glyph;
+  XRectangle clip_rect;
+
+  last_x = ((s->row->full_width_p && !s->w->pseudo_window_p)
+           ? WINDOW_RIGHT_EDGE_X (s->w) : window_box_right (s->w, s->area));
+
+  /* The glyph that may have a right box line.  */
+  last_glyph = (s->cmp || s->img
+               ? s->first_glyph : s->first_glyph + s->nchars - 1);
+
+  vwidth = eabs (s->face->box_vertical_line_width);
+  hwidth = eabs (s->face->box_horizontal_line_width);
+  raised_p = s->face->box == FACE_RAISED_BOX;
+  left_x = s->x;
+  right_x = (s->row->full_width_p && s->extends_to_end_of_line_p
+            ? last_x - 1 : min (last_x, s->x + s->background_width) - 1);
+  top_y = s->y;
+  bottom_y = top_y + s->height - 1;
+
+  left_p = (s->first_glyph->left_box_line_p
+           || (s->hl == DRAW_MOUSE_FACE
+               && (s->prev == NULL || s->prev->hl != s->hl)));
+  right_p = (last_glyph->right_box_line_p
+            || (s->hl == DRAW_MOUSE_FACE
+                && (s->next == NULL || s->next->hl != s->hl)));
+
+  get_glyph_string_clip_rect (s, &clip_rect);
+
+  if (s->face->box == FACE_SIMPLE_BOX)
+    x_draw_box_rect (s, left_x, top_y, right_x, bottom_y, hwidth,
+                    vwidth, left_p, right_p, &clip_rect);
+  else
+    {
+      x_setup_relief_colors (s);
+      x_draw_relief_rect (s->f, left_x, top_y, right_x, bottom_y, hwidth,
+                         vwidth, raised_p, true, true, left_p, right_p,
+                         &clip_rect);
+    }
+}
+
+static void
+x_get_scale_factor (int *scale_x, int *scale_y)
+{
+  *scale_x = *scale_y = 1;
+}
+
+static void
+x_draw_horizontal_wave (struct frame *f, unsigned long color, int x, int y,
+                       int width, int height, int wave_length)
+{
+  cairo_t *cr;
+  double dx = wave_length, dy = height - 1;
+  int xoffset, n;
+
+  cr = pgtk_begin_cr_clip (f);
+  pgtk_set_cr_source_with_color (f, color);
+  cairo_rectangle (cr, x, y, width, height);
+  cairo_clip (cr);
+
+  if (x >= 0)
+    {
+      xoffset = x % (wave_length * 2);
+      if (xoffset == 0)
+       xoffset = wave_length * 2;
+    }
+  else
+    xoffset = x % (wave_length * 2) + wave_length * 2;
+  n = (width + xoffset) / wave_length + 1;
+  if (xoffset > wave_length)
+    {
+      xoffset -= wave_length;
+      --n;
+      y += height - 1;
+      dy = -dy;
+    }
+
+  cairo_move_to (cr, x - xoffset + 0.5, y + 0.5);
+  while (--n >= 0)
+    {
+      cairo_rel_line_to (cr, dx, dy);
+      dy = -dy;
+    }
+  cairo_set_line_width (cr, 1);
+  cairo_stroke (cr);
+  pgtk_end_cr_clip (f);
+}
+
+/*
+   Draw a wavy line under S. The wave fills wave_height pixels from y0.
+
+                    x0         wave_length = 2
+                                 --
+                y0   *   *   *   *   *
+                     |* * * * * * * * *
+    wave_height = 3  | *   *   *   *
+
+*/
+static void
+x_draw_underwave (struct glyph_string *s, unsigned long color)
+{
+  /* Adjust for scale/HiDPI.  */
+  int scale_x, scale_y;
+
+  x_get_scale_factor (&scale_x, &scale_y);
+
+  int wave_height = 3 * scale_y, wave_length = 2 * scale_x;
+
+  x_draw_horizontal_wave (s->f, color, s->x, s->ybase - wave_height + 3,
+                         s->width, wave_height, wave_length);
+}
+
+/* Draw a relief around the image glyph string S.  */
+
+static void
+x_draw_image_relief (struct glyph_string *s)
+{
+  int x1, y1, thick;
+  bool raised_p, top_p, bot_p, left_p, right_p;
+  int extra_x, extra_y;
+  XRectangle r;
+  int x = s->x;
+  int y = s->ybase - image_ascent (s->img, s->face, &s->slice);
+
+  /* If first glyph of S has a left box line, start drawing it to the
+     right of that line.  */
+  if (s->face->box != FACE_NO_BOX
+      && s->first_glyph->left_box_line_p
+      && s->slice.x == 0)
+    x += max (s->face->box_vertical_line_width, 0);
+
+  /* If there is a margin around the image, adjust x- and y-position
+     by that margin.  */
+  if (s->slice.x == 0)
+    x += s->img->hmargin;
+  if (s->slice.y == 0)
+    y += s->img->vmargin;
+
+  if (s->hl == DRAW_IMAGE_SUNKEN
+      || s->hl == DRAW_IMAGE_RAISED)
+    {
+      if (s->face->id == TAB_BAR_FACE_ID)
+       thick = (tab_bar_button_relief < 0
+                ? DEFAULT_TAB_BAR_BUTTON_RELIEF
+                : min (tab_bar_button_relief, 1000000));
+      else
+       thick = (tool_bar_button_relief < 0
+                ? DEFAULT_TOOL_BAR_BUTTON_RELIEF
+                : min (tool_bar_button_relief, 1000000));
+      raised_p = s->hl == DRAW_IMAGE_RAISED;
+    }
+  else
+    {
+      thick = eabs (s->img->relief);
+      raised_p = s->img->relief > 0;
+    }
+
+  x1 = x + s->slice.width - 1;
+  y1 = y + s->slice.height - 1;
+
+  extra_x = extra_y = 0;
+  if (s->face->id == TAB_BAR_FACE_ID)
+    {
+      if (CONSP (Vtab_bar_button_margin)
+         && FIXNUMP (XCAR (Vtab_bar_button_margin))
+         && FIXNUMP (XCDR (Vtab_bar_button_margin)))
+       {
+         extra_x = XFIXNUM (XCAR (Vtab_bar_button_margin)) - thick;
+         extra_y = XFIXNUM (XCDR (Vtab_bar_button_margin)) - thick;
+       }
+      else if (FIXNUMP (Vtab_bar_button_margin))
+       extra_x = extra_y = XFIXNUM (Vtab_bar_button_margin) - thick;
+    }
+
+  if (s->face->id == TOOL_BAR_FACE_ID)
+    {
+      if (CONSP (Vtool_bar_button_margin)
+         && FIXNUMP (XCAR (Vtool_bar_button_margin))
+         && FIXNUMP (XCDR (Vtool_bar_button_margin)))
+       {
+         extra_x = XFIXNUM (XCAR (Vtool_bar_button_margin));
+         extra_y = XFIXNUM (XCDR (Vtool_bar_button_margin));
+       }
+      else if (FIXNUMP (Vtool_bar_button_margin))
+       extra_x = extra_y = XFIXNUM (Vtool_bar_button_margin);
+    }
+
+  top_p = bot_p = left_p = right_p = false;
+
+  if (s->slice.x == 0)
+    x -= thick + extra_x, left_p = true;
+  if (s->slice.y == 0)
+    y -= thick + extra_y, top_p = true;
+  if (s->slice.x + s->slice.width == s->img->width)
+    x1 += thick + extra_x, right_p = true;
+  if (s->slice.y + s->slice.height == s->img->height)
+    y1 += thick + extra_y, bot_p = true;
+
+  x_setup_relief_colors (s);
+  get_glyph_string_clip_rect (s, &r);
+  x_draw_relief_rect (s->f, x, y, x1, y1, thick, thick, raised_p,
+                     top_p, bot_p, left_p, right_p, &r);
+}
+
+/* Draw part of the background of glyph string S.  X, Y, W, and H
+   give the rectangle to draw.  */
+
+static void
+x_draw_glyph_string_bg_rect (struct glyph_string *s, int x, int y, int w,
+                            int h)
+{
+  if (s->stippled_p)
+    {
+      /* Fill background with a stipple pattern.  */
+
+      fill_background (s, x, y, w, h);
+    }
+  else
+    x_clear_glyph_string_rect (s, x, y, w, h);
+}
+
+static void
+x_cr_draw_image (struct frame *f, Emacs_GC *gc, cairo_pattern_t *image,
+                int src_x, int src_y, int width, int height,
+                int dest_x, int dest_y, bool overlay_p)
+{
+  cairo_t *cr = pgtk_begin_cr_clip (f);
+
+  if (overlay_p)
+    cairo_rectangle (cr, dest_x, dest_y, width, height);
+  else
+    {
+      pgtk_set_cr_source_with_gc_background (f, gc);
+      cairo_rectangle (cr, dest_x, dest_y, width, height);
+      cairo_fill_preserve (cr);
+    }
+
+  cairo_translate (cr, dest_x - src_x, dest_y - src_y);
+
+  cairo_surface_t *surface;
+  cairo_pattern_get_surface (image, &surface);
+  cairo_format_t format = cairo_image_surface_get_format (surface);
+  if (format != CAIRO_FORMAT_A8 && format != CAIRO_FORMAT_A1)
+    {
+      cairo_set_source (cr, image);
+      cairo_fill (cr);
+    }
+  else
+    {
+      pgtk_set_cr_source_with_gc_foreground (f, gc);
+      cairo_clip (cr);
+      cairo_mask (cr, image);
+    }
+
+  pgtk_end_cr_clip (f);
+}
+
+/* Draw foreground of image glyph string S.  */
+
+static void
+x_draw_image_foreground (struct glyph_string *s)
+{
+  int x = s->x;
+  int y = s->ybase - image_ascent (s->img, s->face, &s->slice);
+
+  /* If first glyph of S has a left box line, start drawing it to the
+     right of that line.  */
+  if (s->face->box != FACE_NO_BOX
+      && s->first_glyph->left_box_line_p
+      && s->slice.x == 0)
+    x += max (s->face->box_vertical_line_width, 0);
+
+  /* If there is a margin around the image, adjust x- and y-position
+     by that margin.  */
+  if (s->slice.x == 0)
+    x += s->img->hmargin;
+  if (s->slice.y == 0)
+    y += s->img->vmargin;
+
+  if (s->img->cr_data)
+    {
+      cairo_t *cr = pgtk_begin_cr_clip (s->f);
+      x_set_glyph_string_clipping (s, cr);
+      x_cr_draw_image (s->f, &s->xgcv, s->img->cr_data,
+                      s->slice.x, s->slice.y, s->slice.width, s->slice.height,
+                      x, y, true);
+      if (!s->img->mask)
+       {
+         /* When the image has a mask, we can expect that at
+            least part of a mouse highlight or a block cursor will
+            be visible.  If the image doesn't have a mask, make
+            a block cursor visible by drawing a rectangle around
+            the image.  I believe it's looking better if we do
+            nothing here for mouse-face.  */
+         if (s->hl == DRAW_CURSOR)
+           {
+             int relief = eabs (s->img->relief);
+             pgtk_draw_rectangle (s->f, s->xgcv.foreground, x - relief, y - 
relief,
+                                  s->slice.width + relief*2 - 1,
+                                  s->slice.height + relief*2 - 1);
+           }
+       }
+      pgtk_end_cr_clip (s->f);
+    }
+  else
+    /* Draw a rectangle if image could not be loaded.  */
+    pgtk_draw_rectangle (s->f, s->xgcv.foreground, x, y,
+                        s->slice.width - 1, s->slice.height - 1);
+}
+
+/* Draw image glyph string S.
+
+            s->y
+   s->x      +-------------------------
+            |   s->face->box
+            |
+            |     +-------------------------
+            |     |  s->img->margin
+            |     |
+            |     |       +-------------------
+            |     |       |  the image
+
+ */
+
+static void
+x_draw_image_glyph_string (struct glyph_string *s)
+{
+  int box_line_hwidth = max (s->face->box_vertical_line_width, 0);
+  int box_line_vwidth = max (s->face->box_horizontal_line_width, 0);
+  int height;
+
+  height = s->height;
+  if (s->slice.y == 0)
+    height -= box_line_vwidth;
+  if (s->slice.y + s->slice.height >= s->img->height)
+    height -= box_line_vwidth;
+
+  /* Fill background with face under the image.  Do it only if row is
+     taller than image or if image has a clip mask to reduce
+     flickering.  */
+  s->stippled_p = s->face->stipple != 0;
+  if (height > s->slice.height
+      || s->img->hmargin
+      || s->img->vmargin
+      || s->img->mask
+      || s->img->pixmap == 0
+      || s->width != s->background_width)
+    {
+       {
+         int x = s->x;
+         int y = s->y;
+         int width = s->background_width;
+
+         if (s->first_glyph->left_box_line_p
+             && s->slice.x == 0)
+           {
+             x += box_line_hwidth;
+             width -= box_line_hwidth;
+           }
+
+         if (s->slice.y == 0)
+           y += box_line_vwidth;
+
+         x_draw_glyph_string_bg_rect (s, x, y, width, height);
+       }
+
+      s->background_filled_p = true;
+    }
+
+  /* Draw the foreground.  */
+  x_draw_image_foreground (s);
+
+  /* If we must draw a relief around the image, do it.  */
+  if (s->img->relief
+      || s->hl == DRAW_IMAGE_RAISED
+      || s->hl == DRAW_IMAGE_SUNKEN)
+    x_draw_image_relief (s);
+}
+
+/* Draw stretch glyph string S.  */
+
+static void
+x_draw_stretch_glyph_string (struct glyph_string *s)
+{
+  eassert (s->first_glyph->type == STRETCH_GLYPH);
+
+  if (s->hl == DRAW_CURSOR && !x_stretch_cursor_p)
+    {
+      /* If `x-stretch-cursor' is nil, don't draw a block cursor as
+         wide as the stretch glyph.  */
+      int width, background_width = s->background_width;
+      int x = s->x;
+
+      if (!s->row->reversed_p)
+       {
+         int left_x = window_box_left_offset (s->w, TEXT_AREA);
+
+         if (x < left_x)
+           {
+             background_width -= left_x - x;
+             x = left_x;
+           }
+       }
+      else
+       {
+         /* In R2L rows, draw the cursor on the right edge of the
+            stretch glyph.  */
+         int right_x = window_box_right (s->w, TEXT_AREA);
+
+         if (x + background_width > right_x)
+           background_width -= x - right_x;
+         x += background_width;
+       }
+      width = min (FRAME_COLUMN_WIDTH (s->f), background_width);
+      if (s->row->reversed_p)
+       x -= width;
+
+      /* Draw cursor.  */
+      x_draw_glyph_string_bg_rect (s, x, s->y, width, s->height);
+
+      /* Clear rest using the GC of the original non-cursor face.  */
+      if (width < background_width)
+       {
+         int y = s->y;
+         int w = background_width - width, h = s->height;
+         XRectangle r;
+         unsigned long color;
+
+         if (!s->row->reversed_p)
+           x += width;
+         else
+           x = s->x;
+         if (s->row->mouse_face_p && cursor_in_mouse_face_p (s->w))
+           {
+             x_set_mouse_face_gc (s);
+             color = s->xgcv.foreground;
+           }
+         else
+           color = s->face->background;
+
+         cairo_t *cr = pgtk_begin_cr_clip (s->f);
+
+         get_glyph_string_clip_rect (s, &r);
+         x_set_clip_rectangles (s->f, cr, &r, 1);
+
+         if (s->face->stipple)
+           {
+             /* Fill background with a stipple pattern.  */
+             fill_background (s, x, y, w, h);
+           }
+         else
+           {
+             pgtk_fill_rectangle (s->f, color, x, y, w, h);
+           }
+
+         pgtk_end_cr_clip (s->f);
+       }
+    }
+  else if (!s->background_filled_p)
+    {
+      int background_width = s->background_width;
+      int x = s->x, text_left_x = window_box_left_offset (s->w, TEXT_AREA);
+
+      /* Don't draw into left fringe or scrollbar area except for
+         header line and mode line.  */
+      if (x < text_left_x && !s->row->mode_line_p)
+       {
+         int left_x = WINDOW_LEFT_SCROLL_BAR_AREA_WIDTH (s->w);
+         int right_x = text_left_x;
+
+         if (WINDOW_HAS_FRINGES_OUTSIDE_MARGINS (s->w))
+           left_x += WINDOW_LEFT_FRINGE_WIDTH (s->w);
+         else
+           right_x -= WINDOW_LEFT_FRINGE_WIDTH (s->w);
+
+         /* Adjust X and BACKGROUND_WIDTH to fit inside the space
+            between LEFT_X and RIGHT_X.  */
+         if (x < left_x)
+           {
+             background_width -= left_x - x;
+             x = left_x;
+           }
+         if (x + background_width > right_x)
+           background_width = right_x - x;
+       }
+      if (background_width > 0)
+       x_draw_glyph_string_bg_rect (s, x, s->y, background_width, s->height);
+    }
+
+  s->background_filled_p = true;
+}
+
+static void
+pgtk_draw_glyph_string (struct glyph_string *s)
+{
+  bool relief_drawn_p = false;
+
+  /* If S draws into the background of its successors, draw the
+     background of the successors first so that S can draw into it.
+     This makes S->next use XDrawString instead of XDrawImageString.  */
+  if (s->next && s->right_overhang && !s->for_overlaps)
+    {
+      int width;
+      struct glyph_string *next;
+
+      for (width = 0, next = s->next;
+          next && width < s->right_overhang;
+          width += next->width, next = next->next)
+       if (next->first_glyph->type != IMAGE_GLYPH)
+         {
+           cairo_t *cr = pgtk_begin_cr_clip (next->f);
+           x_set_glyph_string_gc (next);
+           x_set_glyph_string_clipping (next, cr);
+           if (next->first_glyph->type == STRETCH_GLYPH)
+             x_draw_stretch_glyph_string (next);
+           else
+             x_draw_glyph_string_background (next, true);
+           next->num_clips = 0;
+           pgtk_end_cr_clip (next->f);
+         }
+    }
+
+  /* Set up S->gc, set clipping and draw S.  */
+  x_set_glyph_string_gc (s);
+
+  cairo_t *cr = pgtk_begin_cr_clip (s->f);
+
+  /* Draw relief (if any) in advance for char/composition so that the
+     glyph string can be drawn over it.  */
+  if (!s->for_overlaps
+      && s->face->box != FACE_NO_BOX
+      && (s->first_glyph->type == CHAR_GLYPH
+         || s->first_glyph->type == COMPOSITE_GLYPH))
+
+    {
+      x_set_glyph_string_clipping (s, cr);
+      x_draw_glyph_string_background (s, true);
+      x_draw_glyph_string_box (s);
+      x_set_glyph_string_clipping (s, cr);
+      relief_drawn_p = true;
+    }
+  else if (!s->clip_head       /* draw_glyphs didn't specify a clip mask. */
+          && !s->clip_tail
+          && ((s->prev && s->prev->hl != s->hl && s->left_overhang)
+              || (s->next && s->next->hl != s->hl && s->right_overhang)))
+    /* We must clip just this glyph.  left_overhang part has already
+       drawn when s->prev was drawn, and right_overhang part will be
+       drawn later when s->next is drawn. */
+      x_set_glyph_string_clipping_exactly (s, s, cr);
+  else
+      x_set_glyph_string_clipping (s, cr);
+
+  switch (s->first_glyph->type)
+    {
+    case IMAGE_GLYPH:
+      x_draw_image_glyph_string (s);
+      break;
+
+    case XWIDGET_GLYPH:
+      x_draw_xwidget_glyph_string (s);
+      break;
+
+    case STRETCH_GLYPH:
+      x_draw_stretch_glyph_string (s);
+      break;
+
+    case CHAR_GLYPH:
+      if (s->for_overlaps)
+       s->background_filled_p = true;
+      else
+       x_draw_glyph_string_background (s, false);
+      x_draw_glyph_string_foreground (s);
+      break;
+
+    case COMPOSITE_GLYPH:
+      if (s->for_overlaps || (s->cmp_from > 0
+                             && !s->first_glyph->u.cmp.automatic))
+       s->background_filled_p = true;
+      else
+       x_draw_glyph_string_background (s, true);
+      x_draw_composite_glyph_string_foreground (s);
+      break;
+
+    case GLYPHLESS_GLYPH:
+      if (s->for_overlaps)
+       s->background_filled_p = true;
+      else
+       x_draw_glyph_string_background (s, true);
+      x_draw_glyphless_glyph_string_foreground (s);
+      break;
+
+    default:
+      emacs_abort ();
+    }
+
+  if (!s->for_overlaps)
+    {
+      /* Draw relief if not yet drawn.  */
+      if (!relief_drawn_p && s->face->box != FACE_NO_BOX)
+       x_draw_glyph_string_box (s);
+
+      /* Draw underline.  */
+      if (s->face->underline)
+       {
+         if (s->face->underline == FACE_UNDER_WAVE)
+           {
+             if (s->face->underline_defaulted_p)
+               x_draw_underwave (s, s->xgcv.foreground);
+             else
+               {
+                 x_draw_underwave (s, s->face->underline_color);
+               }
+           }
+         else if (s->face->underline == FACE_UNDER_LINE)
+           {
+             unsigned long thickness, position;
+             int y;
+
+             if (s->prev
+                 && s->prev->face->underline == FACE_UNDER_LINE
+                 && (s->prev->face->underline_at_descent_line_p
+                     == s->face->underline_at_descent_line_p)
+                 && (s->prev->face->underline_pixels_above_descent_line
+                     == s->face->underline_pixels_above_descent_line))
+               {
+                 /* We use the same underline style as the previous one.  */
+                 thickness = s->prev->underline_thickness;
+                 position = s->prev->underline_position;
+               }
+             else
+               {
+                 struct font *font = font_for_underline_metrics (s);
+
+                 /* Get the underline thickness.  Default is 1 pixel.  */
+                 if (font && font->underline_thickness > 0)
+                   thickness = font->underline_thickness;
+                 else
+                   thickness = 1;
+                 if ((x_underline_at_descent_line
+                      || s->face->underline_at_descent_line_p))
+                   position = ((s->height - thickness)
+                               - (s->ybase - s->y)
+                               - s->face->underline_pixels_above_descent_line);
+                 else
+                   {
+                     /* Get the underline position.  This is the recommended
+                        vertical offset in pixels from the baseline to the top 
of
+                        the underline.  This is a signed value according to the
+                        specs, and its default is
+
+                        ROUND ((maximum descent) / 2), with
+                        ROUND(x) = floor (x + 0.5)  */
+
+                     if (x_use_underline_position_properties
+                         && font && font->underline_position >= 0)
+                       position = font->underline_position;
+                     else if (font)
+                       position = (font->descent + 1) / 2;
+                     else
+                       position = underline_minimum_offset;
+                   }
+
+                 /* Ignore minimum_offset if the amount of pixels was
+                    explictly specified.  */
+                 if (!s->face->underline_pixels_above_descent_line)
+                   position = max (position, underline_minimum_offset);
+               }
+             /* Check the sanity of thickness and position.  We should
+                avoid drawing underline out of the current line area.  */
+             if (s->y + s->height <= s->ybase + position)
+               position = (s->height - 1) - (s->ybase - s->y);
+             if (s->y + s->height < s->ybase + position + thickness)
+               thickness = (s->y + s->height) - (s->ybase + position);
+             s->underline_thickness = thickness;
+             s->underline_position = position;
+             y = s->ybase + position;
+             if (s->face->underline_defaulted_p)
+               pgtk_fill_rectangle (s->f, s->xgcv.foreground,
+                                    s->x, y, s->width, thickness);
+             else
+               {
+                 pgtk_fill_rectangle (s->f, s->face->underline_color,
+                                      s->x, y, s->width, thickness);
+               }
+           }
+       }
+      /* Draw overline.  */
+      if (s->face->overline_p)
+       {
+         unsigned long dy = 0, h = 1;
+
+         if (s->face->overline_color_defaulted_p)
+           pgtk_fill_rectangle (s->f, s->xgcv.foreground, s->x, s->y + dy,
+                                s->width, h);
+         else
+           {
+             pgtk_fill_rectangle (s->f, s->face->overline_color, s->x,
+                                  s->y + dy, s->width, h);
+           }
+       }
+
+      /* Draw strike-through.  */
+      if (s->face->strike_through_p)
+       {
+         /* Y-coordinate and height of the glyph string's first
+            glyph.  We cannot use s->y and s->height because those
+            could be larger if there are taller display elements
+            (e.g., characters displayed with a larger font) in the
+            same glyph row.  */
+         int glyph_y = s->ybase - s->first_glyph->ascent;
+         int glyph_height = s->first_glyph->ascent + s->first_glyph->descent;
+         /* Strike-through width and offset from the glyph string's
+            top edge.  */
+          unsigned long h = 1;
+          unsigned long dy = (glyph_height - h) / 2;
+
+         if (s->face->strike_through_color_defaulted_p)
+           pgtk_fill_rectangle (s->f, s->xgcv.foreground, s->x, glyph_y + dy,
+                                s->width, h);
+         else
+           {
+             pgtk_fill_rectangle (s->f, s->face->strike_through_color, s->x,
+                                  glyph_y + dy, s->width, h);
+           }
+       }
+
+      if (s->prev)
+       {
+         struct glyph_string *prev;
+
+         for (prev = s->prev; prev; prev = prev->prev)
+           if (prev->hl != s->hl
+               && prev->x + prev->width + prev->right_overhang > s->x)
+             {
+               /* As prev was drawn while clipped to its own area, we
+                  must draw the right_overhang part using s->hl now.  */
+               enum draw_glyphs_face save = prev->hl;
+
+               prev->hl = s->hl;
+               x_set_glyph_string_gc (prev);
+               cairo_save (cr);
+               x_set_glyph_string_clipping_exactly (s, prev, cr);
+               if (prev->first_glyph->type == CHAR_GLYPH)
+                 x_draw_glyph_string_foreground (prev);
+               else
+                 x_draw_composite_glyph_string_foreground (prev);
+               prev->hl = save;
+               prev->num_clips = 0;
+               cairo_restore (cr);
+             }
+       }
+
+      if (s->next)
+       {
+         struct glyph_string *next;
+
+         for (next = s->next; next; next = next->next)
+           if (next->hl != s->hl
+               && next->x - next->left_overhang < s->x + s->width)
+             {
+               /* As next will be drawn while clipped to its own area,
+                  we must draw the left_overhang part using s->hl now.  */
+               enum draw_glyphs_face save = next->hl;
+
+               next->hl = s->hl;
+               x_set_glyph_string_gc (next);
+               cairo_save (cr);
+               x_set_glyph_string_clipping_exactly (s, next, cr);
+               if (next->first_glyph->type == CHAR_GLYPH)
+                 x_draw_glyph_string_foreground (next);
+               else
+                 x_draw_composite_glyph_string_foreground (next);
+               cairo_restore (cr);
+               next->hl = save;
+               next->num_clips = 0;
+               next->clip_head = s->next;
+             }
+       }
+    }
+
+  /* Reset clipping.  */
+  pgtk_end_cr_clip (s->f);
+  s->num_clips = 0;
+}
+
+/* RIF: Define cursor CURSOR on frame F.  */
+
+static void
+pgtk_define_frame_cursor (struct frame *f, Emacs_Cursor cursor)
+{
+  if (!f->pointer_invisible && FRAME_X_OUTPUT (f)->current_cursor != cursor)
+    gdk_window_set_cursor (gtk_widget_get_window (FRAME_GTK_WIDGET (f)),
+                          cursor);
+  FRAME_X_OUTPUT (f)->current_cursor = cursor;
+}
+
+static void
+pgtk_after_update_window_line (struct window *w,
+                              struct glyph_row *desired_row)
+{
+  struct frame *f;
+  int width, height;
+
+  /* begin copy from other terms */
+  eassert (w);
+
+  if (!desired_row->mode_line_p && !w->pseudo_window_p)
+    desired_row->redraw_fringe_bitmaps_p = 1;
+
+  /* When a window has disappeared, make sure that no rest of
+     full-width rows stays visible in the internal border.  */
+  if (windows_or_buffers_changed
+      && desired_row->full_width_p
+      && (f = XFRAME (w->frame),
+         width = FRAME_INTERNAL_BORDER_WIDTH (f),
+         width != 0) && (height = desired_row->visible_height, height > 0))
+    {
+      int y = WINDOW_TO_FRAME_PIXEL_Y (w, max (0, desired_row->y));
+
+      block_input ();
+      pgtk_clear_frame_area (f, 0, y, width, height);
+      pgtk_clear_frame_area (f,
+                            FRAME_PIXEL_WIDTH (f) - width, y, width, height);
+      unblock_input ();
+    }
+}
+
+static void
+pgtk_clear_frame_area (struct frame *f, int x, int y, int width, int height)
+{
+  pgtk_clear_area (f, x, y, width, height);
+}
+
+/* Draw a hollow box cursor on window W in glyph row ROW.  */
+
+static void
+x_draw_hollow_cursor (struct window *w, struct glyph_row *row)
+{
+  struct frame *f = XFRAME (WINDOW_FRAME (w));
+  int x, y, wd, h;
+  struct glyph *cursor_glyph;
+
+  /* Get the glyph the cursor is on.  If we can't tell because
+     the current matrix is invalid or such, give up.  */
+  cursor_glyph = get_phys_cursor_glyph (w);
+  if (cursor_glyph == NULL)
+    return;
+
+  /* Compute frame-relative coordinates for phys cursor.  */
+  get_phys_cursor_geometry (w, row, cursor_glyph, &x, &y, &h);
+  wd = w->phys_cursor_width - 1;
+
+  /* The foreground of cursor_gc is typically the same as the normal
+     background color, which can cause the cursor box to be invisible.  */
+  cairo_t *cr = pgtk_begin_cr_clip (f);
+  pgtk_set_cr_source_with_color (f, FRAME_X_OUTPUT (f)->cursor_color);
+
+  /* When on R2L character, show cursor at the right edge of the
+     glyph, unless the cursor box is as wide as the glyph or wider
+     (the latter happens when x-stretch-cursor is non-nil).  */
+  if ((cursor_glyph->resolved_level & 1) != 0
+      && cursor_glyph->pixel_width > wd)
+    {
+      x += cursor_glyph->pixel_width - wd;
+      if (wd > 0)
+       wd -= 1;
+    }
+  /* Set clipping, draw the rectangle, and reset clipping again.  */
+  pgtk_clip_to_row (w, row, TEXT_AREA, cr);
+  pgtk_draw_rectangle (f, FRAME_X_OUTPUT (f)->cursor_color, x, y, wd, h - 1);
+  pgtk_end_cr_clip (f);
+}
+
+/* Draw a bar cursor on window W in glyph row ROW.
+
+   Implementation note: One would like to draw a bar cursor with an
+   angle equal to the one given by the font property XA_ITALIC_ANGLE.
+   Unfortunately, I didn't find a font yet that has this property set.
+   --gerd.  */
+
+static void
+x_draw_bar_cursor (struct window *w, struct glyph_row *row, int width,
+                  enum text_cursor_kinds kind)
+{
+  struct frame *f = XFRAME (w->frame);
+  struct glyph *cursor_glyph;
+
+  /* If cursor is out of bounds, don't draw garbage.  This can happen
+     in mini-buffer windows when switching between echo area glyphs
+     and mini-buffer.  */
+  cursor_glyph = get_phys_cursor_glyph (w);
+  if (cursor_glyph == NULL)
+    return;
+
+  /* Experimental avoidance of cursor on xwidget.  */
+  if (cursor_glyph->type == XWIDGET_GLYPH)
+    return;
+
+  /* If on an image, draw like a normal cursor.  That's usually better
+     visible than drawing a bar, esp. if the image is large so that
+     the bar might not be in the window.  */
+  if (cursor_glyph->type == IMAGE_GLYPH)
+    {
+      struct glyph_row *r;
+      r = MATRIX_ROW (w->current_matrix, w->phys_cursor.vpos);
+      draw_phys_cursor_glyph (w, r, DRAW_CURSOR);
+    }
+  else
+    {
+      struct face *face = FACE_FROM_ID (f, cursor_glyph->face_id);
+      unsigned long color;
+
+      cairo_t *cr = pgtk_begin_cr_clip (f);
+
+      /* If the glyph's background equals the color we normally draw
+         the bars cursor in, the bar cursor in its normal color is
+         invisible.  Use the glyph's foreground color instead in this
+         case, on the assumption that the glyph's colors are chosen so
+         that the glyph is legible.  */
+      if (face->background == FRAME_X_OUTPUT (f)->cursor_color)
+       color = face->foreground;
+      else
+       color = FRAME_X_OUTPUT (f)->cursor_color;
+
+      pgtk_clip_to_row (w, row, TEXT_AREA, cr);
+
+      if (kind == BAR_CURSOR)
+       {
+         int x = WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x);
+
+         if (width < 0)
+           width = FRAME_CURSOR_WIDTH (f);
+         width = min (cursor_glyph->pixel_width, width);
+
+         w->phys_cursor_width = width;
+
+         /* If the character under cursor is R2L, draw the bar cursor
+            on the right of its glyph, rather than on the left.  */
+         if ((cursor_glyph->resolved_level & 1) != 0)
+           x += cursor_glyph->pixel_width - width;
+
+         pgtk_fill_rectangle (f, color, x,
+                              WINDOW_TO_FRAME_PIXEL_Y (w, w->phys_cursor.y),
+                              width, row->height);
+       }
+      else                     /* HBAR_CURSOR */
+       {
+         int dummy_x, dummy_y, dummy_h;
+         int x = WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x);
+
+         if (width < 0)
+           width = row->height;
+
+         width = min (row->height, width);
+
+         get_phys_cursor_geometry (w, row, cursor_glyph, &dummy_x,
+                                   &dummy_y, &dummy_h);
+
+         if ((cursor_glyph->resolved_level & 1) != 0
+             && cursor_glyph->pixel_width > w->phys_cursor_width - 1)
+           x += cursor_glyph->pixel_width - w->phys_cursor_width + 1;
+         pgtk_fill_rectangle (f, color, x,
+                              WINDOW_TO_FRAME_PIXEL_Y (w, w->phys_cursor.y +
+                                                       row->height - width),
+                              w->phys_cursor_width - 1, width);
+       }
+
+      pgtk_end_cr_clip (f);
+    }
+}
+
+/* RIF: Draw cursor on window W.  */
+
+static void
+pgtk_draw_window_cursor (struct window *w, struct glyph_row *glyph_row, int x,
+                        int y, enum text_cursor_kinds cursor_type,
+                        int cursor_width, bool on_p, bool active_p)
+{
+  struct frame *f = XFRAME (w->frame);
+  if (on_p)
+    {
+      w->phys_cursor_type = cursor_type;
+      w->phys_cursor_on_p = true;
+
+      if (glyph_row->exact_window_width_line_p
+         && (glyph_row->reversed_p
+             ? (w->phys_cursor.hpos < 0)
+             : (w->phys_cursor.hpos >= glyph_row->used[TEXT_AREA])))
+       {
+         glyph_row->cursor_in_fringe_p = true;
+         draw_fringe_bitmap (w, glyph_row, glyph_row->reversed_p);
+       }
+      else
+       {
+         switch (cursor_type)
+           {
+           case HOLLOW_BOX_CURSOR:
+             x_draw_hollow_cursor (w, glyph_row);
+             break;
+
+           case FILLED_BOX_CURSOR:
+             draw_phys_cursor_glyph (w, glyph_row, DRAW_CURSOR);
+             break;
+
+           case BAR_CURSOR:
+             x_draw_bar_cursor (w, glyph_row, cursor_width, BAR_CURSOR);
+             break;
+
+           case HBAR_CURSOR:
+             x_draw_bar_cursor (w, glyph_row, cursor_width, HBAR_CURSOR);
+             break;
+
+           case NO_CURSOR:
+             w->phys_cursor_width = 0;
+             break;
+
+           default:
+             emacs_abort ();
+           }
+       }
+
+      if (w == XWINDOW (f->selected_window))
+       {
+         int frame_x =
+           WINDOW_TO_FRAME_PIXEL_X (w, x) + WINDOW_LEFT_FRINGE_WIDTH (w);
+         int frame_y = WINDOW_TO_FRAME_PIXEL_Y (w, y);
+         pgtk_im_set_cursor_location (f, frame_x, frame_y,
+                                      w->phys_cursor_width,
+                                      w->phys_cursor_height);
+       }
+    }
+
+}
+
+static void
+pgtk_copy_bits (struct frame *f, cairo_rectangle_t * src_rect,
+               cairo_rectangle_t * dst_rect)
+{
+  cairo_t *cr;
+  cairo_surface_t *surface;    /* temporary surface */
+
+  surface =
+    cairo_surface_create_similar (FRAME_CR_SURFACE (f),
+                                 CAIRO_CONTENT_COLOR_ALPHA,
+                                 (int) src_rect->width,
+                                 (int) src_rect->height);
+
+  cr = cairo_create (surface);
+  cairo_set_source_surface (cr, FRAME_CR_SURFACE (f), -src_rect->x,
+                           -src_rect->y);
+  cairo_rectangle (cr, 0, 0, src_rect->width, src_rect->height);
+  cairo_clip (cr);
+  cairo_paint (cr);
+  cairo_destroy (cr);
+
+  cr = pgtk_begin_cr_clip (f);
+  cairo_set_source_surface (cr, surface, dst_rect->x, dst_rect->y);
+  cairo_rectangle (cr, dst_rect->x, dst_rect->y, dst_rect->width,
+                  dst_rect->height);
+  cairo_clip (cr);
+  cairo_paint (cr);
+  pgtk_end_cr_clip (f);
+
+  cairo_surface_destroy (surface);
+}
+
+/* Scroll part of the display as described by RUN.  */
+
+static void
+pgtk_scroll_run (struct window *w, struct run *run)
+{
+  struct frame *f = XFRAME (w->frame);
+  int x, y, width, height, from_y, to_y, bottom_y;
+
+  /* Get frame-relative bounding box of the text display area of W,
+     without mode lines.  Include in this box the left and right
+     fringe of W.  */
+  window_box (w, ANY_AREA, &x, &y, &width, &height);
+
+  from_y = WINDOW_TO_FRAME_PIXEL_Y (w, run->current_y);
+  to_y = WINDOW_TO_FRAME_PIXEL_Y (w, run->desired_y);
+  bottom_y = y + height;
+
+  if (to_y < from_y)
+    {
+      /* Scrolling up.  Make sure we don't copy part of the mode
+         line at the bottom.  */
+      if (from_y + run->height > bottom_y)
+       height = bottom_y - from_y;
+      else
+       height = run->height;
+    }
+  else
+    {
+      /* Scrolling down.  Make sure we don't copy over the mode line.
+         at the bottom.  */
+      if (to_y + run->height > bottom_y)
+       height = bottom_y - to_y;
+      else
+       height = run->height;
+    }
+
+  block_input ();
+
+#ifdef HAVE_XWIDGETS
+  /* "Copy" xwidget views in the area that will be scrolled.  */
+  GtkWidget *tem, *parent = FRAME_GTK_WIDGET (f);
+  GList *children = gtk_container_get_children (GTK_CONTAINER (parent));
+  GList *iter;
+  struct xwidget_view *view;
+
+  for (iter = children; iter; iter = iter->next)
+    {
+      tem = iter->data;
+      view = g_object_get_data (G_OBJECT (tem), XG_XWIDGET_VIEW);
+
+      if (view && !view->hidden)
+       {
+         int window_y = view->y + view->clip_top;
+         int window_height = view->clip_bottom - view->clip_top;
+
+         Emacs_Rectangle r1, r2, result;
+         r1.x = w->pixel_left;
+         r1.y = from_y;
+         r1.width = w->pixel_width;
+         r1.height = height;
+         r2 = r1;
+         r2.y = window_y;
+         r2.height = window_height;
+
+         /* The window is offscreen, just unmap it.  */
+         if (window_height == 0)
+           {
+             view->hidden = true;
+             gtk_widget_hide (tem);
+             continue;
+           }
+
+         bool intersects_p =
+           gui_intersect_rectangles (&r1, &r2, &result);
+
+         if (XWINDOW (view->w) == w && intersects_p)
+           {
+             int y = view->y + (to_y - from_y);
+             int text_area_x, text_area_y, text_area_width, text_area_height;
+             int clip_top, clip_bottom;
+
+             window_box (w, view->area, &text_area_x, &text_area_y,
+                         &text_area_width, &text_area_height);
+
+             view->y = y;
+
+             clip_top = 0;
+             clip_bottom = XXWIDGET (view->model)->height;
+
+             if (y < text_area_y)
+               clip_top = text_area_y - y;
+
+             if ((y + clip_bottom) > (text_area_y + text_area_height))
+               {
+                 clip_bottom -= (y + clip_bottom) - (text_area_y + 
text_area_height);
+               }
+
+             view->clip_top = clip_top;
+             view->clip_bottom = clip_bottom;
+
+             /* This means the view has moved offscreen.  Unmap
+                it and hide it here.  */
+             if ((view->clip_bottom - view->clip_top) <= 0)
+               {
+                 view->hidden = true;
+                 gtk_widget_hide (tem);
+               }
+             else
+               {
+                 gtk_fixed_move (GTK_FIXED (FRAME_GTK_WIDGET (f)),
+                                 tem, view->x + view->clip_left,
+                                 view->y + view->clip_top);
+                 gtk_widget_set_size_request (tem, view->clip_right - 
view->clip_left,
+                                              view->clip_bottom - 
view->clip_top);
+                 gtk_widget_queue_allocate (tem);
+               }
+           }
+       }
+    }
+
+  g_list_free (children);
+#endif
+
+  /* Cursor off.  Will be switched on again in x_update_window_end.  */
+  gui_clear_cursor (w);
+
+  {
+    cairo_rectangle_t src_rect = { x, from_y, width, height };
+    cairo_rectangle_t dst_rect = { x, to_y, width, height };
+    pgtk_copy_bits (f, &src_rect, &dst_rect);
+  }
+
+  unblock_input ();
+}
+
+/* Icons.  */
+
+/* Make the x-window of frame F use the gnu icon bitmap.  */
+
+static bool
+pgtk_bitmap_icon (struct frame *f, Lisp_Object file)
+{
+  ptrdiff_t bitmap_id;
+
+  if (FRAME_GTK_WIDGET (f) == 0)
+    return true;
+
+  /* Free up our existing icon bitmap and mask if any.  */
+  if (f->output_data.pgtk->icon_bitmap > 0)
+    image_destroy_bitmap (f, f->output_data.pgtk->icon_bitmap);
+  f->output_data.pgtk->icon_bitmap = 0;
+
+  if (STRINGP (file))
+    {
+      /* Use gtk_window_set_icon_from_file () if available,
+        It's not restricted to bitmaps */
+      if (xg_set_icon (f, file))
+       return false;
+      bitmap_id = image_create_bitmap_from_file (f, file);
+    }
+  else
+    {
+      /* Create the GNU bitmap and mask if necessary.  */
+      if (FRAME_DISPLAY_INFO (f)->icon_bitmap_id < 0)
+       {
+         ptrdiff_t rc = -1;
+
+          if (xg_set_icon (f, xg_default_icon_file)
+              || xg_set_icon_from_xpm_data (f, gnu_xpm_bits))
+            {
+              FRAME_DISPLAY_INFO (f)->icon_bitmap_id = -2;
+              return false;
+            }
+
+         /* If all else fails, use the (black and white) xbm image. */
+         if (rc == -1)
+           {
+              rc = image_create_bitmap_from_data (f,
+                                                  (char *) gnu_xbm_bits,
+                                                  gnu_xbm_width,
+                                                  gnu_xbm_height);
+             if (rc == -1)
+               return true;
+
+             FRAME_DISPLAY_INFO (f)->icon_bitmap_id = rc;
+           }
+       }
+
+      /* The first time we create the GNU bitmap and mask,
+        this increments the ref-count one extra time.
+        As a result, the GNU bitmap and mask are never freed.
+        That way, we don't have to worry about allocating it again.  */
+      image_reference_bitmap (f, FRAME_DISPLAY_INFO (f)->icon_bitmap_id);
+
+      bitmap_id = FRAME_DISPLAY_INFO (f)->icon_bitmap_id;
+    }
+
+  if (FRAME_DISPLAY_INFO (f)->bitmaps[bitmap_id - 1].img != NULL)
+    {
+      gtk_window_set_icon (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
+                          FRAME_DISPLAY_INFO (f)->bitmaps[bitmap_id - 1].img);
+    }
+  f->output_data.pgtk->icon_bitmap = bitmap_id;
+
+  return false;
+}
+
+
+/* Make the x-window of frame F use a rectangle with text.
+   Use ICON_NAME as the text.  */
+
+bool
+pgtk_text_icon (struct frame *f, const char *icon_name)
+{
+  if (FRAME_GTK_OUTER_WIDGET (f))
+    {
+      gtk_window_set_icon (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)), NULL);
+      gtk_window_set_title (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)), 
icon_name);
+    }
+
+  return false;
+}
+
+/***********************************************************************
+                   Starting and ending an update
+ ***********************************************************************/
+
+/* Start an update of frame F.  This function is installed as a hook
+   for update_begin, i.e. it is called when update_begin is called.
+   This function is called prior to calls to x_update_window_begin for
+   each window being updated.  Currently, there is nothing to do here
+   because all interesting stuff is done on a window basis.  */
+
+static void
+pgtk_update_begin (struct frame *f)
+{
+  pgtk_clear_under_internal_border (f);
+}
+
+/* Draw a vertical window border from (x,y0) to (x,y1)  */
+
+static void
+pgtk_draw_vertical_window_border (struct window *w, int x, int y0, int y1)
+{
+  struct frame *f = XFRAME (WINDOW_FRAME (w));
+  struct face *face;
+  cairo_t *cr;
+
+  cr = pgtk_begin_cr_clip (f);
+
+  face = FACE_FROM_ID_OR_NULL (f, VERTICAL_BORDER_FACE_ID);
+  if (face)
+    pgtk_set_cr_source_with_color (f, face->foreground);
+
+  cairo_rectangle (cr, x, y0, 1, y1 - y0);
+  cairo_fill (cr);
+
+  pgtk_end_cr_clip (f);
+}
+
+/* Draw a window divider from (x0,y0) to (x1,y1)  */
+
+static void
+pgtk_draw_window_divider (struct window *w, int x0, int x1, int y0, int y1)
+{
+  struct frame *f = XFRAME (WINDOW_FRAME (w));
+  struct face *face = FACE_FROM_ID_OR_NULL (f, WINDOW_DIVIDER_FACE_ID);
+  struct face *face_first
+    = FACE_FROM_ID_OR_NULL (f, WINDOW_DIVIDER_FIRST_PIXEL_FACE_ID);
+  struct face *face_last
+    = FACE_FROM_ID_OR_NULL (f, WINDOW_DIVIDER_LAST_PIXEL_FACE_ID);
+  unsigned long color = face ? face->foreground : FRAME_FOREGROUND_PIXEL (f);
+  unsigned long color_first = (face_first
+                              ? face_first->foreground
+                              : FRAME_FOREGROUND_PIXEL (f));
+  unsigned long color_last = (face_last
+                             ? face_last->foreground
+                             : FRAME_FOREGROUND_PIXEL (f));
+  cairo_t *cr = pgtk_begin_cr_clip (f);
+
+  if (y1 - y0 > x1 - x0 && x1 - x0 > 2)
+    /* Vertical.  */
+    {
+      pgtk_set_cr_source_with_color (f, color_first);
+      cairo_rectangle (cr, x0, y0, 1, y1 - y0);
+      cairo_fill (cr);
+      pgtk_set_cr_source_with_color (f, color);
+      cairo_rectangle (cr, x0 + 1, y0, x1 - x0 - 2, y1 - y0);
+      cairo_fill (cr);
+      pgtk_set_cr_source_with_color (f, color_last);
+      cairo_rectangle (cr, x1 - 1, y0, 1, y1 - y0);
+      cairo_fill (cr);
+    }
+  else if (x1 - x0 > y1 - y0 && y1 - y0 > 3)
+    /* Horizontal.  */
+    {
+      pgtk_set_cr_source_with_color (f, color_first);
+      cairo_rectangle (cr, x0, y0, x1 - x0, 1);
+      cairo_fill (cr);
+      pgtk_set_cr_source_with_color (f, color);
+      cairo_rectangle (cr, x0, y0 + 1, x1 - x0, y1 - y0 - 2);
+      cairo_fill (cr);
+      pgtk_set_cr_source_with_color (f, color_last);
+      cairo_rectangle (cr, x0, y1 - 1, x1 - x0, 1);
+      cairo_fill (cr);
+    }
+  else
+    {
+      pgtk_set_cr_source_with_color (f, color);
+      cairo_rectangle (cr, x0, y0, x1 - x0, y1 - y0);
+      cairo_fill (cr);
+    }
+
+  pgtk_end_cr_clip (f);
+}
+
+/* End update of frame F.  This function is installed as a hook in
+   update_end.  */
+
+static void
+pgtk_update_end (struct frame *f)
+{
+  /* Mouse highlight may be displayed again.  */
+  MOUSE_HL_INFO (f)->mouse_face_defer = false;
+}
+
+static void
+pgtk_frame_up_to_date (struct frame *f)
+{
+  block_input ();
+  FRAME_MOUSE_UPDATE (f);
+  if (!buffer_flipping_blocked_p ())
+    {
+      flip_cr_context (f);
+      gtk_widget_queue_draw (FRAME_GTK_WIDGET (f));
+    }
+  unblock_input ();
+}
+
+/* Return the current position of the mouse.
+   *FP should be a frame which indicates which display to ask about.
+
+   If the mouse movement started in a scroll bar, set *FP, *BAR_WINDOW,
+   and *PART to the frame, window, and scroll bar part that the mouse
+   is over.  Set *X and *Y to the portion and whole of the mouse's
+   position on the scroll bar.
+
+   If the mouse movement started elsewhere, set *FP to the frame the
+   mouse is on, *BAR_WINDOW to nil, and *X and *Y to the character cell
+   the mouse is over.
+
+   Set *TIMESTAMP to the server time-stamp for the time at which the mouse
+   was at this position.
+
+   Don't store anything if we don't have a valid set of values to report.
+
+   This clears the mouse_moved flag, so we can wait for the next mouse
+   movement.  */
+
+static void
+pgtk_mouse_position (struct frame **fp, int insist, Lisp_Object * bar_window,
+                    enum scroll_bar_part *part, Lisp_Object * x,
+                    Lisp_Object * y, Time * timestamp)
+{
+  struct frame *f1;
+  struct pgtk_display_info *dpyinfo = FRAME_DISPLAY_INFO (*fp);
+  int win_x, win_y;
+  GdkSeat *seat;
+  GdkDevice *device;
+  GdkModifierType mask;
+  GdkWindow *win;
+
+  block_input ();
+
+  Lisp_Object frame, tail;
+
+  /* Clear the mouse-moved flag for every frame on this display.  */
+  FOR_EACH_FRAME (tail, frame)
+    if (FRAME_PGTK_P (XFRAME (frame))
+       && FRAME_X_DISPLAY (XFRAME (frame)) == FRAME_X_DISPLAY (*fp))
+    XFRAME (frame)->mouse_moved = false;
+
+  dpyinfo->last_mouse_scroll_bar = NULL;
+
+  if (gui_mouse_grabbed (dpyinfo))
+    {
+      /* 1.1. use last_mouse_frame as frame where the pointer is on. */
+      f1 = dpyinfo->last_mouse_frame;
+    }
+  else
+    {
+      f1 = *fp;
+      /* 1.2. get frame where the pointer is on. */
+      win = gtk_widget_get_window (FRAME_GTK_WIDGET (*fp));
+      seat = gdk_display_get_default_seat (dpyinfo->gdpy);
+      device = gdk_seat_get_pointer (seat);
+      win =
+       gdk_window_get_device_position (win, device, &win_x, &win_y, &mask);
+      if (win != NULL)
+       f1 = pgtk_any_window_to_frame (win);
+      else
+       {
+         /* crossing display server? */
+         f1 = SELECTED_FRAME ();
+       }
+    }
+
+  /* f1 can be a terminal frame. Bug#50322 */
+  if (f1 == NULL || !FRAME_PGTK_P (f1))
+    {
+      unblock_input ();
+      return;
+    }
+
+  /* 2. get the display and the device. */
+  win = gtk_widget_get_window (FRAME_GTK_WIDGET (f1));
+  GdkDisplay *gdpy = gdk_window_get_display (win);
+  seat = gdk_display_get_default_seat (gdpy);
+  device = gdk_seat_get_pointer (seat);
+
+  /* 3. get x, y relative to edit window of the frame. */
+  win = gdk_window_get_device_position (win, device, &win_x, &win_y, &mask);
+
+  if (f1 != NULL)
+    {
+      dpyinfo = FRAME_DISPLAY_INFO (f1);
+      remember_mouse_glyph (f1, win_x, win_y, &dpyinfo->last_mouse_glyph);
+      dpyinfo->last_mouse_glyph_frame = f1;
+
+      *bar_window = Qnil;
+      *part = 0;
+      *fp = f1;
+      XSETINT (*x, win_x);
+      XSETINT (*y, win_y);
+      *timestamp = dpyinfo->last_mouse_movement_time;
+    }
+
+  unblock_input ();
+}
+
+/* Fringe bitmaps.  */
+
+static int max_fringe_bmp = 0;
+static cairo_pattern_t **fringe_bmp = 0;
+
+static void
+pgtk_define_fringe_bitmap (int which, unsigned short *bits, int h, int wd)
+{
+  int i, stride;
+  cairo_surface_t *surface;
+  unsigned char *data;
+  cairo_pattern_t *pattern;
+
+  if (which >= max_fringe_bmp)
+    {
+      i = max_fringe_bmp;
+      max_fringe_bmp = which + 20;
+      fringe_bmp =
+       (cairo_pattern_t **) xrealloc (fringe_bmp,
+                                      max_fringe_bmp *
+                                      sizeof (cairo_pattern_t *));
+      while (i < max_fringe_bmp)
+       fringe_bmp[i++] = 0;
+    }
+
+  block_input ();
+
+  surface = cairo_image_surface_create (CAIRO_FORMAT_A1, wd, h);
+  stride = cairo_image_surface_get_stride (surface);
+  data = cairo_image_surface_get_data (surface);
+
+  for (i = 0; i < h; i++)
+    {
+      *((unsigned short *) data) = bits[i];
+      data += stride;
+    }
+
+  cairo_surface_mark_dirty (surface);
+  pattern = cairo_pattern_create_for_surface (surface);
+  cairo_surface_destroy (surface);
+
+  unblock_input ();
+
+  fringe_bmp[which] = pattern;
+}
+
+static void
+pgtk_destroy_fringe_bitmap (int which)
+{
+  if (which >= max_fringe_bmp)
+    return;
+
+  if (fringe_bmp[which])
+    {
+      block_input ();
+      cairo_pattern_destroy (fringe_bmp[which]);
+      unblock_input ();
+    }
+  fringe_bmp[which] = 0;
+}
+
+static void
+pgtk_clip_to_row (struct window *w, struct glyph_row *row,
+                 enum glyph_row_area area, cairo_t * cr)
+{
+  int window_x, window_y, window_width;
+  cairo_rectangle_int_t rect;
+
+  window_box (w, area, &window_x, &window_y, &window_width, 0);
+
+  rect.x = window_x;
+  rect.y = WINDOW_TO_FRAME_PIXEL_Y (w, max (0, row->y));
+  rect.y = max (rect.y, window_y);
+  rect.width = window_width;
+  rect.height = row->visible_height;
+
+  cairo_rectangle (cr, rect.x, rect.y, rect.width, rect.height);
+  cairo_clip (cr);
+}
+
+static void
+pgtk_cr_draw_image (struct frame *f, Emacs_GC * gc, cairo_pattern_t * image,
+                   int src_x, int src_y, int width, int height,
+                   int dest_x, int dest_y, bool overlay_p)
+{
+  cairo_t *cr = pgtk_begin_cr_clip (f);
+
+  if (overlay_p)
+    cairo_rectangle (cr, dest_x, dest_y, width, height);
+  else
+    {
+      pgtk_set_cr_source_with_gc_background (f, gc);
+      cairo_rectangle (cr, dest_x, dest_y, width, height);
+      cairo_fill_preserve (cr);
+    }
+  cairo_translate (cr, dest_x - src_x, dest_y - src_y);
+
+  cairo_surface_t *surface;
+  cairo_pattern_get_surface (image, &surface);
+  cairo_format_t format = cairo_image_surface_get_format (surface);
+  if (format != CAIRO_FORMAT_A8 && format != CAIRO_FORMAT_A1)
+    {
+      cairo_set_source (cr, image);
+      cairo_fill (cr);
+    }
+  else
+    {
+      pgtk_set_cr_source_with_gc_foreground (f, gc);
+      cairo_clip (cr);
+      cairo_mask (cr, image);
+    }
+
+  pgtk_end_cr_clip (f);
+}
+
+static void
+pgtk_draw_fringe_bitmap (struct window *w, struct glyph_row *row,
+                        struct draw_fringe_bitmap_params *p)
+{
+  struct frame *f = XFRAME (WINDOW_FRAME (w));
+  struct face *face = p->face;
+
+  cairo_t *cr = pgtk_begin_cr_clip (f);
+
+  /* Must clip because of partially visible lines.  */
+  pgtk_clip_to_row (w, row, ANY_AREA, cr);
+
+  if (p->bx >= 0 && !p->overlay_p)
+    {
+      /* In case the same realized face is used for fringes and
+         for something displayed in the text (e.g. face `region' on
+         mono-displays, the fill style may have been changed to
+         FillSolid in x_draw_glyph_string_background.  */
+      if (face->stipple)
+       {
+         fill_background_by_face (f, face, p->bx, p->by, p->nx, p->ny);
+       }
+      else
+       {
+         pgtk_set_cr_source_with_color (f, face->background);
+         cairo_rectangle (cr, p->bx, p->by, p->nx, p->ny);
+         cairo_fill (cr);
+       }
+    }
+
+  if (p->which && p->which < max_fringe_bmp)
+    {
+      Emacs_GC gcv;
+
+      gcv.foreground = (p->cursor_p
+                       ? (p->overlay_p ? face->background
+                          : FRAME_X_OUTPUT (f)->cursor_color)
+                       : face->foreground);
+      gcv.background = face->background;
+      pgtk_cr_draw_image (f, &gcv, fringe_bmp[p->which], 0, p->dh,
+                         p->wd, p->h, p->x, p->y, p->overlay_p);
+    }
+
+  pgtk_end_cr_clip (f);
+}
+
+static struct atimer *hourglass_atimer = NULL;
+static int hourglass_enter_count = 0;
+
+static void
+hourglass_cb (struct atimer *timer)
+{
+ /*NOP*/}
+
+static void
+pgtk_show_hourglass (struct frame *f)
+{
+  struct pgtk_output *x = FRAME_X_OUTPUT (f);
+  if (x->hourglass_widget != NULL)
+    gtk_widget_destroy (x->hourglass_widget);
+  x->hourglass_widget = gtk_event_box_new ();  /* gtk_event_box is 
GDK_INPUT_ONLY. */
+  gtk_widget_set_has_window (x->hourglass_widget, true);
+  gtk_fixed_put (GTK_FIXED (FRAME_GTK_WIDGET (f)), x->hourglass_widget, 0, 0);
+  gtk_widget_show (x->hourglass_widget);
+  gtk_widget_set_size_request (x->hourglass_widget, 30000, 30000);
+  gdk_window_raise (gtk_widget_get_window (x->hourglass_widget));
+  gdk_window_set_cursor (gtk_widget_get_window (x->hourglass_widget),
+                        x->hourglass_cursor);
+
+  /* For cursor animation, we receive signals, set pending_signals, and 
dispatch. */
+  if (hourglass_enter_count++ == 0)
+    {
+      struct timespec ts = make_timespec (0, 50 * 1000 * 1000);
+      if (hourglass_atimer != NULL)
+       cancel_atimer (hourglass_atimer);
+      hourglass_atimer =
+       start_atimer (ATIMER_CONTINUOUS, ts, hourglass_cb, NULL);
+    }
+
+  /* Cursor frequently stops animation. gtk's bug? */
+}
+
+static void
+pgtk_hide_hourglass (struct frame *f)
+{
+  struct pgtk_output *x = FRAME_X_OUTPUT (f);
+  if (--hourglass_enter_count == 0)
+    {
+      if (hourglass_atimer != NULL)
+       {
+         cancel_atimer (hourglass_atimer);
+         hourglass_atimer = NULL;
+       }
+    }
+  if (x->hourglass_widget != NULL)
+    {
+      gtk_widget_destroy (x->hourglass_widget);
+      x->hourglass_widget = NULL;
+    }
+}
+
+/* Flushes changes to display.  */
+static void
+pgtk_flush_display (struct frame *f)
+{
+}
+
+extern frame_parm_handler pgtk_frame_parm_handlers[];
+
+static struct redisplay_interface pgtk_redisplay_interface = {
+  pgtk_frame_parm_handlers,
+  gui_produce_glyphs,
+  gui_write_glyphs,
+  gui_insert_glyphs,
+  gui_clear_end_of_line,
+  pgtk_scroll_run,
+  pgtk_after_update_window_line,
+  NULL, /* gui_update_window_begin, */
+  NULL, /* gui_update_window_end, */
+  pgtk_flush_display,
+  gui_clear_window_mouse_face,
+  gui_get_glyph_overhangs,
+  gui_fix_overlapping_area,
+  pgtk_draw_fringe_bitmap,
+  pgtk_define_fringe_bitmap,
+  pgtk_destroy_fringe_bitmap,
+  pgtk_compute_glyph_string_overhangs,
+  pgtk_draw_glyph_string,
+  pgtk_define_frame_cursor,
+  pgtk_clear_frame_area,
+  pgtk_clear_under_internal_border,
+  pgtk_draw_window_cursor,
+  pgtk_draw_vertical_window_border,
+  pgtk_draw_window_divider,
+  NULL,                                /* pgtk_shift_glyphs_for_insert, */
+  pgtk_show_hourglass,
+  pgtk_hide_hourglass,
+  pgtk_default_font_parameter,
+};
+
+static void
+pgtk_redraw_scroll_bars (struct frame *f)
+{
+}
+
+void
+pgtk_clear_frame (struct frame *f)
+/* --------------------------------------------------------------------------
+      External (hook): Erase the entire frame
+   -------------------------------------------------------------------------- 
*/
+{
+  /* comes on initial frame because we have
+     after-make-frame-functions = select-frame */
+  if (!FRAME_DEFAULT_FACE (f))
+    return;
+
+  /* mark_window_cursors_off (XWINDOW (FRAME_ROOT_WINDOW (f))); */
+
+  block_input ();
+
+  pgtk_clear_area (f, 0, 0, FRAME_PIXEL_WIDTH (f), FRAME_PIXEL_HEIGHT (f));
+
+  /* as of 2006/11 or so this is now needed */
+  pgtk_redraw_scroll_bars (f);
+  unblock_input ();
+}
+
+/* Invert the middle quarter of the frame for .15 sec.  */
+
+static void
+recover_from_visible_bell (struct atimer *timer)
+{
+  struct frame *f = timer->client_data;
+
+  if (FRAME_X_OUTPUT (f)->cr_surface_visible_bell != NULL)
+    {
+      cairo_surface_destroy (FRAME_X_OUTPUT (f)->cr_surface_visible_bell);
+      FRAME_X_OUTPUT (f)->cr_surface_visible_bell = NULL;
+    }
+
+  if (FRAME_X_OUTPUT (f)->atimer_visible_bell != NULL)
+    FRAME_X_OUTPUT (f)->atimer_visible_bell = NULL;
+}
+
+static void
+pgtk_flash (struct frame *f)
+{
+  block_input ();
+
+  {
+    cairo_surface_t *surface_orig = FRAME_CR_SURFACE (f);
+
+    int width = FRAME_CR_SURFACE_DESIRED_WIDTH (f);
+    int height = FRAME_CR_SURFACE_DESIRED_HEIGHT (f);
+    cairo_surface_t *surface =
+      cairo_surface_create_similar (surface_orig, CAIRO_CONTENT_COLOR_ALPHA,
+                                   width, height);
+
+    cairo_t *cr = cairo_create (surface);
+    cairo_set_source_surface (cr, surface_orig, 0, 0);
+    cairo_rectangle (cr, 0, 0, width, height);
+    cairo_clip (cr);
+    cairo_paint (cr);
+
+    cairo_set_source_rgb (cr, 1, 1, 1);
+    cairo_set_operator (cr, CAIRO_OPERATOR_DIFFERENCE);
+
+    {
+      /* Get the height not including a menu bar widget.  */
+      int height = FRAME_PIXEL_HEIGHT (f);
+      /* Height of each line to flash.  */
+      int flash_height = FRAME_LINE_HEIGHT (f);
+      /* These will be the left and right margins of the rectangles.  */
+      int flash_left = FRAME_INTERNAL_BORDER_WIDTH (f);
+      int flash_right =
+       FRAME_PIXEL_WIDTH (f) - FRAME_INTERNAL_BORDER_WIDTH (f);
+      int width = flash_right - flash_left;
+
+      /* If window is tall, flash top and bottom line.  */
+      if (height > 3 * FRAME_LINE_HEIGHT (f))
+       {
+         cairo_rectangle (cr,
+                          flash_left,
+                          (FRAME_INTERNAL_BORDER_WIDTH (f)
+                           + FRAME_TOP_MARGIN_HEIGHT (f)),
+                          width, flash_height);
+         cairo_fill (cr);
+
+         cairo_rectangle (cr,
+                          flash_left,
+                          (height - flash_height
+                           - FRAME_INTERNAL_BORDER_WIDTH (f)),
+                          width, flash_height);
+         cairo_fill (cr);
+       }
+      else
+       {
+         /* If it is short, flash it all.  */
+         cairo_rectangle (cr,
+                          flash_left, FRAME_INTERNAL_BORDER_WIDTH (f),
+                          width, height - 2 * FRAME_INTERNAL_BORDER_WIDTH (f));
+         cairo_fill (cr);
+       }
+
+      FRAME_X_OUTPUT (f)->cr_surface_visible_bell = surface;
+      {
+       struct timespec delay = make_timespec (0, 50 * 1000 * 1000);
+       if (FRAME_X_OUTPUT (f)->atimer_visible_bell != NULL)
+         {
+           cancel_atimer (FRAME_X_OUTPUT (f)->atimer_visible_bell);
+           FRAME_X_OUTPUT (f)->atimer_visible_bell = NULL;
+         }
+       FRAME_X_OUTPUT (f)->atimer_visible_bell =
+         start_atimer (ATIMER_RELATIVE, delay, recover_from_visible_bell, f);
+      }
+
+    }
+
+    cairo_destroy (cr);
+  }
+
+  unblock_input ();
+}
+
+/* Make audible bell.  */
+
+static void
+pgtk_ring_bell (struct frame *f)
+{
+  if (visible_bell)
+    {
+      pgtk_flash (f);
+    }
+  else
+    {
+      block_input ();
+      gtk_widget_error_bell (FRAME_GTK_WIDGET (f));
+      unblock_input ();
+    }
+}
+
+/* Read events coming from the X server.
+   Return as soon as there are no more events to be read.
+
+   Return the number of characters stored into the buffer,
+   thus pretending to be `read' (except the characters we store
+   in the keyboard buffer can be multibyte, so are not necessarily
+   C chars).  */
+
+static int
+pgtk_read_socket (struct terminal *terminal, struct input_event *hold_quit)
+{
+  GMainContext *context;
+  bool context_acquired = false;
+  int count;
+
+  count = evq_flush (hold_quit);
+  if (count > 0)
+    {
+      return count;
+    }
+
+  context = g_main_context_default ();
+  context_acquired = g_main_context_acquire (context);
+
+  block_input ();
+
+  if (context_acquired)
+    {
+      while (g_main_context_pending (context))
+       {
+         g_main_context_dispatch (context);
+       }
+    }
+
+  unblock_input ();
+
+  if (context_acquired)
+    g_main_context_release (context);
+
+  count = evq_flush (hold_quit);
+  if (count > 0)
+    {
+      return count;
+    }
+
+  return 0;
+}
+
+/* Lisp window being scrolled.  Set when starting to interact with
+   a toolkit scroll bar, reset to nil when ending the interaction.  */
+
+static Lisp_Object window_being_scrolled;
+
+static void
+pgtk_send_scroll_bar_event (Lisp_Object window, enum scroll_bar_part part,
+                           int portion, int whole, bool horizontal)
+{
+  union buffered_input_event inev;
+
+  EVENT_INIT (inev.ie);
+
+  inev.ie.kind =
+    horizontal ? HORIZONTAL_SCROLL_BAR_CLICK_EVENT : SCROLL_BAR_CLICK_EVENT;
+  inev.ie.frame_or_window = window;
+  inev.ie.arg = Qnil;
+  inev.ie.timestamp = 0;
+  inev.ie.code = 0;
+  inev.ie.part = part;
+  inev.ie.x = make_fixnum (portion);
+  inev.ie.y = make_fixnum (whole);
+  inev.ie.modifiers = 0;
+
+  evq_enqueue (&inev);
+}
+
+
+/* Scroll bar callback for GTK scroll bars.  WIDGET is the scroll
+   bar widget.  DATA is a pointer to the scroll_bar structure. */
+
+static gboolean
+xg_scroll_callback (GtkRange * range,
+                   GtkScrollType scroll, gdouble value, gpointer user_data)
+{
+  int whole = 0, portion = 0;
+  struct scroll_bar *bar = user_data;
+  enum scroll_bar_part part = scroll_bar_nowhere;
+  GtkAdjustment *adj = GTK_ADJUSTMENT (gtk_range_get_adjustment (range));
+
+  if (xg_ignore_gtk_scrollbar)
+    return false;
+
+  switch (scroll)
+    {
+    case GTK_SCROLL_JUMP:
+#if 0
+      /* Buttons 1 2 or 3 must be grabbed.  */
+      if (FRAME_DISPLAY_INFO (f)->grabbed != 0
+          && FRAME_DISPLAY_INFO (f)->grabbed < (1 << 4))
+#endif
+        {
+         if (bar->horizontal)
+           {
+             part = scroll_bar_horizontal_handle;
+             whole = (int) (gtk_adjustment_get_upper (adj) -
+                            gtk_adjustment_get_page_size (adj));
+             portion = min ((int) value, whole);
+             bar->dragging = portion;
+           }
+         else
+           {
+             part = scroll_bar_handle;
+             whole = gtk_adjustment_get_upper (adj) -
+               gtk_adjustment_get_page_size (adj);
+             portion = min ((int) value, whole);
+             bar->dragging = portion;
+           }
+       }
+      break;
+    case GTK_SCROLL_STEP_BACKWARD:
+      part = (bar->horizontal ? scroll_bar_left_arrow : scroll_bar_up_arrow);
+      bar->dragging = -1;
+      break;
+    case GTK_SCROLL_STEP_FORWARD:
+      part = (bar->horizontal
+             ? scroll_bar_right_arrow : scroll_bar_down_arrow);
+      bar->dragging = -1;
+      break;
+    case GTK_SCROLL_PAGE_BACKWARD:
+      part = (bar->horizontal
+             ? scroll_bar_before_handle : scroll_bar_above_handle);
+      bar->dragging = -1;
+      break;
+    case GTK_SCROLL_PAGE_FORWARD:
+      part = (bar->horizontal
+             ? scroll_bar_after_handle : scroll_bar_below_handle);
+      bar->dragging = -1;
+      break;
+    default:
+      break;
+    }
+
+  if (part != scroll_bar_nowhere)
+    {
+      window_being_scrolled = bar->window;
+      pgtk_send_scroll_bar_event (bar->window, part, portion, whole,
+                                 bar->horizontal);
+    }
+
+  return false;
+}
+
+/* Callback for button release. Sets dragging to -1 when dragging is done.  */
+
+static gboolean
+xg_end_scroll_callback (GtkWidget * widget,
+                       GdkEventButton * event, gpointer user_data)
+{
+  struct scroll_bar *bar = user_data;
+  bar->dragging = -1;
+  if (WINDOWP (window_being_scrolled))
+    {
+      pgtk_send_scroll_bar_event (window_being_scrolled,
+                                 scroll_bar_end_scroll, 0, 0,
+                                 bar->horizontal);
+      window_being_scrolled = Qnil;
+    }
+
+  return false;
+}
+
+#define SCROLL_BAR_NAME "verticalScrollBar"
+#define SCROLL_BAR_HORIZONTAL_NAME "horizontalScrollBar"
+
+/* Create the widget for scroll bar BAR on frame F.  Record the widget
+   and X window of the scroll bar in BAR.  */
+
+static void
+x_create_toolkit_scroll_bar (struct frame *f, struct scroll_bar *bar)
+{
+  const char *scroll_bar_name = SCROLL_BAR_NAME;
+
+  block_input ();
+  xg_create_scroll_bar (f, bar, G_CALLBACK (xg_scroll_callback),
+                       G_CALLBACK (xg_end_scroll_callback), scroll_bar_name);
+  unblock_input ();
+}
+
+static void
+x_create_horizontal_toolkit_scroll_bar (struct frame *f,
+                                       struct scroll_bar *bar)
+{
+  const char *scroll_bar_name = SCROLL_BAR_HORIZONTAL_NAME;
+
+  block_input ();
+  xg_create_horizontal_scroll_bar (f, bar, G_CALLBACK (xg_scroll_callback),
+                                  G_CALLBACK (xg_end_scroll_callback),
+                                  scroll_bar_name);
+  unblock_input ();
+}
+
+/* Set the thumb size and position of scroll bar BAR.  We are currently
+   displaying PORTION out of a whole WHOLE, and our position POSITION.  */
+
+static void
+x_set_toolkit_scroll_bar_thumb (struct scroll_bar *bar, int portion,
+                               int position, int whole)
+{
+  xg_set_toolkit_scroll_bar_thumb (bar, portion, position, whole);
+}
+
+static void
+x_set_toolkit_horizontal_scroll_bar_thumb (struct scroll_bar *bar,
+                                          int portion, int position,
+                                          int whole)
+{
+  xg_set_toolkit_horizontal_scroll_bar_thumb (bar, portion, position, whole);
+}
+
+
+
+/* Create a scroll bar and return the scroll bar vector for it.  W is
+   the Emacs window on which to create the scroll bar. TOP, LEFT,
+   WIDTH and HEIGHT are the pixel coordinates and dimensions of the
+   scroll bar. */
+
+static struct scroll_bar *
+x_scroll_bar_create (struct window *w, int top, int left,
+                    int width, int height, bool horizontal)
+{
+  struct frame *f = XFRAME (w->frame);
+  struct scroll_bar *bar
+    = ALLOCATE_PSEUDOVECTOR (struct scroll_bar, prev, PVEC_OTHER);
+  Lisp_Object barobj;
+
+  block_input ();
+
+  if (horizontal)
+    x_create_horizontal_toolkit_scroll_bar (f, bar);
+  else
+    x_create_toolkit_scroll_bar (f, bar);
+
+  XSETWINDOW (bar->window, w);
+  bar->top = top;
+  bar->left = left;
+  bar->width = width;
+  bar->height = height;
+  bar->start = 0;
+  bar->end = 0;
+  bar->dragging = -1;
+  bar->horizontal = horizontal;
+
+  /* Add bar to its frame's list of scroll bars.  */
+  bar->next = FRAME_SCROLL_BARS (f);
+  bar->prev = Qnil;
+  XSETVECTOR (barobj, bar);
+  fset_scroll_bars (f, barobj);
+  if (!NILP (bar->next))
+    XSETVECTOR (XSCROLL_BAR (bar->next)->prev, bar);
+
+  /* Map the window/widget.  */
+  {
+    if (horizontal)
+      xg_update_horizontal_scrollbar_pos (f, bar->x_window, top,
+                                         left, width, max (height, 1));
+    else
+      xg_update_scrollbar_pos (f, bar->x_window, top,
+                              left, width, max (height, 1));
+  }
+
+  unblock_input ();
+  return bar;
+}
+
+/* Destroy scroll bar BAR, and set its Emacs window's scroll bar to
+   nil.  */
+
+static void
+x_scroll_bar_remove (struct scroll_bar *bar)
+{
+  struct frame *f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window)));
+  block_input ();
+
+  xg_remove_scroll_bar (f, bar->x_window);
+
+  /* Dissociate this scroll bar from its window.  */
+  if (bar->horizontal)
+    wset_horizontal_scroll_bar (XWINDOW (bar->window), Qnil);
+  else
+    wset_vertical_scroll_bar (XWINDOW (bar->window), Qnil);
+
+  unblock_input ();
+}
+
+/* Set the handle of the vertical scroll bar for WINDOW to indicate
+   that we are displaying PORTION characters out of a total of WHOLE
+   characters, starting at POSITION.  If WINDOW has no scroll bar,
+   create one.  */
+
+static void
+pgtk_set_vertical_scroll_bar (struct window *w, int portion, int whole,
+                             int position)
+{
+  struct frame *f = XFRAME (w->frame);
+  Lisp_Object barobj;
+  struct scroll_bar *bar;
+  int top, height, left, width;
+  int window_y, window_height;
+
+  /* Get window dimensions.  */
+  window_box (w, ANY_AREA, 0, &window_y, 0, &window_height);
+  top = window_y;
+  height = window_height;
+  left = WINDOW_SCROLL_BAR_AREA_X (w);
+  width = WINDOW_SCROLL_BAR_AREA_WIDTH (w);
+
+  /* Does the scroll bar exist yet?  */
+  if (NILP (w->vertical_scroll_bar))
+    {
+      if (width > 0 && height > 0)
+       {
+         block_input ();
+          pgtk_clear_area (f, left, top, width, height);
+         unblock_input ();
+       }
+
+      bar = x_scroll_bar_create (w, top, left, width, max (height, 1), false);
+    }
+  else
+    {
+      /* It may just need to be moved and resized.  */
+      unsigned int mask = 0;
+
+      bar = XSCROLL_BAR (w->vertical_scroll_bar);
+
+      block_input ();
+
+      if (left != bar->left)
+       mask |= 1;
+      if (top != bar->top)
+       mask |= 1;
+      if (width != bar->width)
+       mask |= 1;
+      if (height != bar->height)
+       mask |= 1;
+
+      /* Move/size the scroll bar widget.  */
+      if (mask)
+       {
+         /* Since toolkit scroll bars are smaller than the space reserved
+            for them on the frame, we have to clear "under" them.  */
+         if (width > 0 && height > 0)
+           pgtk_clear_area (f, left, top, width, height);
+          xg_update_scrollbar_pos (f, bar->x_window, top,
+                                  left, width, max (height, 1));
+       }
+
+      /* Remember new settings.  */
+      bar->left = left;
+      bar->top = top;
+      bar->width = width;
+      bar->height = height;
+
+      unblock_input ();
+    }
+
+  x_set_toolkit_scroll_bar_thumb (bar, portion, position, whole);
+
+  XSETVECTOR (barobj, bar);
+  wset_vertical_scroll_bar (w, barobj);
+}
+
+
+static void
+pgtk_set_horizontal_scroll_bar (struct window *w, int portion, int whole,
+                               int position)
+{
+  struct frame *f = XFRAME (w->frame);
+  Lisp_Object barobj;
+  struct scroll_bar *bar;
+  int top, height, left, width;
+  int window_x, window_width;
+  int pixel_width = WINDOW_PIXEL_WIDTH (w);
+
+  /* Get window dimensions.  */
+  window_box (w, ANY_AREA, &window_x, 0, &window_width, 0);
+  left = window_x;
+  width = window_width;
+  top = WINDOW_SCROLL_BAR_AREA_Y (w);
+  height = WINDOW_SCROLL_BAR_AREA_HEIGHT (w);
+
+  /* Does the scroll bar exist yet?  */
+  if (NILP (w->horizontal_scroll_bar))
+    {
+      if (width > 0 && height > 0)
+       {
+         block_input ();
+
+         /* Clear also part between window_width and
+            WINDOW_PIXEL_WIDTH.  */
+         pgtk_clear_area (f, left, top, pixel_width, height);
+         unblock_input ();
+       }
+
+      bar = x_scroll_bar_create (w, top, left, width, height, true);
+    }
+  else
+    {
+      /* It may just need to be moved and resized.  */
+      unsigned int mask = 0;
+
+      bar = XSCROLL_BAR (w->horizontal_scroll_bar);
+
+      block_input ();
+
+      if (left != bar->left)
+       mask |= 1;
+      if (top != bar->top)
+       mask |= 1;
+      if (width != bar->width)
+       mask |= 1;
+      if (height != bar->height)
+       mask |= 1;
+
+      /* Move/size the scroll bar widget.  */
+      if (mask)
+       {
+         /* Since toolkit scroll bars are smaller than the space reserved
+            for them on the frame, we have to clear "under" them.  */
+         if (width > 0 && height > 0)
+           pgtk_clear_area (f,
+                            WINDOW_LEFT_EDGE_X (w), top,
+                            pixel_width - WINDOW_RIGHT_DIVIDER_WIDTH (w),
+                            height);
+         xg_update_horizontal_scrollbar_pos (f, bar->x_window, top, left,
+                                             width, height);
+       }
+
+      /* Remember new settings.  */
+      bar->left = left;
+      bar->top = top;
+      bar->width = width;
+      bar->height = height;
+
+      unblock_input ();
+    }
+
+  x_set_toolkit_horizontal_scroll_bar_thumb (bar, portion, position, whole);
+
+  XSETVECTOR (barobj, bar);
+  wset_horizontal_scroll_bar (w, barobj);
+}
+
+/* The following three hooks are used when we're doing a thorough
+   redisplay of the frame.  We don't explicitly know which scroll bars
+   are going to be deleted, because keeping track of when windows go
+   away is a real pain - "Can you say set-window-configuration, boys
+   and girls?"  Instead, we just assert at the beginning of redisplay
+   that *all* scroll bars are to be removed, and then save a scroll bar
+   from the fiery pit when we actually redisplay its window.  */
+
+/* Arrange for all scroll bars on FRAME to be removed at the next call
+   to `*judge_scroll_bars_hook'.  A scroll bar may be spared if
+   `*redeem_scroll_bar_hook' is applied to its window before the judgment.  */
+
+static void
+pgtk_condemn_scroll_bars (struct frame *frame)
+{
+  if (!NILP (FRAME_SCROLL_BARS (frame)))
+    {
+      if (!NILP (FRAME_CONDEMNED_SCROLL_BARS (frame)))
+       {
+         /* Prepend scrollbars to already condemned ones.  */
+         Lisp_Object last = FRAME_SCROLL_BARS (frame);
+
+         while (!NILP (XSCROLL_BAR (last)->next))
+           last = XSCROLL_BAR (last)->next;
+
+         XSCROLL_BAR (last)->next = FRAME_CONDEMNED_SCROLL_BARS (frame);
+         XSCROLL_BAR (FRAME_CONDEMNED_SCROLL_BARS (frame))->prev = last;
+       }
+
+      fset_condemned_scroll_bars (frame, FRAME_SCROLL_BARS (frame));
+      fset_scroll_bars (frame, Qnil);
+    }
+}
+
+
+/* Un-mark WINDOW's scroll bar for deletion in this judgment cycle.
+   Note that WINDOW isn't necessarily condemned at all.  */
+
+static void
+pgtk_redeem_scroll_bar (struct window *w)
+{
+  struct scroll_bar *bar;
+  Lisp_Object barobj;
+  struct frame *f;
+
+  /* We can't redeem this window's scroll bar if it doesn't have one.  */
+  if (NILP (w->vertical_scroll_bar) && NILP (w->horizontal_scroll_bar))
+    emacs_abort ();
+
+  if (!NILP (w->vertical_scroll_bar) && WINDOW_HAS_VERTICAL_SCROLL_BAR (w))
+    {
+      bar = XSCROLL_BAR (w->vertical_scroll_bar);
+      /* Unlink it from the condemned list.  */
+      f = XFRAME (WINDOW_FRAME (w));
+      if (NILP (bar->prev))
+       {
+         /* If the prev pointer is nil, it must be the first in one of
+            the lists.  */
+         if (EQ (FRAME_SCROLL_BARS (f), w->vertical_scroll_bar))
+           /* It's not condemned.  Everything's fine.  */
+           goto horizontal;
+         else if (EQ (FRAME_CONDEMNED_SCROLL_BARS (f),
+                      w->vertical_scroll_bar))
+           fset_condemned_scroll_bars (f, bar->next);
+         else
+           /* If its prev pointer is nil, it must be at the front of
+              one or the other!  */
+           emacs_abort ();
+       }
+      else
+       XSCROLL_BAR (bar->prev)->next = bar->next;
+
+      if (!NILP (bar->next))
+       XSCROLL_BAR (bar->next)->prev = bar->prev;
+
+      bar->next = FRAME_SCROLL_BARS (f);
+      bar->prev = Qnil;
+      XSETVECTOR (barobj, bar);
+      fset_scroll_bars (f, barobj);
+      if (!NILP (bar->next))
+       XSETVECTOR (XSCROLL_BAR (bar->next)->prev, bar);
+    }
+
+horizontal:
+  if (!NILP (w->horizontal_scroll_bar)
+      && WINDOW_HAS_HORIZONTAL_SCROLL_BAR (w))
+    {
+      bar = XSCROLL_BAR (w->horizontal_scroll_bar);
+      /* Unlink it from the condemned list.  */
+      f = XFRAME (WINDOW_FRAME (w));
+      if (NILP (bar->prev))
+       {
+         /* If the prev pointer is nil, it must be the first in one of
+            the lists.  */
+         if (EQ (FRAME_SCROLL_BARS (f), w->horizontal_scroll_bar))
+           /* It's not condemned.  Everything's fine.  */
+           return;
+         else if (EQ (FRAME_CONDEMNED_SCROLL_BARS (f),
+                      w->horizontal_scroll_bar))
+           fset_condemned_scroll_bars (f, bar->next);
+         else
+           /* If its prev pointer is nil, it must be at the front of
+              one or the other!  */
+           emacs_abort ();
+       }
+      else
+       XSCROLL_BAR (bar->prev)->next = bar->next;
+
+      if (!NILP (bar->next))
+       XSCROLL_BAR (bar->next)->prev = bar->prev;
+
+      bar->next = FRAME_SCROLL_BARS (f);
+      bar->prev = Qnil;
+      XSETVECTOR (barobj, bar);
+      fset_scroll_bars (f, barobj);
+      if (!NILP (bar->next))
+       XSETVECTOR (XSCROLL_BAR (bar->next)->prev, bar);
+    }
+}
+
+/* Remove all scroll bars on FRAME that haven't been saved since the
+   last call to `*condemn_scroll_bars_hook'.  */
+
+static void
+pgtk_judge_scroll_bars (struct frame *f)
+{
+  Lisp_Object bar, next;
+
+  bar = FRAME_CONDEMNED_SCROLL_BARS (f);
+
+  /* Clear out the condemned list now so we won't try to process any
+     more events on the hapless scroll bars.  */
+  fset_condemned_scroll_bars (f, Qnil);
+
+  for (; !NILP (bar); bar = next)
+    {
+      struct scroll_bar *b = XSCROLL_BAR (bar);
+
+      x_scroll_bar_remove (b);
+
+      next = b->next;
+      b->next = b->prev = Qnil;
+    }
+
+  /* Now there should be no references to the condemned scroll bars,
+     and they should get garbage-collected.  */
+}
+
+static void
+set_fullscreen_state (struct frame *f)
+{
+  if (!FRAME_GTK_OUTER_WIDGET (f))
+    return;
+
+  GtkWindow *widget = GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f));
+  switch (f->want_fullscreen)
+    {
+    case FULLSCREEN_NONE:
+      gtk_window_unfullscreen (widget);
+      gtk_window_unmaximize (widget);
+      store_frame_param (f, Qfullscreen, Qnil);
+      break;
+
+    case FULLSCREEN_BOTH:
+      gtk_window_unmaximize (widget);
+      gtk_window_fullscreen (widget);
+      store_frame_param (f, Qfullscreen, Qfullboth);
+      break;
+
+    case FULLSCREEN_MAXIMIZED:
+      gtk_window_unfullscreen (widget);
+      gtk_window_maximize (widget);
+      store_frame_param (f, Qfullscreen, Qmaximized);
+      break;
+
+    case FULLSCREEN_WIDTH:
+    case FULLSCREEN_HEIGHT:
+      /* Not supported by gtk. Ignore them. */
+      break;
+    }
+
+  f->want_fullscreen = FULLSCREEN_NONE;
+}
+
+static void
+pgtk_fullscreen_hook (struct frame *f)
+{
+  if (FRAME_VISIBLE_P (f))
+    {
+      block_input ();
+      set_fullscreen_state (f);
+      unblock_input ();
+    }
+}
+
+/* This function is called when the last frame on a display is deleted. */
+void
+pgtk_delete_terminal (struct terminal *terminal)
+{
+  struct pgtk_display_info *dpyinfo = terminal->display_info.pgtk;
+
+  /* Protect against recursive calls.  delete_frame in
+     delete_terminal calls us back when it deletes our last frame.  */
+  if (!terminal->name)
+    return;
+
+  block_input ();
+
+  pgtk_im_finish (dpyinfo);
+
+  /* Normally, the display is available...  */
+  if (dpyinfo->gdpy)
+    {
+      image_destroy_all_bitmaps (dpyinfo);
+
+      g_clear_object (&dpyinfo->xg_cursor);
+      g_clear_object (&dpyinfo->vertical_scroll_bar_cursor);
+      g_clear_object (&dpyinfo->horizontal_scroll_bar_cursor);
+      g_clear_object (&dpyinfo->invisible_cursor);
+      if (dpyinfo->last_click_event != NULL) {
+       gdk_event_free (dpyinfo->last_click_event);
+       dpyinfo->last_click_event = NULL;
+      }
+
+      xg_display_close (dpyinfo->gdpy);
+
+      /* Do not close the connection here because it's already closed
+         by X(t)CloseDisplay (Bug#18403).  */
+      dpyinfo->gdpy = NULL;
+    }
+
+  if (dpyinfo->connection >= 0)
+    emacs_close (dpyinfo->connection);
+
+  dpyinfo->connection = -1;
+
+  delete_keyboard_wait_descriptor (0);
+
+  pgtk_delete_display (dpyinfo);
+  unblock_input ();
+}
+
+/* Store F's background color into *BGCOLOR.  */
+static void
+pgtk_query_frame_background_color (struct frame *f, Emacs_Color * bgcolor)
+{
+  bgcolor->pixel = FRAME_BACKGROUND_PIXEL (f);
+  pgtk_query_color (f, bgcolor);
+}
+
+static void
+pgtk_free_pixmap (struct frame *_f, Emacs_Pixmap pixmap)
+{
+  if (pixmap)
+    {
+      xfree (pixmap->data);
+      xfree (pixmap);
+    }
+}
+
+void
+pgtk_focus_frame (struct frame *f, bool noactivate)
+{
+  struct pgtk_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
+
+  GtkWidget *wid = FRAME_WIDGET (f);
+
+  if (dpyinfo->x_focus_frame != f && wid != NULL)
+    {
+      block_input ();
+      gtk_widget_grab_focus (wid);
+      unblock_input ();
+    }
+}
+
+
+static void
+set_opacity_recursively (GtkWidget * w, gpointer data)
+{
+  gtk_widget_set_opacity (w, *(double *) data);
+  if (GTK_IS_CONTAINER (w))
+    gtk_container_foreach (GTK_CONTAINER (w), set_opacity_recursively, data);
+}
+
+static void
+x_set_frame_alpha (struct frame *f)
+{
+  struct pgtk_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
+  double alpha = 1.0;
+  double alpha_min = 1.0;
+
+  if (dpyinfo->highlight_frame == f)
+    alpha = f->alpha[0];
+  else
+    alpha = f->alpha[1];
+
+  if (alpha < 0.0)
+    return;
+
+  if (FLOATP (Vframe_alpha_lower_limit))
+    alpha_min = XFLOAT_DATA (Vframe_alpha_lower_limit);
+  else if (FIXNUMP (Vframe_alpha_lower_limit))
+    alpha_min = (XFIXNUM (Vframe_alpha_lower_limit)) / 100.0;
+
+  if (alpha > 1.0)
+    alpha = 1.0;
+  else if (alpha < alpha_min && alpha_min <= 1.0)
+    alpha = alpha_min;
+
+#if 0
+  /* If there is a parent from the window manager, put the property there
+     also, to work around broken window managers that fail to do that.
+     Do this unconditionally as this function is called on reparent when
+     alpha has not changed on the frame.  */
+
+  if (!FRAME_PARENT_FRAME (f))
+    {
+      Window parent = x_find_topmost_parent (f);
+      if (parent != None)
+       XChangeProperty (dpy, parent, dpyinfo->Xatom_net_wm_window_opacity,
+                        XA_CARDINAL, 32, PropModeReplace,
+                        (unsigned char *) &opac, 1);
+    }
+#endif
+
+  set_opacity_recursively (FRAME_WIDGET (f), &alpha);
+  /* without this, blending mode is strange on wayland. */
+  gtk_widget_queue_resize_no_redraw (FRAME_WIDGET (f));
+}
+
+static void
+frame_highlight (struct frame *f)
+{
+  /* We used to only do this if Vx_no_window_manager was non-nil, but
+     the ICCCM (section 4.1.6) says that the window's border pixmap
+     and border pixel are window attributes which are "private to the
+     client", so we can always change it to whatever we want.  */
+  block_input ();
+  /* I recently started to get errors in this XSetWindowBorder, depending on
+     the window-manager in use, tho something more is at play since I've been
+     using that same window-manager binary for ever.  Let's not crash just
+     because of this (bug#9310).  */
+
+  GtkWidget *w = FRAME_WIDGET (f);
+
+  char *css =
+    g_strdup_printf ("decoration { border: solid %dpx #%06x; }",
+                    f->border_width,
+                    (unsigned int) FRAME_X_OUTPUT (f)->border_pixel & 
0x00ffffff);
+
+  GtkStyleContext *ctxt = gtk_widget_get_style_context (w);
+  GtkCssProvider *css_provider = gtk_css_provider_new ();
+  gtk_css_provider_load_from_data (css_provider, css, -1, NULL);
+  gtk_style_context_add_provider (ctxt, GTK_STYLE_PROVIDER (css_provider),
+                                 GTK_STYLE_PROVIDER_PRIORITY_USER);
+  g_free (css);
+
+  GtkCssProvider *old = FRAME_X_OUTPUT (f)->border_color_css_provider;
+  FRAME_X_OUTPUT (f)->border_color_css_provider = css_provider;
+  if (old != NULL)
+    {
+      gtk_style_context_remove_provider (ctxt, GTK_STYLE_PROVIDER (old));
+      g_object_unref (old);
+    }
+
+  unblock_input ();
+  gui_update_cursor (f, true);
+  x_set_frame_alpha (f);
+}
+
+static void
+frame_unhighlight (struct frame *f)
+{
+  /* We used to only do this if Vx_no_window_manager was non-nil, but
+     the ICCCM (section 4.1.6) says that the window's border pixmap
+     and border pixel are window attributes which are "private to the
+     client", so we can always change it to whatever we want.  */
+  block_input ();
+  /* Same as above for XSetWindowBorder (bug#9310).  */
+
+  GtkWidget *w = FRAME_WIDGET (f);
+
+  char *css =
+    g_strdup_printf ("decoration { border: dotted %dpx #ffffff; }",
+                    f->border_width);
+
+  GtkStyleContext *ctxt = gtk_widget_get_style_context (w);
+  GtkCssProvider *css_provider = gtk_css_provider_new ();
+  gtk_css_provider_load_from_data (css_provider, css, -1, NULL);
+  gtk_style_context_add_provider (ctxt, GTK_STYLE_PROVIDER (css_provider),
+                                 GTK_STYLE_PROVIDER_PRIORITY_USER);
+  g_free (css);
+
+  GtkCssProvider *old = FRAME_X_OUTPUT (f)->border_color_css_provider;
+  FRAME_X_OUTPUT (f)->border_color_css_provider = css_provider;
+  if (old != NULL)
+    {
+      gtk_style_context_remove_provider (ctxt, GTK_STYLE_PROVIDER (old));
+      g_object_unref (old);
+    }
+
+  unblock_input ();
+  gui_update_cursor (f, true);
+  x_set_frame_alpha (f);
+}
+
+
+void
+pgtk_frame_rehighlight (struct pgtk_display_info *dpyinfo)
+{
+  struct frame *old_highlight = dpyinfo->highlight_frame;
+
+  if (dpyinfo->x_focus_frame)
+    {
+      dpyinfo->highlight_frame
+       = ((FRAMEP (FRAME_FOCUS_FRAME (dpyinfo->x_focus_frame)))
+          ? XFRAME (FRAME_FOCUS_FRAME (dpyinfo->x_focus_frame))
+          : dpyinfo->x_focus_frame);
+      if (!FRAME_LIVE_P (dpyinfo->highlight_frame))
+       {
+         fset_focus_frame (dpyinfo->x_focus_frame, Qnil);
+         dpyinfo->highlight_frame = dpyinfo->x_focus_frame;
+       }
+    }
+  else
+    dpyinfo->highlight_frame = 0;
+
+  if (old_highlight)
+    frame_unhighlight (old_highlight);
+  if (dpyinfo->highlight_frame)
+    frame_highlight (dpyinfo->highlight_frame);
+}
+
+/* The focus has changed, or we have redirected a frame's focus to
+   another frame (this happens when a frame uses a surrogate
+   mini-buffer frame).  Shift the highlight as appropriate.
+
+   The FRAME argument doesn't necessarily have anything to do with which
+   frame is being highlighted or un-highlighted; we only use it to find
+   the appropriate X display info.  */
+
+static void
+XTframe_rehighlight (struct frame *frame)
+{
+  pgtk_frame_rehighlight (FRAME_DISPLAY_INFO (frame));
+}
+
+
+/* Toggle mouse pointer visibility on frame F by using invisible cursor.  */
+
+static void
+x_toggle_visible_pointer (struct frame *f, bool invisible)
+{
+  Emacs_Cursor cursor;
+  if (invisible)
+    cursor = FRAME_DISPLAY_INFO (f)->invisible_cursor;
+  else
+    cursor = f->output_data.pgtk->current_cursor;
+  gdk_window_set_cursor (gtk_widget_get_window (FRAME_GTK_WIDGET (f)),
+                        cursor);
+  f->pointer_invisible = invisible;
+}
+
+static void
+x_setup_pointer_blanking (struct pgtk_display_info *dpyinfo)
+{
+  dpyinfo->toggle_visible_pointer = x_toggle_visible_pointer;
+  dpyinfo->invisible_cursor =
+    gdk_cursor_new_for_display (dpyinfo->gdpy, GDK_BLANK_CURSOR);
+}
+
+static void
+XTtoggle_invisible_pointer (struct frame *f, bool invisible)
+{
+  block_input ();
+  FRAME_DISPLAY_INFO (f)->toggle_visible_pointer (f, invisible);
+  unblock_input ();
+}
+
+/* The focus has changed.  Update the frames as necessary to reflect
+   the new situation.  Note that we can't change the selected frame
+   here, because the Lisp code we are interrupting might become confused.
+   Each event gets marked with the frame in which it occurred, so the
+   Lisp code can tell when the switch took place by examining the events.  */
+
+static void
+x_new_focus_frame (struct pgtk_display_info *dpyinfo, struct frame *frame)
+{
+  struct frame *old_focus = dpyinfo->x_focus_frame;
+  /* doesn't work on wayland */
+
+  if (frame != dpyinfo->x_focus_frame)
+    {
+      /* Set this before calling other routines, so that they see
+         the correct value of x_focus_frame.  */
+      dpyinfo->x_focus_frame = frame;
+
+      if (old_focus && old_focus->auto_lower)
+       if (FRAME_GTK_OUTER_WIDGET (old_focus))
+         gdk_window_lower (gtk_widget_get_window
+                           (FRAME_GTK_OUTER_WIDGET (old_focus)));
+
+      if (dpyinfo->x_focus_frame && dpyinfo->x_focus_frame->auto_raise)
+       if (FRAME_GTK_OUTER_WIDGET (dpyinfo->x_focus_frame))
+         gdk_window_raise (gtk_widget_get_window
+                           (FRAME_GTK_OUTER_WIDGET (dpyinfo->x_focus_frame)));
+    }
+
+  pgtk_frame_rehighlight (dpyinfo);
+}
+
+static void
+pgtk_buffer_flipping_unblocked_hook (struct frame *f)
+{
+  block_input ();
+  flip_cr_context (f);
+  gtk_widget_queue_draw (FRAME_GTK_WIDGET (f));
+  unblock_input ();
+}
+
+static struct terminal *
+pgtk_create_terminal (struct pgtk_display_info *dpyinfo)
+/* --------------------------------------------------------------------------
+      Set up use of Gtk before we make the first connection.
+   -------------------------------------------------------------------------- 
*/
+{
+  struct terminal *terminal;
+
+  terminal = create_terminal (output_pgtk, &pgtk_redisplay_interface);
+
+  terminal->display_info.pgtk = dpyinfo;
+  dpyinfo->terminal = terminal;
+
+  terminal->clear_frame_hook = pgtk_clear_frame;
+  terminal->ring_bell_hook = pgtk_ring_bell;
+  terminal->toggle_invisible_pointer_hook = XTtoggle_invisible_pointer;
+  terminal->update_begin_hook = pgtk_update_begin;
+  terminal->update_end_hook = pgtk_update_end;
+  terminal->read_socket_hook = pgtk_read_socket;
+  terminal->frame_up_to_date_hook = pgtk_frame_up_to_date;
+  terminal->mouse_position_hook = pgtk_mouse_position;
+  terminal->frame_rehighlight_hook = XTframe_rehighlight;
+  terminal->buffer_flipping_unblocked_hook = 
pgtk_buffer_flipping_unblocked_hook;
+  terminal->frame_raise_lower_hook = pgtk_frame_raise_lower;
+  terminal->frame_visible_invisible_hook = pgtk_make_frame_visible_invisible;
+  terminal->fullscreen_hook = pgtk_fullscreen_hook;
+  terminal->menu_show_hook = pgtk_menu_show;
+  terminal->activate_menubar_hook = pgtk_activate_menubar;
+  terminal->popup_dialog_hook = pgtk_popup_dialog;
+  terminal->change_tab_bar_height_hook = x_change_tab_bar_height;
+  terminal->set_vertical_scroll_bar_hook = pgtk_set_vertical_scroll_bar;
+  terminal->set_horizontal_scroll_bar_hook = pgtk_set_horizontal_scroll_bar;
+  terminal->condemn_scroll_bars_hook = pgtk_condemn_scroll_bars;
+  terminal->redeem_scroll_bar_hook = pgtk_redeem_scroll_bar;
+  terminal->judge_scroll_bars_hook = pgtk_judge_scroll_bars;
+  terminal->get_string_resource_hook = pgtk_get_string_resource;
+  terminal->delete_frame_hook = x_destroy_window;
+  terminal->delete_terminal_hook = pgtk_delete_terminal;
+  terminal->query_frame_background_color = pgtk_query_frame_background_color;
+  terminal->defined_color_hook = pgtk_defined_color;
+  terminal->set_new_font_hook = pgtk_new_font;
+  terminal->set_bitmap_icon_hook = pgtk_bitmap_icon;
+  terminal->implicit_set_name_hook = pgtk_implicitly_set_name;
+  terminal->iconify_frame_hook = pgtk_iconify_frame;
+  terminal->set_scroll_bar_default_width_hook =
+    pgtk_set_scroll_bar_default_width;
+  terminal->set_scroll_bar_default_height_hook =
+    pgtk_set_scroll_bar_default_height;
+  terminal->set_window_size_hook = pgtk_set_window_size;
+  terminal->query_colors = pgtk_query_colors;
+  terminal->get_focus_frame = x_get_focus_frame;
+  terminal->focus_frame_hook = pgtk_focus_frame;
+  terminal->set_frame_offset_hook = x_set_offset;
+  terminal->free_pixmap = pgtk_free_pixmap;
+
+  /* Other hooks are NULL by default.  */
+
+  return terminal;
+}
+
+struct pgtk_window_is_of_frame_recursive_t
+{
+  GdkWindow *window;
+  bool result;
+  GtkWidget *emacs_gtk_fixed;  /* stop on emacsgtkfixed other than this. */
+};
+
+static void
+pgtk_window_is_of_frame_recursive (GtkWidget * widget, gpointer data)
+{
+  struct pgtk_window_is_of_frame_recursive_t *datap = data;
+
+  if (datap->result)
+    return;
+
+  if (EMACS_IS_FIXED (widget) && widget != datap->emacs_gtk_fixed)
+    return;
+
+  if (gtk_widget_get_window (widget) == datap->window)
+    {
+      datap->result = true;
+      return;
+    }
+
+  if (GTK_IS_CONTAINER (widget)) {
+    gtk_container_foreach (GTK_CONTAINER (widget),
+                          pgtk_window_is_of_frame_recursive, datap);
+  }
+}
+
+static bool
+pgtk_window_is_of_frame (struct frame *f, GdkWindow * window)
+{
+  struct pgtk_window_is_of_frame_recursive_t data;
+  data.window = window;
+  data.result = false;
+  data.emacs_gtk_fixed = FRAME_GTK_WIDGET (f);
+  pgtk_window_is_of_frame_recursive (FRAME_WIDGET (f), &data);
+  return data.result;
+}
+
+/* Like x_window_to_frame but also compares the window with the widget's
+   windows.  */
+static struct frame *
+pgtk_any_window_to_frame (GdkWindow * window)
+{
+  Lisp_Object tail, frame;
+  struct frame *f, *found = NULL;
+
+  if (window == NULL)
+    return NULL;
+
+  FOR_EACH_FRAME (tail, frame)
+  {
+    if (found)
+      break;
+    f = XFRAME (frame);
+    if (FRAME_PGTK_P (f))
+      {
+       if (pgtk_window_is_of_frame (f, window))
+         found = f;
+      }
+  }
+
+  return found;
+}
+
+static gboolean
+pgtk_handle_event (GtkWidget *widget, GdkEvent *event, gpointer *data)
+{
+#if GTK_CHECK_VERSION (3, 18, 0)
+  struct frame *f;
+  union buffered_input_event inev;
+  GtkWidget *frame_widget;
+  gint x, y;
+
+  if (event->type == GDK_TOUCHPAD_PINCH
+      && (event->touchpad_pinch.phase
+         != GDK_TOUCHPAD_GESTURE_PHASE_END))
+    {
+      f = pgtk_any_window_to_frame (gtk_widget_get_window (widget));
+      frame_widget = FRAME_GTK_WIDGET (f);
+
+      gtk_widget_translate_coordinates (widget, frame_widget,
+                                       lrint (event->touchpad_pinch.x),
+                                       lrint (event->touchpad_pinch.y),
+                                       &x, &y);
+      if (f)
+       {
+
+         inev.ie.kind = PINCH_EVENT;
+         XSETFRAME (inev.ie.frame_or_window, f);
+         XSETINT (inev.ie.x, x);
+         XSETINT (inev.ie.y, y);
+         inev.ie.arg = list4 (make_float (event->touchpad_pinch.dx),
+                              make_float (event->touchpad_pinch.dy),
+                              make_float (event->touchpad_pinch.scale),
+                              make_float (event->touchpad_pinch.angle_delta));
+         inev.ie.modifiers = pgtk_gtk_to_emacs_modifiers (FRAME_DISPLAY_INFO 
(f),
+                                                          
event->touchpad_pinch.state);
+         evq_enqueue (&inev);
+       }
+
+      return TRUE;
+    }
+#endif
+  return FALSE;
+}
+
+static void
+pgtk_fill_rectangle (struct frame *f, unsigned long color, int x, int y,
+                    int width, int height)
+{
+  cairo_t *cr;
+  cr = pgtk_begin_cr_clip (f);
+  pgtk_set_cr_source_with_color (f, color);
+  cairo_rectangle (cr, x, y, width, height);
+  cairo_fill (cr);
+  pgtk_end_cr_clip (f);
+}
+
+void
+pgtk_clear_under_internal_border (struct frame *f)
+{
+  if (FRAME_INTERNAL_BORDER_WIDTH (f) > 0
+      && (!FRAME_GTK_OUTER_WIDGET (f)
+         || gtk_widget_get_realized (FRAME_GTK_OUTER_WIDGET (f))))
+    {
+      int border = FRAME_INTERNAL_BORDER_WIDTH (f);
+      int width = FRAME_PIXEL_WIDTH (f);
+      int height = FRAME_PIXEL_HEIGHT (f);
+      int margin = FRAME_TOP_MARGIN_HEIGHT (f);
+      int face_id =
+       (FRAME_PARENT_FRAME (f)
+        ? (!NILP (Vface_remapping_alist)
+           ? lookup_basic_face (NULL, f, CHILD_FRAME_BORDER_FACE_ID)
+           : CHILD_FRAME_BORDER_FACE_ID)
+        : (!NILP (Vface_remapping_alist)
+           ? lookup_basic_face (NULL, f, INTERNAL_BORDER_FACE_ID)
+           : INTERNAL_BORDER_FACE_ID));
+      struct face *face = FACE_FROM_ID_OR_NULL (f, face_id);
+
+      block_input ();
+
+      if (face)
+       {
+#define x_fill_rectangle(f, gc, x, y, w, h) \
+           fill_background_by_face (f, face, x, y, w, h)
+         x_fill_rectangle (f, gc, 0, margin, width, border);
+         x_fill_rectangle (f, gc, 0, 0, border, height);
+         x_fill_rectangle (f, gc, width - border, 0, border, height);
+         x_fill_rectangle (f, gc, 0, height - border, width, border);
+#undef x_fill_rectangle
+       }
+      else
+       {
+#define x_clear_area(f, x, y, w, h)  pgtk_clear_area (f, x, y, w, h)
+         x_clear_area (f, 0, 0, border, height);
+         x_clear_area (f, 0, margin, width, border);
+         x_clear_area (f, width - border, 0, border, height);
+         x_clear_area (f, 0, height - border, width, border);
+#undef x_clear_area
+       }
+
+      unblock_input ();
+    }
+}
+
+static gboolean
+pgtk_handle_draw (GtkWidget * widget, cairo_t * cr, gpointer * data)
+{
+  struct frame *f;
+
+  GdkWindow *win = gtk_widget_get_window (widget);
+
+  if (win != NULL)
+    {
+      cairo_surface_t *src = NULL;
+      f = pgtk_any_window_to_frame (win);
+      if (f != NULL)
+       {
+         src = FRAME_X_OUTPUT (f)->cr_surface_visible_bell;
+         if (src == NULL && FRAME_CR_ACTIVE_CONTEXT (f) != NULL)
+           src = cairo_get_target (FRAME_CR_ACTIVE_CONTEXT (f));
+       }
+      if (src != NULL)
+       {
+         cairo_set_source_surface (cr, src, 0, 0);
+         cairo_paint (cr);
+       }
+    }
+  return FALSE;
+}
+
+static void
+size_allocate (GtkWidget * widget, GtkAllocation * alloc,
+              gpointer user_data)
+{
+  struct frame *f = pgtk_any_window_to_frame (gtk_widget_get_window (widget));
+
+  /* Between a frame is created and not shown, size is allocated and
+   * this handler is called.  When that, since the widget's window is
+   * NULL, we can't get f, pgtk_cr_update_surface_desired_size is not
+   * called, and its size is 0x0.  That causes empty frame.
+   *
+   * Fortunately since we know f in pgtk_set_event_handler, we can get
+   * it through user_data;
+   */
+  if (!f)
+    f = user_data;
+
+  if (f)
+    {
+      xg_frame_resized (f, alloc->width, alloc->height);
+      pgtk_cr_update_surface_desired_size (f, alloc->width, alloc->height, 
false);
+    }
+}
+
+static void
+x_find_modifier_meanings (struct pgtk_display_info *dpyinfo)
+{
+  GdkDisplay *gdpy = dpyinfo->gdpy;
+  GdkKeymap *keymap = gdk_keymap_get_for_display (gdpy);
+  GdkModifierType state = GDK_META_MASK;
+  gboolean r = gdk_keymap_map_virtual_modifiers (keymap, &state);
+  if (r)
+    {
+      /* Meta key exists. */
+      if (state == GDK_META_MASK)
+       {
+         dpyinfo->meta_mod_mask = GDK_MOD1_MASK;       /* maybe this is meta. 
*/
+         dpyinfo->alt_mod_mask = 0;
+       }
+      else
+       {
+         dpyinfo->meta_mod_mask = state & ~GDK_META_MASK;
+         if (dpyinfo->meta_mod_mask == GDK_MOD1_MASK)
+           dpyinfo->alt_mod_mask = 0;
+         else
+           dpyinfo->alt_mod_mask = GDK_MOD1_MASK;
+       }
+    }
+  else
+    {
+      dpyinfo->meta_mod_mask = GDK_MOD1_MASK;
+      dpyinfo->alt_mod_mask = 0;
+    }
+
+  state = GDK_SUPER_MASK;
+  r = gdk_keymap_map_virtual_modifiers (keymap, &state);
+  if (r)
+    {
+      /* Super key exists. */
+      if (state == GDK_SUPER_MASK)
+       {
+         dpyinfo->super_mod_mask = GDK_MOD4_MASK;      /* maybe this is super. 
*/
+       }
+      else
+       {
+         dpyinfo->super_mod_mask = state & ~GDK_SUPER_MASK;
+       }
+    }
+  else
+    {
+      dpyinfo->super_mod_mask = GDK_MOD4_MASK;
+    }
+
+  state = GDK_HYPER_MASK;
+  r = gdk_keymap_map_virtual_modifiers (keymap, &state);
+  if (r)
+    {
+      /* Hyper key exists. */
+      if (state == GDK_HYPER_MASK)
+       {
+         dpyinfo->hyper_mod_mask = GDK_MOD3_MASK;      /* maybe this is hyper. 
*/
+       }
+      else
+       {
+         dpyinfo->hyper_mod_mask = state & ~GDK_HYPER_MASK;
+       }
+    }
+  else
+    {
+      dpyinfo->hyper_mod_mask = GDK_MOD3_MASK;
+    }
+
+  /* If xmodmap says:
+   *   $ xmodmap | grep mod4
+   *   mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L 
(0xcf)
+   * then, when mod4 is pressed, both of super and hyper are recognized ON.
+   * Maybe many people have such configuration, and they don't like such 
behavior,
+   * so I disable hyper if such configuration is detected.
+   */
+  if (dpyinfo->hyper_mod_mask == dpyinfo->super_mod_mask)
+    dpyinfo->hyper_mod_mask = 0;
+}
+
+static void
+get_modifier_values (int *mod_ctrl,
+                    int *mod_meta,
+                    int *mod_alt, int *mod_hyper, int *mod_super)
+{
+  Lisp_Object tem;
+
+  *mod_ctrl = ctrl_modifier;
+  *mod_meta = meta_modifier;
+  *mod_alt = alt_modifier;
+  *mod_hyper = hyper_modifier;
+  *mod_super = super_modifier;
+
+  tem = Fget (Vx_ctrl_keysym, Qmodifier_value);
+  if (INTEGERP (tem))
+    *mod_ctrl = XFIXNUM (tem) & INT_MAX;
+  tem = Fget (Vx_alt_keysym, Qmodifier_value);
+  if (INTEGERP (tem))
+    *mod_alt = XFIXNUM (tem) & INT_MAX;
+  tem = Fget (Vx_meta_keysym, Qmodifier_value);
+  if (INTEGERP (tem))
+    *mod_meta = XFIXNUM (tem) & INT_MAX;
+  tem = Fget (Vx_hyper_keysym, Qmodifier_value);
+  if (INTEGERP (tem))
+    *mod_hyper = XFIXNUM (tem) & INT_MAX;
+  tem = Fget (Vx_super_keysym, Qmodifier_value);
+  if (INTEGERP (tem))
+    *mod_super = XFIXNUM (tem) & INT_MAX;
+}
+
+int
+pgtk_gtk_to_emacs_modifiers (struct pgtk_display_info *dpyinfo, int state)
+{
+  int mod_ctrl;
+  int mod_meta;
+  int mod_alt;
+  int mod_hyper;
+  int mod_super;
+  int mod;
+
+  get_modifier_values (&mod_ctrl, &mod_meta, &mod_alt, &mod_hyper,
+                      &mod_super);
+
+  mod = 0;
+  if (state & GDK_SHIFT_MASK)
+    mod |= shift_modifier;
+  if (state & GDK_CONTROL_MASK)
+    mod |= mod_ctrl;
+  if (state & dpyinfo->meta_mod_mask)
+    mod |= mod_meta;
+  if (state & dpyinfo->alt_mod_mask)
+    mod |= mod_alt;
+  if (state & dpyinfo->super_mod_mask)
+    mod |= mod_super;
+  if (state & dpyinfo->hyper_mod_mask)
+    mod |= mod_hyper;
+  return mod;
+}
+
+int
+pgtk_emacs_to_gtk_modifiers (struct pgtk_display_info *dpyinfo, int state)
+{
+  int mod_ctrl;
+  int mod_meta;
+  int mod_alt;
+  int mod_hyper;
+  int mod_super;
+  int mask;
+
+  get_modifier_values (&mod_ctrl, &mod_meta, &mod_alt, &mod_hyper,
+                      &mod_super);
+
+  mask = 0;
+  if (state & mod_alt)
+    mask |= dpyinfo->alt_mod_mask;
+  if (state & mod_super)
+    mask |= dpyinfo->super_mod_mask;
+  if (state & mod_hyper)
+    mask |= dpyinfo->hyper_mod_mask;
+  if (state & shift_modifier)
+    mask |= GDK_SHIFT_MASK;
+  if (state & mod_ctrl)
+    mask |= GDK_CONTROL_MASK;
+  if (state & mod_meta)
+    mask |= dpyinfo->meta_mod_mask;
+  return mask;
+}
+
+#define IsCursorKey(keysym)       (0xff50 <= (keysym) && (keysym) < 0xff60)
+#define IsMiscFunctionKey(keysym) (0xff60 <= (keysym) && (keysym) < 0xff6c)
+#define IsKeypadKey(keysym)       (0xff80 <= (keysym) && (keysym) < 0xffbe)
+#define IsFunctionKey(keysym)     (0xffbe <= (keysym) && (keysym) < 0xffe1)
+#define IsModifierKey(keysym)                                                  
\
+  ((((keysym) >= GDK_KEY_Shift_L) && ((keysym) <= GDK_KEY_Hyper_R))            
\
+   || (((keysym) >= GDK_KEY_ISO_Lock) && ((keysym) <= 
GDK_KEY_ISO_Level5_Lock))        \
+   || ((keysym) == GDK_KEY_Mode_switch)                                        
        \
+   || ((keysym) == GDK_KEY_Num_Lock))
+
+
+void
+pgtk_enqueue_string (struct frame *f, gchar * str)
+{
+  gunichar *ustr, *uptr;
+
+  uptr = ustr = g_utf8_to_ucs4 (str, -1, NULL, NULL, NULL);
+  if (ustr == NULL)
+    return;
+  for (; *ustr != 0; ustr++)
+    {
+      union buffered_input_event inev;
+      Lisp_Object c = make_fixnum (*ustr);
+      EVENT_INIT (inev.ie);
+      inev.ie.kind = (SINGLE_BYTE_CHAR_P (XFIXNAT (c))
+                     ? ASCII_KEYSTROKE_EVENT
+                     : MULTIBYTE_CHAR_KEYSTROKE_EVENT);
+      inev.ie.arg = Qnil;
+      inev.ie.code = XFIXNAT (c);
+      XSETFRAME (inev.ie.frame_or_window, f);
+      inev.ie.modifiers = 0;
+      inev.ie.timestamp = 0;
+      evq_enqueue (&inev);
+    }
+
+  g_free (uptr);
+}
+
+void
+pgtk_enqueue_preedit (struct frame *f, Lisp_Object preedit)
+{
+  union buffered_input_event inev;
+  EVENT_INIT (inev.ie);
+  inev.ie.kind = PREEDIT_TEXT_EVENT;
+  inev.ie.arg = preedit;
+  inev.ie.code = 0;
+  XSETFRAME (inev.ie.frame_or_window, f);
+  inev.ie.modifiers = 0;
+  inev.ie.timestamp = 0;
+  evq_enqueue (&inev);
+}
+
+static gboolean
+key_press_event (GtkWidget * widget, GdkEvent * event, gpointer * user_data)
+{
+  struct coding_system coding;
+  union buffered_input_event inev;
+  ptrdiff_t nbytes = 0;
+  Mouse_HLInfo *hlinfo;
+
+  USE_SAFE_ALLOCA;
+
+  EVENT_INIT (inev.ie);
+  inev.ie.kind = NO_EVENT;
+  inev.ie.arg = Qnil;
+
+  struct frame *f = pgtk_any_window_to_frame (gtk_widget_get_window (widget));
+  hlinfo = MOUSE_HL_INFO (f);
+
+  /* If mouse-highlight is an integer, input clears out
+     mouse highlighting.  */
+  if (!hlinfo->mouse_face_hidden && INTEGERP (Vmouse_highlight))
+    {
+      clear_mouse_face (hlinfo);
+      hlinfo->mouse_face_hidden = true;
+    }
+
+  if (f != 0)
+    {
+      /* While super is pressed, gtk_im_context_filter_keypress() always 
process the
+       * key events ignoring super.
+       * As a work around, don't call it while super or hyper are pressed...
+       */
+      struct pgtk_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
+      if (!(event->key.state & (dpyinfo->super_mod_mask | 
dpyinfo->hyper_mod_mask)))
+       {
+         if (pgtk_im_filter_keypress (f, &event->key))
+           return TRUE;
+       }
+    }
+
+  if (f != 0)
+    {
+      guint keysym, orig_keysym;
+      /* al%imercury@uunet.uu.net says that making this 81
+         instead of 80 fixed a bug whereby meta chars made
+         his Emacs hang.
+
+         It seems that some version of XmbLookupString has
+         a bug of not returning XBufferOverflow in
+         status_return even if the input is too long to
+         fit in 81 bytes.  So, we must prepare sufficient
+         bytes for copy_buffer.  513 bytes (256 chars for
+         two-byte character set) seems to be a fairly good
+         approximation.  -- 2000.8.10 handa@etl.go.jp  */
+      unsigned char copy_buffer[513];
+      unsigned char *copy_bufptr = copy_buffer;
+      int copy_bufsiz = sizeof (copy_buffer);
+      int modifiers;
+      Lisp_Object coding_system = Qlatin_1;
+      Lisp_Object c;
+      guint state = event->key.state;
+
+      state |=
+       pgtk_emacs_to_gtk_modifiers (FRAME_DISPLAY_INFO (f),
+                                    extra_keyboard_modifiers);
+      modifiers = state;
+
+      /* This will have to go some day...  */
+
+      /* make_lispy_event turns chars into control chars.
+         Don't do it here because XLookupString is too eager.  */
+      state &= ~GDK_CONTROL_MASK;
+      state &= ~(GDK_META_MASK
+                | GDK_SUPER_MASK | GDK_HYPER_MASK | GDK_MOD1_MASK);
+
+      nbytes = event->key.length;
+      if (nbytes > copy_bufsiz)
+       nbytes = copy_bufsiz;
+      memcpy (copy_bufptr, event->key.string, nbytes);
+
+      keysym = event->key.keyval;
+      orig_keysym = keysym;
+
+      /* Common for all keysym input events.  */
+      XSETFRAME (inev.ie.frame_or_window, f);
+      inev.ie.modifiers =
+       pgtk_gtk_to_emacs_modifiers (FRAME_DISPLAY_INFO (f), modifiers);
+      inev.ie.timestamp = event->key.time;
+
+      /* First deal with keysyms which have defined
+         translations to characters.  */
+      if (keysym >= 32 && keysym < 128)
+       /* Avoid explicitly decoding each ASCII character.  */
+       {
+         inev.ie.kind = ASCII_KEYSTROKE_EVENT;
+         inev.ie.code = keysym;
+         goto done;
+       }
+
+      /* Keysyms directly mapped to Unicode characters.  */
+      if (keysym >= 0x01000000 && keysym <= 0x0110FFFF)
+       {
+         if (keysym < 0x01000080)
+           inev.ie.kind = ASCII_KEYSTROKE_EVENT;
+         else
+           inev.ie.kind = MULTIBYTE_CHAR_KEYSTROKE_EVENT;
+         inev.ie.code = keysym & 0xFFFFFF;
+         goto done;
+       }
+
+      /* Now non-ASCII.  */
+      if (HASH_TABLE_P (Vpgtk_keysym_table)
+         && (c = Fgethash (make_fixnum (keysym),
+                           Vpgtk_keysym_table, Qnil), FIXNATP (c)))
+       {
+         inev.ie.kind = (SINGLE_BYTE_CHAR_P (XFIXNAT (c))
+                         ? ASCII_KEYSTROKE_EVENT
+                         : MULTIBYTE_CHAR_KEYSTROKE_EVENT);
+         inev.ie.code = XFIXNAT (c);
+         goto done;
+       }
+
+      /* Random non-modifier sorts of keysyms.  */
+      if (((keysym >= GDK_KEY_BackSpace && keysym <= GDK_KEY_Escape)
+          || keysym == GDK_KEY_Delete
+#ifdef GDK_KEY_ISO_Left_Tab
+          || (keysym >= GDK_KEY_ISO_Left_Tab && keysym <= GDK_KEY_ISO_Enter)
+#endif
+          || IsCursorKey (keysym)      /* 0xff50 <= x < 0xff60 */
+          || IsMiscFunctionKey (keysym)        /* 0xff60 <= x < VARIES */
+#ifdef HPUX
+          /* This recognizes the "extended function
+             keys".  It seems there's no cleaner way.
+             Test IsModifierKey to avoid handling
+             mode_switch incorrectly.  */
+          || (GDK_KEY_Select <= keysym && keysym < GDK_KEY_KP_Space)
+#endif
+#ifdef GDK_KEY_dead_circumflex
+          || orig_keysym == GDK_KEY_dead_circumflex
+#endif
+#ifdef GDK_KEY_dead_grave
+          || orig_keysym == GDK_KEY_dead_grave
+#endif
+#ifdef GDK_KEY_dead_tilde
+          || orig_keysym == GDK_KEY_dead_tilde
+#endif
+#ifdef GDK_KEY_dead_diaeresis
+          || orig_keysym == GDK_KEY_dead_diaeresis
+#endif
+#ifdef GDK_KEY_dead_macron
+          || orig_keysym == GDK_KEY_dead_macron
+#endif
+#ifdef GDK_KEY_dead_degree
+          || orig_keysym == GDK_KEY_dead_degree
+#endif
+#ifdef GDK_KEY_dead_acute
+          || orig_keysym == GDK_KEY_dead_acute
+#endif
+#ifdef GDK_KEY_dead_cedilla
+          || orig_keysym == GDK_KEY_dead_cedilla
+#endif
+#ifdef GDK_KEY_dead_breve
+          || orig_keysym == GDK_KEY_dead_breve
+#endif
+#ifdef GDK_KEY_dead_ogonek
+          || orig_keysym == GDK_KEY_dead_ogonek
+#endif
+#ifdef GDK_KEY_dead_caron
+          || orig_keysym == GDK_KEY_dead_caron
+#endif
+#ifdef GDK_KEY_dead_doubleacute
+          || orig_keysym == GDK_KEY_dead_doubleacute
+#endif
+#ifdef GDK_KEY_dead_abovedot
+          || orig_keysym == GDK_KEY_dead_abovedot
+#endif
+          || IsKeypadKey (keysym)      /* 0xff80 <= x < 0xffbe */
+          || IsFunctionKey (keysym)    /* 0xffbe <= x < 0xffe1 */
+          /* Any "vendor-specific" key is ok.  */
+          || (orig_keysym & (1 << 28))
+          || (keysym != GDK_KEY_VoidSymbol && nbytes == 0))
+         && !(event->key.is_modifier
+              /* Gtk's modifier keys are different from Xlib's ones.
+               * I need to exclude them.
+               */
+              || IsModifierKey (orig_keysym)
+              /* The symbols from GDK_KEY_ISO_Lock
+                 to GDK_KEY_ISO_Last_Group_Lock
+                 don't have real modifiers but
+                 should be treated similarly to
+                 Mode_switch by Emacs. */
+#if defined GDK_KEY_ISO_Lock && defined GDK_KEY_ISO_Last_Group_Lock
+              || (GDK_KEY_ISO_Lock <= orig_keysym
+                  && orig_keysym <= GDK_KEY_ISO_Last_Group_Lock)
+#endif
+         ))
+       {
+         STORE_KEYSYM_FOR_DEBUG (keysym);
+         /* make_lispy_event will convert this to a symbolic
+            key.  */
+         inev.ie.kind = NON_ASCII_KEYSTROKE_EVENT;
+         inev.ie.code = keysym;
+         goto done;
+       }
+
+      {                                /* Raw bytes, not keysym.  */
+       ptrdiff_t i;
+       int nchars, len;
+
+       for (i = 0, nchars = 0; i < nbytes; i++)
+         {
+           if (ASCII_CHAR_P (copy_bufptr[i]))
+             nchars++;
+           STORE_KEYSYM_FOR_DEBUG (copy_bufptr[i]);
+         }
+
+       if (nchars < nbytes)
+         {
+           /* Decode the input data.  */
+
+           /* The input should be decoded with locale `coding_system'. */
+           if (!NILP (Vlocale_coding_system))
+             coding_system = Vlocale_coding_system;
+           setup_coding_system (coding_system, &coding);
+           coding.src_multibyte = false;
+           coding.dst_multibyte = true;
+           /* The input is converted to events, thus we can't
+              handle composition.  Anyway, there's no XIM that
+              gives us composition information.  */
+           coding.common_flags &= ~CODING_ANNOTATION_MASK;
+
+           SAFE_NALLOCA (coding.destination, MAX_MULTIBYTE_LENGTH, nbytes);
+           coding.dst_bytes = MAX_MULTIBYTE_LENGTH * nbytes;
+           coding.mode |= CODING_MODE_LAST_BLOCK;
+           decode_coding_c_string (&coding, copy_bufptr, nbytes, Qnil);
+           nbytes = coding.produced;
+           nchars = coding.produced_char;
+           copy_bufptr = coding.destination;
+         }
+
+       /* Convert the input data to a sequence of
+          character events.  */
+       for (i = 0; i < nbytes; i += len)
+         {
+           int ch;
+           if (nchars == nbytes)
+             ch = copy_bufptr[i], len = 1;
+           else
+             ch = string_char_and_length (copy_bufptr + i, &len);
+           inev.ie.kind = (SINGLE_BYTE_CHAR_P (ch)
+                           ? ASCII_KEYSTROKE_EVENT
+                           : MULTIBYTE_CHAR_KEYSTROKE_EVENT);
+           inev.ie.code = ch;
+           evq_enqueue (&inev);
+         }
+
+       /* count += nchars; */
+
+       inev.ie.kind = NO_EVENT;        /* Already stored above.  */
+
+       if (keysym == GDK_KEY_VoidSymbol)
+         goto done;
+      }
+    }
+
+done:
+  if (inev.ie.kind != NO_EVENT)
+    {
+      XSETFRAME (inev.ie.frame_or_window, f);
+      evq_enqueue (&inev);
+      /* count++; */
+    }
+
+  SAFE_FREE ();
+
+  return TRUE;
+}
+
+static gboolean
+key_release_event (GtkWidget *widget,
+                  GdkEvent *event,
+                  gpointer *user_data)
+{
+  return TRUE;
+}
+
+static gboolean
+configure_event (GtkWidget *widget,
+                GdkEvent *event,
+                gpointer *user_data)
+{
+  struct frame *f = pgtk_any_window_to_frame (event->configure.window);
+  if (f && widget == FRAME_GTK_OUTER_WIDGET (f))
+    {
+      if (any_help_event_p)
+       {
+         Lisp_Object frame;
+         if (f)
+           XSETFRAME (frame, f);
+         else
+           frame = Qnil;
+         help_echo_string = Qnil;
+         gen_help_event (Qnil, frame, Qnil, Qnil, 0);
+       }
+    }
+  return FALSE;
+}
+
+static gboolean
+map_event (GtkWidget *widget,
+          GdkEvent *event,
+          gpointer *user_data)
+{
+  struct frame *f = pgtk_any_window_to_frame (event->any.window);
+  union buffered_input_event inev;
+
+  EVENT_INIT (inev.ie);
+  inev.ie.kind = NO_EVENT;
+  inev.ie.arg = Qnil;
+
+  if (f)
+    {
+      bool iconified = FRAME_ICONIFIED_P (f);
+
+      /* Check if fullscreen was specified before we where mapped the
+         first time, i.e. from the command line.  */
+      if (!FRAME_X_OUTPUT (f)->has_been_visible)
+       {
+         set_fullscreen_state (f);
+       }
+
+      if (!iconified)
+       {
+         /* The `z-group' is reset every time a frame becomes
+            invisible.  Handle this here.  */
+         if (FRAME_Z_GROUP (f) == z_group_above)
+           x_set_z_group (f, Qabove, Qnil);
+         else if (FRAME_Z_GROUP (f) == z_group_below)
+           x_set_z_group (f, Qbelow, Qnil);
+       }
+
+      SET_FRAME_VISIBLE (f, 1);
+      SET_FRAME_ICONIFIED (f, false);
+      FRAME_X_OUTPUT (f)->has_been_visible = true;
+
+      if (iconified)
+       {
+         inev.ie.kind = DEICONIFY_EVENT;
+         XSETFRAME (inev.ie.frame_or_window, f);
+       }
+    }
+
+  if (inev.ie.kind != NO_EVENT)
+    evq_enqueue (&inev);
+  return FALSE;
+}
+
+static gboolean
+window_state_event (GtkWidget *widget,
+                   GdkEvent *event,
+                   gpointer *user_data)
+{
+  struct frame *f = pgtk_any_window_to_frame (event->window_state.window);
+  union buffered_input_event inev;
+
+  EVENT_INIT (inev.ie);
+  inev.ie.kind = NO_EVENT;
+  inev.ie.arg = Qnil;
+
+  if (f)
+    {
+      if (event->window_state.new_window_state & GDK_WINDOW_STATE_FOCUSED)
+       {
+         if (FRAME_ICONIFIED_P (f))
+           {
+             /* Gnome shell does not iconify us when C-z is pressed.
+                It hides the frame.  So if our state says we aren't
+                hidden anymore, treat it as deiconified.  */
+             SET_FRAME_VISIBLE (f, 1);
+             SET_FRAME_ICONIFIED (f, false);
+             FRAME_X_OUTPUT (f)->has_been_visible = true;
+             inev.ie.kind = DEICONIFY_EVENT;
+             XSETFRAME (inev.ie.frame_or_window, f);
+           }
+       }
+    }
+
+  if (inev.ie.kind != NO_EVENT)
+    evq_enqueue (&inev);
+  return FALSE;
+}
+
+static gboolean
+delete_event (GtkWidget *widget,
+             GdkEvent *event, gpointer *user_data)
+{
+  struct frame *f = pgtk_any_window_to_frame (event->any.window);
+  union buffered_input_event inev;
+
+  EVENT_INIT (inev.ie);
+  inev.ie.kind = NO_EVENT;
+  inev.ie.arg = Qnil;
+
+  if (f)
+    {
+      inev.ie.kind = DELETE_WINDOW_EVENT;
+      XSETFRAME (inev.ie.frame_or_window, f);
+    }
+
+  if (inev.ie.kind != NO_EVENT)
+    evq_enqueue (&inev);
+  return TRUE;
+}
+
+/* The focus may have changed.  Figure out if it is a real focus change,
+   by checking both FocusIn/Out and Enter/LeaveNotify events.
+
+   Returns FOCUS_IN_EVENT event in *BUFP. */
+
+/* Handle FocusIn and FocusOut state changes for FRAME.
+   If FRAME has focus and there exists more than one frame, puts
+   a FOCUS_IN_EVENT into *BUFP.  */
+
+static void
+x_focus_changed (gboolean is_enter, int state,
+                struct pgtk_display_info *dpyinfo, struct frame *frame,
+                union buffered_input_event *bufp)
+{
+  if (is_enter)
+    {
+      if (dpyinfo->x_focus_event_frame != frame)
+       {
+         x_new_focus_frame (dpyinfo, frame);
+         dpyinfo->x_focus_event_frame = frame;
+
+         /* Don't stop displaying the initial startup message
+            for a switch-frame event we don't need.  */
+         /* When run as a daemon, Vterminal_frame is always NIL.  */
+         bufp->ie.arg = (((NILP (Vterminal_frame)
+                           || !FRAME_PGTK_P (XFRAME (Vterminal_frame))
+                           || EQ (Fdaemonp (), Qt))
+                          && CONSP (Vframe_list)
+                          && !NILP (XCDR (Vframe_list))) ? Qt : Qnil);
+         bufp->ie.kind = FOCUS_IN_EVENT;
+         XSETFRAME (bufp->ie.frame_or_window, frame);
+       }
+
+      frame->output_data.pgtk->focus_state |= state;
+
+    }
+  else
+    {
+      frame->output_data.pgtk->focus_state &= ~state;
+
+      if (dpyinfo->x_focus_event_frame == frame)
+        {
+          dpyinfo->x_focus_event_frame = 0;
+          x_new_focus_frame (dpyinfo, 0);
+
+          bufp->ie.kind = FOCUS_OUT_EVENT;
+          XSETFRAME (bufp->ie.frame_or_window, frame);
+        }
+
+      if (frame->pointer_invisible)
+       XTtoggle_invisible_pointer (frame, false);
+    }
+}
+
+static gboolean
+enter_notify_event (GtkWidget *widget, GdkEvent *event,
+                   gpointer *user_data)
+{
+  union buffered_input_event inev;
+  struct frame *frame =
+    pgtk_any_window_to_frame (gtk_widget_get_window (widget));
+  if (frame == NULL)
+    return FALSE;
+  struct pgtk_display_info *dpyinfo = FRAME_DISPLAY_INFO (frame);
+  struct frame *focus_frame = dpyinfo->x_focus_frame;
+  int focus_state
+    = focus_frame ? focus_frame->output_data.pgtk->focus_state : 0;
+
+  EVENT_INIT (inev.ie);
+  inev.ie.kind = NO_EVENT;
+  inev.ie.arg = Qnil;
+
+  if (event->crossing.detail != GDK_NOTIFY_INFERIOR
+      && event->crossing.focus && !(focus_state & FOCUS_EXPLICIT))
+    x_focus_changed (TRUE, FOCUS_IMPLICIT, dpyinfo, frame, &inev);
+  if (inev.ie.kind != NO_EVENT)
+    evq_enqueue (&inev);
+  return TRUE;
+}
+
+static gboolean
+leave_notify_event (GtkWidget *widget, GdkEvent *event,
+                   gpointer *user_data)
+{
+  union buffered_input_event inev;
+  struct frame *frame =
+    pgtk_any_window_to_frame (gtk_widget_get_window (widget));
+  if (frame == NULL)
+    return FALSE;
+  struct pgtk_display_info *dpyinfo = FRAME_DISPLAY_INFO (frame);
+  struct frame *focus_frame = dpyinfo->x_focus_frame;
+  int focus_state
+    = focus_frame ? focus_frame->output_data.pgtk->focus_state : 0;
+  Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (frame);
+
+  if (frame == hlinfo->mouse_face_mouse_frame)
+    {
+      /* If we move outside the frame, then we're
+        certainly no longer on any text in the frame.  */
+      clear_mouse_face (hlinfo);
+      hlinfo->mouse_face_mouse_frame = 0;
+    }
+
+  EVENT_INIT (inev.ie);
+  inev.ie.kind = NO_EVENT;
+  inev.ie.arg = Qnil;
+
+  if (event->crossing.detail != GDK_NOTIFY_INFERIOR
+      && event->crossing.focus && !(focus_state & FOCUS_EXPLICIT))
+    x_focus_changed (FALSE, FOCUS_IMPLICIT, dpyinfo, frame, &inev);
+
+  if (frame)
+    {
+      if (any_help_event_p)
+       {
+         Lisp_Object frame_obj;
+         XSETFRAME (frame_obj, frame);
+         help_echo_string = Qnil;
+         gen_help_event (Qnil, frame_obj, Qnil, Qnil, 0);
+       }
+    }
+
+  if (inev.ie.kind != NO_EVENT)
+    evq_enqueue (&inev);
+  return TRUE;
+}
+
+static gboolean
+focus_in_event (GtkWidget * widget, GdkEvent * event, gpointer * user_data)
+{
+  union buffered_input_event inev;
+  struct frame *frame =
+    pgtk_any_window_to_frame (gtk_widget_get_window (widget));
+
+  if (frame == NULL)
+    return TRUE;
+
+  EVENT_INIT (inev.ie);
+  inev.ie.kind = NO_EVENT;
+  inev.ie.arg = Qnil;
+
+  x_focus_changed (TRUE, FOCUS_EXPLICIT,
+                  FRAME_DISPLAY_INFO (frame), frame, &inev);
+  if (inev.ie.kind != NO_EVENT)
+    evq_enqueue (&inev);
+
+  pgtk_im_focus_in (frame);
+
+  return TRUE;
+}
+
+static gboolean
+focus_out_event (GtkWidget * widget, GdkEvent * event, gpointer * user_data)
+{
+  union buffered_input_event inev;
+  struct frame *frame =
+    pgtk_any_window_to_frame (gtk_widget_get_window (widget));
+
+  if (frame == NULL)
+    return TRUE;
+
+  EVENT_INIT (inev.ie);
+  inev.ie.kind = NO_EVENT;
+  inev.ie.arg = Qnil;
+
+  x_focus_changed (FALSE, FOCUS_EXPLICIT,
+                  FRAME_DISPLAY_INFO (frame), frame, &inev);
+  if (inev.ie.kind != NO_EVENT)
+    evq_enqueue (&inev);
+
+  pgtk_im_focus_out (frame);
+
+  return TRUE;
+}
+
+/* Function to report a mouse movement to the mainstream Emacs code.
+   The input handler calls this.
+
+   We have received a mouse movement event, which is given in *event.
+   If the mouse is over a different glyph than it was last time, tell
+   the mainstream emacs code by setting mouse_moved.  If not, ask for
+   another motion event, so we can check again the next time it moves.  */
+
+static bool
+note_mouse_movement (struct frame *frame, const GdkEventMotion * event)
+{
+  XRectangle *r;
+  struct pgtk_display_info *dpyinfo;
+
+  if (!FRAME_X_OUTPUT (frame))
+    return false;
+
+  dpyinfo = FRAME_DISPLAY_INFO (frame);
+  dpyinfo->last_mouse_movement_time = event->time;
+  dpyinfo->last_mouse_motion_frame = frame;
+  dpyinfo->last_mouse_motion_x = event->x;
+  dpyinfo->last_mouse_motion_y = event->y;
+
+  if (event->window != gtk_widget_get_window (FRAME_GTK_WIDGET (frame)))
+    {
+      frame->mouse_moved = true;
+      dpyinfo->last_mouse_scroll_bar = NULL;
+      note_mouse_highlight (frame, -1, -1);
+      dpyinfo->last_mouse_glyph_frame = NULL;
+      return true;
+    }
+
+
+  /* Has the mouse moved off the glyph it was on at the last sighting?  */
+  r = &dpyinfo->last_mouse_glyph;
+  if (frame != dpyinfo->last_mouse_glyph_frame
+      || event->x < r->x || event->x >= r->x + r->width
+      || event->y < r->y || event->y >= r->y + r->height)
+    {
+      frame->mouse_moved = true;
+      dpyinfo->last_mouse_scroll_bar = NULL;
+      note_mouse_highlight (frame, event->x, event->y);
+      /* Remember which glyph we're now on.  */
+      remember_mouse_glyph (frame, event->x, event->y, r);
+      dpyinfo->last_mouse_glyph_frame = frame;
+      return true;
+    }
+
+  return false;
+}
+
+static gboolean
+motion_notify_event (GtkWidget * widget, GdkEvent * event,
+                    gpointer * user_data)
+{
+  union buffered_input_event inev;
+  struct frame *f, *frame;
+  struct pgtk_display_info *dpyinfo;
+  Mouse_HLInfo *hlinfo;
+
+  /* This is needed to make pointer visible when motion_notify event */
+  pending_signals = true;
+
+  EVENT_INIT (inev.ie);
+  inev.ie.kind = NO_EVENT;
+  inev.ie.arg = Qnil;
+
+  previous_help_echo_string = help_echo_string;
+  help_echo_string = Qnil;
+
+  frame = pgtk_any_window_to_frame (gtk_widget_get_window (widget));
+  dpyinfo = FRAME_DISPLAY_INFO (frame);
+  f = (gui_mouse_grabbed (dpyinfo) ? dpyinfo->last_mouse_frame
+       : pgtk_any_window_to_frame (gtk_widget_get_window (widget)));
+  hlinfo = MOUSE_HL_INFO (f);
+
+  if (hlinfo->mouse_face_hidden)
+    {
+      hlinfo->mouse_face_hidden = false;
+      clear_mouse_face (hlinfo);
+    }
+
+  if (f && xg_event_is_for_scrollbar (f, event))
+    f = 0;
+  if (f)
+    {
+      /* Maybe generate a SELECT_WINDOW_EVENT for
+         `mouse-autoselect-window' but don't let popup menus
+         interfere with this (Bug#1261).  */
+      if (!NILP (Vmouse_autoselect_window)
+         /* Don't switch if we're currently in the minibuffer.
+            This tries to work around problems where the
+            minibuffer gets unselected unexpectedly, and where
+            you then have to move your mouse all the way down to
+            the minibuffer to select it.  */
+         && !MINI_WINDOW_P (XWINDOW (selected_window))
+         /* With `focus-follows-mouse' non-nil create an event
+            also when the target window is on another frame.  */
+         && (f == XFRAME (selected_frame) || !NILP (focus_follows_mouse)))
+       {
+         static Lisp_Object last_mouse_window;
+         Lisp_Object window = window_from_coordinates
+           (f, event->motion.x, event->motion.y, 0, false, false);
+
+         /* A window will be autoselected only when it is not
+            selected now and the last mouse movement event was
+            not in it.  The remainder of the code is a bit vague
+            wrt what a "window" is.  For immediate autoselection,
+            the window is usually the entire window but for GTK
+            where the scroll bars don't count.  For delayed
+            autoselection the window is usually the window's text
+            area including the margins.  */
+         if (WINDOWP (window)
+             && !EQ (window, last_mouse_window)
+             && !EQ (window, selected_window))
+           {
+             inev.ie.kind = SELECT_WINDOW_EVENT;
+             inev.ie.frame_or_window = window;
+           }
+
+         /* Remember the last window where we saw the mouse.  */
+         last_mouse_window = window;
+       }
+
+      if (!note_mouse_movement (f, &event->motion))
+       help_echo_string = previous_help_echo_string;
+    }
+  else
+    {
+      /* If we move outside the frame, then we're
+         certainly no longer on any text in the frame.  */
+      clear_mouse_face (hlinfo);
+    }
+
+  /* If the contents of the global variable help_echo_string
+     has changed, generate a HELP_EVENT.  */
+  int do_help = 0;
+  if (!NILP (help_echo_string) || !NILP (previous_help_echo_string))
+    do_help = 1;
+
+  if (inev.ie.kind != NO_EVENT)
+    evq_enqueue (&inev);
+
+  if (do_help > 0)
+    {
+      Lisp_Object frame;
+
+      if (f)
+       XSETFRAME (frame, f);
+      else
+       frame = Qnil;
+
+      any_help_event_p = true;
+      gen_help_event (help_echo_string, frame, help_echo_window,
+                     help_echo_object, help_echo_pos);
+    }
+
+  return TRUE;
+}
+
+/* Mouse clicks and mouse movement.  Rah.
+
+   Formerly, we used PointerMotionHintMask (in standard_event_mask)
+   so that we would have to call XQueryPointer after each MotionNotify
+   event to ask for another such event.  However, this made mouse tracking
+   slow, and there was a bug that made it eventually stop.
+
+   Simply asking for MotionNotify all the time seems to work better.
+
+   In order to avoid asking for motion events and then throwing most
+   of them away or busy-polling the server for mouse positions, we ask
+   the server for pointer motion hints.  This means that we get only
+   one event per group of mouse movements.  "Groups" are delimited by
+   other kinds of events (focus changes and button clicks, for
+   example), or by XQueryPointer calls; when one of these happens, we
+   get another MotionNotify event the next time the mouse moves.  This
+   is at least as efficient as getting motion events when mouse
+   tracking is on, and I suspect only negligibly worse when tracking
+   is off.  */
+
+/* Prepare a mouse-event in *RESULT for placement in the input queue.
+
+   If the event is a button press, then note that we have grabbed
+   the mouse.  */
+
+static Lisp_Object
+construct_mouse_click (struct input_event *result,
+                      const GdkEventButton * event, struct frame *f)
+{
+  /* Make the event type NO_EVENT; we'll change that when we decide
+     otherwise.  */
+  result->kind = MOUSE_CLICK_EVENT;
+  result->code = event->button - 1;
+  result->timestamp = event->time;
+  result->modifiers =
+    (pgtk_gtk_to_emacs_modifiers (FRAME_DISPLAY_INFO (f), event->state) |
+     (event->type == GDK_BUTTON_RELEASE ? up_modifier : down_modifier));
+
+  XSETINT (result->x, event->x);
+  XSETINT (result->y, event->y);
+  XSETFRAME (result->frame_or_window, f);
+  result->arg = Qnil;
+  return Qnil;
+}
+
+static gboolean
+button_event (GtkWidget * widget, GdkEvent * event, gpointer * user_data)
+{
+  union buffered_input_event inev;
+  struct frame *f, *frame;
+  struct pgtk_display_info *dpyinfo;
+
+  /* If we decide we want to generate an event to be seen
+     by the rest of Emacs, we put it here.  */
+  bool tab_bar_p = false;
+  bool tool_bar_p = false;
+  Lisp_Object tab_bar_arg = Qnil;
+
+  EVENT_INIT (inev.ie);
+  inev.ie.kind = NO_EVENT;
+  inev.ie.arg = Qnil;
+
+  /* ignore double click and triple click. */
+  if (event->type != GDK_BUTTON_PRESS && event->type != GDK_BUTTON_RELEASE)
+    return TRUE;
+
+  frame = pgtk_any_window_to_frame (gtk_widget_get_window (widget));
+  dpyinfo = FRAME_DISPLAY_INFO (frame);
+
+  dpyinfo->last_mouse_glyph_frame = NULL;
+#if 0
+  x_display_set_last_user_time (dpyinfo, event->button.time);
+#endif
+
+  if (gui_mouse_grabbed (dpyinfo))
+    f = dpyinfo->last_mouse_frame;
+  else
+    {
+      f = pgtk_any_window_to_frame (gtk_widget_get_window (widget));
+
+      if (f && event->button.type == GDK_BUTTON_PRESS
+         && !FRAME_NO_ACCEPT_FOCUS (f))
+       {
+         /* When clicking into a child frame or when clicking
+            into a parent frame with the child frame selected and
+            `no-accept-focus' is not set, select the clicked
+            frame.  */
+         struct frame *hf = dpyinfo->highlight_frame;
+
+         if (FRAME_PARENT_FRAME (f) || (hf && frame_ancestor_p (f, hf)))
+           {
+             block_input ();
+             gtk_widget_grab_focus (FRAME_GTK_WIDGET (f));
+
+             if (FRAME_GTK_OUTER_WIDGET (f))
+               gtk_window_present (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)));
+             unblock_input ();
+           }
+       }
+    }
+
+  /* xg_event_is_for_scrollbar() doesn't work correctly on sway, and
+   * we shouldn't need it.
+   */
+#if 0
+  if (f && xg_event_is_for_scrollbar (f, event))
+    f = 0;
+#endif
+
+  if (f)
+    {
+      /* Is this in the tab-bar?  */
+      if (WINDOWP (f->tab_bar_window)
+         && WINDOW_TOTAL_LINES (XWINDOW (f->tab_bar_window)))
+       {
+         Lisp_Object window;
+         int x = event->button.x;
+         int y = event->button.y;
+
+         window = window_from_coordinates (f, x, y, 0, true, true);
+         tab_bar_p = EQ (window, f->tab_bar_window);
+
+         if (tab_bar_p)
+           tab_bar_arg = handle_tab_bar_click
+             (f, x, y, event->type == GDK_BUTTON_PRESS,
+              pgtk_gtk_to_emacs_modifiers (dpyinfo, event->button.state));
+       }
+    }
+
+  if (f)
+    {
+      if (!(tab_bar_p && NILP (tab_bar_arg)) && !tool_bar_p)
+       {
+         if (ignore_next_mouse_click_timeout)
+           {
+             if (event->type == GDK_BUTTON_PRESS
+                 && event->button.time > ignore_next_mouse_click_timeout)
+               {
+                 ignore_next_mouse_click_timeout = 0;
+                 construct_mouse_click (&inev.ie, &event->button, f);
+               }
+             if (event->type == GDK_BUTTON_RELEASE)
+               ignore_next_mouse_click_timeout = 0;
+           }
+         else
+           construct_mouse_click (&inev.ie, &event->button, f);
+
+         if (!NILP (tab_bar_arg))
+           inev.ie.arg = tab_bar_arg;
+       }
+#if 0
+      if (FRAME_X_EMBEDDED_P (f))
+       xembed_send_message (f, event->button.time,
+                            XEMBED_REQUEST_FOCUS, 0, 0, 0);
+#endif
+    }
+
+  if (event->type == GDK_BUTTON_PRESS)
+    {
+      dpyinfo->grabbed |= (1 << event->button.button);
+      dpyinfo->last_mouse_frame = f;
+
+      if (dpyinfo->last_click_event != NULL)
+       gdk_event_free (dpyinfo->last_click_event);
+      dpyinfo->last_click_event = gdk_event_copy (event);
+    }
+  else
+    dpyinfo->grabbed &= ~(1 << event->button.button);
+
+  /* Ignore any mouse motion that happened before this event;
+     any subsequent mouse-movement Emacs events should reflect
+     only motion after the ButtonPress/Release.  */
+  if (f != 0)
+    f->mouse_moved = false;
+
+  if (inev.ie.kind != NO_EVENT)
+    evq_enqueue (&inev);
+  return TRUE;
+}
+
+static gboolean
+scroll_event (GtkWidget * widget, GdkEvent * event, gpointer * user_data)
+{
+  union buffered_input_event inev;
+  struct frame *f, *frame;
+  struct pgtk_display_info *dpyinfo;
+  GdkScrollDirection dir;
+  double delta_x, delta_y;
+
+  EVENT_INIT (inev.ie);
+  inev.ie.kind = NO_EVENT;
+  inev.ie.arg = Qnil;
+
+  frame = pgtk_any_window_to_frame (gtk_widget_get_window (widget));
+  dpyinfo = FRAME_DISPLAY_INFO (frame);
+
+  if (gui_mouse_grabbed (dpyinfo))
+    f = dpyinfo->last_mouse_frame;
+  else
+    f = pgtk_any_window_to_frame (gtk_widget_get_window (widget));
+
+  inev.ie.kind = NO_EVENT;
+  inev.ie.timestamp = event->scroll.time;
+  inev.ie.modifiers =
+    pgtk_gtk_to_emacs_modifiers (FRAME_DISPLAY_INFO (f), event->scroll.state);
+  XSETINT (inev.ie.x, event->scroll.x);
+  XSETINT (inev.ie.y, event->scroll.y);
+  XSETFRAME (inev.ie.frame_or_window, f);
+  inev.ie.arg = Qnil;
+
+  if (gdk_event_is_scroll_stop_event (event))
+    {
+      inev.ie.kind = TOUCH_END_EVENT;
+      evq_enqueue (&inev);
+      return TRUE;
+    }
+
+  if (gdk_event_get_scroll_direction (event, &dir))
+    {
+      switch (dir)
+       {
+       case GDK_SCROLL_UP:
+         inev.ie.kind = WHEEL_EVENT;
+         inev.ie.modifiers |= up_modifier;
+         break;
+       case GDK_SCROLL_DOWN:
+         inev.ie.kind = WHEEL_EVENT;
+         inev.ie.modifiers |= down_modifier;
+         break;
+       case GDK_SCROLL_LEFT:
+         inev.ie.kind = HORIZ_WHEEL_EVENT;
+         inev.ie.modifiers |= up_modifier;
+         break;
+       case GDK_SCROLL_RIGHT:
+         inev.ie.kind = HORIZ_WHEEL_EVENT;
+         inev.ie.modifiers |= down_modifier;
+         break;
+       case GDK_SCROLL_SMOOTH:         /* shut up warning */
+         break;
+       }
+    }
+  else if (gdk_event_get_scroll_deltas (event, &delta_x, &delta_y))
+    {
+      if (!mwheel_coalesce_scroll_events)
+       {
+         inev.ie.kind = ((fabs (delta_x) > fabs (delta_y))
+                         ? HORIZ_WHEEL_EVENT
+                         : WHEEL_EVENT);
+         inev.ie.modifiers |= (inev.ie.kind == HORIZ_WHEEL_EVENT
+                               ? (delta_x >= 0 ? up_modifier : down_modifier)
+                               : (delta_y >= 0 ? down_modifier : up_modifier));
+         inev.ie.arg = list3 (Qnil, make_float (-delta_x * 100),
+                              make_float (-delta_y * 100));
+       }
+      else
+       {
+         dpyinfo->scroll.acc_x += delta_x;
+         dpyinfo->scroll.acc_y += delta_y;
+         if (dpyinfo->scroll.acc_y >= dpyinfo->scroll.y_per_line)
+           {
+             int nlines = dpyinfo->scroll.acc_y / dpyinfo->scroll.y_per_line;
+             inev.ie.kind = WHEEL_EVENT;
+             inev.ie.modifiers |= down_modifier;
+             inev.ie.arg = list3 (make_fixnum (nlines),
+                                  make_float (-dpyinfo->scroll.acc_x * 100),
+                                  make_float (-dpyinfo->scroll.acc_y * 100));
+             dpyinfo->scroll.acc_y -= dpyinfo->scroll.y_per_line * nlines;
+           }
+         else if (dpyinfo->scroll.acc_y <= -dpyinfo->scroll.y_per_line)
+           {
+             int nlines = -dpyinfo->scroll.acc_y / dpyinfo->scroll.y_per_line;
+             inev.ie.kind = WHEEL_EVENT;
+             inev.ie.modifiers |= up_modifier;
+             inev.ie.arg = list3 (make_fixnum (nlines),
+                                  make_float (-dpyinfo->scroll.acc_x * 100),
+                                  make_float (-dpyinfo->scroll.acc_y * 100));
+
+             dpyinfo->scroll.acc_y -= -dpyinfo->scroll.y_per_line * nlines;
+           }
+         else if (dpyinfo->scroll.acc_x >= dpyinfo->scroll.x_per_char
+                  || !mwheel_coalesce_scroll_events)
+           {
+             int nchars = dpyinfo->scroll.acc_x / dpyinfo->scroll.x_per_char;
+             inev.ie.kind = HORIZ_WHEEL_EVENT;
+             inev.ie.modifiers |= up_modifier;
+             inev.ie.arg = list3 (make_fixnum (nchars),
+                                  make_float (-dpyinfo->scroll.acc_x * 100),
+                                  make_float (-dpyinfo->scroll.acc_y * 100));
+
+             dpyinfo->scroll.acc_x -= dpyinfo->scroll.x_per_char * nchars;
+           }
+         else if (dpyinfo->scroll.acc_x <= -dpyinfo->scroll.x_per_char)
+           {
+             int nchars = -dpyinfo->scroll.acc_x / dpyinfo->scroll.x_per_char;
+             inev.ie.kind = HORIZ_WHEEL_EVENT;
+             inev.ie.modifiers |= down_modifier;
+             inev.ie.arg = list3 (make_fixnum (nchars),
+                                  make_float (-dpyinfo->scroll.acc_x * 100),
+                                  make_float (-dpyinfo->scroll.acc_y * 100));
+
+             dpyinfo->scroll.acc_x -= -dpyinfo->scroll.x_per_char * nchars;
+           }
+       }
+    }
+
+  if (inev.ie.kind != NO_EVENT)
+    evq_enqueue (&inev);
+  return TRUE;
+}
+
+static void
+drag_data_received (GtkWidget * widget, GdkDragContext * context,
+                   gint x, gint y,
+                   GtkSelectionData * data,
+                   guint info, guint time, gpointer user_data)
+{
+  struct frame *f = pgtk_any_window_to_frame (gtk_widget_get_window (widget));
+  gchar **uris = gtk_selection_data_get_uris (data);
+
+  if (uris != NULL)
+    {
+      for (int i = 0; uris[i] != NULL; i++)
+       {
+         union buffered_input_event inev;
+         Lisp_Object arg = Qnil;
+
+         EVENT_INIT (inev.ie);
+         inev.ie.kind = NO_EVENT;
+         inev.ie.arg = Qnil;
+
+         arg = list2 (Qurl, build_string (uris[i]));
+
+         inev.ie.kind = DRAG_N_DROP_EVENT;
+         inev.ie.modifiers = 0;
+         XSETINT (inev.ie.x, x);
+         XSETINT (inev.ie.y, y);
+         XSETFRAME (inev.ie.frame_or_window, f);
+         inev.ie.arg = arg;
+         inev.ie.timestamp = 0;
+
+         evq_enqueue (&inev);
+       }
+    }
+
+  gtk_drag_finish (context, TRUE, FALSE, time);
+}
+
+void
+pgtk_set_event_handler (struct frame *f)
+{
+  if (f->tooltip)
+    {
+      g_signal_connect (G_OBJECT (FRAME_GTK_WIDGET (f)), "draw",
+                       G_CALLBACK (pgtk_handle_draw), NULL);
+      return;
+    }
+
+  gtk_drag_dest_set (FRAME_GTK_WIDGET (f), GTK_DEST_DEFAULT_ALL, NULL, 0,
+                    GDK_ACTION_COPY);
+  gtk_drag_dest_add_uri_targets (FRAME_GTK_WIDGET (f));
+
+  if (FRAME_GTK_OUTER_WIDGET (f))
+    {
+      g_signal_connect (G_OBJECT (FRAME_GTK_OUTER_WIDGET (f)),
+                       "window-state-event", G_CALLBACK (window_state_event),
+                       NULL);
+      g_signal_connect (G_OBJECT (FRAME_GTK_OUTER_WIDGET (f)), "delete-event",
+                       G_CALLBACK (delete_event), NULL);
+      g_signal_connect (G_OBJECT (FRAME_GTK_OUTER_WIDGET (f)), "event",
+                       G_CALLBACK (pgtk_handle_event), NULL);
+      g_signal_connect (G_OBJECT (FRAME_GTK_OUTER_WIDGET (f)), 
"configure-event",
+                       G_CALLBACK (configure_event), NULL);
+    }
+
+  g_signal_connect (G_OBJECT (FRAME_GTK_WIDGET (f)), "map-event",
+                   G_CALLBACK (map_event), NULL);
+  g_signal_connect (G_OBJECT (FRAME_GTK_WIDGET (f)), "size-allocate",
+                   G_CALLBACK (size_allocate), f);
+  g_signal_connect (G_OBJECT (FRAME_GTK_WIDGET (f)), "key-press-event",
+                   G_CALLBACK (key_press_event), NULL);
+  g_signal_connect (G_OBJECT (FRAME_GTK_WIDGET (f)), "key-release-event",
+                   G_CALLBACK (key_release_event), NULL);
+  g_signal_connect (G_OBJECT (FRAME_GTK_WIDGET (f)), "focus-in-event",
+                   G_CALLBACK (focus_in_event), NULL);
+  g_signal_connect (G_OBJECT (FRAME_GTK_WIDGET (f)), "focus-out-event",
+                   G_CALLBACK (focus_out_event), NULL);
+  g_signal_connect (G_OBJECT (FRAME_GTK_WIDGET (f)), "enter-notify-event",
+                   G_CALLBACK (enter_notify_event), NULL);
+  g_signal_connect (G_OBJECT (FRAME_GTK_WIDGET (f)), "leave-notify-event",
+                   G_CALLBACK (leave_notify_event), NULL);
+  g_signal_connect (G_OBJECT (FRAME_GTK_WIDGET (f)), "motion-notify-event",
+                   G_CALLBACK (motion_notify_event), NULL);
+  g_signal_connect (G_OBJECT (FRAME_GTK_WIDGET (f)), "button-press-event",
+                   G_CALLBACK (button_event), NULL);
+  g_signal_connect (G_OBJECT (FRAME_GTK_WIDGET (f)), "button-release-event",
+                   G_CALLBACK (button_event), NULL);
+  g_signal_connect (G_OBJECT (FRAME_GTK_WIDGET (f)), "scroll-event",
+                   G_CALLBACK (scroll_event), NULL);
+  g_signal_connect (G_OBJECT (FRAME_GTK_WIDGET (f)), "selection-clear-event",
+                   G_CALLBACK (pgtk_selection_lost), NULL);
+  g_signal_connect (G_OBJECT (FRAME_GTK_WIDGET (f)), "configure-event",
+                   G_CALLBACK (configure_event), NULL);
+  g_signal_connect (G_OBJECT (FRAME_GTK_WIDGET (f)), "drag-data-received",
+                   G_CALLBACK (drag_data_received), NULL);
+  g_signal_connect (G_OBJECT (FRAME_GTK_WIDGET (f)), "draw",
+                   G_CALLBACK (pgtk_handle_draw), NULL);
+  g_signal_connect (G_OBJECT (FRAME_GTK_WIDGET (f)), "event",
+                   G_CALLBACK (pgtk_handle_event), NULL);
+}
+
+static void
+my_log_handler (const gchar * log_domain, GLogLevelFlags log_level,
+               const gchar * msg, gpointer user_data)
+{
+  if (!strstr (msg, "g_set_prgname"))
+    fprintf (stderr, "%s-WARNING **: %s", log_domain, msg);
+}
+
+/* Test whether two display-name strings agree up to the dot that separates
+   the screen number from the server number.  */
+static bool
+same_x_server (const char *name1, const char *name2)
+{
+  bool seen_colon = false;
+  Lisp_Object sysname = Fsystem_name ();
+  const char *system_name = SSDATA (sysname);
+  ptrdiff_t system_name_length = SBYTES (sysname);
+  ptrdiff_t length_until_period = 0;
+
+  while (system_name[length_until_period] != 0
+        && system_name[length_until_period] != '.')
+    length_until_period++;
+
+  /* Treat `unix' like an empty host name.  */
+  if (!strncmp (name1, "unix:", 5))
+    name1 += 4;
+  if (!strncmp (name2, "unix:", 5))
+    name2 += 4;
+  /* Treat this host's name like an empty host name.  */
+  if (!strncmp (name1, system_name, system_name_length)
+      && name1[system_name_length] == ':')
+    name1 += system_name_length;
+  if (!strncmp (name2, system_name, system_name_length)
+      && name2[system_name_length] == ':')
+    name2 += system_name_length;
+  /* Treat this host's domainless name like an empty host name.  */
+  if (!strncmp (name1, system_name, length_until_period)
+      && name1[length_until_period] == ':')
+    name1 += length_until_period;
+  if (!strncmp (name2, system_name, length_until_period)
+      && name2[length_until_period] == ':')
+    name2 += length_until_period;
+
+  for (; *name1 != '\0' && *name1 == *name2; name1++, name2++)
+    {
+      if (*name1 == ':')
+       seen_colon = true;
+      if (seen_colon && *name1 == '.')
+       return true;
+    }
+  return (seen_colon
+         && (*name1 == '.' || *name1 == '\0')
+         && (*name2 == '.' || *name2 == '\0'));
+}
+
+#define GNOME_INTERFACE_SCHEMA "org.gnome.desktop.interface"
+
+static gdouble pgtk_text_scaling_factor (void)
+{
+  GSettingsSchemaSource *schema_source = g_settings_schema_source_get_default 
();
+  if (schema_source != NULL)
+    {
+      GSettingsSchema *schema = g_settings_schema_source_lookup (schema_source,
+         GNOME_INTERFACE_SCHEMA, true);
+      if (schema != NULL)
+        {
+         g_settings_schema_unref (schema);
+         GSettings *set = g_settings_new (GNOME_INTERFACE_SCHEMA);
+         return g_settings_get_double (set, "text-scaling-factor");
+       }
+    }
+  return 1;
+}
+
+
+/* Open a connection to X display DISPLAY_NAME, and return
+   the structure that describes the open display.
+   If we cannot contact the display, return null.  */
+
+struct pgtk_display_info *
+pgtk_term_init (Lisp_Object display_name, char *resource_name)
+{
+  GdkDisplay *dpy;
+  struct terminal *terminal;
+  struct pgtk_display_info *dpyinfo;
+  static int x_initialized = 0;
+  static unsigned x_display_id = 0;
+  static char *initial_display = NULL;
+  static dynlib_handle_ptr *handle = NULL;
+  char *dpy_name;
+  Lisp_Object lisp_dpy_name = Qnil;
+
+  block_input ();
+
+  if (!x_initialized)
+    {
+      any_help_event_p = false;
+
+      Fset_input_interrupt_mode (Qt);
+      baud_rate = 19200;
+
+#ifdef USE_CAIRO
+      gui_init_fringe (&pgtk_redisplay_interface);
+#endif
+
+      ++x_initialized;
+    }
+
+  dpy_name = SSDATA (display_name);
+  if (strlen (dpy_name) == 0 && initial_display != NULL)
+    dpy_name = initial_display;
+  lisp_dpy_name = build_string (dpy_name);
+
+  {
+#define NUM_ARGV 10
+    int argc;
+    char *argv[NUM_ARGV];
+    char **argv2 = argv;
+    guint id;
+
+    if (x_initialized++ > 1)
+      {
+       xg_display_open (dpy_name, &dpy);
+      }
+    else
+      {
+        static char display_opt[] = "--display";
+        static char name_opt[] = "--name";
+
+        for (argc = 0; argc < NUM_ARGV; ++argc)
+          argv[argc] = 0;
+
+        argc = 0;
+        argv[argc++] = initial_argv[0];
+
+       if (strlen (dpy_name) != 0)
+         {
+           argv[argc++] = display_opt;
+           argv[argc++] = dpy_name;
+         }
+
+        argv[argc++] = name_opt;
+        argv[argc++] = resource_name;
+
+       /* Work around GLib bug that outputs a faulty warning. See
+          https://bugzilla.gnome.org/show_bug.cgi?id=563627.  */
+       id = g_log_set_handler ("GLib", G_LOG_LEVEL_WARNING | G_LOG_FLAG_FATAL
+                               | G_LOG_FLAG_RECURSION, my_log_handler, NULL);
+
+       /* gtk_init does set_locale.  Fix locale before and after.  */
+       fixup_locale ();
+       unrequest_sigio ();     /* See comment in x_display_ok.  */
+       gtk_init (&argc, &argv2);
+       request_sigio ();
+       fixup_locale ();
+
+
+        g_log_remove_handler ("GLib", id);
+
+        xg_initialize ();
+
+        dpy = DEFAULT_GDK_DISPLAY ();
+
+       initial_display = g_strdup (gdk_display_get_name (dpy));
+       dpy_name = initial_display;
+       lisp_dpy_name = build_string (dpy_name);
+      }
+  }
+
+  /* Detect failure.  */
+  if (dpy == 0)
+    {
+      unblock_input ();
+      return 0;
+    }
+
+
+  dpyinfo = xzalloc (sizeof *dpyinfo);
+  pgtk_initialize_display_info (dpyinfo);
+  terminal = pgtk_create_terminal (dpyinfo);
+
+  {
+    struct pgtk_display_info *share;
+
+    for (share = x_display_list; share; share = share->next)
+      if (same_x_server (SSDATA (XCAR (share->name_list_element)), dpy_name))
+       break;
+    if (share)
+      terminal->kboard = share->terminal->kboard;
+    else
+      {
+       terminal->kboard = allocate_kboard (Qpgtk);
+
+       /* Don't let the initial kboard remain current longer than necessary.
+          That would cause problems if a file loaded on startup tries to
+          prompt in the mini-buffer.  */
+       if (current_kboard == initial_kboard)
+         current_kboard = terminal->kboard;
+      }
+    terminal->kboard->reference_count++;
+  }
+
+  /* Put this display on the chain.  */
+  dpyinfo->next = x_display_list;
+  x_display_list = dpyinfo;
+
+  dpyinfo->name_list_element = Fcons (lisp_dpy_name, Qnil);
+  dpyinfo->gdpy = dpy;
+
+  /* https://lists.gnu.org/r/emacs-devel/2015-11/msg00194.html  */
+  dpyinfo->smallest_font_height = 1;
+  dpyinfo->smallest_char_width = 1;
+
+  /* Set the name of the terminal. */
+  terminal->name = xlispstrdup (lisp_dpy_name);
+
+  Lisp_Object system_name = Fsystem_name ();
+  ptrdiff_t nbytes;
+  if (INT_ADD_WRAPV (SBYTES (Vinvocation_name), SBYTES (system_name) + 2,
+                    &nbytes))
+    memory_full (SIZE_MAX);
+  dpyinfo->x_id = ++x_display_id;
+  dpyinfo->x_id_name = xmalloc (nbytes);
+  char *nametail = lispstpcpy (dpyinfo->x_id_name, Vinvocation_name);
+  *nametail++ = '@';
+  lispstpcpy (nametail, system_name);
+
+  /* Figure out which modifier bits mean what.  */
+  x_find_modifier_meanings (dpyinfo);
+
+  /* Get the scroll bar cursor.  */
+  /* We must create a GTK cursor, it is required for GTK widgets.  */
+  dpyinfo->xg_cursor = xg_create_default_cursor (dpyinfo->gdpy);
+
+  dpyinfo->vertical_scroll_bar_cursor
+    = gdk_cursor_new_for_display (dpyinfo->gdpy, GDK_SB_V_DOUBLE_ARROW);
+
+  dpyinfo->horizontal_scroll_bar_cursor
+    = gdk_cursor_new_for_display (dpyinfo->gdpy, GDK_SB_H_DOUBLE_ARROW);
+
+  dpyinfo->icon_bitmap_id = -1;
+
+  reset_mouse_highlight (&dpyinfo->mouse_highlight);
+
+  {
+    GdkScreen *gscr = gdk_display_get_default_screen (dpyinfo->gdpy);
+
+    gdouble dpi = gdk_screen_get_resolution (gscr);
+    if (dpi < 0)
+       dpi = 96.0;
+
+    dpi *= pgtk_text_scaling_factor ();
+    dpyinfo->resx = dpi;
+    dpyinfo->resy = dpi;
+  }
+
+  /* smooth scroll setting */
+  dpyinfo->scroll.x_per_char = 2;
+  dpyinfo->scroll.y_per_line = 2;
+
+  dpyinfo->connection = -1;
+
+  if (!handle)
+    handle = dynlib_open (NULL);
+
+#ifdef GDK_WINDOWING_X11
+  if (!strcmp (G_OBJECT_TYPE_NAME (dpy), "GdkX11Display") && handle)
+    {
+      void *(*gdk_x11_display_get_xdisplay) (GdkDisplay *)
+       = dynlib_sym (handle, "gdk_x11_display_get_xdisplay");
+      int (*x_connection_number) (void *)
+       = dynlib_sym (handle, "XConnectionNumber");
+
+      if (x_connection_number
+         && gdk_x11_display_get_xdisplay)
+       dpyinfo->connection
+         = x_connection_number (gdk_x11_display_get_xdisplay (dpy));
+    }
+#endif
+
+#ifdef GDK_WINDOWING_WAYLAND
+  if (GDK_IS_WAYLAND_DISPLAY (dpy) && handle)
+    {
+      struct wl_display *wl_dpy = gdk_wayland_display_get_wl_display (dpy);
+      int (*display_get_fd) (struct wl_display *)
+       = dynlib_sym (handle, "wl_display_get_fd");
+
+      if (display_get_fd)
+       dpyinfo->connection = display_get_fd (wl_dpy);
+    }
+#endif
+
+  if (dpyinfo->connection >= 0)
+    {
+      add_keyboard_wait_descriptor (dpyinfo->connection);
+#ifdef F_SETOWN
+      fcntl (dpyinfo->connection, F_SETOWN, getpid ());
+#endif /* ! defined (F_SETOWN) */
+
+      if (interrupt_input)
+       init_sigio (dpyinfo->connection);
+    }
+
+  x_setup_pointer_blanking (dpyinfo);
+
+  xsettings_initialize (dpyinfo);
+
+  pgtk_selection_init ();
+
+  pgtk_im_init (dpyinfo);
+
+  unblock_input ();
+
+  return dpyinfo;
+}
+
+/* Get rid of display DPYINFO, deleting all frames on it,
+   and without sending any more commands to the X server.  */
+
+static void
+pgtk_delete_display (struct pgtk_display_info *dpyinfo)
+{
+  struct terminal *t;
+
+  /* Close all frames and delete the generic struct terminal for this
+     X display.  */
+  for (t = terminal_list; t; t = t->next_terminal)
+    if (t->type == output_pgtk && t->display_info.pgtk == dpyinfo)
+      {
+        delete_terminal (t);
+        break;
+      }
+
+  if (x_display_list == dpyinfo)
+    x_display_list = dpyinfo->next;
+  else
+    {
+      struct pgtk_display_info *tail;
+
+      for (tail = x_display_list; tail; tail = tail->next)
+       if (tail->next == dpyinfo)
+         tail->next = tail->next->next;
+    }
+
+  xfree (dpyinfo);
+}
+
+char *
+pgtk_xlfd_to_fontname (const char *xlfd)
+/* --------------------------------------------------------------------------
+    Convert an X font name (XLFD) to an Gtk font name.
+    Only family is used.
+    The string returned is temporarily allocated.
+   -------------------------------------------------------------------------- 
*/
+{
+  char *name = xmalloc (180);
+
+  if (!strncmp (xlfd, "--", 2))
+    {
+      if (sscanf (xlfd, "--%179[^-]-", name) != 1)
+       name[0] = '\0';
+    }
+  else
+    {
+      if (sscanf (xlfd, "-%*[^-]-%179[^-]-", name) != 1)
+       name[0] = '\0';
+    }
+
+  /* stopgap for malformed XLFD input */
+  if (strlen (name) == 0)
+    strcpy (name, "Monospace");
+
+  return name;
+}
+
+bool
+pgtk_defined_color (struct frame *f,
+                   const char *name,
+                   Emacs_Color * color_def, bool alloc, bool makeIndex)
+/* --------------------------------------------------------------------------
+         Return true if named color found, and set color_def rgb accordingly.
+         If makeIndex and alloc are nonzero put the color in the color_table,
+         and set color_def pixel to the resulting index.
+         If makeIndex is zero, set color_def pixel to ARGB.
+         Return false if not found
+   -------------------------------------------------------------------------- 
*/
+{
+  int r;
+
+  block_input ();
+  r = xg_check_special_colors (f, name, color_def);
+  if (!r)
+    r = pgtk_parse_color (f, name, color_def);
+  unblock_input ();
+  return r;
+}
+
+/* On frame F, translate the color name to RGB values.  Use cached
+   information, if possible.
+
+   Note that there is currently no way to clean old entries out of the
+   cache.  However, it is limited to names in the server's database,
+   and names we've actually looked up; list-colors-display is probably
+   the most color-intensive case we're likely to hit.  */
+
+int
+pgtk_parse_color (struct frame *f, const char *color_name,
+                 Emacs_Color * color)
+{
+  GdkRGBA rgba;
+  if (gdk_rgba_parse (&rgba, color_name))
+    {
+      color->red = rgba.red * 65535;
+      color->green = rgba.green * 65535;
+      color->blue = rgba.blue * 65535;
+      color->pixel =
+       (color->red >> 8) << 16 |
+       (color->green >> 8) << 8 |
+       (color->blue >> 8) << 0;
+      return 1;
+    }
+  return 0;
+}
+
+/* On frame F, translate pixel colors to RGB values for the NCOLORS
+   colors in COLORS.  On W32, we no longer try to map colors to
+   a palette.  */
+void
+pgtk_query_colors (struct frame *f, Emacs_Color * colors, int ncolors)
+{
+  int i;
+
+  for (i = 0; i < ncolors; i++)
+    {
+      unsigned long pixel = colors[i].pixel;
+      /* Convert to a 16 bit value in range 0 - 0xffff. */
+#define GetRValue(p) (((p) >> 16) & 0xff)
+#define GetGValue(p) (((p) >> 8) & 0xff)
+#define GetBValue(p) (((p) >> 0) & 0xff)
+      colors[i].red = GetRValue (pixel) * 257;
+      colors[i].green = GetGValue (pixel) * 257;
+      colors[i].blue = GetBValue (pixel) * 257;
+    }
+}
+
+void
+pgtk_query_color (struct frame *f, Emacs_Color * color)
+{
+  pgtk_query_colors (f, color, 1);
+}
+
+void
+pgtk_clear_area (struct frame *f, int x, int y, int width, int height)
+{
+  cairo_t *cr;
+
+  eassert (width > 0 && height > 0);
+
+  cr = pgtk_begin_cr_clip (f);
+  pgtk_set_cr_source_with_color (f, FRAME_X_OUTPUT (f)->background_color);
+  cairo_rectangle (cr, x, y, width, height);
+  cairo_fill (cr);
+  pgtk_end_cr_clip (f);
+}
+
+
+void
+syms_of_pgtkterm (void)
+{
+  /* from 23+ we need to tell emacs what modifiers there are.. */
+  DEFSYM (Qmodifier_value, "modifier-value");
+  DEFSYM (Qalt, "alt");
+  DEFSYM (Qhyper, "hyper");
+  DEFSYM (Qmeta, "meta");
+  DEFSYM (Qsuper, "super");
+  DEFSYM (Qcontrol, "control");
+  DEFSYM (QUTF8_STRING, "UTF8_STRING");
+
+  DEFSYM (Qfile, "file");
+  DEFSYM (Qurl, "url");
+
+  DEFSYM (Qlatin_1, "latin-1");
+
+  xg_default_icon_file =
+    build_pure_c_string ("icons/hicolor/scalable/apps/emacs.svg");
+  staticpro (&xg_default_icon_file);
+
+  DEFSYM (Qx_gtk_map_stock, "x-gtk-map-stock");
+
+
+  Fput (Qalt, Qmodifier_value, make_fixnum (alt_modifier));
+  Fput (Qhyper, Qmodifier_value, make_fixnum (hyper_modifier));
+  Fput (Qmeta, Qmodifier_value, make_fixnum (meta_modifier));
+  Fput (Qsuper, Qmodifier_value, make_fixnum (super_modifier));
+  Fput (Qcontrol, Qmodifier_value, make_fixnum (ctrl_modifier));
+
+  DEFVAR_LISP ("x-ctrl-keysym", Vx_ctrl_keysym,
+              doc: /* Which keys Emacs uses for the ctrl modifier.
+This should be one of the symbols `ctrl', `alt', `hyper', `meta',
+`super'.  For example, `ctrl' means use the Ctrl_L and Ctrl_R keysyms.
+The default is nil, which is the same as `ctrl'.  */ );
+  Vx_ctrl_keysym = Qnil;
+
+  DEFVAR_LISP ("x-alt-keysym", Vx_alt_keysym,
+              doc: /* Which keys Emacs uses for the alt modifier.
+This should be one of the symbols `ctrl', `alt', `hyper', `meta',
+`super'.  For example, `alt' means use the Alt_L and Alt_R keysyms.
+The default is nil, which is the same as `alt'.  */ );
+  Vx_alt_keysym = Qnil;
+
+  DEFVAR_LISP ("x-hyper-keysym", Vx_hyper_keysym,
+              doc: /* Which keys Emacs uses for the hyper modifier.
+This should be one of the symbols `ctrl', `alt', `hyper', `meta',
+`super'.  For example, `hyper' means use the Hyper_L and Hyper_R
+keysyms.  The default is nil, which is the same as `hyper'.  */ );
+  Vx_hyper_keysym = Qnil;
+
+  DEFVAR_LISP ("x-meta-keysym", Vx_meta_keysym,
+              doc: /* Which keys Emacs uses for the meta modifier.
+This should be one of the symbols `ctrl', `alt', `hyper', `meta',
+`super'.  For example, `meta' means use the Meta_L and Meta_R keysyms.
+The default is nil, which is the same as `meta'.  */ );
+  Vx_meta_keysym = Qnil;
+
+  DEFVAR_LISP ("x-super-keysym", Vx_super_keysym,
+              doc: /* Which keys Emacs uses for the super modifier.
+This should be one of the symbols `ctrl', `alt', `hyper', `meta',
+`super'.  For example, `super' means use the Super_L and Super_R
+keysyms.  The default is nil, which is the same as `super'.  */ );
+  Vx_super_keysym = Qnil;
+
+  /* TODO: move to common code */
+  DEFVAR_LISP ("x-toolkit-scroll-bars", Vx_toolkit_scroll_bars,
+              doc: /* Which toolkit scroll bars Emacs uses, if any.
+A value of nil means Emacs doesn't use toolkit scroll bars.
+With the X Window system, the value is a symbol describing the
+X toolkit.  Possible values are: gtk, motif, xaw, or xaw3d.
+With MS Windows or Nextstep, the value is t.  */ );
+  /* Vx_toolkit_scroll_bars = Qt; */
+  Vx_toolkit_scroll_bars = intern_c_string ("gtk");
+
+  DEFVAR_BOOL ("x-use-underline-position-properties", 
x_use_underline_position_properties,
+              doc: /*Non-nil means make use of UNDERLINE_POSITION font 
properties.
+A value of nil means ignore them.  If you encounter fonts with bogus
+UNDERLINE_POSITION font properties, for example 7x13 on XFree prior
+to 4.1, set this to nil. */);
+  x_use_underline_position_properties = 0;
+
+  DEFVAR_BOOL ("x-underline-at-descent-line", x_underline_at_descent_line,
+              doc: /* Non-nil means to draw the underline at the same place as 
the descent line.
+A value of nil means to draw the underline according to the value of the
+variable `x-use-underline-position-properties', which is usually at the
+baseline level.  The default value is nil.  */);
+  x_underline_at_descent_line = 0;
+
+  DEFVAR_BOOL ("x-gtk-use-window-move", x_gtk_use_window_move,
+              doc: /* Non-nil means rely on gtk_window_move to set frame 
positions.
+If this variable is t (the default), the GTK build uses the function
+gtk_window_move to set or store frame positions and disables some time
+consuming frame position adjustments.  In newer versions of GTK, Emacs
+always uses gtk_window_move and ignores the value of this variable.  */);
+  x_gtk_use_window_move = true;
+
+
+  DEFVAR_LISP ("pgtk-wait-for-event-timeout", Vpgtk_wait_for_event_timeout,
+              doc: /* How long to wait for X events.
+
+Emacs will wait up to this many seconds to receive X events after
+making changes which affect the state of the graphical interface.
+Under some window managers this can take an indefinite amount of time,
+so it is important to limit the wait.
+
+If set to a non-float value, there will be no wait at all.  */);
+  Vpgtk_wait_for_event_timeout = make_float (0.1);
+
+  DEFVAR_LISP ("pgtk-keysym-table", Vpgtk_keysym_table,
+              doc: /* Hash table of character codes indexed by X keysym codes. 
 */);
+  Vpgtk_keysym_table =
+    make_hash_table (hashtest_eql, 900, DEFAULT_REHASH_SIZE,
+                    DEFAULT_REHASH_THRESHOLD, Qnil, false);
+
+  window_being_scrolled = Qnil;
+  staticpro (&window_being_scrolled);
+
+  /* Tell Emacs about this window system.  */
+  Fprovide (Qpgtk, Qnil);
+}
+
+/* Cairo does not allow resizing a surface/context after it is
+ * created, so we need to trash the old context, create a new context
+ * on the next cr_clip_begin with the new dimensions and request a
+ * re-draw.
+ *
+ * This Will leave the active context available to present on screen
+ * until a redrawn frame is completed.
+ */
+void
+pgtk_cr_update_surface_desired_size (struct frame *f, int width, int height, 
bool force)
+{
+  if (FRAME_CR_SURFACE_DESIRED_WIDTH (f) != width
+      || FRAME_CR_SURFACE_DESIRED_HEIGHT (f) != height
+      || force)
+    {
+      pgtk_cr_destroy_frame_context (f);
+      FRAME_CR_SURFACE_DESIRED_WIDTH (f) = width;
+      FRAME_CR_SURFACE_DESIRED_HEIGHT (f) = height;
+      SET_FRAME_GARBAGED (f);
+    }
+}
+
+
+cairo_t *
+pgtk_begin_cr_clip (struct frame *f)
+{
+  cairo_t *cr = FRAME_CR_CONTEXT (f);
+
+  if (!cr)
+    {
+      cairo_surface_t *surface =
+       gdk_window_create_similar_surface (gtk_widget_get_window
+                                          (FRAME_GTK_WIDGET (f)),
+                                          CAIRO_CONTENT_COLOR_ALPHA,
+                                          FRAME_CR_SURFACE_DESIRED_WIDTH (f),
+                                          FRAME_CR_SURFACE_DESIRED_HEIGHT
+                                          (f));
+
+      cr = FRAME_CR_CONTEXT (f) = cairo_create (surface);
+      cairo_surface_destroy (surface);
+    }
+
+  cairo_save (cr);
+
+  return cr;
+}
+
+void
+pgtk_end_cr_clip (struct frame *f)
+{
+  cairo_restore (FRAME_CR_CONTEXT (f));
+}
+
+void
+pgtk_set_cr_source_with_gc_foreground (struct frame *f, Emacs_GC * gc)
+{
+  pgtk_set_cr_source_with_color (f, gc->foreground);
+}
+
+void
+pgtk_set_cr_source_with_gc_background (struct frame *f, Emacs_GC * gc)
+{
+  pgtk_set_cr_source_with_color (f, gc->background);
+}
+
+void
+pgtk_set_cr_source_with_color (struct frame *f, unsigned long color)
+{
+  Emacs_Color col;
+  col.pixel = color;
+  pgtk_query_color (f, &col);
+  cairo_set_source_rgb (FRAME_CR_CONTEXT (f), col.red / 65535.0,
+                       col.green / 65535.0, col.blue / 65535.0);
+}
+
+void
+pgtk_cr_draw_frame (cairo_t * cr, struct frame *f)
+{
+  cairo_set_source_surface (cr, FRAME_CR_SURFACE (f), 0, 0);
+  cairo_paint (cr);
+}
+
+static cairo_status_t
+pgtk_cr_accumulate_data (void *closure, const unsigned char *data,
+                     unsigned int length)
+{
+  Lisp_Object *acc = (Lisp_Object *) closure;
+
+  *acc = Fcons (make_unibyte_string ((char const *) data, length), *acc);
+
+  return CAIRO_STATUS_SUCCESS;
+}
+
+void
+pgtk_cr_destroy_frame_context (struct frame *f)
+{
+  if (FRAME_CR_CONTEXT (f) != NULL)
+    {
+      cairo_destroy (FRAME_CR_CONTEXT (f));
+      FRAME_CR_CONTEXT (f) = NULL;
+    }
+}
+
+static void
+pgtk_cr_destroy (void *cr)
+{
+  block_input ();
+  cairo_destroy (cr);
+  unblock_input ();
+}
+
+
+
+Lisp_Object
+pgtk_cr_export_frames (Lisp_Object frames, cairo_surface_type_t surface_type)
+{
+  struct frame *f;
+  cairo_surface_t *surface;
+  cairo_t *cr;
+  int width, height;
+  void (*surface_set_size_func) (cairo_surface_t *, double, double) = NULL;
+  Lisp_Object acc = Qnil;
+  ptrdiff_t count = SPECPDL_INDEX ();
+
+  specbind (Qredisplay_dont_pause, Qt);
+  redisplay_preserve_echo_area (31);
+
+  f = XFRAME (XCAR (frames));
+  frames = XCDR (frames);
+  width = FRAME_PIXEL_WIDTH (f);
+  height = FRAME_PIXEL_HEIGHT (f);
+
+  block_input ();
+#ifdef CAIRO_HAS_PDF_SURFACE
+  if (surface_type == CAIRO_SURFACE_TYPE_PDF)
+    {
+      surface = cairo_pdf_surface_create_for_stream (pgtk_cr_accumulate_data, 
&acc,
+                                                    width, height);
+      surface_set_size_func = cairo_pdf_surface_set_size;
+    }
+  else
+#endif
+#ifdef CAIRO_HAS_PNG_FUNCTIONS
+  if (surface_type == CAIRO_SURFACE_TYPE_IMAGE)
+    surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24, width, height);
+  else
+#endif
+#ifdef CAIRO_HAS_PS_SURFACE
+  if (surface_type == CAIRO_SURFACE_TYPE_PS)
+    {
+      surface = cairo_ps_surface_create_for_stream (pgtk_cr_accumulate_data, 
&acc,
+                                                   width, height);
+      surface_set_size_func = cairo_ps_surface_set_size;
+    }
+  else
+#endif
+#ifdef CAIRO_HAS_SVG_SURFACE
+  if (surface_type == CAIRO_SURFACE_TYPE_SVG)
+    surface = cairo_svg_surface_create_for_stream (pgtk_cr_accumulate_data, 
&acc,
+                                                  width, height);
+  else
+#endif
+    abort ();
+
+  cr = cairo_create (surface);
+  cairo_surface_destroy (surface);
+  record_unwind_protect_ptr (pgtk_cr_destroy, cr);
+
+  while (1)
+    {
+      cairo_t *saved_cr = FRAME_CR_CONTEXT (f);
+      FRAME_CR_CONTEXT (f) = cr;
+      pgtk_clear_area (f, 0, 0, width, height);
+      expose_frame (f, 0, 0, width, height);
+      FRAME_CR_CONTEXT (f) = saved_cr;
+
+      if (NILP (frames))
+       break;
+
+      cairo_surface_show_page (surface);
+      f = XFRAME (XCAR (frames));
+      frames = XCDR (frames);
+      width = FRAME_PIXEL_WIDTH (f);
+      height = FRAME_PIXEL_HEIGHT (f);
+      if (surface_set_size_func)
+       (*surface_set_size_func) (surface, width, height);
+
+      unblock_input ();
+      maybe_quit ();
+      block_input ();
+    }
+
+#ifdef CAIRO_HAS_PNG_FUNCTIONS
+  if (surface_type == CAIRO_SURFACE_TYPE_IMAGE)
+    {
+      cairo_surface_flush (surface);
+      cairo_surface_write_to_png_stream (surface, pgtk_cr_accumulate_data, 
&acc);
+    }
+#endif
+  unblock_input ();
+
+  unbind_to (count, Qnil);
+
+  return CALLN (Fapply, intern ("concat"), Fnreverse (acc));
+}
+
+
+void
+init_pgtkterm (void)
+{
+}
diff --git a/src/pgtkterm.h b/src/pgtkterm.h
new file mode 100644
index 0000000000..42b03e315e
--- /dev/null
+++ b/src/pgtkterm.h
@@ -0,0 +1,668 @@
+/* Definitions and headers for communication with pure Gtk+3.
+   Copyright (C) 1989, 1993, 2005, 2008-2022 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/>.  */
+
+#ifndef _PGTKTERM_H_
+#define _PGTKTERM_H_
+
+#include "dispextern.h"
+#include "frame.h"
+#include "character.h"
+#include "font.h"
+#include "sysselect.h"
+
+#ifdef HAVE_PGTK
+
+#include <gtk/gtk.h>
+
+#ifdef CAIRO_HAS_PDF_SURFACE
+#include <cairo-pdf.h>
+#endif
+#ifdef CAIRO_HAS_PS_SURFACE
+#include <cairo-ps.h>
+#endif
+#ifdef CAIRO_HAS_SVG_SURFACE
+#include <cairo-svg.h>
+#endif
+
+/* could use list to store these, but rest of emacs has a big infrastructure
+   for managing a table of bitmap "records" */
+struct pgtk_bitmap_record
+{
+  void *img;
+  char *file;
+  int refcount;
+  int height, width, depth;
+  cairo_pattern_t *pattern;
+};
+
+#define RGB_TO_ULONG(r, g, b) (((r) << 16) | ((g) << 8) | (b))
+#define ARGB_TO_ULONG(a, r, g, b) (((a) << 24) | ((r) << 16) | ((g) << 8) | 
(b))
+
+#define ALPHA_FROM_ULONG(color) ((color) >> 24)
+#define RED_FROM_ULONG(color) (((color) >> 16) & 0xff)
+#define GREEN_FROM_ULONG(color) (((color) >> 8) & 0xff)
+#define BLUE_FROM_ULONG(color) ((color) & 0xff)
+
+struct scroll_bar
+{
+  /* These fields are shared by all vectors.  */
+  union vectorlike_header header;
+
+  /* The window we're a scroll bar for.  */
+  Lisp_Object window;
+
+  /* The next and previous in the chain of scroll bars in this frame.  */
+  Lisp_Object next, prev;
+
+  /* Fields from `x_window' down will not be traced by the GC.  */
+
+  /* The X window representing this scroll bar.  */
+  Window x_window;
+
+  /* The position and size of the scroll bar in pixels, relative to the
+     frame.  */
+  int top, left, width, height;
+
+  /* The starting and ending positions of the handle, relative to the
+     handle area (i.e. zero is the top position, not
+     SCROLL_BAR_TOP_BORDER).  If they're equal, that means the handle
+     hasn't been drawn yet.
+
+     These are not actually the locations where the beginning and end
+     are drawn; in order to keep handles from becoming invisible when
+     editing large files, we establish a minimum height by always
+     drawing handle bottoms VERTICAL_SCROLL_BAR_MIN_HANDLE pixels below
+     where they would be normally; the bottom and top are in a
+     different co-ordinate system.  */
+  int start, end;
+
+  /* If the scroll bar handle is currently being dragged by the user,
+     this is the number of pixels from the top of the handle to the
+     place where the user grabbed it.  If the handle isn't currently
+     being dragged, this is -1.  */
+  int dragging;
+
+#if defined (USE_TOOLKIT_SCROLL_BARS) && defined (USE_LUCID)
+  /* Last scroll bar part seen in xaw_jump_callback and xaw_scroll_callback.  
*/
+  enum scroll_bar_part last_seen_part;
+#endif
+
+#if defined (USE_TOOLKIT_SCROLL_BARS) && !defined (USE_GTK)
+  /* Last value of whole for horizontal scrollbars.  */
+  int whole;
+#endif
+
+  /* True if the scroll bar is horizontal.  */
+  bool horizontal;
+};
+
+
+/* init'd in pgtk_initialize_display_info () */
+struct pgtk_display_info
+{
+  /* Chain of all pgtk_display_info structures.  */
+  struct pgtk_display_info *next;
+
+  /* The generic display parameters corresponding to this PGTK display. */
+  struct terminal *terminal;
+
+  /* This says how to access this display in Gdk.  */
+  GdkDisplay *gdpy;
+
+  /* This is a cons cell of the form (NAME . FONT-LIST-CACHE).  */
+  Lisp_Object name_list_element;
+
+  /* Number of frames that are on this display.  */
+  int reference_count;
+
+  /* Logical identifier of this display.  */
+  unsigned x_id;
+
+  /* Default name for all frames on this display.  */
+  char *x_id_name;
+
+  /* The number of fonts loaded. */
+  int n_fonts;
+
+  /* Minimum width over all characters in all fonts in font_table.  */
+  int smallest_char_width;
+
+  /* Minimum font height over all fonts in font_table.  */
+  int smallest_font_height;
+
+  struct pgtk_bitmap_record *bitmaps;
+  ptrdiff_t bitmaps_size;
+  ptrdiff_t bitmaps_last;
+
+  /* DPI resolution of this screen */
+  double resx, resy;
+
+  /* Mask of things that cause the mouse to be grabbed */
+  int grabbed;
+
+  int n_planes;
+
+  int color_p;
+
+  /* Emacs bitmap-id of the default icon bitmap for this frame.
+     Or -1 if none has been allocated yet.  */
+  ptrdiff_t icon_bitmap_id;
+
+  Window root_window;
+
+  /* Xism */
+  XrmDatabase rdb;
+
+  /* The cursor to use for vertical scroll bars. */
+  Emacs_Cursor vertical_scroll_bar_cursor;
+
+  /* The cursor to use for horizontal scroll bars. */
+  Emacs_Cursor horizontal_scroll_bar_cursor;
+
+  /* Information about the range of text currently shown in
+     mouse-face.  */
+  Mouse_HLInfo mouse_highlight;
+
+  struct frame *highlight_frame;
+  struct frame *x_focus_frame;
+
+  /* The last frame mentioned in a FocusIn or FocusOut event.  This is
+     separate from x_focus_frame, because whether or not LeaveNotify
+     events cause us to lose focus depends on whether or not we have
+     received a FocusIn event for it.  */
+  struct frame *x_focus_event_frame;
+
+  /* The frame where the mouse was last time we reported a mouse event.  */
+  struct frame *last_mouse_frame;
+
+  /* The frame where the mouse was last time we reported a mouse motion.  */
+  struct frame *last_mouse_motion_frame;
+
+  /* Position where the mouse was last time we reported a motion.
+     This is a position on last_mouse_motion_frame.  */
+  int last_mouse_motion_x;
+  int last_mouse_motion_y;
+
+  /* Where the mouse was last time we reported a mouse position.  */
+  XRectangle last_mouse_glyph;
+
+  /* Time of last mouse movement.  */
+  Time last_mouse_movement_time;
+
+  /* The scroll bar in which the last motion event occurred.  */
+  void *last_mouse_scroll_bar;
+
+  /* The invisible cursor used for pointer blanking.
+     Unused if this display supports Xfixes extension.  */
+  Emacs_Cursor invisible_cursor;
+
+  /* Function used to toggle pointer visibility on this display.  */
+  void (*toggle_visible_pointer) (struct frame *, bool);
+
+  /* The GDK cursor for scroll bars and popup menus.  */
+  GdkCursor *xg_cursor;
+
+
+  /* The frame where the mouse was last time we reported a mouse position.  */
+  struct frame *last_mouse_glyph_frame;
+
+  /* Modifier masks in gdk */
+  int meta_mod_mask, alt_mod_mask, super_mod_mask, hyper_mod_mask;
+
+  /* The last click event. */
+  GdkEvent *last_click_event;
+
+  /* input method */
+  struct
+  {
+    GtkIMContext *context;
+    struct frame *focused_frame;
+  } im;
+
+  struct
+  {
+    double acc_x, acc_y;
+    double x_per_char, y_per_line;
+  } scroll;
+
+  int connection;
+};
+
+/* This is a chain of structures for all the PGTK displays currently in use.  
*/
+extern struct pgtk_display_info *x_display_list;
+
+struct pgtk_output
+{
+#if 0
+  void *view;
+  void *miniimage;
+#endif
+  unsigned long foreground_color;
+  unsigned long background_color;
+  void *toolbar;
+
+  /* Cursors */
+  Emacs_Cursor current_cursor;
+  Emacs_Cursor text_cursor;
+  Emacs_Cursor nontext_cursor;
+  Emacs_Cursor modeline_cursor;
+  Emacs_Cursor hand_cursor;
+  Emacs_Cursor hourglass_cursor;
+  Emacs_Cursor horizontal_drag_cursor;
+  Emacs_Cursor vertical_drag_cursor;
+  Emacs_Cursor left_edge_cursor;
+  Emacs_Cursor top_left_corner_cursor;
+  Emacs_Cursor top_edge_cursor;
+  Emacs_Cursor top_right_corner_cursor;
+  Emacs_Cursor right_edge_cursor;
+  Emacs_Cursor bottom_right_corner_cursor;
+  Emacs_Cursor bottom_edge_cursor;
+  Emacs_Cursor bottom_left_corner_cursor;
+
+  /* PGTK-specific */
+  Emacs_Cursor current_pointer;
+
+  /* border color */
+  unsigned long border_pixel;
+  GtkCssProvider *border_color_css_provider;
+
+  /* scrollbar color */
+  GtkCssProvider *scrollbar_foreground_css_provider;
+  GtkCssProvider *scrollbar_background_css_provider;
+
+  /* Widget whose cursor is hourglass_cursor.  This widget is temporarily
+     mapped to display an hourglass cursor.  */
+  GtkWidget *hourglass_widget;
+
+  Emacs_GC cursor_xgcv;
+
+  /* lord knows why Emacs needs to know about our Window ids.. */
+  Window window_desc, parent_desc;
+  char explicit_parent;
+
+  /* If >=0, a bitmap index.  The indicated bitmap is used for the
+     icon. */
+  ptrdiff_t icon_bitmap;
+
+  struct font *font;
+  int baseline_offset;
+
+  /* If a fontset is specified for this frame instead of font, this
+     value contains an ID of the fontset, else -1.  */
+  int fontset;                 /* only used with font_backend */
+
+  unsigned long mouse_color;
+  unsigned long cursor_color;
+  unsigned long cursor_foreground_color;
+
+  int icon_top;
+  int icon_left;
+
+  /* The size of the extra width currently allotted for vertical
+     scroll bars, in pixels.  */
+  int vertical_scroll_bar_extra;
+
+  /* The height of the titlebar decoration (included in PGTKWindow's frame). */
+  int titlebar_height;
+
+  /* The height of the toolbar if displayed, else 0. */
+  int toolbar_height;
+
+  /* This is the Emacs structure for the PGTK display this frame is on.  */
+  struct pgtk_display_info *display_info;
+
+  /* Non-zero if we are zooming (maximizing) the frame.  */
+  int zooming;
+
+  /* Non-zero if we are doing an animation, e.g. toggling the tool bar. */
+  int in_animation;
+
+  /* The last size hints set.  */
+  GdkGeometry size_hints;
+  long hint_flags;
+  int preferred_width, preferred_height;
+
+  /* The widget of this screen.  This is the window of a top widget.  */
+  GtkWidget *widget;
+  /* The widget of the edit portion of this screen; the window in
+     "window_desc" is inside of this.  */
+  GtkWidget *edit_widget;
+  /* The widget used for laying out widgets vertically.  */
+  GtkWidget *vbox_widget;
+  /* The widget used for laying out widgets horizontally.  */
+  GtkWidget *hbox_widget;
+  /* The menubar in this frame.  */
+  GtkWidget *menubar_widget;
+  /* The tool bar in this frame  */
+  GtkWidget *toolbar_widget;
+  /* True if tool bar is packed into the hbox widget (i.e. vertical).  */
+  bool_bf toolbar_in_hbox:1;
+  bool_bf toolbar_is_packed:1;
+
+  GtkTooltip *ttip_widget;
+  GtkWidget *ttip_lbl;
+  GtkWindow *ttip_window;
+
+  /* Height of menu bar widget, in pixels.  This value
+     is not meaningful if the menubar is turned off.  */
+  int menubar_height;
+
+  /* Height of tool bar widget, in pixels.  top_height is used if tool bar
+     at top, bottom_height if tool bar is at the bottom.
+     Zero if not using an external tool bar or if tool bar is vertical.  */
+  int toolbar_top_height, toolbar_bottom_height;
+
+  /* Width of tool bar widget, in pixels.  left_width is used if tool bar
+     at left, right_width if tool bar is at the right.
+     Zero if not using an external tool bar or if tool bar is horizontal.  */
+  int toolbar_left_width, toolbar_right_width;
+
+#ifdef USE_CAIRO
+  /* Cairo drawing contexts.  */
+  cairo_t *cr_context, *cr_active;
+  int cr_surface_desired_width, cr_surface_desired_height;
+  /* Cairo surface for double buffering */
+  cairo_surface_t *cr_surface_visible_bell;
+#endif
+  struct atimer *atimer_visible_bell;
+
+  int has_been_visible;
+
+  /* Relief GCs, colors etc.  */
+  struct relief
+  {
+    Emacs_GC xgcv;
+    unsigned long pixel;
+  }
+  black_relief, white_relief;
+
+  /* The background for which the above relief GCs were set up.
+     They are changed only when a different background is involved.  */
+  unsigned long relief_background;
+
+  /* Keep track of focus.  May be EXPLICIT if we received a FocusIn for this
+     frame, or IMPLICIT if we received an EnterNotify.
+     FocusOut and LeaveNotify clears EXPLICIT/IMPLICIT. */
+  int focus_state;
+
+  /* Keep track of scale factor.  If monitor's scale factor is changed, or
+     monitor is switched and scale factor is changed, then recreate cairo_t
+     and cairo_surface_t.  I need GTK's such signal, but there isn't, so
+     I watch it periodically with atimer. */
+  double watched_scale_factor;
+  struct atimer *scale_factor_atimer;
+};
+
+/* this dummy decl needed to support TTYs */
+struct x_output
+{
+  int unused;
+};
+
+enum
+{
+  /* Values for focus_state, used as bit mask.
+     EXPLICIT means we received a FocusIn for the frame and know it has
+     the focus.  IMPLICIT means we received an EnterNotify and the frame
+     may have the focus if no window manager is running.
+     FocusOut and LeaveNotify clears EXPLICIT/IMPLICIT. */
+  FOCUS_NONE = 0,
+  FOCUS_IMPLICIT = 1,
+  FOCUS_EXPLICIT = 2
+};
+
+/* This gives the pgtk_display_info structure for the display F is on.  */
+#define FRAME_X_OUTPUT(f)         ((f)->output_data.pgtk)
+#define FRAME_OUTPUT_DATA(f)      FRAME_X_OUTPUT (f)
+
+#define FRAME_DISPLAY_INFO(f)     (FRAME_X_OUTPUT (f)->display_info)
+#define FRAME_FOREGROUND_COLOR(f) (FRAME_X_OUTPUT (f)->foreground_color)
+#define FRAME_BACKGROUND_COLOR(f) (FRAME_X_OUTPUT (f)->background_color)
+#define FRAME_CURSOR_COLOR(f)     (FRAME_X_OUTPUT (f)->cursor_color)
+#define FRAME_POINTER_TYPE(f)     (FRAME_X_OUTPUT (f)->current_pointer)
+#define FRAME_FONT(f)             (FRAME_X_OUTPUT (f)->font)
+#define FRAME_GTK_OUTER_WIDGET(f) (FRAME_X_OUTPUT (f)->widget)
+#define FRAME_GTK_WIDGET(f)       (FRAME_X_OUTPUT (f)->edit_widget)
+#define FRAME_WIDGET(f)           (FRAME_GTK_OUTER_WIDGET (f) ?                
\
+                                   FRAME_GTK_OUTER_WIDGET (f) :                
\
+                                   FRAME_GTK_WIDGET (f))
+
+/* aliases */
+#define FRAME_PGTK_VIEW(f)         FRAME_GTK_WIDGET (f)
+#define FRAME_X_WINDOW(f)          FRAME_GTK_OUTER_WIDGET (f)
+#define FRAME_NATIVE_WINDOW(f)     GTK_WINDOW (FRAME_X_WINDOW (f))
+
+#define FRAME_X_DISPLAY(f)        (FRAME_DISPLAY_INFO (f)->gdpy)
+
+#define DEFAULT_GDK_DISPLAY() gdk_display_get_default ()
+
+/* Turning a lisp vector value into a pointer to a struct scroll_bar.  */
+#define XSCROLL_BAR(vec) ((struct scroll_bar *) XVECTOR (vec))
+
+#define PGTK_FACE_FOREGROUND(f) ((f)->foreground)
+#define PGTK_FACE_BACKGROUND(f) ((f)->background)
+#define FRAME_DEFAULT_FACE(f) FACE_FROM_ID_OR_NULL (f, DEFAULT_FACE_ID)
+
+/* Compute pixel height of the frame's titlebar. */
+#define FRAME_PGTK_TITLEBAR_HEIGHT(f)                                     0
+
+/* Compute pixel size for vertical scroll bars */
+#define PGTK_SCROLL_BAR_WIDTH(f)                                       \
+  (FRAME_HAS_VERTICAL_SCROLL_BARS (f)                                  \
+   ? rint (FRAME_CONFIG_SCROLL_BAR_WIDTH (f) > 0                       \
+          ? FRAME_CONFIG_SCROLL_BAR_WIDTH (f)                          \
+          : (FRAME_SCROLL_BAR_COLS (f) * FRAME_COLUMN_WIDTH (f)))      \
+   : 0)
+
+/* Compute pixel size for horizontal scroll bars */
+#define PGTK_SCROLL_BAR_HEIGHT(f)                                      \
+  (FRAME_HAS_HORIZONTAL_SCROLL_BARS (f)                                        
\
+   ? rint (FRAME_CONFIG_SCROLL_BAR_HEIGHT (f) > 0                      \
+          ? FRAME_CONFIG_SCROLL_BAR_HEIGHT (f)                         \
+          : (FRAME_SCROLL_BAR_LINES (f) * FRAME_LINE_HEIGHT (f)))      \
+   : 0)
+
+/* Difference btwn char-column-calculated and actual SB widths.
+   This is only a concern for rendering when SB on left. */
+#define PGTK_SCROLL_BAR_ADJUST(w, f)                           \
+  (WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_LEFT (w) ?                        \
+   (FRAME_SCROLL_BAR_COLS (f) * FRAME_COLUMN_WIDTH (f)         \
+    - PGTK_SCROLL_BAR_WIDTH (f)) : 0)
+
+/* Difference btwn char-line-calculated and actual SB heights.
+   This is only a concern for rendering when SB on top. */
+#define PGTK_SCROLL_BAR_ADJUST_HORIZONTALLY(w, f)              \
+  (WINDOW_HAS_HORIZONTAL_SCROLL_BARS (w) ?             \
+   (FRAME_SCROLL_BAR_LINES (f) * FRAME_LINE_HEIGHT (f) \
+    - PGTK_SCROLL_BAR_HEIGHT (f)) : 0)
+
+#define FRAME_MENUBAR_HEIGHT(f) (FRAME_X_OUTPUT (f)->menubar_height)
+
+/* Calculate system coordinates of the left and top of the parent
+   window or, if there is no parent window, the screen. */
+#define PGTK_PARENT_WINDOW_LEFT_POS(f)                                    \
+  (FRAME_PARENT_FRAME (f) != NULL                                       \
+   ? [[FRAME_PGTK_VIEW (f) window] parentWindow].frame.origin.x : 0)
+#define PGTK_PARENT_WINDOW_TOP_POS(f)                                     \
+  (FRAME_PARENT_FRAME (f) != NULL                                       \
+   ? ([[FRAME_PGTK_VIEW (f) window] parentWindow].frame.origin.y          \
+      + [[FRAME_PGTK_VIEW (f) window] parentWindow].frame.size.height     \
+      - FRAME_PGTK_TITLEBAR_HEIGHT (FRAME_PARENT_FRAME (f)))              \
+   : [[[PGTKScreen screepgtk] objectAtIndex: 0] frame].size.height)
+
+#define FRAME_PGTK_FONT_TABLE(f) (FRAME_DISPLAY_INFO (f)->font_table)
+
+#define FRAME_TOOLBAR_TOP_HEIGHT(f) ((f)->output_data.pgtk->toolbar_top_height)
+#define FRAME_TOOLBAR_BOTTOM_HEIGHT(f) \
+  ((f)->output_data.pgtk->toolbar_bottom_height)
+#define FRAME_TOOLBAR_HEIGHT(f) \
+  (FRAME_TOOLBAR_TOP_HEIGHT (f) + FRAME_TOOLBAR_BOTTOM_HEIGHT (f))
+#define FRAME_TOOLBAR_LEFT_WIDTH(f) ((f)->output_data.pgtk->toolbar_left_width)
+#define FRAME_TOOLBAR_RIGHT_WIDTH(f) 
((f)->output_data.pgtk->toolbar_right_width)
+#define FRAME_TOOLBAR_WIDTH(f) \
+  (FRAME_TOOLBAR_LEFT_WIDTH (f) + FRAME_TOOLBAR_RIGHT_WIDTH (f))
+
+#define FRAME_FONTSET(f) (FRAME_X_OUTPUT (f)->fontset)
+
+#define FRAME_BASELINE_OFFSET(f) (FRAME_X_OUTPUT (f)->baseline_offset)
+#define BLACK_PIX_DEFAULT(f) 0x000000
+#define WHITE_PIX_DEFAULT(f) 0xFFFFFF
+
+/* First position where characters can be shown (instead of scrollbar, if
+   it is on left. */
+#define FIRST_CHAR_POSITION(f)                         \
+  (! (FRAME_HAS_VERTICAL_SCROLL_BARS_ON_LEFT (f)) ? 0  \
+   : FRAME_SCROLL_BAR_COLS (f))
+
+#define FRAME_CR_SURFACE_DESIRED_WIDTH(f)              \
+  ((f)->output_data.pgtk->cr_surface_desired_width)
+#define FRAME_CR_SURFACE_DESIRED_HEIGHT(f) \
+  ((f)->output_data.pgtk->cr_surface_desired_height)
+
+/* Display init/shutdown functions implemented in pgtkterm.c */
+extern struct pgtk_display_info *pgtk_term_init (Lisp_Object display_name,
+                                                char *resource_name);
+extern void pgtk_term_shutdown (int sig);
+
+/* Implemented in pgtkterm, published in or needed from pgtkfns. */
+extern void pgtk_clear_frame (struct frame *f);
+extern char *pgtk_xlfd_to_fontname (const char *xlfd);
+
+/* Implemented in pgtkfns. */
+extern void pgtk_set_doc_edited (void);
+extern const char *pgtk_get_defaults_value (const char *key);
+extern const char *pgtk_get_string_resource (XrmDatabase rdb,
+                                            const char *name,
+                                            const char *class);
+extern void pgtk_implicitly_set_name (struct frame *f, Lisp_Object arg,
+                                     Lisp_Object oldval);
+
+/* Color management implemented in pgtkterm. */
+extern bool pgtk_defined_color (struct frame *f,
+                               const char *name,
+                               Emacs_Color * color_def, bool alloc,
+                               bool makeIndex);
+extern void pgtk_query_color (struct frame *f, Emacs_Color * color);
+extern void pgtk_query_colors (struct frame *f, Emacs_Color * colors,
+                              int ncolors);
+extern int pgtk_parse_color (struct frame *f, const char *color_name,
+                            Emacs_Color * color);
+
+/* Implemented in pgtkterm.c */
+extern void pgtk_clear_area (struct frame *f, int x, int y, int width,
+                            int height);
+extern int pgtk_gtk_to_emacs_modifiers (struct pgtk_display_info *dpyinfo,
+                                       int state);
+extern void pgtk_clear_under_internal_border (struct frame *f);
+extern void pgtk_set_event_handler (struct frame *f);
+
+/* Implemented in pgtkterm.c */
+extern int x_display_pixel_height (struct pgtk_display_info *);
+extern int x_display_pixel_width (struct pgtk_display_info *);
+
+/* Implemented in pgtkterm.c */
+extern void x_destroy_window (struct frame *f);
+extern void x_set_parent_frame (struct frame *f, Lisp_Object new_value,
+                               Lisp_Object old_value);
+extern void x_set_no_focus_on_map (struct frame *f, Lisp_Object new_value,
+                                  Lisp_Object old_value);
+extern void x_set_no_accept_focus (struct frame *f, Lisp_Object new_value,
+                                  Lisp_Object old_value);
+extern void x_set_z_group (struct frame *f, Lisp_Object new_value,
+                          Lisp_Object old_value);
+
+/* Cairo related functions implemented in pgtkterm.c */
+extern void pgtk_cr_update_surface_desired_size (struct frame *, int, int, 
bool);
+extern cairo_t *pgtk_begin_cr_clip (struct frame *f);
+extern void pgtk_end_cr_clip (struct frame *f);
+extern void pgtk_set_cr_source_with_gc_foreground (struct frame *f,
+                                                  Emacs_GC * gc);
+extern void pgtk_set_cr_source_with_gc_background (struct frame *f,
+                                                  Emacs_GC * gc);
+extern void pgtk_set_cr_source_with_color (struct frame *f,
+                                          unsigned long color);
+extern void pgtk_cr_draw_frame (cairo_t * cr, struct frame *f);
+extern void pgtk_cr_destroy_frame_context (struct frame *f);
+extern Lisp_Object pgtk_cr_export_frames (Lisp_Object frames, 
cairo_surface_type_t surface_type);
+
+/* Defined in pgtkmenu.c */
+extern Lisp_Object pgtk_popup_dialog (struct frame *f, Lisp_Object header,
+                                     Lisp_Object contents);
+extern Lisp_Object pgtk_dialog_show (struct frame *f, Lisp_Object title,
+                                    Lisp_Object header,
+                                    const char **error_name);
+extern void initialize_frame_menubar (struct frame *);
+
+
+/* Symbol initializations implemented in each pgtk sources. */
+extern void syms_of_pgtkterm (void);
+extern void syms_of_pgtkfns (void);
+extern void syms_of_pgtkmenu (void);
+extern void syms_of_pgtkselect (void);
+extern void syms_of_pgtkim (void);
+
+/* Implemented in pgtkselect. */
+extern void nxatoms_of_pgtkselect (void);
+
+/* Initialization and marking implemented in pgtkterm.c */
+extern void init_pgtkterm (void);
+extern void mark_pgtkterm (void);
+extern void pgtk_delete_terminal (struct terminal *terminal);
+
+extern void pgtk_make_frame_visible (struct frame *f);
+extern void pgtk_make_frame_invisible (struct frame *f);
+extern void x_wm_set_size_hint (struct frame *, long, bool);
+extern void x_free_frame_resources (struct frame *);
+extern void pgtk_iconify_frame (struct frame *f);
+extern void pgtk_focus_frame (struct frame *f, bool noactivate);
+extern void pgtk_set_scroll_bar_default_width (struct frame *f);
+extern void pgtk_set_scroll_bar_default_height (struct frame *f);
+extern Lisp_Object x_get_focus_frame (struct frame *frame);
+
+extern void pgtk_frame_rehighlight (struct pgtk_display_info *dpyinfo);
+
+extern void x_change_tab_bar_height (struct frame *, int);
+
+extern struct pgtk_display_info *check_pgtk_display_info (Lisp_Object object);
+
+extern void pgtk_default_font_parameter (struct frame *f, Lisp_Object parms);
+
+extern void pgtk_menu_set_in_use (bool in_use);
+
+
+extern void pgtk_enqueue_string (struct frame *f, gchar * str);
+extern void pgtk_enqueue_preedit (struct frame *f, Lisp_Object image_data);
+extern void pgtk_im_focus_in (struct frame *f);
+extern void pgtk_im_focus_out (struct frame *f);
+extern bool pgtk_im_filter_keypress (struct frame *f, GdkEventKey * ev);
+extern void pgtk_im_set_cursor_location (struct frame *f, int x, int y,
+                                        int width, int height);
+extern void pgtk_im_init (struct pgtk_display_info *dpyinfo);
+extern void pgtk_im_finish (struct pgtk_display_info *dpyinfo);
+
+extern bool xg_set_icon (struct frame *, Lisp_Object);
+extern bool xg_set_icon_from_xpm_data (struct frame *f, const char **data);
+
+extern bool pgtk_text_icon (struct frame *f, const char *icon_name);
+
+extern double pgtk_frame_scale_factor (struct frame *);
+extern int pgtk_emacs_to_gtk_modifiers (struct pgtk_display_info *, int);
+
+#endif /* HAVE_PGTK */
+#endif /* _PGTKTERM_H_ */
diff --git a/src/print.c b/src/print.c
index eb0fe591b8..dae60190a3 100644
--- a/src/print.c
+++ b/src/print.c
@@ -1,6 +1,6 @@
 /* Lisp object printing and output streams.
 
-Copyright (C) 1985-1986, 1988, 1993-1995, 1997-2021 Free Software
+Copyright (C) 1985-1986, 1988, 1993-1995, 1997-2022 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -1548,16 +1548,21 @@ print_vectorlike (Lisp_Object obj, Lisp_Object 
printcharfun, bool escapeflag,
     case PVEC_XWIDGET:
 #ifdef HAVE_XWIDGETS
       {
+       if (NILP (XXWIDGET (obj)->buffer))
+         print_c_string ("#<killed xwidget>", printcharfun);
+       else
+         {
 #ifdef USE_GTK
-       int len = sprintf (buf, "#<xwidget %u %p>",
-                          XXWIDGET (obj)->xwidget_id,
-                          XXWIDGET (obj)->widget_osr);
+           int len = sprintf (buf, "#<xwidget %u %p>",
+                              XXWIDGET (obj)->xwidget_id,
+                              XXWIDGET (obj)->widget_osr);
 #else
-       int len = sprintf (buf, "#<xwidget %u %p>",
-                          XXWIDGET (obj)->xwidget_id,
-                          XXWIDGET (obj)->xwWidget);
+           int len = sprintf (buf, "#<xwidget %u %p>",
+                              XXWIDGET (obj)->xwidget_id,
+                              XXWIDGET (obj)->xwWidget);
 #endif
-       strout (buf, len, len, printcharfun);
+           strout (buf, len, len, printcharfun);
+         }
        break;
       }
 #else
@@ -1899,6 +1904,22 @@ print_vectorlike (Lisp_Object obj, Lisp_Object 
printcharfun, bool escapeflag,
       }
       break;
 #endif
+    case PVEC_SQLITE:
+      {
+       print_c_string ("#<sqlite ", printcharfun);
+       int i = sprintf (buf, "db=%p", XSQLITE (obj)->db);
+       strout (buf, i, i, printcharfun);
+       if (XSQLITE (obj)->is_statement)
+         {
+           i = sprintf (buf, " stmt=%p", XSQLITE (obj)->stmt);
+           strout (buf, i, i, printcharfun);
+         }
+       i = sprintf (buf, " name=%s", XSQLITE (obj)->name);
+       strout (buf, i, i, printcharfun);
+       printchar ('>', printcharfun);
+      }
+      break;
+
     default:
       emacs_abort ();
     }
diff --git a/src/process.c b/src/process.c
index 241ffe9a8d..9664180cfd 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-2021 Free Software
+Copyright (C) 1985-1988, 1993-1996, 1998-1999, 2001-2022 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -40,7 +40,10 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 #include <netinet/in.h>
 #include <arpa/inet.h>
 
-#endif /* subprocesses */
+#else
+#define PIPECONN_P(p) false
+#define PIPECONN1_P(p) false
+#endif
 
 #ifdef HAVE_SETRLIMIT
 # include <sys/resource.h>
@@ -152,6 +155,7 @@ static bool kbd_is_on_hold;
    when exiting.  */
 bool inhibit_sentinels;
 
+#ifdef subprocesses
 union u_sockaddr
 {
   struct sockaddr sa;
@@ -164,8 +168,6 @@ union u_sockaddr
 #endif
 };
 
-#ifdef subprocesses
-
 #ifndef SOCK_CLOEXEC
 # define SOCK_CLOEXEC 0
 #endif
@@ -5994,7 +5996,8 @@ read_process_output_error_handler (Lisp_Object error_val)
   cmd_error_internal (error_val, "error in process filter: ");
   Vinhibit_quit = Qt;
   update_echo_area ();
-  Fsleep_for (make_fixnum (2), Qnil);
+  if (process_error_pause_time > 0)
+    Fsleep_for (make_fixnum (process_error_pause_time), Qnil);
   return Qt;
 }
 
@@ -6535,6 +6538,9 @@ send_process (Lisp_Object proc, const char *buf, 
ptrdiff_t len,
          /* Send this batch, using one or more write calls.  */
          ptrdiff_t written = 0;
          int outfd = p->outfd;
+          if (outfd < 0)
+            error ("Output file descriptor of %s is closed",
+                   SDATA (p->name));
          eassert (0 <= outfd && outfd < FD_SETSIZE);
 #ifdef DATAGRAM_SOCKETS
          if (DATAGRAM_CHAN_P (outfd))
@@ -7421,7 +7427,8 @@ exec_sentinel_error_handler (Lisp_Object error_val)
   cmd_error_internal (error_val, "error in process sentinel: ");
   Vinhibit_quit = Qt;
   update_echo_area ();
-  Fsleep_for (make_fixnum (2), Qnil);
+  if (process_error_pause_time > 0)
+    Fsleep_for (make_fixnum (process_error_pause_time), Qnil);
   return Qt;
 }
 
@@ -8255,9 +8262,13 @@ If optional argument QUERY is `current', ignore 
OMP_NUM_THREADS.
 If QUERY is `all', also count processors not available.  */)
   (Lisp_Object query)
 {
+#ifndef MSDOS
   return make_uint (num_processors (EQ (query, Qall) ? NPROC_ALL
                                    : EQ (query, Qcurrent) ? NPROC_CURRENT
                                    : NPROC_CURRENT_OVERRIDABLE));
+#else
+  return make_fixnum (1);
+#endif
 }
 
 #ifdef subprocesses
@@ -8302,10 +8313,15 @@ open_channel_for_module (Lisp_Object process)
 {
   CHECK_PROCESS (process);
   CHECK_TYPE (PIPECONN_P (process), Qpipe_process_p, process);
+#ifndef MSDOS
   int fd = dup (XPROCESS (process)->open_fd[SUBPROCESS_STDOUT]);
   if (fd == -1)
     report_file_error ("Cannot duplicate file descriptor", Qnil);
   return fd;
+#else
+  /* PIPECONN_P returning true shouldn't be possible on MSDOS.  */
+  emacs_abort ();
+#endif
 }
 
 
@@ -8577,6 +8593,12 @@ Enlarge the value only if the subprocess generates very 
large (megabytes)
 amounts of data in one go.  */);
   read_process_output_max = 4096;
 
+  DEFVAR_INT ("process-error-pause-time", process_error_pause_time,
+             doc: /* The number of seconds to pause after handling process 
errors.
+This isn't used for all process-related errors, but is used when a
+sentinel or a process filter function has an error.  */);
+  process_error_pause_time = 1;
+
   DEFSYM (Qinternal_default_interrupt_process,
          "internal-default-interrupt-process");
   DEFSYM (Qinterrupt_process_functions, "interrupt-process-functions");
diff --git a/src/process.h b/src/process.h
index 4a25d13d26..392b661ce6 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1985, 1994, 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/profiler.c b/src/profiler.c
index 21ae2447aa..31a46d1b5e 100644
--- a/src/profiler.c
+++ b/src/profiler.c
@@ -1,6 +1,6 @@
 /* Profiler implementation.
 
-Copyright (C) 2012-2021 Free Software Foundation, Inc.
+Copyright (C) 2012-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/puresize.h b/src/puresize.h
index 811d0b4d36..5516747ac2 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1993, 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/ralloc.c b/src/ralloc.c
index 02689265f2..22a5f5bc5a 100644
--- a/src/ralloc.c
+++ b/src/ralloc.c
@@ -1,5 +1,5 @@
 /* Block-relocating memory allocator.
-   Copyright (C) 1993, 1995, 2000-2021 Free Software Foundation, Inc.
+   Copyright (C) 1993, 1995, 2000-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/regex-emacs.c b/src/regex-emacs.c
index 3224f65fa4..7c172fe63a 100644
--- a/src/regex-emacs.c
+++ b/src/regex-emacs.c
@@ -1,6 +1,6 @@
 /* Emacs regular expression matching and search
 
-   Copyright (C) 1993-2021 Free Software Foundation, Inc.
+   Copyright (C) 1993-2022 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 027ab65558..59579a1a8b 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-2021 Free Software
+   Copyright (C) 1985, 1989-1993, 1995, 2000-2022 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 b75a9691b5..20fb14b671 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-2021 Free Software Foundation,
+Copyright (C) 1985-1989, 1993, 1995, 2001-2022 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/region-cache.h b/src/region-cache.h
index 128215718d..dc732328c8 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-2021 Free Software Foundation,
+Copyright (C) 1985-1986, 1993, 1995, 2001-2022 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/scroll.c b/src/scroll.c
index 9042888d1f..c643730965 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-2021 Free Software
+Copyright (C) 1985-1986, 1990, 1993-1994, 2001-2022 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/search.c b/src/search.c
index 66e77d42b4..a1adfa2d8c 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-2021 Free Software
+Copyright (C) 1985-1987, 1993-1994, 1997-1999, 2001-2022 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/sheap.c b/src/sheap.c
index 5401e791b0..1ec1f699ce 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2004-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/sheap.h b/src/sheap.h
index f1004d6c2e..297b7cf317 100644
--- a/src/sheap.h
+++ b/src/sheap.h
@@ -1,6 +1,6 @@
 /* Static heap allocation for GNU Emacs.
 
-Copyright 2016-2021 Free Software Foundation, Inc.
+Copyright 2016-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/sound.c b/src/sound.c
index d42bc8550d..9681a136e4 100644
--- a/src/sound.c
+++ b/src/sound.c
@@ -1,6 +1,6 @@
 /* sound.c -- sound support.
 
-Copyright (C) 1998-1999, 2001-2021 Free Software Foundation, Inc.
+Copyright (C) 1998-1999, 2001-2022 Free Software Foundation, Inc.
 
 Author: Gerd Moellmann <gerd@gnu.org>
 
diff --git a/src/sqlite.c b/src/sqlite.c
new file mode 100644
index 0000000000..649cb38294
--- /dev/null
+++ b/src/sqlite.c
@@ -0,0 +1,753 @@
+/*
+Copyright (C) 2021-2022 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/>.
+
+This file is based on the emacs-sqlite3 package written by Syohei
+YOSHIDA <syohex@gmail.com>, which can be found at:
+
+   https://github.com/syohex/emacs-sqlite3
+*/
+
+#include <config.h>
+#include "lisp.h"
+#include "coding.h"
+
+#ifdef HAVE_SQLITE3
+
+#include <sqlite3.h>
+
+#ifdef WINDOWSNT
+
+# include <windows.h>
+# include "w32common.h"
+# include "w32.h"
+
+DEF_DLL_FN (SQLITE_API int, sqlite3_finalize, (sqlite3_stmt*));
+DEF_DLL_FN (SQLITE_API int, sqlite3_close, (sqlite3*));
+DEF_DLL_FN (SQLITE_API int, sqlite3_open_v2,
+           (const char*, sqlite3**, int, const char*));
+DEF_DLL_FN (SQLITE_API int, sqlite3_reset, (sqlite3_stmt*));
+DEF_DLL_FN (SQLITE_API int, sqlite3_bind_text,
+           (sqlite3_stmt*, int, const char*, int, void(*)(void*)));
+DEF_DLL_FN (SQLITE_API int, sqlite3_bind_int64,
+           (sqlite3_stmt*, int, sqlite3_int64));
+DEF_DLL_FN (SQLITE_API int, sqlite3_bind_double, (sqlite3_stmt*, int, double));
+DEF_DLL_FN (SQLITE_API int, sqlite3_bind_null, (sqlite3_stmt*, int));
+DEF_DLL_FN (SQLITE_API int, sqlite3_bind_int, (sqlite3_stmt*, int, int));
+DEF_DLL_FN (SQLITE_API const char*, sqlite3_errmsg, (sqlite3*));
+DEF_DLL_FN (SQLITE_API int, sqlite3_step, (sqlite3_stmt*));
+DEF_DLL_FN (SQLITE_API int, sqlite3_changes, (sqlite3*));
+DEF_DLL_FN (SQLITE_API int, sqlite3_column_count, (sqlite3_stmt*));
+DEF_DLL_FN (SQLITE_API int, sqlite3_column_type, (sqlite3_stmt*, int));
+DEF_DLL_FN (SQLITE_API sqlite3_int64, sqlite3_column_int64,
+           (sqlite3_stmt*, int));
+DEF_DLL_FN (SQLITE_API double, sqlite3_column_double, (sqlite3_stmt*, int));
+DEF_DLL_FN (SQLITE_API const void*, sqlite3_column_blob,
+           (sqlite3_stmt*, int));
+DEF_DLL_FN (SQLITE_API int, sqlite3_column_bytes, (sqlite3_stmt*, int));
+DEF_DLL_FN (SQLITE_API const unsigned char*, sqlite3_column_text,
+           (sqlite3_stmt*, int));
+DEF_DLL_FN (SQLITE_API const char*, sqlite3_column_name, (sqlite3_stmt*, int));
+DEF_DLL_FN (SQLITE_API int, sqlite3_exec,
+           (sqlite3*, const char*, int (*callback)(void*,int,char**,char**),
+            void*, char**));
+DEF_DLL_FN (SQLITE_API int, sqlite3_prepare_v2,
+           (sqlite3*, const char*, int, sqlite3_stmt**, const char**));
+
+# ifdef HAVE_SQLITE3_LOAD_EXTENSION
+DEF_DLL_FN (SQLITE_API int, sqlite3_load_extension,
+           (sqlite3*, const char*, const char*, char**));
+#  undef sqlite3_load_extension
+#  define sqlite3_load_extension fn_sqlite3_load_extension
+# endif
+
+# undef sqlite3_finalize
+# undef sqlite3_close
+# undef sqlite3_open_v2
+# undef sqlite3_reset
+# undef sqlite3_bind_text
+# undef sqlite3_bind_int64
+# undef sqlite3_bind_double
+# undef sqlite3_bind_null
+# undef sqlite3_bind_int
+# undef sqlite3_errmsg
+# undef sqlite3_step
+# undef sqlite3_changes
+# undef sqlite3_column_count
+# undef sqlite3_column_type
+# undef sqlite3_column_int64
+# undef sqlite3_column_double
+# undef sqlite3_column_blob
+# undef sqlite3_column_bytes
+# undef sqlite3_column_text
+# undef sqlite3_column_name
+# undef sqlite3_exec
+# undef sqlite3_prepare_v2
+
+# define sqlite3_finalize fn_sqlite3_finalize
+# define sqlite3_close fn_sqlite3_close
+# define sqlite3_open_v2 fn_sqlite3_open_v2
+# define sqlite3_reset fn_sqlite3_reset
+# define sqlite3_bind_text fn_sqlite3_bind_text
+# define sqlite3_bind_int64 fn_sqlite3_bind_int64
+# define sqlite3_bind_double fn_sqlite3_bind_double
+# define sqlite3_bind_null fn_sqlite3_bind_null
+# define sqlite3_bind_int fn_sqlite3_bind_int
+# define sqlite3_errmsg fn_sqlite3_errmsg
+# define sqlite3_step fn_sqlite3_step
+# define sqlite3_changes fn_sqlite3_changes
+# define sqlite3_column_count fn_sqlite3_column_count
+# define sqlite3_column_type fn_sqlite3_column_type
+# define sqlite3_column_int64 fn_sqlite3_column_int64
+# define sqlite3_column_double fn_sqlite3_column_double
+# define sqlite3_column_blob fn_sqlite3_column_blob
+# define sqlite3_column_bytes fn_sqlite3_column_bytes
+# define sqlite3_column_text fn_sqlite3_column_text
+# define sqlite3_column_name fn_sqlite3_column_name
+# define sqlite3_exec fn_sqlite3_exec
+# define sqlite3_prepare_v2 fn_sqlite3_prepare_v2
+
+static bool
+load_dll_functions (HMODULE library)
+{
+  LOAD_DLL_FN (library, sqlite3_finalize);
+  LOAD_DLL_FN (library, sqlite3_close);
+  LOAD_DLL_FN (library, sqlite3_open_v2);
+  LOAD_DLL_FN (library, sqlite3_reset);
+  LOAD_DLL_FN (library, sqlite3_bind_text);
+  LOAD_DLL_FN (library, sqlite3_bind_int64);
+  LOAD_DLL_FN (library, sqlite3_bind_double);
+  LOAD_DLL_FN (library, sqlite3_bind_null);
+  LOAD_DLL_FN (library, sqlite3_bind_int);
+  LOAD_DLL_FN (library, sqlite3_errmsg);
+  LOAD_DLL_FN (library, sqlite3_step);
+  LOAD_DLL_FN (library, sqlite3_changes);
+  LOAD_DLL_FN (library, sqlite3_column_count);
+  LOAD_DLL_FN (library, sqlite3_column_type);
+  LOAD_DLL_FN (library, sqlite3_column_int64);
+  LOAD_DLL_FN (library, sqlite3_column_double);
+  LOAD_DLL_FN (library, sqlite3_column_blob);
+  LOAD_DLL_FN (library, sqlite3_column_bytes);
+  LOAD_DLL_FN (library, sqlite3_column_text);
+  LOAD_DLL_FN (library, sqlite3_column_name);
+  LOAD_DLL_FN (library, sqlite3_exec);
+# ifdef HAVE_SQLITE3_LOAD_EXTENSION
+  LOAD_DLL_FN (library, sqlite3_load_extension);
+# endif
+  LOAD_DLL_FN (library, sqlite3_prepare_v2);
+  return true;
+}
+#endif /* WINDOWSNT */
+
+static bool
+init_sqlite_functions (void)
+{
+#ifdef WINDOWSNT
+  static bool sqlite3_initialized;
+
+  if (!sqlite3_initialized)
+    {
+      HMODULE library = w32_delayed_load (Qsqlite3);
+
+      if (!library)
+       message1 ("sqlite3 library was not found");
+      else if (load_dll_functions (library))
+       {
+         sqlite3_initialized = true;
+         Vlibrary_cache = Fcons (Fcons (Qsqlite3, Qt), Vlibrary_cache);
+       }
+      else
+       {
+         message1 ("sqlite3 library was found, but could not be loaded 
successfully");
+         Vlibrary_cache = Fcons (Fcons (Qsqlite3, Qnil), Vlibrary_cache);
+       }
+    }
+  return sqlite3_initialized;
+#else  /* !WINDOWSNT */
+  return true;
+#endif /* !WINDOWSNT */
+}
+
+
+static void
+sqlite_free (void *arg)
+{
+  struct Lisp_Sqlite *ptr = (struct Lisp_Sqlite *)arg;
+  if (ptr->is_statement)
+    sqlite3_finalize (ptr->stmt);
+  else if (ptr->db)
+    sqlite3_close (ptr->db);
+  xfree (ptr->name);
+  xfree (ptr);
+}
+
+static Lisp_Object
+encode_string (Lisp_Object string)
+{
+  if (STRING_MULTIBYTE (string))
+    return encode_string_utf_8 (string, Qnil, 0, Qt, Qt);
+  else
+    return string;
+}
+
+static Lisp_Object
+make_sqlite (bool is_statement, void *db, void *stmt, char *name)
+{
+  struct Lisp_Sqlite *ptr
+    = ALLOCATE_PLAIN_PSEUDOVECTOR (struct Lisp_Sqlite, PVEC_SQLITE);
+  ptr->is_statement = is_statement;
+  ptr->finalizer = sqlite_free;
+  ptr->db = db;
+  ptr->name = name;
+  ptr->stmt = stmt;
+  ptr->eof = false;
+  return make_lisp_ptr (ptr, Lisp_Vectorlike);
+}
+
+static void
+check_sqlite (Lisp_Object db, bool is_statement)
+{
+  init_sqlite_functions ();
+  CHECK_SQLITE (db);
+  if (is_statement && !XSQLITE (db)->is_statement)
+    xsignal1 (Qerror, build_string ("Invalid set object"));
+  else if (!is_statement && XSQLITE (db)->is_statement)
+    xsignal1 (Qerror, build_string ("Invalid database object"));
+  if (!is_statement && !XSQLITE (db)->db)
+    xsignal1 (Qerror, build_string ("Database closed"));
+  else if (is_statement && !XSQLITE (db)->db)
+    xsignal1 (Qerror, build_string ("Statement closed"));
+}
+
+static int db_count = 0;
+
+DEFUN ("sqlite-open", Fsqlite_open, Ssqlite_open, 0, 1, 0,
+       doc: /* Open FILE as an sqlite database.
+If FILE is nil, an in-memory database will be opened instead.  */)
+  (Lisp_Object file)
+{
+  char *name;
+  if (!init_sqlite_functions ())
+    xsignal1 (Qerror, build_string ("sqlite support is not available"));
+
+  if (!NILP (file))
+    {
+      CHECK_STRING (file);
+      file = ENCODE_FILE (Fexpand_file_name (file, Qnil));
+      name = xstrdup (SSDATA (file));
+    }
+  else
+    /* In-memory database.  These have to have different names to
+       refer to different databases.  */
+    name = xstrdup (SSDATA (CALLN (Fformat, build_string (":memory:%d"),
+                                  make_int (++db_count))));
+
+  sqlite3 *sdb;
+  int ret = sqlite3_open_v2 (name,
+                            &sdb,
+                            SQLITE_OPEN_FULLMUTEX
+                            | SQLITE_OPEN_READWRITE
+                            | SQLITE_OPEN_CREATE
+                            | (NILP (file) ? SQLITE_OPEN_MEMORY : 0)
+#ifdef SQLITE_OPEN_URI
+                            | SQLITE_OPEN_URI
+#endif
+                            | 0, NULL);
+
+  if (ret != SQLITE_OK)
+    return Qnil;
+
+  return make_sqlite (false, sdb, NULL, name);
+}
+
+DEFUN ("sqlite-close", Fsqlite_close, Ssqlite_close, 1, 1, 0,
+       doc: /* Close the sqlite database DB.  */)
+  (Lisp_Object db)
+{
+  check_sqlite (db, false);
+  sqlite3_close (XSQLITE (db)->db);
+  XSQLITE (db)->db = NULL;
+  return Qt;
+}
+
+/* Bind values in a statement like
+   "insert into foo values (?, ?, ?)".  */
+static const char *
+bind_values (sqlite3 *db, sqlite3_stmt *stmt, Lisp_Object values)
+{
+  sqlite3_reset (stmt);
+  int len;
+  if (VECTORP (values))
+    len = ASIZE (values);
+  else
+    len = list_length (values);
+
+  for (int i = 0; i < len; ++i)
+    {
+      int ret = SQLITE_MISMATCH;
+      Lisp_Object value;
+      if (VECTORP (values))
+       value = AREF (values, i);
+      else
+       {
+         value = XCAR (values);
+         values = XCDR (values);
+       }
+      Lisp_Object type = Ftype_of (value);
+
+      if (EQ (type, Qstring))
+       {
+         Lisp_Object encoded = encode_string (value);
+         ret = sqlite3_bind_text (stmt, i + 1,
+                                  SSDATA (encoded), SBYTES (encoded),
+                                  NULL);
+       }
+      else if (EQ (type, Qinteger))
+       {
+         if (BIGNUMP (value))
+           ret = sqlite3_bind_int64 (stmt, i + 1, bignum_to_intmax (value));
+         else
+           ret = sqlite3_bind_int64 (stmt, i + 1, XFIXNUM (value));
+       }
+      else if (EQ (type, Qfloat))
+       ret = sqlite3_bind_double (stmt, i + 1, XFLOAT_DATA (value));
+      else if (NILP (value))
+       ret = sqlite3_bind_null (stmt, i + 1);
+      else if (EQ (value, Qt))
+       ret = sqlite3_bind_int (stmt, i + 1, 1);
+      else if (EQ (value, Qfalse))
+       ret = sqlite3_bind_int (stmt, i + 1, 0);
+      else
+       return "invalid argument";
+
+      if (ret != SQLITE_OK)
+       return sqlite3_errmsg (db);
+    }
+
+  return NULL;
+}
+
+DEFUN ("sqlite-execute", Fsqlite_execute, Ssqlite_execute, 2, 3, 0,
+       doc: /* Execute a non-select SQL statement.
+If VALUES is non-nil, it should be a vector or a list of values
+to bind when executing a statement like
+
+   insert into foo values (?, ?, ...)
+
+Value is the number of affected rows.  */)
+  (Lisp_Object db, Lisp_Object query, Lisp_Object values)
+{
+  check_sqlite (db, false);
+  CHECK_STRING (query);
+  if (!(NILP (values) || CONSP (values) || VECTORP (values)))
+    xsignal1 (Qerror, build_string ("VALUES must be a list or a vector"));
+
+  sqlite3 *sdb = XSQLITE (db)->db;
+  Lisp_Object retval = Qnil;
+  const char *errmsg = NULL;
+  Lisp_Object encoded = encode_string (query);
+  sqlite3_stmt *stmt = NULL;
+
+  /* We only execute the first statement -- if there's several
+     (separated by a semicolon), the subsequent statements won't be
+     done.  */
+  int ret = sqlite3_prepare_v2 (sdb, SSDATA (encoded), -1, &stmt, NULL);
+  if (ret != SQLITE_OK)
+    {
+      if (stmt != NULL)
+       {
+         sqlite3_finalize (stmt);
+         sqlite3_reset (stmt);
+       }
+
+      errmsg = sqlite3_errmsg (sdb);
+      goto exit;
+    }
+
+  /* Bind ? values.  */
+  if (!NILP (values)) {
+    const char *err = bind_values (sdb, stmt, values);
+    if (err != NULL)
+      {
+       errmsg = err;
+       goto exit;
+      }
+  }
+
+  ret = sqlite3_step (stmt);
+  sqlite3_finalize (stmt);
+  if (ret != SQLITE_OK && ret != SQLITE_DONE)
+    {
+      errmsg = sqlite3_errmsg (sdb);
+      goto exit;
+    }
+
+  retval = make_fixnum (sqlite3_changes (sdb));
+
+ exit:
+  if (errmsg != NULL)
+    xsignal1 (ret == SQLITE_LOCKED || ret == SQLITE_BUSY?
+             Qsqlite_locked_error: Qerror,
+             build_string (errmsg));
+
+  return retval;
+}
+
+static Lisp_Object
+row_to_value (sqlite3_stmt *stmt)
+{
+  int len = sqlite3_column_count (stmt);
+  Lisp_Object values = Qnil;
+
+  for (int i = 0; i < len; ++i)
+    {
+      Lisp_Object v = Qnil;
+
+      switch (sqlite3_column_type (stmt, i))
+       {
+       case SQLITE_INTEGER:
+         v = make_int (sqlite3_column_int64 (stmt, i));
+         break;
+
+       case SQLITE_FLOAT:
+         v = make_float (sqlite3_column_double (stmt, i));
+         break;
+
+       case SQLITE_BLOB:
+         v =
+           code_convert_string_norecord
+           (make_unibyte_string (sqlite3_column_blob (stmt, i),
+                                 sqlite3_column_bytes (stmt, i)),
+            Qutf_8, false);
+         break;
+
+       case SQLITE_NULL:
+         v = Qnil;
+         break;
+
+       case SQLITE_TEXT:
+         v =
+           code_convert_string_norecord
+           (make_unibyte_string ((const char *)sqlite3_column_text (stmt, i),
+                                 sqlite3_column_bytes (stmt, i)),
+            Qutf_8, false);
+         break;
+       }
+
+      values = Fcons (v, values);
+    }
+
+  return Fnreverse (values);
+}
+
+static Lisp_Object
+column_names (sqlite3_stmt *stmt)
+{
+  Lisp_Object columns = Qnil;
+  int count = sqlite3_column_count (stmt);
+  for (int i = 0; i < count; ++i)
+    columns = Fcons (build_string (sqlite3_column_name (stmt, i)), columns);
+
+  return Fnreverse (columns);
+}
+
+DEFUN ("sqlite-select", Fsqlite_select, Ssqlite_select, 2, 4, 0,
+       doc: /* Select data from the database DB that matches QUERY.
+If VALUES is non-nil, it should be a list or a vector specifying the
+values that will be interpolated into a parameterized statement.
+
+By default, the return value is a list where the first element is a
+list of column names, and the rest of the elements are the matching data.
+
+RETURN-TYPE can be either nil (which means that the matching data
+should be returned as a list of rows), or `full' (the same, but the
+first element in the return list will be the column names), or `set',
+which means that we return a set object that can be queried with
+`sqlite-next' and other functions to get the data.  */)
+  (Lisp_Object db, Lisp_Object query, Lisp_Object values,
+   Lisp_Object return_type)
+{
+  check_sqlite (db, false);
+  CHECK_STRING (query);
+
+  if (!(NILP (values) || CONSP (values) || VECTORP (values)))
+    xsignal1 (Qerror, build_string ("VALUES must be a list or a vector"));
+
+  sqlite3 *sdb = XSQLITE (db)->db;
+  Lisp_Object retval = Qnil;
+  const char *errmsg = NULL;
+  Lisp_Object encoded = encode_string (query);
+
+  sqlite3_stmt *stmt = NULL;
+  int ret = sqlite3_prepare_v2 (sdb, SSDATA (encoded), SBYTES (encoded),
+                               &stmt, NULL);
+  if (ret != SQLITE_OK)
+    {
+      if (stmt)
+       sqlite3_finalize (stmt);
+
+      goto exit;
+    }
+
+  /* Query with parameters.  */
+  if (!NILP (values))
+    {
+      const char *err = bind_values (sdb, stmt, values);
+      if (err != NULL)
+       {
+         sqlite3_finalize (stmt);
+         errmsg = err;
+         goto exit;
+       }
+    }
+
+  /* Return a handle to get the data.  */
+  if (EQ (return_type, Qset))
+    {
+      retval = make_sqlite (true, sdb, stmt, XSQLITE (db)->name);
+      goto exit;
+    }
+
+  /* Return the data directly.  */
+  Lisp_Object data = Qnil;
+  while ((ret = sqlite3_step (stmt)) == SQLITE_ROW)
+    data = Fcons (row_to_value (stmt), data);
+
+  if (EQ (return_type, Qfull))
+    retval = Fcons (column_names (stmt), Fnreverse (data));
+  else
+    retval = Fnreverse (data);
+  sqlite3_finalize (stmt);
+
+ exit:
+  if (errmsg != NULL)
+    xsignal1 (Qerror, build_string (errmsg));
+
+  return retval;
+}
+
+static Lisp_Object
+sqlite_exec (sqlite3 *sdb, const char *query)
+{
+  int ret = sqlite3_exec (sdb, query, NULL, NULL, NULL);
+  if (ret != SQLITE_OK)
+    return Qnil;
+
+  return Qt;
+}
+
+DEFUN ("sqlite-transaction", Fsqlite_transaction, Ssqlite_transaction, 1, 1, 0,
+       doc: /* Start a transaction in DB.  */)
+  (Lisp_Object db)
+{
+  check_sqlite (db, false);
+  return sqlite_exec (XSQLITE (db)->db, "begin");
+}
+
+DEFUN ("sqlite-commit", Fsqlite_commit, Ssqlite_commit, 1, 1, 0,
+       doc: /* Commit a transaction in DB.  */)
+  (Lisp_Object db)
+{
+  check_sqlite (db, false);
+  return sqlite_exec (XSQLITE (db)->db, "commit");
+}
+
+DEFUN ("sqlite-rollback", Fsqlite_rollback, Ssqlite_rollback, 1, 1, 0,
+       doc: /* Roll back a transaction in DB.  */)
+  (Lisp_Object db)
+{
+  check_sqlite (db, false);
+  return sqlite_exec (XSQLITE (db)->db, "rollback");
+}
+
+DEFUN ("sqlite-pragma", Fsqlite_pragma, Ssqlite_pragma, 2, 2, 0,
+       doc: /* Execute PRAGMA in DB.  */)
+  (Lisp_Object db, Lisp_Object pragma)
+{
+  check_sqlite (db, false);
+  CHECK_STRING (pragma);
+
+  return sqlite_exec (XSQLITE (db)->db,
+                     SSDATA (concat2 (build_string ("PRAGMA "), pragma)));
+}
+
+#ifdef HAVE_SQLITE3_LOAD_EXTENSION
+DEFUN ("sqlite-load-extension", Fsqlite_load_extension,
+       Ssqlite_load_extension, 2, 2, 0,
+       doc: /* Load an SQlite MODULE into DB.
+MODULE should be the name of an SQlite module's file, a
+shared library in the system-dependent format and having a
+system-dependent file-name extension.
+
+Only modules on Emacs' list of allowed modules can be loaded.  */)
+  (Lisp_Object db, Lisp_Object module)
+{
+  check_sqlite (db, false);
+  CHECK_STRING (module);
+
+  /* Add names of useful and free modules here.  */
+  const char *allowlist[3] = { "pcre", "csvtable", NULL };
+  char *name = SSDATA (Ffile_name_nondirectory (module));
+  /* Possibly skip past a common prefix.  */
+  const char *prefix = "libsqlite3_mod_";
+  if (!strncmp (name, prefix, strlen (prefix)))
+    name += strlen (prefix);
+
+  bool do_allow = false;
+  for (const char **allow = allowlist; *allow; allow++)
+    {
+      if (strlen (*allow) < strlen (name)
+         && !strncmp (*allow, name, strlen (*allow))
+         && (!strcmp (name + strlen (*allow), ".so")
+             || !strcmp (name + strlen (*allow), ".DLL")))
+       {
+         do_allow = true;
+         break;
+       }
+    }
+
+  if (!do_allow)
+    xsignal (Qerror, build_string ("Module name not on allowlist"));
+
+  int result = sqlite3_load_extension
+                      (XSQLITE (db)->db,
+                       SSDATA (ENCODE_FILE (Fexpand_file_name (module, Qnil))),
+                       NULL, NULL);
+  if (result ==  SQLITE_OK)
+    return Qt;
+  return Qnil;
+}
+#endif /* HAVE_SQLITE3_LOAD_EXTENSION */
+
+DEFUN ("sqlite-next", Fsqlite_next, Ssqlite_next, 1, 1, 0,
+       doc: /* Return the next result set from SET.  */)
+  (Lisp_Object set)
+{
+  check_sqlite (set, true);
+
+  int ret = sqlite3_step (XSQLITE (set)->stmt);
+  if (ret != SQLITE_ROW && ret != SQLITE_OK && ret != SQLITE_DONE)
+    xsignal1 (Qerror, build_string (sqlite3_errmsg (XSQLITE (set)->db)));
+
+  if (ret == SQLITE_DONE)
+    {
+      XSQLITE (set)->eof = true;
+      return Qnil;
+    }
+
+  return row_to_value (XSQLITE (set)->stmt);
+}
+
+DEFUN ("sqlite-columns", Fsqlite_columns, Ssqlite_columns, 1, 1, 0,
+       doc: /* Return the column names of SET.  */)
+  (Lisp_Object set)
+{
+  check_sqlite (set, true);
+  return column_names (XSQLITE (set)->stmt);
+}
+
+DEFUN ("sqlite-more-p", Fsqlite_more_p, Ssqlite_more_p, 1, 1, 0,
+       doc: /* Say whether there are any further results in SET.  */)
+  (Lisp_Object set)
+{
+  check_sqlite (set, true);
+
+  if (XSQLITE (set)->eof)
+    return Qnil;
+  else
+    return Qt;
+}
+
+DEFUN ("sqlite-finalize", Fsqlite_finalize, Ssqlite_finalize, 1, 1, 0,
+       doc: /* Mark this SET as being finished.
+This will free the resources held by SET.  */)
+  (Lisp_Object set)
+{
+  check_sqlite (set, true);
+  sqlite3_finalize (XSQLITE (set)->stmt);
+  XSQLITE (set)->db = NULL;
+  return Qt;
+}
+
+#endif /* HAVE_SQLITE3 */
+
+DEFUN ("sqlitep", Fsqlitep, Ssqlitep, 1, 1, 0,
+       doc: /* Say whether OBJECT is an SQlite object.  */)
+  (Lisp_Object object)
+{
+#ifdef HAVE_SQLITE3
+  return SQLITE (object)? Qt: Qnil;
+#else
+  return Qnil;
+#endif
+}
+
+DEFUN ("sqlite-available-p", Fsqlite_available_p, Ssqlite_available_p, 0, 0, 0,
+       doc: /* Return t if sqlite3 support is available in this instance of 
Emacs.*/)
+  (void)
+{
+#ifdef HAVE_SQLITE3
+# ifdef WINDOWSNT
+  Lisp_Object found = Fassq (Qsqlite3, Vlibrary_cache);
+  if (CONSP (found))
+    return XCDR (found);
+  else
+    return init_sqlite_functions () ? Qt : Qnil;
+# else
+  return Qt;
+#endif
+#else
+  return Qnil;
+#endif
+}
+
+void
+syms_of_sqlite (void)
+{
+#ifdef HAVE_SQLITE3
+  defsubr (&Ssqlite_open);
+  defsubr (&Ssqlite_close);
+  defsubr (&Ssqlite_execute);
+  defsubr (&Ssqlite_select);
+  defsubr (&Ssqlite_transaction);
+  defsubr (&Ssqlite_commit);
+  defsubr (&Ssqlite_rollback);
+  defsubr (&Ssqlite_pragma);
+#ifdef HAVE_SQLITE3_LOAD_EXTENSION
+  defsubr (&Ssqlite_load_extension);
+#endif
+  defsubr (&Ssqlite_next);
+  defsubr (&Ssqlite_columns);
+  defsubr (&Ssqlite_more_p);
+  defsubr (&Ssqlite_finalize);
+  DEFSYM (Qset, "set");
+  DEFSYM (Qfull, "full");
+#endif
+  defsubr (&Ssqlitep);
+  defsubr (&Ssqlite_available_p);
+
+  DEFSYM (Qsqlite_locked_error, "sqlite-locked-error");
+  Fput (Qsqlite_locked_error, Qerror_conditions,
+       Fpurecopy (list2 (Qsqlite_locked_error, Qerror)));
+  Fput (Qsqlite_locked_error, Qerror_message,
+       build_pure_c_string ("Database locked"));
+
+  DEFSYM (Qsqlitep, "sqlitep");
+  DEFSYM (Qfalse, "false");
+  DEFSYM (Qsqlite, "sqlite");
+  DEFSYM (Qsqlite3, "sqlite3");
+}
diff --git a/src/syntax.c b/src/syntax.c
index 057a4c3b1f..9df878b8ed 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-2021 Free
+   Copyright (C) 1985, 1987, 1993-1995, 1997-1999, 2001-2022 Free
    Software Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/syntax.h b/src/syntax.h
index 66ee139a96..c1bb9274d0 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-2021 Free Software
+Copyright (C) 1985, 1993-1994, 1997-1998, 2001-2022 Free Software
 Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/sysdep.c b/src/sysdep.c
index 5e13dd097e..d682e87cc7 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-2021 Free Software
+   Copyright (C) 1985-1988, 1993-1995, 1999-2022 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/sysselect.h b/src/sysselect.h
index 017c02b77f..45cc22bc4c 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1995, 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/syssignal.h b/src/syssignal.h
index 285a3c548b..07055c04be 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1993, 1999, 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/sysstdio.h b/src/sysstdio.h
index d6ebfb455f..5bcfe7d8a5 100644
--- a/src/sysstdio.h
+++ b/src/sysstdio.h
@@ -1,6 +1,6 @@
 /* Standard I/O for Emacs.
 
-Copyright 2013-2021 Free Software Foundation, Inc.
+Copyright 2013-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/systhread.c b/src/systhread.c
index c68853caca..08afa7e583 100644
--- a/src/systhread.c
+++ b/src/systhread.c
@@ -1,5 +1,5 @@
 /* System thread definitions
-Copyright (C) 2012-2021 Free Software Foundation, Inc.
+Copyright (C) 2012-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/systhread.h b/src/systhread.h
index 601505f4f8..fb1a0a72d6 100644
--- a/src/systhread.h
+++ b/src/systhread.h
@@ -1,5 +1,5 @@
 /* System thread definitions
-Copyright (C) 2012-2021 Free Software Foundation, Inc.
+Copyright (C) 2012-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/systime.h b/src/systime.h
index 08ab5bdde3..f3b1b2394d 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1993-1994, 2002-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -80,8 +80,7 @@ struct lisp_time
   /* Clock count as a Lisp integer.  */
   Lisp_Object ticks;
 
-  /* Clock frequency (ticks per second) as a positive Lisp integer.
-     (TICKS . HZ) is a valid Lisp timestamp unless HZ < 65536.  */
+  /* Clock frequency (ticks per second) as a positive Lisp integer.  */
   Lisp_Object hz;
 };
 
diff --git a/src/systty.h b/src/systty.h
index c19b4b35f1..3a8fffe25f 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1993-1994, 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/syswait.h b/src/syswait.h
index 42e8c40854..61c4364fe3 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1993-1995, 2000-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/term.c b/src/term.c
index 8e106e7c63..4c7a90a577 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-2021 Free Software
+   Copyright (C) 1985-1987, 1993-1995, 1998, 2000-2022 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/termcap.c b/src/termcap.c
index 227dbeb7d9..5afa8ae9de 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-2021 Free
+   Copyright (C) 1985-1986, 1993-1995, 2000-2008, 2011, 2013-2022 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 7ab9337fbe..49560dbc2a 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1985-1986, 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/termhooks.h b/src/termhooks.h
index 1cf9863f3a..518e855eae 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-2021 Free Software Foundation,
+Copyright (C) 1985-1986, 1993-1994, 2001-2022 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
@@ -61,6 +61,7 @@ enum output_method
   output_msdos_raw,
   output_w32,
   output_ns,
+  output_pgtk,
   output_haiku
 };
 
@@ -267,6 +268,44 @@ enum event_kind
   /* File or directory was changed.  */
   , FILE_NOTIFY_EVENT
 #endif
+
+  /* Pre-edit text was changed. */
+  , PREEDIT_TEXT_EVENT
+
+  /* Either the mouse wheel has been released without it being
+     clicked, or the user has lifted his finger from a touchpad.
+
+     In the future, this may take into account other multi-touch
+     events generated from touchscreens and such.  */
+  , TOUCH_END_EVENT
+
+  /* In a TOUCHSCREEN_UPDATE_EVENT, ARG is a list of elements of the
+     form (X Y ID), where X and Y are the coordinates of the
+     touchpoint relative to the top-left corner of the frame, and ID
+     is a unique number identifying the touchpoint.
+
+     In TOUCHSCREEN_BEGIN_EVENT and TOUCHSCREEN_END_EVENT, ARG is the
+     unique ID of the touchpoint, and X and Y are the frame-relative
+     positions of the touchpoint.  */
+
+  , TOUCHSCREEN_UPDATE_EVENT
+  , TOUCHSCREEN_BEGIN_EVENT
+  , TOUCHSCREEN_END_EVENT
+
+  /* In a PINCH_EVENT, X and Y are the position of the pointer
+     relative to the top-left corner of the frame, and arg is a list
+     of (DX DY SCALE ANGLE), in which:
+
+       - DX and DY are the difference between the positions of the
+         fingers comprising the current gesture and the last such
+         gesture in the same sequence.
+       - SCALE is the division of the current distance between the
+         fingers and the distance at the start of the gesture.
+       - DELTA-ANGLE is the delta between the angle of the current
+         event and the last event in the same sequence, in degrees.  A
+         positive delta represents a change clockwise, and a negative
+         delta represents a change counter-clockwise.  */
+  , PINCH_EVENT
 };
 
 /* Bit width of an enum event_kind tag at the start of structs and unions.  */
@@ -447,6 +486,7 @@ struct terminal
     struct x_display_info *x;         /* xterm.h */
     struct w32_display_info *w32;     /* w32term.h */
     struct ns_display_info *ns;       /* nsterm.h */
+    struct pgtk_display_info *pgtk; /* pgtkterm.h */
     struct haiku_display_info *haiku; /* haikuterm.h */
   } display_info;
 
@@ -521,7 +561,7 @@ struct terminal
      BGCOLOR.  */
   void (*query_frame_background_color) (struct frame *f, Emacs_Color *bgcolor);
 
-#if defined (HAVE_X_WINDOWS) || defined (HAVE_NTGUI)
+#if defined (HAVE_X_WINDOWS) || defined (HAVE_NTGUI) || defined (HAVE_PGTK)
   /* On frame F, translate pixel colors to RGB values for the NCOLORS
      colors in COLORS.  Use cached information, if available.  */
 
@@ -836,6 +876,9 @@ extern struct terminal *terminal_list;
 #elif defined (HAVE_NS)
 #define TERMINAL_FONT_CACHE(t)                                         \
   (t->type == output_ns ? t->display_info.ns->name_list_element : Qnil)
+#elif defined (HAVE_PGTK)
+#define TERMINAL_FONT_CACHE(t)                                         \
+  (t->type == output_pgtk ? t->display_info.pgtk->name_list_element : Qnil)
 #elif defined (HAVE_HAIKU)
 #define TERMINAL_FONT_CACHE(t)                                         \
   (t->type == output_haiku ? t->display_info.haiku->name_list_element : Qnil)
diff --git a/src/terminal.c b/src/terminal.c
index b5f244ee31..3db80f4b1f 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -1,5 +1,5 @@
 /* Functions related to terminal devices.
-   Copyright (C) 2005-2021 Free Software Foundation, Inc.
+   Copyright (C) 2005-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -445,6 +445,8 @@ possible return values.  */)
       return Qpc;
     case output_ns:
       return Qns;
+    case output_pgtk:
+      return Qpgtk;
     case output_haiku:
       return Qhaiku;
     default:
diff --git a/src/terminfo.c b/src/terminfo.c
index a9c9572bbb..1a7b38d7d9 100644
--- a/src/terminfo.c
+++ b/src/terminfo.c
@@ -1,5 +1,5 @@
 /* Interface from Emacs to terminfo.
-   Copyright (C) 1985-1986, 2001-2021 Free Software Foundation, Inc.
+   Copyright (C) 1985-1986, 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/termopts.h b/src/termopts.h
index 0a3dfa092f..ff1be13245 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-2021 Free Software Foundation,
+   Copyright (C) 1985-1986, 1990, 2001-2022 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/textprop.c b/src/textprop.c
index d7d6a66923..2d1e34d586 100644
--- a/src/textprop.c
+++ b/src/textprop.c
@@ -1,5 +1,5 @@
 /* Interface code for dealing with text properties.
-   Copyright (C) 1993-1995, 1997, 1999-2021 Free Software Foundation,
+   Copyright (C) 1993-1995, 1997, 1999-2022 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/thread.c b/src/thread.c
index 714b1cd903..bfcac91982 100644
--- a/src/thread.c
+++ b/src/thread.c
@@ -1,5 +1,5 @@
 /* Threading code.
-Copyright (C) 2012-2021 Free Software Foundation, Inc.
+Copyright (C) 2012-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/thread.h b/src/thread.h
index cf3ce922c4..1e7eb86f6e 100644
--- a/src/thread.h
+++ b/src/thread.h
@@ -1,5 +1,5 @@
 /* Thread definitions
-Copyright (C) 2012-2021 Free Software Foundation, Inc.
+Copyright (C) 2012-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -26,6 +26,7 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 #endif
 
 #ifdef MSDOS
+#include <time.h>               /* struct rpl_timespec */
 #include <signal.h>            /* sigset_t */
 #endif
 
diff --git a/src/timefns.c b/src/timefns.c
index a9921cdc10..f73c69149f 100644
--- a/src/timefns.c
+++ b/src/timefns.c
@@ -1,6 +1,6 @@
 /* Timestamp functions for Emacs
 
-Copyright (C) 1985-1987, 1989, 1993-2021 Free Software Foundation, Inc.
+Copyright (C) 1985-1987, 1989, 1993-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -69,16 +69,6 @@ enum { TM_YEAR_BASE = 1900 };
 # define FASTER_TIMEFNS 1
 #endif
 
-/* Whether to warn about Lisp timestamps (TICKS . HZ) that may be
-   instances of obsolete-format timestamps (HI . LO) where HI is
-   the high-order bits and LO the low-order 16 bits.  Currently this
-   is true, but it should change to false in a future version of
-   Emacs.  Compile with -DWARN_OBSOLETE_TIMESTAMPS=0 to see what the
-   future will be like.  */
-#ifndef WARN_OBSOLETE_TIMESTAMPS
-enum { WARN_OBSOLETE_TIMESTAMPS = true };
-#endif
-
 /* Although current-time etc. generate list-format timestamps
    (HI LO US PS), the plan is to change these functions to generate
    frequency-based timestamps (TICKS . HZ) in a future release.
@@ -817,14 +807,10 @@ decode_time_components (enum timeform form,
   return decode_ticks_hz (make_integer_mpz (), hz, result, dresult);
 }
 
-enum { DECODE_SECS_ONLY = WARN_OBSOLETE_TIMESTAMPS + 1 };
-
 /* Decode a Lisp timestamp SPECIFIED_TIME that represents a time.
 
-   FLAGS specifies conversion flags.  If FLAGS & DECODE_SECS_ONLY,
-   ignore and do not validate any sub-second components of an
-   old-format SPECIFIED_TIME.  If FLAGS & WARN_OBSOLETE_TIMESTAMPS,
-   diagnose what could be obsolete (HIGH . LOW) timestamps.
+   If DECODE_SECS_ONLY, ignore and do not validate any sub-second
+   components of an old-format SPECIFIED_TIME.
 
    If RESULT is not null, store into *RESULT the converted time;
    otherwise, store into *DRESULT the number of seconds since the
@@ -833,7 +819,7 @@ enum { DECODE_SECS_ONLY = WARN_OBSOLETE_TIMESTAMPS + 1 };
 
    Return the form of SPECIFIED-TIME.  Signal an error if unsuccessful.  */
 static enum timeform
-decode_lisp_time (Lisp_Object specified_time, int flags,
+decode_lisp_time (Lisp_Object specified_time, bool decode_secs_only,
                  struct lisp_time *result, double *dresult)
 {
   Lisp_Object high = make_fixnum (0);
@@ -854,7 +840,7 @@ decode_lisp_time (Lisp_Object specified_time, int flags,
        {
          Lisp_Object low_tail = XCDR (low);
          low = XCAR (low);
-         if (! (flags & DECODE_SECS_ONLY))
+         if (! decode_secs_only)
            {
              if (CONSP (low_tail))
                {
@@ -877,9 +863,6 @@ decode_lisp_time (Lisp_Object specified_time, int flags,
        }
       else
        {
-         if (flags & WARN_OBSOLETE_TIMESTAMPS
-             && RANGED_FIXNUMP (0, low, (1 << LO_TIME_BITS) - 1))
-           message ("obsolete timestamp with cdr %"pI"d", XFIXNUM (low));
          form = TIMEFORM_TICKS_HZ;
        }
 
@@ -1008,8 +991,7 @@ static struct lisp_time
 lisp_time_struct (Lisp_Object specified_time, enum timeform *pform)
 {
   struct lisp_time t;
-  enum timeform form
-    = decode_lisp_time (specified_time, WARN_OBSOLETE_TIMESTAMPS, &t, 0);
+  enum timeform form = decode_lisp_time (specified_time, false, &t, 0);
   if (pform)
     *pform = form;
   return t;
@@ -1034,9 +1016,8 @@ lisp_time_argument (Lisp_Object specified_time)
 static time_t
 lisp_seconds_argument (Lisp_Object specified_time)
 {
-  int flags = WARN_OBSOLETE_TIMESTAMPS | DECODE_SECS_ONLY;
   struct lisp_time lt;
-  decode_lisp_time (specified_time, flags, &lt, 0);
+  decode_lisp_time (specified_time, true, &lt, 0);
   struct timespec t = lisp_to_timespec (lt);
   if (! timespec_valid_p (t))
     time_overflow ();
@@ -1138,24 +1119,6 @@ time_arith (Lisp_Object a, Lisp_Object b, bool subtract)
       mpz_t *ihz = &mpz[0];
       mpz_mul (*ihz, *fa, *db);
 
-      /* When warning about obsolete timestamps, if the smaller
-        denominator comes from a non-(TICKS . HZ) timestamp and could
-        generate a (TICKS . HZ) timestamp that would look obsolete,
-        arrange for the result to have a higher HZ to avoid a
-        spurious warning by a later consumer of this function's
-        returned value.  */
-      verify (1 << LO_TIME_BITS <= ULONG_MAX);
-      if (WARN_OBSOLETE_TIMESTAMPS
-         && (da_lt_db ? aform : bform) == TIMEFORM_FLOAT
-         && (da_lt_db ? bform : aform) != TIMEFORM_TICKS_HZ
-         && mpz_cmp_ui (*hzmin, 1) > 0
-         && mpz_cmp_ui (*hzmin, 1 << LO_TIME_BITS) < 0)
-       {
-         mpz_t *hzmin1 = &mpz[2 - da_lt_db];
-         mpz_set_ui (*hzmin1, 1 << LO_TIME_BITS);
-         hzmin = hzmin1;
-       }
-
       /* iticks = (fb * na) OP (fa * nb), where OP is + or -.  */
       mpz_t const *na = bignum_integer (iticks, ta.ticks);
       mpz_mul (*iticks, *fb, *na);
@@ -1177,8 +1140,7 @@ time_arith (Lisp_Object a, Lisp_Object b, bool subtract)
             upwards by multiplying the normalized numerator and denominator
             so that the resulting denominator becomes at least hzmin.
             This rescaling avoids returning a timestamp that is less precise
-            than both a and b, or a timestamp that looks obsolete when that
-            might be a problem.  */
+            than both a and b.  */
          if (!FASTER_TIMEFNS || mpz_cmp (*ihz, *hzmin) < 0)
            {
              /* Rescale straightforwardly.  Although this might not
@@ -1303,7 +1265,7 @@ or (if you need time as a string) `format-time-string'.  
*/)
   (Lisp_Object specified_time)
 {
   double t;
-  decode_lisp_time (specified_time, 0, 0, &t);
+  decode_lisp_time (specified_time, false, 0, &t);
   return make_float (t);
 }
 
@@ -1422,8 +1384,9 @@ without consideration for daylight saving time.
 The value is a copy of FORMAT-STRING, but with certain constructs replaced
 by text that describes the specified date and time in TIME:
 
-%Y is the year, %y within the century, %C the century.
-%G is the year corresponding to the ISO week, %g within the century.
+%Y is the year, %y year without century, %C the century.
+%G is the year corresponding to the ISO week, %g year corresponding
+ to the ISO week, without century.
 %m is the numeric month.
 %b and %h are the locale's abbreviated month name, %B the full name.
  (%h is not supported on MS-Windows.)
@@ -1431,7 +1394,7 @@ by text that describes the specified date and time in 
TIME:
 %u is the numeric day of week from 1 (Monday) to 7, %w from 0 (Sunday) to 6.
 %a is the locale's abbreviated name of the day of week, %A the full name.
 %U is the week number starting on Sunday, %W starting on Monday,
- %V according to ISO 8601.
+ %V the week number according to ISO 8601.
 %j is the day of the year.
 
 %H is the hour on a 24-hour clock, %I is on a 12-hour clock, %k is like %H
@@ -1651,12 +1614,11 @@ saving flag to be guessed.
 
 As an obsolescent calling convention, if this function is called with
 6 or more arguments, the first 6 arguments are SECOND, MINUTE, HOUR,
-DAY, MONTH, and YEAR, and specify the components of a decoded time,
-where DST assumed to be -1 and FORM is omitted.  If there are more
-than 6 arguments the *last* argument is used as ZONE and any other
-extra arguments are ignored, so that (apply #\\='encode-time
-(decode-time ...)) works.  In this obsolescent convention, DST and
-ZONE default to -1 and nil respectively.
+DAY, MONTH, and YEAR, and specify the components of a decoded time.
+If there are more than 6 arguments the *last* argument is used as ZONE
+and any other extra arguments are ignored, so that (apply
+#\\='encode-time (decode-time ...)) works.  In this obsolescent
+convention, DST and ZONE default to -1 and nil respectively.
 
 Years before 1970 are not guaranteed to work.  On some systems,
 year values as low as 1901 do work.
@@ -1703,7 +1665,7 @@ usage: (encode-time TIME &rest OBSOLESCENT-ARGUMENTS)  */)
 
   /* Let SEC = floor (LT.ticks / HZ), with SUBSECTICKS the remainder.  */
   struct lisp_time lt;
-  decode_lisp_time (secarg, 0, &lt, 0);
+  decode_lisp_time (secarg, false, &lt, 0);
   Lisp_Object hz = lt.hz, sec, subsecticks;
   if (FASTER_TIMEFNS && EQ (hz, make_fixnum (1)))
     {
@@ -1756,9 +1718,7 @@ Truncate the returned value toward minus infinity.
 If FORM is nil (the default), return the same form as `current-time'.
 If FORM is a positive integer, return a pair of integers (TICKS . FORM),
 where TICKS is the number of clock ticks and FORM is the clock frequency
-in ticks per second.  (Currently the positive integer should be at least
-65536 if the returned value is expected to be given to standard functions
-expecting Lisp timestamps.)  If FORM is t, return (TICKS . PHZ), where
+in ticks per second.  If FORM is t, return (TICKS . PHZ), where
 PHZ is a suitable clock frequency in ticks per second.  If FORM is
 `integer', return an integer count of seconds.  If FORM is `list',
 return an integer list (HIGH LOW USEC PSEC), where HIGH has the most
@@ -1767,7 +1727,7 @@ bits, and USEC and PSEC are the microsecond and 
picosecond counts.  */)
      (Lisp_Object time, Lisp_Object form)
 {
   struct lisp_time t;
-  enum timeform input_form = decode_lisp_time (time, 0, &t, 0);
+  enum timeform input_form = decode_lisp_time (time, false, &t, 0);
   if (NILP (form))
     form = CURRENT_TIME_LIST ? Qlist : Qt;
   if (EQ (form, Qlist))
diff --git a/src/tparam.c b/src/tparam.c
index c89a9bde9a..89483ed52a 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-2021 Free
+   Copyright (C) 1985, 1987, 1993, 1995, 2000-2008, 2013-2022 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 893c3cac12..6361f138ea 100644
--- a/src/tparam.h
+++ b/src/tparam.h
@@ -1,6 +1,6 @@
 /* Interface definitions for termcap entries.
 
-Copyright (C) 2011-2021 Free Software Foundation, Inc.
+Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/undo.c b/src/undo.c
index 2db401ebc7..5d705945c4 100644
--- a/src/undo.c
+++ b/src/undo.c
@@ -1,5 +1,5 @@
 /* undo handling for GNU Emacs.
-   Copyright (C) 1990, 1993-1994, 2000-2021 Free Software Foundation,
+   Copyright (C) 1990, 1993-1994, 2000-2022 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/unexaix.c b/src/unexaix.c
index 949750f493..457c754304 100644
--- a/src/unexaix.c
+++ b/src/unexaix.c
@@ -1,5 +1,5 @@
 /* Dump an executable file.
-   Copyright (C) 1985-1988, 1999, 2001-2021 Free Software Foundation,
+   Copyright (C) 1985-1988, 1999, 2001-2022 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/unexcoff.c b/src/unexcoff.c
index c4b2f6ebea..337754f6d4 100644
--- a/src/unexcoff.c
+++ b/src/unexcoff.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1985-1988, 1992-1994, 2001-2021 Free Software
+/* Copyright (C) 1985-1988, 1992-1994, 2001-2022 Free Software
  * Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/unexcw.c b/src/unexcw.c
index 157e9f4560..d1099bb205 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2004-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/unexelf.c b/src/unexelf.c
index b5cded5cfd..e61bdd4e88 100644
--- a/src/unexelf.c
+++ b/src/unexelf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1985-1988, 1990, 1992, 1999-2021 Free Software
+/* Copyright (C) 1985-1988, 1990, 1992, 1999-2022 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/unexmacosx.c b/src/unexmacosx.c
index f226f1b6c1..be1ef43e62 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/unexw32.c b/src/unexw32.c
index 1c60e3da0e..fe76b37a05 100644
--- a/src/unexw32.c
+++ b/src/unexw32.c
@@ -1,5 +1,5 @@
 /* unexec for GNU Emacs on Windows NT.
-   Copyright (C) 1994, 2001-2021 Free Software Foundation, Inc.
+   Copyright (C) 1994, 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/verbose.mk.in b/src/verbose.mk.in
index 9252971acc..e3f5678303 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 Free Software Foundation, Inc.
+## Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 ## This file is part of GNU Emacs.
 
@@ -33,26 +33,26 @@ AM_V_GLOBALS =
 AM_V_NO_PD =
 AM_V_RC =
 else
-AM_V_AR = @echo "  AR      " $@;
+AM_V_AR      = @$(info $   AR       $@)
 AM_V_at = @
-AM_V_CC = @echo "  CC      " $@;
-AM_V_CXX = @echo "  CXX     " $@;
-AM_V_CCLD = @echo "  CCLD    " $@;
-AM_V_CXXLD = @echo "  CXXLD   " $@;
+AM_V_CC      = @$(info $   CC       $@)
+AM_V_CXX     = @$(info $   CXX      $@)
+AM_V_CCLD    = @$(info $   CCLD     $@)
+AM_V_CXXLD   = @$(info $   CXXLD    $@)
 ifeq ($(HAVE_NATIVE_COMP),yes)
 ifeq ($(NATIVE_DISABLED),1)
-AM_V_ELC = @echo "  ELC     " $@;
+AM_V_ELC     = @$(info $   ELC      $@)
 AM_V_ELN =
 else
-AM_V_ELC = @echo "  ELC+ELN " $@;
-AM_V_ELN = @echo "  ELN " $@;
+AM_V_ELC     = @$(info $   ELC+ELN  $@)
+AM_V_ELN     = @$(info $   ELN      $@)
 endif
 else
-AM_V_ELC = @echo "  ELC     " $@;
+AM_V_ELC     = @$(info $   ELC      $@)
 AM_V_ELN =
 endif
-AM_V_GEN = @echo "  GEN     " $@;
-AM_V_GLOBALS = @echo "  GEN     " globals.h;
+AM_V_GEN     = @$(info $   GEN      $@)
+AM_V_GLOBALS = @$(info $   GEN      globals.h)
 AM_V_NO_PD = --no-print-directory
-AM_V_RC = @echo "  RC      " $@;
+AM_V_RC      = @$(info $   RC       $@)
 endif
diff --git a/src/vm-limit.c b/src/vm-limit.c
index e0547651bb..043ea96d15 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1990, 1992, 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w16select.c b/src/w16select.c
index bbd2ed4bb9..f6bc3dd8d4 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1996-1997, 2001-2022 Free Software Foundation, Inc.
 
 Author: Dale P. Smith <dpsm@en.com>
 
diff --git a/src/w32.c b/src/w32.c
index 2b2f8aadf6..0dc874eac4 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1994-1995, 2000-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -8548,7 +8548,7 @@ fcntl (int s, int cmd, int options)
 int
 sys_close (int fd)
 {
-  int rc;
+  int rc = -1;
 
   if (fd < 0)
     {
@@ -8603,14 +8603,31 @@ sys_close (int fd)
        }
     }
 
-  if (fd >= 0 && fd < MAXDESC)
-    fd_info[fd].flags = 0;
-
   /* Note that sockets do not need special treatment here (at least on
      NT and Windows 95 using the standard tcp/ip stacks) - it appears that
      closesocket is equivalent to CloseHandle, which is to be expected
      because socket handles are fully fledged kernel handles. */
-  rc = _close (fd);
+  if (fd < MAXDESC)
+    {
+      if ((fd_info[fd].flags & FILE_DONT_CLOSE) == 0)
+       {
+         fd_info[fd].flags = 0;
+         rc = _close (fd);
+       }
+      else
+       {
+         /* We don't close here descriptors open by pipe processes
+            for reading from the pipe, because the reader thread
+            might be stuck in _sys_read_ahead, and then we will hang
+            here.  If the reader thread exits normally, it will close
+            the descriptor; otherwise we will leave a zombie thread
+            hanging around.  */
+         rc = 0;
+         /* Leave the flag set for the reader thread to close the
+            descriptor.  */
+         fd_info[fd].flags = FILE_DONT_CLOSE;
+       }
+    }
 
   return rc;
 }
@@ -10898,6 +10915,7 @@ register_aux_fd (int infd)
     }
   fd_info[ infd ].cp = cp;
   fd_info[ infd ].hnd = (HANDLE) _get_osfhandle (infd);
+  fd_info[ infd ].flags |= FILE_DONT_CLOSE;
 }
 
 #ifdef HAVE_GNUTLS
diff --git a/src/w32.h b/src/w32.h
index b31d66646c..4941170bdc 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1994, 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -135,6 +135,7 @@ extern filedesc fd_info [ MAXDESC ];
 #define FILE_SOCKET             0x0200
 #define FILE_NDELAY             0x0400
 #define FILE_SERIAL             0x0800
+#define FILE_DONT_CLOSE         0x1000
 
 extern child_process * new_child (void);
 extern void delete_child (child_process *cp);
diff --git a/src/w32common.h b/src/w32common.h
index 6493b9c88d..6b9c2c08dd 100644
--- a/src/w32common.h
+++ b/src/w32common.h
@@ -1,5 +1,5 @@
 /* Common functions for Microsoft Windows builds of Emacs
-   Copyright (C) 2012-2021 Free Software Foundation, Inc.
+   Copyright (C) 2012-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32console.c b/src/w32console.c
index 99546c2d75..12e1f39789 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1992, 1999, 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32cygwinx.c b/src/w32cygwinx.c
index b58febc4e0..bb2539be94 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2018-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32fns.c b/src/w32fns.c
index c1686beaaa..37f9b813c6 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1989, 1992-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -5173,6 +5173,13 @@ w32_wnd_proc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM 
lParam)
       my_post_msg (&wmsg, hwnd, msg, wParam, lParam);
       goto dflt;
 
+    case WM_SETTINGCHANGE:
+      /* Inform the Lisp thread that some system-wide setting has
+        changed, so if Emacs is interested in some of them, it could
+        update its internal values.  */
+      my_post_msg (&wmsg, hwnd, msg, wParam, lParam);
+      goto dflt;
+
     case WM_SETFOCUS:
       dpyinfo->faked_key = 0;
       reset_modifiers ();
@@ -7518,7 +7525,8 @@ DEFUN ("x-show-tip", Fx_show_tip, Sx_show_tip, 1, 6, 0,
   try_window (window, pos, TRY_WINDOW_IGNORE_FONTS_CHANGE);
   /* Calculate size of tooltip window.  */
   size = Fwindow_text_pixel_size (window, Qnil, Qnil, Qnil,
-                                 make_fixnum (w->pixel_height), Qnil);
+                                 make_fixnum (w->pixel_height), Qnil,
+                                 Qnil);
   /* Add the frame's internal border to calculated size.  */
   width = XFIXNUM (Fcar (size)) + 2 * FRAME_INTERNAL_BORDER_WIDTH (tip_f);
   height = XFIXNUM (Fcdr (size)) + 2 * FRAME_INTERNAL_BORDER_WIDTH (tip_f);
diff --git a/src/w32font.c b/src/w32font.c
index 2d09f459f8..0495099db5 100644
--- a/src/w32font.c
+++ b/src/w32font.c
@@ -1,5 +1,5 @@
 /* Font backend for the Microsoft Windows API.
-   Copyright (C) 2007-2021 Free Software Foundation, Inc.
+   Copyright (C) 2007-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32font.h b/src/w32font.h
index cf2bf3c242..9fd4a6c187 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2007-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32gui.h b/src/w32gui.h
index d2c34bd00a..4e8de84854 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1995, 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32heap.c b/src/w32heap.c
index a0d4c070be..675162447d 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1994, 2001-2022 Free Software Foundation, Inc.
 
    This file is part of GNU Emacs.
 
diff --git a/src/w32heap.h b/src/w32heap.h
index 0b34f8a356..764fc48a4e 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1994, 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32image.c b/src/w32image.c
index cc1a6eba22..f3374dcfd3 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2020-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32inevt.c b/src/w32inevt.c
index 4cc01d31c9..6a1d9afacf 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-2021 Free Software Foundation,
+   Copyright (C) 1992-1993, 1995, 2001-2022 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/w32inevt.h b/src/w32inevt.h
index f0097716f3..e5b2581430 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1995, 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32menu.c b/src/w32menu.c
index 3bf7666394..42e27babbc 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-2021 Free
+   Copyright (C) 1986, 1988, 1993-1994, 1996, 1998-1999, 2001-2022 Free
    Software Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/w32notify.c b/src/w32notify.c
index 889fd9f3c9..e7d2f0f076 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2012-2022 Free Software Foundation, Inc.
 
 Author: Eli Zaretskii <eliz@gnu.org>
 
diff --git a/src/w32proc.c b/src/w32proc.c
index 360f45e9e1..781a19f480 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1992, 1995, 1999-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -1206,6 +1206,7 @@ static DWORD WINAPI
 reader_thread (void *arg)
 {
   child_process *cp;
+  int fd;
 
   /* Our identity */
   cp = (child_process *)arg;
@@ -1220,12 +1221,13 @@ reader_thread (void *arg)
     {
       int rc;
 
-      if (cp->fd >= 0 && (fd_info[cp->fd].flags & FILE_CONNECT) != 0)
-       rc = _sys_wait_connect (cp->fd);
-      else if (cp->fd >= 0 && (fd_info[cp->fd].flags & FILE_LISTEN) != 0)
-       rc = _sys_wait_accept (cp->fd);
+      fd = cp->fd;
+      if (fd >= 0 && (fd_info[fd].flags & FILE_CONNECT) != 0)
+       rc = _sys_wait_connect (fd);
+      else if (fd >= 0 && (fd_info[fd].flags & FILE_LISTEN) != 0)
+       rc = _sys_wait_accept (fd);
       else
-       rc = _sys_read_ahead (cp->fd);
+       rc = _sys_read_ahead (fd);
 
       /* Don't bother waiting for the event if we already have been
         told to exit by delete_child.  */
@@ -1238,7 +1240,7 @@ reader_thread (void *arg)
         {
          DebPrint (("reader_thread.SetEvent(0x%x) failed with %lu for fd %ld 
(PID %d)\n",
                     (DWORD_PTR)cp->char_avail, GetLastError (),
-                    cp->fd, cp->pid));
+                    fd, cp->pid));
          return 1;
        }
 
@@ -1266,6 +1268,13 @@ reader_thread (void *arg)
       if (cp->status == STATUS_READ_ERROR)
        break;
     }
+  /* If this thread was reading from a pipe process, close the
+     descriptor used for reading, as sys_close doesn't in that case.  */
+  if (fd_info[fd].flags == FILE_DONT_CLOSE)
+    {
+      fd_info[fd].flags = 0;
+      _close (fd);
+    }
   return 0;
 }
 
diff --git a/src/w32reg.c b/src/w32reg.c
index 9794162bd0..30cf4ab5ec 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1990, 1993-1994, 2001-2022 Free Software Foundation, Inc.
 
 Author: Kevin Gallo
 
diff --git a/src/w32select.c b/src/w32select.c
index f19b85a2ae..eae1a0bac0 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1993-1994, 2001-2022 Free Software Foundation, Inc.
 
 Author: Kevin Gallo
        Benjamin Riefenstahl
diff --git a/src/w32select.h b/src/w32select.h
index 7ed8696ea9..db707036d0 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1993-1994, 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32term.c b/src/w32term.c
index 07a5cd3564..78777f153c 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1989, 1993-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -164,6 +164,10 @@ int last_scroll_bar_drag_pos;
 /* Keyboard code page - may be changed by language-change events.  */
 int w32_keyboard_codepage;
 
+/* The number of screen lines to scroll for the default mouse-wheel
+   scroll amount, given by WHEEL_DELTA.  */
+static UINT w32_wheel_scroll_lines;
+
 #ifdef CYGWIN
 int w32_message_fd = -1;
 #endif /* CYGWIN */
@@ -271,6 +275,19 @@ XGetGCValues (void *ignore, XGCValues *gc,
 }
 #endif
 
+static void
+w32_get_mouse_wheel_vertical_delta (void)
+{
+  if (os_subtype != OS_SUBTYPE_NT)
+    return;
+
+  UINT scroll_lines;
+  BOOL ret = SystemParametersInfo (SPI_GETWHEELSCROLLLINES, 0,
+                                  &scroll_lines, 0);
+  if (ret)
+    w32_wheel_scroll_lines = scroll_lines;
+}
+
 static void
 w32_set_clip_rectangle (HDC hdc, RECT *rect)
 {
@@ -2523,6 +2540,10 @@ w32_draw_glyph_string (struct glyph_string *s)
 
   if (!s->for_overlaps)
     {
+      /* Draw relief if not yet drawn.  */
+      if (!relief_drawn_p && s->face->box != FACE_NO_BOX)
+        w32_draw_glyph_string_box (s);
+
       /* Draw underline.  */
       if (s->face->underline)
         {
@@ -2543,7 +2564,11 @@ w32_draw_glyph_string (struct glyph_string *s)
               int y;
 
               if (s->prev
-                 && s->prev->face->underline == FACE_UNDER_LINE)
+                 && s->prev->face->underline == FACE_UNDER_LINE
+                 && (s->prev->face->underline_at_descent_line_p
+                     == s->face->underline_at_descent_line_p)
+                 && (s->prev->face->underline_pixels_above_descent_line
+                     == s->face->underline_pixels_above_descent_line))
                 {
                   /* We use the same underline style as the previous one.  */
                   thickness = s->prev->underline_thickness;
@@ -2566,7 +2591,8 @@ w32_draw_glyph_string (struct glyph_string *s)
                  val = (WINDOW_BUFFER_LOCAL_VALUE
                         (Qx_underline_at_descent_line, s->w));
                  underline_at_descent_line
-                   = !(NILP (val) || EQ (val, Qunbound));
+                   = (!(NILP (val) || EQ (val, Qunbound))
+                      || s->face->underline_at_descent_line_p);
 
                  val = (WINDOW_BUFFER_LOCAL_VALUE
                         (Qx_use_underline_position_properties, s->w));
@@ -2580,7 +2606,9 @@ w32_draw_glyph_string (struct glyph_string *s)
                     thickness = 1;
                   if (underline_at_descent_line
                       || !font)
-                    position = (s->height - thickness) - (s->ybase - s->y);
+                   position = ((s->height - thickness)
+                               - (s->ybase - s->y)
+                               - s->face->underline_pixels_above_descent_line);
                   else
                     {
                       /* Get the underline position.  This is the
@@ -2598,7 +2626,12 @@ w32_draw_glyph_string (struct glyph_string *s)
                       else
                         position = (font->descent + 1) / 2;
                     }
-                  position = max (position, minimum_offset);
+
+                 if (!(s->face->underline_at_descent_line_p
+                       /* Ignore minimum_offset if the amount of pixels
+                          was explictly specified.  */
+                       && s->face->underline_pixels_above_descent_line))
+                   position = max (position, minimum_offset);
                 }
               /* Check the sanity of thickness and position.  We should
                  avoid drawing underline out of the current line area.  */
@@ -2666,10 +2699,6 @@ w32_draw_glyph_string (struct glyph_string *s)
             }
         }
 
-      /* Draw relief if not yet drawn.  */
-      if (!relief_drawn_p && s->face->box != FACE_NO_BOX)
-        w32_draw_glyph_string_box (s);
-
       if (s->prev)
         {
           struct glyph_string *prev;
@@ -3203,32 +3232,94 @@ w32_construct_mouse_wheel (struct input_event *result, 
W32Msg *msg,
 {
   POINT p;
   int delta;
+  static int sum_delta_y = 0;
 
   result->kind = msg->msg.message == WM_MOUSEHWHEEL ? HORIZ_WHEEL_EVENT
                                                     : WHEEL_EVENT;
   result->code = 0;
   result->timestamp = msg->msg.time;
+  result->arg = Qnil;
 
   /* A WHEEL_DELTA positive value indicates that the wheel was rotated
      forward, away from the user (up); a negative value indicates that
      the wheel was rotated backward, toward the user (down).  */
   delta = GET_WHEEL_DELTA_WPARAM (msg->msg.wParam);
+  if (delta == 0)
+    {
+      result->kind = NO_EVENT;
+      return Qnil;
+    }
+
+  /* With multiple monitors, we can legitimately get negative
+     coordinates, so cast to short to interpret them correctly.  */
+  p.x = (short) LOWORD (msg->msg.lParam);
+  p.y = (short) HIWORD (msg->msg.lParam);
+
+  if (eabs (delta) < WHEEL_DELTA)
+    {
+      /* This is high-precision mouse wheel, which sends
+        fine-resolution wheel events.  Produce a wheel event only if
+        the conditions for sending such an event are fulfilled.  */
+      int scroll_unit = max (w32_wheel_scroll_lines, 1), nlines;
+      double value_to_report;
+
+      /* w32_wheel_scroll_lines == UINT_MAX means the user asked for
+        "entire page" to be the scroll unit.  We interpret that as
+        the height of the window under the mouse pointer.  */
+      if (w32_wheel_scroll_lines == UINT_MAX)
+       {
+         Lisp_Object window = window_from_coordinates (f, p.x, p.y, NULL,
+                                                       false, false);
+         if (!WINDOWP (window))
+           {
+             result->kind = NO_EVENT;
+             return Qnil;
+           }
+         scroll_unit = XWINDOW (window)->pixel_height;
+         if (scroll_unit < 1)  /* paranoia */
+           scroll_unit = 1;
+       }
+
+      /* If mwheel-coalesce-scroll-events is non-nil, report a wheel event
+        only when we have accumulated enough delta's for WHEEL_DELTA.  */
+      if (mwheel_coalesce_scroll_events)
+       {
+         /* If the user changed the direction, reset the accumulated
+            deltas. */
+         if ((delta > 0) != (sum_delta_y > 0))
+           sum_delta_y = 0;
+         sum_delta_y += delta;
+         /* 
https://docs.microsoft.com/en-us/previous-versions/ms997498(v=msdn.10) */
+         if (eabs (sum_delta_y) < WHEEL_DELTA)
+           {
+             result->kind = NO_EVENT;
+             return Qnil;
+           }
+         value_to_report =
+           ((double)FRAME_LINE_HEIGHT (f) * scroll_unit)
+           / ((double)WHEEL_DELTA / sum_delta_y);
+         sum_delta_y = 0;
+       }
+      else
+       value_to_report =
+           ((double)FRAME_LINE_HEIGHT (f) * scroll_unit)
+           / ((double)WHEEL_DELTA / delta);
+      nlines = value_to_report / FRAME_LINE_HEIGHT (f) + 0.5;
+      result->arg = list3 (make_fixnum (nlines),
+                          make_float (0.0),
+                          make_float (value_to_report));
+    }
 
   /* The up and down modifiers indicate if the wheel was rotated up or
      down based on WHEEL_DELTA value.  */
   result->modifiers = (msg->dwModifiers
                        | ((delta < 0 ) ? down_modifier : up_modifier));
 
-  /* With multiple monitors, we can legitimately get negative
-     coordinates, so cast to short to interpret them correctly.  */
-  p.x = (short) LOWORD (msg->msg.lParam);
-  p.y = (short) HIWORD (msg->msg.lParam);
   /* For the case that F's w32 window is not msg->msg.hwnd.  */
   ScreenToClient (FRAME_W32_WINDOW (f), &p);
   XSETINT (result->x, p.x);
   XSETINT (result->y, p.y);
   XSETFRAME (result->frame_or_window, f);
-  result->arg = Qnil;
   return Qnil;
 }
 
@@ -4905,6 +4996,14 @@ w32_read_socket (struct terminal *terminal,
            }
          break;
 
+       case WM_SETTINGCHANGE:
+         /* We are only interested in changes of the number of lines
+            to scroll when the vertical mouse wheel is moved.  This
+            is only supported on NT.  */
+         if (msg.msg.wParam == SPI_SETWHEELSCROLLLINES)
+           w32_get_mouse_wheel_vertical_delta ();
+         break;
+
        case WM_KEYDOWN:
        case WM_SYSKEYDOWN:
          f = w32_window_to_frame (dpyinfo, msg.msg.hwnd);
@@ -7522,6 +7621,8 @@ w32_initialize (void)
     horizontal_scroll_bar_left_border = horizontal_scroll_bar_right_border
       = GetSystemMetrics (SM_CYHSCROLL);
   }
+
+  w32_get_mouse_wheel_vertical_delta ();
 }
 
 void
diff --git a/src/w32term.h b/src/w32term.h
index 160be35782..6c48323651 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1995, 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32uniscribe.c b/src/w32uniscribe.c
index 0df1ff298f..7c772b68f6 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2008-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/w32xfns.c b/src/w32xfns.c
index 712214b591..d5974b906e 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-2021 Free Software
+   Copyright (C) 1989, 1992-1995, 1999, 2001-2022 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/src/widget.c b/src/widget.c
index dd43fd1c46..c13ec50498 100644
--- a/src/widget.c
+++ b/src/widget.c
@@ -1,5 +1,5 @@
 /* The emacs frame widget.
-   Copyright (C) 1992-1993, 2000-2021 Free Software Foundation, Inc.
+   Copyright (C) 1992-1993, 2000-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/widget.h b/src/widget.h
index 105bc6646d..dbf21a64cb 100644
--- a/src/widget.h
+++ b/src/widget.h
@@ -1,5 +1,5 @@
 /* The emacs frame widget public header file.
-   Copyright (C) 1993, 2001-2021 Free Software Foundation, Inc.
+   Copyright (C) 1993, 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/widgetprv.h b/src/widgetprv.h
index 58620a05b2..960f814e16 100644
--- a/src/widgetprv.h
+++ b/src/widgetprv.h
@@ -1,5 +1,5 @@
 /* The emacs frame widget private header file.
-   Copyright (C) 1993, 2001-2021 Free Software Foundation, Inc.
+   Copyright (C) 1993, 2001-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/window.c b/src/window.c
index e801ff821f..7155f0e6bc 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-2021 Free Software
+   Copyright (C) 1985-1987, 1993-1998, 2000-2022 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -6307,10 +6307,12 @@ followed by all visible frames on the current terminal. 
 */)
       if (NILP (window))
        window = display_buffer (Vother_window_scroll_buffer, Qt, Qnil);
     }
+  else if (FUNCTIONP (Vother_window_scroll_default))
+    /* Nothing specified; try to get a window from the function.  */
+    window = call0 (Vother_window_scroll_default);
   else
     {
-      /* Nothing specified; look for a neighboring window on the same
-        frame.  */
+      /* Otherwise, look for a neighboring window on the same frame.  */
       window = Fnext_window (selected_window, Qlambda, Qnil);
 
       if (EQ (window, selected_window))
@@ -8268,6 +8270,14 @@ is displayed in the `mode-line' face.  */);
               doc: /* If this is a live buffer, \\[scroll-other-window] should 
scroll its window.  */);
   Vother_window_scroll_buffer = Qnil;
 
+  DEFVAR_LISP ("other-window-scroll-default", Vother_window_scroll_default,
+              doc: /* Function that provides the window to scroll by 
\\[scroll-other-window].
+The function `other-window-for-scrolling' first tries to use
+`minibuffer-scroll-window' and `other-window-scroll-buffer'.
+But when both are nil, then by default it uses a neighboring window.
+This variable is intended to get another default instead of `next-window'.  
*/);
+  Vother_window_scroll_default = Qnil;
+
   DEFVAR_BOOL ("auto-window-vscroll", auto_window_vscroll_p,
               doc: /* Non-nil means to automatically adjust `window-vscroll' 
to view tall lines.  */);
   auto_window_vscroll_p = true;
diff --git a/src/window.h b/src/window.h
index 2400c422c1..141c29e810 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-2021 Free Software
+   Copyright (C) 1985-1986, 1993, 1995, 1997-2022 Free Software
    Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -756,7 +756,7 @@ wset_next_buffers (struct window *w, Lisp_Object val)
 #endif
 
 /* True if W is a tab bar window.  */
-#if defined (HAVE_WINDOW_SYSTEM)
+#if defined (HAVE_WINDOW_SYSTEM) && !defined (HAVE_PGTK)
 # define WINDOW_TAB_BAR_P(W) \
    (WINDOWP (WINDOW_XFRAME (W)->tab_bar_window) \
     && (W) == XWINDOW (WINDOW_XFRAME (W)->tab_bar_window))
diff --git a/src/xdisp.c b/src/xdisp.c
index 24049ab4e3..2326df4300 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -1,6 +1,6 @@
 /* Display generation from window structure and buffer text.
 
-Copyright (C) 1985-1988, 1993-1995, 1997-2021 Free Software Foundation,
+Copyright (C) 1985-1988, 1993-1995, 1997-2022 Free Software Foundation,
 Inc.
 
 This file is part of GNU Emacs.
@@ -5209,9 +5209,8 @@ find_display_property (Lisp_Object disp, Lisp_Object prop)
     return Qnil;
 }
 
-static
-Lisp_Object get_display_property (ptrdiff_t bufpos, Lisp_Object prop,
-                                 Lisp_Object object)
+static Lisp_Object
+get_display_property (ptrdiff_t bufpos, Lisp_Object prop, Lisp_Object object)
 {
   return find_display_property (Fget_text_property (make_fixnum (bufpos),
                                                    Qdisplay, object),
@@ -5361,12 +5360,13 @@ handle_display_prop (struct it *it)
   if (!it->string_from_display_prop_p)
     it->area = TEXT_AREA;
 
-  if (!STRINGP (it->string))
-    object = it->w->contents;
-
   propval = get_char_property_and_overlay (make_fixnum (position->charpos),
                                           Qdisplay, object, &overlay);
 
+  /* Rest of the code must have OBJECT be either a string or a buffer.  */
+  if (!STRINGP (it->string))
+    object = it->w->contents;
+
   /* Handle min-width ends. */
   if (!NILP (it->min_width_property)
       && NILP (find_display_property (propval, Qmin_width)))
@@ -5822,8 +5822,15 @@ handle_single_display_spec (struct it *it, Lisp_Object 
spec, Lisp_Object object,
          if (CONSP (XCDR (XCDR (spec))))
            {
              Lisp_Object face_name = XCAR (XCDR (XCDR (spec)));
-             int face_id2 = lookup_derived_face (it->w, it->f, face_name,
-                                                 FRINGE_FACE_ID, false);
+             int face_id2;
+             /* Don't allow quitting from lookup_derived_face, for when
+                we are displaying a non-selected window, and the buffer's
+                point was temporarily moved to the window-point.  */
+             ptrdiff_t count1 = SPECPDL_INDEX ();
+             specbind (Qinhibit_quit, Qt);
+             face_id2 = lookup_derived_face (it->w, it->f, face_name,
+                                             FRINGE_FACE_ID, false);
+             unbind_to (count1, Qnil);
              if (face_id2 >= 0)
                face_id = face_id2;
            }
@@ -6822,6 +6829,27 @@ iterate_out_of_display_property (struct it *it)
     it->current.string_pos = it->position;
 }
 
+/* Restore the IT->face_box_p flag, since it could have been
+   overwritten by the face of the object that we just finished
+   displaying.  Also, set the IT->start_of_box_run_p flag if the
+   change in faces requires that.  */
+static void
+restore_face_box_flags (struct it *it, int prev_face_id)
+{
+  struct face *face = FACE_FROM_ID_OR_NULL (it->f, it->face_id);
+
+  if (face)
+    {
+      struct face *prev_face = FACE_FROM_ID_OR_NULL (it->f, prev_face_id);
+
+      if (!(it->start_of_box_run_p && prev_face && prev_face->box))
+       it->start_of_box_run_p = (face->box != FACE_NO_BOX
+                                 && (prev_face == NULL
+                                     || prev_face->box == FACE_NO_BOX));
+      it->face_box_p = face->box != FACE_NO_BOX;
+    }
+}
+
 /* Restore IT's settings from IT->stack.  Called, for example, when no
    more overlay strings must be processed, and we return to delivering
    display elements from a buffer, or when the end of a string from a
@@ -6834,6 +6862,7 @@ pop_it (struct it *it)
   struct iterator_stack_entry *p;
   bool from_display_prop = it->from_disp_prop_p;
   ptrdiff_t prev_pos = IT_CHARPOS (*it);
+  int prev_face_id = it->face_id;
 
   eassert (it->sp > 0);
   --it->sp;
@@ -6865,25 +6894,13 @@ pop_it (struct it *it)
       break;
     case GET_FROM_BUFFER:
       {
-       struct face *face = FACE_FROM_ID_OR_NULL (it->f, it->face_id);
-
-       /* Restore the face_box_p flag, since it could have been
-          overwritten by the face of the object that we just finished
-          displaying.  */
-       if (face)
-         it->face_box_p = face->box != FACE_NO_BOX;
+       restore_face_box_flags (it, prev_face_id);
        it->object = it->w->contents;
       }
       break;
     case GET_FROM_STRING:
       {
-       struct face *face = FACE_FROM_ID_OR_NULL (it->f, it->face_id);
-
-       /* Restore the face_box_p flag, since it could have been
-          overwritten by the face of the object that we just finished
-          displaying.  */
-       if (face)
-         it->face_box_p = face->box != FACE_NO_BOX;
+       restore_face_box_flags (it, prev_face_id);
        it->object = it->string;
       }
       break;
@@ -10416,11 +10433,12 @@ move_it_to (struct it *it, ptrdiff_t to_charpos, int 
to_x, int to_y, int to_vpos
 
 /* Move iterator IT backward by a specified y-distance DY, DY >= 0.
 
-   If DY > 0, move IT backward at least that many pixels.  DY = 0
-   means move IT backward to the preceding line start or BEGV.  This
-   function may move over more than DY pixels if IT->current_y - DY
-   ends up in the middle of a line; in this case IT->current_y will be
-   set to the top of the line moved to.  */
+   If DY > 0, move IT backward that many pixels.
+   DY = 0 means move IT backward to the preceding line start or to BEGV.
+   This function may move over less or more than DY pixels if
+   IT->current_y - DY ends up in the middle of a line; in this case
+   IT->current_y will be set to the top of the line either before or
+   after the exact pixel coordinate.  */
 
 void
 move_it_vertically_backward (struct it *it, int dy)
@@ -10824,15 +10842,16 @@ in_display_vector_p (struct it *it)
    set WINDOW's buffer to the buffer specified by its BUFFER_OR_NAME
    argument.  */
 static Lisp_Object
-window_text_pixel_size (Lisp_Object window, Lisp_Object from, Lisp_Object to, 
Lisp_Object x_limit,
-                       Lisp_Object y_limit, Lisp_Object mode_lines)
+window_text_pixel_size (Lisp_Object window, Lisp_Object from, Lisp_Object to,
+                       Lisp_Object x_limit, Lisp_Object y_limit,
+                       Lisp_Object mode_lines, Lisp_Object ignore_line_at_end)
 {
   struct window *w = decode_live_window (window);
   struct it it;
   ptrdiff_t start, end, bpos;
   struct text_pos startp;
   void *itdata = NULL;
-  int c, max_x = 0, max_y = 0, x = 0, y = 0;
+  int c, max_x = 0, max_y = 0, x = 0, y = 0, vertical_offset = 0, doff = 0;
 
   if (NILP (from))
     {
@@ -10858,6 +10877,13 @@ window_text_pixel_size (Lisp_Object window, 
Lisp_Object from, Lisp_Object to, Li
            break;
        }
     }
+  else if (CONSP (from))
+    {
+      start = clip_to_bounds (BEGV, fix_position (XCAR (from)), ZV);
+      bpos = CHAR_TO_BYTE (start);
+      CHECK_FIXNUM (XCDR (from));
+      vertical_offset = XFIXNUM (XCDR (from));
+    }
   else
     {
       start = clip_to_bounds (BEGV, fix_position (from), ZV);
@@ -10904,7 +10930,9 @@ window_text_pixel_size (Lisp_Object window, Lisp_Object 
from, Lisp_Object to, Li
 
   itdata = bidi_shelve_cache ();
   start_display (&it, w, startp);
+
   int start_y = it.current_y;
+
   /* It makes no sense to measure dimensions of region of text that
      crosses the point where bidi reordering changes scan direction.
      By using unidirectional movement here we at least support the use
@@ -10913,13 +10941,50 @@ window_text_pixel_size (Lisp_Object window, 
Lisp_Object from, Lisp_Object to, Li
      same directionality.  */
   it.bidi_p = false;
 
-  /* Start at the beginning of the line containing FROM.  Otherwise
-     IT.current_x will be incorrectly set to zero at some arbitrary
-     non-zero X coordinate.  */
-  reseat_at_previous_visible_line_start (&it);
-  it.current_x = it.hpos = 0;
-  if (IT_CHARPOS (it) != start)
-    move_it_to (&it, start, -1, -1, -1, MOVE_TO_POS);
+  if (vertical_offset != 0)
+    {
+      int last_y;
+      it.current_y = 0;
+
+      move_it_by_lines (&it, 0);
+
+      /* `move_it_vertically_backward' is called by move_it_vertically
+         to move by a negative value (upwards), but it is not always
+         guaranteed to leave the iterator at or above the position
+         given by the offset, which this loop ensures.  */
+      if (vertical_offset < 0)
+       {
+         while (it.current_y > vertical_offset)
+           {
+             last_y = it.current_y;
+             move_it_vertically_backward (&it,
+                                          (abs (vertical_offset)
+                                           + it.current_y));
+
+             if (it.current_y == last_y)
+               break;
+           }
+       }
+      else
+       {
+         move_it_vertically (&it, vertical_offset);
+       }
+
+      it.current_y = (WINDOW_TAB_LINE_HEIGHT (w)
+                     + WINDOW_HEADER_LINE_HEIGHT (w));
+      start = clip_to_bounds (BEGV, IT_CHARPOS (it), ZV);
+      start_y = it.current_y;
+    }
+  else
+    {
+      /* Start at the beginning of the line containing FROM.  Otherwise
+        IT.current_x will be incorrectly set to zero at some arbitrary
+        non-zero X coordinate.  */
+      reseat_at_previous_visible_line_start (&it);
+      it.current_x = it.hpos = 0;
+      if (IT_CHARPOS (it) != start)
+       move_it_to (&it, start, -1, -1, -1, MOVE_TO_POS);
+    }
 
   /* Now move to TO.  */
   int start_x = it.current_x;
@@ -10961,8 +11026,16 @@ window_text_pixel_size (Lisp_Object window, 
Lisp_Object from, Lisp_Object to, Li
       if (IT_CHARPOS (it) == end)
        {
          x += it.pixel_width;
-         it.max_ascent = max (it.max_ascent, it.ascent);
-         it.max_descent = max (it.max_descent, it.descent);
+
+         /* DTRT if ignore_line_at_end is t.  */
+         if (!NILP (ignore_line_at_end))
+           doff = (max (it.max_ascent, it.ascent)
+                   + max (it.max_descent, it.descent));
+         else
+           {
+             it.max_ascent = max (it.max_ascent, it.ascent);
+             it.max_descent = max (it.max_descent, it.descent);
+           }
        }
     }
   else
@@ -10983,8 +11056,14 @@ window_text_pixel_size (Lisp_Object window, 
Lisp_Object from, Lisp_Object to, Li
 
   /* Subtract height of header-line and tab-line which was counted
      automatically by start_display.  */
-  y = it.current_y + it.max_ascent + it.max_descent
-    - WINDOW_TAB_LINE_HEIGHT (w) - WINDOW_HEADER_LINE_HEIGHT (w);
+  if (!NILP (ignore_line_at_end))
+    y = (it.current_y + doff
+        - WINDOW_TAB_LINE_HEIGHT (w)
+        - WINDOW_HEADER_LINE_HEIGHT (w));
+  else
+    y = (it.current_y + it.max_ascent + it.max_descent + doff
+        - WINDOW_TAB_LINE_HEIGHT (w) - WINDOW_HEADER_LINE_HEIGHT (w));
+
   /* Don't return more than Y-LIMIT.  */
   if (y > max_y)
     y = max_y;
@@ -11028,26 +11107,34 @@ window_text_pixel_size (Lisp_Object window, 
Lisp_Object from, Lisp_Object to, Li
 
   bidi_unshelve_cache (itdata, false);
 
-  return Fcons (make_fixnum (x - start_x), make_fixnum (y));
+  return (!vertical_offset
+         ? Fcons (make_fixnum (x - start_x), make_fixnum (y))
+         : list3i (x - start_x, y, start));
 }
 
-DEFUN ("window-text-pixel-size", Fwindow_text_pixel_size, 
Swindow_text_pixel_size, 0, 6, 0,
+DEFUN ("window-text-pixel-size", Fwindow_text_pixel_size, 
Swindow_text_pixel_size, 0, 7, 0,
        doc: /* Return the size of the text of WINDOW's buffer in pixels.
 WINDOW must be a live window and defaults to the selected one.  The
-return value is a cons of the maximum pixel-width of any text line
-and the pixel-height of all the text lines in the accessible portion
-of buffer text.
+return value is a cons of the maximum pixel-width of any text line and
+the pixel-height of all the text lines in the accessible portion of
+buffer text.
+
+If FROM is a cons cell, the return value includes, in addition to the
+dimensions, also a third element that provides the buffer position
+from which measuring of the text dimensions was actually started.
 
 This function exists to allow Lisp programs to adjust the dimensions
 of WINDOW to the buffer text it needs to display.
 
 The optional argument FROM, if non-nil, specifies the first text
 position to consider, and defaults to the minimum accessible position
-of the buffer.  If FROM is t, it stands for the minimum accessible
-position that starts a non-empty line.  TO, if non-nil, specifies the
-last text position and defaults to the maximum accessible position of
-the buffer.  If TO is t, it stands for the maximum accessible position
-that ends a non-empty line.
+of the buffer.  If FROM is a cons, its car specifies a buffer
+position, and its cdr specifies the vertical offset in pixels from
+that position to the first screen line to be measured.  If FROM is t,
+it stands for the minimum accessible position that starts a non-empty
+line.  TO, if non-nil, specifies the last text position and defaults
+to the maximum accessible position of the buffer.  If TO is t, it
+stands for the maximum accessible position that ends a non-empty line.
 
 The optional argument X-LIMIT, if non-nil, specifies the maximum X
 coordinate beyond which the text should be ignored.  It is therefore
@@ -11078,9 +11165,12 @@ Optional argument MODE-LINES nil or omitted means do 
not include the
 height of the mode-, tab- or header-line of WINDOW in the return value.
 If it is the symbol `mode-line', 'tab-line' or `header-line', include
 only the height of that line, if present, in the return value.  If t,
-include the height of any of these, if present, in the return value.  */)
+include the height of any of these, if present, in the return value.
+
+IGNORE-LINE-AT-END, if non-nil, means to not add the height of the
+screen line that includes TO to the returned height of the text.  */)
   (Lisp_Object window, Lisp_Object from, Lisp_Object to, Lisp_Object x_limit,
-   Lisp_Object y_limit, Lisp_Object mode_lines)
+   Lisp_Object y_limit, Lisp_Object mode_lines, Lisp_Object ignore_line_at_end)
 {
   struct window *w = decode_live_window (window);
   struct buffer *b = XBUFFER (w->contents);
@@ -11093,7 +11183,8 @@ include the height of any of these, if present, in the 
return value.  */)
       set_buffer_internal_1 (b);
     }
 
-  value = window_text_pixel_size (window, from, to, x_limit, y_limit, 
mode_lines);
+  value = window_text_pixel_size (window, from, to, x_limit, y_limit, 
mode_lines,
+                                 ignore_line_at_end);
 
   if (old_b)
     set_buffer_internal_1 (old_b);
@@ -11143,7 +11234,8 @@ WINDOW.  */)
       set_marker_both (w->old_pointm, buffer, BEG, BEG_BYTE);
     }
 
-  value = window_text_pixel_size (window, Qnil, Qnil, x_limit, y_limit, Qnil);
+  value = window_text_pixel_size (window, Qnil, Qnil, x_limit, y_limit, Qnil,
+                                 Qnil);
 
   unbind_to (count, Qnil);
 
@@ -13653,6 +13745,7 @@ display_tab_bar_line (struct it *it, int height)
      so there's no need to check the face here.  */
   it->start_of_box_run_p = true;
 
+  bool enough = false;
   while (it->current_x < max_x)
     {
       int x, n_glyphs_before, i, nglyphs;
@@ -13699,11 +13792,12 @@ display_tab_bar_line (struct it *it, int height)
          ++i;
        }
 
+      enough = ITERATOR_AT_END_OF_LINE_P (it);
+      set_iterator_to_next (it, true);
+
       /* Stop at line end.  */
-      if (ITERATOR_AT_END_OF_LINE_P (it))
+      if (enough)
        break;
-
-      set_iterator_to_next (it, true);
     }
 
  out:;
@@ -13781,9 +13875,9 @@ tab_bar_height (struct frame *f, int *n_rows, bool 
pixelwise)
                     0, 0, 0, STRING_MULTIBYTE (f->desired_tab_bar_string));
   it.paragraph_embedding = L2R;
 
+  clear_glyph_row (temp_row);
   while (!ITERATOR_AT_END_P (&it))
     {
-      clear_glyph_row (temp_row);
       it.glyph_row = temp_row;
       display_tab_bar_line (&it, -1);
     }
@@ -15906,7 +16000,7 @@ redisplay_internal (void)
   if (!fr->glyphs_initialized_p)
     return;
 
-#if defined (USE_X_TOOLKIT) || defined (USE_GTK) || defined (HAVE_NS)
+#if defined (USE_X_TOOLKIT) || (defined (USE_GTK) && !defined (HAVE_PGTK)) || 
defined (HAVE_NS)
   if (popup_activated ())
     {
       return;
@@ -17699,9 +17793,9 @@ cursor_row_fully_visible_p (struct window *w, bool 
force_p,
 
 enum
 {
-  SCROLLING_SUCCESS,
-  SCROLLING_FAILED,
-  SCROLLING_NEED_LARGER_MATRICES
+  SCROLLING_SUCCESS = 1,
+  SCROLLING_FAILED = 0,
+  SCROLLING_NEED_LARGER_MATRICES = -1
 };
 
 /* If scroll-conservatively is more than this, never recenter.
@@ -18075,13 +18169,14 @@ compute_window_start_on_continuation_line (struct 
window *w)
                     row, DEFAULT_FACE_ID);
       reseat_at_previous_visible_line_start (&it);
 
-      /* If the line start is "too far" away from the window start,
-         say it takes too much time to compute a new window start.
-         Also, give up if the line start is after point, as in that
-         case point will not be visible with any window start we
+      /* Give up (by not using the code in the block below) and say it
+         takes too much time to compute a new window start, if the
+         line start is "too far" away from the window start.  Also,
+         give up if the line start is after point, as in that case
+         point will not be visible with any window start we
          compute.  */
       if (IT_CHARPOS (it) <= PT
-         || (CHARPOS (start_pos) - IT_CHARPOS (it)
+         && (CHARPOS (start_pos) - IT_CHARPOS (it)
              /* PXW: Do we need upper bounds here?  */
              < WINDOW_TOTAL_LINES (w) * WINDOW_TOTAL_COLS (w)))
        {
@@ -22448,7 +22543,7 @@ extend_face_to_end_of_line (struct it *it)
       && face->underline == FACE_NO_UNDERLINE
       && !face->overline_p
       && !face->strike_through_p
-      && FACE_COLOR_TO_PIXEL (face->background, f) == FRAME_BACKGROUND_PIXEL 
(f)
+      && face->background == FRAME_BACKGROUND_PIXEL (f)
 #ifdef HAVE_WINDOW_SYSTEM
       && !face->stipple
 #endif
@@ -22682,7 +22777,7 @@ extend_face_to_end_of_line (struct it *it)
          && (it->glyph_row->used[LEFT_MARGIN_AREA]
              < WINDOW_LEFT_MARGIN_WIDTH (it->w))
          && !it->glyph_row->mode_line_p
-         && FACE_COLOR_TO_PIXEL (face->background, f) != 
FRAME_BACKGROUND_PIXEL (f))
+         && face->background != FRAME_BACKGROUND_PIXEL (f))
        {
          struct glyph *g = it->glyph_row->glyphs[LEFT_MARGIN_AREA];
          struct glyph *e = g + it->glyph_row->used[LEFT_MARGIN_AREA];
@@ -22753,7 +22848,7 @@ extend_face_to_end_of_line (struct it *it)
          && (it->glyph_row->used[RIGHT_MARGIN_AREA]
              < WINDOW_RIGHT_MARGIN_WIDTH (it->w))
          && !it->glyph_row->mode_line_p
-         && FACE_COLOR_TO_PIXEL (face->background, f) != 
FRAME_BACKGROUND_PIXEL (f))
+         && face->background != FRAME_BACKGROUND_PIXEL (f))
        {
          struct glyph *g = it->glyph_row->glyphs[RIGHT_MARGIN_AREA];
          struct glyph *e = g + it->glyph_row->used[RIGHT_MARGIN_AREA];
@@ -25498,6 +25593,11 @@ display_menu_bar (struct window *w)
   if (FRAME_W32_P (f))
     return;
 #endif
+#if defined (HAVE_PGTK)
+  if (FRAME_PGTK_P (f))
+    return;
+#endif
+
 #if defined (USE_X_TOOLKIT) || defined (USE_GTK)
   if (FRAME_X_P (f))
     return;
@@ -27605,6 +27705,21 @@ display_string (const char *string, Lisp_Object 
lisp_string, Lisp_Object face_st
                                   0, &endptr, it->base_face_id, false, 0);
       face = FACE_FROM_ID (it->f, it->face_id);
       it->face_box_p = face->box != FACE_NO_BOX;
+
+      /* If we have a display spec, but there's no Lisp string being
+        displayed, then check whether we've got one from the
+        :propertize being passed in and use that.  */
+      if (NILP (lisp_string))
+       {
+         Lisp_Object display = Fget_text_property (make_fixnum (0), Qdisplay,
+                                                   face_string);
+         if (!NILP (display))
+           {
+             Lisp_Object min_width = Fplist_get (display, Qmin_width);
+             if (!NILP (min_width))
+               display_min_width (it, 0, face_string, min_width);
+           }
+       }
     }
 
   /* Set max_x to the maximum allowed X position.  Don't let it go
@@ -28434,7 +28549,10 @@ fill_composite_glyph_string (struct glyph_string *s, 
struct face *base_face,
     }
 
   if (s->hl == DRAW_MOUSE_FACE
-      || (s->hl == DRAW_CURSOR && cursor_in_mouse_face_p (s->w)))
+      || (s->hl == DRAW_CURSOR
+         && MATRIX_ROW (s->w->current_matrix,
+                        s->w->phys_cursor.vpos)->mouse_face_p
+         && cursor_in_mouse_face_p (s->w)))
     {
       int c = COMPOSITION_GLYPH (s->cmp, 0);
       Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (s->f);
@@ -28483,7 +28601,10 @@ fill_gstring_glyph_string (struct glyph_string *s, int 
face_id,
   s->cmp_from = glyph->slice.cmp.from;
   s->cmp_to = glyph->slice.cmp.to + 1;
   if (s->hl == DRAW_MOUSE_FACE
-      || (s->hl == DRAW_CURSOR && cursor_in_mouse_face_p (s->w)))
+      || (s->hl == DRAW_CURSOR
+         && MATRIX_ROW (s->w->current_matrix,
+                        s->w->phys_cursor.vpos)->mouse_face_p
+         && cursor_in_mouse_face_p (s->w)))
     {
       Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (s->f);
       s->face = FACE_FROM_ID_OR_NULL (s->f, hlinfo->mouse_face_face_id);
@@ -28549,7 +28670,10 @@ fill_glyphless_glyph_string (struct glyph_string *s, 
int face_id,
   s->face = FACE_FROM_ID (s->f, face_id);
   s->font = s->face->font ? s->face->font : FRAME_FONT (s->f);
   if (s->hl == DRAW_MOUSE_FACE
-      || (s->hl == DRAW_CURSOR && cursor_in_mouse_face_p (s->w)))
+      || (s->hl == DRAW_CURSOR
+         && MATRIX_ROW (s->w->current_matrix,
+                        s->w->phys_cursor.vpos)->mouse_face_p
+         && cursor_in_mouse_face_p (s->w)))
     {
       Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (s->f);
       s->face = FACE_FROM_ID_OR_NULL (s->f, hlinfo->mouse_face_face_id);
@@ -28621,7 +28745,10 @@ fill_glyph_string (struct glyph_string *s, int face_id,
   s->font = s->face->font;
 
   if (s->hl == DRAW_MOUSE_FACE
-      || (s->hl == DRAW_CURSOR && cursor_in_mouse_face_p (s->w)))
+      || (s->hl == DRAW_CURSOR
+         && MATRIX_ROW (s->w->current_matrix,
+                        s->w->phys_cursor.vpos)->mouse_face_p
+         && cursor_in_mouse_face_p (s->w)))
     {
       Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (s->f);
       s->face = FACE_FROM_ID_OR_NULL (s->f, hlinfo->mouse_face_face_id);
@@ -28663,7 +28790,10 @@ fill_image_glyph_string (struct glyph_string *s)
   s->face = FACE_FROM_ID (s->f, s->first_glyph->face_id);
   s->font = s->face->font;
   if (s->hl == DRAW_MOUSE_FACE
-      || (s->hl == DRAW_CURSOR && cursor_in_mouse_face_p (s->w)))
+      || (s->hl == DRAW_CURSOR
+         && MATRIX_ROW (s->w->current_matrix,
+                        s->w->phys_cursor.vpos)->mouse_face_p
+         && cursor_in_mouse_face_p (s->w)))
     {
       Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (s->f);
       s->face = FACE_FROM_ID_OR_NULL (s->f, hlinfo->mouse_face_face_id);
@@ -28686,7 +28816,10 @@ fill_xwidget_glyph_string (struct glyph_string *s)
   s->face = FACE_FROM_ID (s->f, s->first_glyph->face_id);
   s->font = s->face->font;
   if (s->hl == DRAW_MOUSE_FACE
-      || (s->hl == DRAW_CURSOR && cursor_in_mouse_face_p (s->w)))
+      || (s->hl == DRAW_CURSOR
+         && MATRIX_ROW (s->w->current_matrix,
+                        s->w->phys_cursor.vpos)->mouse_face_p
+         && cursor_in_mouse_face_p (s->w)))
     {
       Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (s->f);
       s->face = FACE_FROM_ID_OR_NULL (s->f, hlinfo->mouse_face_face_id);
@@ -28720,7 +28853,10 @@ fill_stretch_glyph_string (struct glyph_string *s, int 
start, int end)
   s->face = FACE_FROM_ID (s->f, face_id);
   s->font = s->face->font;
   if (s->hl == DRAW_MOUSE_FACE
-      || (s->hl == DRAW_CURSOR && cursor_in_mouse_face_p (s->w)))
+      || (s->hl == DRAW_CURSOR
+         && MATRIX_ROW (s->w->current_matrix,
+                        s->w->phys_cursor.vpos)->mouse_face_p
+         && cursor_in_mouse_face_p (s->w)))
     {
       Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (s->f);
       s->face = FACE_FROM_ID_OR_NULL (s->f, hlinfo->mouse_face_face_id);
@@ -29007,6 +29143,8 @@ set_glyph_string_background_width (struct glyph_string 
*s, int start, int last_x
 #ifdef HAVE_WINDOW_SYSTEM
       if (FRAME_WINDOW_P (s->f)
          && s->hl == DRAW_CURSOR
+         && MATRIX_ROW (s->w->current_matrix,
+                        s->w->phys_cursor.vpos)->mouse_face_p
          && cursor_in_mouse_face_p (s->w))
        {
          /* Adjust the background width of the glyph string, because
@@ -30282,7 +30420,8 @@ produce_stretch_glyph (struct it *it)
         Compute the width of the characters having this `display'
         property.  */
       struct it it2;
-      Lisp_Object object = it->stack[it->sp - 1].string;
+      Lisp_Object object =
+       it->sp > 0 ? it->stack[it->sp - 1].string : it->string;
       unsigned char *p = (STRINGP (object)
                          ? SDATA (object) + IT_STRING_BYTEPOS (*it)
                          : BYTE_POS_ADDR (IT_BYTEPOS (*it)));
@@ -30384,7 +30523,8 @@ produce_stretch_glyph (struct it *it)
   if (width > 0 && height > 0 && it->glyph_row)
     {
       Lisp_Object o_object = it->object;
-      Lisp_Object object = it->stack[it->sp - 1].string;
+      Lisp_Object object =
+       it->sp > 0 ? it->stack[it->sp - 1].string : it->string;
       int n = width;
 
       if (!STRINGP (object))
@@ -31199,6 +31339,11 @@ gui_produce_glyphs (struct it *it)
          it->max_ascent = max (it->max_ascent, font_ascent);
          it->max_descent = max (it->max_descent, font_descent);
        }
+
+      if (it->ascent < 0)
+       it->ascent = 0;
+      if (it->descent < 0)
+       it->descent = 0;
     }
   else if (it->what == IT_COMPOSITION && it->cmp_it.ch < 0)
     {
@@ -33974,7 +34119,7 @@ note_mouse_highlight (struct frame *f, int x, int y)
   struct buffer *b;
 
   /* When a menu is active, don't highlight because this looks odd.  */
-#if defined (USE_X_TOOLKIT) || defined (USE_GTK) || defined (HAVE_NS) || 
defined (MSDOS)
+#if defined (USE_X_TOOLKIT) || (defined (USE_GTK) && !defined (HAVE_PGTK)) || 
defined (HAVE_NS) || defined (MSDOS)
   if (popup_activated ())
     return;
 #endif
diff --git a/src/xfaces.c b/src/xfaces.c
index 813d89e5a3..8064d47c94 100644
--- a/src/xfaces.c
+++ b/src/xfaces.c
@@ -1,6 +1,6 @@
 /* xfaces.c -- "Face" primitives.
 
-Copyright (C) 1993-1994, 1998-2021 Free Software Foundation, Inc.
+Copyright (C) 1993-1994, 1998-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -247,6 +247,10 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 #define GCGraphicsExposures 0
 #endif /* HAVE_NS */
 
+#ifdef HAVE_PGTK
+#define GCGraphicsExposures 0
+#endif /* HAVE_PGTK */
+
 #ifdef HAVE_HAIKU
 #define GCGraphicsExposures 0
 #endif /* HAVE_HAIKU */
@@ -579,6 +583,26 @@ x_free_gc (struct frame *f, Emacs_GC *gc)
 }
 #endif  /* HAVE_NS */
 
+#ifdef HAVE_PGTK
+/* PGTK emulation of GCs */
+
+static Emacs_GC *
+x_create_gc (struct frame *f,
+            unsigned long mask,
+            Emacs_GC *xgcv)
+{
+  Emacs_GC *gc = xmalloc (sizeof *gc);
+  *gc = *xgcv;
+  return gc;
+}
+
+static void
+x_free_gc (struct frame *f, Emacs_GC *gc)
+{
+  xfree (gc);
+}
+#endif  /* HAVE_NS */
+
 /***********************************************************************
                           Frames and faces
  ***********************************************************************/
@@ -4782,7 +4806,7 @@ face_for_font (struct frame *f, Lisp_Object font_object,
                struct face *base_face)
 {
   struct face_cache *cache = FRAME_FACE_CACHE (f);
-  unsigned hash;
+  uintptr_t hash;
   int i;
   struct face *face;
 
@@ -6017,6 +6041,8 @@ realize_gui_face (struct face_cache *cache, Lisp_Object 
attrs[LFACE_VECTOR_SIZE]
       face->underline = FACE_UNDER_LINE;
       face->underline_defaulted_p = true;
       face->underline_color = 0;
+      face->underline_at_descent_line_p = false;
+      face->underline_pixels_above_descent_line = 0;
     }
   else if (STRINGP (underline))
     {
@@ -6026,12 +6052,16 @@ realize_gui_face (struct face_cache *cache, Lisp_Object 
attrs[LFACE_VECTOR_SIZE]
       face->underline_color
        = load_color (f, face, underline,
                      LFACE_UNDERLINE_INDEX);
+      face->underline_at_descent_line_p = false;
+      face->underline_pixels_above_descent_line = 0;
     }
   else if (NILP (underline))
     {
       face->underline = FACE_NO_UNDERLINE;
       face->underline_defaulted_p = false;
       face->underline_color = 0;
+      face->underline_at_descent_line_p = false;
+      face->underline_pixels_above_descent_line = 0;
     }
   else if (CONSP (underline))
     {
@@ -6040,6 +6070,8 @@ realize_gui_face (struct face_cache *cache, Lisp_Object 
attrs[LFACE_VECTOR_SIZE]
       face->underline = FACE_UNDER_LINE;
       face->underline_color = 0;
       face->underline_defaulted_p = true;
+      face->underline_at_descent_line_p = false;
+      face->underline_pixels_above_descent_line = 0;
 
       /* FIXME?  This is also not robust about checking the precise form.
          See comments in Finternal_set_lisp_face_attribute.  */
@@ -6076,6 +6108,13 @@ realize_gui_face (struct face_cache *cache, Lisp_Object 
attrs[LFACE_VECTOR_SIZE]
               else if (EQ (value, Qwave))
                 face->underline = FACE_UNDER_WAVE;
             }
+         else if (EQ (keyword, QCposition))
+           {
+             face->underline_at_descent_line_p = !NILP (value);
+
+             if (FIXNATP (value))
+               face->underline_pixels_above_descent_line = XFIXNAT (value);
+           }
         }
     }
 
@@ -6891,6 +6930,7 @@ syms_of_xfaces (void)
   DEFSYM (QCcolor, ":color");
   DEFSYM (QCline_width, ":line-width");
   DEFSYM (QCstyle, ":style");
+  DEFSYM (QCposition, ":position");
   DEFSYM (Qline, "line");
   DEFSYM (Qwave, "wave");
   DEFSYM (Qreleased_button, "released-button");
diff --git a/src/xfns.c b/src/xfns.c
index 5eff9f5b0f..028ee29a4a 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -1,6 +1,6 @@
 /* Functions for the X Window System.
 
-Copyright (C) 1989, 1992-2021 Free Software Foundation, Inc.
+Copyright (C) 1989, 1992-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -24,6 +24,7 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 #include <unistd.h>
 
 #include "lisp.h"
+#include "character.h"
 #include "xterm.h"
 #include "frame.h"
 #include "window.h"
@@ -2330,8 +2331,19 @@ hack_wm_protocols (struct frame *f, Widget widget)
 
 #ifdef HAVE_X_I18N
 
-static XFontSet xic_create_xfontset (struct frame *);
-static XIMStyle best_xim_style (XIMStyles *);
+static void xic_preedit_draw_callback (XIC, XPointer, 
XIMPreeditDrawCallbackStruct *);
+static void xic_preedit_caret_callback (XIC, XPointer, 
XIMPreeditCaretCallbackStruct *);
+static void xic_preedit_done_callback (XIC, XPointer, XPointer);
+static int xic_preedit_start_callback (XIC, XPointer, XPointer);
+
+static XIMCallback Xxic_preedit_draw_callback = { NULL,
+                                                 (XIMProc) 
xic_preedit_draw_callback };
+static XIMCallback Xxic_preedit_caret_callback = { NULL,
+                                                  (XIMProc) 
xic_preedit_caret_callback };
+static XIMCallback Xxic_preedit_done_callback = { NULL,
+                                                 (XIMProc) 
xic_preedit_done_callback };
+static XIMCallback Xxic_preedit_start_callback = { NULL,
+                                                  (void *) 
xic_preedit_start_callback };
 
 #if defined HAVE_X_WINDOWS && defined USE_X_TOOLKIT
 /* Create an X fontset on frame F with base font name BASE_FONTNAME.  */
@@ -2608,16 +2620,41 @@ xic_free_xfontset (struct frame *f)
   FRAME_XIC_FONTSET (f) = NULL;
 }
 
+/* Create XIC for frame F. */
+
+static const XIMStyle supported_xim_styles[] =
+  {
+    STYLE_NONE,
+    STYLE_CALLBACK,
+    STYLE_OVERTHESPOT,
+    STYLE_OFFTHESPOT,
+    STYLE_ROOT
+  };
 
 /* Value is the best input style, given user preferences USER (already
    checked to be supported by Emacs), and styles supported by the
    input method XIM.  */
 
 static XIMStyle
-best_xim_style (XIMStyles *xim)
+best_xim_style (struct x_display_info *dpyinfo,
+               XIMStyles *xim)
 {
-  /* Return the default style. This is what GTK3 uses and
-     should work fine with all modern input methods.  */
+  int i, j;
+  int nr_supported = ARRAYELTS (supported_xim_styles);
+
+  if (dpyinfo->preferred_xim_style)
+    {
+      for (j = 0; j < xim->count_styles; ++j)
+       if (dpyinfo->preferred_xim_style == xim->supported_styles[j])
+         return dpyinfo->preferred_xim_style;
+    }
+
+  for (i = 0; i < nr_supported; ++i)
+    for (j = 0; j < xim->count_styles; ++j)
+      if (supported_xim_styles[i] == xim->supported_styles[j])
+       return supported_xim_styles[i];
+
+  /* Return the default style.  */
   return XIMPreeditNothing | XIMStatusNothing;
 }
 
@@ -2643,7 +2680,8 @@ create_frame_xic (struct frame *f)
     goto out;
 
   /* Determine XIC style.  */
-  xic_style = best_xim_style (FRAME_X_XIM_STYLES (f));
+  xic_style = best_xim_style (FRAME_DISPLAY_INFO (f),
+                             FRAME_X_XIM_STYLES (f));
 
   /* Create X fontset. */
   if (xic_style & (XIMPreeditPosition | XIMStatusArea))
@@ -2692,6 +2730,22 @@ create_frame_xic (struct frame *f)
         goto out;
     }
 
+  if (xic_style & XIMPreeditCallbacks)
+    {
+      spot.x = 0;
+      spot.y = 0;
+      preedit_attr = XVaCreateNestedList (0,
+                                         XNSpotLocation, &spot,
+                                         XNPreeditStartCallback, 
&Xxic_preedit_start_callback,
+                                         XNPreeditDoneCallback, 
&Xxic_preedit_done_callback,
+                                         XNPreeditDrawCallback, 
&Xxic_preedit_draw_callback,
+                                         XNPreeditCaretCallback, 
&Xxic_preedit_caret_callback,
+                                         NULL);
+
+      if (!preedit_attr)
+       goto out;
+    }
+
   if (preedit_attr && status_attr)
     xic = XCreateIC (xim,
                      XNInputStyle, xic_style,
@@ -2762,15 +2816,44 @@ free_frame_xic (struct frame *f)
 void
 xic_set_preeditarea (struct window *w, int x, int y)
 {
-  struct frame *f = XFRAME (w->frame);
+  struct frame *f = WINDOW_XFRAME (w);
   XVaNestedList attr;
   XPoint spot;
 
-  spot.x = WINDOW_TO_FRAME_PIXEL_X (w, x) + WINDOW_LEFT_FRINGE_WIDTH (w) + 
WINDOW_LEFT_MARGIN_WIDTH(w);
-  spot.y = WINDOW_TO_FRAME_PIXEL_Y (w, y) + FONT_BASE (FRAME_FONT (f));
-  attr = XVaCreateNestedList (0, XNSpotLocation, &spot, NULL);
-  XSetICValues (FRAME_XIC (f), XNPreeditAttributes, attr, NULL);
-  XFree (attr);
+  if (FRAME_XIC (f))
+    {
+      spot.x = (WINDOW_TO_FRAME_PIXEL_X (w, x)
+               + WINDOW_LEFT_FRINGE_WIDTH (w)
+               + WINDOW_LEFT_MARGIN_WIDTH (w));
+      spot.y = (WINDOW_TO_FRAME_PIXEL_Y (w, y)
+               + w->phys_cursor_height);
+
+      if (FRAME_XIC_STYLE (f) & XIMPreeditCallbacks)
+       attr = XVaCreateNestedList (0, XNSpotLocation, &spot,
+                                   XNPreeditStartCallback, 
&Xxic_preedit_start_callback,
+                                   XNPreeditDoneCallback, 
&Xxic_preedit_done_callback,
+                                   XNPreeditDrawCallback, 
&Xxic_preedit_draw_callback,
+                                   XNPreeditCaretCallback, 
&Xxic_preedit_caret_callback,
+                                   NULL);
+      else
+       attr = XVaCreateNestedList (0, XNSpotLocation, &spot, NULL);
+      XSetICValues (FRAME_XIC (f), XNPreeditAttributes, attr, NULL);
+      XFree (attr);
+    }
+#ifdef USE_GTK
+  GdkRectangle rect;
+  rect.x = (WINDOW_TO_FRAME_PIXEL_X (w, x)
+           + WINDOW_LEFT_FRINGE_WIDTH (w)
+           + WINDOW_LEFT_MARGIN_WIDTH (w));
+  rect.y = (WINDOW_TO_FRAME_PIXEL_Y (w, y)
+           + FRAME_TOOLBAR_HEIGHT (f)
+           + FRAME_MENUBAR_HEIGHT (f));
+  rect.width = w->phys_cursor_width;
+  rect.height = w->phys_cursor_height;
+
+  gtk_im_context_set_cursor_location (FRAME_X_OUTPUT (f)->im_context,
+                                     &rect);
+#endif
 }
 
 
@@ -2816,9 +2899,336 @@ xic_set_statusarea (struct frame *f)
   XFree (attr);
 }
 
+static struct frame *
+x_xic_to_frame (XIC xic)
+{
+  Lisp_Object tail, tem;
+  struct frame *f;
+
+  FOR_EACH_FRAME (tail, tem)
+    {
+      f = XFRAME (tem);
+
+      if (FRAME_X_P (f) && FRAME_XIC (f) == xic)
+       return f;
+    }
+
+  return NULL;
+}
+
+static int
+xic_preedit_start_callback (XIC xic, XPointer client_data,
+                           XPointer call_data)
+{
+  struct frame *f = x_xic_to_frame (xic);
+  struct x_output *output;
+
+  if (f)
+    {
+      output = FRAME_X_OUTPUT (f);
+
+      output->preedit_size = 0;
+      output->preedit_active = true;
+      output->preedit_caret = 0;
+
+      if (output->preedit_chars)
+       xfree (output->preedit_chars);
+
+      output->preedit_chars = NULL;
+    }
+
+  return -1;
+}
+
+static void
+xic_preedit_caret_callback (XIC xic, XPointer client_data,
+                           XIMPreeditCaretCallbackStruct *call_data)
+{
+  struct frame *f = x_xic_to_frame (xic);
+  struct x_output *output;
+  struct input_event ie;
+  EVENT_INIT (ie);
+
+  if (f)
+    {
+      output = FRAME_X_OUTPUT (f);
+
+      if (!output->preedit_active)
+       return;
+
+      switch (call_data->direction)
+       {
+       case XIMAbsolutePosition:
+         output->preedit_caret = call_data->position;
+         break;
+       case XIMForwardChar:
+       case XIMForwardWord:
+         call_data->position = output->preedit_caret++;
+         break;
+       case XIMBackwardChar:
+       case XIMBackwardWord:
+         call_data->position = max (0, output->preedit_caret--);
+         break;
+       default:
+         call_data->position = output->preedit_caret;
+       }
+
+      if (output->preedit_chars)
+       {
+         ie.kind = PREEDIT_TEXT_EVENT;
+         XSETFRAME (ie.frame_or_window, f);
+         ie.arg = make_string_from_utf8 (output->preedit_chars,
+                                         output->preedit_size);
+
+         if (SCHARS (ie.arg))
+           Fput_text_property (make_fixnum (min (SCHARS (ie.arg) - 1,
+                                                 max (0, 
output->preedit_caret))),
+                               make_fixnum (max (SCHARS (ie.arg),
+                                                 max (0, 
output->preedit_caret) + 1)),
+                               Qcursor, Qt, ie.arg);
+
+         XSETINT (ie.x, 0);
+         XSETINT (ie.y, 0);
+
+         kbd_buffer_store_event (&ie);
+       }
+    }
+}
+
+
+static void
+xic_preedit_done_callback (XIC xic, XPointer client_data,
+                          XPointer call_data)
+{
+  struct frame *f = x_xic_to_frame (xic);
+  struct x_output *output;
+  struct input_event ie;
+  EVENT_INIT (ie);
+
+  if (f)
+    {
+      ie.kind = PREEDIT_TEXT_EVENT;
+      ie.arg = Qnil;
+      XSETFRAME (ie.frame_or_window, f);
+      XSETINT (ie.x, 0);
+      XSETINT (ie.y, 0);
+      kbd_buffer_store_event (&ie);
+
+      output = FRAME_X_OUTPUT (f);
+
+      if (output->preedit_chars)
+       xfree (output->preedit_chars);
+
+      output->preedit_size = 0;
+      output->preedit_active = false;
+      output->preedit_chars = NULL;
+      output->preedit_caret = 0;
+    }
+}
+
+/* The string returned is not null-terminated.  */
+static char *
+x_xim_text_to_utf8_unix (XIMText *text, ptrdiff_t *length)
+{
+  unsigned char *wchar_buf;
+  ptrdiff_t wchar_actual_length, i;
+  ptrdiff_t nbytes;
+  struct coding_system coding;
+
+  if (text->encoding_is_wchar)
+    {
+      wchar_buf = xmalloc ((text->length + 1) * MAX_MULTIBYTE_LENGTH);
+      wchar_actual_length = 0;
+
+      for (i = 0; i < text->length; ++i)
+       wchar_actual_length += CHAR_STRING (text->string.wide_char[i],
+                                           wchar_buf + wchar_actual_length);
+      *length = wchar_actual_length;
+
+      return (char *) wchar_buf;
+    }
+
+  nbytes = strlen (text->string.multi_byte);
+  setup_coding_system (Qutf_8_unix, &coding);
+  coding.mode |= (CODING_MODE_LAST_BLOCK
+                 | CODING_MODE_SAFE_ENCODING);
+  coding.source = (const unsigned char *) text->string.multi_byte;
+  coding.dst_bytes = 2048;
+  coding.destination = xmalloc (2048);
+  decode_coding_object (&coding, Qnil, 0, 0, nbytes, nbytes, Qnil);
+
+  /* coding.destination has either been allocated by us, or
+     reallocated by decode_coding_object.  */
+
+  *length = coding.produced;
+  return (char *) coding.destination;
+}
+
+static void
+xic_preedit_draw_callback (XIC xic, XPointer client_data,
+                          XIMPreeditDrawCallbackStruct *call_data)
+{
+  struct frame *f = x_xic_to_frame (xic);
+  struct x_output *output;
+  ptrdiff_t text_length;
+  ptrdiff_t charpos;
+  ptrdiff_t original_size;
+  char *text;
+  char *chg_start, *chg_end;
+  struct input_event ie;
+  EVENT_INIT (ie);
+
+  if (f)
+    {
+      output = FRAME_X_OUTPUT (f);
+
+      if (!output->preedit_active)
+       return;
+
+      if (call_data->text)
+       text = x_xim_text_to_utf8_unix (call_data->text, &text_length);
+      else
+       text = NULL;
+
+      original_size = output->preedit_size;
+
+      /* This is an ordinary insertion: reallocate the buffer to hold
+        enough for TEXT.  */
+      if (!call_data->chg_length)
+       {
+         if (!text)
+           goto im_abort;
+
+         if (output->preedit_chars)
+           output->preedit_chars = xrealloc (output->preedit_chars,
+                                             output->preedit_size += 
text_length);
+         else
+           output->preedit_chars = xmalloc (output->preedit_size += 
text_length);
+       }
+
+      chg_start = output->preedit_chars;
+
+      /* The IM sent bad data: the buffer is empty, but the change
+        position is more than 0.  */
+      if (!output->preedit_chars && call_data->chg_first)
+       goto im_abort;
+
+      /* Find the byte position for the character position where the
+        first change is to be made.  */
+      if (call_data->chg_first)
+       {
+         charpos = 0;
+
+         while (charpos < call_data->chg_first)
+           {
+             chg_start += BYTES_BY_CHAR_HEAD (*chg_start);
+
+             if ((chg_start - output->preedit_chars) > output->preedit_size)
+               /* The IM sent bad data: chg_start is larger than the
+                  current buffer.  */
+               goto im_abort;
+             ++charpos;
+           }
+       }
+
+      if (!call_data->chg_length)
+       {
+         if (!text)
+           goto im_abort;
+
+         memmove (chg_start + text_length, chg_start,
+                  original_size - (chg_start - output->preedit_chars));
+         memcpy (chg_start, text, text_length);
+       }
+      else
+       {
+         if (call_data->chg_length < 1)
+           goto im_abort;
+
+         charpos = 0;
+         chg_end = chg_start;
+
+         while (charpos < call_data->chg_length)
+           {
+             chg_end += BYTES_BY_CHAR_HEAD (*chg_end);
+
+             if ((chg_end - output->preedit_chars) > output->preedit_size)
+               /* The IM sent bad data: chg_end ends someplace outside
+                  the current buffer.  */
+               goto im_abort;
+             ++charpos;
+           }
+
+         memmove (chg_start, chg_end, ((output->preedit_chars
+                                        + output->preedit_size) - chg_end));
+         output->preedit_size -= (chg_end - chg_start);
+
+         if (text)
+           {
+             original_size = output->preedit_size;
+             output->preedit_chars = xrealloc (output->preedit_chars,
+                                               output->preedit_size += 
text_length);
+
+             /* Find chg_start again, since preedit_chars was reallocated.  */
+
+             chg_start = output->preedit_chars;
+             charpos = 0;
+
+             while (charpos < call_data->chg_first)
+               {
+                 chg_start += BYTES_BY_CHAR_HEAD (*chg_start);
+
+                 if ((chg_start - output->preedit_chars) > 
output->preedit_size)
+                   /* The IM sent bad data: chg_start is larger than the
+                      current buffer.  */
+                   goto im_abort;
+                 ++charpos;
+               }
+
+             memmove (chg_start + text_length, chg_start,
+                      original_size - (chg_start - output->preedit_chars));
+             memcpy (chg_start, text, text_length);
+           }
+       }
+
+      if (text)
+       xfree (text);
 
-/* Set X fontset for XIC of frame F, using base font name
-   BASE_FONTNAME.  Called when a new Emacs fontset is chosen.  */
+      output->preedit_caret = call_data->caret;
+
+      /* This is okay because this callback is called from the big XIM
+        event filter, which runs inside XTread_socket.  */
+
+      ie.kind = PREEDIT_TEXT_EVENT;
+      XSETFRAME (ie.frame_or_window, f);
+      ie.arg = make_string_from_utf8 (output->preedit_chars,
+                                     output->preedit_size);
+
+      if (SCHARS (ie.arg))
+       Fput_text_property (make_fixnum (min (SCHARS (ie.arg) - 1,
+                                             max (0, output->preedit_caret))),
+                           make_fixnum (min (SCHARS (ie.arg),
+                                             max (0, output->preedit_caret) + 
1)),
+                           Qcursor, Qt, ie.arg);
+
+      XSETINT (ie.x, 0);
+      XSETINT (ie.y, 0);
+
+      kbd_buffer_store_event (&ie);
+    }
+
+  return;
+
+ im_abort:
+  if (text)
+    xfree (text);
+  if (output->preedit_chars)
+    xfree (output->preedit_chars);
+  output->preedit_chars = NULL;
+  output->preedit_size = 0;
+  output->preedit_active = false;
+  output->preedit_caret = 0;
+}
 
 void
 xic_set_xfontset (struct frame *f, const char *base_fontname)
@@ -2916,7 +3326,7 @@ initial_set_up_x_back_buffer (struct frame *f)
   unblock_input ();
 }
 
-#if defined HAVE_XINPUT2 && !defined USE_GTK
+#if defined HAVE_XINPUT2
 static void
 setup_xi_event_mask (struct frame *f)
 {
@@ -2927,30 +3337,60 @@ setup_xi_event_mask (struct frame *f)
   mask.mask = m = alloca (l);
   memset (m, 0, l);
   mask.mask_len = l;
+
+  block_input ();
+#ifndef USE_GTK
   mask.deviceid = XIAllMasterDevices;
 
   XISetMask (m, XI_ButtonPress);
   XISetMask (m, XI_ButtonRelease);
-  XISetMask (m, XI_KeyPress);
-  XISetMask (m, XI_KeyRelease);
   XISetMask (m, XI_Motion);
   XISetMask (m, XI_Enter);
   XISetMask (m, XI_Leave);
-  XISetMask (m, XI_FocusIn);
-  XISetMask (m, XI_FocusOut);
+  XISetMask (m, XI_KeyPress);
+  XISetMask (m, XI_KeyRelease);
   XISelectEvents (FRAME_X_DISPLAY (f),
                  FRAME_X_WINDOW (f),
                  &mask, 1);
 
   memset (m, 0, l);
+#endif /* !USE_GTK */
+
+#ifdef USE_X_TOOLKIT
+  XISetMask (m, XI_KeyPress);
+  XISetMask (m, XI_KeyRelease);
+
+  XISelectEvents (FRAME_X_DISPLAY (f),
+                 FRAME_OUTER_WINDOW (f),
+                 &mask, 1);
+  memset (m, 0, l);
+#endif
+
   mask.deviceid = XIAllDevices;
 
   XISetMask (m, XI_PropertyEvent);
   XISetMask (m, XI_HierarchyChanged);
   XISetMask (m, XI_DeviceChanged);
+#ifdef XI_TouchBegin
+  if (FRAME_DISPLAY_INFO (f)->xi2_version >= 2)
+    {
+      XISetMask (m, XI_TouchBegin);
+      XISetMask (m, XI_TouchUpdate);
+      XISetMask (m, XI_TouchEnd);
+#ifdef XI_GesturePinchBegin
+      if (FRAME_DISPLAY_INFO (f)->xi2_version >= 4)
+       {
+         XISetMask (m, XI_GesturePinchBegin);
+         XISetMask (m, XI_GesturePinchUpdate);
+         XISetMask (m, XI_GesturePinchEnd);
+       }
+#endif
+    }
+#endif
   XISelectEvents (FRAME_X_DISPLAY (f),
                  FRAME_X_WINDOW (f),
                  &mask, 1);
+  unblock_input ();
 }
 #endif
 
@@ -3116,11 +3556,6 @@ x_window (struct frame *f, long window_prompting)
   class_hints.res_class = SSDATA (Vx_resource_class);
   XSetClassHint (FRAME_X_DISPLAY (f), XtWindow (shell_widget), &class_hints);
 
-#ifdef HAVE_XINPUT2
-  if (FRAME_DISPLAY_INFO (f)->supports_xi2)
-    setup_xi_event_mask (f);
-#endif
-
 #ifdef HAVE_X_I18N
   FRAME_XIC (f) = NULL;
   if (use_xim)
@@ -3208,6 +3643,11 @@ x_window (struct frame *f, long window_prompting)
   /* This is a no-op, except under Motif.  Make sure main areas are
      set to something reasonable, in case we get an error later.  */
   lw_set_main_areas (pane_widget, 0, frame_widget);
+
+#ifdef HAVE_XINPUT2
+  if (FRAME_DISPLAY_INFO (f)->supports_xi2)
+    setup_xi_event_mask (f);
+#endif
 }
 
 #else /* not USE_X_TOOLKIT */
@@ -3247,6 +3687,11 @@ x_window (struct frame *f)
     unblock_input ();
   }
 #endif
+
+#ifdef HAVE_XINPUT2
+  if (FRAME_DISPLAY_INFO (f)->supports_xi2)
+    setup_xi_event_mask (f);
+#endif
 }
 
 #else /*! USE_GTK */
@@ -4485,6 +4930,27 @@ If omitted or nil, that stands for the selected frame's 
display.  */)
                 VendorRelease (dpy));
 }
 
+DEFUN ("x-server-input-extension-version", Fx_server_input_extension_version,
+       Sx_server_input_extension_version, 0, 1, 0,
+       doc: /* Return the version of the X Input Extension supported by 
TERMINAL.
+The value is nil if TERMINAL's X server doesn't support the X Input
+Extension extension, or if Emacs doesn't support the version present
+on that server.  Otherwise, the return value is a list of the the
+major and minor versions of the X Input Extension extension running on
+that server.  */)
+  (Lisp_Object terminal)
+{
+#ifdef HAVE_XINPUT2
+  struct x_display_info *dpyinfo = check_x_display_info (terminal);
+
+  return (dpyinfo->supports_xi2
+         ? list2i (2, dpyinfo->xi2_version)
+         : Qnil);
+#else
+  return Qnil;
+#endif
+}
+
 DEFUN ("x-display-screens", Fx_display_screens, Sx_display_screens, 0, 1, 0,
        doc: /* Return the number of screens on the X server of display 
TERMINAL.
 The optional argument TERMINAL specifies which display to ask about.
@@ -4883,6 +5349,70 @@ x_get_monitor_attributes_xrandr (struct x_display_info 
*dpyinfo)
   int i, n_monitors, primary = -1;
   RROutput pxid = None;
   struct MonitorInfo *monitors;
+  bool randr15_p = false;
+
+#if RANDR_MAJOR > 1 || (RANDR_MAJOR == 1 && RANDR_MINOR >= 5)
+  XRRMonitorInfo *rr_monitors;
+
+  /* If RandR 1.5 or later is available, use that instead, as some
+     video drivers don't report correct dimensions via other versions
+     of RandR.  */
+  if (dpyinfo->xrandr_major_version > 1
+      || (dpyinfo->xrandr_major_version == 1
+         && dpyinfo->xrandr_minor_version >= 5))
+    {
+      XRectangle workarea;
+      char *name;
+
+      rr_monitors = XRRGetMonitors (dpyinfo->display,
+                                   dpyinfo->root_window,
+                                   True, &n_monitors);
+      if (!rr_monitors)
+       goto fallback;
+
+      monitors = xzalloc (n_monitors * sizeof *monitors);
+
+      for (int i = 0; i < n_monitors; ++i)
+       {
+         monitors[i].geom.x = rr_monitors[i].x;
+         monitors[i].geom.y = rr_monitors[i].y;
+         monitors[i].geom.width = rr_monitors[i].width;
+         monitors[i].geom.height = rr_monitors[i].height;
+         monitors[i].mm_width = rr_monitors[i].mwidth;
+         monitors[i].mm_height = rr_monitors[i].mheight;
+
+         name = XGetAtomName (dpyinfo->display, rr_monitors[i].name);
+         if (name)
+           {
+             monitors[i].name = xstrdup (name);
+             XFree (name);
+           }
+         else
+           monitors[i].name = xstrdup ("Unknown Monitor");
+
+         if (rr_monitors[i].primary)
+           primary = i;
+
+         if (rr_monitors[i].primary
+             && x_get_net_workarea (dpyinfo, &workarea))
+           {
+              monitors[i].work = workarea;
+              if (!gui_intersect_rectangles (&monitors[i].geom,
+                                            &monitors[i].work,
+                                            &monitors[i].work))
+               monitors[i].work = monitors[i].geom;
+           }
+         else
+           monitors[i].work = monitors[i].geom;
+       }
+
+      XRRFreeMonitors (rr_monitors);
+      randr15_p = true;
+      goto out;
+    }
+
+ fallback:;
+#endif
 
 #define RANDR13_LIBRARY \
   (RANDR_MAJOR > 1 || (RANDR_MAJOR == 1 && RANDR_MINOR >= 3))
@@ -4971,12 +5501,16 @@ x_get_monitor_attributes_xrandr (struct x_display_info 
*dpyinfo)
       XRRFreeOutputInfo (info);
     }
   XRRFreeScreenResources (resources);
-
+#if RANDR_MAJOR > 1 || (RANDR_MAJOR == 1 && RANDR_MINOR >= 5)
+ out:
+#endif
   attributes_list = x_make_monitor_attribute_list (monitors,
                                                    n_monitors,
                                                    primary,
                                                    dpyinfo,
-                                                   "XRandr");
+                                                   (randr15_p
+                                                   ? "XRandR 1.5"
+                                                   : "XRandr"));
   free_monitors (monitors, n_monitors);
   return attributes_list;
 }
@@ -4991,17 +5525,9 @@ x_get_monitor_attributes (struct x_display_info *dpyinfo)
   (void) dpy; /* Suppress unused variable warning.  */
 
 #ifdef HAVE_XRANDR
-  int xrr_event_base, xrr_error_base;
-  bool xrr_ok = false;
-  xrr_ok = XRRQueryExtension (dpy, &xrr_event_base, &xrr_error_base);
-  if (xrr_ok)
-    {
-      XRRQueryVersion (dpy, &dpyinfo->xrandr_major_version,
-                      &dpyinfo->xrandr_minor_version);
-      xrr_ok = ((dpyinfo->xrandr_major_version == 1
-                && dpyinfo->xrandr_minor_version >= 2)
-               || dpyinfo->xrandr_major_version > 1);
-    }
+  bool xrr_ok = ((dpyinfo->xrandr_major_version == 1
+                 && dpyinfo->xrandr_minor_version >= 2)
+                || dpyinfo->xrandr_major_version > 1);
 
   if (xrr_ok)
     attributes_list = x_get_monitor_attributes_xrandr (dpyinfo);
@@ -5026,6 +5552,65 @@ x_get_monitor_attributes (struct x_display_info *dpyinfo)
 
 #endif /* !USE_GTK */
 
+#ifdef USE_LUCID
+/* This is used by the Lucid menu widget, but it's defined here so we
+   can make use of a great deal of existing code.  */
+static void
+xlw_monitor_dimensions_at_pos_1 (struct x_display_info *dpyinfo,
+                                Screen *screen, int src_x, int src_y,
+                                int *x, int *y, int *width, int *height)
+{
+  Lisp_Object attrs, tem, val;
+
+  attrs = x_get_monitor_attributes (dpyinfo);
+
+  for (tem = attrs; CONSP (tem); tem = XCDR (tem))
+    {
+      int sx, sy, swidth, sheight;
+      val = assq_no_quit (Qworkarea, XCAR (tem));
+      if (!NILP (val))
+       {
+         sx = XFIXNUM (XCAR (XCDR (val)));
+         sy = XFIXNUM (XCAR (XCDR (XCDR (val))));
+         swidth = XFIXNUM (XCAR (XCDR (XCDR (XCDR (val)))));
+         sheight = XFIXNUM (XCAR (XCDR (XCDR (XCDR (XCDR (val))))));
+
+         if (sx <= src_x && src_x < (sx + swidth)
+             && sy <= src_y && src_y < (sy + swidth))
+           {
+             *x = sx;
+             *y = sy;
+             *width = swidth;
+             *height = sheight;
+             return;
+           }
+       }
+    }
+
+  *x = 0;
+  *y = 0;
+  *width = WidthOfScreen (screen);
+  *height = HeightOfScreen (screen);
+}
+
+void
+xlw_monitor_dimensions_at_pos (Display *dpy, Screen *screen, int src_x,
+                              int src_y, int *x, int *y, int *width, int 
*height)
+{
+  struct x_display_info *dpyinfo = x_display_info_for_display (dpy);
+
+  if (!dpyinfo)
+    emacs_abort ();
+
+  block_input ();
+  xlw_monitor_dimensions_at_pos_1 (dpyinfo, screen, src_x, src_y,
+                                  x, y, width, height);
+
+  unblock_input ();
+}
+#endif
+
+
 DEFUN ("x-display-monitor-attributes-list", Fx_display_monitor_attributes_list,
        Sx_display_monitor_attributes_list,
        0, 1, 0,
@@ -5622,8 +6207,25 @@ The coordinates X and Y are interpreted in pixels 
relative to a position
   int yval = check_integer_range (y, INT_MIN, INT_MAX);
 
   block_input ();
-  XWarpPointer (FRAME_X_DISPLAY (f), None, DefaultRootWindow (FRAME_X_DISPLAY 
(f)),
-               0, 0, 0, 0, xval, yval);
+#ifdef HAVE_XINPUT2
+  int deviceid;
+
+  if (FRAME_DISPLAY_INFO (f)->supports_xi2)
+    {
+      XGrabServer (FRAME_X_DISPLAY (f));
+      if (XIGetClientPointer (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
+                             &deviceid))
+       {
+         XIWarpPointer (FRAME_X_DISPLAY (f), deviceid, None,
+                        DefaultRootWindow (FRAME_X_DISPLAY (f)),
+                        0, 0, 0, 0, xval, yval);
+       }
+      XUngrabServer (FRAME_X_DISPLAY (f));
+    }
+  else
+#endif
+    XWarpPointer (FRAME_X_DISPLAY (f), None, DefaultRootWindow 
(FRAME_X_DISPLAY (f)),
+                 0, 0, 0, 0, xval, yval);
   unblock_input ();
 
   return Qnil;
@@ -7148,7 +7750,8 @@ Text larger than the specified size is clipped.  */)
   try_window (window, pos, TRY_WINDOW_IGNORE_FONTS_CHANGE);
   /* Calculate size of tooltip window.  */
   size = Fwindow_text_pixel_size (window, Qnil, Qnil, Qnil,
-                                 make_fixnum (w->pixel_height), Qnil);
+                                 make_fixnum (w->pixel_height), Qnil,
+                                 Qnil);
   /* Add the frame's internal border to calculated size.  */
   width = XFIXNUM (Fcar (size)) + 2 * FRAME_INTERNAL_BORDER_WIDTH (tip_f);
   height = XFIXNUM (Fcdr (size)) + 2 * FRAME_INTERNAL_BORDER_WIDTH (tip_f);
@@ -7565,27 +8168,11 @@ present and mapped to the usual X keysyms.  */)
   struct frame *f = decode_window_system_frame (frame);
   Display *dpy = FRAME_X_DISPLAY (f);
   Lisp_Object have_keys;
-  int major, minor, op, event, error_code;
-
-  block_input ();
 
-  /* Check library version in case we're dynamically linked.  */
-  major = XkbMajorVersion;
-  minor = XkbMinorVersion;
-  if (!XkbLibraryVersion (&major, &minor))
-    {
-      unblock_input ();
-      return Qlambda;
-    }
+  if (!FRAME_DISPLAY_INFO (f)->supports_xkb)
+    return Qlambda;
 
-  /* Check that the server supports XKB.  */
-  major = XkbMajorVersion;
-  minor = XkbMinorVersion;
-  if (!XkbQueryExtension (dpy, &op, &event, &error_code, &major, &minor))
-    {
-      unblock_input ();
-      return Qlambda;
-    }
+  block_input ();
 
   /* In this code we check that the keyboard has physical keys with names
      that start with BKSP (Backspace) and DELE (Delete), and that they
@@ -8154,6 +8741,7 @@ eliminated in future versions of Emacs.  */);
   defsubr (&Sx_server_max_request_size);
   defsubr (&Sx_server_vendor);
   defsubr (&Sx_server_version);
+  defsubr (&Sx_server_input_extension_version);
   defsubr (&Sx_display_pixel_width);
   defsubr (&Sx_display_pixel_height);
   defsubr (&Sx_display_mm_width);
diff --git a/src/xfont.c b/src/xfont.c
index 81d356175a..b5765cfa7b 100644
--- a/src/xfont.c
+++ b/src/xfont.c
@@ -1,5 +1,5 @@
 /* xfont.c -- X core font driver.
-   Copyright (C) 2006-2021 Free Software Foundation, Inc.
+   Copyright (C) 2006-2022 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 d8ad403548..f305738410 100644
--- a/src/xftfont.c
+++ b/src/xftfont.c
@@ -1,5 +1,5 @@
 /* xftfont.c -- XFT font driver.
-   Copyright (C) 2006-2021 Free Software Foundation, Inc.
+   Copyright (C) 2006-2022 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 92b118b955..d22340fc9b 100644
--- a/src/xgselect.c
+++ b/src/xgselect.c
@@ -1,6 +1,6 @@
 /* Function for handling the GLib event loop.
 
-Copyright (C) 2009-2021 Free Software Foundation, Inc.
+Copyright (C) 2009-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -28,11 +28,13 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 #include "lisp.h"
 #include "blockinput.h"
 #include "systime.h"
+#include "process.h"
 
 static ptrdiff_t threads_holding_glib_lock;
 static GMainContext *glib_main_context;
 
-void release_select_lock (void)
+void
+release_select_lock (void)
 {
 #if GNUC_PREREQ (4, 7, 0)
   if (__atomic_sub_fetch (&threads_holding_glib_lock, 1, __ATOMIC_ACQ_REL) == 
0)
@@ -43,7 +45,8 @@ void release_select_lock (void)
 #endif
 }
 
-static void acquire_select_lock (GMainContext *context)
+static void
+acquire_select_lock (GMainContext *context)
 {
 #if GNUC_PREREQ (4, 7, 0)
   if (__atomic_fetch_add (&threads_holding_glib_lock, 1, __ATOMIC_ACQ_REL) == 
0)
@@ -93,10 +96,17 @@ xg_select (int fds_lim, fd_set *rfds, fd_set *wfds, fd_set 
*efds,
   int n_gfds, retval = 0, our_fds = 0, max_fds = fds_lim - 1;
   int i, nfds, tmo_in_millisec, must_free = 0;
   bool need_to_dispatch;
+#ifdef HAVE_PGTK
+  bool already_has_events;
+#endif
 
   context = g_main_context_default ();
   acquire_select_lock (context);
 
+#ifdef HAVE_PGTK
+  already_has_events = g_main_context_pending (context);
+#endif
+
   if (rfds) all_rfds = *rfds;
   else FD_ZERO (&all_rfds);
   if (wfds) all_wfds = *wfds;
@@ -143,10 +153,41 @@ xg_select (int fds_lim, fd_set *rfds, fd_set *wfds, 
fd_set *efds,
        tmop = &tmo;
     }
 
+#ifndef HAVE_PGTK
   fds_lim = max_fds + 1;
   nfds = thread_select (pselect, fds_lim,
                        &all_rfds, have_wfds ? &all_wfds : NULL, efds,
                        tmop, sigmask);
+#else
+  /*
+    On PGTK, when you type a key, the key press event are received,
+    and one more key press event seems to be received internally.
+    The second event is not via a socket, so there are weird status:
+      - socket read buffer is empty
+      - a key press event is pending
+    In that case, we should not sleep, and dispatch the event immediately.
+    Bug#52761
+   */
+  if (!already_has_events)
+    {
+      fds_lim = max_fds + 1;
+      nfds = thread_select (pselect, fds_lim,
+                           &all_rfds, have_wfds ? &all_wfds : NULL, efds,
+                           tmop, sigmask);
+    }
+  else
+    {
+      /* Emulate return values */
+      nfds = 1;
+      FD_ZERO (&all_rfds);
+      if (have_wfds)
+       FD_ZERO (&all_wfds);
+      if (efds)
+       FD_ZERO (efds);
+      our_fds++;
+    }
+#endif
+
   if (nfds < 0)
     retval = nfds;
   else if (nfds > 0)
@@ -181,6 +222,21 @@ xg_select (int fds_lim, fd_set *rfds, fd_set *wfds, fd_set 
*efds,
 #else
   need_to_dispatch = true;
 #endif
+
+  /* xwidgets make heavy use of GLib subprocesses, which add their own
+     SIGCHLD handler at arbitrary locations.  That doesn't play well
+     with Emacs's own handler, so once GLib does its thing with its
+     subprocesses we restore our own SIGCHLD handler (which chains the
+     GLib handler) here.
+
+     There is an obvious race condition, but we can't really do
+     anything about that, except hope a SIGCHLD arrives soon to clear
+     up the situation.  */
+
+#ifdef HAVE_XWIDGETS
+  catch_child_signal ();
+#endif
+
   if (need_to_dispatch)
     {
       acquire_select_lock (context);
diff --git a/src/xgselect.h b/src/xgselect.h
index 2142a236b2..15482cbf92 100644
--- a/src/xgselect.h
+++ b/src/xgselect.h
@@ -1,6 +1,6 @@
 /* Header for xg_select.
 
-Copyright (C) 2009-2021 Free Software Foundation, Inc.
+Copyright (C) 2009-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/xmenu.c b/src/xmenu.c
index 07255911f9..b755f75da0 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-2021 Free Software
+Copyright (C) 1986, 1988, 1993-1994, 1996, 1999-2022 Free Software
 Foundation, Inc.
 
 Author: Jon Arnold
@@ -51,6 +51,10 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 #include "msdos.h"
 #endif
 
+#ifdef HAVE_XINPUT2
+#include <X11/extensions/XInput2.h>
+#endif
+
 #ifdef HAVE_X_WINDOWS
 /* This may include sys/types.h, and that somehow loses
    if this is not done before the other system files.  */
@@ -444,6 +448,19 @@ x_activate_menubar (struct frame *f)
   XPutBackEvent (f->output_data.x->display_info->display,
                  f->output_data.x->saved_menu_event);
 #else
+#if defined USE_X_TOOLKIT && defined HAVE_XINPUT2
+  struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
+  /* Clear the XI2 grab so Motif or lwlib can set a core grab.
+     Otherwise some versions of Motif will emit a warning and hang,
+     and lwlib will fail to destroy the menu window.  */
+
+  if (dpyinfo->num_devices)
+    {
+      for (int i = 0; i < dpyinfo->num_devices; ++i)
+       XIUngrabDevice (dpyinfo->display, dpyinfo->devices[i].device_id,
+                       CurrentTime);
+    }
+#endif
   XtDispatchEvent (f->output_data.x->saved_menu_event);
 #endif
   unblock_input ();
@@ -1445,7 +1462,17 @@ create_and_show_popup_menu (struct frame *f, 
widget_value *first_wv,
   /* Don't allow any geometry request from the user.  */
   XtSetArg (av[ac], (char *) XtNgeometry, 0); ac++;
   XtSetValues (menu, av, ac);
+#if defined HAVE_XINPUT2 && defined USE_LUCID
+  struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
+  /* Clear the XI2 grab so lwlib can set a core grab.  */
 
+  if (dpyinfo->num_devices)
+    {
+      for (int i = 0; i < dpyinfo->num_devices; ++i)
+       XIUngrabDevice (dpyinfo->display, dpyinfo->devices[i].device_id,
+                       CurrentTime);
+    }
+#endif
   /* Display the menu.  */
   lw_popup_menu (menu, &dummy);
   popup_activated_flag = 1;
diff --git a/src/xml.c b/src/xml.c
index 495988ab23..522efd224c 100644
--- a/src/xml.c
+++ b/src/xml.c
@@ -1,5 +1,5 @@
 /* Interface to libxml2.
-   Copyright (C) 2010-2021 Free Software Foundation, Inc.
+   Copyright (C) 2010-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/xrdb.c b/src/xrdb.c
index 7d84762978..56e07f74a2 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-2021 Free Software Foundation,
+   Copyright (C) 1990, 1993-1994, 2000-2022 Free Software Foundation,
    Inc.
 
 Author: Joseph Arceneaux
diff --git a/src/xselect.c b/src/xselect.c
index cd6d86bdf4..cfe028a169 100644
--- a/src/xselect.c
+++ b/src/xselect.c
@@ -1,5 +1,5 @@
 /* X Selection processing for Emacs.
-   Copyright (C) 1993-1997, 2000-2021 Free Software Foundation, Inc.
+   Copyright (C) 1993-1997, 2000-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/xsettings.c b/src/xsettings.c
index 58dfd43ad1..71d02e6152 100644
--- a/src/xsettings.c
+++ b/src/xsettings.c
@@ -1,6 +1,6 @@
 /* Functions for handling font and other changes dynamically.
 
-Copyright (C) 2009-2021 Free Software Foundation, Inc.
+Copyright (C) 2009-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -26,7 +26,11 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 #include <byteswap.h>
 
 #include "lisp.h"
+#ifndef HAVE_PGTK
 #include "xterm.h"
+#else
+#include "gtkutil.h"
+#endif
 #include "xsettings.h"
 #include "frame.h"
 #include "keyboard.h"
@@ -34,7 +38,12 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 #include "termhooks.h"
 #include "pdumper.h"
 
+#ifndef HAVE_PGTK
 #include <X11/Xproto.h>
+#else
+typedef unsigned short CARD16;
+typedef unsigned int CARD32;
+#endif
 
 #ifdef HAVE_GSETTINGS
 #include <glib-object.h>
@@ -55,7 +64,7 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 
 static char *current_mono_font;
 static char *current_font;
-static struct x_display_info *first_dpyinfo;
+static Display_Info *first_dpyinfo;
 static Lisp_Object current_tool_bar_style;
 
 /* Store a config changed event in to the event queue.  */
@@ -73,14 +82,18 @@ store_config_changed_event (Lisp_Object arg, Lisp_Object 
display_name)
 
 /* Return true if DPYINFO is still valid.  */
 static bool
-dpyinfo_valid (struct x_display_info *dpyinfo)
+dpyinfo_valid (Display_Info *dpyinfo)
 {
   bool found = false;
   if (dpyinfo != NULL)
     {
-      struct x_display_info *d;
+      Display_Info *d;
       for (d = x_display_list; !found && d; d = d->next)
+#ifndef HAVE_PGTK
         found = d == dpyinfo && d->display == dpyinfo->display;
+#else
+        found = d == dpyinfo && d->gdpy == dpyinfo->gdpy;
+#endif
     }
   return found;
 }
@@ -149,7 +162,7 @@ map_tool_bar_style (const char *tool_bar_style)
 
 static void
 store_tool_bar_style_changed (const char *newstyle,
-                              struct x_display_info *dpyinfo)
+                              Display_Info *dpyinfo)
 {
   Lisp_Object style = map_tool_bar_style (newstyle);
   if (EQ (current_tool_bar_style, style))
@@ -161,10 +174,12 @@ store_tool_bar_style_changed (const char *newstyle,
                                 XCAR (dpyinfo->name_list_element));
 }
 
+#ifndef HAVE_PGTK
 #if defined USE_CAIRO || defined HAVE_XFT
 #define XSETTINGS_FONT_NAME       "Gtk/FontName"
 #endif
 #define XSETTINGS_TOOL_BAR_STYLE  "Gtk/ToolbarStyle"
+#endif
 
 enum {
   SEEN_AA         = 0x01,
@@ -321,10 +336,11 @@ something_changed_gconfCB (GConfClient *client,
 
 #endif /* USE_CAIRO || HAVE_XFT */
 
+#ifndef HAVE_PGTK
 /* Find the window that contains the XSETTINGS property values.  */
 
 static void
-get_prop_window (struct x_display_info *dpyinfo)
+get_prop_window (Display_Info *dpyinfo)
 {
   Display *dpy = dpyinfo->display;
 
@@ -339,6 +355,9 @@ get_prop_window (struct x_display_info *dpyinfo)
 
   XUngrabServer (dpy);
 }
+#endif
+
+#ifndef HAVE_PGTK
 
 #define PAD(nr)    (((nr) + 3) & ~3)
 
@@ -566,13 +585,15 @@ parse_settings (unsigned char *prop,
 
   return settings_seen;
 }
+#endif
 
+#ifndef HAVE_PGTK
 /* Read settings from the XSettings property window on display for DPYINFO.
    Store settings read in SETTINGS.
    Return true iff successful.  */
 
 static bool
-read_settings (struct x_display_info *dpyinfo, struct xsettings *settings)
+read_settings (Display_Info *dpyinfo, struct xsettings *settings)
 {
   Atom act_type;
   int act_form;
@@ -600,12 +621,14 @@ read_settings (struct x_display_info *dpyinfo, struct 
xsettings *settings)
 
   return got_settings;
 }
+#endif
 
+#ifndef HAVE_PGTK
 /* Apply Xft settings in SETTINGS to the Xft library.
    Store a Lisp event that Xft settings changed.  */
 
 static void
-apply_xft_settings (struct x_display_info *dpyinfo,
+apply_xft_settings (Display_Info *dpyinfo,
                     struct xsettings *settings)
 {
 #ifdef HAVE_XFT
@@ -731,12 +754,14 @@ apply_xft_settings (struct x_display_info *dpyinfo,
     FcPatternDestroy (pat);
 #endif /* HAVE_XFT */
 }
+#endif
 
+#ifndef HAVE_PGTK
 /* Read XSettings from the display for DPYINFO.
    If SEND_EVENT_P store a Lisp event settings that changed.  */
 
 static void
-read_and_apply_settings (struct x_display_info *dpyinfo, bool send_event_p)
+read_and_apply_settings (Display_Info *dpyinfo, bool send_event_p)
 {
   struct xsettings settings;
 
@@ -763,11 +788,13 @@ read_and_apply_settings (struct x_display_info *dpyinfo, 
bool send_event_p)
     }
 #endif
 }
+#endif
 
+#ifndef HAVE_PGTK
 /* Check if EVENT for the display in DPYINFO is XSettings related.  */
 
 void
-xft_settings_event (struct x_display_info *dpyinfo, const XEvent *event)
+xft_settings_event (Display_Info *dpyinfo, const XEvent *event)
 {
   bool check_window_p = false, apply_settings_p = false;
 
@@ -805,6 +832,7 @@ xft_settings_event (struct x_display_info *dpyinfo, const 
XEvent *event)
   if (apply_settings_p)
     read_and_apply_settings (dpyinfo, true);
 }
+#endif
 
 /* Initialize GSettings and read startup values.  */
 
@@ -940,10 +968,11 @@ init_gconf (void)
 #endif /* HAVE_GCONF */
 }
 
+#ifndef HAVE_PGTK
 /* Init Xsettings and read startup values.  */
 
 static void
-init_xsettings (struct x_display_info *dpyinfo)
+init_xsettings (Display_Info *dpyinfo)
 {
   Display *dpy = dpyinfo->display;
 
@@ -959,13 +988,16 @@ init_xsettings (struct x_display_info *dpyinfo)
 
   unblock_input ();
 }
+#endif
 
 void
-xsettings_initialize (struct x_display_info *dpyinfo)
+xsettings_initialize (Display_Info *dpyinfo)
 {
   if (first_dpyinfo == NULL) first_dpyinfo = dpyinfo;
   init_gconf ();
+#ifndef HAVE_PGTK
   init_xsettings (dpyinfo);
+#endif
   init_gsettings ();
 }
 
diff --git a/src/xsettings.h b/src/xsettings.h
index 26717fc08c..266526df10 100644
--- a/src/xsettings.h
+++ b/src/xsettings.h
@@ -1,6 +1,6 @@
 /* Functions for handle font changes dynamically.
 
-Copyright (C) 2009-2021 Free Software Foundation, Inc.
+Copyright (C) 2009-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -20,12 +20,23 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 #ifndef XSETTINGS_H
 #define XSETTINGS_H
 
+#ifndef HAVE_PGTK
 #include <X11/Xlib.h>
+#endif
 
 struct x_display_info;
+struct pgtk_display_info;
+
+#ifndef HAVE_PGTK
+typedef struct x_display_info Display_Info;
+#else
+typedef struct pgtk_display_info Display_Info;
+#endif
 
-extern void xsettings_initialize (struct x_display_info *);
-extern void xft_settings_event (struct x_display_info *, const XEvent *);
+extern void xsettings_initialize (Display_Info *);
+#ifndef HAVE_PGTK
+extern void xft_settings_event (Display_Info *, const XEvent *);
+#endif
 extern const char *xsettings_get_system_font (void);
 #ifdef USE_LUCID
 extern const char *xsettings_get_system_normal_font (void);
diff --git a/src/xsmfns.c b/src/xsmfns.c
index ddb86d82fe..199e3ded3d 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-2021 Free Software Foundation, Inc.
+Copyright (C) 2002-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/src/xterm.c b/src/xterm.c
index c7950c6f9f..5271589270 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1989, 1993-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -46,6 +46,10 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 #include <X11/extensions/XInput2.h>
 #endif
 
+#ifdef HAVE_XRANDR
+#include <X11/extensions/Xrandr.h>
+#endif
+
 /* Load sys/types.h if not already loaded.
    In some systems loading it twice is suicidal.  */
 #ifndef makedev
@@ -143,6 +147,17 @@ bool use_xim = true;
 bool use_xim = false;  /* configure --without-xim */
 #endif
 
+#ifdef USE_GTK
+/* GTK can't tolerate a call to `handle_interrupt' inside an event
+   signal handler, but we have to store input events inside the
+   handler for native input to work.
+
+   This acts as a `hold_quit', and it is stored in the keyboard buffer
+   (thereby causing the call to `handle_interrupt') after the GTK
+   signal handler exits and control returns to XTread_socket.  */
+struct input_event xg_pending_quit_event = { .kind = NO_EVENT };
+#endif
+
 /* Non-zero means that a HELP_EVENT has been generated since Emacs
    start.  */
 
@@ -179,8 +194,10 @@ static int x_noop_count;
 static Lisp_Object xg_default_icon_file;
 #endif
 
+#ifdef HAVE_X_I18N
 /* Some functions take this as char *, not const char *.  */
 static char emacs_class[] = EMACS_CLASS;
+#endif
 
 enum xembed_info
   {
@@ -353,15 +370,23 @@ x_extension_initialize (struct x_display_info *dpyinfo)
 static void
 x_free_xi_devices (struct x_display_info *dpyinfo)
 {
+  struct xi_touch_point_t *tem, *last;
+
   block_input ();
 
   if (dpyinfo->num_devices)
     {
       for (int i = 0; i < dpyinfo->num_devices; ++i)
        {
-         XIUngrabDevice (dpyinfo->display, dpyinfo->devices[i].device_id,
-                         CurrentTime);
          xfree (dpyinfo->devices[i].valuators);
+
+         tem = dpyinfo->devices[i].touchpoints;
+         while (tem)
+           {
+             last = tem;
+             tem = tem->next;
+             xfree (last);
+           }
        }
 
       xfree (dpyinfo->devices);
@@ -407,7 +432,7 @@ x_init_master_valuators (struct x_display_info *dpyinfo)
   block_input ();
   x_free_xi_devices (dpyinfo);
   infos = XIQueryDevice (dpyinfo->display,
-                        XIAllMasterDevices,
+                        XIAllDevices,
                         &ndevices);
 
   if (!ndevices)
@@ -432,6 +457,10 @@ x_init_master_valuators (struct x_display_info *dpyinfo)
          xi_device->grab = 0;
          xi_device->valuators =
            xmalloc (sizeof *xi_device->valuators * device->num_classes);
+         xi_device->touchpoints = NULL;
+         xi_device->master_p = (device->use == XIMasterKeyboard
+                                || device->use == XIMasterPointer);
+         xi_device->direct_p = false;
 
          for (int c = 0; c < device->num_classes; ++c)
            {
@@ -442,22 +471,36 @@ x_init_master_valuators (struct x_display_info *dpyinfo)
                  {
                    XIScrollClassInfo *info =
                      (XIScrollClassInfo *) device->classes[c];
-                   struct xi_scroll_valuator_t *valuator =
-                     &xi_device->valuators[actual_valuator_count++];
-
-                   valuator->horizontal
-                     = (info->scroll_type == XIScrollTypeHorizontal);
-                   valuator->invalid_p = true;
-                   valuator->emacs_value = DBL_MIN;
-                   valuator->increment = info->increment;
-                   valuator->number = info->number;
+                   struct xi_scroll_valuator_t *valuator;
+
+                   if (xi_device->master_p)
+                     {
+                       valuator = 
&xi_device->valuators[actual_valuator_count++];
+                       valuator->horizontal
+                         = (info->scroll_type == XIScrollTypeHorizontal);
+                       valuator->invalid_p = true;
+                       valuator->emacs_value = DBL_MIN;
+                       valuator->increment = info->increment;
+                       valuator->number = info->number;
+                     }
+
                    break;
                  }
+#endif
+#ifdef XITouchClass /* XInput 2.2 */
+               case XITouchClass:
+                 {
+                   XITouchClassInfo *info;
+
+                   info = (XITouchClassInfo *) device->classes[c];
+                   xi_device->direct_p = info->mode == XIDirectTouch;
+                 }
 #endif
                default:
                  break;
                }
            }
+
          xi_device->scroll_valuator_count = actual_valuator_count;
        }
     }
@@ -470,9 +513,10 @@ x_init_master_valuators (struct x_display_info *dpyinfo)
 /* Return the delta of the scroll valuator VALUATOR_NUMBER under
    DEVICE_ID in the display DPYINFO with VALUE.  The valuator's
    valuator will be set to VALUE afterwards.  In case no scroll
-   valuator is found, or if device_id is not known to Emacs, DBL_MAX
-   is returned.  Otherwise, the valuator is returned in
-   VALUATOR_RETURN.  */
+   valuator is found, or if the valuator state is invalid (see the
+   comment under XI_Enter in handle_one_xevent), or if device_id is
+   not known to Emacs, DBL_MAX is returned.  Otherwise, the valuator
+   is returned in VALUATOR_RETURN.  */
 static double
 x_get_scroll_valuator_delta (struct x_display_info *dpyinfo, int device_id,
                             int valuator_number, double value,
@@ -484,7 +528,7 @@ x_get_scroll_valuator_delta (struct x_display_info 
*dpyinfo, int device_id,
     {
       struct xi_device_t *device = &dpyinfo->devices[i];
 
-      if (device->device_id == device_id)
+      if (device->device_id == device_id && device->master_p)
        {
          for (int j = 0; j < device->scroll_valuator_count; ++j)
            {
@@ -499,7 +543,7 @@ x_get_scroll_valuator_delta (struct x_display_info 
*dpyinfo, int device_id,
                      *valuator_return = sv;
 
                      unblock_input ();
-                     return 0.0;
+                     return DBL_MAX;
                    }
                  else
                    {
@@ -534,43 +578,70 @@ xi_device_from_id (struct x_display_info *dpyinfo, int 
deviceid)
   return NULL;
 }
 
+#ifdef XI_TouchBegin
+
 static void
-xi_grab_or_ungrab_device (struct xi_device_t *device,
-                         struct x_display_info *dpyinfo,
-                         Window window)
+xi_link_touch_point (struct xi_device_t *device,
+                    int detail, double x, double y)
 {
-  XIEventMask mask;
-  ptrdiff_t l = XIMaskLen (XI_LASTEVENT);
-  unsigned char *m;
-  mask.mask = m = alloca (l);
-  memset (m, 0, l);
-  mask.mask_len = l;
+  struct xi_touch_point_t *touchpoint;
+
+  touchpoint = xmalloc (sizeof *touchpoint);
+  touchpoint->next = device->touchpoints;
+  touchpoint->x = x;
+  touchpoint->y = y;
+  touchpoint->number = detail;
+
+  device->touchpoints = touchpoint;
+}
 
-  XISetMask (m, XI_ButtonPress);
-  XISetMask (m, XI_ButtonRelease);
-  XISetMask (m, XI_Motion);
-  XISetMask (m, XI_Enter);
-  XISetMask (m, XI_Leave);
+static bool
+xi_unlink_touch_point (int detail,
+                      struct xi_device_t *device)
+{
+  struct xi_touch_point_t *last, *tem;
 
-  if (device->grab)
+  for (last = NULL, tem = device->touchpoints; tem;
+       last = tem, tem = tem->next)
     {
-      XIGrabDevice (dpyinfo->display, device->device_id, window,
-                   CurrentTime, None, GrabModeAsync,
-                   GrabModeAsync, True, &mask);
+      if (tem->number == detail)
+       {
+         if (!last)
+           device->touchpoints = tem->next;
+         else
+           last->next = tem->next;
+
+         xfree (tem);
+         return true;
+       }
     }
-  else
+
+  return false;
+}
+
+static struct xi_touch_point_t *
+xi_find_touch_point (struct xi_device_t *device, int detail)
+{
+  struct xi_touch_point_t *point;
+
+  for (point = device->touchpoints; point; point = point->next)
     {
-      XIUngrabDevice (dpyinfo->display, device->device_id, CurrentTime);
+      if (point->number == detail)
+       return point;
     }
+
+  return NULL;
 }
 
+#endif /* XI_TouchBegin */
+
 static void
 xi_reset_scroll_valuators_for_device_id (struct x_display_info *dpyinfo, int 
id)
 {
   struct xi_device_t *device = xi_device_from_id (dpyinfo, id);
   struct xi_scroll_valuator_t *valuator;
 
-  if (!device)
+  if (!device || !device->master_p)
     return;
 
   if (!device->scroll_valuator_count)
@@ -3872,7 +3943,7 @@ x_get_scale_factor(Display *disp, int *scale_x, int 
*scale_y)
 
 */
 static void
-x_draw_underwave (struct glyph_string *s)
+x_draw_underwave (struct glyph_string *s, int decoration_width)
 {
   Display *display = FRAME_X_DISPLAY (s->f);
 
@@ -3885,7 +3956,7 @@ x_draw_underwave (struct glyph_string *s)
 
 #ifdef USE_CAIRO
   x_draw_horizontal_wave (s->f, s->gc, s->x, s->ybase - wave_height + 3,
-                         s->width, wave_height, wave_length);
+                         decoration_width, wave_height, wave_length);
 #else  /* not USE_CAIRO */
   int dx, dy, x0, y0, width, x1, y1, x2, y2, xmax, thickness = scale_y;;
   bool odd;
@@ -3895,7 +3966,7 @@ x_draw_underwave (struct glyph_string *s)
   dy = wave_height - 1;
   x0 = s->x;
   y0 = s->ybase + wave_height / 2 - scale_y;
-  width = s->width;
+  width = decoration_width;
   xmax = x0 + width;
 
   /* Find and set clipping rectangle */
@@ -4045,20 +4116,37 @@ x_draw_glyph_string (struct glyph_string *s)
 
   if (!s->for_overlaps)
     {
+      int area_x, area_y, area_width, area_height;
+      int area_max_x, decoration_width;
+
+      /* Prevent the underline from overwriting surrounding areas
+        and the fringe.  */
+      window_box (s->w, s->area, &area_x, &area_y,
+                 &area_width, &area_height);
+      area_max_x = area_x + area_width - 1;
+
+      decoration_width = s->width;
+      if (area_max_x < (s->x + decoration_width - 1))
+       decoration_width -= (s->x + decoration_width - 1) - area_max_x;
+
+      /* Draw relief if not yet drawn.  */
+      if (!relief_drawn_p && s->face->box != FACE_NO_BOX)
+       x_draw_glyph_string_box (s);
+
       /* Draw underline.  */
       if (s->face->underline)
         {
           if (s->face->underline == FACE_UNDER_WAVE)
             {
               if (s->face->underline_defaulted_p)
-                x_draw_underwave (s);
+                x_draw_underwave (s, decoration_width);
               else
                 {
                   Display *display = FRAME_X_DISPLAY (s->f);
                   XGCValues xgcv;
                   XGetGCValues (display, s->gc, GCForeground, &xgcv);
                   XSetForeground (display, s->gc, s->face->underline_color);
-                  x_draw_underwave (s);
+                  x_draw_underwave (s, decoration_width);
                   XSetForeground (display, s->gc, xgcv.foreground);
                 }
             }
@@ -4067,8 +4155,12 @@ x_draw_glyph_string (struct glyph_string *s)
               unsigned long thickness, position;
               int y;
 
-              if (s->prev &&
-                 s->prev->face->underline == FACE_UNDER_LINE)
+              if (s->prev
+                 && s->prev->face->underline == FACE_UNDER_LINE
+                 && (s->prev->face->underline_at_descent_line_p
+                     == s->face->underline_at_descent_line_p)
+                 && (s->prev->face->underline_pixels_above_descent_line
+                     == s->face->underline_pixels_above_descent_line))
                 {
                   /* We use the same underline style as the previous one.  */
                   thickness = s->prev->underline_thickness;
@@ -4091,7 +4183,8 @@ x_draw_glyph_string (struct glyph_string *s)
                  val = (WINDOW_BUFFER_LOCAL_VALUE
                         (Qx_underline_at_descent_line, s->w));
                  underline_at_descent_line
-                   = !(NILP (val) || EQ (val, Qunbound));
+                   = (!(NILP (val) || EQ (val, Qunbound))
+                      || s->face->underline_at_descent_line_p);
 
                  val = (WINDOW_BUFFER_LOCAL_VALUE
                         (Qx_use_underline_position_properties, s->w));
@@ -4104,7 +4197,9 @@ x_draw_glyph_string (struct glyph_string *s)
                   else
                     thickness = 1;
                   if (underline_at_descent_line)
-                    position = (s->height - thickness) - (s->ybase - s->y);
+                   position = ((s->height - thickness)
+                               - (s->ybase - s->y)
+                               - s->face->underline_pixels_above_descent_line);
                   else
                     {
                       /* Get the underline position.  This is the
@@ -4124,12 +4219,16 @@ x_draw_glyph_string (struct glyph_string *s)
                       else
                         position = minimum_offset;
                     }
-                  position = max (position, minimum_offset);
+
+                 /* Ignore minimum_offset if the amount of pixels was
+                    explictly specified.  */
+                 if (!s->face->underline_pixels_above_descent_line)
+                   position = max (position, minimum_offset);
                 }
               /* Check the sanity of thickness and position.  We should
                  avoid drawing underline out of the current line area.  */
-              if (s->y + s->height <= s->ybase + position)
-                position = (s->height - 1) - (s->ybase - s->y);
+             if (s->y + s->height <= s->ybase + position)
+               position = (s->height - 1) - (s->ybase - s->y);
               if (s->y + s->height < s->ybase + position + thickness)
                 thickness = (s->y + s->height) - (s->ybase + position);
               s->underline_thickness = thickness;
@@ -4137,7 +4236,7 @@ x_draw_glyph_string (struct glyph_string *s)
               y = s->ybase + position;
               if (s->face->underline_defaulted_p)
                 x_fill_rectangle (s->f, s->gc,
-                                s->x, y, s->width, thickness);
+                                 s->x, y, decoration_width, thickness);
               else
                 {
                   Display *display = FRAME_X_DISPLAY (s->f);
@@ -4145,7 +4244,7 @@ x_draw_glyph_string (struct glyph_string *s)
                   XGetGCValues (display, s->gc, GCForeground, &xgcv);
                   XSetForeground (display, s->gc, s->face->underline_color);
                   x_fill_rectangle (s->f, s->gc,
-                                  s->x, y, s->width, thickness);
+                                   s->x, y, decoration_width, thickness);
                   XSetForeground (display, s->gc, xgcv.foreground);
                 }
             }
@@ -4157,7 +4256,7 @@ x_draw_glyph_string (struct glyph_string *s)
 
          if (s->face->overline_color_defaulted_p)
            x_fill_rectangle (s->f, s->gc, s->x, s->y + dy,
-                           s->width, h);
+                             decoration_width, h);
          else
            {
               Display *display = FRAME_X_DISPLAY (s->f);
@@ -4165,7 +4264,7 @@ x_draw_glyph_string (struct glyph_string *s)
              XGetGCValues (display, s->gc, GCForeground, &xgcv);
              XSetForeground (display, s->gc, s->face->overline_color);
              x_fill_rectangle (s->f, s->gc, s->x, s->y + dy,
-                             s->width, h);
+                               decoration_width, h);
              XSetForeground (display, s->gc, xgcv.foreground);
            }
        }
@@ -4195,15 +4294,11 @@ x_draw_glyph_string (struct glyph_string *s)
              XGetGCValues (display, s->gc, GCForeground, &xgcv);
              XSetForeground (display, s->gc, s->face->strike_through_color);
              x_fill_rectangle (s->f, s->gc, s->x, glyph_y + dy,
-                             s->width, h);
+                               decoration_width, h);
              XSetForeground (display, s->gc, xgcv.foreground);
            }
        }
 
-      /* Draw relief if not yet drawn.  */
-      if (!relief_drawn_p && s->face->box != FACE_NO_BOX)
-       x_draw_glyph_string_box (s);
-
       if (s->prev)
        {
          struct glyph_string *prev;
@@ -4871,7 +4966,8 @@ x_new_focus_frame (struct x_display_info *dpyinfo, struct 
frame *frame)
    a FOCUS_IN_EVENT into *BUFP.  */
 
 static void
-x_focus_changed (int type, int state, struct x_display_info *dpyinfo, struct 
frame *frame, struct input_event *bufp)
+x_focus_changed (int type, int state, struct x_display_info *dpyinfo, struct 
frame *frame,
+                struct input_event *bufp)
 {
   if (type == FocusIn)
     {
@@ -4887,7 +4983,15 @@ x_focus_changed (int type, int state, struct 
x_display_info *dpyinfo, struct fra
 
 #ifdef HAVE_X_I18N
       if (FRAME_XIC (frame))
-        XSetICFocus (FRAME_XIC (frame));
+       XSetICFocus (FRAME_XIC (frame));
+#ifdef USE_GTK
+      GtkWidget *widget;
+
+      gtk_im_context_focus_in (FRAME_X_OUTPUT (frame)->im_context);
+      widget = FRAME_GTK_OUTER_WIDGET (frame);
+      gtk_im_context_set_client_window (FRAME_X_OUTPUT (frame)->im_context,
+                                       gtk_widget_get_window (widget));
+#endif
 #endif
     }
   else if (type == FocusOut)
@@ -4906,6 +5010,10 @@ x_focus_changed (int type, int state, struct 
x_display_info *dpyinfo, struct fra
 #ifdef HAVE_X_I18N
       if (FRAME_XIC (frame))
         XUnsetICFocus (FRAME_XIC (frame));
+#ifdef USE_GTK
+      gtk_im_context_focus_out (FRAME_X_OUTPUT (frame)->im_context);
+      gtk_im_context_set_client_window (FRAME_X_OUTPUT (frame)->im_context, 
NULL);
+#endif
 #endif
       if (frame->pointer_invisible)
         XTtoggle_invisible_pointer (frame, false);
@@ -5138,21 +5246,30 @@ x_detect_focus_change (struct x_display_info *dpyinfo, 
struct frame *frame,
 #ifdef HAVE_XINPUT2
     case GenericEvent:
       {
-       XIEvent *xi_event = (XIEvent *) event;
+       XIEvent *xi_event = (XIEvent *) event->xcookie.data;
 
         struct frame *focus_frame = dpyinfo->x_focus_event_frame;
         int focus_state
           = focus_frame ? focus_frame->output_data.x->focus_state : 0;
 
-       if (!((xi_event->evtype == XI_Enter
+#ifdef USE_GTK
+       if (xi_event->evtype == XI_FocusIn
+           || xi_event->evtype == XI_FocusOut)
+         x_focus_changed ((xi_event->evtype == XI_FocusIn
+                           ? FocusIn : FocusOut),
+                          FOCUS_EXPLICIT,
+                          dpyinfo, frame, bufp);
+       else
+#endif
+         if ((xi_event->evtype == XI_Enter
               || xi_event->evtype == XI_Leave)
-             && (focus_state & FOCUS_EXPLICIT)))
+             && (((XIEnterEvent *) xi_event)->detail
+                 != XINotifyInferior)
+             && ((XIEnterEvent *) xi_event)->focus
+             && !(focus_state & FOCUS_EXPLICIT))
          x_focus_changed ((xi_event->evtype == XI_Enter
-                           || xi_event->evtype == XI_FocusIn
                            ? FocusIn : FocusOut),
-                          (xi_event->evtype == XI_Enter
-                           || xi_event->evtype == XI_Leave
-                           ? FOCUS_IMPLICIT : FOCUS_EXPLICIT),
+                          FOCUS_IMPLICIT,
                           dpyinfo, frame, bufp);
        break;
       }
@@ -5253,6 +5370,15 @@ x_find_modifier_meanings (struct x_display_info *dpyinfo)
   KeySym *syms;
   int syms_per_code;
   XModifierKeymap *mods;
+#ifdef HAVE_XKB
+  Atom meta;
+  Atom super;
+  Atom hyper;
+  Atom shiftlock;
+  Atom alt;
+  int i;
+  int found_meta_p = false;
+#endif
 
   dpyinfo->meta_mod_mask = 0;
   dpyinfo->shift_lock_mask = 0;
@@ -5262,6 +5388,50 @@ x_find_modifier_meanings (struct x_display_info *dpyinfo)
 
   XDisplayKeycodes (dpyinfo->display, &min_code, &max_code);
 
+#ifdef HAVE_XKB
+  if (dpyinfo->xkb_desc)
+    {
+      meta = XInternAtom (dpyinfo->display, "Meta", False);
+      super = XInternAtom (dpyinfo->display, "Super", False);
+      hyper = XInternAtom (dpyinfo->display, "Hyper", False);
+      shiftlock = XInternAtom (dpyinfo->display, "ShiftLock", False);
+      alt = XInternAtom (dpyinfo->display, "Alt", False);
+
+      for (i = 0; i < XkbNumVirtualMods; i++)
+       {
+         uint vmodmask = dpyinfo->xkb_desc->server->vmods[i];
+
+         if (dpyinfo->xkb_desc->names->vmods[i] == meta)
+           {
+             dpyinfo->meta_mod_mask |= vmodmask;
+             found_meta_p = vmodmask;
+           }
+         else if (dpyinfo->xkb_desc->names->vmods[i] == alt)
+           dpyinfo->alt_mod_mask |= vmodmask;
+         else if (dpyinfo->xkb_desc->names->vmods[i] == super)
+           dpyinfo->super_mod_mask |= vmodmask;
+         else if (dpyinfo->xkb_desc->names->vmods[i] == hyper)
+           dpyinfo->hyper_mod_mask |= vmodmask;
+         else if (dpyinfo->xkb_desc->names->vmods[i] == shiftlock)
+           dpyinfo->shift_lock_mask |= vmodmask;
+       }
+
+      if (!found_meta_p)
+       {
+         dpyinfo->meta_mod_mask = dpyinfo->alt_mod_mask;
+         dpyinfo->alt_mod_mask = 0;
+       }
+
+      if (dpyinfo->alt_mod_mask & dpyinfo->meta_mod_mask)
+       dpyinfo->alt_mod_mask &= ~dpyinfo->meta_mod_mask;
+
+      if (dpyinfo->hyper_mod_mask & dpyinfo->super_mod_mask)
+       dpyinfo->hyper_mod_mask &= ~dpyinfo->super_mod_mask;
+
+      return;
+    }
+#endif
+
   syms = XGetKeyboardMapping (dpyinfo->display,
                              min_code, max_code - min_code + 1,
                              &syms_per_code);
@@ -5274,66 +5444,66 @@ x_find_modifier_meanings (struct x_display_info 
*dpyinfo)
     bool found_alt_or_meta;
 
     for (row = 3; row < 8; row++)
-    {
-      found_alt_or_meta = false;
-      for (col = 0; col < mods->max_keypermod; col++)
-       {
-         KeyCode code = mods->modifiermap[(row * mods->max_keypermod) + col];
-
-         /* Zeroes are used for filler.  Skip them.  */
-         if (code == 0)
-           continue;
-
-         /* Are any of this keycode's keysyms a meta key?  */
+      {
+       found_alt_or_meta = false;
+       for (col = 0; col < mods->max_keypermod; col++)
          {
-           int code_col;
-
-           for (code_col = 0; code_col < syms_per_code; code_col++)
-             {
-               int sym = syms[((code - min_code) * syms_per_code) + code_col];
-
-               switch (sym)
-                 {
-                 case XK_Meta_L:
-                 case XK_Meta_R:
-                   found_alt_or_meta = true;
-                   dpyinfo->meta_mod_mask |= (1 << row);
-                   break;
+           KeyCode code = mods->modifiermap[(row * mods->max_keypermod) + col];
 
-                 case XK_Alt_L:
-                 case XK_Alt_R:
-                   found_alt_or_meta = true;
-                   dpyinfo->alt_mod_mask |= (1 << row);
-                   break;
+           /* Zeroes are used for filler.  Skip them.  */
+           if (code == 0)
+             continue;
 
-                 case XK_Hyper_L:
-                 case XK_Hyper_R:
-                   if (!found_alt_or_meta)
-                     dpyinfo->hyper_mod_mask |= (1 << row);
-                   code_col = syms_per_code;
-                   col = mods->max_keypermod;
-                   break;
+           /* Are any of this keycode's keysyms a meta key?  */
+           {
+             int code_col;
 
-                 case XK_Super_L:
-                 case XK_Super_R:
-                   if (!found_alt_or_meta)
-                     dpyinfo->super_mod_mask |= (1 << row);
-                   code_col = syms_per_code;
-                   col = mods->max_keypermod;
-                   break;
+             for (code_col = 0; code_col < syms_per_code; code_col++)
+               {
+                 int sym = syms[((code - min_code) * syms_per_code) + 
code_col];
 
-                 case XK_Shift_Lock:
-                   /* Ignore this if it's not on the lock modifier.  */
-                   if (!found_alt_or_meta && ((1 << row) == LockMask))
-                     dpyinfo->shift_lock_mask = LockMask;
-                   code_col = syms_per_code;
-                   col = mods->max_keypermod;
-                   break;
-                 }
-             }
+                 switch (sym)
+                   {
+                   case XK_Meta_L:
+                   case XK_Meta_R:
+                     found_alt_or_meta = true;
+                     dpyinfo->meta_mod_mask |= (1 << row);
+                     break;
+
+                   case XK_Alt_L:
+                   case XK_Alt_R:
+                     found_alt_or_meta = true;
+                     dpyinfo->alt_mod_mask |= (1 << row);
+                     break;
+
+                   case XK_Hyper_L:
+                   case XK_Hyper_R:
+                     if (!found_alt_or_meta)
+                       dpyinfo->hyper_mod_mask |= (1 << row);
+                     code_col = syms_per_code;
+                     col = mods->max_keypermod;
+                     break;
+
+                   case XK_Super_L:
+                   case XK_Super_R:
+                     if (!found_alt_or_meta)
+                       dpyinfo->super_mod_mask |= (1 << row);
+                     code_col = syms_per_code;
+                     col = mods->max_keypermod;
+                     break;
+
+                   case XK_Shift_Lock:
+                     /* Ignore this if it's not on the lock modifier.  */
+                     if (!found_alt_or_meta && ((1 << row) == LockMask))
+                       dpyinfo->shift_lock_mask = LockMask;
+                     code_col = syms_per_code;
+                     col = mods->max_keypermod;
+                     break;
+                   }
+               }
+           }
          }
-       }
-    }
+      }
   }
 
   /* If we couldn't find any meta keys, accept any alt keys as meta keys.  */
@@ -8107,10 +8277,52 @@ x_filter_event (struct x_display_info *dpyinfo, XEvent 
*event)
    XFilterEvent because that's the one for which the IC
    was created.  */
 
-  struct frame *f1 = x_any_window_to_frame (dpyinfo,
-                                            event->xclient.window);
+  struct frame *f1;
+
+#if defined HAVE_XINPUT2 && defined USE_GTK
+  bool xinput_event = false;
+  if (dpyinfo->supports_xi2
+      && event->type == GenericEvent
+      && (event->xgeneric.extension
+         == dpyinfo->xi2_opcode)
+      && (event->xgeneric.evtype
+         == XI_KeyPress))
+    {
+      f1 = x_any_window_to_frame (dpyinfo,
+                                 ((XIDeviceEvent *)
+                                  event->xcookie.data)->event);
+      xinput_event = true;
+    }
+  else
+#endif
+    f1 = x_any_window_to_frame (dpyinfo,
+                               event->xclient.window);
+
+#ifdef USE_GTK
+  if (!x_gtk_use_native_input
+      && !dpyinfo->prefer_native_input)
+    {
+#endif
+      return XFilterEvent (event, f1 ? FRAME_X_WINDOW (f1) : None);
+#ifdef USE_GTK
+    }
+  else if (f1 && (event->type == KeyPress
+#ifdef HAVE_XINPUT2
+                 || xinput_event
+#endif
+                 ))
+    {
+      bool result;
+
+      block_input ();
+      result = xg_filter_key (f1, event);
+      unblock_input ();
+
+      return result;
+    }
 
-  return XFilterEvent (event, f1 ? FRAME_X_WINDOW (f1) : None);
+  return 0;
+#endif
 }
 #endif
 
@@ -8145,6 +8357,38 @@ event_handler_gdk (GdkXEvent *gxev, GdkEvent *ev, 
gpointer data)
          unblock_input ();
          return GDK_FILTER_REMOVE;
        }
+#elif USE_GTK
+      if (dpyinfo && (dpyinfo->prefer_native_input
+                     || x_gtk_use_native_input)
+         && (xev->type == KeyPress
+#ifdef HAVE_XINPUT2
+             /* GTK claims cookies for us, so we don't have to claim
+                them here.  */
+             || (dpyinfo->supports_xi2
+                 && xev->type == GenericEvent
+                 && (xev->xgeneric.extension
+                     == dpyinfo->xi2_opcode)
+                 && (xev->xgeneric.evtype
+                     == XI_KeyPress))
+#endif
+             ))
+       {
+         struct frame *f;
+
+#ifdef HAVE_XINPUT2
+         if (xev->type == GenericEvent)
+           f = x_any_window_to_frame (dpyinfo,
+                                      ((XIDeviceEvent *) 
xev->xcookie.data)->event);
+         else
+#endif
+           f = x_any_window_to_frame (dpyinfo, xev->xany.window);
+
+         if (f && xg_filter_key (f, xev))
+           {
+             unblock_input ();
+             return GDK_FILTER_REMOVE;
+           }
+       }
 #endif
 
       if (! dpyinfo)
@@ -8292,11 +8536,20 @@ handle_one_xevent (struct x_display_info *dpyinfo,
   inev.ie.kind = NO_EVENT;
   inev.ie.arg = Qnil;
 
+#ifdef HAVE_XKB
+  if (event->type != dpyinfo->xkb_event_type)
+    {
+#endif
 #ifdef HAVE_XINPUT2
-  if (event->type != GenericEvent)
+      if (event->type != GenericEvent)
 #endif
-    any = x_any_window_to_frame (dpyinfo, event->xany.window);
+       any = x_any_window_to_frame (dpyinfo, event->xany.window);
 #ifdef HAVE_XINPUT2
+      else
+       any = NULL;
+#endif
+#ifdef HAVE_XKB
+    }
   else
     any = NULL;
 #endif
@@ -9290,6 +9543,13 @@ handle_one_xevent (struct x_display_info *dpyinfo,
       x_detect_focus_change (dpyinfo, any, event, &inev.ie);
 
       f = x_top_window_to_frame (dpyinfo, event->xcrossing.window);
+#if defined HAVE_X_TOOLKIT && defined HAVE_XINPUT2
+      /* The XI2 event mask is set on the frame widget, so this event
+        likely originates from the shell widget, which we aren't
+        interested in.  */
+      if (dpyinfo->supports_xi2)
+       f = NULL;
+#endif
       if (f)
         {
           if (f == hlinfo->mouse_face_mouse_frame)
@@ -9611,6 +9871,8 @@ handle_one_xevent (struct x_display_info *dpyinfo,
                inev.ie.kind = SELECT_WINDOW_EVENT;
                inev.ie.frame_or_window = xvw->w;
              }
+
+           *finish = X_EVENT_DROP;
            goto OTHER;
          }
 #endif
@@ -9896,24 +10158,52 @@ handle_one_xevent (struct x_display_info *dpyinfo,
 
            x_display_set_last_user_time (dpyinfo, xi_event->time);
            x_detect_focus_change (dpyinfo, any, event, &inev.ie);
+           {
+#ifdef HAVE_XWIDGETS
+             struct xwidget_view *xwidget_view = xwidget_view_from_window 
(enter->event);
+#else
+             bool xwidget_view = false;
+#endif
+
+             /* One problem behind the design of XInput 2 scrolling is
+                that valuators are not unique to each window, but only
+                the window that has grabbed the valuator's device or
+                the window that the device's pointer is on top of can
+                receive motion events.  There is also no way to
+                retrieve the value of a valuator outside of each motion
+                event.
+
+                As such, to prevent wildly inaccurate results when the
+                valuators have changed outside Emacs, we reset our
+                records of each valuator's value whenever the pointer
+                re-enters a frame after its valuators have potentially
+                been changed elsewhere.  */
+             if (enter->detail != XINotifyInferior
+                 && enter->mode != XINotifyPassiveUngrab
+                 /* See the comment under FocusIn in
+                    `x_detect_focus_change'.  The main relevant culprit
+                    these days seems to be XFCE.  */
+                 && enter->mode != XINotifyUngrab
+                 && (xwidget_view
+                     || (any && enter->event == FRAME_X_WINDOW (any))))
+               xi_reset_scroll_valuators_for_device_id (dpyinfo, 
enter->deviceid);
+
+#ifdef HAVE_XWIDGETS
+             if (xwidget_view)
+               {
+                 /* Don't send an enter event to the xwidget if the
+                    first button is pressed, to avoid it releasing
+                    the passive grab.  I don't know why that happens,
+                    but this workaround makes dragging to select text
+                    work again.  */
+                 if (!(enter->buttons.mask_len
+                       && XIMaskIsSet (enter->buttons.mask, 1)))
+                   xwidget_motion_or_crossing (xwidget_view, event);
 
-           /* One problem behind the design of XInput 2 scrolling is
-              that valuators are not unique to each window, but only
-              the window that has grabbed the valuator's device or
-              the window that the device's pointer is on top of can
-              receive motion events.  There is also no way to
-              retrieve the value of a valuator outside of each motion
-              event.
-
-              As such, to prevent wildly inaccurate results when the
-              valuators have changed outside Emacs, we reset our
-              records of each valuator's value whenever the pointer
-              re-enters a frame after its valuators have potentially
-              been changed elsewhere.  */
-           if (enter->detail != XINotifyInferior
-               && enter->mode != XINotifyPassiveUngrab
-               && enter->mode != XINotifyUngrab && any)
-             xi_reset_scroll_valuators_for_device_id (dpyinfo, 
enter->deviceid);
+                 goto XI_OTHER;
+               }
+#endif
+           }
 
            f = any;
 
@@ -9937,10 +10227,31 @@ handle_one_xevent (struct x_display_info *dpyinfo,
            ev.window = leave->event;
            any = x_any_window_to_frame (dpyinfo, leave->event);
 
+#ifdef HAVE_XWIDGETS
+           {
+             struct xwidget_view *xvw
+               = xwidget_view_from_window (leave->event);
+
+             if (xvw)
+               {
+                 *finish = X_EVENT_DROP;
+                 xwidget_motion_or_crossing (xvw, event);
+
+                 goto XI_OTHER;
+               }
+           }
+#endif
+
            x_display_set_last_user_time (dpyinfo, xi_event->time);
            x_detect_focus_change (dpyinfo, any, event, &inev.ie);
 
+#ifndef USE_X_TOOLKIT
            f = x_top_window_to_frame (dpyinfo, leave->event);
+#else
+           /* On Xt builds that have XI2, the enter and leave event
+              masks are set on the frame widget's window.  */
+           f = x_window_to_frame (dpyinfo, leave->event);
+#endif
            if (f)
              {
                if (f == hlinfo->mouse_face_mouse_frame)
@@ -9965,207 +10276,285 @@ handle_one_xevent (struct x_display_info *dpyinfo,
 #endif
            goto XI_OTHER;
          case XI_Motion:
-           states = &xev->valuators;
-           values = states->values;
+           {
+             struct xi_device_t *device;
+             bool touch_end_event_seen = false;
 
-           x_display_set_last_user_time (dpyinfo, xi_event->time);
+             states = &xev->valuators;
+             values = states->values;
+             device = xi_device_from_id (dpyinfo, xev->deviceid);
+
+             if (!device || !device->master_p)
+               goto XI_OTHER;
+
+#ifdef XI_TouchBegin
+             if (xev->flags & XIPointerEmulated
+                 && dpyinfo->xi2_version >= 2)
+               goto XI_OTHER;
+#endif
+
+             x_display_set_last_user_time (dpyinfo, xi_event->time);
 
 #ifdef HAVE_XWIDGETS
-           struct xwidget_view *xv = xwidget_view_from_window (xev->event);
-           double xv_total_x = 0.0;
-           double xv_total_y = 0.0;
+             struct xwidget_view *xv = xwidget_view_from_window (xev->event);
+             double xv_total_x = 0.0;
+             double xv_total_y = 0.0;
 #endif
 
-           for (int i = 0; i < states->mask_len * 8; i++)
-             {
-               if (XIMaskIsSet (states->mask, i))
-                 {
-                   struct xi_scroll_valuator_t *val;
-                   double delta, scroll_unit;
+             for (int i = 0; i < states->mask_len * 8; i++)
+               {
+                 if (XIMaskIsSet (states->mask, i))
+                   {
+                     struct xi_scroll_valuator_t *val;
+                     double delta, scroll_unit;
+                     int scroll_height;
+                     Lisp_Object window;
 
 
-                   /* See the comment on top of
-                      x_init_master_valuators for more details on how
-                      scroll wheel movement is reported on XInput 2.  */
-                   delta = x_get_scroll_valuator_delta (dpyinfo, xev->deviceid,
-                                                        i, *values, &val);
+                     /* See the comment on top of
+                        x_init_master_valuators for more details on how
+                        scroll wheel movement is reported on XInput 2.  */
+                     delta = x_get_scroll_valuator_delta (dpyinfo, 
xev->deviceid,
+                                                          i, *values, &val);
 
-                   if (delta != DBL_MAX)
-                     {
+                     if (delta != DBL_MAX)
+                       {
 #ifdef HAVE_XWIDGETS
-                       if (xv)
-                         {
-                           if (val->horizontal)
-                             xv_total_x += delta;
-                           else
-                             xv_total_y += -delta;
-
-                           found_valuator = true;
-                           continue;
-                         }
+                         if (xv)
+                           {
+                             /* FIXME: figure out what in GTK is
+                                causing interval values to jump by
+                                >100 at the end of a touch sequence
+                                when an xwidget gets a scroll event
+                                where is_stop is TRUE.  */
+                             if (fabs (delta) > 100)
+                               continue;
+                             if (val->horizontal)
+                               xv_total_x += delta;
+                             else
+                               xv_total_y += delta;
+
+                             found_valuator = true;
+                             continue;
+                           }
 #endif
-                       if (!f)
-                         {
-                           f = x_any_window_to_frame (dpyinfo, xev->event);
+                         if (!f)
+                           {
+                             f = x_any_window_to_frame (dpyinfo, xev->event);
 
-                           if (!f)
-                             goto XI_OTHER;
-                         }
+                             if (!f)
+                               goto XI_OTHER;
+                           }
 
-                       found_valuator = true;
+                         found_valuator = true;
 
-                       if (signbit (delta) != signbit (val->emacs_value))
-                         val->emacs_value = 0;
+                         if (signbit (delta) != signbit (val->emacs_value))
+                           val->emacs_value = 0;
 
-                       val->emacs_value += delta;
+                         val->emacs_value += delta;
 
-                       if (x_coalesce_scroll_events
-                           && (fabs (val->emacs_value) < 1))
-                         continue;
+                         if (mwheel_coalesce_scroll_events
+                             && (fabs (val->emacs_value) < 1)
+                             && (fabs (delta) > 0))
+                           continue;
 
-                       bool s = signbit (val->emacs_value);
-                       inev.ie.kind = (val->horizontal
-                                       ? HORIZ_WHEEL_EVENT
-                                       : WHEEL_EVENT);
-                       inev.ie.timestamp = xev->time;
+                         bool s = signbit (val->emacs_value);
+                         inev.ie.kind = (fabs (delta) > 0
+                                         ? (val->horizontal
+                                            ? HORIZ_WHEEL_EVENT
+                                            : WHEEL_EVENT)
+                                         : TOUCH_END_EVENT);
+                         inev.ie.timestamp = xev->time;
 
-                       XSETINT (inev.ie.x, lrint (xev->event_x));
-                       XSETINT (inev.ie.y, lrint (xev->event_y));
-                       XSETFRAME (inev.ie.frame_or_window, f);
+                         XSETINT (inev.ie.x, lrint (xev->event_x));
+                         XSETINT (inev.ie.y, lrint (xev->event_y));
+                         XSETFRAME (inev.ie.frame_or_window, f);
 
-                       inev.ie.modifiers = !s ? up_modifier : down_modifier;
-                       inev.ie.modifiers
-                         |= x_x_to_emacs_modifiers (dpyinfo,
-                                                    xev->mods.effective);
+                         if (fabs (delta) > 0)
+                           {
+                             inev.ie.modifiers = !s ? up_modifier : 
down_modifier;
+                             inev.ie.modifiers
+                               |= x_x_to_emacs_modifiers (dpyinfo,
+                                                          xev->mods.effective);
+                           }
 
-                       scroll_unit = pow (FRAME_PIXEL_HEIGHT (f), 2.0 / 3.0);
+                         window = window_from_coordinates (f, xev->event_x,
+                                                           xev->event_y, NULL,
+                                                           false, false);
 
-                       if (val->horizontal)
-                         {
-                           inev.ie.arg
-                             = list3 (Qnil,
-                                      make_float (val->emacs_value
-                                                  * scroll_unit),
-                                      make_float (0));
-                         }
-                        else
-                         {
-                           inev.ie.arg = list3 (Qnil, make_float (0),
-                                                make_float (val->emacs_value
-                                                            * scroll_unit));
-                         }
+                         if (WINDOWP (window))
+                           scroll_height = XWINDOW (window)->pixel_height;
+                         else
+                           /* EVENT_X and EVENT_Y can be outside the
+                              frame if F holds the input grab, so fall
+                              back to the height of the frame instead.  */
+                           scroll_height = FRAME_PIXEL_HEIGHT (f);
 
-                       kbd_buffer_store_event_hold (&inev.ie, hold_quit);
+                         scroll_unit = pow (scroll_height, 2.0 / 3.0);
 
-                       val->emacs_value = 0;
-                     }
-                   values++;
-                 }
+                         if (NUMBERP (Vx_scroll_event_delta_factor))
+                           scroll_unit *= XFLOATINT 
(Vx_scroll_event_delta_factor);
 
-               inev.ie.kind = NO_EVENT;
-             }
+                         if (fabs (delta) > 0)
+                           {
+                             if (val->horizontal)
+                               {
+                                 inev.ie.arg
+                                   = list3 (Qnil,
+                                            make_float (val->emacs_value
+                                                        * scroll_unit),
+                                            make_float (0));
+                               }
+                             else
+                               {
+                                 inev.ie.arg = list3 (Qnil, make_float (0),
+                                                      make_float 
(val->emacs_value
+                                                                  * 
scroll_unit));
+                               }
+                           }
+                         else
+                           {
+                             inev.ie.arg = Qnil;
+                           }
 
-#ifdef HAVE_XWIDGETS
-           if (xv)
-             {
-               if (found_valuator)
-                 xwidget_scroll (xv, xev->event_x, xev->event_y,
-                                 xv_total_x, xv_total_y, xev->mods.effective,
-                                 xev->time);
-               else
-                 xwidget_motion_notify (xv, xev->event_x, xev->event_y,
-                                        xev->mods.effective, xev->time);
+                         if (inev.ie.kind != TOUCH_END_EVENT
+                             || !touch_end_event_seen)
+                           {
+                             kbd_buffer_store_event_hold (&inev.ie, hold_quit);
+                             touch_end_event_seen = inev.ie.kind == 
TOUCH_END_EVENT;
+                           }
 
-               goto XI_OTHER;
-             }
-#endif
-           if (found_valuator)
-             goto XI_OTHER;
+                         val->emacs_value = 0;
+                       }
+                     values++;
+                   }
 
-           ev.x = lrint (xev->event_x);
-           ev.y = lrint (xev->event_y);
-           ev.window = xev->event;
+                 inev.ie.kind = NO_EVENT;
+               }
 
-           previous_help_echo_string = help_echo_string;
-           help_echo_string = Qnil;
+#ifdef HAVE_XWIDGETS
+             if (xv)
+               {
+                 uint state = xev->mods.effective;
 
-           if (hlinfo->mouse_face_hidden)
-             {
-               hlinfo->mouse_face_hidden = false;
-               clear_mouse_face (hlinfo);
-             }
+                 if (xev->buttons.mask_len)
+                   {
+                     if (XIMaskIsSet (xev->buttons.mask, 1))
+                       state |= Button1Mask;
+                     if (XIMaskIsSet (xev->buttons.mask, 2))
+                       state |= Button2Mask;
+                     if (XIMaskIsSet (xev->buttons.mask, 3))
+                       state |= Button3Mask;
+                   }
 
-           f = mouse_or_wdesc_frame (dpyinfo, xev->event);
+                 if (found_valuator)
+                   xwidget_scroll (xv, xev->event_x, xev->event_y,
+                                   -xv_total_x, -xv_total_y, state,
+                                   xev->time, (xv_total_x == 0.0
+                                               && xv_total_y == 0.0));
+                 else
+                   xwidget_motion_notify (xv, xev->event_x, xev->event_y,
+                                          xev->root_x, xev->root_y, state,
+                                          xev->time);
 
+                 goto XI_OTHER;
+               }
+#endif
+             if (found_valuator)
+               {
 #ifdef USE_GTK
-           if (f && xg_event_is_for_scrollbar (f, event))
-             f = 0;
+                 if (f && xg_event_is_for_scrollbar (f, event))
+                   *finish = X_EVENT_DROP;
 #endif
-           if (f)
-             {
-               /* Maybe generate a SELECT_WINDOW_EVENT for
-                  `mouse-autoselect-window' but don't let popup menus
-                  interfere with this (Bug#1261).  */
-               if (!NILP (Vmouse_autoselect_window)
-                   && !popup_activated ()
-                   /* Don't switch if we're currently in the minibuffer.
-                      This tries to work around problems where the
-                      minibuffer gets unselected unexpectedly, and where
-                      you then have to move your mouse all the way down to
-                      the minibuffer to select it.  */
-                   && !MINI_WINDOW_P (XWINDOW (selected_window))
-                   /* With `focus-follows-mouse' non-nil create an event
-                      also when the target window is on another frame.  */
-                   && (f == XFRAME (selected_frame)
-                       || !NILP (focus_follows_mouse)))
-                 {
-                   static Lisp_Object last_mouse_window;
-                   Lisp_Object window = window_from_coordinates (f, ev.x, 
ev.y, 0, false, false);
-
-                   /* A window will be autoselected only when it is not
-                      selected now and the last mouse movement event was
-                      not in it.  The remainder of the code is a bit vague
-                      wrt what a "window" is.  For immediate autoselection,
-                      the window is usually the entire window but for GTK
-                      where the scroll bars don't count.  For delayed
-                      autoselection the window is usually the window's text
-                      area including the margins.  */
-                   if (WINDOWP (window)
-                       && !EQ (window, last_mouse_window)
-                       && !EQ (window, selected_window))
-                     {
-                       inev.ie.kind = SELECT_WINDOW_EVENT;
-                       inev.ie.frame_or_window = window;
-                     }
-
-                   /* Remember the last window where we saw the mouse.  */
-                   last_mouse_window = window;
-                 }
+                 goto XI_OTHER;
+               }
 
-               if (!x_note_mouse_movement (f, &ev))
-                 help_echo_string = previous_help_echo_string;
-             }
-           else
-             {
+             ev.x = lrint (xev->event_x);
+             ev.y = lrint (xev->event_y);
+             ev.window = xev->event;
+             ev.time = xev->time;
+
+             previous_help_echo_string = help_echo_string;
+             help_echo_string = Qnil;
+
+             if (hlinfo->mouse_face_hidden)
+               {
+                 hlinfo->mouse_face_hidden = false;
+                 clear_mouse_face (hlinfo);
+               }
+
+             f = mouse_or_wdesc_frame (dpyinfo, xev->event);
+
+#ifdef USE_GTK
+             if (f && xg_event_is_for_scrollbar (f, event))
+               f = 0;
+#endif
+             if (f)
+               {
+                 /* Maybe generate a SELECT_WINDOW_EVENT for
+                    `mouse-autoselect-window' but don't let popup menus
+                    interfere with this (Bug#1261).  */
+                 if (!NILP (Vmouse_autoselect_window)
+                     && !popup_activated ()
+                     /* Don't switch if we're currently in the minibuffer.
+                        This tries to work around problems where the
+                        minibuffer gets unselected unexpectedly, and where
+                        you then have to move your mouse all the way down to
+                        the minibuffer to select it.  */
+                     && !MINI_WINDOW_P (XWINDOW (selected_window))
+                     /* With `focus-follows-mouse' non-nil create an event
+                        also when the target window is on another frame.  */
+                     && (f == XFRAME (selected_frame)
+                         || !NILP (focus_follows_mouse)))
+                   {
+                     static Lisp_Object last_mouse_window;
+                     Lisp_Object window = window_from_coordinates (f, ev.x, 
ev.y, 0, false, false);
+
+                     /* A window will be autoselected only when it is not
+                        selected now and the last mouse movement event was
+                        not in it.  The remainder of the code is a bit vague
+                        wrt what a "window" is.  For immediate autoselection,
+                        the window is usually the entire window but for GTK
+                        where the scroll bars don't count.  For delayed
+                        autoselection the window is usually the window's text
+                        area including the margins.  */
+                     if (WINDOWP (window)
+                         && !EQ (window, last_mouse_window)
+                         && !EQ (window, selected_window))
+                       {
+                         inev.ie.kind = SELECT_WINDOW_EVENT;
+                         inev.ie.frame_or_window = window;
+                       }
+
+                     /* Remember the last window where we saw the mouse.  */
+                     last_mouse_window = window;
+                   }
+
+                 if (!x_note_mouse_movement (f, &ev))
+                   help_echo_string = previous_help_echo_string;
+               }
+             else
+               {
 #ifndef USE_TOOLKIT_SCROLL_BARS
-               struct scroll_bar *bar
-                 = x_window_to_scroll_bar (xi_event->display, xev->event, 2);
+                 struct scroll_bar *bar
+                   = x_window_to_scroll_bar (xi_event->display, xev->event, 2);
 
-               if (bar)
-                 x_scroll_bar_note_movement (bar, &ev);
+                 if (bar)
+                   x_scroll_bar_note_movement (bar, &ev);
 #endif /* USE_TOOLKIT_SCROLL_BARS */
 
-               /* If we move outside the frame, then we're
-                  certainly no longer on any text in the frame.  */
-               clear_mouse_face (hlinfo);
-             }
+                 /* If we move outside the frame, then we're
+                    certainly no longer on any text in the frame.  */
+                 clear_mouse_face (hlinfo);
+               }
 
-           /* If the contents of the global variable help_echo_string
-              has changed, generate a HELP_EVENT.  */
-           if (!NILP (help_echo_string)
-               || !NILP (previous_help_echo_string))
-             do_help = 1;
-           goto XI_OTHER;
+             /* If the contents of the global variable help_echo_string
+                has changed, generate a HELP_EVENT.  */
+             if (!NILP (help_echo_string)
+                 || !NILP (previous_help_echo_string))
+               do_help = 1;
+             goto XI_OTHER;
+           }
          case XI_ButtonRelease:
          case XI_ButtonPress:
            {
@@ -10175,19 +10564,48 @@ handle_one_xevent (struct x_display_info *dpyinfo,
              bool tab_bar_p = false;
              bool tool_bar_p = false;
              struct xi_device_t *device;
+#ifdef HAVE_XWIDGETS
+             struct xwidget_view *xvw;
+#endif
 
 #ifdef XIPointerEmulated
              /* Ignore emulated scroll events when XI2 native
                 scroll events are present.  */
-             if (dpyinfo->xi2_version >= 1
-                 && xev->detail >= 4
-                 && xev->detail <= 8
+             if (((dpyinfo->xi2_version == 1
+                  && xev->detail >= 4
+                  && xev->detail <= 8)
+                  || (dpyinfo->xi2_version >= 2))
                  && xev->flags & XIPointerEmulated)
-               goto XI_OTHER;
+               {
+                 *finish = X_EVENT_DROP;
+                 goto XI_OTHER;
+               }
+#endif
+
+#ifdef HAVE_XWIDGETS
+             xvw = xwidget_view_from_window (xev->event);
+             if (xvw)
+               {
+                 xwidget_button (xvw, xev->evtype == XI_ButtonPress,
+                                 lrint (xev->event_x), lrint (xev->event_y),
+                                 xev->detail, xev->mods.effective, xev->time);
+
+                 if (!EQ (selected_window, xvw->w) && (xev->detail < 4))
+                   {
+                     inev.ie.kind = SELECT_WINDOW_EVENT;
+                     inev.ie.frame_or_window = xvw->w;
+                   }
+
+                 *finish = X_EVENT_DROP;
+                 goto XI_OTHER;
+               }
 #endif
 
              device = xi_device_from_id (dpyinfo, xev->deviceid);
 
+             if (!device || !device->master_p)
+               goto XI_OTHER;
+
              bv.button = xev->detail;
              bv.type = xev->evtype == XI_ButtonPress ? ButtonPress : 
ButtonRelease;
              bv.x = lrint (xev->event_x);
@@ -10313,8 +10731,6 @@ handle_one_xevent (struct x_display_info *dpyinfo,
                  device->grab &= ~(1 << xev->detail);
                }
 
-             xi_grab_or_ungrab_device (device, dpyinfo, xev->event);
-
              if (f)
                f->mouse_moved = false;
 
@@ -10354,6 +10770,12 @@ handle_one_xevent (struct x_display_info *dpyinfo,
              int copy_bufsiz = sizeof (copy_buffer);
              ptrdiff_t i;
              int nchars, len;
+             struct xi_device_t *device;
+
+             device = xi_device_from_id (dpyinfo, xev->deviceid);
+
+             if (!device || !device->master_p)
+               goto XI_OTHER;
 
 #if defined (USE_X_TOOLKIT) || defined (USE_GTK)
              /* Dispatch XI_KeyPress events when in menu.  */
@@ -10361,7 +10783,11 @@ handle_one_xevent (struct x_display_info *dpyinfo,
                goto XI_OTHER;
 #endif
 
-#ifdef HAVE_X_I18N
+             x_display_set_last_user_time (dpyinfo, xev->time);
+             ignore_next_mouse_click_timeout = 0;
+
+             f = x_any_window_to_frame (dpyinfo, xev->event);
+
              XKeyPressedEvent xkey;
 
              memset (&xkey, 0, sizeof xkey);
@@ -10374,22 +10800,47 @@ handle_one_xevent (struct x_display_info *dpyinfo,
              xkey.root = xev->root;
              xkey.subwindow = xev->child;
              xkey.time = xev->time;
-             xkey.state = xev->mods.effective;
+             xkey.state = ((xev->mods.effective & ~(1 << 13 | 1 << 14))
+                           | (xev->group.effective << 13));
              xkey.keycode = xev->detail;
              xkey.same_screen = True;
 
+#ifdef HAVE_X_I18N
+#ifdef USE_GTK
+             if ((!x_gtk_use_native_input
+                  && x_filter_event (dpyinfo, (XEvent *) &xkey))
+                 || (x_gtk_use_native_input
+                     && x_filter_event (dpyinfo, event)))
+               {
+                 *finish = X_EVENT_DROP;
+                 goto XI_OTHER;
+               }
+#else
              if (x_filter_event (dpyinfo, (XEvent *) &xkey))
                {
                  *finish = X_EVENT_DROP;
                  goto XI_OTHER;
                }
 #endif
+#elif USE_GTK
+             if ((x_gtk_use_native_input
+                  || dpyinfo->prefer_native_input)
+                 && xg_filter_key (any, event))
+               {
+                 *finish = X_EVENT_DROP;
+                 goto XI_OTHER;
+               }
+#endif
 
 #ifdef HAVE_XKB
              if (dpyinfo->xkb_desc)
                {
+                 uint xkb_state = state;
+                 xkb_state &= ~(1 << 13 | 1 << 14);
+                 xkb_state |= xev->group.effective << 13;
+
                  if (!XkbTranslateKeyCode (dpyinfo->xkb_desc, keycode,
-                                           state, &mods_rtrn, &keysym))
+                                           xkb_state, &mods_rtrn, &keysym))
                    goto XI_OTHER;
                }
              else
@@ -10411,11 +10862,6 @@ handle_one_xevent (struct x_display_info *dpyinfo,
              if (keysym == NoSymbol)
                goto XI_OTHER;
 
-             x_display_set_last_user_time (dpyinfo, xev->time);
-             ignore_next_mouse_click_timeout = 0;
-
-             f = x_any_window_to_frame (dpyinfo, xev->event);
-
              /* If mouse-highlight is an integer, input clears out
                 mouse highlighting.  */
              if (!hlinfo->mouse_face_hidden && FIXNUMP (Vmouse_highlight)
@@ -10686,31 +11132,259 @@ handle_one_xevent (struct x_display_info *dpyinfo,
            }
          case XI_KeyRelease:
            x_display_set_last_user_time (dpyinfo, xev->time);
-#ifdef HAVE_X_I18N
-           XKeyPressedEvent xkey;
 
-           memset (&xkey, 0, sizeof xkey);
+#if defined HAVE_X_I18N || defined USE_GTK
+             XKeyPressedEvent xkey;
 
-           xkey.type = KeyRelease;
-           xkey.serial = xev->serial;
-           xkey.send_event = xev->send_event;
-           xkey.display = xev->display;
-           xkey.window = xev->event;
-           xkey.root = xev->root;
-           xkey.subwindow = xev->child;
-           xkey.time = xev->time;
-           xkey.state = xev->mods.effective;
-           xkey.keycode = xev->detail;
-           xkey.same_screen = True;
+             memset (&xkey, 0, sizeof xkey);
+
+             xkey.type = KeyRelease;
+             xkey.serial = xev->serial;
+             xkey.send_event = xev->send_event;
+             xkey.display = xev->display;
+             xkey.window = xev->event;
+             xkey.root = xev->root;
+             xkey.subwindow = xev->child;
+             xkey.time = xev->time;
+             xkey.state = ((xev->mods.effective & ~(1 << 13 | 1 << 14))
+                           | (xev->group.effective << 13));
+             xkey.keycode = xev->detail;
+             xkey.same_screen = True;
+
+#ifdef HAVE_X_I18N
+             if (x_filter_event (dpyinfo, (XEvent *) &xkey))
+               *finish = X_EVENT_DROP;
+#else
+             f = x_any_window_to_frame (xkey->event);
 
-           x_filter_event (dpyinfo, (XEvent *) &xkey);
+             if (f && xg_filter_key (f, event))
+               *finish = X_EVENT_DROP;
+#endif
 #endif
+
            goto XI_OTHER;
+
          case XI_PropertyEvent:
          case XI_HierarchyChanged:
          case XI_DeviceChanged:
            x_init_master_valuators (dpyinfo);
            goto XI_OTHER;
+#ifdef XI_TouchBegin
+         case XI_TouchBegin:
+           {
+             struct xi_device_t *device;
+             bool menu_bar_p = false, tool_bar_p = false;
+#ifdef HAVE_GTK3
+             GdkRectangle test_rect;
+#endif
+             device = xi_device_from_id (dpyinfo, xev->deviceid);
+             x_display_set_last_user_time (dpyinfo, xev->time);
+
+             if (!device)
+               goto XI_OTHER;
+
+             if (xi_find_touch_point (device, xev->detail))
+               emacs_abort ();
+
+             f = x_any_window_to_frame (dpyinfo, xev->event);
+
+#ifdef HAVE_GTK3
+             menu_bar_p = (f && FRAME_X_OUTPUT (f)->menubar_widget
+                           && xg_event_is_for_menubar (f, event));
+             if (f && FRAME_X_OUTPUT (f)->toolbar_widget)
+               {
+                 test_rect.x = xev->event_x;
+                 test_rect.y = xev->event_y;
+                 test_rect.width = 1;
+                 test_rect.height = 1;
+
+                 tool_bar_p = gtk_widget_intersect (FRAME_X_OUTPUT 
(f)->toolbar_widget,
+                                                    &test_rect, NULL);
+               }
+#endif
+
+             if (!menu_bar_p && !tool_bar_p)
+               {
+                 if (f && device->direct_p)
+                   {
+                     *finish = X_EVENT_DROP;
+                     x_catch_errors (dpyinfo->display);
+                     if (x_input_grab_touch_events)
+                       XIAllowTouchEvents (dpyinfo->display, xev->deviceid,
+                                           xev->detail, xev->event, 
XIAcceptTouch);
+                     if (!x_had_errors_p (dpyinfo->display))
+                       {
+                         xi_link_touch_point (device, xev->detail, 
xev->event_x,
+                                              xev->event_y);
+
+                         inev.ie.kind = TOUCHSCREEN_BEGIN_EVENT;
+                         inev.ie.timestamp = xev->time;
+                         XSETFRAME (inev.ie.frame_or_window, f);
+                         XSETINT (inev.ie.x, lrint (xev->event_x));
+                         XSETINT (inev.ie.y, lrint (xev->event_y));
+                         XSETINT (inev.ie.arg, xev->detail);
+                       }
+                     x_uncatch_errors_after_check ();
+                   }
+#ifndef HAVE_GTK3
+                 else
+                   {
+                     x_catch_errors (dpyinfo->display);
+                     if (x_input_grab_touch_events)
+                       XIAllowTouchEvents (dpyinfo->display, xev->deviceid,
+                                           xev->detail, xev->event, 
XIRejectTouch);
+                     x_uncatch_errors ();
+                   }
+#endif
+               }
+             else
+               {
+#ifdef HAVE_GTK3
+                 bool was_waiting_for_input = waiting_for_input;
+                 /* This hack was adopted from the NS port.  Whether
+                    or not it is actually safe is a different story
+                    altogether.  */
+                 if (waiting_for_input)
+                   waiting_for_input = 0;
+                 set_frame_menubar (f, true);
+                 waiting_for_input = was_waiting_for_input;
+#endif
+               }
+
+             goto XI_OTHER;
+           }
+         case XI_TouchUpdate:
+           {
+             struct xi_device_t *device;
+             struct xi_touch_point_t *touchpoint;
+             Lisp_Object arg = Qnil;
+
+             device = xi_device_from_id (dpyinfo, xev->deviceid);
+             x_display_set_last_user_time (dpyinfo, xev->time);
+
+             if (!device)
+               goto XI_OTHER;
+
+             touchpoint = xi_find_touch_point (device, xev->detail);
+
+             if (!touchpoint)
+               goto XI_OTHER;
+
+             touchpoint->x = xev->event_x;
+             touchpoint->y = xev->event_y;
+
+             f = x_any_window_to_frame (dpyinfo, xev->event);
+
+             if (f && device->direct_p)
+               {
+                 inev.ie.kind = TOUCHSCREEN_UPDATE_EVENT;
+                 inev.ie.timestamp = xev->time;
+                 XSETFRAME (inev.ie.frame_or_window, f);
+
+                 for (touchpoint = device->touchpoints;
+                      touchpoint; touchpoint = touchpoint->next)
+                   {
+                     arg = Fcons (list3i (lrint (touchpoint->x),
+                                          lrint (touchpoint->y),
+                                          lrint (touchpoint->number)),
+                                  arg);
+                   }
+
+                 inev.ie.arg = arg;
+               }
+
+             goto XI_OTHER;
+           }
+         case XI_TouchEnd:
+           {
+             struct xi_device_t *device;
+             bool unlinked_p;
+
+             device = xi_device_from_id (dpyinfo, xev->deviceid);
+             x_display_set_last_user_time (dpyinfo, xev->time);
+
+             if (!device)
+               goto XI_OTHER;
+
+             unlinked_p = xi_unlink_touch_point (xev->detail, device);
+
+             if (unlinked_p)
+               {
+                 f = x_any_window_to_frame (dpyinfo, xev->event);
+
+                 if (f && device->direct_p)
+                   {
+                     inev.ie.kind = TOUCHSCREEN_END_EVENT;
+                     inev.ie.timestamp = xev->time;
+                     XSETFRAME (inev.ie.frame_or_window, f);
+                     XSETINT (inev.ie.x, lrint (xev->event_x));
+                     XSETINT (inev.ie.y, lrint (xev->event_y));
+                     XSETINT (inev.ie.arg, xev->detail);
+                   }
+               }
+
+             goto XI_OTHER;
+           }
+#endif
+#ifdef XI_GesturePinchBegin
+         case XI_GesturePinchBegin:
+         case XI_GesturePinchUpdate:
+           {
+             x_display_set_last_user_time (dpyinfo, xi_event->time);
+
+#ifdef HAVE_USABLE_XI_GESTURE_PINCH_EVENT
+             XIGesturePinchEvent *pev = (XIGesturePinchEvent *) xi_event;
+             struct xi_device_t *device = xi_device_from_id (dpyinfo, 
pev->deviceid);
+
+             if (!device || !device->master_p)
+               goto XI_OTHER;
+
+#ifdef HAVE_XWIDGETS
+             struct xwidget_view *xvw = xwidget_view_from_window (pev->event);
+
+             if (xvw)
+               {
+                 *finish = X_EVENT_DROP;
+                 xwidget_pinch (xvw, pev);
+                 goto XI_OTHER;
+               }
+#endif
+
+             any = x_any_window_to_frame (dpyinfo, pev->event);
+             if (any)
+               {
+                 inev.ie.kind = PINCH_EVENT;
+                 inev.ie.modifiers = x_x_to_emacs_modifiers 
(FRAME_DISPLAY_INFO (any),
+                                                             
pev->mods.effective);
+                 XSETINT (inev.ie.x, lrint (pev->event_x));
+                 XSETINT (inev.ie.y, lrint (pev->event_y));
+                 XSETFRAME (inev.ie.frame_or_window, any);
+                 inev.ie.arg = list4 (make_float (pev->delta_x),
+                                      make_float (pev->delta_y),
+                                      make_float (pev->scale),
+                                      make_float (pev->delta_angle));
+               }
+#endif
+             /* Once again GTK seems to crash when confronted by
+                events it doesn't understand.  */
+             *finish = X_EVENT_DROP;
+             goto XI_OTHER;
+           }
+         case XI_GesturePinchEnd:
+           {
+             x_display_set_last_user_time (dpyinfo, xi_event->time);
+
+#if defined HAVE_XWIDGETS && HAVE_USABLE_XI_GESTURE_PINCH_EVENT
+             XIGesturePinchEvent *pev = (XIGesturePinchEvent *) xi_event;
+             struct xwidget_view *xvw = xwidget_view_from_window (pev->event);
+
+             if (xvw)
+               xwidget_pinch (xvw, pev);
+#endif
+             *finish = X_EVENT_DROP;
+             goto XI_OTHER;
+           }
+#endif
          default:
            goto XI_OTHER;
          }
@@ -10730,6 +11404,38 @@ handle_one_xevent (struct x_display_info *dpyinfo,
 #endif
 
     default:
+#ifdef HAVE_XKB
+      if (event->type == dpyinfo->xkb_event_type)
+       {
+         XkbEvent *xkbevent = (XkbEvent *) event;
+
+         if (xkbevent->any.xkb_type == XkbNewKeyboardNotify
+             || xkbevent->any.xkb_type == XkbMapNotify)
+           {
+             if (dpyinfo->xkb_desc)
+               {
+                 if (XkbGetUpdatedMap (dpyinfo->display,
+                                       (XkbKeySymsMask
+                                        | XkbKeyTypesMask
+                                        | XkbModifierMapMask
+                                        | XkbVirtualModsMask),
+                                       dpyinfo->xkb_desc) == Success)
+                   {
+                     XkbGetNames (dpyinfo->display,
+                                  XkbGroupNamesMask | XkbVirtualModNamesMask,
+                                  dpyinfo->xkb_desc);
+                   }
+                 else
+                   {
+                     XkbFreeKeyboard (dpyinfo->xkb_desc, XkbAllComponentsMask, 
True);
+                     dpyinfo->xkb_desc = NULL;
+                   }
+
+                 x_find_modifier_meanings (dpyinfo);
+               }
+           }
+       }
+#endif
     OTHER:
 #ifdef USE_X_TOOLKIT
       block_input ();
@@ -10869,6 +11575,20 @@ XTread_socket (struct terminal *terminal, struct 
input_event *hold_quit)
       if (current_finish == X_EVENT_GOTO_OUT)
         break;
     }
+
+  /* Now see if `xg_pending_quit_event' was set.  */
+  if (xg_pending_quit_event.kind != NO_EVENT)
+    {
+      /* Check that the frame is still valid.  It could have been
+        deleted between now and the time the event was recorded.  */
+      if (FRAME_LIVE_P (XFRAME (xg_pending_quit_event.frame_or_window)))
+       /* Store that event into hold_quit and clear the pending quit
+          event.  */
+       *hold_quit = xg_pending_quit_event;
+
+      /* If the frame is invalid, just clear the event as well.  */
+      xg_pending_quit_event.kind = NO_EVENT;
+    }
 #endif /* USE_GTK */
 
   /* On some systems, an X bug causes Emacs to get no more events
@@ -11128,7 +11848,9 @@ x_draw_window_cursor (struct window *w, struct 
glyph_row *glyph_row, int x,
                      int y, enum text_cursor_kinds cursor_type,
                      int cursor_width, bool on_p, bool active_p)
 {
+#ifdef HAVE_X_I18N
   struct frame *f = XFRAME (WINDOW_FRAME (w));
+#endif
 
   if (on_p)
     {
@@ -11174,8 +11896,7 @@ x_draw_window_cursor (struct window *w, struct 
glyph_row *glyph_row, int x,
 
 #ifdef HAVE_X_I18N
       if (w == XWINDOW (f->selected_window))
-       if (FRAME_XIC (f))
-         xic_set_preeditarea (w, x, y);
+       xic_set_preeditarea (w, x, y);
 #endif
     }
 
@@ -12903,9 +13624,26 @@ void
 frame_set_mouse_pixel_position (struct frame *f, int pix_x, int pix_y)
 {
   block_input ();
+#ifdef HAVE_XINPUT2
+  int deviceid;
 
-  XWarpPointer (FRAME_X_DISPLAY (f), None, FRAME_X_WINDOW (f),
-               0, 0, 0, 0, pix_x, pix_y);
+  if (FRAME_DISPLAY_INFO (f)->supports_xi2)
+    {
+      XGrabServer (FRAME_X_DISPLAY (f));
+      if (XIGetClientPointer (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
+                             &deviceid))
+       {
+         XIWarpPointer (FRAME_X_DISPLAY (f),
+                        deviceid, None,
+                        FRAME_X_WINDOW (f),
+                        0, 0, 0, 0, pix_x, pix_y);
+       }
+      XUngrabServer (FRAME_X_DISPLAY (f));
+    }
+  else
+#endif
+    XWarpPointer (FRAME_X_DISPLAY (f), None, FRAME_X_WINDOW (f),
+                 0, 0, 0, 0, pix_x, pix_y);
   unblock_input ();
 }
 
@@ -13477,6 +14215,9 @@ x_free_frame_resources (struct frame *f)
 #ifdef HAVE_X_I18N
       if (FRAME_XIC (f))
        free_frame_xic (f);
+
+      if (f->output_data.x->preedit_chars)
+       xfree (f->output_data.x->preedit_chars);
 #endif
 
 #ifdef USE_CAIRO
@@ -14334,8 +15075,10 @@ x_term_init (Lisp_Object display_name, char 
*xrm_option, char *resource_name)
 
   dpyinfo->x_id = ++x_display_id;
 
+#ifndef HAVE_XKB
   /* Figure out which modifier bits mean what.  */
   x_find_modifier_meanings (dpyinfo);
+#endif
 
   /* Get the scroll bar cursor.  */
 #ifdef USE_GTK
@@ -14413,7 +15156,9 @@ x_term_init (Lisp_Object display_name, char 
*xrm_option, char *resource_name)
   dpyinfo->supports_xi2 = false;
   int rc;
   int major = 2;
-#ifdef XI_BarrierHit /* XInput 2.3 */
+#ifdef XI_GesturePinchBegin /* XInput 2.4 */
+  int minor = 4;
+#elif XI_BarrierHit /* XInput 2.3 */
   int minor = 3;
 #elif defined XI_TouchBegin /* XInput 2.2 */
   int minor = 2;
@@ -14437,10 +15182,47 @@ x_term_init (Lisp_Object display_name, char 
*xrm_option, char *resource_name)
   dpyinfo->xi2_version = minor;
 #endif
 
+#ifdef HAVE_XRANDR
+  int xrr_event_base, xrr_error_base;
+  bool xrr_ok = false;
+  xrr_ok = XRRQueryExtension (dpy, &xrr_event_base, &xrr_error_base);
+  if (xrr_ok)
+    {
+      XRRQueryVersion (dpy, &dpyinfo->xrandr_major_version,
+                      &dpyinfo->xrandr_minor_version);
+    }
+#endif
+
 #ifdef HAVE_XKB
-  dpyinfo->xkb_desc = XkbGetMap (dpyinfo->display,
-                                XkbAllComponentsMask,
-                                XkbUseCoreKbd);
+  int xkb_major, xkb_minor, xkb_op, xkb_error_code;
+  xkb_major = XkbMajorVersion;
+  xkb_minor = XkbMinorVersion;
+
+  if (XkbLibraryVersion (&xkb_major, &xkb_minor)
+      && XkbQueryExtension (dpyinfo->display, &xkb_op, 
&dpyinfo->xkb_event_type,
+                           &xkb_error_code, &xkb_major, &xkb_minor))
+    {
+      dpyinfo->supports_xkb = true;
+      dpyinfo->xkb_desc = XkbGetMap (dpyinfo->display,
+                                    (XkbKeySymsMask
+                                     | XkbKeyTypesMask
+                                     | XkbModifierMapMask
+                                     | XkbVirtualModsMask),
+                                    XkbUseCoreKbd);
+
+      if (dpyinfo->xkb_desc)
+       XkbGetNames (dpyinfo->display,
+                    XkbGroupNamesMask | XkbVirtualModNamesMask,
+                    dpyinfo->xkb_desc);
+
+      XkbSelectEvents (dpyinfo->display,
+                      XkbUseCoreKbd,
+                      XkbNewKeyboardNotifyMask | XkbMapNotifyMask,
+                      XkbNewKeyboardNotifyMask | XkbMapNotifyMask);
+    }
+
+  /* Figure out which modifier bits mean what.  */
+  x_find_modifier_meanings (dpyinfo);
 #endif
 
 #if defined USE_CAIRO || defined HAVE_XFT
@@ -14667,6 +15449,33 @@ x_term_init (Lisp_Object display_name, char 
*xrm_option, char *resource_name)
 #endif
   }
 
+#ifdef HAVE_X_I18N
+  {
+    AUTO_STRING (inputStyle, "inputStyle");
+    AUTO_STRING (InputStyle, "InputStyle");
+    Lisp_Object value = gui_display_get_resource (dpyinfo, inputStyle, 
InputStyle,
+                                                 Qnil, Qnil);
+
+    if (STRINGP (value))
+      {
+       if (!strcmp (SSDATA (value), "callback"))
+         dpyinfo->preferred_xim_style = STYLE_CALLBACK;
+       else if (!strcmp (SSDATA (value), "none"))
+         dpyinfo->preferred_xim_style = STYLE_NONE;
+       else if (!strcmp (SSDATA (value), "overthespot"))
+         dpyinfo->preferred_xim_style = STYLE_OVERTHESPOT;
+       else if (!strcmp (SSDATA (value), "offthespot"))
+         dpyinfo->preferred_xim_style = STYLE_OFFTHESPOT;
+       else if (!strcmp (SSDATA (value), "root"))
+         dpyinfo->preferred_xim_style = STYLE_ROOT;
+#ifdef USE_GTK
+       else if (!strcmp (SSDATA (value), "native"))
+         dpyinfo->prefer_native_input = true;
+#endif
+      }
+  }
+#endif
+
 #ifdef HAVE_X_SM
   /* Only do this for the very first display in the Emacs session.
      Ignore X session management when Emacs was first started on a
@@ -15205,10 +16014,23 @@ consuming frame position adjustments.  In newer 
versions of GTK, Emacs
 always uses gtk_window_move and ignores the value of this variable.  */);
   x_gtk_use_window_move = true;
 
-  DEFVAR_BOOL ("x-coalesce-scroll-events", x_coalesce_scroll_events,
-              doc: /* Non-nil means send a wheel event only for scrolling at 
least one screen line.
-Otherwise, a wheel event will be sent every time the mouse wheel is
-moved.  This option is only effective when Emacs is built with XInput
-2, with Haiku windowing support, or with NS.  */);
-  x_coalesce_scroll_events = true;
+  DEFVAR_LISP ("x-scroll-event-delta-factor", Vx_scroll_event_delta_factor,
+              doc: /* A scale to apply to pixel deltas reported in scroll 
events.
+This option is only effective when Emacs is built with XInput 2
+support. */);
+  Vx_scroll_event_delta_factor = make_float (1.0);
+
+  DEFVAR_BOOL ("x-gtk-use-native-input", x_gtk_use_native_input,
+              doc: /* Non-nil means to use GTK for input method support.
+This provides better support for some modern input methods, and is
+only effective when Emacs is built with GTK.  */);
+  x_gtk_use_native_input = false;
+
+  DEFVAR_BOOL ("x-input-grab-touch-events", x_input_grab_touch_events,
+              doc: /* Non-nil means to actively grab touch events.
+This means touch sequences that started on an Emacs frame will
+reliably continue to receive updates even if the finger moves off the
+frame, but may cause crashes with some window managers and/or external
+programs.  */);
+  x_input_grab_touch_events = true;
 }
diff --git a/src/xterm.h b/src/xterm.h
index 7abe168bc6..664db48392 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-2021 Free Software Foundation,
+   Copyright (C) 1989, 1993-1994, 1998-2022 Free Software Foundation,
    Inc.
 
 This file is part of GNU Emacs.
@@ -179,13 +179,24 @@ struct xi_scroll_valuator_t
   int horizontal;
 };
 
+struct xi_touch_point_t
+{
+  struct xi_touch_point_t *next;
+
+  int number;
+  double x, y;
+};
+
 struct xi_device_t
 {
   int device_id;
   int scroll_valuator_count;
   int grab;
+  bool master_p;
+  bool direct_p;
 
   struct xi_scroll_valuator_t *valuators;
+  struct xi_touch_point_t *touchpoints;
 };
 #endif
 
@@ -315,10 +326,10 @@ struct x_display_info
      use; XK_Caps_Lock should only affect alphabetic keys.  With this
      arrangement, the lock modifier should shift the character if
      (EVENT.state & shift_lock_mask) != 0.  */
-  int meta_mod_mask, shift_lock_mask;
+  unsigned int meta_mod_mask, shift_lock_mask;
 
   /* These are like meta_mod_mask, but for different modifiers.  */
-  int alt_mod_mask, super_mod_mask, hyper_mod_mask;
+  unsigned alt_mod_mask, super_mod_mask, hyper_mod_mask;
 
   /* Communication with window managers.  */
   Atom Xatom_wm_protocols;
@@ -423,6 +434,7 @@ struct x_display_info
   XIM xim;
   XIMStyles *xim_styles;
   struct xim_inst_t *xim_callback_data;
+  XIMStyle preferred_xim_style;
 #endif
 
   /* A cache mapping color names to RGB values.  */
@@ -511,8 +523,14 @@ struct x_display_info
 #endif
 
 #ifdef HAVE_XKB
+  bool supports_xkb;
+  int xkb_event_type;
   XkbDescPtr xkb_desc;
 #endif
+
+#ifdef USE_GTK
+  bool prefer_native_input;
+#endif
 };
 
 #ifdef HAVE_X_I18N
@@ -629,6 +647,8 @@ struct x_output
   GtkTooltip *ttip_widget;
   GtkWidget *ttip_lbl;
   GtkWindow *ttip_window;
+
+  GtkIMContext *im_context;
 #endif /* USE_GTK */
 
   /* If >=0, a bitmap index.  The indicated bitmap is used for the
@@ -775,6 +795,13 @@ struct x_output
      They are used when creating the cairo surface next time.  */
   int cr_surface_desired_width, cr_surface_desired_height;
 #endif
+
+#ifdef HAVE_X_I18N
+  ptrdiff_t preedit_size;
+  char *preedit_chars;
+  bool preedit_active;
+  int preedit_caret;
+#endif
 };
 
 enum
@@ -1229,6 +1256,10 @@ extern void x_change_tool_bar_height (struct frame *, 
int);
 extern void x_implicitly_set_name (struct frame *, Lisp_Object, Lisp_Object);
 extern void x_set_scroll_bar_default_width (struct frame *);
 extern void x_set_scroll_bar_default_height (struct frame *);
+#ifdef USE_LUCID
+extern void xlw_monitor_dimensions_at_pos (Display *, Screen *, int, int,
+                                          int *, int *, int *, int *);
+#endif
 
 /* Defined in xselect.c.  */
 
@@ -1308,6 +1339,17 @@ extern bool x_session_have_connection (void);
 extern void x_session_close (void);
 #endif
 
+#ifdef HAVE_X_I18N
+#define STYLE_OFFTHESPOT (XIMPreeditArea | XIMStatusArea)
+#define STYLE_OVERTHESPOT (XIMPreeditPosition | XIMStatusNothing)
+#define STYLE_ROOT (XIMPreeditNothing | XIMStatusNothing)
+#define STYLE_CALLBACK (XIMPreeditCallbacks | XIMStatusNothing)
+#define STYLE_NONE (XIMPreeditNothing | XIMStatusNothing)
+#endif
+
+#ifdef USE_GTK
+extern struct input_event xg_pending_quit_event;
+#endif
 
 /* Is the frame embedded into another application? */
 
diff --git a/src/xwidget.c b/src/xwidget.c
index 5da2aa1743..7d6d256a19 100644
--- a/src/xwidget.c
+++ b/src/xwidget.c
@@ -1,6 +1,6 @@
 /* Support for embedding graphical components in a buffer.
 
-Copyright (C) 2011-2021 Free Software Foundation, Inc.
+Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -39,7 +39,11 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 #include <webkit2/webkit2.h>
 #include <JavaScriptCore/JavaScript.h>
 #include <cairo.h>
+#ifndef HAVE_PGTK
 #include <X11/Xlib.h>
+#else
+#include <gtk/gtk.h>
+#endif
 #ifdef HAVE_XINPUT2
 #include <X11/extensions/XInput2.h>
 #endif
@@ -55,7 +59,9 @@ static Lisp_Object internal_xwidget_list;
 static uint32_t xwidget_counter = 0;
 
 #ifdef USE_GTK
+#ifdef HAVE_X_WINDOWS
 static Lisp_Object x_window_to_xwv_map;
+#endif
 static gboolean offscreen_damage_event (GtkWidget *, GdkEvent *, gpointer);
 static void synthesize_focus_in_event (GtkWidget *);
 static GdkDevice *find_suitable_keyboard (struct frame *);
@@ -119,6 +125,134 @@ static void mouse_target_changed (WebKitWebView *, 
WebKitHitTestResult *, guint,
                                  gpointer);
 #endif
 
+#ifdef HAVE_PGTK
+static int
+xw_forward_event_translate (GdkEvent *event, struct xwidget_view *xv,
+                           struct xwidget *xw)
+{
+  GtkWidget *widget;
+  int new_x, new_y;
+
+  switch (event->type)
+    {
+    case GDK_BUTTON_PRESS:
+    case GDK_BUTTON_RELEASE:
+    case GDK_2BUTTON_PRESS:
+    case GDK_3BUTTON_PRESS:
+      widget = find_widget_at_pos (xw->widgetwindow_osr,
+                                  lrint (event->button.x - xv->clip_left),
+                                  lrint (event->button.y - xv->clip_top),
+                                  &new_x, &new_y);
+      if (widget)
+       {
+         event->any.window = gtk_widget_get_window (widget);
+         event->button.x = new_x;
+         event->button.y = new_y;
+         return 1;
+       }
+      return 0;
+    case GDK_SCROLL:
+      widget = find_widget_at_pos (xw->widgetwindow_osr,
+                                  lrint (event->scroll.x - xv->clip_left),
+                                  lrint (event->scroll.y - xv->clip_top),
+                                  &new_x, &new_y);
+      if (widget)
+       {
+         event->any.window = gtk_widget_get_window (widget);
+         event->scroll.x = new_x;
+         event->scroll.y = new_y;
+         return 1;
+       }
+      return 0;
+    case GDK_MOTION_NOTIFY:
+      widget = find_widget_at_pos (xw->widgetwindow_osr,
+                                  lrint (event->motion.x - xv->clip_left),
+                                  lrint (event->motion.y - xv->clip_top),
+                                  &new_x, &new_y);
+      if (widget)
+       {
+         event->any.window = gtk_widget_get_window (widget);
+         event->motion.x = new_x;
+         event->motion.y = new_y;
+         return 1;
+       }
+      return 0;
+    case GDK_ENTER_NOTIFY:
+    case GDK_LEAVE_NOTIFY:
+      widget = find_widget_at_pos (xw->widgetwindow_osr,
+                                  lrint (event->crossing.x - xv->clip_left),
+                                  lrint (event->crossing.y - xv->clip_top),
+                                  &new_x, &new_y);
+      if (widget)
+       {
+         event->any.window = gtk_widget_get_window (widget);
+         event->crossing.x = new_x;
+         event->crossing.y = new_y;
+         return 1;
+       }
+      return 0;
+    default:
+      return 0;
+    }
+}
+
+static gboolean
+xw_forward_event_from_view (GtkWidget *widget, GdkEvent *event,
+                           gpointer user_data)
+{
+  struct xwidget_view *xv = user_data;
+  struct xwidget *xw = XXWIDGET (xv->model);
+  GdkEvent *eventcopy;
+  bool translated_p;
+
+  if (NILP (xw->buffer))
+    return TRUE;
+
+  eventcopy = gdk_event_copy (event);
+  translated_p = xw_forward_event_translate (eventcopy, xv, xw);
+  record_osr_embedder (xv);
+
+  g_object_ref (eventcopy->any.window);
+  if (translated_p)
+    gtk_main_do_event (eventcopy);
+  gdk_event_free (eventcopy);
+
+  /* Don't propagate this event further.  */
+  return TRUE;
+}
+#endif
+
+#ifdef HAVE_X_WINDOWS
+static guint
+xw_translate_x_modifiers (struct x_display_info *dpyinfo,
+                         unsigned int modifiers)
+{
+  guint mods = 0;
+
+  if (modifiers & dpyinfo->meta_mod_mask)
+    {
+      /* GDK always assumes Mod1 is alt, but that's no reason for
+        us to make that mistake as well.  */
+      if (!dpyinfo->alt_mod_mask)
+       mods |= GDK_MOD1_MASK;
+      else
+       mods |= GDK_META_MASK;
+    }
+
+  if (modifiers & dpyinfo->alt_mod_mask)
+    mods |= GDK_MOD1_MASK;
+  if (modifiers & dpyinfo->super_mod_mask)
+    mods |= GDK_SUPER_MASK;
+  if (modifiers & dpyinfo->hyper_mod_mask)
+    mods |= GDK_HYPER_MASK;
+  if (modifiers & ControlMask)
+    mods |= GDK_CONTROL_MASK;
+  if (modifiers & ShiftMask)
+    mods |= GDK_SHIFT_MASK;
+
+  return mods;
+}
+#endif
 
 DEFUN ("make-xwidget",
        Fmake_xwidget, Smake_xwidget,
@@ -149,6 +283,8 @@ fails.  */)
   if (!EQ (type, Qwebkit))
     error ("Bad xwidget type");
 
+  Frequire (Qxwidget, Qnil, Qnil);
+
   struct xwidget *xw = allocate_xwidget ();
   Lisp_Object val;
   xw->type = type;
@@ -185,6 +321,7 @@ fails.  */)
       xw->widgetwindow_osr = gtk_offscreen_window_new ();
       gtk_window_resize (GTK_WINDOW (xw->widgetwindow_osr), xw->width,
                          xw->height);
+      gtk_container_check_resize (GTK_CONTAINER (xw->widgetwindow_osr));
 
       if (EQ (xw->type, Qwebkit))
         {
@@ -222,6 +359,7 @@ fails.  */)
 
       gtk_widget_set_size_request (GTK_WIDGET (xw->widget_osr), xw->width,
                                    xw->height);
+      gtk_widget_queue_allocate (GTK_WIDGET (xw->widget_osr));
 
       if (EQ (xw->type, Qwebkit))
         {
@@ -236,7 +374,7 @@ fails.  */)
 
       gtk_widget_show (xw->widget_osr);
       gtk_widget_show (xw->widgetwindow_osr);
-#ifndef HAVE_XINPUT2
+#if !defined HAVE_XINPUT2 && !defined HAVE_PGTK
       synthesize_focus_in_event (xw->widgetwindow_osr);
 #endif
 
@@ -346,7 +484,7 @@ selected frame is not an X-Windows frame.  */)
 
   if (!NILP (frame))
     f = decode_window_system_frame (frame);
-  else if (FRAME_X_P (SELECTED_FRAME ()))
+  else if (FRAME_WINDOW_P (SELECTED_FRAME ()))
     f = SELECTED_FRAME ();
 
 #ifdef USE_GTK
@@ -355,10 +493,12 @@ selected frame is not an X-Windows frame.  */)
   if (!f)
     return Qnil;
 
+  block_input ();
   osw = gtk_widget_get_window (xw->widgetwindow_osr);
   embedder = gtk_widget_get_window (FRAME_GTK_OUTER_WIDGET (f));
 
   gdk_offscreen_window_set_embedder (osw, embedder);
+  unblock_input ();
 #endif
   widget = gtk_window_get_focus (GTK_WINDOW (xw->widgetwindow_osr));
 
@@ -383,10 +523,17 @@ selected frame is not an X-Windows frame.  */)
       if (character < 32)
        character += '_';
 
+#ifndef HAVE_PGTK
       if (f)
        modifiers = x_emacs_to_x_modifiers (FRAME_DISPLAY_INFO (f), modifiers);
       else
        modifiers = 0;
+#else
+      if (f)
+       modifiers = pgtk_emacs_to_gtk_modifiers (FRAME_DISPLAY_INFO (f), 
modifiers);
+      else
+       modifiers = 0;
+#endif
     }
   else if (SYMBOLP (event))
     {
@@ -408,18 +555,36 @@ selected frame is not an X-Windows frame.  */)
          ++off;
        }
 
+#ifndef HAVE_PGTK
       if (f)
        modifiers = x_emacs_to_x_modifiers (FRAME_DISPLAY_INFO (f),
                                            XFIXNUM (XCAR (XCDR (decoded))));
       else
        modifiers = 0;
+#else
+      if (f)
+       modifiers = pgtk_emacs_to_gtk_modifiers (FRAME_DISPLAY_INFO (f),
+                                                XFIXNUM (XCAR (XCDR 
(decoded))));
+      else
+       modifiers = 0;
+#endif
 
       if (found)
        keycode = off + 0xff00;
     }
 
   if (character == -1 && keycode == -1)
-    return Qnil;
+    {
+#ifdef HAVE_XINPUT2
+      block_input ();
+      if (xw->embedder_view)
+       record_osr_embedder (xw->embedder_view);
+      else
+       gdk_offscreen_window_set_embedder (osw, NULL);
+      unblock_input ();
+#endif
+      return Qnil;
+    }
 
   block_input ();
   xg_event = gdk_event_new (GDK_KEY_PRESS);
@@ -430,7 +595,13 @@ selected frame is not an X-Windows frame.  */)
     keycode = gdk_unicode_to_keyval (character);
 
   xg_event->key.keyval = keycode;
+#ifndef HAVE_X_WINDOWS
   xg_event->key.state = modifiers;
+#else
+  if (f)
+    xg_event->key.state = xw_translate_x_modifiers (FRAME_DISPLAY_INFO (f),
+                                                   modifiers);
+#endif
 
   if (keycode > -1)
     {
@@ -463,6 +634,13 @@ selected frame is not an X-Windows frame.  */)
   xg_event->type = GDK_KEY_RELEASE;
   gtk_main_do_event (xg_event);
   gdk_event_free (xg_event);
+
+#ifdef HAVE_XINPUT2
+  if (xw->embedder_view)
+    record_osr_embedder (xw->embedder_view);
+  else
+    gdk_offscreen_window_set_embedder (osw, NULL);
+#endif
   unblock_input ();
 #endif
 
@@ -547,8 +725,11 @@ record_osr_embedder (struct xwidget_view *view)
 
   xw = XXWIDGET (view->model);
   window = gtk_widget_get_window (xw->widgetwindow_osr);
+#ifndef HAVE_PGTK
   embedder = gtk_widget_get_window (FRAME_GTK_OUTER_WIDGET (view->frame));
-
+#else
+  embedder = gtk_widget_get_window (view->widget);
+#endif
   gdk_offscreen_window_set_embedder (window, embedder);
   xw->embedder = view->frame;
   xw->embedder_view = view;
@@ -583,6 +764,7 @@ from_embedder (GdkWindow *window, double x, double y,
 {
   double *xout = x_out_ptr;
   double *yout = y_out_ptr;
+#ifndef HAVE_PGTK
   struct xwidget *xw = find_xwidget_for_offscreen_window (window);
   struct xwidget_view *xvw;
   gint xoff, yoff;
@@ -606,6 +788,10 @@ from_embedder (GdkWindow *window, double x, double y,
       *xout = x - xvw->x - xoff;
       *yout = y - xvw->y - yoff;
     }
+#else
+  *xout = x;
+  *yout = y;
+#endif
 }
 
 static void
@@ -615,6 +801,7 @@ to_embedder (GdkWindow *window, double x, double y,
 {
   double *xout = x_out_ptr;
   double *yout = y_out_ptr;
+#ifndef HAVE_PGTK
   struct xwidget *xw = find_xwidget_for_offscreen_window (window);
   struct xwidget_view *xvw;
   gint xoff, yoff;
@@ -638,6 +825,10 @@ to_embedder (GdkWindow *window, double x, double y,
       *xout = x + xvw->x + xoff;
       *yout = y + xvw->y + yoff;
     }
+#else
+  *xout = x;
+  *yout = y;
+#endif
 }
 
 static GdkDevice *
@@ -810,6 +1001,9 @@ static void
 define_cursors (struct xwidget *xw, WebKitHitTestResult *res)
 {
   struct xwidget_view *xvw;
+#ifdef HAVE_PGTK
+  GdkWindow *wdesc;
+#endif
 
   xw->hit_result = webkit_hit_test_result_get_context (res);
 
@@ -823,8 +1017,16 @@ define_cursors (struct xwidget *xw, WebKitHitTestResult 
*res)
          if (XXWIDGET (xvw->model) == xw)
            {
              xvw->cursor = cursor_for_hit (xw->hit_result, xvw->frame);
+#ifdef HAVE_X_WINDOWS
              if (xvw->wdesc != None)
                XDefineCursor (xvw->dpy, xvw->wdesc, xvw->cursor);
+#else
+             if (gtk_widget_get_realized (xvw->widget))
+               {
+                 wdesc = gtk_widget_get_window (xvw->widget);
+                 gdk_window_set_cursor (wdesc, xvw->cursor);
+               }
+#endif
            }
        }
     }
@@ -898,6 +1100,7 @@ run_file_chooser_cb (WebKitWebView *webview,
   return TRUE;
 }
 
+#ifdef HAVE_X_WINDOWS
 
 static void
 xwidget_button_1 (struct xwidget_view *view,
@@ -997,7 +1200,9 @@ xwidget_button (struct xwidget_view *view,
 #ifdef HAVE_XINPUT2
 void
 xwidget_motion_notify (struct xwidget_view *view,
-                      double x, double y, uint state, Time time)
+                      double x, double y,
+                      double root_x, double root_y,
+                      uint state, Time time)
 {
   GdkEvent *xg_event;
   GtkWidget *target;
@@ -1010,7 +1215,8 @@ xwidget_motion_notify (struct xwidget_view *view,
   record_osr_embedder (view);
 
   target = find_widget_at_pos (model->widgetwindow_osr,
-                              lrint (x), lrint (y),
+                              lrint (x + view->clip_left),
+                              lrint (y + view->clip_top),
                               &target_x, &target_y);
 
   if (!target)
@@ -1024,8 +1230,8 @@ xwidget_motion_notify (struct xwidget_view *view,
   xg_event->any.window = gtk_widget_get_window (target);
   xg_event->motion.x = target_x;
   xg_event->motion.y = target_y;
-  xg_event->motion.x_root = lrint (x);
-  xg_event->motion.y_root = lrint (y);
+  xg_event->motion.x_root = root_x;
+  xg_event->motion.y_root = root_y;
   xg_event->motion.time = time;
   xg_event->motion.state = state;
   xg_event->motion.device = find_suitable_pointer (view->frame);
@@ -1038,7 +1244,8 @@ xwidget_motion_notify (struct xwidget_view *view,
 
 void
 xwidget_scroll (struct xwidget_view *view, double x, double y,
-               double dx, double dy, uint state, Time time)
+               double dx, double dy, uint state, Time time,
+               bool stop_p)
 {
   GdkEvent *xg_event;
   GtkWidget *target;
@@ -1051,7 +1258,8 @@ xwidget_scroll (struct xwidget_view *view, double x, 
double y,
   record_osr_embedder (view);
 
   target = find_widget_at_pos (model->widgetwindow_osr,
-                              lrint (x), lrint (y),
+                              lrint (x + view->clip_left),
+                              lrint (y + view->clip_top),
                               &target_x, &target_y);
 
   if (!target)
@@ -1073,12 +1281,99 @@ xwidget_scroll (struct xwidget_view *view, double x, 
double y,
   xg_event->scroll.delta_x = dx;
   xg_event->scroll.delta_y = dy;
   xg_event->scroll.device = find_suitable_pointer (view->frame);
+  xg_event->scroll.is_stop = stop_p;
 
   g_object_ref (xg_event->any.window);
 
   gtk_main_do_event (xg_event);
   gdk_event_free (xg_event);
 }
+
+#ifdef HAVE_USABLE_XI_GESTURE_PINCH_EVENT
+void
+xwidget_pinch (struct xwidget_view *view, XIGesturePinchEvent *xev)
+{
+#if GTK_CHECK_VERSION (3, 18, 0)
+  GdkEvent *xg_event;
+  GtkWidget *target;
+  struct xwidget *model = XXWIDGET (view->model);
+  int target_x, target_y;
+  double x = xev->event_x;
+  double y = xev->event_y;
+
+  if (NILP (model->buffer))
+    return;
+
+  record_osr_embedder (view);
+
+  target = find_widget_at_pos (model->widgetwindow_osr,
+                              lrint (x + view->clip_left),
+                              lrint (y + view->clip_top),
+                              &target_x, &target_y);
+
+  if (!target)
+    {
+      target_x = lrint (x);
+      target_y = lrint (y);
+      target = model->widget_osr;
+    }
+
+  xg_event = gdk_event_new (GDK_TOUCHPAD_PINCH);
+  xg_event->any.window = gtk_widget_get_window (target);
+  xg_event->touchpad_pinch.x = target_x;
+  xg_event->touchpad_pinch.y = target_y;
+  xg_event->touchpad_pinch.dx = xev->delta_x;
+  xg_event->touchpad_pinch.dy = xev->delta_y;
+  xg_event->touchpad_pinch.angle_delta = xev->delta_angle;
+  xg_event->touchpad_pinch.scale = xev->scale;
+  xg_event->touchpad_pinch.x_root = xev->root_x;
+  xg_event->touchpad_pinch.y_root = xev->root_y;
+  xg_event->touchpad_pinch.state = xev->mods.effective;
+  xg_event->touchpad_pinch.n_fingers = 2;
+
+  switch (xev->evtype)
+    {
+    case XI_GesturePinchBegin:
+      xg_event->touchpad_pinch.phase = GDK_TOUCHPAD_GESTURE_PHASE_BEGIN;
+      break;
+    case XI_GesturePinchUpdate:
+      xg_event->touchpad_pinch.phase = GDK_TOUCHPAD_GESTURE_PHASE_UPDATE;
+      break;
+    case XI_GesturePinchEnd:
+      xg_event->touchpad_pinch.phase = GDK_TOUCHPAD_GESTURE_PHASE_END;
+      break;
+    }
+
+  gdk_event_set_device (xg_event, find_suitable_pointer (view->frame));
+
+  g_object_ref (xg_event->any.window);
+  gtk_main_do_event (xg_event);
+  gdk_event_free (xg_event);
+#endif
+}
+#endif
+#endif
+
+#ifdef HAVE_XINPUT2
+static GdkNotifyType
+xi_translate_notify_detail (int detail)
+{
+  switch (detail)
+    {
+    case XINotifyInferior:
+      return GDK_NOTIFY_INFERIOR;
+    case XINotifyAncestor:
+      return GDK_NOTIFY_ANCESTOR;
+    case XINotifyVirtual:
+      return GDK_NOTIFY_VIRTUAL;
+    case XINotifyNonlinear:
+      return GDK_NOTIFY_NONLINEAR;
+    case XINotifyNonlinearVirtual:
+      return GDK_NOTIFY_NONLINEAR_VIRTUAL;
+    default:
+      emacs_abort ();
+    }
+}
 #endif
 
 void
@@ -1089,24 +1384,47 @@ xwidget_motion_or_crossing (struct xwidget_view *view, 
const XEvent *event)
   int x;
   int y;
   GtkWidget *target;
+#ifdef HAVE_XINPUT2
+  XIEnterEvent *xev = NULL;
+#endif
 
   if (NILP (model->buffer))
     return;
 
-  xg_event = gdk_event_new (event->type == MotionNotify
-                           ? GDK_MOTION_NOTIFY
-                           : (event->type == LeaveNotify
-                              ? GDK_LEAVE_NOTIFY
-                              : GDK_ENTER_NOTIFY));
+#ifdef HAVE_XINPUT2
+  if (event->type != GenericEvent)
+#endif
+    {
+      xg_event = gdk_event_new (event->type == MotionNotify
+                               ? GDK_MOTION_NOTIFY
+                               : (event->type == LeaveNotify
+                                  ? GDK_LEAVE_NOTIFY
+                                  : GDK_ENTER_NOTIFY));
+      target = find_widget_at_pos (model->widgetwindow_osr,
+                                  (event->type == MotionNotify
+                                   ? event->xmotion.x + view->clip_left
+                                   : event->xcrossing.x + view->clip_left),
+                                  (event->type == MotionNotify
+                                   ? event->xmotion.y + view->clip_top
+                                   : event->xcrossing.y + view->clip_top),
+                                  &x, &y);
+    }
+#ifdef HAVE_XINPUT2
+  else
+    {
+      eassert (event->xcookie.evtype == XI_Enter
+              || event->xcookie.evtype == XI_Leave);
 
-  target = find_widget_at_pos (model->widgetwindow_osr,
-                              (event->type == MotionNotify
-                               ? event->xmotion.x + view->clip_left
-                               : event->xcrossing.x + view->clip_left),
-                              (event->type == MotionNotify
-                               ? event->xmotion.y + view->clip_top
-                               : event->xcrossing.y + view->clip_top),
-                              &x, &y);
+      xev = (XIEnterEvent *) event->xcookie.data;
+      xg_event = gdk_event_new (event->type == XI_Enter
+                               ? GDK_ENTER_NOTIFY
+                               : GDK_LEAVE_NOTIFY);
+      target = find_widget_at_pos (model->widgetwindow_osr,
+                                  lrint (xev->event_x + view->clip_left),
+                                  lrint (xev->event_y + view->clip_top),
+                                  &x, &y);
+    }
+#endif
 
   if (!target)
     target = model->widget_osr;
@@ -1126,6 +1444,32 @@ xwidget_motion_or_crossing (struct xwidget_view *view, 
const XEvent *event)
       xg_event->motion.state = event->xmotion.state;
       xg_event->motion.device = find_suitable_pointer (view->frame);
     }
+#ifdef HAVE_XINPUT2
+  else if (event->type == GenericEvent)
+    {
+      xg_event->crossing.x = (gdouble) xev->event_x;
+      xg_event->crossing.y = (gdouble) xev->event_y;
+      xg_event->crossing.x_root = (gdouble) xev->root_x;
+      xg_event->crossing.y_root = (gdouble) xev->root_y;
+      xg_event->crossing.time = xev->time;
+      xg_event->crossing.focus = xev->focus;
+      xg_event->crossing.mode = xev->mode;
+      xg_event->crossing.detail = xi_translate_notify_detail (xev->detail);
+      xg_event->crossing.state = xev->mods.effective;
+
+      if (xev->buttons.mask_len)
+       {
+         if (XIMaskIsSet (xev->buttons.mask, 1))
+           xg_event->crossing.state |= GDK_BUTTON1_MASK;
+         if (XIMaskIsSet (xev->buttons.mask, 2))
+           xg_event->crossing.state |= GDK_BUTTON2_MASK;
+         if (XIMaskIsSet (xev->buttons.mask, 3))
+           xg_event->crossing.state |= GDK_BUTTON3_MASK;
+       }
+
+      gdk_event_set_device (xg_event, find_suitable_pointer (view->frame));
+    }
+#endif
   else
     {
       xg_event->crossing.detail = min (5, event->xcrossing.detail);
@@ -1134,6 +1478,7 @@ xwidget_motion_or_crossing (struct xwidget_view *view, 
const XEvent *event)
       xg_event->crossing.y = y;
       xg_event->crossing.x_root = event->xcrossing.x_root;
       xg_event->crossing.y_root = event->xcrossing.y_root;
+      xg_event->crossing.focus = event->xcrossing.focus;
       gdk_event_set_device (xg_event, find_suitable_pointer (view->frame));
     }
 
@@ -1141,6 +1486,8 @@ xwidget_motion_or_crossing (struct xwidget_view *view, 
const XEvent *event)
   gdk_event_free (xg_event);
 }
 
+#endif /* HAVE_X_WINDOWS */
+
 static void
 synthesize_focus_in_event (GtkWidget *offscreen_window)
 {
@@ -1166,6 +1513,7 @@ synthesize_focus_in_event (GtkWidget *offscreen_window)
   gdk_event_free (focus_event);
 }
 
+#ifdef HAVE_X_WINDOWS
 struct xwidget_view *
 xwidget_view_from_window (Window wdesc)
 {
@@ -1177,16 +1525,24 @@ xwidget_view_from_window (Window wdesc)
 
   return XXWIDGET_VIEW (xwv);
 }
+#endif
 
 static void
 xwidget_show_view (struct xwidget_view *xv)
 {
   xv->hidden = false;
+#ifdef HAVE_X_WINDOWS
   XMoveWindow (xv->dpy, xv->wdesc,
               xv->x + xv->clip_left,
               xv->y + xv->clip_top);
   XMapWindow (xv->dpy, xv->wdesc);
   XFlush (xv->dpy);
+#else
+  gtk_fixed_move (GTK_FIXED (FRAME_GTK_WIDGET (xv->frame)),
+                 xv->widget, xv->x + xv->clip_left,
+                 xv->y + xv->clip_top);
+  gtk_widget_show_all (xv->widget);
+#endif
 }
 
 /* Hide an xwidget view.  */
@@ -1194,10 +1550,15 @@ static void
 xwidget_hide_view (struct xwidget_view *xv)
 {
   xv->hidden = true;
+#ifdef HAVE_X_WINDOWS
   XUnmapWindow (xv->dpy, xv->wdesc);
   XFlush (xv->dpy);
+#else
+  gtk_widget_hide (xv->widget);
+#endif
 }
 
+#ifndef HAVE_PGTK
 static void
 xv_do_draw (struct xwidget_view *xw, struct xwidget *w)
 {
@@ -1229,6 +1590,37 @@ xv_do_draw (struct xwidget_view *xw, struct xwidget *w)
 
   unblock_input ();
 }
+#else
+static void
+xwidget_view_draw_cb (GtkWidget *widget, cairo_t *cr,
+                     gpointer data)
+{
+  struct xwidget_view *view = data;
+  struct xwidget *w = XXWIDGET (view->model);
+  GtkOffscreenWindow *wnd;
+  cairo_surface_t *surface;
+
+  if (NILP (w->buffer))
+    return;
+
+  block_input ();
+  wnd = GTK_OFFSCREEN_WINDOW (w->widgetwindow_osr);
+  surface = gtk_offscreen_window_get_surface (wnd);
+
+  cairo_save (cr);
+  if (surface)
+    {
+      cairo_translate (cr, -view->clip_left,
+                      -view->clip_top);
+      cairo_set_source_surface (cr, surface, 0, 0);
+      cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
+      cairo_paint (cr);
+    }
+  cairo_restore (cr);
+
+  unblock_input ();
+}
+#endif
 
 /* When the off-screen webkit master view changes this signal is called.
    It copies the bitmap from the off-screen instance.  */
@@ -1244,9 +1636,12 @@ offscreen_damage_event (GtkWidget *widget, GdkEvent 
*event,
       if (XWIDGET_VIEW_P (XCAR (tail)))
        {
          struct xwidget_view *view = XXWIDGET_VIEW (XCAR (tail));
-
+#ifdef HAVE_X_WINDOWS
          if (view->wdesc && XXWIDGET (view->model) == xwidget)
            xv_do_draw (view, XXWIDGET (view->model));
+#else
+         gtk_widget_queue_draw (view->widget);
+#endif
        }
     }
 
@@ -1255,6 +1650,7 @@ offscreen_damage_event (GtkWidget *widget, GdkEvent 
*event,
   return FALSE;
 }
 
+#ifdef HAVE_X_WINDOWS
 void
 xwidget_expose (struct xwidget_view *xv)
 {
@@ -1262,6 +1658,7 @@ xwidget_expose (struct xwidget_view *xv)
 
   xv_do_draw (xv, xw);
 }
+#endif
 #endif /* USE_GTK */
 
 void
@@ -1722,7 +2119,7 @@ xwidget_init_view (struct xwidget *xww,
   XSETWINDOW (xv->w, s->w);
   XSETXWIDGET (xv->model, xww);
 
-#ifdef USE_GTK
+#ifdef HAVE_X_WINDOWS
   xv->dpy = FRAME_X_DISPLAY (s->f);
 
   xv->x = x;
@@ -1734,6 +2131,32 @@ xwidget_init_view (struct xwidget *xww,
   xv->clip_bottom = xww->height;
 
   xv->wdesc = None;
+  xv->frame = s->f;
+  xv->cursor = cursor_for_hit (xww->hit_result, s->f);
+  xv->just_resized = false;
+#elif defined HAVE_PGTK
+  xv->dpyinfo = FRAME_DISPLAY_INFO (s->f);
+  xv->widget = gtk_drawing_area_new ();
+  gtk_widget_set_app_paintable (xv->widget, TRUE);
+  gtk_widget_add_events (xv->widget, GDK_ALL_EVENTS_MASK);
+  gtk_container_add (GTK_CONTAINER (FRAME_GTK_WIDGET (s->f)),
+                    xv->widget);
+
+  g_signal_connect (xv->widget, "draw",
+                   G_CALLBACK (xwidget_view_draw_cb), xv);
+  g_signal_connect (xv->widget, "event",
+                   G_CALLBACK (xw_forward_event_from_view), xv);
+
+  g_object_set_data (G_OBJECT (xv->widget), XG_XWIDGET_VIEW, xv);
+
+  xv->x = x;
+  xv->y = y;
+
+  xv->clip_left = 0;
+  xv->clip_right = xww->width;
+  xv->clip_top = 0;
+  xv->clip_bottom = xww->height;
+
   xv->frame = s->f;
   xv->cursor = cursor_for_hit (xww->hit_result, s->f);
   xv->just_resized = false;
@@ -1815,13 +2238,13 @@ x_draw_xwidget_glyph_string (struct glyph_string *s)
   bool moved = (xv->x + xv->clip_left != x + clip_left
                || xv->y + xv->clip_top != y + clip_top);
 
-#ifdef USE_GTK
+#ifdef HAVE_X_WINDOWS
   bool wdesc_was_none = xv->wdesc == None;
 #endif
   xv->x = x;
   xv->y = y;
 
-#ifdef USE_GTK
+#ifdef HAVE_X_WINDOWS
   block_input ();
   if (xv->wdesc == None)
     {
@@ -1857,6 +2280,18 @@ x_draw_xwidget_glyph_string (struct glyph_string *s)
          mask.deviceid = XIAllMasterDevices;
 
          XISetMask (m, XI_Motion);
+         XISetMask (m, XI_ButtonPress);
+         XISetMask (m, XI_ButtonRelease);
+         XISetMask (m, XI_Enter);
+         XISetMask (m, XI_Leave);
+#ifdef XI_GesturePinchBegin
+         if (FRAME_DISPLAY_INFO (s->f)->xi2_version >= 4)
+           {
+             XISetMask (m, XI_GesturePinchBegin);
+             XISetMask (m, XI_GesturePinchUpdate);
+             XISetMask (m, XI_GesturePinchEnd);
+           }
+#endif
          XISelectEvents (xv->dpy, xv->wdesc, &mask, 1);
        }
 #endif
@@ -1873,16 +2308,25 @@ x_draw_xwidget_glyph_string (struct glyph_string *s)
       moved = false;
     }
 #endif
+#ifdef HAVE_PGTK
+  block_input ();
+#endif
 
   /* Has it moved?  */
   if (moved)
     {
-#ifdef USE_GTK
+#ifdef HAVE_X_WINDOWS
       XMoveResizeWindow (xv->dpy, xv->wdesc, x + clip_left, y + clip_top,
                         clip_right - clip_left, clip_bottom - clip_top);
       XFlush (xv->dpy);
       cairo_xlib_surface_set_size (xv->cr_surface, clip_right - clip_left,
                                   clip_bottom - clip_top);
+#elif defined HAVE_PGTK
+      gtk_widget_set_size_request (xv->widget, clip_right - clip_left,
+                                  clip_bottom - clip_top);
+      gtk_fixed_move (GTK_FIXED (FRAME_GTK_WIDGET (xv->frame)),
+                     xv->widget, x + clip_left, y + clip_top);
+      gtk_widget_queue_allocate (xv->widget);
 #elif defined NS_IMPL_COCOA
       nsxwidget_move_view (xv, x + clip_left, y + clip_top);
 #endif
@@ -1893,11 +2337,14 @@ x_draw_xwidget_glyph_string (struct glyph_string *s)
      covers the entire frame.  Clipping might have changed even if we
      haven't actually moved; try to figure out when we need to reclip
      for real.  */
+#ifndef HAVE_PGTK
   if (xv->clip_right != clip_right
       || xv->clip_bottom != clip_bottom
       || xv->clip_top != clip_top || xv->clip_left != clip_left)
+#endif
     {
 #ifdef USE_GTK
+#ifdef HAVE_X_WINDOWS
       if (!wdesc_was_none && !moved)
        {
          if (clip_right - clip_left <= 0
@@ -1915,6 +2362,13 @@ x_draw_xwidget_glyph_string (struct glyph_string *s)
          cairo_xlib_surface_set_size (xv->cr_surface, clip_right - clip_left,
                                       clip_bottom - clip_top);
        }
+#else
+      gtk_widget_set_size_request (xv->widget, clip_right - clip_left,
+                                  clip_bottom - clip_top);
+      gtk_fixed_move (GTK_FIXED (FRAME_GTK_WIDGET (xv->frame)),
+                     xv->widget, x + clip_left, y + clip_top);
+      gtk_widget_queue_allocate (xv->widget);
+#endif
 #elif defined NS_IMPL_COCOA
       nsxwidget_resize_view (xv, clip_right - clip_left,
                              clip_bottom - clip_top);
@@ -1943,7 +2397,7 @@ x_draw_xwidget_glyph_string (struct glyph_string *s)
 #endif
        }
     }
-#ifdef USE_GTK
+#ifdef HAVE_X_WINDOWS
   else
     {
       XSetWindowBackground (xv->dpy, xv->wdesc,
@@ -1951,7 +2405,7 @@ x_draw_xwidget_glyph_string (struct glyph_string *s)
     }
 #endif
 
-#ifdef HAVE_XINPUT2
+#if defined HAVE_XINPUT2 || defined HAVE_PGTK
   record_osr_embedder (xv);
   synthesize_focus_in_event (xww->widget_osr);
 #endif
@@ -2289,19 +2743,22 @@ DEFUN ("delete-xwidget-view",
 {
   CHECK_XWIDGET_VIEW (xwidget_view);
   struct xwidget_view *xv = XXWIDGET_VIEW (xwidget_view);
+
+  block_input ();
 #ifdef USE_GTK
   struct xwidget *xw = XXWIDGET (xv->model);
   GdkWindow *w;
-
+#ifdef HAVE_X_WINDOWS
   if (xv->wdesc != None)
     {
-      block_input ();
       cairo_destroy (xv->cr_context);
       cairo_surface_destroy (xv->cr_surface);
       XDestroyWindow (xv->dpy, xv->wdesc);
       Fremhash (make_fixnum (xv->wdesc), x_window_to_xwv_map);
-      unblock_input ();
     }
+#else
+  gtk_widget_destroy (xv->widget);
+#endif
 
   if (xw->embedder_view == xv && !NILP (xw->buffer))
     {
@@ -2318,6 +2775,7 @@ DEFUN ("delete-xwidget-view",
 
   internal_xwidget_view_list = Fdelq (xwidget_view, 
internal_xwidget_view_list);
   Vxwidget_view_list = Fcopy_sequence (internal_xwidget_view_list);
+  unblock_input ();
   return Qnil;
 }
 
@@ -2893,7 +3351,7 @@ syms_of_xwidget (void)
   internal_xwidget_view_list = Qnil;
   staticpro (&internal_xwidget_view_list);
 
-#ifdef USE_GTK
+#ifdef HAVE_X_WINDOWS
   x_window_to_xwv_map = CALLN (Fmake_hash_table, QCtest, Qeq);
 
   staticpro (&x_window_to_xwv_map);
@@ -3083,7 +3541,7 @@ xwidget_end_redisplay (struct window *w, struct 
glyph_matrix *matrix)
     }
 }
 
-#ifdef USE_GTK
+#ifdef HAVE_X_WINDOWS
 void
 lower_frame_xwidget_views (struct frame *f)
 {
@@ -3097,7 +3555,9 @@ lower_frame_xwidget_views (struct frame *f)
        XLowerWindow (xv->dpy, xv->wdesc);
     }
 }
+#endif
 
+#ifndef NS_IMPL_COCOA
 void
 kill_frame_xwidget_views (struct frame *f)
 {
@@ -3150,6 +3610,8 @@ kill_xwidget (struct xwidget *xw)
   xw->widget_osr = NULL;
   xw->widgetwindow_osr = NULL;
   xw->find_text = NULL;
+
+  catch_child_signal ();
 #elif defined NS_IMPL_COCOA
   nsxwidget_kill (xw);
 #endif
@@ -3170,4 +3632,6 @@ kill_buffer_xwidgets (Lisp_Object buffer)
        kill_xwidget (xw);
       }
     }
+
+  catch_child_signal ();
 }
diff --git a/src/xwidget.h b/src/xwidget.h
index f2d497c092..ee74e53c4d 100644
--- a/src/xwidget.h
+++ b/src/xwidget.h
@@ -1,6 +1,6 @@
 /* Support for embedding graphical components in a buffer.
 
-Copyright (C) 2011-2021 Free Software Foundation, Inc.
+Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -32,13 +32,21 @@ struct window;
 
 #if defined (USE_GTK)
 #include <gtk/gtk.h>
+#ifndef HAVE_PGTK
 #include <X11/Xlib.h>
 #include "xterm.h"
+#else
+#include "pgtkterm.h"
+#endif
 #elif defined (NS_IMPL_COCOA) && defined (__OBJC__)
 #import <AppKit/NSView.h>
 #import "nsxwidget.h"
 #endif
 
+#ifdef HAVE_XINPUT2
+#include <X11/extensions/XInput2.h>
+#endif
+
 struct xwidget
 {
   union vectorlike_header header;
@@ -107,8 +115,13 @@ struct xwidget_view
   enum glyph_row_area area;
 
 #if defined (USE_GTK)
+#ifndef HAVE_PGTK
   Display *dpy;
   Window wdesc;
+#else
+  struct pgtk_display_info *dpyinfo;
+  GtkWidget *widget;
+#endif
   Emacs_Cursor cursor;
   struct frame *frame;
 
@@ -190,16 +203,23 @@ extern struct xwidget *xwidget_from_id (uint32_t id);
 struct xwidget_view *xwidget_view_from_window (Window wdesc);
 void xwidget_expose (struct xwidget_view *xv);
 extern void lower_frame_xwidget_views (struct frame *f);
+#endif
+#ifndef NS_IMPL_COCOA
 extern void kill_frame_xwidget_views (struct frame *f);
+#endif
+#ifdef HAVE_X_WINDOWS
 extern void xwidget_button (struct xwidget_view *, bool, int,
                            int, int, int, Time);
 extern void xwidget_motion_or_crossing (struct xwidget_view *,
                                        const XEvent *);
 #ifdef HAVE_XINPUT2
 extern void xwidget_motion_notify (struct xwidget_view *, double,
-                                  double, uint, Time);
+                                  double, double, double, uint, Time);
 extern void xwidget_scroll (struct xwidget_view *, double, double,
-                            double, double, uint, Time);
+                            double, double, uint, Time, bool);
+#ifdef HAVE_USABLE_XI_GESTURE_PINCH_EVENT
+extern void xwidget_pinch (struct xwidget_view *, XIGesturePinchEvent *);
+#endif
 #endif
 #endif
 #else
diff --git a/test/ChangeLog.1 b/test/ChangeLog.1
index 7085b9ea10..fe7e6626cb 100644
--- a/test/ChangeLog.1
+++ b/test/ChangeLog.1
@@ -2952,7 +2952,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2008-2021 Free Software Foundation, Inc.
+  Copyright (C) 2008-2022 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/test/Makefile.in b/test/Makefile.in
index 51696d7faa..d6ab7b244d 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 2010-2021 Free Software Foundation, Inc.
+# Copyright (C) 2010-2022 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
@@ -183,8 +183,8 @@ testloadfile = $*
 endif
 
 %.log: %.elc
-       $(AM_V_at)${MKDIR_P} $(dir $@)
-       $(AM_V_GEN)HOME=$(TEST_HOME) $(emacs) \
+       $(AM_V_GEN)${MKDIR_P} $(dir $@)
+       $(AM_V_at)HOME=$(TEST_HOME) $(emacs) \
          -l ert ${ert_opts} -l $(testloadfile) \
          $(TEST_RUN_ERT)
 
@@ -291,8 +291,8 @@ FREE_SOURCE_1 = $(srcdir)/../lib/free.c
 # as source because those are not compiled with -fPIC.  Therefore we
 # use only source files.
 $(test_module): $(test_module:${SO}=.c) ../src/emacs-module.h
-       $(AM_V_at)${MKDIR_P} $(dir $@)
-       $(AM_V_CCLD)$(CC) -shared $(CPPFLAGS) $(MODULE_CFLAGS) $(LDFLAGS) \
+       $(AM_V_CCLD)${MKDIR_P} $(dir $@)
+       $(AM_V_at)$(CC) -shared $(CPPFLAGS) $(MODULE_CFLAGS) $(LDFLAGS) \
          -o $@ $< $(LIBGMP) \
          $(and $(GMP_H),$(srcdir)/../lib/mini-gmp-gnulib.c) \
          $(FREE_SOURCE_$(REPLACE_FREE)) \
@@ -353,6 +353,7 @@ mostlyclean:
 
 clean:
        find . '(' -name '*.log' -o -name '*.log~' ')' $(FIND_DELETE)
+       find . '(' -name '*.xml' -a ! -path '*resources*' ')' $(FIND_DELETE)
        rm -f ${srcdir}/lisp/gnus/mml-sec-resources/random_seed
        rm -f $(test_module_dir)/*.o $(test_module_dir)/*.so \
          $(test_module_dir)/*.dll
@@ -368,16 +369,16 @@ maintainer-clean: distclean bootstrap-clean
 .PHONY: check-declare
 
 check-declare:
-       $(emacs) -l check-declare \
+       $(emacs) --batch -l check-declare \
          --eval '(check-declare-directory "$(srcdir)")'
 
 .PHONY: subdirs subdir-targets generate-test-jobs
 
 subdirs:
-       @echo $(SUBDIRS)
+       @: $(info $(SUBDIRS))
 
 subdir-targets:
-       @echo $(SUBDIR_TARGETS)
+       @: $(info $(SUBDIR_TARGETS))
 
 generate-test-jobs:
        @$(MAKE) -C infra generate-test-jobs SUBDIRS="$(SUBDIRS)"
diff --git a/test/README b/test/README
index 4d447c9bf1..e44c4a43ee 100644
--- a/test/README
+++ b/test/README
@@ -1,4 +1,4 @@
-Copyright (C) 2008-2021 Free Software Foundation, Inc.
+Copyright (C) 2008-2022 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 This directory contains files intended to test various aspects of
@@ -114,6 +114,9 @@ mode--only the names of the failed tests are listed.  If the
 $EMACS_TEST_VERBOSE environment variable is set, the failure summaries
 will also include the data from the failing test.
 
+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, filenotify-tests.el, shadowfile-tests.el and
 tramp-tests.el).  Per default, a mock-up connection method is used
diff --git a/test/infra/Dockerfile.emba b/test/infra/Dockerfile.emba
index aef68c6e81..d9d963bcfd 100644
--- a/test/infra/Dockerfile.emba
+++ b/test/infra/Dockerfile.emba
@@ -1,4 +1,4 @@
-# Copyright (C) 2021 Free Software Foundation, Inc.
+# Copyright (C) 2021-2022 Free Software Foundation, Inc.
 #
 #  This file is part of GNU Emacs.
 #
diff --git a/test/infra/Makefile.in b/test/infra/Makefile.in
index d9fc019625..c251578e6a 100644
--- a/test/infra/Makefile.in
+++ b/test/infra/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 2021 Free Software Foundation, Inc.
+# Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
@@ -71,7 +71,7 @@ define subdir_template
        @echo >>$(FILE)
        @echo 'test-$(subst /,-,$(1))-inotify:' >>$(FILE)
        @echo '  stage: normal' >>$(FILE)
-       @echo '  extends: [.job-template]' >>$(FILE)
+       @echo '  extends: [.job-template, .test-template]' >>$(FILE)
        @echo '  needs:' >>$(FILE)
        @echo '    - job: build-image-inotify' >>$(FILE)
        @echo '      optional: true' >>$(FILE)
@@ -82,16 +82,9 @@ define subdir_template
        $(changes)
        @echo '        - test/$(1)/*.el' >>$(FILE)
        @echo '        - test/$(1)/*resources/**' >>$(FILE)
-       @echo '  artifacts:' >>$(FILE)
-       @echo '    name: $(tn)' >>$(FILE)
-       @echo '    public: true' >>$(FILE)
-       @echo '    expire_in: 1 week' >>$(FILE)
-       @echo '    paths:' >>$(FILE)
-       @echo '      - $(tn)/$(1)/*.log' >>$(FILE)
-       @echo '    when: always' >>$(FILE)
        @echo '  variables:' >>$(FILE)
        @echo '    target: emacs-inotify' >>$(FILE)
-       @echo '    make_params: "-C test $(target)"' >>$(FILE)
+       @echo '    make_params: "-k -C test $(target)"' >>$(FILE)
 endef
 
 $(foreach subdir, $(SUBDIRS), $(eval $(call subdir_template,$(subdir))))
@@ -100,10 +93,8 @@ all: generate-test-jobs
 
 .PHONY: generate-test-jobs $(FILE) $(SUBDIR_TARGETS)
 
-generate-test-jobs: clean $(FILE) $(SUBDIR_TARGETS)
+generate-test-jobs: $(FILE) $(SUBDIR_TARGETS)
 
 $(FILE):
        $(AM_V_GEN)
-
-clean:
-       @rm -f $(FILE)
+       @echo "# Generated by \"make generate-test-jobs\", don't edit." >$(FILE)
diff --git a/test/infra/gitlab-ci.yml b/test/infra/gitlab-ci.yml
index dd36d19b3d..e034430edc 100644
--- a/test/infra/gitlab-ci.yml
+++ b/test/infra/gitlab-ci.yml
@@ -1,4 +1,4 @@
-# Copyright (C) 2017-2021 Free Software Foundation, Inc.
+# Copyright (C) 2017-2022 Free Software Foundation, Inc.
 #
 #  This file is part of GNU Emacs.
 #
@@ -44,8 +44,8 @@ workflow:
 variables:
   GIT_STRATEGY: fetch
   EMACS_EMBA_CI: 1
-  # Three hours, see below.
-  EMACS_TEST_TIMEOUT: 10800
+  EMACS_TEST_JUNIT_REPORT: junit-test-report.xml
+  EMACS_TEST_TIMEOUT: 3600
   EMACS_TEST_VERBOSE: 1
   # Use TLS 
https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#tls-enabled
   # DOCKER_HOST: tcp://docker:2376
@@ -86,14 +86,17 @@ default:
     # TODO: with make -j4 several of the tests were failing, for
     # example shadowfile-tests, but passed without it.
     - 'export PWD=$(pwd)'
-    - 'docker run -i -e EMACS_EMBA_CI=${EMACS_EMBA_CI} -e 
EMACS_TEST_TIMEOUT=${EMACS_TEST_TIMEOUT} -e 
EMACS_TEST_VERBOSE=${EMACS_TEST_VERBOSE} --volumes-from $(docker ps -q -f 
"label=com.gitlab.gitlab-runner.job.id=${CI_JOB_ID}"):ro --name ${test_name} 
${CI_REGISTRY_IMAGE}:${target}-${BUILD_TAG} /bin/bash -c "git fetch ${PWD} HEAD 
&& echo checking out these updated files && git diff --name-only FETCH_HEAD && 
( git diff --name-only FETCH_HEAD | xargs git checkout -f FETCH_HEAD ) && make 
- [...]
+    - 'docker run -i -e EMACS_EMBA_CI=${EMACS_EMBA_CI} -e 
EMACS_TEST_JUNIT_REPORT=${EMACS_TEST_JUNIT_REPORT} -e 
EMACS_TEST_TIMEOUT=${EMACS_TEST_TIMEOUT} -e 
EMACS_TEST_VERBOSE=${EMACS_TEST_VERBOSE} --volumes-from $(docker ps -q -f 
"label=com.gitlab.gitlab-runner.job.id=${CI_JOB_ID}"):ro --name ${test_name} 
${CI_REGISTRY_IMAGE}:${target}-${BUILD_TAG} /bin/bash -c "git fetch ${PWD} HEAD 
&& echo checking out these updated files && git diff --name-only FETCH_HEAD && 
( git diff --name-only FET [...]
   after_script:
     # - docker ps -a
     # - printenv
     # - test -n "$(docker ps -aq -f name=${test_name})" && ( docker export 
${test_name} | tar -tvf - )
+    # Prepare test artifacts.
     - test -n "$(docker ps -aq -f name=${test_name})" && docker cp 
${test_name}:checkout/test ${test_name}
     - test -n "$(docker ps -aq -f name=${test_name})" && docker rm ${test_name}
-    # - ls -alR ${test_name}
+    - find ${test_name} ! \( -name "*.log" -o -name ${EMACS_TEST_JUNIT_REPORT} 
\) -type f -delete
+    # BusyBox find does not know -empty.
+    - find ${test_name} -type d -depth -exec rmdir {} + 2>/dev/null
 
 .build-template:
   needs: []
@@ -102,7 +105,6 @@ default:
       when: always
     - changes:
         - "**.in"
-        - "**.yml"
         - GNUmakefile
         - aclocal.m4
         - autogen.sh
@@ -111,7 +113,7 @@ default:
         - lib/malloc/*.{h,c}
         - lisp/emacs-lisp/*.el
         - src/*.{h,c}
-        - test/infra/Dockerfile.emba
+        - test/infra/*
     - changes:
         # gfilemonitor, kqueue
         - src/gfilenotify.c
@@ -127,18 +129,28 @@ default:
     - docker build --pull --target ${target} -t 
${CI_REGISTRY_IMAGE}:${target}-${BUILD_TAG} -f test/infra/Dockerfile.emba .
     - docker push ${CI_REGISTRY_IMAGE}:${target}-${BUILD_TAG}
 
+.test-template:
+  artifacts:
+    name: ${test_name}
+    public: true
+    expire_in: 1 week
+    when: always
+    paths:
+      - ${test_name}/
+    reports:
+      junit: ${test_name}/${EMACS_TEST_JUNIT_REPORT}
+
 .gnustep-template:
   rules:
     - if: '$CI_PIPELINE_SOURCE == "web"'
     - if: '$CI_PIPELINE_SOURCE == "schedule"'
       changes:
         - "**.in"
-        - "**.yml"
         - src/ns*.{h,m}
         - src/macfont.{h,m}
         - lisp/term/ns-win.el
         - nextstep/**
-        - test/infra/Dockerfile.emba
+        - test/infra/*
 
 .filenotify-gio-template:
   rules:
@@ -146,12 +158,11 @@ default:
     - if: '$CI_PIPELINE_SOURCE == "schedule"'
       changes:
         - "**.in"
-        - "**.yml"
         - lisp/autorevert.el
         - lisp/filenotify.el
         - lisp/net/tramp-sh.el
         - src/gfilenotify.c
-        - test/infra/Dockerfile.emba
+        - test/infra/*
         - test/lisp/autorevert-tests.el
         - test/lisp/filenotify-tests.el
 
@@ -161,11 +172,10 @@ default:
     - if: '$CI_PIPELINE_SOURCE == "schedule"'
       changes:
         - "**.in"
-        - "**.yml"
         - lisp/emacs-lisp/comp.el
         - lisp/emacs-lisp/comp-cstr.el
         - src/comp.{h,m}
-        - test/infra/Dockerfile.emba
+        - test/infra/*
         - test/src/comp-resources/*.el
         - test/src/comp-tests.el
   timeout: 8 hours
@@ -189,7 +199,7 @@ include: '/test/infra/test-jobs.yml'
 test-all-inotify:
   # This tests also file monitor libraries inotify and inotifywatch.
   stage: normal
-  extends: [.job-template]
+  extends: [.job-template, .test-template]
   needs:
     - job: build-image-inotify
       optional: true
@@ -197,13 +207,6 @@ test-all-inotify:
     # Note there's no "changes" section, so this always runs on a schedule.
     - if: '$CI_PIPELINE_SOURCE == "web"'
     - if: '$CI_PIPELINE_SOURCE == "schedule"'
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - "${test_name}/**/*.log"
-    when: always
   variables:
     target: emacs-inotify
     make_params: check-expensive
@@ -217,20 +220,14 @@ build-image-filenotify-gio:
 test-filenotify-gio:
   # This tests file monitor libraries gfilemonitor and gio.
   stage: platforms
-  extends: [.job-template, .filenotify-gio-template]
+  extends: [.job-template, .test-template, .filenotify-gio-template]
   needs:
     - job: build-image-filenotify-gio
       optional: true
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - "${test_name}/**/*.log"
-    when: always
   variables:
     target: emacs-filenotify-gio
-    make_params: "-k -C test autorevert-tests.log filenotify-tests.log"
+    # This is needed in order to get a JUnit test report.
+    make_params: '-k -C test check-expensive 
LOGFILES="lisp/autorevert-tests.log lisp/filenotify-tests.log"'
 
 build-image-gnustep:
   stage: platform-images
@@ -245,13 +242,6 @@ test-gnustep:
   needs:
     - job: build-image-gnustep
       optional: true
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - "${test_name}/**/*.log"
-    when: always
   variables:
     target: emacs-gnustep
     make_params: install
@@ -276,20 +266,13 @@ build-native-comp-speed2:
 
 test-native-comp-speed0:
   stage: native-comp
-  extends: [.job-template, .native-comp-template]
+  extends: [.job-template, .test-template, .native-comp-template]
   needs:
     - job: build-native-comp-speed0
       optional: true
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - "${test_name}/**/*.log"
-    when: always
   variables:
     target: emacs-native-comp-speed0
-    make_params: "-C test check SELECTOR='(not (tag :unstable))'"
+    make_params: "-k -C test check SELECTOR='(not (tag :unstable))'"
 
 # Local Variables:
 # add-log-current-defun-header-regexp: "^\\([-_.[:alnum:]]+\\)[ \t]*:"
diff --git a/test/infra/test-jobs.yml b/test/infra/test-jobs.yml
index 33a90d6f2c..51707c181b 100644
--- a/test/infra/test-jobs.yml
+++ b/test/infra/test-jobs.yml
@@ -1,7 +1,8 @@
+# Generated by "make generate-test-jobs", don't edit.
 
 test-lib-src-inotify:
   stage: normal
-  extends: [.job-template]
+  extends: [.job-template, .test-template]
   needs:
     - job: build-image-inotify
       optional: true
@@ -12,20 +13,13 @@ test-lib-src-inotify:
         - lib-src/*.{h,c}
         - test/lib-src/*.el
         - test/lib-src/*resources/**
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - ${test_name}/lib-src/*.log
-    when: always
   variables:
     target: emacs-inotify
-    make_params: "-C test check-lib-src"
+    make_params: "-k -C test check-lib-src"
 
 test-lisp-inotify:
   stage: normal
-  extends: [.job-template]
+  extends: [.job-template, .test-template]
   needs:
     - job: build-image-inotify
       optional: true
@@ -36,20 +30,13 @@ test-lisp-inotify:
         - lisp/*.el
         - test/lisp/*.el
         - test/lisp/*resources/**
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - ${test_name}/lisp/*.log
-    when: always
   variables:
     target: emacs-inotify
-    make_params: "-C test check-lisp"
+    make_params: "-k -C test check-lisp"
 
 test-lisp-calc-inotify:
   stage: normal
-  extends: [.job-template]
+  extends: [.job-template, .test-template]
   needs:
     - job: build-image-inotify
       optional: true
@@ -60,20 +47,13 @@ test-lisp-calc-inotify:
         - lisp/calc/*.el
         - test/lisp/calc/*.el
         - test/lisp/calc/*resources/**
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - ${test_name}/lisp/calc/*.log
-    when: always
   variables:
     target: emacs-inotify
-    make_params: "-C test check-lisp-calc"
+    make_params: "-k -C test check-lisp-calc"
 
 test-lisp-calendar-inotify:
   stage: normal
-  extends: [.job-template]
+  extends: [.job-template, .test-template]
   needs:
     - job: build-image-inotify
       optional: true
@@ -84,20 +64,13 @@ test-lisp-calendar-inotify:
         - lisp/calendar/*.el
         - test/lisp/calendar/*.el
         - test/lisp/calendar/*resources/**
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - ${test_name}/lisp/calendar/*.log
-    when: always
   variables:
     target: emacs-inotify
-    make_params: "-C test check-lisp-calendar"
+    make_params: "-k -C test check-lisp-calendar"
 
 test-lisp-cedet-inotify:
   stage: normal
-  extends: [.job-template]
+  extends: [.job-template, .test-template]
   needs:
     - job: build-image-inotify
       optional: true
@@ -108,20 +81,13 @@ test-lisp-cedet-inotify:
         - lisp/cedet/*.el
         - test/lisp/cedet/*.el
         - test/lisp/cedet/*resources/**
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - ${test_name}/lisp/cedet/*.log
-    when: always
   variables:
     target: emacs-inotify
-    make_params: "-C test check-lisp-cedet"
+    make_params: "-k -C test check-lisp-cedet"
 
 test-lisp-cedet-semantic-inotify:
   stage: normal
-  extends: [.job-template]
+  extends: [.job-template, .test-template]
   needs:
     - job: build-image-inotify
       optional: true
@@ -132,20 +98,13 @@ test-lisp-cedet-semantic-inotify:
         - lisp/cedet/semantic/*.el
         - test/lisp/cedet/semantic/*.el
         - test/lisp/cedet/semantic/*resources/**
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - ${test_name}/lisp/cedet/semantic/*.log
-    when: always
   variables:
     target: emacs-inotify
-    make_params: "-C test check-lisp-cedet-semantic"
+    make_params: "-k -C test check-lisp-cedet-semantic"
 
 test-lisp-cedet-semantic-bovine-inotify:
   stage: normal
-  extends: [.job-template]
+  extends: [.job-template, .test-template]
   needs:
     - job: build-image-inotify
       optional: true
@@ -156,20 +115,13 @@ test-lisp-cedet-semantic-bovine-inotify:
         - lisp/cedet/semantic/bovine/*.el
         - test/lisp/cedet/semantic/bovine/*.el
         - test/lisp/cedet/semantic/bovine/*resources/**
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - ${test_name}/lisp/cedet/semantic/bovine/*.log
-    when: always
   variables:
     target: emacs-inotify
-    make_params: "-C test check-lisp-cedet-semantic-bovine"
+    make_params: "-k -C test check-lisp-cedet-semantic-bovine"
 
 test-lisp-cedet-srecode-inotify:
   stage: normal
-  extends: [.job-template]
+  extends: [.job-template, .test-template]
   needs:
     - job: build-image-inotify
       optional: true
@@ -180,20 +132,13 @@ test-lisp-cedet-srecode-inotify:
         - lisp/cedet/srecode/*.el
         - test/lisp/cedet/srecode/*.el
         - test/lisp/cedet/srecode/*resources/**
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - ${test_name}/lisp/cedet/srecode/*.log
-    when: always
   variables:
     target: emacs-inotify
-    make_params: "-C test check-lisp-cedet-srecode"
+    make_params: "-k -C test check-lisp-cedet-srecode"
 
 test-lisp-emacs-lisp-inotify:
   stage: normal
-  extends: [.job-template]
+  extends: [.job-template, .test-template]
   needs:
     - job: build-image-inotify
       optional: true
@@ -204,20 +149,13 @@ test-lisp-emacs-lisp-inotify:
         - lisp/emacs-lisp/*.el
         - test/lisp/emacs-lisp/*.el
         - test/lisp/emacs-lisp/*resources/**
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - ${test_name}/lisp/emacs-lisp/*.log
-    when: always
   variables:
     target: emacs-inotify
-    make_params: "-C test check-lisp-emacs-lisp"
+    make_params: "-k -C test check-lisp-emacs-lisp"
 
 test-lisp-emacs-lisp-eieio-tests-inotify:
   stage: normal
-  extends: [.job-template]
+  extends: [.job-template, .test-template]
   needs:
     - job: build-image-inotify
       optional: true
@@ -228,20 +166,13 @@ test-lisp-emacs-lisp-eieio-tests-inotify:
         - lisp/emacs-lisp/eieio*.el
         - test/lisp/emacs-lisp/eieio-tests/*.el
         - test/lisp/emacs-lisp/eieio-tests/*resources/**
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - ${test_name}/lisp/emacs-lisp/eieio-tests/*.log
-    when: always
   variables:
     target: emacs-inotify
-    make_params: "-C test check-lisp-emacs-lisp-eieio-tests"
+    make_params: "-k -C test check-lisp-emacs-lisp-eieio-tests"
 
 test-lisp-emacs-lisp-faceup-tests-inotify:
   stage: normal
-  extends: [.job-template]
+  extends: [.job-template, .test-template]
   needs:
     - job: build-image-inotify
       optional: true
@@ -252,20 +183,13 @@ test-lisp-emacs-lisp-faceup-tests-inotify:
         - lisp/emacs-lisp/faceup*.el
         - test/lisp/emacs-lisp/faceup-tests/*.el
         - test/lisp/emacs-lisp/faceup-tests/*resources/**
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - ${test_name}/lisp/emacs-lisp/faceup-tests/*.log
-    when: always
   variables:
     target: emacs-inotify
-    make_params: "-C test check-lisp-emacs-lisp-faceup-tests"
+    make_params: "-k -C test check-lisp-emacs-lisp-faceup-tests"
 
 test-lisp-emulation-inotify:
   stage: normal
-  extends: [.job-template]
+  extends: [.job-template, .test-template]
   needs:
     - job: build-image-inotify
       optional: true
@@ -276,20 +200,13 @@ test-lisp-emulation-inotify:
         - lisp/emulation/*.el
         - test/lisp/emulation/*.el
         - test/lisp/emulation/*resources/**
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - ${test_name}/lisp/emulation/*.log
-    when: always
   variables:
     target: emacs-inotify
-    make_params: "-C test check-lisp-emulation"
+    make_params: "-k -C test check-lisp-emulation"
 
 test-lisp-erc-inotify:
   stage: normal
-  extends: [.job-template]
+  extends: [.job-template, .test-template]
   needs:
     - job: build-image-inotify
       optional: true
@@ -300,20 +217,13 @@ test-lisp-erc-inotify:
         - lisp/erc/*.el
         - test/lisp/erc/*.el
         - test/lisp/erc/*resources/**
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - ${test_name}/lisp/erc/*.log
-    when: always
   variables:
     target: emacs-inotify
-    make_params: "-C test check-lisp-erc"
+    make_params: "-k -C test check-lisp-erc"
 
 test-lisp-eshell-inotify:
   stage: normal
-  extends: [.job-template]
+  extends: [.job-template, .test-template]
   needs:
     - job: build-image-inotify
       optional: true
@@ -324,20 +234,13 @@ test-lisp-eshell-inotify:
         - lisp/eshell/*.el
         - test/lisp/eshell/*.el
         - test/lisp/eshell/*resources/**
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - ${test_name}/lisp/eshell/*.log
-    when: always
   variables:
     target: emacs-inotify
-    make_params: "-C test check-lisp-eshell"
+    make_params: "-k -C test check-lisp-eshell"
 
 test-lisp-gnus-inotify:
   stage: normal
-  extends: [.job-template]
+  extends: [.job-template, .test-template]
   needs:
     - job: build-image-inotify
       optional: true
@@ -348,20 +251,13 @@ test-lisp-gnus-inotify:
         - lisp/gnus/*.el
         - test/lisp/gnus/*.el
         - test/lisp/gnus/*resources/**
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - ${test_name}/lisp/gnus/*.log
-    when: always
   variables:
     target: emacs-inotify
-    make_params: "-C test check-lisp-gnus"
+    make_params: "-k -C test check-lisp-gnus"
 
 test-lisp-image-inotify:
   stage: normal
-  extends: [.job-template]
+  extends: [.job-template, .test-template]
   needs:
     - job: build-image-inotify
       optional: true
@@ -372,20 +268,13 @@ test-lisp-image-inotify:
         - lisp/image/*.el
         - test/lisp/image/*.el
         - test/lisp/image/*resources/**
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - ${test_name}/lisp/image/*.log
-    when: always
   variables:
     target: emacs-inotify
-    make_params: "-C test check-lisp-image"
+    make_params: "-k -C test check-lisp-image"
 
 test-lisp-international-inotify:
   stage: normal
-  extends: [.job-template]
+  extends: [.job-template, .test-template]
   needs:
     - job: build-image-inotify
       optional: true
@@ -396,20 +285,13 @@ test-lisp-international-inotify:
         - lisp/international/*.el
         - test/lisp/international/*.el
         - test/lisp/international/*resources/**
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - ${test_name}/lisp/international/*.log
-    when: always
   variables:
     target: emacs-inotify
-    make_params: "-C test check-lisp-international"
+    make_params: "-k -C test check-lisp-international"
 
 test-lisp-mail-inotify:
   stage: normal
-  extends: [.job-template]
+  extends: [.job-template, .test-template]
   needs:
     - job: build-image-inotify
       optional: true
@@ -420,20 +302,13 @@ test-lisp-mail-inotify:
         - lisp/mail/*.el
         - test/lisp/mail/*.el
         - test/lisp/mail/*resources/**
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - ${test_name}/lisp/mail/*.log
-    when: always
   variables:
     target: emacs-inotify
-    make_params: "-C test check-lisp-mail"
+    make_params: "-k -C test check-lisp-mail"
 
 test-lisp-mh-e-inotify:
   stage: normal
-  extends: [.job-template]
+  extends: [.job-template, .test-template]
   needs:
     - job: build-image-inotify
       optional: true
@@ -444,20 +319,13 @@ test-lisp-mh-e-inotify:
         - lisp/mh-e/*.el
         - test/lisp/mh-e/*.el
         - test/lisp/mh-e/*resources/**
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - ${test_name}/lisp/mh-e/*.log
-    when: always
   variables:
     target: emacs-inotify
-    make_params: "-C test check-lisp-mh-e"
+    make_params: "-k -C test check-lisp-mh-e"
 
 test-lisp-net-inotify:
   stage: normal
-  extends: [.job-template]
+  extends: [.job-template, .test-template]
   needs:
     - job: build-image-inotify
       optional: true
@@ -468,20 +336,13 @@ test-lisp-net-inotify:
         - lisp/net/*.el
         - test/lisp/net/*.el
         - test/lisp/net/*resources/**
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - ${test_name}/lisp/net/*.log
-    when: always
   variables:
     target: emacs-inotify
-    make_params: "-C test check-lisp-net"
+    make_params: "-k -C test check-lisp-net"
 
 test-lisp-nxml-inotify:
   stage: normal
-  extends: [.job-template]
+  extends: [.job-template, .test-template]
   needs:
     - job: build-image-inotify
       optional: true
@@ -492,20 +353,13 @@ test-lisp-nxml-inotify:
         - lisp/nxml/*.el
         - test/lisp/nxml/*.el
         - test/lisp/nxml/*resources/**
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - ${test_name}/lisp/nxml/*.log
-    when: always
   variables:
     target: emacs-inotify
-    make_params: "-C test check-lisp-nxml"
+    make_params: "-k -C test check-lisp-nxml"
 
 test-lisp-obsolete-inotify:
   stage: normal
-  extends: [.job-template]
+  extends: [.job-template, .test-template]
   needs:
     - job: build-image-inotify
       optional: true
@@ -516,20 +370,13 @@ test-lisp-obsolete-inotify:
         - lisp/obsolete/*.el
         - test/lisp/obsolete/*.el
         - test/lisp/obsolete/*resources/**
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - ${test_name}/lisp/obsolete/*.log
-    when: always
   variables:
     target: emacs-inotify
-    make_params: "-C test check-lisp-obsolete"
+    make_params: "-k -C test check-lisp-obsolete"
 
 test-lisp-org-inotify:
   stage: normal
-  extends: [.job-template]
+  extends: [.job-template, .test-template]
   needs:
     - job: build-image-inotify
       optional: true
@@ -540,20 +387,13 @@ test-lisp-org-inotify:
         - lisp/org/*.el
         - test/lisp/org/*.el
         - test/lisp/org/*resources/**
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - ${test_name}/lisp/org/*.log
-    when: always
   variables:
     target: emacs-inotify
-    make_params: "-C test check-lisp-org"
+    make_params: "-k -C test check-lisp-org"
 
 test-lisp-play-inotify:
   stage: normal
-  extends: [.job-template]
+  extends: [.job-template, .test-template]
   needs:
     - job: build-image-inotify
       optional: true
@@ -564,20 +404,13 @@ test-lisp-play-inotify:
         - lisp/play/*.el
         - test/lisp/play/*.el
         - test/lisp/play/*resources/**
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - ${test_name}/lisp/play/*.log
-    when: always
   variables:
     target: emacs-inotify
-    make_params: "-C test check-lisp-play"
+    make_params: "-k -C test check-lisp-play"
 
 test-lisp-progmodes-inotify:
   stage: normal
-  extends: [.job-template]
+  extends: [.job-template, .test-template]
   needs:
     - job: build-image-inotify
       optional: true
@@ -588,20 +421,13 @@ test-lisp-progmodes-inotify:
         - lisp/progmodes/*.el
         - test/lisp/progmodes/*.el
         - test/lisp/progmodes/*resources/**
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - ${test_name}/lisp/progmodes/*.log
-    when: always
   variables:
     target: emacs-inotify
-    make_params: "-C test check-lisp-progmodes"
+    make_params: "-k -C test check-lisp-progmodes"
 
 test-lisp-so-long-tests-inotify:
   stage: normal
-  extends: [.job-template]
+  extends: [.job-template, .test-template]
   needs:
     - job: build-image-inotify
       optional: true
@@ -612,20 +438,13 @@ test-lisp-so-long-tests-inotify:
         - lisp/so-long*.el
         - test/lisp/so-long-tests/*.el
         - test/lisp/so-long-tests/*resources/**
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - ${test_name}/lisp/so-long-tests/*.log
-    when: always
   variables:
     target: emacs-inotify
-    make_params: "-C test check-lisp-so-long-tests"
+    make_params: "-k -C test check-lisp-so-long-tests"
 
 test-lisp-term-inotify:
   stage: normal
-  extends: [.job-template]
+  extends: [.job-template, .test-template]
   needs:
     - job: build-image-inotify
       optional: true
@@ -636,20 +455,13 @@ test-lisp-term-inotify:
         - lisp/term/*.el
         - test/lisp/term/*.el
         - test/lisp/term/*resources/**
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - ${test_name}/lisp/term/*.log
-    when: always
   variables:
     target: emacs-inotify
-    make_params: "-C test check-lisp-term"
+    make_params: "-k -C test check-lisp-term"
 
 test-lisp-textmodes-inotify:
   stage: normal
-  extends: [.job-template]
+  extends: [.job-template, .test-template]
   needs:
     - job: build-image-inotify
       optional: true
@@ -660,20 +472,13 @@ test-lisp-textmodes-inotify:
         - lisp/textmodes/*.el
         - test/lisp/textmodes/*.el
         - test/lisp/textmodes/*resources/**
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - ${test_name}/lisp/textmodes/*.log
-    when: always
   variables:
     target: emacs-inotify
-    make_params: "-C test check-lisp-textmodes"
+    make_params: "-k -C test check-lisp-textmodes"
 
 test-lisp-url-inotify:
   stage: normal
-  extends: [.job-template]
+  extends: [.job-template, .test-template]
   needs:
     - job: build-image-inotify
       optional: true
@@ -684,20 +489,13 @@ test-lisp-url-inotify:
         - lisp/url/*.el
         - test/lisp/url/*.el
         - test/lisp/url/*resources/**
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - ${test_name}/lisp/url/*.log
-    when: always
   variables:
     target: emacs-inotify
-    make_params: "-C test check-lisp-url"
+    make_params: "-k -C test check-lisp-url"
 
 test-lisp-vc-inotify:
   stage: normal
-  extends: [.job-template]
+  extends: [.job-template, .test-template]
   needs:
     - job: build-image-inotify
       optional: true
@@ -708,20 +506,13 @@ test-lisp-vc-inotify:
         - lisp/vc/*.el
         - test/lisp/vc/*.el
         - test/lisp/vc/*resources/**
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - ${test_name}/lisp/vc/*.log
-    when: always
   variables:
     target: emacs-inotify
-    make_params: "-C test check-lisp-vc"
+    make_params: "-k -C test check-lisp-vc"
 
 test-misc-inotify:
   stage: normal
-  extends: [.job-template]
+  extends: [.job-template, .test-template]
   needs:
     - job: build-image-inotify
       optional: true
@@ -732,20 +523,13 @@ test-misc-inotify:
         - admin/*.el
         - test/misc/*.el
         - test/misc/*resources/**
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - ${test_name}/misc/*.log
-    when: always
   variables:
     target: emacs-inotify
-    make_params: "-C test check-misc"
+    make_params: "-k -C test check-misc"
 
 test-src-inotify:
   stage: normal
-  extends: [.job-template]
+  extends: [.job-template, .test-template]
   needs:
     - job: build-image-inotify
       optional: true
@@ -756,13 +540,6 @@ test-src-inotify:
         - src/*.{h,c}
         - test/src/*.el
         - test/src/*resources/**
-  artifacts:
-    name: ${test_name}
-    public: true
-    expire_in: 1 week
-    paths:
-      - ${test_name}/src/*.log
-    when: always
   variables:
     target: emacs-inotify
-    make_params: "-C test check-src"
+    make_params: "-k -C test check-src"
diff --git a/test/lib-src/emacsclient-tests.el 
b/test/lib-src/emacsclient-tests.el
index 8bad9c04e0..1302fbe30c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 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 863806af7b..394eae48ee 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 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 a9c36e30e1..5b964fc5c0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 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 3a346fd1e2..4c3fd9c5dc 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 59ff678369..c6616922be 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 14a14ca4f0..71b706c763 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
 
 ;; Author: Pablo Barbáchano <pablob@amazon.com>
 
diff --git a/test/lisp/apropos-tests.el b/test/lisp/apropos-tests.el
index 7eaa64207f..289700abf7 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 b05a9629c1..341a835039 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 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 3da6f3e9b7..f5147a7ce0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013, 2017-2022 Free Software Foundation, Inc.
 
 ;; Author: Damien Cassou <damien.cassou@gmail.com>
 
diff --git a/test/lisp/auth-source-tests.el b/test/lisp/auth-source-tests.el
index 34c68b421c..41f8b6d8c9 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
 
 ;; Author: Damien Cassou <damien@cassou.me>,
 ;;         Nicolas Petton <nicolas@petton.fr>
@@ -295,11 +295,7 @@
             (setq found (apply #'auth-source-search parameters))
             (when (listp found)
               (dolist (f found)
-                (setf f (plist-put f :secret
-                                   (let ((secret (plist-get f :secret)))
-                                     (if (functionp secret)
-                                         (funcall secret)
-                                       secret))))))
+                (setf f (plist-put f :secret (auth-info-password f)))))
 
             (setq found-as-string (format "%s: %S" testname found))
             ;; (message "With parameters %S found: [%s] needed: [%s]"
@@ -326,10 +322,7 @@
                   auth-info
                   (car (auth-source-search
                         :max 1 :host host :require '(:user :secret) :create t))
-                 auth-passwd (plist-get auth-info :secret)
-                 auth-passwd (if (functionp auth-passwd)
-                                 (funcall auth-passwd)
-                               auth-passwd))
+                 auth-passwd (auth-info-password auth-info))
             (should (string-equal (plist-get auth-info :user) 
(user-login-name)))
             (should (string-equal (plist-get auth-info :host) host))
             (should (equal auth-passwd passwd))
@@ -339,10 +332,7 @@
             ;; Check, that the item has been created indeed.
             (auth-source-forget+ :host t)
             (setq auth-info (car (auth-source-search :host host))
-                 auth-passwd (plist-get auth-info :secret)
-                 auth-passwd (if (functionp auth-passwd)
-                                 (funcall auth-passwd)
-                               auth-passwd))
+                 auth-passwd (auth-info-password auth-info))
             (if (zerop (length passwd))
                 (progn
                   (should-not (plist-get auth-info :user))
@@ -377,10 +367,7 @@
                 auth-info
                 (car (auth-source-search
                       :max 1 :host host :require '(:user :secret) :create t))
-                auth-passwd (plist-get auth-info :secret)
-                auth-passwd (if (functionp auth-passwd)
-                                (funcall auth-passwd)
-                              auth-passwd))
+                auth-passwd (auth-info-password auth-info))
           (should (string-equal (plist-get auth-info :user) (user-login-name)))
           (should (string-equal (plist-get auth-info :host) host))
           (should (equal auth-passwd passwd))
@@ -391,10 +378,7 @@
           (auth-source-forget+ :host t)
           (setq auth-source-netrc-cache nil)
           (setq auth-info (car (auth-source-search :host host))
-                auth-passwd (plist-get auth-info :secret)
-                auth-passwd (if (functionp auth-passwd)
-                                (funcall auth-passwd)
-                              auth-passwd))
+                auth-passwd (auth-info-password auth-info))
           (with-temp-buffer
             (insert-file-contents netrc-file)
             (if (zerop (length passwd))
@@ -421,9 +405,7 @@ machine c1 port c2 user c3 password c4\n"
            (parameters '(:max 1 :host t))
            (found (apply #'auth-source-delete parameters)))
       (dolist (f found)
-        (let ((s (plist-get f :secret)))
-          (setf f (plist-put f :secret
-                             (if (functionp s) (funcall s) s)))))
+        (setf f (plist-put f :secret (auth-info-password f))))
       ;; Note: The netrc backend doesn't delete anything, so
       ;; this is actually the same as `auth-source-search'.
       (should (equal found expected)))))
diff --git a/test/lisp/autoinsert-tests.el b/test/lisp/autoinsert-tests.el
index b264323ca1..722215cb7e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 b9d45324cb..d26e0f5a15 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 
@@ -127,7 +127,7 @@ This expects `auto-revert--messages' to be bound by
 `ert-with-message-capture' before calling."
   ;; Remote files do not cooperate well with timers.  So we count ourselves.
   (let ((ct (current-time)))
-    (while (and (< (float-time (time-subtract (current-time) ct))
+    (while (and (< (float-time (time-subtract nil ct))
                    (auto-revert--timeout))
                 (null (string-match
                        (format-message
@@ -167,7 +167,7 @@ This expects `auto-revert--messages' to be bound by
 
 (defun auto-revert-tests--write-file (text file time-delta &optional append)
   (write-region text nil file append 'no-message)
-  (set-file-times file (time-subtract (current-time) time-delta)))
+  (set-file-times file (time-subtract nil time-delta)))
 
 (ert-deftest auto-revert-test00-auto-revert-mode ()
   "Check autorevert for a file."
@@ -281,9 +281,9 @@ This expects `auto-revert--messages' to be bound by
 (ert-deftest auto-revert-test02-auto-revert-deleted-file ()
   "Check autorevert for a deleted file."
   ;; Repeated unpredictable failures, bug#32645.
-  ;; Unlikely to be hydra-specific?
-                                        ;  (skip-unless (not (getenv 
"EMACS_HYDRA_CI")))
   :tags '(:unstable)
+  ;; Unlikely to be hydra-specific?
+  ;; (skip-unless (not (getenv "EMACS_HYDRA_CI")))
   (with-auto-revert-test
    (ert-with-temp-file tmpfile
      (let (;; Try to catch bug#32645.
@@ -453,7 +453,7 @@ This expects `auto-revert--messages' to be bound by
 (defun auto-revert-test--wait-for (pred max-wait)
   "Wait until PRED is true, or MAX-WAIT seconds elapsed."
   (let ((ct (current-time)))
-    (while (and (< (float-time (time-subtract (current-time) ct)) max-wait)
+    (while (and (< (float-time (time-subtract nil ct)) max-wait)
                 (not (funcall pred)))
       (read-event nil nil 0.1))))
 
@@ -484,8 +484,6 @@ This expects `auto-revert--messages' to be bound by
        (ert-with-temp-file file-3
          (let* ((auto-revert-use-notify t)
                 (auto-revert-avoid-polling t)
-                (auto-revert-debug (getenv "EMACS_EMBA_CI"))
-                (file-notify-debug (getenv "EMACS_EMBA_CI"))
                 (was-in-global-auto-revert-mode global-auto-revert-mode)
                 (file-2b (concat file-2 "-b"))
                 require-final-newline buf-1 buf-2 buf-3)
@@ -531,28 +529,16 @@ This expects `auto-revert--messages' to be bound by
                  (should (equal (auto-revert-test--buffer-string buf-3) "3-a"))
 
                  ;; Delete a visited file, and re-create it with new contents.
-                 (when auto-revert-debug (message "Hallo0"))
                  (delete-file file-1)
-                 (when auto-revert-debug (message "Hallo1"))
                  (should (equal (auto-revert-test--buffer-string buf-1) "1-a"))
-                 (when auto-revert-debug (message "Hallo2"))
                  (auto-revert-test--write-file "1-b" file-1)
-                 (when auto-revert-debug (message "Hallo3"))
+                 ;; Since the file is deleted, it needs at least
+                 ;; `autorevert-interval' to recognize the new file,
+                 ;; while polling.  So increase the timeout.
                  (auto-revert-test--wait-for-buffer-text
-                  buf-1 "1-b" (auto-revert--timeout))
-                 ;; On emba, `buf-1' is a killed buffer.
-                 (when auto-revert-debug
-                   (message
-                    "Hallo4 %s %s %s %s %s %s %s"
-                    buf-1 (buffer-name buf-1) (buffer-live-p buf-1)
-                    file-1 (get-file-buffer file-1)
-                    (buffer-name (get-file-buffer file-1))
-                    (buffer-live-p (get-file-buffer file-1)))
-                   (with-current-buffer buf-1
-                     (message "Hallo5\n%s" (buffer-local-variables))))
+                  buf-1 "1-b" (* 2 (auto-revert--timeout)))
                  (should (buffer-local-value
                           'auto-revert-notify-watch-descriptor buf-1))
-                 (when auto-revert-debug (message "Hallo6"))
 
                  ;; Write a buffer to a new file, then modify the new file on 
disk.
                  (with-current-buffer buf-2
diff --git a/test/lisp/battery-tests.el b/test/lisp/battery-tests.el
index e34d59102b..1f9cfaee01 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 dc2dec68ee..ae7331fcc2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 b223a64308..8e7981e699 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 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 2f5ad795df..99d1ee3de4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -21,11 +21,9 @@
 
 (require 'ert)
 
-(defvar button-tests--map
-  (let ((map (make-sparse-keymap)))
-    (define-key map "x" #'ignore)
-    map)
-  "Keymap for testing command substitution.")
+(defvar-keymap button-tests--map
+  :doc "Keymap for testing command substitution."
+  "x" #'ignore)
 
 (ert-deftest button-at ()
   "Test `button-at' behavior."
diff --git a/test/lisp/calc/calc-tests.el b/test/lisp/calc/calc-tests.el
index 3eb6b34c13..892fd278df 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2022 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 f24ca97310..c1a1942cf7 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 1de5dea088..771681228e 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 db3a4909fa..46d49c68c1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 1551922028..c918b0f63f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2005, 2008-2022 Free Software Foundation, Inc.
 
 ;; Author:         Ulf Jasper <ulf.jasper@web.de>
 ;; Created:        March 2005
diff --git a/test/lisp/calendar/iso8601-tests.el 
b/test/lisp/calendar/iso8601-tests.el
index c4d038ab68..6c9e85ec92 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 268dcfdb55..846a749eb5 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 b706b73570..3fd53c6c1e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 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 921be1d2d4..9f79fed7c7 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 4568947c0b..5a37c91493 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -41,6 +41,13 @@
                    (encode-time-value 1 2 3 4 3))
                  '(1 2 3 4))))
 
+(ert-deftest test-date-to-time ()
+  (should (equal (format-time-string "%F %T" (date-to-time "2021-12-04"))
+                 "2021-12-04 00:00:00")))
+
+(ert-deftest test-days-between ()
+  (should (equal (days-between "2021-10-22" "2020-09-29") 388)))
+
 (ert-deftest test-leap-year ()
   (should-not (date-leap-year-p 1999))
   (should-not (date-leap-year-p 1900))
@@ -48,13 +55,13 @@
   (should (date-leap-year-p 2004)))
 
 (ert-deftest test-days-to-time ()
-  (should (equal (days-to-time 0) '(0 0)))
-  (should (equal (days-to-time 1) '(1 20864)))
-  (should (equal (days-to-time 999) '(1317 2688)))
-  (should (equal (days-to-time 0.0) '(0 0 0 0)))
-  (should (equal (days-to-time 0.5) '(0 43200 0 0)))
-  (should (equal (days-to-time 1.0) '(1 20864 0 0)))
-  (should (equal (days-to-time 999.0) '(1317 2688 0 0))))
+  (should (time-equal-p (days-to-time 0) '(0 0)))
+  (should (time-equal-p (days-to-time 1) '(1 20864)))
+  (should (time-equal-p (days-to-time 999) '(1317 2688)))
+  (should (time-equal-p (days-to-time 0.0) '(0 0 0 0)))
+  (should (time-equal-p (days-to-time 0.5) '(0 43200 0 0)))
+  (should (time-equal-p (days-to-time 1.0) '(1 20864 0 0)))
+  (should (time-equal-p (days-to-time 999.0) '(1317 2688 0 0))))
 
 (ert-deftest test-seconds-to-string ()
   (should (equal (seconds-to-string 0) "0s"))
@@ -163,7 +170,8 @@
 
 (ert-deftest test-time-since ()
   (should (time-equal-p 0 (time-since nil)))
-  (should (= (cadr (time-since (time-subtract (current-time) 1))) 1)))
+  (should (time-equal-p 1 (time-convert (time-since (time-subtract nil 1))
+                                        'integer))))
 
 (ert-deftest test-time-decoded-period ()
   (should (equal (decoded-time-period '(nil nil 1 nil nil nil nil nil nil))
diff --git a/test/lisp/calendar/todo-mode-tests.el 
b/test/lisp/calendar/todo-mode-tests.el
index 79978a2041..0102b62c10 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 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 5502d42431..d264410e3c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 c5eb5b0ec0..2da450c273 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 38e6f9ed7b..46f14d8480 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 ea3afc72a6..54941fa974 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-2021 Free Software Foundation, Inc.
+// Copyright (C) 2008-2022 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 e8c9b345b2..6157af4212 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-2021 Free Software Foundation, Inc.
+// Copyright (C) 2008-2022 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 bfc016903c..10735a5aa9 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-2021 Free Software Foundation, Inc.
+// Copyright (C) 2009-2022 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 9d2329a0fa..920022648f 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-2021 Free Software Foundation, Inc.
+// Copyright (C) 2009-2022 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 db1603cead..05f8f54afd 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2008-2022 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 084d6a8687..1d2c51e365 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2008-2022 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 6659b5557b..e7d85101a1 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-2021 Free Software Foundation, Inc.
+// Copyright (C) 2008-2022 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 409950cce2..4c56d34c90 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-2021 Free Software Foundation, Inc.
+// Copyright (C) 2007-2022 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 5d795b32b1..870da66ade 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-2021 Free Software Foundation, Inc.
+// Copyright (C) 2007-2022 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 ed7a057df0..d2b0f5d3c3 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-2021 Free Software Foundation, Inc.
+// Copyright (C) 2008-2022 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 c82535f958..09ab78942e 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-2021 Free Software Foundation, Inc.
+// Copyright (C) 2008-2022 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 6f6c854263..661c09b01b 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-2021 Free Software Foundation, Inc.
+// Copyright (C) 2008-2022 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 d3b690f854..e438e62e29 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-2021 Free Software Foundation, Inc.
+// Copyright (C) 2008-2022 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 e796eb285c..00c877a182 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2008-2022 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 7ed9785fc0..323e2059c4 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-2021 Free Software Foundation, Inc.
+// Copyright (C) 2009-2022 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 49eb5780f4..901a662e79 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 6ea4ca1a16..caf20fa8e0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 3e4cfb0f0c..78bbbbf459 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-2021  Free Software Foundation, Inc.
+;; Copyright (C) 2003-2022 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 d049f95b4c..2e61f91e58 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-2021  Free Software Foundation, Inc.
+;; Copyright (C) 2003-2022 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
@@ -127,8 +127,9 @@ gcc version 2.95.2 19991024 (release)"
     ;; Some macOS machines run llvm when you type gcc.  (!)
     ;; We can't even check if it's a symlink; it's a binary placed in
     ;; "/usr/bin/gcc".  So check the output and just skip this test if
-    ;; it says "Apple LLVM".
-    (unless (string-match "Apple LLVM" (car semantic-gcc-test-strings))
+    ;; it looks like that's the case.
+    (unless (string-match "Apple \\(LLVM\\|clang\\)\\|Xcode\\.app"
+                          (car semantic-gcc-test-strings))
         (semantic-gcc-test-output-parser))))
 
 ;;; gcc-tests.el ends here
diff --git a/test/lisp/cedet/semantic/format-resources/test-fmt.cpp 
b/test/lisp/cedet/semantic/format-resources/test-fmt.cpp
index ab869c1ce0..39843a2219 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-2021 Free Software Foundation, Inc.
+ * Copyright (C) 2012, 2016, 2019-2022 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 8458a8e651..5fcb8ef3c3 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-2021  Free Software Foundation, Inc.
+;; Copyright (C) 2012-2022 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 149f408af1..f698d865c3 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-2021  Free Software Foundation, Inc.
+;; Copyright (C) 2003-2022 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 6a5f3c85fc..c8bfffb3cf 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-2021  Free Software Foundation, Inc.
+;; Copyright (C) 2003-2022 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 1c6578038c..fbcb0ad4cf 100644
--- a/test/lisp/cedet/srecode-utest-getset.el
+++ b/test/lisp/cedet/srecode-utest-getset.el
@@ -1,6 +1,7 @@
 ;;; srecode/test-getset.el --- Test the getset inserter. -*- lexical-binding:t 
-*-
 
-;; Copyright (C) 2008, 2009, 2011, 2019-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2009, 2011, 2019-2022 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 087dcfd899..1eb91e6053 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 0bc6e10d7a..71c4cd7410 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 5f634a5e4c..292ac4e3b5 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
@@ -57,8 +57,7 @@ It is filled with some text."
       (end-of-line)
       (forward-word -1)
 
-      (setq f (srecode-field "Test"
-                            :name "TEST"
+      (setq f (srecode-field :name "TEST"
                             :start 6
                             :end 8))
 
@@ -99,19 +98,17 @@ It is filled with some text."
           (reg nil)
           (fields
            (list
-            (srecode-field "Test1" :name "TEST-1" :start 5 :end 10)
-            (srecode-field "Test2" :name "TEST-2" :start 15 :end 20)
-            (srecode-field "Test3" :name "TEST-3" :start 25 :end 30)
+            (srecode-field :name "TEST-1" :start 5 :end 10)
+            (srecode-field :name "TEST-2" :start 15 :end 20)
+            (srecode-field :name "TEST-3" :start 25 :end 30)
 
-            (srecode-field "Test4" :name "TEST-4" :start 35 :end 35))
-           ))
+            (srecode-field :name "TEST-4" :start 35 :end 35))))
 
       (when (not (= (length srecode-field-archive) 4))
        (error "Region Test: Found %d fields.  Expected 4"
               (length srecode-field-archive)))
 
-      (setq reg (srecode-template-inserted-region "REG"
-                                                 :start 4
+      (setq reg (srecode-template-inserted-region :start 4
                                                  :end 40))
 
       (srecode-overlaid-activate reg)
@@ -183,10 +180,10 @@ It is filled with some text."
 
     ;; Test variable linkage.
     (let* ((srecode-field-archive nil)
-          (f1 (srecode-field "Test1" :name "TEST" :start 6 :end 8))
-          (f2 (srecode-field "Test2" :name "TEST" :start 28 :end 30))
-          (f3 (srecode-field "Test3" :name "NOTTEST" :start 35 :end 40))
-           (reg (srecode-template-inserted-region "REG" :start 4 :end 40)))
+          (f1 (srecode-field :name "TEST" :start 6 :end 8))
+          (f2 (srecode-field :name "TEST" :start 28 :end 30))
+          (f3 (srecode-field :name "NOTTEST" :start 35 :end 40))
+           (reg (srecode-template-inserted-region :start 4 :end 40)))
       (srecode-overlaid-activate reg)
 
       (when (not (string= (srecode-overlaid-text f1)
diff --git a/test/lisp/char-fold-tests.el b/test/lisp/char-fold-tests.el
index 063c893516..749ec0a8d3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 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 2493476a66..49b632c841 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 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 0bd5c1e9d1..2885aaa914 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/completion-tests.el b/test/lisp/completion-tests.el
index c13fb2e44b..dee6f8d5dd 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 f7d5283437..01a1407dca 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/custom-tests.el b/test/lisp/custom-tests.el
index 769db6ceab..77bb337d6a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2022 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 d3fe78b618..278a59c015 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 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 838fc92e82..97fa0f1e8f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
 
 ;; Author: Stefan Kangas <stefankangas@gmail.com>
 
diff --git a/test/lisp/descr-text-tests.el b/test/lisp/descr-text-tests.el
index 715fafa44c..e5547d4f6e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2014, 2016-2022 Free Software Foundation, Inc.
 
 ;; Author: Michal Nazarewicz <mina86@mina86.com>
 
diff --git a/test/lisp/dired-aux-tests.el b/test/lisp/dired-aux-tests.el
index 374164f1f9..694deaae4c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -64,7 +64,7 @@
 
 (ert-deftest dired-test-bug28834 ()
   "test for https://debbugs.gnu.org/28834 ."
-  (let (from to-cp to-mv)
+  (let (to-cp to-mv)
     ;; `dired-create-destination-dirs' set to 'always.
     (with-dired-bug28834-test
      'always nil
diff --git a/test/lisp/files-resources/insert-directory/test_dir/bar 
b/test/lisp/dired-resources/insert-directory/test_dir/bar
similarity index 100%
rename from test/lisp/files-resources/insert-directory/test_dir/bar
rename to test/lisp/dired-resources/insert-directory/test_dir/bar
diff --git a/test/lisp/files-resources/insert-directory/test_dir/foo 
b/test/lisp/dired-resources/insert-directory/test_dir/foo
similarity index 100%
rename from test/lisp/files-resources/insert-directory/test_dir/foo
rename to test/lisp/dired-resources/insert-directory/test_dir/foo
diff --git a/test/lisp/files-resources/insert-directory/test_dir_other/bar 
b/test/lisp/dired-resources/insert-directory/test_dir_other/bar
similarity index 100%
rename from test/lisp/files-resources/insert-directory/test_dir_other/bar
rename to test/lisp/dired-resources/insert-directory/test_dir_other/bar
diff --git a/test/lisp/files-resources/insert-directory/test_dir_other/foo 
b/test/lisp/dired-resources/insert-directory/test_dir_other/foo
similarity index 100%
rename from test/lisp/files-resources/insert-directory/test_dir_other/foo
rename to test/lisp/dired-resources/insert-directory/test_dir_other/foo
diff --git a/test/lisp/dired-tests.el b/test/lisp/dired-tests.el
index ad1bca923d..0e89325907 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -511,5 +511,92 @@
       (when (file-directory-p testdir)
         (delete-directory testdir t)))))
 
+;; `dired-insert-directory' output tests.
+(let* ((data-dir "insert-directory")
+       (test-dir (file-name-as-directory
+                  (ert-resource-file
+                   (concat data-dir "/test_dir"))))
+       (test-dir-other (file-name-as-directory
+                        (ert-resource-file
+                         (concat data-dir "/test_dir_other"))))
+       (test-files `(,test-dir "foo" "bar")) ;expected files to be found
+       ;; Free space test data for `insert-directory'.
+       ;; Meaning: (path free-space-bytes-to-stub expected-free-space-string)
+       (free-data `((,test-dir 10 "available 10 B")
+                    (,test-dir-other 100 "available 100 B")
+                    (:default 999 "available 999 B"))))
+
+  (defun files-tests--look-up-free-data (path)
+    "Look up free space test data, with a default for unspecified paths."
+    (let ((path (file-name-as-directory path)))
+      (cdr (or (assoc path free-data)
+               (assoc :default free-data)))))
+
+  (defun files-tests--make-file-system-info-stub (&optional static-path)
+    "Return a stub for `file-system-info' using dynamic or static test data.
+If that data should be static, pass STATIC-PATH to choose which
+path's data to use."
+    (lambda (path)
+      (let* ((path (cond (static-path)
+                         ;; file-system-info knows how to handle ".", so we
+                         ;; do the same thing
+                         ((equal "." path) default-directory)
+                         (path)))
+             (return-size
+              ;; It is always defined but this silences the byte-compiler:
+              (when (fboundp 'files-tests--look-up-free-data)
+                (car (files-tests--look-up-free-data path)))))
+        (list return-size return-size return-size))))
+
+  (defun files-tests--insert-directory-output (dir &optional _verbose)
+    "Run `insert-directory' and return its output."
+    (with-current-buffer-window "files-tests--insert-directory" nil nil
+      (let ((dired-free-space 'separate))
+        (dired-insert-directory dir "-l" nil nil t))
+      (buffer-substring-no-properties (point-min) (point-max))))
+
+  (ert-deftest files-tests-insert-directory-shows-files ()
+    "Verify `insert-directory' reports the files in the directory."
+    ;; It is always defined but this silences the byte-compiler:
+    (when (fboundp 'files-tests--insert-directory-output)
+      (let* ((test-dir (car test-files))
+             (files (cdr test-files))
+             (output (files-tests--insert-directory-output test-dir)))
+        (dolist (file files)
+          (should (string-match-p file output))))))
+
+  (defun files-tests--insert-directory-shows-given-free (dir &optional
+                                                             info-func)
+    "Run `insert-directory' and verify it reports the correct available space.
+Stub `file-system-info' to ensure the available space is consistent,
+either with the given stub function or a default one using test data."
+    ;; It is always defined but this silences the byte-compiler:
+    (when (and (fboundp 'files-tests--make-file-system-info-stub)
+               (fboundp 'files-tests--look-up-free-data)
+               (fboundp 'files-tests--insert-directory-output))
+      (cl-letf (((symbol-function 'file-system-info)
+                 (or info-func
+                     (files-tests--make-file-system-info-stub))))
+        (should (string-match-p (cadr
+                                 (files-tests--look-up-free-data dir))
+                                (files-tests--insert-directory-output dir 
t))))))
+
+  (ert-deftest files-tests-insert-directory-shows-free ()
+    "Test that verbose `insert-directory' shows the correct available space."
+    ;; It is always defined but this silences the byte-compiler:
+    (when (and (fboundp 'files-tests--insert-directory-shows-given-free)
+               (fboundp 'files-tests--make-file-system-info-stub))
+      (files-tests--insert-directory-shows-given-free
+       test-dir
+       (files-tests--make-file-system-info-stub test-dir))))
+
+  (ert-deftest files-tests-bug-50630 ()
+    "Verify verbose `insert-directory' shows free space of the target 
directory.
+The current directory at call time should not affect the result (Bug#50630)."
+    ;; It is always defined but this silences the byte-compiler:
+    (when (fboundp 'files-tests--insert-directory-shows-given-free)
+      (let ((default-directory test-dir-other))
+        (files-tests--insert-directory-shows-given-free test-dir)))))
+
 (provide 'dired-tests)
 ;;; dired-tests.el ends here
diff --git a/test/lisp/dired-x-tests.el b/test/lisp/dired-x-tests.el
index fe4b9711d4..cec266b0ef 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -60,5 +60,15 @@
     (should (equal (dired-guess-default '("/tmp/foo.png" "/tmp/foo.txt"))
                    nil))))
 
+(ert-deftest dired-x--string-to-number ()
+  (should (= (dired-x--string-to-number "2.4K") 2457.6))
+  (should (= (dired-x--string-to-number "2400") 2400))
+  (should (= (dired-x--string-to-number "123.4M") 129394278.4))
+  (should (= (dired-x--string-to-number "123.40000M") 129394278.4))
+  (should (= (dired-x--string-to-number "4.134") 4134))
+  (should (= (dired-x--string-to-number "4,134") 4134))
+  (should (= (dired-x--string-to-number "4 134") 4134))
+  (should (= (dired-x--string-to-number "41,52,134") 4152134)))
+
 (provide 'dired-x-tests)
 ;;; dired-x-tests.el ends here
diff --git a/test/lisp/dom-tests.el b/test/lisp/dom-tests.el
index b55982c1a1..cb96f12d19 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 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 974f506a36..b5809ad0b7 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 85727bd091..e10ed04f9d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 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 4b9a559ac7..6f351170f1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
 
 ;; Author: Simen Heggestøyl <simenheg@gmail.com>
 ;; Keywords:
@@ -28,35 +28,200 @@
 
 (require 'elide-head)
 (require 'ert)
+(require 'ert-x)
 
-(ert-deftest elide-head-tests-elide-head ()
+(ert-deftest elide-head-tests-elide-head-mode ()
   (let ((elide-head-headers-to-hide '(("START" . "END"))))
     (with-temp-buffer
       (insert "foo\nSTART\nHIDDEN\nEND\nbar")
-      (elide-head)
+      (elide-head-mode 1)
       (let ((o (car (overlays-at 14))))
         (should (= (overlay-start o) 10))
         (should (= (overlay-end o) 21))
         (should (overlay-get o 'invisible))
         (should (overlay-get o 'evaporate))))))
 
-(ert-deftest elide-head-tests-elide-head-with-prefix-arg ()
+(ert-deftest elide-head-tests-elide-head-mode/enable-disable ()
   (let ((elide-head-headers-to-hide '(("START" . "END"))))
     (with-temp-buffer
       (insert "foo\nSTART\nHIDDEN\nEND\nbar")
-      (elide-head)
+      (elide-head-mode 1)
       (should (overlays-at 14))
-      (elide-head t)
+      (elide-head-mode -1)
       (should-not (overlays-at 14)))))
 
-(ert-deftest elide-head-tests-show ()
-  (let ((elide-head-headers-to-hide '(("START" . "END"))))
-    (with-temp-buffer
-      (insert "foo\nSTART\nHIDDEN\nEND\nbar")
-      (elide-head)
-      (should (overlays-at 14))
-      (elide-head-show)
-      (should-not (overlays-at 14)))))
+(ert-deftest elide-head-tests-elide-head-mode/normal-mode ()
+  (ert-with-temp-file fil
+    (with-temp-file fil
+      (insert "foo\nSTART\nHIDDEN\nEND\nbar"))
+    (let ((elide-head-headers-to-hide '(("START" . "END")))
+          (buf (find-file-noselect fil)))
+      (save-excursion
+        (unwind-protect
+            (progn
+              (set-buffer buf)
+              (elide-head-mode 1)
+              (should (= 1 (length (overlays-in (point-min) (point-max)))))
+              (normal-mode)
+              (should (= 0 (length (overlays-in (point-min) (point-max))))))
+          (when buf (kill-buffer buf)))))))
+
+(ert-deftest elide-head-tests-elide-head-mode/revert-buffer ()
+  (ert-with-temp-file fil
+    (with-temp-file fil
+      (insert "foo\nSTART\nHIDDEN\nEND\nbar"))
+    (let ((elide-head-headers-to-hide '(("START" . "END")))
+          (buf (find-file-noselect fil)))
+      (save-excursion
+        (unwind-protect
+            (progn
+              (set-buffer buf)
+              (elide-head-mode 1)
+              (should (= 1 (length (overlays-in (point-min) (point-max)))))
+              (revert-buffer nil t)
+              (elide-head-mode 1)
+              (should (= 1 (length (overlays-in (point-min) (point-max))))))
+          (when buf (kill-buffer buf)))))))
+
+
+(defmacro elide-head--add-test (name text search-str)
+  `(ert-deftest ,(intern (format "elide-head--test-headers-to-hide/%s" name)) 
()
+     (with-temp-buffer
+       (insert ,text)
+       (elide-head-mode 1)
+       (goto-char (point-min))
+       (re-search-forward ,search-str)
+       (let ((o (car (overlays-at (match-beginning 0)))))
+         (should (overlayp o))
+         (should (overlay-get o 'invisible))
+         (should (overlay-get o 'evaporate))))))
+
+
+;;; GPLv3
+
+;; from Emacs
+(elide-head--add-test gpl3-1 "\
+;; 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/>.
+" "GNU Emacs is distributed in the hope that")
+
+;; from libtorrent
+(elide-head--add-test gpl3-2 "\
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+" "This library is distributed in the hope that")
+
+;; from notmuch
+(elide-head--add-test gpl3-3 "\
+ * 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/ .
+" "This program is distributed in the hope that")
+
+;; from fribok
+(elide-head--add-test gpl3-4 "\
+/***************************************************************************
+ *   Copyright (C) 2007, 2009 by J. Random Hacker <jrh@example.org>        *
+ *                                                                         *
+ *   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 <http://www.gnu.org/licenses/>  *.
+ *                                                                         *
+ ***************************************************************************/
+" "This program is distributed in the hope that")
+
+
+;;; GPLv2
+
+;; from jackmeter
+(elide-head--add-test gpl2-1 "\
+        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 2
+        of the License, or (at your option) any later version.
+
+        This program is distributed in the hope that it will be useful,
+        but WITHOUT ANY WARRANTY; without even the implied warranty of
+        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+        GNU General Public License for more details.
+
+        You should have received a copy of the GNU General Public License
+        along with this program; if not, write to the Free Software
+        Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, 
USA.
+" "This program is distributed in the hope that")
+
+
+;;; Obsolete
+
+(with-suppressed-warnings ((obsolete elide-head)
+                           (obsolete elide-head-show))
+  (ert-deftest elide-head-tests-elide-head ()
+    (let ((elide-head-headers-to-hide '(("START" . "END"))))
+      (with-temp-buffer
+        (insert "foo\nSTART\nHIDDEN\nEND\nbar")
+        (elide-head)
+        (let ((o (car (overlays-at 14))))
+          (should (= (overlay-start o) 10))
+          (should (= (overlay-end o) 21))
+          (should (overlay-get o 'invisible))
+          (should (overlay-get o 'evaporate))))))
+
+  (ert-deftest elide-head-tests-elide-head-with-prefix-arg ()
+    (let ((elide-head-headers-to-hide '(("START" . "END"))))
+      (with-temp-buffer
+        (insert "foo\nSTART\nHIDDEN\nEND\nbar")
+        (elide-head)
+        (should (overlays-at 14))
+        (elide-head t)
+        (should-not (overlays-at 14)))))
+
+  (ert-deftest elide-head-tests-show ()
+    (let ((elide-head-headers-to-hide '(("START" . "END"))))
+      (with-temp-buffer
+        (insert "foo\nSTART\nHIDDEN\nEND\nbar")
+        (elide-head)
+        (should (overlays-at 14))
+        (elide-head-show)
+        (should-not (overlays-at 14))))))
 
 (provide 'elide-head-tests)
 ;;; elide-head-tests.el ends here
diff --git a/test/lisp/emacs-lisp/backquote-tests.el 
b/test/lisp/emacs-lisp/backquote-tests.el
index a196d0b886..2ba61726f0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 e35a7a729b..b08695a22b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2022 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 71bb52f82f..b3c4949acc 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 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 911a5f0c7b..7722cf6c02 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 816f14a18d..abd33ab8e5 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
 
 ;; Author: Shigeru Fukaya <shigeru.fukaya@gmail.com>
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
@@ -643,6 +643,55 @@ inner loops respectively."
 
     (cond)
     (mapcar (lambda (x) (cond ((= x 0)))) '(0 1))
+
+    ;; These expressions give different results in lexbind and dynbind modes,
+    ;; but in each the compiler and interpreter should agree!
+    ;; (They look much the same but come in pairs exercising both the
+    ;; `let' and `let*' paths.)
+    (let ((f (lambda (x)
+               (lambda ()
+                 (let ((g (lambda () x)))
+                   (let ((x 'a))
+                     (list x (funcall g))))))))
+      (funcall (funcall f 'b)))
+    (let ((f (lambda (x)
+               (lambda ()
+                 (let ((g (lambda () x)))
+                   (let* ((x 'a))
+                     (list x (funcall g))))))))
+      (funcall (funcall f 'b)))
+    (let ((f (lambda (x)
+               (lambda ()
+                 (let ((g (lambda () x)))
+                   (setq x (list x x))
+                   (let ((x 'a))
+                     (list x (funcall g))))))))
+      (funcall (funcall f 'b)))
+    (let ((f (lambda (x)
+               (lambda ()
+                 (let ((g (lambda () x)))
+                   (setq x (list x x))
+                   (let* ((x 'a))
+                     (list x (funcall g))))))))
+      (funcall (funcall f 'b)))
+    (let ((f (lambda (x)
+               (let ((g (lambda () x))
+                     (h (lambda () (setq x (list x x)))))
+                 (let ((x 'a))
+                   (list x (funcall g) (funcall h)))))))
+      (funcall (funcall f 'b)))
+    (let ((f (lambda (x)
+               (let ((g (lambda () x))
+                     (h (lambda () (setq x (list x x)))))
+                 (let* ((x 'a))
+                   (list x (funcall g) (funcall h)))))))
+      (funcall (funcall f 'b)))
+
+    ;; Test constant-propagation of access to captured variables.
+    (let* ((x 2)
+           (f (lambda ()
+                (let ((y x)) (list y 3 y)))))
+      (funcall f))
     )
   "List of expressions for cross-testing interpreted and compiled code.")
 
@@ -808,8 +857,7 @@ byte-compiled.  Run with dynamic binding."
        (byte-compile-file ,(ert-resource-file file))
        (ert-info ((buffer-string) :prefix "buffer: ")
          (,(if reverse 'should-not 'should)
-          (re-search-forward ,(string-replace " " "[ \n]+" re-warning)
-                             nil t))))))
+          (re-search-forward ,re-warning nil t))))))
 
 (bytecomp--define-warning-file-test "error-lexical-var-with-add-hook.el"
                             "add-hook.*lexical var")
@@ -937,7 +985,7 @@ byte-compiled.  Run with dynamic binding."
 
 (bytecomp--define-warning-file-test
  "warn-wide-docstring-defun.el"
- "wider than .* characters")
+ "Warning: docstring wider than .* characters")
 
 (bytecomp--define-warning-file-test
  "warn-wide-docstring-defvar.el"
diff --git a/test/lisp/emacs-lisp/cconv-tests.el 
b/test/lisp/emacs-lisp/cconv-tests.el
index 4290571735..0668e44ba5 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -23,6 +23,7 @@
 
 (require 'ert)
 (require 'cl-lib)
+(require 'generator)
 
 (ert-deftest cconv-tests-lambda-:documentation ()
   "Docstring for lambda can be specified with :documentation."
@@ -83,9 +84,6 @@
   (iter-yield 'cl-iter-defun-result))
 (ert-deftest cconv-tests-cl-iter-defun-:documentation ()
   "Docstring for cl-iter-defun can be specified with :documentation."
-  ;; FIXME: See Bug#28557.
-  :tags '(:unstable)
-  :expected-result :failed
   (should (string= (documentation 'cconv-tests-cl-iter-defun)
                    "cl-iter-defun documentation"))
   (should (eq (iter-next (cconv-tests-cl-iter-defun))
@@ -96,17 +94,12 @@
   (iter-yield 'iter-defun-result))
 (ert-deftest cconv-tests-iter-defun-:documentation ()
   "Docstring for iter-defun can be specified with :documentation."
-  ;; FIXME: See Bug#28557.
-  :tags '(:unstable)
-  :expected-result :failed
   (should (string= (documentation 'cconv-tests-iter-defun)
                    "iter-defun documentation"))
   (should (eq (iter-next (cconv-tests-iter-defun)) 'iter-defun-result)))
 
 (ert-deftest cconv-tests-iter-lambda-:documentation ()
   "Docstring for iter-lambda can be specified with :documentation."
-  ;; FIXME: See Bug#28557.
-  :expected-result :failed
   (let ((iter-fun
          (iter-lambda ()
            (:documentation (concat "iter-lambda" " documentation"))
@@ -116,13 +109,11 @@
 
 (ert-deftest cconv-tests-cl-function-:documentation ()
   "Docstring for cl-function can be specified with :documentation."
-  ;; FIXME: See Bug#28557.
-  :expected-result :failed
   (let ((fun (cl-function (lambda (&key arg)
                             (:documentation (concat "cl-function"
                                                     " documentation"))
                             (list arg 'cl-function-result)))))
-    (should (string= (documentation fun) "cl-function documentation"))
+    (should (string-match "\\`cl-function documentation$" (documentation fun)))
     (should (equal (funcall fun :arg t) '(t cl-function-result)))))
 
 (ert-deftest cconv-tests-function-:documentation ()
@@ -142,8 +133,6 @@
   (+ 1 n))
 (ert-deftest cconv-tests-cl-defgeneric-:documentation ()
   "Docstring for cl-defgeneric can be specified with :documentation."
-  ;; FIXME: See Bug#28557.
-  :expected-result :failed
   (let ((descr (describe-function 'cconv-tests-cl-defgeneric)))
     (set-text-properties 0 (length descr) nil descr)
     (should (string-match-p "cl-defgeneric documentation" descr))
@@ -205,5 +194,157 @@
            nil 99)
           42)))
 
+(defun cconv-tests--intern-all (x)
+  "Intern all symbols in X."
+  (cond ((symbolp x) (intern (symbol-name x)))
+        ((consp x) (cons (cconv-tests--intern-all (car x))
+                         (cconv-tests--intern-all (cdr x))))
+        ;; Assume we don't need to deal with vectors etc.
+        (t x)))
+
+(ert-deftest cconv-closure-convert-remap-var ()
+  ;; Verify that we correctly remap shadowed lambda-lifted variables.
+
+  ;; We intern all symbols for ease of comparison; this works because
+  ;; the `cconv-closure-convert' result should contain no pair of
+  ;; distinct symbols having the same name.
+
+  ;; Sanity check: captured variable, no lambda-lifting or shadowing:
+  (should (equal (cconv-tests--intern-all
+           (cconv-closure-convert
+            '#'(lambda (x)
+                 #'(lambda () x))))
+           '#'(lambda (x)
+                (internal-make-closure
+                 nil (x) nil
+                 (internal-get-closed-var 0)))))
+
+  ;; Basic case:
+  (should (equal (cconv-tests--intern-all
+                  (cconv-closure-convert
+                   '#'(lambda (x)
+                        (let ((f #'(lambda () x)))
+                          (let ((x 'b))
+                            (list x (funcall f)))))))
+                 '#'(lambda (x)
+                      (let ((f #'(lambda (x) x)))
+                        (let ((x 'b)
+                              (closed-x x))
+                          (list x (funcall f closed-x)))))))
+  (should (equal (cconv-tests--intern-all
+                  (cconv-closure-convert
+                   '#'(lambda (x)
+                        (let ((f #'(lambda () x)))
+                          (let* ((x 'b))
+                            (list x (funcall f)))))))
+                 '#'(lambda (x)
+                      (let ((f #'(lambda (x) x)))
+                        (let* ((closed-x x)
+                               (x 'b))
+                          (list x (funcall f closed-x)))))))
+
+  ;; With the lambda-lifted shadowed variable also being captured:
+  (should (equal
+           (cconv-tests--intern-all
+            (cconv-closure-convert
+             '#'(lambda (x)
+                  #'(lambda ()
+                      (let ((f #'(lambda () x)))
+                        (let ((x 'a))
+                          (list x (funcall f))))))))
+           '#'(lambda (x)
+                (internal-make-closure
+                 nil (x) nil
+                 (let ((f #'(lambda (x) x)))
+                   (let ((x 'a)
+                         (closed-x (internal-get-closed-var 0)))
+                     (list x (funcall f closed-x))))))))
+  (should (equal
+           (cconv-tests--intern-all
+            (cconv-closure-convert
+             '#'(lambda (x)
+                  #'(lambda ()
+                      (let ((f #'(lambda () x)))
+                        (let* ((x 'a))
+                          (list x (funcall f))))))))
+           '#'(lambda (x)
+                (internal-make-closure
+                 nil (x) nil
+                 (let ((f #'(lambda (x) x)))
+                   (let* ((closed-x (internal-get-closed-var 0))
+                          (x 'a))
+                     (list x (funcall f closed-x))))))))
+  ;; With lambda-lifted shadowed variable also being mutably captured:
+  (should (equal
+           (cconv-tests--intern-all
+            (cconv-closure-convert
+             '#'(lambda (x)
+                  #'(lambda ()
+                      (let ((f #'(lambda () x)))
+                        (setq x x)
+                        (let ((x 'a))
+                          (list x (funcall f))))))))
+           '#'(lambda (x)
+                (let ((x (list x)))
+                  (internal-make-closure
+                   nil (x) nil
+                   (let ((f #'(lambda (x) (car-safe x))))
+                     (setcar (internal-get-closed-var 0)
+                             (car-safe (internal-get-closed-var 0)))
+                     (let ((x 'a)
+                           (closed-x (internal-get-closed-var 0)))
+                       (list x (funcall f closed-x)))))))))
+  (should (equal
+           (cconv-tests--intern-all
+            (cconv-closure-convert
+             '#'(lambda (x)
+                  #'(lambda ()
+                      (let ((f #'(lambda () x)))
+                        (setq x x)
+                        (let* ((x 'a))
+                          (list x (funcall f))))))))
+           '#'(lambda (x)
+                (let ((x (list x)))
+                  (internal-make-closure
+                   nil (x) nil
+                   (let ((f #'(lambda (x) (car-safe x))))
+                     (setcar (internal-get-closed-var 0)
+                             (car-safe (internal-get-closed-var 0)))
+                     (let* ((closed-x (internal-get-closed-var 0))
+                            (x 'a))
+                       (list x (funcall f closed-x)))))))))
+  ;; Lambda-lifted variable that isn't actually captured where it is shadowed:
+  (should (equal
+           (cconv-tests--intern-all
+            (cconv-closure-convert
+             '#'(lambda (x)
+                  (let ((g #'(lambda () x))
+                        (h #'(lambda () (setq x x))))
+                    (let ((x 'b))
+                      (list x (funcall g) (funcall h)))))))
+           '#'(lambda (x)
+                (let ((x (list x)))
+                  (let ((g #'(lambda (x) (car-safe x)))
+                        (h #'(lambda (x) (setcar x (car-safe x)))))
+                    (let ((x 'b)
+                          (closed-x x))
+                      (list x (funcall g closed-x) (funcall h closed-x))))))))
+  (should (equal
+           (cconv-tests--intern-all
+            (cconv-closure-convert
+             '#'(lambda (x)
+                  (let ((g #'(lambda () x))
+                        (h #'(lambda () (setq x x))))
+                    (let* ((x 'b))
+                      (list x (funcall g) (funcall h)))))))
+           '#'(lambda (x)
+                (let ((x (list x)))
+                  (let ((g #'(lambda (x) (car-safe x)))
+                        (h #'(lambda (x) (setcar x (car-safe x)))))
+                    (let* ((closed-x x)
+                           (x 'b))
+                      (list x (funcall g closed-x) (funcall h closed-x))))))))
+  )
+
 (provide 'cconv-tests)
 ;;; cconv-tests.el ends here
diff --git a/test/lisp/emacs-lisp/check-declare-tests.el 
b/test/lisp/emacs-lisp/check-declare-tests.el
index 5c9d847e34..59dfc10163 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 ef49e71599..289476f024 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
 
 ;; Author: Philipp Stephani <phst@google.com>
 
diff --git a/test/lisp/emacs-lisp/cl-extra-tests.el 
b/test/lisp/emacs-lisp/cl-extra-tests.el
index 91f0a1e201..801885c0d4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 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 dd7511e9af..2ec01b2b5d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 
@@ -200,9 +200,14 @@
   (fmakunbound 'cl--generic-1)
   (cl-defgeneric cl--generic-1 (x y))
   (cl-defmethod cl--generic-1 ((x t) y)
-    (list x y (cl-next-method-p)))
+    (list x y
+          (with-suppressed-warnings ((obsolete cl-next-method-p))
+            (cl-next-method-p))))
   (cl-defmethod cl--generic-1 ((_x (eql 4)) _y)
-    (cl-list* "quatre" (cl-next-method-p) (cl-call-next-method)))
+    (cl-list* "quatre"
+              (with-suppressed-warnings ((obsolete cl-next-method-p))
+                (cl-next-method-p))
+              (cl-call-next-method)))
   (should (equal (cl--generic-1 4 5) '("quatre" t 4 5 nil))))
 
 (ert-deftest cl-generic-test-12-context ()
diff --git a/test/lisp/emacs-lisp/cl-lib-tests.el 
b/test/lisp/emacs-lisp/cl-lib-tests.el
index 854e371b32..b19494af74 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -551,4 +551,9 @@
     (should cl-old-struct-compat-mode)
     (cl-old-struct-compat-mode (if saved 1 -1))))
 
+(ert-deftest cl-constantly ()
+  (should (equal (mapcar (cl-constantly 3) '(a b c d))
+                 '(3 3 3 3))))
+
+
 ;;; cl-lib-tests.el ends here
diff --git a/test/lisp/emacs-lisp/cl-macs-tests.el 
b/test/lisp/emacs-lisp/cl-macs-tests.el
index be2c0fa02b..008ec0de4a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -666,11 +666,32 @@ collection clause."
   (should (pcase (macroexpand
                   '(cl-labels ((len (xs n) (if xs (len (cdr xs) (1+ n)) n)))
                      #'len))
-            (`(function (lambda (,_ ,_) . ,_)) t))))
+            (`(function (lambda (,_ ,_) . ,_)) t)))
+
+  ;; Verify that there is no tail position inside dynamic variable bindings.
+  (defvar dyn-var)
+  (let ((dyn-var 'a))
+    (cl-labels ((f (x) (if x
+                           dyn-var
+                         (let ((dyn-var 'b))
+                           (f dyn-var)))))
+      (should (equal (f nil) 'b))))
+
+  ;; Control: same as above but with lexical binding.
+  (let ((lex-var 'a))
+    (cl-labels ((f (x) (if x
+                           lex-var
+                         (let ((lex-var 'b))
+                           (f lex-var)))))
+      (should (equal (f nil) 'a)))))
 
 (ert-deftest cl-macs--progv ()
-  (should (= (cl-progv '(test test) '(1 2) test) 2))
-  (should (equal (cl-progv '(test1 test2) '(1 2) (list test1 test2))
+  (defvar cl-macs--test)
+  (defvar cl-macs--test1)
+  (defvar cl-macs--test2)
+  (should (= (cl-progv '(cl-macs--test cl-macs--test) '(1 2) cl-macs--test) 2))
+  (should (equal (cl-progv '(cl-macs--test1 cl-macs--test2) '(1 2)
+                   (list cl-macs--test1 cl-macs--test2))
                  '(1 2))))
 
 ;;; cl-macs-tests.el ends here
diff --git a/test/lisp/emacs-lisp/cl-preloaded-tests.el 
b/test/lisp/emacs-lisp/cl-preloaded-tests.el
index 97cb204f77..43cd7b6bff 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 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 199795106a..57fe52a948 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 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 d0fad8907d..f42ae69873 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 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 59e1b6982e..ba7ab6331e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
 
 ;; Author: Andrea Corallo <akrl@sdf.org>
 
diff --git a/test/lisp/emacs-lisp/copyright-tests.el 
b/test/lisp/emacs-lisp/copyright-tests.el
index 6bb6e350d1..dc82974a99 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/emacs-lisp/derived-tests.el 
b/test/lisp/emacs-lisp/derived-tests.el
index 9c8e6c33b4..d867a18183 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -24,13 +24,13 @@
 (define-derived-mode derived-tests--parent-mode prog-mode "P"
   :after-hook
   (let ((f (let ((x "S")) (lambda () x))))
-    (insert (format "AFP=%s " (let ((x "D")) (funcall f)))))
+    (insert (format "AFP=%s " (let ((x "D")) x (funcall f)))))
   (insert "PB "))
 
 (define-derived-mode derived-tests--child-mode derived-tests--parent-mode "C"
   :after-hook
   (let ((f (let ((x "S")) (lambda () x))))
-    (insert (format "AFC=%s " (let ((x "D")) (funcall f)))))
+    (insert (format "AFC=%s " (let ((x "D")) x (funcall f)))))
   (insert "CB "))
 
 (ert-deftest derived-tests-after-hook-lexical ()
diff --git a/test/lisp/emacs-lisp/easy-mmode-tests.el 
b/test/lisp/emacs-lisp/easy-mmode-tests.el
index 77eaed6257..0a3bbb189b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 9257f167d6..42d06889ea 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 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 9285b2c945..d238bffdaa 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
 
 ;; Author: Gemini Lasswell
 
@@ -53,22 +53,20 @@ Since `should' failures which happen inside 
`post-command-hook' will
 be trapped by the command loop, this preserves them until we get
 back to the top level.")
 
-(defvar edebug-tests-keymap
-  (let ((map (make-sparse-keymap)))
-    (define-key map "@"     'edebug-tests-call-instrumented-func)
-    (define-key map "C-u"   'universal-argument)
-    (define-key map "C-p"   'previous-line)
-    (define-key map "C-n"   'next-line)
-    (define-key map "C-b"   'backward-char)
-    (define-key map "C-a"   'move-beginning-of-line)
-    (define-key map "C-e"   'move-end-of-line)
-    (define-key map "C-k"   'kill-line)
-    (define-key map "M-x"   'execute-extended-command)
-    (define-key map "C-M-x" 'eval-defun)
-    (define-key map "C-x X b" 'edebug-set-breakpoint)
-    (define-key map "C-x X w" 'edebug-where)
-    map)
-  "Keys used by the keyboard macros in Edebug's tests.")
+(defvar-keymap edebug-tests-keymap
+  :doc "Keys used by the keyboard macros in Edebug's tests."
+  "@"       'edebug-tests-call-instrumented-func
+  "C-u"     'universal-argument
+  "C-p"     'previous-line
+  "C-n"     'next-line
+  "C-b"     'backward-char
+  "C-a"     'move-beginning-of-line
+  "C-e"     'move-end-of-line
+  "C-k"     'kill-line
+  "M-x"     'execute-extended-command
+  "C-M-x"   'eval-defun
+  "C-x X b" 'edebug-set-breakpoint
+  "C-x X w" 'edebug-where)
 
 ;;; Macros for defining tests:
 
@@ -860,7 +858,8 @@ test and possibly others should be updated."
    (let ((inhibit-read-only t))
      (delete-region (point-min) (point-max))
      (insert  "`1"))
-   (edebug-eval-defun nil)
+   (with-suppressed-warnings ((obsolete edebug-eval-defun))
+     (edebug-eval-defun nil))
    ;; `eval-defun' outputs its message to the echo area in a rather
    ;; funny way, so the "1" and the " (#o1, #x1, ?\C-a)" end up placed
    ;; there in separate pieces (via `print' rather than via `message').
@@ -870,7 +869,8 @@ test and possibly others should be updated."
 
    (setq edebug-initial-mode 'go)
    ;; In Bug#23651 Edebug would hang reading `1.
-   (edebug-eval-defun t)))
+   (with-suppressed-warnings ((obsolete edebug-eval-defun))
+     (edebug-eval-defun t))))
 
 (ert-deftest edebug-tests-trivial-comma ()
   "Edebug can read a trivial comma expression (Bug#23651)."
@@ -879,7 +879,8 @@ test and possibly others should be updated."
    (delete-region (point-min) (point-max))
    (insert  ",1")
    (read-only-mode)
-   (should-error (edebug-eval-defun t))))
+   (with-suppressed-warnings ((obsolete edebug-eval-defun))
+     (should-error (edebug-eval-defun t)))))
 
 (ert-deftest edebug-tests-circular-read-syntax ()
   "Edebug can instrument code using circular read object syntax (Bug#23660)."
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 d1da066dc4..af19c122b9 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-2021 Free Software Foundation,
+;; Copyright (C) 2005, 2008, 2010, 2013-2022 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
@@ -55,6 +55,9 @@
 ;;; Code:
 
 (require 'eieio)
+;; FIXME: See Bug#52971.
+(with-no-warnings
+  (require 'eieio-compat))
 (require 'ert)
 
 (defvar eieio-test-method-order-list nil
@@ -85,37 +88,40 @@
 (defclass eitest-B-base2 () ())
 (defclass eitest-B (eitest-B-base1 eitest-B-base2) ())
 
-(defmethod eitest-F :BEFORE ((_p eitest-B-base1))
-  (eieio-test-method-store :BEFORE 'eitest-B-base1))
+(with-suppressed-warnings ((obsolete defmethod)
+                           (obsolete defgeneric)
+                           (obsolete call-next-method)
+                           (obsolete next-method-p))
+  (defmethod eitest-F :BEFORE ((_p eitest-B-base1))
+    (eieio-test-method-store :BEFORE 'eitest-B-base1))
 
-(defmethod eitest-F :BEFORE ((_p eitest-B-base2))
-  (eieio-test-method-store :BEFORE 'eitest-B-base2))
+  (defmethod eitest-F :BEFORE ((_p eitest-B-base2))
+    (eieio-test-method-store :BEFORE 'eitest-B-base2))
 
-(defmethod eitest-F :BEFORE ((_p eitest-B))
-  (eieio-test-method-store :BEFORE 'eitest-B))
+  (defmethod eitest-F :BEFORE ((_p eitest-B))
+    (eieio-test-method-store :BEFORE 'eitest-B))
 
-(defmethod eitest-F ((_p eitest-B))
-  (eieio-test-method-store :PRIMARY 'eitest-B)
-  (call-next-method))
-
-(defmethod eitest-F ((_p eitest-B-base1))
-  (eieio-test-method-store :PRIMARY 'eitest-B-base1)
-  (call-next-method))
+  (defmethod eitest-F ((_p eitest-B))
+    (eieio-test-method-store :PRIMARY 'eitest-B)
+    (call-next-method))
 
-(defmethod eitest-F ((_p eitest-B-base2))
-  (eieio-test-method-store :PRIMARY 'eitest-B-base2)
-  (when (next-method-p)
+  (defmethod eitest-F ((_p eitest-B-base1))
+    (eieio-test-method-store :PRIMARY 'eitest-B-base1)
     (call-next-method))
-  )
 
-(defmethod eitest-F :AFTER ((_p eitest-B-base1))
-  (eieio-test-method-store :AFTER 'eitest-B-base1))
+  (defmethod eitest-F ((_p eitest-B-base2))
+    (eieio-test-method-store :PRIMARY 'eitest-B-base2)
+    (when (next-method-p)
+      (call-next-method)))
 
-(defmethod eitest-F :AFTER ((_p eitest-B-base2))
-  (eieio-test-method-store :AFTER 'eitest-B-base2))
+  (defmethod eitest-F :AFTER ((_p eitest-B-base1))
+    (eieio-test-method-store :AFTER 'eitest-B-base1))
 
-(defmethod eitest-F :AFTER ((_p eitest-B))
-  (eieio-test-method-store :AFTER 'eitest-B))
+  (defmethod eitest-F :AFTER ((_p eitest-B-base2))
+    (eieio-test-method-store :AFTER 'eitest-B-base2))
+
+  (defmethod eitest-F :AFTER ((_p eitest-B))
+    (eieio-test-method-store :AFTER 'eitest-B)))
 
 (ert-deftest eieio-test-method-order-list-3 ()
   (let ((eieio-test-method-order-list nil)
@@ -138,9 +144,11 @@
 
 ;;; Test static invocation
 ;;
-(defmethod eitest-H :STATIC ((_class eitest-A))
-  "No need to do work in here."
-  'moose)
+(with-suppressed-warnings ((obsolete defmethod)
+                           (obsolete defgeneric))
+  (defmethod eitest-H :STATIC ((_class eitest-A))
+    "No need to do work in here."
+    'moose))
 
 (ert-deftest eieio-test-method-order-list-4 ()
   ;; Both of these situations should succeed.
@@ -149,17 +157,19 @@
 
 ;;; Return value from :PRIMARY
 ;;
-(defmethod eitest-I :BEFORE ((_a eitest-A))
-  (eieio-test-method-store :BEFORE 'eitest-A)
-  ":before")
+(with-suppressed-warnings ((obsolete defmethod)
+                           (obsolete defgeneric))
+  (defmethod eitest-I :BEFORE ((_a eitest-A))
+    (eieio-test-method-store :BEFORE 'eitest-A)
+    ":before")
 
-(defmethod eitest-I :PRIMARY ((_a eitest-A))
-  (eieio-test-method-store :PRIMARY 'eitest-A)
-  ":primary")
+  (defmethod eitest-I :PRIMARY ((_a eitest-A))
+    (eieio-test-method-store :PRIMARY 'eitest-A)
+    ":primary")
 
-(defmethod eitest-I :AFTER ((_a eitest-A))
-  (eieio-test-method-store :AFTER 'eitest-A)
-  ":after")
+  (defmethod eitest-I :AFTER ((_a eitest-A))
+    (eieio-test-method-store :AFTER 'eitest-A)
+    ":after"))
 
 (ert-deftest eieio-test-method-order-list-5 ()
   (let ((eieio-test-method-order-list nil)
@@ -175,16 +185,18 @@
 (defclass C-base2 () ())
 (defclass C (C-base1 C-base2) ())
 
-;; Just use the obsolete name once, to make sure it also works.
-(defmethod constructor :STATIC ((_p C-base1) &rest _args)
-  (eieio-test-method-store :STATIC 'C-base1)
-  (if (next-method-p) (call-next-method))
-  )
+(with-suppressed-warnings ((obsolete defmethod)
+                           (obsolete defgeneric)
+                           (obsolete next-method-p)
+                           (obsolete call-next-method))
+  ;; Just use the obsolete name once, to make sure it also works.
+  (defmethod constructor :STATIC ((_p C-base1) &rest _args)
+    (eieio-test-method-store :STATIC 'C-base1)
+    (if (next-method-p) (call-next-method)))
 
-(defmethod make-instance :STATIC ((_p C-base2) &rest _args)
-  (eieio-test-method-store :STATIC 'C-base2)
-  (if (next-method-p) (call-next-method))
-  )
+  (defmethod make-instance :STATIC ((_p C-base2) &rest _args)
+    (eieio-test-method-store :STATIC 'C-base2)
+    (if (next-method-p) (call-next-method))))
 
 (cl-defmethod make-instance ((_p (subclass C)) &rest _args)
   (eieio-test-method-store :STATIC 'C)
@@ -215,29 +227,32 @@
 (defclass D-base2 (D-base0) () :method-invocation-order :depth-first)
 (defclass D (D-base1 D-base2) () :method-invocation-order :depth-first)
 
-(defmethod eitest-F ((_p D))
-  "D"
-  (eieio-test-method-store :PRIMARY 'D)
-  (call-next-method))
-
-(defmethod eitest-F ((_p D-base0))
-  "D-base0"
-  (eieio-test-method-store :PRIMARY 'D-base0)
-  ;; This should have no next
-  ;; (when (next-method-p) (call-next-method))
-  )
+(with-suppressed-warnings ((obsolete defmethod)
+                           (obsolete defgeneric)
+                           (obsolete call-next-method)
+                           (obsolete next-method-p))
+  (defmethod eitest-F ((_p D))
+    "D"
+    (eieio-test-method-store :PRIMARY 'D)
+    (call-next-method))
 
-(defmethod eitest-F ((_p D-base1))
-  "D-base1"
-  (eieio-test-method-store :PRIMARY 'D-base1)
-  (call-next-method))
+  (defmethod eitest-F ((_p D-base0))
+    "D-base0"
+    (eieio-test-method-store :PRIMARY 'D-base0)
+    ;; This should have no next
+    ;; (when (next-method-p) (call-next-method))
+    )
 
-(defmethod eitest-F ((_p D-base2))
-  "D-base2"
-  (eieio-test-method-store :PRIMARY 'D-base2)
-  (when (next-method-p)
+  (defmethod eitest-F ((_p D-base1))
+    "D-base1"
+    (eieio-test-method-store :PRIMARY 'D-base1)
     (call-next-method))
-  )
+
+  (defmethod eitest-F ((_p D-base2))
+    "D-base2"
+    (eieio-test-method-store :PRIMARY 'D-base2)
+    (when (next-method-p)
+      (call-next-method))))
 
 (ert-deftest eieio-test-method-order-list-7 ()
   (let ((eieio-test-method-order-list nil)
@@ -258,25 +273,28 @@
 (defclass E-base2 (E-base0) () :method-invocation-order :breadth-first)
 (defclass E (E-base1 E-base2) () :method-invocation-order :breadth-first)
 
-(defmethod eitest-F ((_p E))
-  (eieio-test-method-store :PRIMARY 'E)
-  (call-next-method))
-
-(defmethod eitest-F ((_p E-base0))
-  (eieio-test-method-store :PRIMARY 'E-base0)
-  ;; This should have no next
-  ;; (when (next-method-p) (call-next-method))
-  )
+(with-suppressed-warnings ((obsolete defmethod)
+                           (obsolete defgeneric)
+                           (obsolete next-method-p)
+                           (obsolete call-next-method))
+  (defmethod eitest-F ((_p E))
+    (eieio-test-method-store :PRIMARY 'E)
+    (call-next-method))
 
-(defmethod eitest-F ((_p E-base1))
-  (eieio-test-method-store :PRIMARY 'E-base1)
-  (call-next-method))
+  (defmethod eitest-F ((_p E-base0))
+    (eieio-test-method-store :PRIMARY 'E-base0)
+    ;; This should have no next
+    ;; (when (next-method-p) (call-next-method))
+    )
 
-(defmethod eitest-F ((_p E-base2))
-  (eieio-test-method-store :PRIMARY 'E-base2)
-  (when (next-method-p)
+  (defmethod eitest-F ((_p E-base1))
+    (eieio-test-method-store :PRIMARY 'E-base1)
     (call-next-method))
-  )
+
+  (defmethod eitest-F ((_p E-base2))
+    (eieio-test-method-store :PRIMARY 'E-base2)
+    (when (next-method-p)
+      (call-next-method))))
 
 (ert-deftest eieio-test-method-order-list-8 ()
   (let ((eieio-test-method-order-list nil)
@@ -295,24 +313,32 @@
 (defclass eitest-Ja ()
   ())
 
-(defmethod initialize-instance :after ((_this eitest-Ja) &rest _slots)
-  ;(message "+Ja")
-  ;; FIXME: Using next-method-p in an after-method is invalid!
-  (when (next-method-p)
-    (call-next-method))
-  ;(message "-Ja")
-  )
+(with-suppressed-warnings ((obsolete defmethod)
+                           (obsolete defgeneric)
+                           (obsolete next-method-p)
+                           (obsolete call-next-method))
+  (defmethod initialize-instance :after ((_this eitest-Ja) &rest _slots)
+    ;;(message "+Ja")
+    ;; FIXME: Using next-method-p in an after-method is invalid!
+    (when (next-method-p)
+      (call-next-method))
+    ;;(message "-Ja")
+    ))
 
 (defclass eitest-Jb ()
   ())
 
-(defmethod initialize-instance :after ((_this eitest-Jb) &rest _slots)
-  ;(message "+Jb")
-  ;; FIXME: Using next-method-p in an after-method is invalid!
-  (when (next-method-p)
-    (call-next-method))
-  ;(message "-Jb")
-  )
+(with-suppressed-warnings ((obsolete defmethod)
+                           (obsolete defgeneric)
+                           (obsolete next-method-p)
+                           (obsolete call-next-method))
+  (defmethod initialize-instance :after ((_this eitest-Jb) &rest _slots)
+    ;;(message "+Jb")
+    ;; FIXME: Using next-method-p in an after-method is invalid!
+    (when (next-method-p)
+      (call-next-method))
+    ;;(message "-Jb")
+    ))
 
 (defclass eitest-Jc (eitest-Jb)
   ())
@@ -320,12 +346,16 @@
 (defclass eitest-Jd (eitest-Jc eitest-Ja)
   ())
 
-(defmethod initialize-instance ((_this eitest-Jd) &rest _slots)
-  ;(message "+Jd")
-  (when (next-method-p)
-    (call-next-method))
-  ;(message "-Jd")
-  )
+(with-suppressed-warnings ((obsolete defmethod)
+                           (obsolete defgeneric)
+                           (obsolete next-method-p)
+                           (obsolete call-next-method))
+  (defmethod initialize-instance ((_this eitest-Jd) &rest _slots)
+    ;;(message "+Jd")
+    (when (next-method-p)
+      (call-next-method))
+    ;;(message "-Jd")
+    ))
 
 (ert-deftest eieio-test-method-order-list-9 ()
   (should (eitest-Jd)))
@@ -345,32 +375,36 @@
 (defclass CNM-2 (CNM-1-1 CNM-1-2)
   ())
 
-(defmethod CNM-M ((this CNM-0) args)
-  (push (cons 'CNM-0 (copy-sequence args))
-       eieio-test-call-next-method-arguments)
-  (when (next-method-p)
-    (call-next-method
-     this (cons 'CNM-0 args))))
-
-(defmethod CNM-M ((this CNM-1-1) args)
-  (push (cons 'CNM-1-1 (copy-sequence args))
-       eieio-test-call-next-method-arguments)
-  (when (next-method-p)
-    (call-next-method
-     this (cons 'CNM-1-1 args))))
-
-(defmethod CNM-M ((_this CNM-1-2) args)
-  (push (cons 'CNM-1-2 (copy-sequence args))
-       eieio-test-call-next-method-arguments)
-  (when (next-method-p)
-    (call-next-method)))
-
-(defmethod CNM-M ((this CNM-2) args)
-  (push (cons 'CNM-2 (copy-sequence args))
-       eieio-test-call-next-method-arguments)
-  (when (next-method-p)
-    (call-next-method
-     this (cons 'CNM-2 args))))
+(with-suppressed-warnings ((obsolete defmethod)
+                           (obsolete defgeneric)
+                           (obsolete next-method-p)
+                           (obsolete call-next-method))
+  (defmethod CNM-M ((this CNM-0) args)
+    (push (cons 'CNM-0 (copy-sequence args))
+          eieio-test-call-next-method-arguments)
+    (when (next-method-p)
+      (call-next-method
+       this (cons 'CNM-0 args))))
+
+  (defmethod CNM-M ((this CNM-1-1) args)
+    (push (cons 'CNM-1-1 (copy-sequence args))
+          eieio-test-call-next-method-arguments)
+    (when (next-method-p)
+      (call-next-method
+       this (cons 'CNM-1-1 args))))
+
+  (defmethod CNM-M ((_this CNM-1-2) args)
+    (push (cons 'CNM-1-2 (copy-sequence args))
+          eieio-test-call-next-method-arguments)
+    (when (next-method-p)
+      (call-next-method)))
+
+  (defmethod CNM-M ((this CNM-2) args)
+    (push (cons 'CNM-2 (copy-sequence args))
+          eieio-test-call-next-method-arguments)
+    (when (next-method-p)
+      (call-next-method
+       this (cons 'CNM-2 args)))))
 
 (ert-deftest eieio-test-method-order-list-10 ()
   (let ((eieio-test-call-next-method-arguments nil))
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 fd044ff373..e839e1262f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
@@ -99,7 +99,7 @@ This is usually a symbol that starts with `:'."
 (defclass persist-simple (eieio-persistent)
   ((slot1 :initarg :slot1
          :type symbol
-         :initform moose)
+          :initform 'moose)
    (slot2 :initarg :slot2
          :initform "foo")
    (slot3 :initform 2))
diff --git a/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el 
b/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el
index ba2e5f7be4..9b27d4ab93 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-2021 Free Software
+;; Copyright (C) 1999-2003, 2005-2010, 2012-2022 Free Software
 ;; Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
@@ -27,18 +27,26 @@
 (require 'ert)
 (require 'eieio)
 (require 'eieio-base)
+;; FIXME: See Bug#52971.
+(with-no-warnings
+  (require 'eieio-compat))
 (require 'eieio-opt)
 
 (eval-when-compile (require 'cl-lib))
 
+;; Silence byte-compiler.
+(eval-when-compile
+  (dolist (slot '(:a :b ooga-booga :derived-value missing-slot))
+    (cl-pushnew slot eieio--known-slot-names)))
+
 ;;; Code:
 ;; Set up some test classes
 (defclass class-a ()
   ((water :initarg :water
-         :initform h20
+          :initform 'h20
          :type symbol
          :documentation "Detail about water.")
-   (classslot :initform penguin
+   (classslot :initform 'penguin
              :type symbol
              :documentation "A class allocated slot."
              :allocation :class)
@@ -50,6 +58,9 @@
    )
   "Class A.")
 
+;; Silence compiler warning about `water' not being a class-allocated slot.
+(defclass eieio-tests--dummy () ((water :allocation :class)))
+
 (defclass class-b ()
   ((land :initform "Sc"
         :type string
@@ -61,40 +72,41 @@
              :documentation "Detail about amphibian on land and water."))
   "Class A and B combined.")
 
-(defclass class-c ()
-  ((slot-1 :initarg :moose
-          :initform moose
-          :type symbol
-          :allocation :instance
-          :documentation "First slot testing slot arguments."
-          :custom symbol
-          :label "Wild Animal"
-          :group borg
-          :protection :public)
-   (slot-2 :initarg :penguin
-          :initform "penguin"
-          :type string
-          :allocation :instance
-          :documentation "Second slot testing slot arguments."
-          :custom string
-          :label "Wild bird"
-          :group vorlon
-          :accessor get-slot-2
-          :protection :private)
-   (slot-3 :initarg :emu
-          :initform emu
-          :type symbol
-          :allocation :class
-          :documentation "Third slot test class allocated accessor"
-          :custom symbol
-          :label "Fuzz"
-          :group tokra
-          :accessor get-slot-3
-          :protection :private)
-   )
-  (:custom-groups (foo))
-  "A class for testing slot arguments."
-  )
+(with-no-warnings ; FIXME: Make more specific.
+  (defclass class-c ()
+    ((slot-1 :initarg :moose
+             :initform 'moose
+             :type symbol
+             :allocation :instance
+             :documentation "First slot testing slot arguments."
+             :custom symbol
+             :label "Wild Animal"
+             :group borg
+             :protection :public)
+     (slot-2 :initarg :penguin
+             :initform "penguin"
+             :type string
+             :allocation :instance
+             :documentation "Second slot testing slot arguments."
+             :custom string
+             :label "Wild bird"
+             :group vorlon
+             :accessor get-slot-2
+             :protection :private)
+     (slot-3 :initarg :emu
+             :initform 'emu
+             :type symbol
+             :allocation :class
+             :documentation "Third slot test class allocated accessor"
+             :custom symbol
+             :label "Fuzz"
+             :group tokra
+             :accessor get-slot-3
+             :protection :private)
+     )
+    (:custom-groups (foo))
+    "A class for testing slot arguments."
+    ))
 
 (defclass class-subc (class-c)
   ((slot-1 ;; :initform moose  - don't override this
@@ -132,21 +144,25 @@
 ;;      (error "invalid-slot-type thrown when 
eieio-error-unsupported-class-tags is nil")
 ;;      )))
 
+;; Silence byte-compiler.
+(declare-function eitest-subordinate--eieio-childp nil)
+(declare-function class-alloc-initarg--eieio-childp nil)
 (ert-deftest eieio-test-01-mix-alloc-initarg ()
   ;; Only run this test if the message framework thingy works.
-  (when (and (message "foo") (string= "foo" (current-message)))
+  (skip-unless (and (message "foo") (string= "foo" (current-message))))
 
-    ;; Defining this class should generate a warning(!) message that
-    ;; you should not mix :initarg with class allocated slots.
+  ;; Defining this class should generate a warning(!) message that
+  ;; you should not mix :initarg with class allocated slots.
+  (with-no-warnings ; FIXME: Make more specific.
     (defclass class-alloc-initarg ()
       ((throwwarning :initarg :throwwarning
-                    :allocation :class))
-      "Throw a warning mixing allocation class and an initarg.")
+                     :allocation :class))
+      "Throw a warning mixing allocation class and an initarg."))
 
-    ;; Check that message is there
-    (should (current-message))
-    (should (string-match "Class allocated slots do not need :initarg"
-                         (current-message)))))
+  ;; Check that message is there
+  (should (current-message))
+  (should (string-match "Class allocated slots do not need :initarg"
+                        (current-message))))
 
 (defclass abstract-class ()
   ((some-slot :initarg :some-slot
@@ -160,30 +176,33 @@
   ;; error
   (should-error (abstract-class)))
 
-(defgeneric generic1 () "First generic function.")
+(with-suppressed-warnings ((obsolete defgeneric))
+  (defgeneric generic1 () "First generic function."))
 
 (ert-deftest eieio-test-03-generics ()
-  (defun anormalfunction () "A plain function for error testing." nil)
-  (should-error
-   (progn
-     (defgeneric anormalfunction ()
-       "Attempt to turn it into a generic.")))
-
-  ;; Check that generic-p works
-  (should (generic-p 'generic1))
-
-  (defmethod generic1 ((c class-a))
-    "Method on generic1."
-    'monkey)
-
-  (defmethod generic1 (not-an-object)
-    "Method generic1 that can take a non-object."
-    not-an-object)
-
-  (let ((ans-obj (generic1 (class-a)))
-       (ans-num (generic1 666)))
-    (should (eq ans-obj 'monkey))
-    (should (eq ans-num 666))))
+  (with-suppressed-warnings ((obsolete defmethod)
+                             (obsolete defgeneric))
+    (defun anormalfunction () "A plain function for error testing." nil)
+    (should-error
+     (progn
+       (defgeneric anormalfunction ()
+         "Attempt to turn it into a generic.")))
+
+    ;; Check that generic-p works
+    (should (generic-p 'generic1))
+
+    (defmethod generic1 ((_c class-a))
+      "Method on generic1."
+      'monkey)
+
+    (defmethod generic1 (not-an-object)
+      "Method generic1 that can take a non-object."
+      not-an-object)
+
+    (let ((ans-obj (generic1 (class-a)))
+          (ans-num (generic1 666)))
+      (should (eq ans-obj 'monkey))
+      (should (eq ans-num 666)))))
 
 (defclass static-method-class ()
   ((some-slot :initform nil
@@ -191,12 +210,17 @@
              :documentation "A slot."))
   :documentation "A class used for testing static methods.")
 
-(defmethod static-method-class-method :STATIC ((c static-method-class) value)
-  "Test static methods.
+(with-suppressed-warnings ((obsolete defmethod)
+                           (obsolete defgeneric))
+  (defmethod static-method-class-method :STATIC ((c static-method-class) value)
+    "Test static methods.
 Argument C is the class bound to this static method."
-  (if (eieio-object-p c) (setq c (eieio-object-class c)))
-  (oset-default c some-slot value))
+    (if (eieio-object-p c) (setq c (eieio-object-class c)))
+    (oset-default c some-slot value)))
 
+;; Silence byte-compiler.
+(declare-function static-method-class-2 nil)
+(declare-function static-method-class-2--eieio-childp nil)
 (ert-deftest eieio-test-04-static-method ()
   ;; Call static method on a class and see if it worked
   (static-method-class-method 'static-method-class 'class)
@@ -209,11 +233,13 @@ Argument C is the class bound to this static method."
     ()
     "A second class after the previous for static methods.")
 
-  (defmethod static-method-class-method :STATIC ((c static-method-class-2) 
value)
-    "Test static methods.
+  (with-suppressed-warnings ((obsolete defmethod)
+                             (obsolete defgeneric))
+    (defmethod static-method-class-method :STATIC ((c static-method-class-2) 
value)
+      "Test static methods.
 Argument C is the class bound to this static method."
-    (if (eieio-object-p c) (setq c (eieio-object-class c)))
-    (oset-default c some-slot (intern (concat "moose-" (symbol-name value)))))
+      (if (eieio-object-p c) (setq c (eieio-object-class c)))
+      (oset-default c some-slot (intern (concat "moose-" (symbol-name 
value))))))
 
   (static-method-class-method 'static-method-class-2 'class)
   (should (eq (oref-default 'static-method-class-2 some-slot) 'moose-class))
@@ -240,64 +266,71 @@ Argument C is the class bound to this static method."
   (should (make-instance 'class-a :water 'cho))
   (should (make-instance 'class-b)))
 
-(defmethod class-cn ((a class-a))
-  "Try calling `call-next-method' when there isn't one.
+(with-suppressed-warnings ((obsolete defmethod)
+                           (obsolete defgeneric))
+  (defmethod class-cn ((_a class-a))
+    "Try calling `call-next-method' when there isn't one.
 Argument A is object of type symbol `class-a'."
-  (call-next-method))
+    (with-suppressed-warnings ((obsolete call-next-method))
+      (call-next-method)))
 
-(defmethod no-next-method ((a class-a) &rest args)
-  "Override signal throwing for variable `class-a'.
+  (defmethod no-next-method ((_a class-a) &rest _args)
+    "Override signal throwing for variable `class-a'.
 Argument A is the object of class variable `class-a'."
-  'moose)
+    'moose))
 
 (ert-deftest eieio-test-08-call-next-method ()
   ;; Play with call-next-method
   (should (eq (class-cn eitest-ab) 'moose)))
 
-(defmethod no-applicable-method ((b class-b) method &rest args)
-  "No need.
+(with-suppressed-warnings ((obsolete defmethod)
+                           (obsolete defgeneric))
+  (defmethod no-applicable-method ((_b class-b) _method &rest _args)
+    "No need.
 Argument B is for booger.
 METHOD is the method that was attempting to be called."
-  'moose)
+    'moose))
 
 (ert-deftest eieio-test-09-no-applicable-method ()
   ;; Non-existing methods.
   (should (eq (class-cn eitest-b) 'moose)))
 
-(defmethod class-fun ((a class-a))
-  "Fun with class A."
-  'moose)
+(with-suppressed-warnings ((obsolete defmethod)
+                           (obsolete defgeneric))
+  (defmethod class-fun ((_a class-a))
+    "Fun with class A."
+    'moose)
 
-(defmethod class-fun ((b class-b))
-  "Fun with class B."
-  (error "Class B fun should not be called")
-  )
+  (defmethod class-fun ((_b class-b))
+    "Fun with class B."
+    (error "Class B fun should not be called"))
 
-(defmethod class-fun-foo ((b class-b))
-  "Foo Fun with class B."
-  'moose)
+  (defmethod class-fun-foo ((_b class-b))
+    "Foo Fun with class B."
+    'moose)
 
-(defmethod class-fun2 ((a class-a))
-  "More fun with class A."
-  'moose)
+  (defmethod class-fun2 ((_a class-a))
+    "More fun with class A."
+    'moose)
 
-(defmethod class-fun2 ((b class-b))
-  "More fun with class B."
-  (error "Class B fun2 should not be called")
-  )
+  (defmethod class-fun2 ((_b class-b))
+    "More fun with class B."
+    (error "Class B fun2 should not be called"))
 
-(defmethod class-fun2 ((ab class-ab))
-  "More fun with class AB."
-  (call-next-method))
+  (defmethod class-fun2 ((_ab class-ab))
+    "More fun with class AB."
+    (with-suppressed-warnings ((obsolete call-next-method))
+      (call-next-method)))
 
-;; How about if B is the only slot?
-(defmethod class-fun3 ((b class-b))
-  "Even More fun with class B."
-  'moose)
+  ;; How about if B is the only slot?
+  (defmethod class-fun3 ((_b class-b))
+    "Even More fun with class B."
+    'moose)
 
-(defmethod class-fun3 ((ab class-ab))
-  "Even More fun with class AB."
-  (call-next-method))
+  (defmethod class-fun3 ((_ab class-ab))
+    "Even More fun with class AB."
+    (with-suppressed-warnings ((obsolete call-next-method))
+      (call-next-method))))
 
 (ert-deftest eieio-test-10-multiple-inheritance ()
   ;; play with methods and mi
@@ -314,20 +347,22 @@ METHOD is the method that was attempting to be called."
 
 
 (defvar class-fun-value-seq '())
-(defmethod class-fun-value :BEFORE ((a class-a))
-  "Return `before', and push `before' in `class-fun-value-seq'."
-  (push 'before class-fun-value-seq)
-  'before)
-
-(defmethod class-fun-value :PRIMARY ((a class-a))
-  "Return `primary', and push `primary' in `class-fun-value-seq'."
-  (push 'primary class-fun-value-seq)
-  'primary)
-
-(defmethod class-fun-value :AFTER ((a class-a))
-  "Return `after', and push `after' in `class-fun-value-seq'."
-  (push 'after class-fun-value-seq)
-  'after)
+(with-suppressed-warnings ((obsolete defmethod)
+                           (obsolete defgeneric))
+  (defmethod class-fun-value :BEFORE ((_a class-a))
+    "Return `before', and push `before' in `class-fun-value-seq'."
+    (push 'before class-fun-value-seq)
+    'before)
+
+  (defmethod class-fun-value :PRIMARY ((_a class-a))
+    "Return `primary', and push `primary' in `class-fun-value-seq'."
+    (push 'primary class-fun-value-seq)
+    'primary)
+
+  (defmethod class-fun-value :AFTER ((_a class-a))
+    "Return `after', and push `after' in `class-fun-value-seq'."
+    (push 'after class-fun-value-seq)
+    'after))
 
 (ert-deftest eieio-test-12-generic-function-call ()
   ;; Test value of a generic function call
@@ -343,20 +378,23 @@ METHOD is the method that was attempting to be called."
 ;;
 
 (ert-deftest eieio-test-13-init-methods ()
-  (defmethod initialize-instance ((a class-a) &rest slots)
-    "Initialize the slots of class-a."
-    (call-next-method)
-    (if (/= (oref a test-tag) 1)
-       (error "shared-initialize test failed."))
-    (oset a test-tag 2))
-
-  (defmethod shared-initialize ((a class-a) &rest slots)
-    "Shared initialize method for class-a."
-    (call-next-method)
-    (oset a test-tag 1))
-
-  (let ((ca (class-a)))
-    (should (= (oref ca test-tag) 2))))
+  (with-suppressed-warnings ((obsolete defmethod)
+                             (obsolete defgeneric)
+                             (obsolete call-next-method))
+    (defmethod initialize-instance ((a class-a) &rest _slots)
+      "Initialize the slots of class-a."
+      (call-next-method)
+      (if (/= (oref a test-tag) 1)
+          (error "shared-initialize test failed."))
+      (oset a test-tag 2))
+
+    (defmethod shared-initialize ((a class-a) &rest _slots)
+      "Shared initialize method for class-a."
+      (call-next-method)
+      (oset a test-tag 1))
+
+    (let ((ca (class-a)))
+      (should (= (oref ca test-tag) 2)))))
 
 
 ;;; Perform slot testing
@@ -368,10 +406,11 @@ METHOD is the method that was attempting to be called."
   (should (oref eitest-ab amphibian)))
 
 (ert-deftest eieio-test-15-slot-missing ()
-
-  (defmethod slot-missing ((ab class-ab) &rest foo)
-    "If a slot in AB is unbound, return something cool.  FOO."
-    'moose)
+  (with-suppressed-warnings ((obsolete defmethod)
+                             (obsolete defgeneric))
+    (defmethod slot-missing ((_ab class-ab) &rest _foo)
+      "If a slot in AB is unbound, return something cool.  FOO."
+      'moose))
 
   (should (eq (oref eitest-ab ooga-booga) 'moose))
   (should-error (oref eitest-a ooga-booga) :type 'invalid-slot-name))
@@ -391,17 +430,20 @@ METHOD is the method that was attempting to be called."
 (defclass virtual-slot-class ()
   ((base-value :initarg :base-value))
   "Class has real slot :base-value and simulated slot :derived-value.")
-(defmethod slot-missing ((vsc virtual-slot-class)
-                        slot-name operation &optional new-value)
-  "Simulate virtual slot derived-value."
-  (cond
-   ((or (eq slot-name :derived-value)
-       (eq slot-name 'derived-value))
-    (with-slots (base-value) vsc
-      (if (eq operation 'oref)
-         (+ base-value 1)
-       (setq base-value (- new-value 1)))))
-   (t (call-next-method))))
+(with-suppressed-warnings ((obsolete defmethod)
+                           (obsolete defgeneric))
+  (defmethod slot-missing ((vsc virtual-slot-class)
+                           slot-name operation &optional new-value)
+    "Simulate virtual slot derived-value."
+    (cond
+     ((or (eq slot-name :derived-value)
+          (eq slot-name 'derived-value))
+      (with-slots (base-value) vsc
+        (if (eq operation 'oref)
+            (+ base-value 1)
+          (setq base-value (- new-value 1)))))
+     (t (with-suppressed-warnings ((obsolete call-next-method))
+          (call-next-method))))))
 
 (ert-deftest eieio-test-17-virtual-slot ()
   (setq eitest-vsca (virtual-slot-class :base-value 1))
@@ -424,35 +466,37 @@ METHOD is the method that was attempting to be called."
   (should (= (oref eitest-vscb :derived-value) 5)))
 
 (ert-deftest eieio-test-18-slot-unbound ()
-
-  (defmethod slot-unbound ((a class-a) &rest foo)
-    "If a slot in A is unbound, ignore FOO."
-    'moose)
-
-  (should (eq (oref eitest-a water) 'moose))
-
-  ;; Check if oset of unbound works
-  (oset eitest-a water 'moose)
-  (should (eq (oref eitest-a water) 'moose))
-
-  ;; oref/oref-default comparison
-  (should-not (eq (oref eitest-a water) (oref-default eitest-a water)))
-
-  ;; oset-default -> oref/oref-default comparison
-  (oset-default (eieio-object-class eitest-a) water 'moose)
-  (should (eq (oref eitest-a water) (oref-default eitest-a water)))
-
-  ;; After setting 'water to 'moose, make sure a new object has
-  ;; the right stuff.
-  (oset-default (eieio-object-class eitest-a) water 'penguin)
-  (should (eq (oref (class-a) water) 'penguin))
-
-  ;; Revert the above
-  (defmethod slot-unbound ((a class-a) &rest foo)
-    "If a slot in A is unbound, ignore FOO."
-    ;; Disable the old slot-unbound so we can run this test
-    ;; more than once
-    (call-next-method)))
+  (with-suppressed-warnings ((obsolete defmethod)
+                             (obsolete defgeneric))
+    (defmethod slot-unbound ((_a class-a) &rest _foo)
+      "If a slot in A is unbound, ignore FOO."
+      'moose)
+
+    (should (eq (oref eitest-a water) 'moose))
+
+    ;; Check if oset of unbound works
+    (oset eitest-a water 'moose)
+    (should (eq (oref eitest-a water) 'moose))
+
+    ;; oref/oref-default comparison
+    (should-not (eq (oref eitest-a water) (oref-default eitest-a water)))
+
+    ;; oset-default -> oref/oref-default comparison
+    (oset-default (eieio-object-class eitest-a) water 'moose)
+    (should (eq (oref eitest-a water) (oref-default eitest-a water)))
+
+    ;; After setting 'water to 'moose, make sure a new object has
+    ;; the right stuff.
+    (oset-default (eieio-object-class eitest-a) water 'penguin)
+    (should (eq (oref (class-a) water) 'penguin))
+
+    ;; Revert the above
+    (defmethod slot-unbound ((_a class-a) &rest _foo)
+      "If a slot in A is unbound, ignore FOO."
+      ;; Disable the old slot-unbound so we can run this test
+      ;; more than once
+      (with-suppressed-warnings ((obsolete call-next-method))
+        (call-next-method)))))
 
 (ert-deftest eieio-test-19-slot-type-checking ()
   ;; Slot type checking
@@ -489,7 +533,7 @@ METHOD is the method that was attempting to be called."
 
 (defclass inittest nil
   ((staticval :initform 1)
-   (symval :initform eieio-test-permuting-value)
+   (symval :initform 'eieio-test-permuting-value)
    (evalval :initform (symbol-value 'eieio-test-permuting-value))
    (evalnow :initform (symbol-value 'eieio-test-permuting-value)
            :allocation :class)
@@ -506,8 +550,10 @@ METHOD is the method that was attempting to be called."
   (should (eq (oref eitest-pvinit evalval) 2))
   (should (eq (oref eitest-pvinit evalnow) 1)))
 
+;; Silence byte-compiler.
 (defvar eitest-tests nil)
-
+(declare-function eitest-superior nil)
+(declare-function eitest-superior--eieio-childp nil)
 (ert-deftest eieio-test-22-init-forms-dont-match-runnable ()
   ;; Init forms with types that don't match the runnable.
   (defclass eitest-subordinate nil
@@ -515,7 +561,7 @@ METHOD is the method that was attempting to be called."
     "Test class that will be a calculated value.")
 
   (defclass eitest-superior nil
-    ((sub :initform (eitest-subordinate)
+    ((sub :initform (funcall #'eitest-subordinate)
          :type eitest-subordinate))
     "A class with an initform that creates a class.")
 
@@ -555,7 +601,10 @@ METHOD is the method that was attempting to be called."
     (should-not (cl-typep listooa '(list-of class-b)))
     (should-not (cl-typep listoob '(list-of class-a)))))
 
+;; Silence byte-compiler.
 (defvar eitest-t1 nil)
+(declare-function eieio-tests-initform-not-evaluated-when-initarg-is-present 
nil)
+(declare-function 
eieio-tests-initform-not-evaluated-when-initarg-is-present--eieio-childp nil)
 (ert-deftest eieio-test-25-slot-tests ()
   (setq eitest-t1 (class-c))
   ;; Slot initialization
@@ -617,12 +666,14 @@ METHOD is the method that was attempting to be called."
   ()
   "Protection testing baseclass.")
 
-(defmethod prot0-slot-2 ((s2 prot-0))
-  "Try to access slot-2 from this class which doesn't have it.
+(with-suppressed-warnings ((obsolete defmethod)
+                           (obsolete defgeneric))
+  (defmethod prot0-slot-2 ((s2 prot-0))
+    "Try to access slot-2 from this class which doesn't have it.
 The object S2 passed in will be of class prot-1, which does have
 the slot.  This could be allowed, and currently is in EIEIO.
 Needed by the eieio persistent base class."
-  (oref s2 slot-2))
+    (oref s2 slot-2)))
 
 (defclass prot-1 (prot-0)
   ((slot-1 :initarg :slot-1
@@ -640,26 +691,28 @@ Needed by the eieio persistent base class."
   nil
   "A class for testing the :protection option.")
 
-(defmethod prot1-slot-2 ((s2 prot-1))
-  "Try to access slot-2 in S2."
-  (oref s2 slot-2))
+(with-suppressed-warnings ((obsolete defmethod)
+                           (obsolete defgeneric))
+  (defmethod prot1-slot-2 ((s2 prot-1))
+    "Try to access slot-2 in S2."
+    (oref s2 slot-2))
 
-(defmethod prot1-slot-2 ((s2 prot-2))
-  "Try to access slot-2 in S2."
-  (oref s2 slot-2))
+  (defmethod prot1-slot-2 ((s2 prot-2))
+    "Try to access slot-2 in S2."
+    (oref s2 slot-2))
 
-(defmethod prot1-slot-3-only ((s2 prot-1))
-  "Try to access slot-3 in S2.
+  (defmethod prot1-slot-3-only ((s2 prot-1))
+    "Try to access slot-3 in S2.
 Do not override for `prot-2'."
-  (oref s2 slot-3))
+    (oref s2 slot-3))
 
-(defmethod prot1-slot-3 ((s2 prot-1))
-  "Try to access slot-3 in S2."
-  (oref s2 slot-3))
+  (defmethod prot1-slot-3 ((s2 prot-1))
+    "Try to access slot-3 in S2."
+    (oref s2 slot-3))
 
-(defmethod prot1-slot-3 ((s2 prot-2))
-  "Try to access slot-3 in S2."
-  (oref s2 slot-3))
+  (defmethod prot1-slot-3 ((s2 prot-2))
+    "Try to access slot-3 in S2."
+    (oref s2 slot-3)))
 
 (defvar eitest-p1 nil)
 (defvar eitest-p2 nil)
@@ -729,7 +782,7 @@ Do not override for `prot-2'."
   (should (eq (oref eitest-II3 slot3) 'penguin)))
 
 (defclass slotattr-base ()
-  ((initform :initform init)
+  ((initform :initform 'init)
    (type :type list)
    (initarg :initarg :initarg)
    (protection :protection :private)
@@ -744,7 +797,7 @@ Do not override for `prot-2'."
 Subclasses to override slot attributes.")
 
 (defclass slotattr-ok (slotattr-base)
-  ((initform :initform no-init)
+  ((initform :initform 'no-init)
    (initarg :initarg :initblarg)
    (custom :custom string
           :label "One String"
@@ -778,28 +831,29 @@ Subclasses to override slot attributes.")
   (let ((obj (slotattr-ok)))
     (should (eq (oref obj initform) 'no-init))))
 
-(defclass slotattr-class-base ()
-  ((initform :allocation :class
-            :initform init)
-   (type :allocation :class
-        :type list)
-   (initarg :allocation :class
-           :initarg :initarg)
-   (protection :allocation :class
-              :protection :private)
-   (custom :allocation :class
-          :custom (repeat string)
-          :label "Custom Strings"
-          :group moose)
-   (docstring :allocation :class
-             :documentation
-             "Replace the doc-string for this property.")
-   )
-  "Baseclass we will attempt to subclass.
-Subclasses to override slot attributes.")
+(with-no-warnings ; FIXME: Make more specific.
+  (defclass slotattr-class-base ()
+    ((initform :allocation :class
+               :initform 'init)
+     (type :allocation :class
+           :type list)
+     (initarg :allocation :class
+              :initarg :initarg)
+     (protection :allocation :class
+                 :protection :private)
+     (custom :allocation :class
+             :custom (repeat string)
+             :label "Custom Strings"
+             :group moose)
+     (docstring :allocation :class
+                :documentation
+                "Replace the doc-string for this property.")
+     )
+    "Baseclass we will attempt to subclass.
+Subclasses to override slot attributes."))
 
 (defclass slotattr-class-ok (slotattr-class-base)
-  ((initform :initform no-init)
+  ((initform :initform 'no-init)
    (initarg :initarg :initblarg)
    (custom :custom string
           :label "One String"
@@ -861,7 +915,7 @@ Subclasses to override slot attributes.")
   (should (setq eitest-CLONETEST2 (clone eitest-CLONETEST1))))
 
 (defclass IT (eieio-instance-tracker)
-  ((tracking-symbol :initform IT-list)
+  ((tracking-symbol :initform 'IT-list)
    (slot1 :initform 'die))
   "Instance Tracker test object.")
 
@@ -914,13 +968,20 @@ Subclasses to override slot attributes.")
 
 (defclass eieio--testing () ())
 
-(defmethod constructor :static ((_x eieio--testing) newname &rest _args)
-  (list newname 2))
+(with-suppressed-warnings ((obsolete defmethod)
+                           (obsolete defgeneric))
+  (defmethod constructor :static ((_x eieio--testing) newname &rest _args)
+    (list newname 2)))
 
 (ert-deftest eieio-test-37-obsolete-name-in-constructor ()
   ;; FIXME repeated intermittent failures on hydra and elsewhere (bug#24503).
   :tags '(:unstable)
-  (should (equal (eieio--testing "toto") '("toto" 2))))
+  ;; Disable byte-compiler "Warning: Obsolete name arg "toto" to
+  ;; constructor eieio--testing".  This could be made more specific
+  ;; with changes to `with-suppressed-warnings', but it's not worth
+  ;; the hassle for just this one test.
+  (with-no-warnings
+    (should (equal (eieio--testing "toto") '("toto" 2)))))
 
 (ert-deftest eieio-autoload ()
   "Tests to see whether reftex-auc has been autoloaded"
@@ -971,7 +1032,7 @@ Subclasses to override slot attributes.")
 
 ;;;; Interaction with defstruct
 
-(cl-defstruct eieio-test--struct a b c)
+(cl-defstruct eieio-test--struct a b (c nil :read-only t))
 
 (ert-deftest eieio-test-defstruct-slot-value ()
   (let ((x (make-eieio-test--struct :a 'A :b 'B :c 'C)))
@@ -980,7 +1041,10 @@ Subclasses to override slot attributes.")
     (should (eq (eieio-test--struct-b x)
                 (slot-value x 'b)))
     (should (eq (eieio-test--struct-c x)
-                (slot-value x 'c)))))
+                (slot-value x 'c)))
+    (setf (slot-value x 'a) 1)
+    (should (eq (eieio-test--struct-a x) 1))
+    (should-error (setf (slot-value x 'c) 3) :type 'eieio-read-only)))
 
 (provide 'eieio-tests)
 
diff --git a/test/lisp/emacs-lisp/ert-tests.el 
b/test/lisp/emacs-lisp/ert-tests.el
index 1a8c9bf4f0..ac13064474 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2008, 2010-2022 Free Software Foundation, Inc.
 
 ;; Author: Christian Ohler <ohler@gnu.org>
 
@@ -495,6 +495,12 @@ This macro is used to test if macroexpansion in `should' 
works."
     (should (equal (ert-select-tests '(tag b) (list test)) (list test)))
     (should (equal (ert-select-tests '(tag c) (list test)) '()))))
 
+(ert-deftest ert-test-select-undefined ()
+  (let* ((symbol (make-symbol "ert-not-a-test"))
+         (data (should-error (ert-select-tests symbol t)
+                             :type 'ert-test-unbound)))
+    (should (eq (cadr data) symbol))))
+
 
 ;;; Tests for utility functions.
 (ert-deftest ert-test-parse-keys-and-body ()
diff --git a/test/lisp/emacs-lisp/ert-x-tests.el 
b/test/lisp/emacs-lisp/ert-x-tests.el
index 7106b7abc0..3869804110 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008, 2010-2022 Free Software Foundation, Inc.
 
 ;; Author: Phil Hagelberg
 ;;        Christian Ohler <ohler@gnu.org>
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 9040cc0727..9b9c863aa0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2022 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 9fe5fe9218..137b43a5df 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2022 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 0c7e001cc7..b9fcb4e886 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2022 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 16e172692c..f07b8d830b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2022 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 987e4047d3..d29d9ff656 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords:
diff --git a/test/lisp/emacs-lisp/float-sup-tests.el 
b/test/lisp/emacs-lisp/float-sup-tests.el
index 9e87928c23..f4353d9e85 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 50b8cc53a2..b7a21d49b2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
 
 ;; Author: Daniel Colascione <dancol@dancol.org>
 ;; Keywords:
@@ -74,7 +74,7 @@ identical output."
 (cps-testcase cps-prog1-b (prog1 1))
 (cps-testcase cps-prog1-c (prog2 1 2 3))
 (cps-testcase cps-quote (progn 'hello))
-(cps-testcase cps-function (progn #'hello))
+(cps-testcase cps-function (progn #'message))
 
 (cps-testcase cps-and-fail (and 1 nil 2))
 (cps-testcase cps-and-succeed (and 1 2 3))
@@ -85,9 +85,9 @@ identical output."
 (cps-testcase cps-or-empty (or))
 
 (cps-testcase cps-let* (let* ((i 10)) i))
-(cps-testcase cps-let*-shadow-empty (let* ((i 10)) (let (i) i)))
+(cps-testcase cps-let*-shadow-empty (let* ((i 10)) i (let ((i nil)) i)))
 (cps-testcase cps-let (let ((i 10)) i))
-(cps-testcase cps-let-shadow-empty (let ((i 10)) (let (i) i)))
+(cps-testcase cps-let-shadow-empty (let ((i 10)) i (let ((i nil)) i)))
 (cps-testcase cps-let-novars (let nil 42))
 (cps-testcase cps-let*-novars (let* nil 42))
 
@@ -95,7 +95,7 @@ identical output."
   (let ((a 5) (b 6)) (let ((a b) (b a)) (list a b))))
 
 (cps-testcase cps-let*-parallel
-  (let* ((a 5) (b 6)) (let* ((a b) (b a)) (list a b))))
+  (let* ((a 5) (b 6)) a (let* ((a b) (b a)) (list a b))))
 
 (cps-testcase cps-while-dynamic
   (setq *cps-test-i* 0)
@@ -307,6 +307,7 @@ identical output."
                                             (1+ it)))))))
                  -2)))
 
+(defun generator-tests-edebug ()) ; silence byte-compiler
 (ert-deftest generator-tests-edebug ()
   "Check that Bug#40434 is fixed."
   (with-temp-buffer
diff --git a/test/lisp/emacs-lisp/gv-tests.el b/test/lisp/emacs-lisp/gv-tests.el
index 6ee274ae10..0757e3c7aa 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 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 bbceb04b49..c4e4feaad3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2022 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 d77804fbe6..200be7354a 100644
--- a/test/lisp/emacs-lisp/lisp-mnt-tests.el
+++ b/test/lisp/emacs-lisp/lisp-mnt-tests.el
@@ -1,6 +1,6 @@
 ;;; lisp-mnt-tests.el --- Tests for lisp-mnt  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2021  2020-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 
diff --git a/test/lisp/emacs-lisp/lisp-mode-tests.el 
b/test/lisp/emacs-lisp/lisp-mode-tests.el
index e2cecdf6b0..fd1af75ba3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 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 8301d9906a..901447ecd2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
 
 ;; Author: Aaron S. Hawley <aaron.s.hawley@gmail.com>
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
@@ -213,6 +213,7 @@
     (should-error (forward-sexp)))) ;; FIXME: Shouldn't be an error.
 
 ;; Test some core Elisp rules.
+(defvar c-e-x)
 (ert-deftest core-elisp-tests-1-defvar-in-let ()
   "Test some core Elisp rules."
   (with-temp-buffer
diff --git a/test/lisp/emacs-lisp/macroexp-resources/m1.el 
b/test/lisp/emacs-lisp/macroexp-resources/m1.el
index 96b5f7091a..88c51e7526 100644
--- a/test/lisp/emacs-lisp/macroexp-resources/m1.el
+++ b/test/lisp/emacs-lisp/macroexp-resources/m1.el
@@ -1,27 +1,27 @@
 ;;; m1.el --- Some sample code for macroexp-tests    -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2021  Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords:
 
-;; 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:
 
-;;
-
 ;;; Code:
 
 (defconst macroexp--m1-tests-filename (macroexp-file-name))
diff --git a/test/lisp/emacs-lisp/macroexp-resources/m2.el 
b/test/lisp/emacs-lisp/macroexp-resources/m2.el
index 4f2b96d8ca..cebe4cac12 100644
--- a/test/lisp/emacs-lisp/macroexp-resources/m2.el
+++ b/test/lisp/emacs-lisp/macroexp-resources/m2.el
@@ -1,27 +1,27 @@
 ;;; m2.el --- More sample code for macroexp-tests    -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2021  Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords:
 
-;; 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:
 
-;;
-
 ;;; Code:
 
 (defconst macroexp--m2-tests-filename (macroexp-file-name))
diff --git a/test/lisp/emacs-lisp/macroexp-resources/vk.el 
b/test/lisp/emacs-lisp/macroexp-resources/vk.el
new file mode 100644
index 0000000000..d9ca33671e
--- /dev/null
+++ b/test/lisp/emacs-lisp/macroexp-resources/vk.el
@@ -0,0 +1,130 @@
+;;; vk.el --- test code for macroexp-tests    -*- lexical-binding: t -*-
+
+;; Copyright (C) 2021-2022 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 'macroexp)
+
+(defmacro vk-variable-kind (var)
+  (if (macroexp--dynamic-variable-p var) ''dyn ''lex))
+
+(defvar vk-a 1)
+(defconst vk-b 2)
+(defvar vk-c)
+
+(defun vk-f1 (x)
+  (defvar vk-u1)
+  (let ((vk-a 10)
+        (vk-b 20)
+        (vk-c 30)
+        (vk-u1 40)
+        (y 50))
+    (ignore vk-a vk-b vk-c vk-u1 x y)
+    (list
+     (vk-variable-kind vk-a)            ; dyn
+     (vk-variable-kind vk-b)            ; dyn
+     (vk-variable-kind vk-c)            ; dyn
+     (vk-variable-kind vk-u1)           ; dyn
+     (vk-variable-kind x)               ; lex
+     (vk-variable-kind y))))            ; lex
+
+(eval-and-compile
+  (defvar vk-u2)
+  (defun vk-f2 (x)
+    (defvar vk-v2)
+    (let ((vk-u2 11)
+          (vk-v2 12)
+          (y 13))
+      (ignore vk-u2 vk-v2 x y)
+      (list
+       (vk-variable-kind vk-u2)          ; dyn
+       (vk-variable-kind vk-v2)          ; dyn
+       (vk-variable-kind x)              ; lex
+       (vk-variable-kind y)))))          ; lex
+
+(eval-when-compile
+  (defvar vk-u3)
+  (defun vk-f3 (x)
+    (defvar vk-v3)
+    (let ((vk-a 23)
+          (vk-b 24)
+          (vk-u3 25)
+          (vk-v3 26)
+          (y 27))
+      (ignore vk-a vk-b vk-u3 vk-v3 x y)
+      (list
+       (vk-variable-kind vk-a)          ; dyn
+       (vk-variable-kind vk-b)          ; dyn
+       (vk-variable-kind vk-u3)         ; dyn
+       (vk-variable-kind vk-v3)         ; dyn
+       (vk-variable-kind x)             ; lex
+       (vk-variable-kind y)))))         ; lex
+
+(defconst vk-val3 (eval-when-compile (vk-f3 0)))
+
+(defconst vk-f4 '(lambda (x)
+                   (defvar vk-v4)
+                   (let ((vk-v4 31)
+                         (y 32))
+                     (ignore vk-v4 x y)
+                     (list
+                      (vk-variable-kind vk-a)   ; dyn
+                      (vk-variable-kind vk-b)   ; dyn
+                      (vk-variable-kind vk-v4)  ; dyn
+                      (vk-variable-kind x)      ; dyn
+                      (vk-variable-kind y)))))  ; dyn
+
+(defconst vk-f5 '(closure (t) (x)
+                   (defvar vk-v5)
+                   (let ((vk-v5 41)
+                         (y 42))
+                     (ignore vk-v5 x y)
+                     (list
+                      (vk-variable-kind vk-a)   ; dyn
+                      (vk-variable-kind vk-b)   ; dyn
+                      (vk-variable-kind vk-v5)  ; dyn
+                      (vk-variable-kind x)      ; lex
+                      (vk-variable-kind y)))))  ; lex
+
+(defun vk-f6 ()
+  (eval '(progn
+           (defvar vk-v6)
+           (let ((vk-v6 51)
+                 (y 52))
+             (ignore vk-v6 y)
+             (list
+              (vk-variable-kind vk-a)        ; dyn
+              (vk-variable-kind vk-b)        ; dyn
+              (vk-variable-kind vk-v6)       ; dyn
+              (vk-variable-kind vk-y))))))   ; dyn
+
+(defun vk-f7 ()
+  (eval '(progn
+           (defvar vk-v7)
+           (let ((vk-v7 51)
+                 (y 52))
+             (ignore vk-v7 y)
+             (list
+              (vk-variable-kind vk-a)        ; dyn
+              (vk-variable-kind vk-b)        ; dyn
+              (vk-variable-kind vk-v7)       ; dyn
+              (vk-variable-kind vk-y))))     ; lex
+        t))
+
+(provide 'vk)
diff --git a/test/lisp/emacs-lisp/macroexp-tests.el 
b/test/lisp/emacs-lisp/macroexp-tests.el
index 89d3882d1d..4e6bd8b8fc 100644
--- a/test/lisp/emacs-lisp/macroexp-tests.el
+++ b/test/lisp/emacs-lisp/macroexp-tests.el
@@ -1,29 +1,32 @@
 ;;; macroexp-tests.el --- Tests for macroexp.el      -*- lexical-binding: t; 
-*-
 
-;; Copyright (C) 2021  Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords:
 
-;; 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:
 
-;;
-
 ;;; Code:
 
+(require 'macroexp)
+(require 'ert-x)
+
 (ert-deftest macroexp--tests-fgrep ()
   (should (equal (macroexp--fgrep '((x) (y)) '([x] z ((u))))
                  '((x))))
@@ -67,6 +70,58 @@
     (should (equal "m1.el"
                    (file-name-nondirectory 
macroexp--m1-tests-comp-filename)))))
 
+(defun macroexp-tests--run-emacs (&rest args)
+  "Run Emacs in batch mode with ARGS, return output."
+  (let ((emacs (expand-file-name invocation-name invocation-directory)))
+    (with-temp-buffer
+      (let ((res (apply #'call-process emacs nil t nil
+                        "-Q" "--batch" args))
+            (output (buffer-string)))
+        (unless (equal res 0)
+          (message "%s" output)
+          (error "Inferior Emacs exited with status %S" res))
+        output))))
+
+(defun macroexp-tests--eval-in-subprocess (file expr)
+  (let ((output (macroexp-tests--run-emacs
+                 "-l" file (format "--eval=(print %S)" expr))))
+    (car (read-from-string output))))
+
+(defun macroexp-tests--byte-compile-in-subprocess (file)
+  "Byte-compile FILE using a subprocess to avoid contaminating the lisp state."
+  (let ((output (macroexp-tests--run-emacs "-f" "batch-byte-compile" file)))
+    (when output
+      (message "%s" output))))
+
+(ert-deftest macroexp--tests-dynamic-variable-p ()
+  "Test `macroexp--dynamic-variable-p'."
+  (let* ((vk-el (ert-resource-file "vk.el"))
+         (vk-elc (concat vk-el "c"))
+         (expr '(list (vk-f1 0)
+                      (vk-f2 0)
+                      vk-val3
+                      (funcall vk-f4 0)
+                      (funcall vk-f5 0)
+                      (vk-f6)
+                      (vk-f7))))
+    ;; We compile and run the test in separate processes for complete
+    ;; isolation between test cases.
+    (should (equal (macroexp-tests--eval-in-subprocess vk-el expr)
+                   '((dyn dyn dyn dyn lex lex)
+                     (dyn dyn lex lex)
+                     (dyn dyn dyn dyn lex lex)
+                     (dyn dyn dyn dyn dyn)
+                     (dyn dyn dyn lex lex)
+                     (dyn dyn dyn dyn)
+                     (dyn dyn dyn lex))))
+    (macroexp-tests--byte-compile-in-subprocess vk-el)
+    (should (equal (macroexp-tests--eval-in-subprocess vk-elc expr)
+                   '((dyn dyn dyn dyn lex lex)
+                     (dyn dyn lex lex)
+                     (dyn dyn dyn dyn lex lex)
+                     (dyn dyn dyn dyn dyn)
+                     (dyn dyn dyn lex lex)
+                     (dyn dyn dyn dyn)
+                     (dyn dyn dyn lex))))))
 
-(provide 'macroexp-tests)
 ;;; macroexp-tests.el ends here
diff --git a/test/lisp/emacs-lisp/map-tests.el 
b/test/lisp/emacs-lisp/map-tests.el
index afade8e295..314a1c9e30 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 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 d37f09b34f..869144163b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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
new file mode 100644
index 0000000000..5807c27bd2
--- /dev/null
+++ b/test/lisp/emacs-lisp/multisession-tests.el
@@ -0,0 +1,207 @@
+;;; multisession-tests.el --- Tests for multisession.el  -*- lexical-binding: 
t; -*-
+
+;; Copyright (C) 2021-2022 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 'multisession)
+(require 'ert)
+(require 'ert-x)
+(require 'cl-lib)
+
+(declare-function sqlite-close "sqlite.c")
+
+(ert-deftest multi-test-sqlite-simple ()
+  (skip-unless (sqlite-available-p))
+  (ert-with-temp-file dir
+    :directory t
+    (let ((user-init-file "/tmp/foo.el")
+          (multisession-storage 'sqlite)
+          (multisession-directory dir))
+      (unwind-protect
+          (progn
+            (define-multisession-variable multisession--foo 0
+              ""
+              :synchronized t)
+            (should (= (multisession-value multisession--foo) 0))
+            (cl-incf (multisession-value multisession--foo))
+            (should (= (multisession-value multisession--foo) 1))
+            (call-process
+             (concat invocation-directory invocation-name)
+             nil t nil
+             "-Q" "-batch"
+             "--eval" (prin1-to-string
+                       `(progn
+                          (require 'multisession)
+                          (let ((multisession-directory ,dir)
+                                (multisession-storage 'sqlite)
+                                (user-init-file "/tmp/foo.el"))
+                            (define-multisession-variable multisession--foo 0
+                              ""
+                              :synchronized t)
+                            (cl-incf (multisession-value 
multisession--foo))))))
+            (should (= (multisession-value multisession--foo) 2)))
+        (sqlite-close multisession--db)
+        (setq multisession--db nil)))))
+
+(ert-deftest multi-test-sqlite-busy ()
+  (skip-unless (sqlite-available-p))
+  (ert-with-temp-file dir
+    :directory t
+    (let ((user-init-file "/tmp/foo.el")
+          (multisession-directory dir)
+          (multisession-storage 'sqlite)
+          proc)
+      (unwind-protect
+          (progn
+            (define-multisession-variable multisession--bar 0
+              ""
+              :synchronized t)
+            (should (= (multisession-value multisession--bar) 0))
+            (cl-incf (multisession-value multisession--bar))
+            (should (= (multisession-value multisession--bar) 1))
+            (setq proc
+                  (start-process
+                   "other-emacs"
+                   nil
+                   (concat invocation-directory invocation-name)
+                   "-Q" "-batch"
+                   "--eval" (prin1-to-string
+                             `(progn
+                                (require 'multisession)
+                                (let ((multisession-directory ,dir)
+                                      (multisession-storage 'sqlite)
+                                      (user-init-file "/tmp/bar.el"))
+                                  (define-multisession-variable 
multisession--bar 0
+                                    "" :synchronized t)
+                                  (dotimes (i 100)
+                                    (cl-incf (multisession-value 
multisession--bar))))))))
+            (while (process-live-p proc)
+              (ignore-error 'sqlite-locked-error
+                (message "multisession--bar %s" (multisession-value 
multisession--bar))
+                ;;(cl-incf (multisession-value multisession--bar))
+                )
+              (sleep-for 0.1))
+            (message "multisession--bar ends up as %s" (multisession-value 
multisession--bar))
+            (should (< (multisession-value multisession--bar) 1003)))
+        (sqlite-close multisession--db)
+        (setq multisession--db nil)))))
+
+(ert-deftest multi-test-files-simple ()
+  (ert-with-temp-file dir
+    :directory t
+    (let ((user-init-file "/tmp/sfoo.el")
+          (multisession-storage 'files)
+          (multisession-directory dir))
+      (define-multisession-variable multisession--sfoo 0
+        ""
+        :synchronized t)
+      (should (= (multisession-value multisession--sfoo) 0))
+      (cl-incf (multisession-value multisession--sfoo))
+      (should (= (multisession-value multisession--sfoo) 1))
+      ;; On Windows and Haiku, we don't have sub-second resolution, so
+      ;; let some time pass to make the "later" logic work.
+      (when (memq system-type '(windows-nt haiku))
+        (sleep-for 0.6))
+      (call-process
+       (concat invocation-directory invocation-name)
+       nil t nil
+       "-Q" "-batch"
+       "--eval" (prin1-to-string
+                 `(progn
+                    (require 'multisession)
+                    (let ((multisession-directory ,dir)
+                          (multisession-storage 'files)
+                          (user-init-file "/tmp/sfoo.el"))
+                      (define-multisession-variable multisession--sfoo 0
+                        ""
+                        :synchronized t)
+                      (cl-incf (multisession-value multisession--sfoo))))))
+      (should (= (multisession-value multisession--sfoo) 2)))))
+
+(ert-deftest multi-test-files-busy ()
+  (skip-unless (sqlite-available-p))
+  (ert-with-temp-file dir
+    :directory t
+    (let ((user-init-file "/tmp/foo.el")
+          (multisession-storage 'files)
+          (multisession-directory dir)
+          proc)
+      (define-multisession-variable multisession--sbar 0
+        ""
+        :synchronized t)
+      (should (= (multisession-value multisession--sbar) 0))
+      (cl-incf (multisession-value multisession--sbar))
+      (should (= (multisession-value multisession--sbar) 1))
+      (setq proc
+            (start-process
+             "other-emacs"
+             nil
+             (concat invocation-directory invocation-name)
+             "-Q" "-batch"
+             "--eval" (prin1-to-string
+                       `(progn
+                          (require 'multisession)
+                          (let ((multisession-directory ,dir)
+                                (multisession-storage 'files)
+                                (user-init-file "/tmp/sbar.el"))
+                            (define-multisession-variable multisession--sbar 0
+                              "" :synchronized t)
+                            (dotimes (i 100)
+                              (cl-incf (multisession-value 
multisession--sbar))))))))
+      (while (process-live-p proc)
+        (message "multisession--sbar %s" (multisession-value 
multisession--sbar))
+        ;;(cl-incf (multisession-value multisession--sbar))
+        (sleep-for 0.1))
+      (message "multisession--sbar ends up as %s" (multisession-value 
multisession--sbar))
+      (should (< (multisession-value multisession--sbar) 200)))))
+
+(ert-deftest multi-test-files-some-values ()
+  (ert-with-temp-file dir
+    :directory t
+    (let ((user-init-file "/tmp/sfoo.el")
+          (multisession-storage 'files)
+          (multisession-directory dir))
+      (define-multisession-variable multisession--foo1 nil)
+      (should (eq (multisession-value multisession--foo1) nil))
+      (setf (multisession-value multisession--foo1) nil)
+      (should (eq (multisession-value multisession--foo1) nil))
+      (setf (multisession-value multisession--foo1) t)
+      (should (eq (multisession-value multisession--foo1) t))
+
+      (define-multisession-variable multisession--foo2 t)
+      (setf (multisession-value multisession--foo2) nil)
+      (should (eq (multisession-value multisession--foo2) nil))
+      (setf (multisession-value multisession--foo2) t)
+      (should (eq (multisession-value multisession--foo2) t))
+
+      (define-multisession-variable multisession--foo3 t)
+      (should-error (setf (multisession-value multisession--foo3) 
(make-marker)))
+
+      (let ((string (with-temp-buffer
+                      (set-buffer-multibyte nil)
+                      (insert 0 1 2)
+                      (buffer-string))))
+        (should-not (multibyte-string-p string))
+        (define-multisession-variable multisession--foo4 nil)
+        (setf (multisession-value multisession--foo4) string)
+        (should (equal (multisession-value multisession--foo4) string))))))
+
+;;; multisession-tests.el ends here
diff --git a/test/lisp/emacs-lisp/nadvice-tests.el 
b/test/lisp/emacs-lisp/nadvice-tests.el
index ee33bb0fa4..f21624cfd8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2022 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 ca16f8b27a..c3e82fd173 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 2020-2022 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 efa9f83411..d7a55998c2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 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 7ad01e7aef..8060799080 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -107,8 +107,11 @@
   (should (equal (pcase 1
                    ((cl-type (integer 0 2)) 'integer-0<=n<=2))
                  'integer-0<=n<=2))
-  (should-error (pcase 1
-                  ((cl-type notatype) 'integer))))
+  (should-error
+   ;; Avoid error at compile time due to compiler macro.
+   (eval '(pcase 1
+            ((cl-type notatype) 'integer))
+         t)))
 
 (ert-deftest pcase-tests-setq ()
   (should (equal (let (a b)
diff --git a/test/lisp/emacs-lisp/pp-resources/code-formats.erts 
b/test/lisp/emacs-lisp/pp-resources/code-formats.erts
index 2b2001d096..002a5cf165 100644
--- a/test/lisp/emacs-lisp/pp-resources/code-formats.erts
+++ b/test/lisp/emacs-lisp/pp-resources/code-formats.erts
@@ -122,3 +122,9 @@ Name: code-formats11
 (lambda ()
   [(foo bar) (foo bar)])
 =-=-=
+
+Name: code-formats12
+
+=-=
+(global-set-key (kbd "s-x") #'kill-region)
+=-=-=
diff --git a/test/lisp/emacs-lisp/pp-tests.el b/test/lisp/emacs-lisp/pp-tests.el
index 4cae1a7377..01ac572c53 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 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 65494e20df..46ed7c29b2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 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 3ec20a1e8e..6bbcd94f20 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 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 9d8f3d4801..c1c46d6400 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
 
 ;; Author: Tino Calancha <tino.calancha@gmail.com>
 ;; Keywords:
@@ -22,14 +22,42 @@
 
 ;;; Commentary:
 
-;;
-
 ;;; Code:
 
 (require 'ert)
 (require 'rmc)
+(require 'cl-lib)
 (eval-when-compile (require 'cl-lib))
 
+(ert-deftest test-rmc--add-key-description ()
+  (cl-letf (((symbol-function 'display-supports-face-attributes-p) (lambda (_ 
_) t)))
+    (should (equal (rmc--add-key-description '(?y "yes"))
+                   '(?y . "yes")))
+    (should (equal (rmc--add-key-description '(?n "foo"))
+                   '(?n . "n foo")))
+    (should (equal (rmc--add-key-description '(?\s "foo bar"))
+                   `(?\s . "SPC foo bar")))))
+
+(ert-deftest test-rmc--add-key-description/with-attributes ()
+  (cl-letf (((symbol-function 'display-supports-face-attributes-p) (lambda (_ 
_) t)))
+    (should (equal-including-properties
+             (rmc--add-key-description '(?y "yes"))
+             `(?y . ,(concat (propertize "y" 'face 'read-multiple-choice-face) 
"es"))))
+    (should (equal-including-properties
+             (rmc--add-key-description '(?n "foo"))
+             `(?n . ,(concat (propertize "n" 'face 'read-multiple-choice-face) 
" foo"))))
+    (should (equal-including-properties
+             (rmc--add-key-description '(?\s "foo bar"))
+             `(?\s . ,(concat (propertize "SPC" 'face 
'read-multiple-choice-face) " foo bar"))))))
+
+(ert-deftest test-rmc--add-key-description/non-graphical-display ()
+  (cl-letf (((symbol-function 'display-supports-face-attributes-p) (lambda (_ 
_) nil)))
+    (should (equal-including-properties
+             (rmc--add-key-description '(?y "yes"))
+             '(?y . "[Y]es")))
+    (should (equal-including-properties
+             (rmc--add-key-description '(?n "foo"))
+             `(?n . ,(concat (propertize "n" 'face 'help-key-binding) " 
foo"))))))
 
 (ert-deftest test-read-multiple-choice ()
   (dolist (char '(?y ?n))
@@ -38,6 +66,5 @@
       (should (equal (list char str)
                      (read-multiple-choice "Do it? " '((?y "yes") (?n 
"no"))))))))
 
-
 (provide 'rmc-tests)
 ;;; rmc-tests.el ends here
diff --git a/test/lisp/emacs-lisp/rx-tests.el b/test/lisp/emacs-lisp/rx-tests.el
index 3bc35feb6d..125ddee859 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/emacs-lisp/seq-tests.el 
b/test/lisp/emacs-lisp/seq-tests.el
index 8dc0b93b5a..9e5d59163f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Petton <nicolas@petton.fr>
 ;; Maintainer: emacs-devel@gnu.org
@@ -173,16 +173,18 @@ Evaluate BODY for each created sequence.
   (should (seq-find #'null '(1 2 3) 'sentinel)))
 
 (ert-deftest test-seq-contains ()
-  (with-test-sequences (seq '(3 4 5 6))
-    (should (seq-contains seq 3))
-    (should-not (seq-contains seq 7)))
-  (with-test-sequences (seq '())
-    (should-not (seq-contains seq 3))
-    (should-not (seq-contains seq nil))))
+  (with-suppressed-warnings ((obsolete seq-contains))
+    (with-test-sequences (seq '(3 4 5 6))
+      (should (seq-contains seq 3))
+      (should-not (seq-contains seq 7)))
+    (with-test-sequences (seq '())
+      (should-not (seq-contains seq 3))
+      (should-not (seq-contains seq nil)))))
 
 (ert-deftest test-seq-contains-should-return-the-elt ()
-  (with-test-sequences (seq '(3 4 5 6))
-    (should (= 5 (seq-contains seq 5)))))
+  (with-suppressed-warnings ((obsolete seq-contains))
+    (with-test-sequences (seq '(3 4 5 6))
+      (should (= 5 (seq-contains seq 5))))))
 
 (ert-deftest test-seq-contains-p ()
   (with-test-sequences (seq '(3 4 5 6))
@@ -404,7 +406,7 @@ Evaluate BODY for each created sequence.
   (let ((seq '(1 (2 (3 (4))))))
     (seq-let (_ (_ (_ (a)))) seq
       (should (= a 4))))
-  (let (seq)
+  (let ((seq nil))
     (seq-let (a b c) seq
       (should (null a))
       (should (null b))
@@ -428,7 +430,7 @@ Evaluate BODY for each created sequence.
         (seq '(1 (2 (3 (4))))))
     (seq-setq (_ (_ (_ (a)))) seq)
     (should (= a 4)))
-  (let (seq a b c)
+  (let ((seq nil) a b c)
     (seq-setq (a b c) seq)
     (should (null a))
     (should (null b))
diff --git a/test/lisp/emacs-lisp/shadow-tests.el 
b/test/lisp/emacs-lisp/shadow-tests.el
index 52d1d21cee..a91c4efd04 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2022 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 cfb0b4244b..8515b9fdfb 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -44,6 +44,17 @@
                 (should (shortdoc-tests--tree-contains expr fun))))
             (setq props (cddr props))))))))
 
+(ert-deftest shortdoc-all-groups-work ()
+  "Test that all defined shortdoc groups display correctly."
+  (dolist (group (mapcar (lambda (x) (car x)) shortdoc--groups))
+    (let ((buf-name (format "*Shortdoc %s*" group)) buf)
+      (unwind-protect
+          (progn
+            (shortdoc-display-group group)
+            (should (setq buf (get-buffer buf-name))))
+        (when buf
+          (kill-buffer buf))))))
+
 (provide 'shortdoc-tests)
 
 ;;; shortdoc-tests.el ends here
diff --git a/test/lisp/emacs-lisp/subr-x-tests.el 
b/test/lisp/emacs-lisp/subr-x-tests.el
index 69d59e84f6..d38a8e2352 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
 
 ;; Author: Fabián E. Gallina <fgallina@gnu.org>
 ;; Keywords:
@@ -169,13 +169,13 @@
              "no")
            "no"))
   (should (equal
-           (let (z)
+           (let ((z nil))
              (if-let* (z (a 1) (b 2) (c 3))
                  "yes"
                "no"))
            "no"))
   (should (equal
-           (let (d)
+           (let ((d nil))
              (if-let* ((a 1) (b 2) (c 3) d)
                  "yes"
                "no"))
@@ -191,7 +191,7 @@
 
 (ert-deftest subr-x-test-if-let*-and-laziness-is-preserved ()
   "Test `if-let' respects `and' laziness."
-  (let (a-called b-called c-called)
+  (let ((a-called nil) (b-called nil) c-called)
     (should (equal
              (if-let* ((a nil)
                        (b (setq b-called t))
@@ -199,7 +199,7 @@
                  "yes"
                (list a-called b-called c-called))
              (list nil nil nil))))
-  (let (a-called b-called c-called)
+  (let ((a-called nil) (b-called nil) c-called)
     (should (equal
              (if-let* ((a (setq a-called t))
                        (b nil)
@@ -207,12 +207,12 @@
                  "yes"
                (list a-called b-called c-called))
              (list t nil nil))))
-  (let (a-called b-called c-called)
+  (let ((a-called nil) (b-called nil) c-called)
     (should (equal
              (if-let* ((a (setq a-called t))
-                      (b (setq b-called t))
-                      (c nil)
-                      (d (setq c-called t)))
+                       (b (setq b-called t))
+                       (c nil)
+                       (d (setq c-called t)))
                  "yes"
                (list a-called b-called c-called))
              (list t t nil)))))
@@ -329,12 +329,12 @@
              "no")
            nil))
   (should (equal
-           (let (z)
+           (let ((z nil))
              (when-let* (z (a 1) (b 2) (c 3))
                "no"))
            nil))
   (should (equal
-           (let (d)
+           (let ((d nil))
              (when-let* ((a 1) (b 2) (c 3) d)
                "no"))
            nil)))
@@ -348,7 +348,7 @@
 
 (ert-deftest subr-x-test-when-let*-and-laziness-is-preserved ()
   "Test `when-let' respects `and' laziness."
-  (let (a-called b-called c-called)
+  (let ((a-called nil) (b-called nil) (c-called nil))
     (should (equal
              (progn
                (when-let* ((a nil)
@@ -357,7 +357,7 @@
                  "yes")
                (list a-called b-called c-called))
              (list nil nil nil))))
-  (let (a-called b-called c-called)
+  (let ((a-called nil) (b-called nil) (c-called nil))
     (should (equal
              (progn
                (when-let* ((a (setq a-called t))
@@ -366,7 +366,7 @@
                  "yes")
                (list a-called b-called c-called))
              (list t nil nil))))
-  (let (a-called b-called c-called)
+  (let ((a-called nil) (b-called nil) (c-called nil))
     (should (equal
              (progn
                (when-let* ((a (setq a-called t))
@@ -676,7 +676,7 @@
       (buffer-string))
     "foo\n")))
 
-(ert-deftest test-add-display-text-property ()
+(ert-deftest subr-x-test-add-display-text-property ()
   (with-temp-buffer
     (insert "Foo bar zot gazonk")
     (add-display-text-property 4 8 'height 2.0)
@@ -694,5 +694,23 @@
                    [(raise 0.5) (height 2.0)]))
     (should (equal (get-text-property 9 'display) '(raise 0.5)))))
 
+(ert-deftest subr-x-named-let ()
+  (let ((funs ()))
+    (named-let loop
+        ((rest '(1 42 3))
+         (sum 0))
+      (when rest
+        ;; Here, we make sure that the variables are distinct in every
+        ;; iteration, since a naive tail-call optimization would tend to end up
+        ;; with a single `sum' variable being shared by all the closures.
+        (push (lambda () sum) funs)
+        ;; Here we add a dummy `sum' variable which shadows the `sum' iteration
+        ;; variable since a naive tail-call optimization could also trip here
+        ;; thinking it can `(setq sum ...)' to set the iteration
+        ;; variable's value.
+        (let ((sum sum))
+          (loop (cdr rest) (+ sum (car rest))))))
+    (should (equal (mapcar #'funcall funs) '(43 1 0)))))
+
 (provide 'subr-x-tests)
 ;;; subr-x-tests.el ends here
diff --git a/test/lisp/emacs-lisp/syntax-tests.el 
b/test/lisp/emacs-lisp/syntax-tests.el
index 1ae1cbc93f..53812c0c80 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 e376d2f328..3ce4a63f4f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
 
 ;; Author: Artur Malabarba <bruce.connor.am@gmail.com>
 
@@ -55,28 +55,37 @@
 (ert-deftest tabulated-list-print ()
   (tabulated-list--test-with-buffer
    ;; Basic printing.
-   (should (string= (buffer-substring-no-properties (point-min) (point-max))
-                  "       zzzz-game          zzzz-game          2113         
installed           play zzzz in Emacs
-       4clojure          4clojure          1507         obsolete           
Open and evaluate 4clojure.com questions
-       abc-mode          abc-mode          944         available           
Major mode for editing abc music files
-       mode          mode          1128         installed           A simple 
mode for editing Actionscript 3 files\n"))
+   (should (string-equal
+            (buffer-substring-no-properties (point-min) (point-max))
+            "\
+       zzzz-game  zzzz-game  2113      installed   play zzzz in Emacs
+       4clojure   4clojure   1507      obsolete    Open and evaluate 
4clojure.com questions
+       abc-mode   abc-mode   944       available   Major mode for editing abc 
music files
+       mode       mode       1128      installed   A simple mode for editing 
Actionscript 3 files
+"))
    ;; Preserve position.
    (forward-line 3)
    (let ((pos (thing-at-point 'line)))
      (pop tabulated-list-entries)
      (tabulated-list-print t)
      (should (equal (thing-at-point 'line) pos))
-     (should (string= (buffer-substring-no-properties (point-min) (point-max))
-                      "       4clojure          4clojure          1507         
obsolete           Open and evaluate 4clojure.com questions
-       abc-mode          abc-mode          944         available           
Major mode for editing abc music files
-       mode          mode          1128         installed           A simple 
mode for editing Actionscript 3 files\n"))
+     (should (string-equal
+              (buffer-substring-no-properties (point-min) (point-max))
+              "\
+       4clojure   4clojure   1507      obsolete    Open and evaluate 
4clojure.com questions
+       abc-mode   abc-mode   944       available   Major mode for editing abc 
music files
+       mode       mode       1128      installed   A simple mode for editing 
Actionscript 3 files
+"))
      ;; Check the UPDATE argument
      (pop tabulated-list-entries)
      (setf (cdr (car tabulated-list-entries)) (list ["x" "x" "944" "available" 
" XX"]))
      (tabulated-list-print t t)
-     (should (string= (buffer-substring-no-properties (point-min) (point-max))
-                      "       x          x          944         available      
     XX
-       mode          mode          1128         installed           A simple 
mode for editing Actionscript 3 files\n"))
+     (should (string-equal
+              (buffer-substring-no-properties (point-min) (point-max))
+              "\
+       x          x          944       available   XX
+       mode       mode       1128      installed   A simple mode for editing 
Actionscript 3 files
+"))
      (should (equal (thing-at-point 'line) pos)))))
 
 (ert-deftest tabulated-list-sort ()
@@ -86,11 +95,14 @@
    (skip-chars-forward "[:blank:]")
    (tabulated-list-sort)
    (let ((text (buffer-substring-no-properties (point-min) (point-max))))
-     (should (string= text
-                      "       4clojure          4clojure          1507         
obsolete           Open and evaluate 4clojure.com questions
-       abc-mode          abc-mode          944         available           
Major mode for editing abc music files
-       mode          mode          1128         installed           A simple 
mode for editing Actionscript 3 files
-       zzzz-game          zzzz-game          2113         installed           
play zzzz in Emacs\n"))
+     (should (string-equal
+              text
+              "\
+       4clojure   4clojure   1507      obsolete    Open and evaluate 
4clojure.com questions
+       abc-mode   abc-mode   944       available   Major mode for editing abc 
music files
+       mode       mode       1128      installed   A simple mode for editing 
Actionscript 3 files
+       zzzz-game  zzzz-game  2113      installed   play zzzz in Emacs
+"))
 
      (skip-chars-forward "^[:blank:]")
      (skip-chars-forward "[:blank:]")
@@ -101,11 +113,14 @@
      (should (string= text (buffer-substring-no-properties (point-min) 
(point-max))))
      ;; Invert.
      (tabulated-list-sort 1)
-     (should (string= (buffer-substring-no-properties (point-min) (point-max))
-                      "       zzzz-game          zzzz-game          2113       
  installed           play zzzz in Emacs
-       mode          mode          1128         installed           A simple 
mode for editing Actionscript 3 files
-       abc-mode          abc-mode          944         available           
Major mode for editing abc music files
-       4clojure          4clojure          1507         obsolete           
Open and evaluate 4clojure.com questions\n"))
+     (should (string-equal
+              (buffer-substring-no-properties (point-min) (point-max))
+              "\
+       zzzz-game  zzzz-game  2113      installed   play zzzz in Emacs
+       mode       mode       1128      installed   A simple mode for editing 
Actionscript 3 files
+       abc-mode   abc-mode   944       available   Major mode for editing abc 
music files
+       4clojure   4clojure   1507      obsolete    Open and evaluate 
4clojure.com questions
+"))
      ;; Again
      (tabulated-list-sort 1)
      (should (string= text (buffer-substring-no-properties (point-min) 
(point-max)))))
diff --git a/test/lisp/emacs-lisp/testcover-resources/testcases.el 
b/test/lisp/emacs-lisp/testcover-resources/testcases.el
index 4d49e5ae70..46040be1a6 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 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 a7e055a28b..39cd3175c2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 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 90f06c3c4c..d137572f30 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2022 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 1a8537f3b7..f593737fd2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 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 7856c217f9..4d974cfd9d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -37,7 +37,8 @@
 (ert-deftest timer-tests-debug-timer-check ()
   ;; This function exists only if --enable-checking.
   (skip-unless (fboundp 'debug-timer-check))
-  (should (debug-timer-check)))
+  (when (fboundp 'debug-timer-check)    ; silence byte-compiler
+    (should (debug-timer-check))))
 
 (ert-deftest timer-test-multiple-of-time ()
   (should (time-equal-p
diff --git a/test/lisp/emacs-lisp/unsafep-tests.el 
b/test/lisp/emacs-lisp/unsafep-tests.el
index f0d9b03243..fdd82b4fc3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 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 aa39463482..3b12092505 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 b8efc87ab7..1d2bf46b19 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 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 fba61e573c..ac065909c4 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 1384221c49..65aaafd9f1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 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 b2dbc1012d..5603e76454 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
 
 ;; Author: Lars Ingebrigtsen <larsi@gnus.org>
 
diff --git a/test/lisp/erc/erc-track-tests.el b/test/lisp/erc/erc-track-tests.el
index b2687a96ab..475a436bb1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <mlang@delysid.org>
 ;; Author: Vivek Dasmohapatra <vivek@etla.org>
diff --git a/test/lisp/eshell/em-hist-tests.el 
b/test/lisp/eshell/em-hist-tests.el
index 5bc5690675..634e981983 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 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 3ea11ab2de..272280e81c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
 
 ;; Author: Tino Calancha <tino.calancha@gmail.com>
 
diff --git a/test/lisp/eshell/esh-opt-tests.el 
b/test/lisp/eshell/esh-opt-tests.el
index e2a0ea59d1..532adfb733 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/eshell/eshell-tests.el b/test/lisp/eshell/eshell-tests.el
index 0974784ef4..aef1447907 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
diff --git a/test/lisp/faces-resources/faces-test-dark-theme.el 
b/test/lisp/faces-resources/faces-test-dark-theme.el
index 7e8871ec10..37f793a16e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 70a7501761..f89ccf36c5 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 fe5f3ec95f..f28f9e6aed 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 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 df5c264baa..aebc9b6dbb 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 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 0fe72f278d..13bb2cd345 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 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 d3d58aad5f..57d1ef1682 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -1679,7 +1679,7 @@ PRED is nil."
     (pcase-dolist (`(,pred ,def-pred-bind ,exp-1 ,exp-2) args-results)
       (files-tests--save-some-buffers pred def-pred-bind exp-1 exp-2))))
 
-(defmacro files-tests--with-buffer-offer-save (buffers-offer fn-test 
fn-binders args-results)
+(defun files-tests--with-buffer-offer-save (buffers-offer fn-test args-results)
   "Helper macro to test `save-some-buffers' and `save-buffers-kill-emacs'.
 
 This macro creates several non-file-visiting buffers in different
@@ -1693,52 +1693,52 @@ FN-TEST is the function to test: either 
`save-some-buffers' or
 `save-some-buffers-default-predicate' let-bound to a value
 specified inside ARGS-RESULTS.
 
-FN-BINDERS is a list of elements (FUNCTION . BINDING), where FUNCTION
-is a function symbol that this macro temporary binds to BINDING during
-the FN-TEST call.
+During the call to FN-TEST,`read-event' is overridden with a function that
+just returns `n' and `kill-emacs' is overriden to do nothing.
 
 ARGS-RESULTS is a list of elements (FN-ARGS CALLERS-DIR EXPECTED), where
 FN-ARGS are the arguments for FN-TEST;
 CALLERS-DIR specifies the value to let-bind
 \`save-some-buffers-default-predicate';
  EXPECTED is the expected result of the test."
-  (declare (debug (form symbol form form)))
-  (let ((dir (gensym "dir"))
-        (buffers (gensym "buffers")))
-    `(let* ((,dir (make-temp-file "testdir" 'dir))
-            (inhibit-message t)
-            (use-dialog-box nil)
-            ,buffers)
-       (pcase-dolist (`(,bufsym ,offer-save) ,buffers-offer)
-         (let* ((buf (generate-new-buffer (symbol-name bufsym)))
-                (subdir (expand-file-name
-                         (format "subdir-%s" (buffer-name buf))
-                         ,dir)))
-           (make-directory subdir 'parens)
-           (push buf ,buffers)
-           (with-current-buffer buf
-             (cd subdir)
-             (setq buffer-offer-save offer-save)
-             (insert "foobar\n"))))
-       (setq ,buffers (nreverse ,buffers))
-       (let ((nb-saved-buffers 0))
-         (unwind-protect
-             (pcase-dolist (`(,fn-test-args ,callers-dir ,expected)
-                            ,args-results)
-               (setq nb-saved-buffers 0)
-               (with-current-buffer (car ,buffers)
-                 (cl-letf
-                     (,@(mapcar (lambda (pair) `((symbol-function ,(car pair)) 
,(cdr pair)))
-                                fn-binders)
-                      (save-some-buffers-default-predicate callers-dir))
-                   (apply #',fn-test fn-test-args)
-                   (should (equal nb-saved-buffers expected)))))
-           ;; Clean up.
-           (dolist (buf ,buffers)
-             (with-current-buffer buf
-               (set-buffer-modified-p nil)
-               (kill-buffer buf)))
-           (delete-directory ,dir 'recursive))))))
+  (let* ((dir (make-temp-file "testdir" 'dir))
+         (inhibit-message t)
+         (use-dialog-box nil)
+         buffers)
+    (pcase-dolist (`(,bufsym ,offer-save) buffers-offer)
+      (let* ((buf (generate-new-buffer (symbol-name bufsym)))
+             (subdir (expand-file-name
+                      (format "subdir-%s" (buffer-name buf))
+                      dir)))
+        (make-directory subdir 'parens)
+        (push buf buffers)
+        (with-current-buffer buf
+          (cd subdir)
+          (setq buffer-offer-save offer-save)
+          (insert "foobar\n"))))
+    (setq buffers (nreverse buffers))
+    (let ((nb-saved-buffers 0))
+      (unwind-protect
+          (pcase-dolist (`(,fn-test-args ,callers-dir ,expected)
+                         args-results)
+            (setq nb-saved-buffers 0)
+            (with-current-buffer (car buffers)
+              (cl-letf
+                  (((symbol-function 'read-event)
+                    ;; Increase counter and answer 'n' when prompted
+                    ;; to save a buffer.
+                    (lambda (&rest _) (cl-incf nb-saved-buffers) ?n))
+                   ;; Do not kill Emacs.
+                   ((symbol-function 'kill-emacs) #'ignore)
+                   (save-some-buffers-default-predicate callers-dir))
+                (apply fn-test fn-test-args)
+                (should (equal nb-saved-buffers expected)))))
+        ;; Clean up.
+        (dolist (buf buffers)
+          (with-current-buffer buf
+            (set-buffer-modified-p nil)
+            (kill-buffer buf)))
+        (delete-directory dir 'recursive)))))
 
 (defmacro files-tests-with-all-permutations (permutation list &rest body)
   "Execute BODY forms for all permutations of LIST.
@@ -1777,7 +1777,7 @@ PRED is nil."
     (files-tests-with-all-permutations
         buffers-offer
         buffers-offer-init
-      (dolist (pred `(nil t save-some-buffers-root))
+      (dolist (pred `(nil t))
         (dolist (callers-dir `(nil save-some-buffers-root))
           (let* ((head-offer (cadar buffers-offer))
                  (res (cond ((null pred)
@@ -1790,9 +1790,7 @@ PRED is nil."
                  (args-res `(((nil ,pred) ,callers-dir ,res))))
             (files-tests--with-buffer-offer-save
              buffers-offer
-             save-some-buffers
-             ;; Increase counter and answer 'n' when prompted to save a buffer.
-             (('read-event . (lambda (&rest _) (cl-incf nb-saved-buffers) ?n)))
+             #'save-some-buffers
              args-res)))))))
 
 (ert-deftest files-tests-save-buffers-kill-emacs--asks-to-save-buffers ()
@@ -1807,10 +1805,7 @@ Prompt users for any modified buffer with 
`buffer-offer-save' non-nil."
         buffers-offer-init
       (files-tests--with-buffer-offer-save
        buffers-offer
-       save-buffers-kill-emacs
-       ;; Increase counter and answer 'n' when prompted to save a buffer.
-       (('read-event . (lambda (&rest _) (cl-incf nb-saved-buffers) ?n))
-        ('kill-emacs . #'ignore)) ; Do not kill Emacs.
+       #'save-buffers-kill-emacs
        `((nil nil ,nb-might-save)
          ;; `save-some-buffers-default-predicate' (i.e. the 2nd element) is 
ignored.
          (nil save-some-buffers-root ,nb-might-save))))))
@@ -1822,79 +1817,5 @@ Prompt users for any modified buffer with 
`buffer-offer-save' non-nil."
   (should (equal (file-name-split "/foo/bar/") '("" "foo" "bar" "")))
   (should (equal (file-name-split "foo/bar/") '("foo" "bar" ""))))
 
-;; `insert-directory' output tests.
-(let* ((data-dir "insert-directory")
-       (test-dir (file-name-as-directory
-                  (ert-resource-file
-                   (concat data-dir "/test_dir"))))
-       (test-dir-other (file-name-as-directory
-                        (ert-resource-file
-                         (concat data-dir "/test_dir_other"))))
-       (test-files `(,test-dir "foo" "bar")) ;expected files to be found
-       ;; Free space test data for `insert-directory'.
-       ;; Meaning: (path free-space-bytes-to-stub expected-free-space-string)
-       (free-data `((,test-dir 10 "available 10 B")
-                    (,test-dir-other 100 "available 100 B")
-                    (:default 999 "available 999 B"))))
-
-
-  (defun files-tests--look-up-free-data (path)
-    "Look up free space test data, with a default for unspecified paths."
-    (let ((path (file-name-as-directory path)))
-      (cdr (or (assoc path free-data)
-               (assoc :default free-data)))))
-
-  (defun files-tests--make-file-system-info-stub (&optional static-path)
-    "Return a stub for `file-system-info' using dynamic or static test data.
-If that data should be static, pass STATIC-PATH to choose which
-path's data to use."
-    (lambda (path)
-      (let* ((path (cond (static-path)
-                         ;; file-system-info knows how to handle ".", so we
-                         ;; do the same thing
-                         ((equal "." path) default-directory)
-                         (path)))
-             (return-size
-              (car (files-tests--look-up-free-data path))))
-        (list return-size return-size return-size))))
-
-  (defun files-tests--insert-directory-output (dir &optional verbose)
-    "Run `insert-directory' and return its output."
-    (with-current-buffer-window "files-tests--insert-directory" nil nil
-      (insert-directory dir "-l" nil t)
-      (buffer-substring-no-properties (point-min) (point-max))))
-
-  (ert-deftest files-tests-insert-directory-shows-files ()
-    "Verify `insert-directory' reports the files in the directory."
-    (let* ((test-dir (car test-files))
-           (files (cdr test-files))
-           (output (files-tests--insert-directory-output test-dir)))
-      (dolist (file files)
-        (should (string-match-p file output)))))
-
-  (defun files-tests--insert-directory-shows-given-free (dir &optional
-                                                             info-func)
-    "Run `insert-directory' and verify it reports the correct available space.
-Stub `file-system-info' to ensure the available space is consistent,
-either with the given stub function or a default one using test data."
-    (cl-letf (((symbol-function 'file-system-info)
-               (or info-func
-                   (files-tests--make-file-system-info-stub))))
-      (should (string-match-p (cadr
-                               (files-tests--look-up-free-data dir))
-                              (files-tests--insert-directory-output dir t)))))
-
-  (ert-deftest files-tests-insert-directory-shows-free ()
-    "Test that verbose `insert-directory' shows the correct available space."
-    (files-tests--insert-directory-shows-given-free
-     test-dir
-     (files-tests--make-file-system-info-stub test-dir)))
-
-  (ert-deftest files-tests-bug-50630 ()
-    "Verify verbose `insert-directory' shows free space of the target 
directory.
-The current directory at call time should not affect the result (Bug#50630)."
-    (let ((default-directory test-dir-other))
-      (files-tests--insert-directory-shows-given-free test-dir))))
-
 (provide 'files-tests)
 ;;; files-tests.el ends here
diff --git a/test/lisp/files-x-tests.el b/test/lisp/files-x-tests.el
index e97e2c325e..60787e1cd3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 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 b8e0f27398..853ac9e27b 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 eba51f2885..acdfc5a63d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 ff2abdeaad..4a3cc74c33 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -56,7 +56,7 @@
 
 (ert-deftest format-spec-do-flags-truncate ()
   "Test `format-spec--do-flags' truncation."
-  (let (flags)
+  (let ((flags nil))
     (should (equal (format-spec--do-flags "" flags nil 0) ""))
     (should (equal (format-spec--do-flags "" flags nil 1) ""))
     (should (equal (format-spec--do-flags "a" flags nil 0) ""))
@@ -75,7 +75,7 @@
 
 (ert-deftest format-spec-do-flags-pad ()
   "Test `format-spec--do-flags' padding."
-  (let (flags)
+  (let ((flags nil))
     (should (equal (format-spec--do-flags "" flags 0 nil) ""))
     (should (equal (format-spec--do-flags "" flags 1 nil) " "))
     (should (equal (format-spec--do-flags "a" flags 0 nil) "a"))
diff --git a/test/lisp/gnus/gnus-group-tests.el 
b/test/lisp/gnus/gnus-group-tests.el
index ee1e01be4b..4ae5fea3eb 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 1206a976f6..348ddf9f05 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 9f012d4e88..4a5def97d3 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 Free Software Foundation, Inc.
+;; Copyright (C) 2017, 2021-2022 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 a240784ee0..730c10f981 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2022 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 6602e67a34..4c5a6a8191 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 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 60a9cde0e7..464567061f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 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 0f42f62f38..8f3c1250a9 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 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 586097aaf3..5f39a32b0d 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/gnus/mml-sec-tests.el b/test/lisp/gnus/mml-sec-tests.el
index a7ed7d3975..182d82b961 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015, 2020-2022 Free Software Foundation, Inc.
 
 ;; Author: Jens Lechtenbörger <jens.lechtenboerger@fsfe.org>
 
diff --git a/test/lisp/gnus/nnrss-tests.el b/test/lisp/gnus/nnrss-tests.el
index 92b7dacf18..47d208cb16 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 24a42290a3..6ee7b4f3eb 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2022 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 43db59d4b1..c0c1cf8b53 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 281d97ee92..d27e3d7cd4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
 
 ;; Author: Juanma Barranquero <lekktu@gmail.com>
 ;;         Eli Zaretskii <eliz@gnu.org>
@@ -106,11 +106,34 @@
   (should (eq (get-text-property 0 'face (substitute-command-keys "\\`f'"))
               'help-key-binding)))
 
+(defvar-keymap help-tests--test-keymap
+  :doc "Just some keymap for testing."
+  "C-g"           #'abort-minibuffers
+  "TAB"           #'minibuffer-complete
+  "C-j"           #'minibuffer-complete-and-exit
+  "RET"           #'minibuffer-complete-and-exit
+  "SPC"           #'minibuffer-complete-word
+  "?"             #'minibuffer-completion-help
+  "C-<tab>"       #'file-cache-minibuffer-complete
+  "<XF86Back>"    #'previous-history-element
+  "<XF86Forward>" #'next-history-element
+  "<backtab>"     #'minibuffer-complete
+  "<down>"        #'next-line-or-history-element
+  "<next>"        #'next-history-element
+  "<prior>"       #'switch-to-completions
+  "<up>"          #'previous-line-or-history-element
+  "M-v"           #'switch-to-completions
+  "M-<"           #'minibuffer-beginning-of-buffer
+  "M-n"           #'next-history-element
+  "M-p"           #'previous-history-element
+  "M-r"           #'previous-matching-history-element
+  "M-s"           #'next-matching-history-element
+  "M-g M-c"       #'switch-to-completions)
 
 (ert-deftest help-tests-substitute-command-keys/keymaps ()
   (with-substitute-command-keys-test
-   (test-re "\\{minibuffer-local-must-match-map}"
-         "
+   (test-re "\\{help-tests--test-keymap}"
+            "
 Key             Binding
 -+
 C-g            abort-minibuffers
@@ -122,18 +145,18 @@ SPC               minibuffer-complete-word
 C-<tab>                file-cache-minibuffer-complete
 <XF86Back>     previous-history-element
 <XF86Forward>  next-history-element
+<backtab>      minibuffer-complete
 <down>         next-line-or-history-element
 <next>         next-history-element
 <prior>                switch-to-completions
 <up>           previous-line-or-history-element
 
-M-v            switch-to-completions
-
 M-<            minibuffer-beginning-of-buffer
 M-n            next-history-element
 M-p            previous-history-element
 M-r            previous-matching-history-element
 M-s            next-matching-history-element
+M-v            switch-to-completions
 
 M-g M-c                switch-to-completions
 ")))
@@ -143,12 +166,11 @@ M-g M-c           switch-to-completions
    (test "\\<minibuffer-local-must-match-map>\\[abort-recursive-edit]" "C-]")
    (test "\\<emacs-lisp-mode-map>\\[eval-defun]" "C-M-x")))
 
-(defvar help-tests-remap-map
-  (let ((map (make-keymap)))
-    (define-key map (kbd "x") 'foo)
-    (define-key map (kbd "y") 'bar)
-    (define-key map [remap foo] 'bar)
-    map))
+(defvar-keymap help-tests-remap-map
+  :full t
+  "x" 'foo
+  "y" 'bar
+  "<remap> <foo>" 'bar)
 
 (ert-deftest help-tests-substitute-command-keys/remap ()
   (should (equal (substitute-command-keys "\\<help-tests-remap-map>\\[foo]") 
"y"))
@@ -212,30 +234,28 @@ M-g M-c           switch-to-completions
     (goto-char (point-min))
     (should (looking-at "Type RET on"))))
 
-(defvar help-tests-major-mode-map
-  (let ((map (make-keymap)))
-    (define-key map "x" 'foo-original)
-    (define-key map "1" 'foo-range)
-    (define-key map "2" 'foo-range)
-    (define-key map "3" 'foo-range)
-    (define-key map "4" 'foo-range)
-    (define-key map (kbd "C-e") 'foo-something)
-    (define-key map '[F1] 'foo-function-key1)
-    (define-key map "(" 'short-range)
-    (define-key map ")" 'short-range)
-    (define-key map "a" 'foo-other-range)
-    (define-key map "b" 'foo-other-range)
-    (define-key map "c" 'foo-other-range)
-    map))
+(defvar-keymap help-tests-major-mode-map
+  :full t
+  "x"    'foo-original
+  "1"    'foo-range
+  "2"    'foo-range
+  "3"    'foo-range
+  "4"    'foo-range
+  "C-e"  'foo-something
+  "<f1>" 'foo-function-key1
+  "("    'short-range
+  ")"    'short-range
+  "a"    'foo-other-range
+  "b"    'foo-other-range
+  "c"    'foo-other-range)
 
 (define-derived-mode help-tests-major-mode nil
   "Major mode for testing shadowing.")
 
-(defvar help-tests-minor-mode-map
-  (let ((map (make-keymap)))
-    (define-key map "x" 'foo-shadow)
-    (define-key map (kbd "C-e") 'foo-shadow)
-    map))
+(defvar-keymap help-tests-minor-mode-map
+  :full t
+  "x"   'foo-shadow
+  "C-e" 'foo-shadow)
 
 (define-minor-mode help-tests-minor-mode
   "Minor mode for testing shadowing.")
diff --git a/test/lisp/hfy-cmap-tests.el b/test/lisp/hfy-cmap-tests.el
index 7e0be3753b..fa9c51df4c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 200caa7e1a..71983c713d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
 
 ;; Author: Tino Calancha <tino.calancha@gmail.com>
 ;; Keywords:
diff --git a/test/lisp/htmlfontify-tests.el b/test/lisp/htmlfontify-tests.el
index 15798319a1..fdfe996b03 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 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 9b0327b0ef..252d2c5d7f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 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 90a64b2fd2..56ef6cde35 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
 
 ;; Author: Philipp Stephani <phst@google.com>
 
diff --git a/test/lisp/image-dired-tests.el b/test/lisp/image-dired-tests.el
index 3f0304ee40..00df72487f 100644
--- a/test/lisp/image-dired-tests.el
+++ b/test/lisp/image-dired-tests.el
@@ -1,6 +1,6 @@
 ;;; image-dired-tests.el --- Tests for image-dired.el  -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 2021 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/image-file-tests.el b/test/lisp/image-file-tests.el
index d3290f6f4c..59af6ba909 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 79b0014f60..6abfcfedcf 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -82,7 +82,8 @@
 (ert-deftest image-type/from-filename ()
   ;; On emba, `image-types' and `image-load-path' do not exist.
   (skip-unless (and (bound-and-true-p image-types)
-                    (bound-and-true-p image-load-path)))
+                    (bound-and-true-p image-load-path)
+                    (image-type-available-p 'jpeg)))
   (should (eq (image-type "foo.jpg") 'jpeg)))
 
 (defun image-tests--type-from-file-header (type)
diff --git a/test/lisp/image/exif-tests.el b/test/lisp/image/exif-tests.el
index 2357113f63..d62eef4798 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 2324dc5e8b..3b3a0ad464 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 17f2501f67..9667f0566c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 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 3e2aa3e089..11ac25555d 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 9379a53fe1..acfd6e82f1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 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 f3da2d8873..57ac74639b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2022 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 8ca1ade771..94e864817f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 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 0fcff9d02d..cf29e0e290 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 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 eb577b97dc..27a4e70c78 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/isearch-tests.el b/test/lisp/isearch-tests.el
index 9f3ac37312..4600757d94 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 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 a54aad8165..190825d325 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 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 f400fb064a..ef7805a341 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 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 92306d1c7e..e02cb15423 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2022 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 ecd3d5fc22..c62a2a501b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
 
 ;; Author: Gemini Lasswell <gazally@runbox.com>
 
@@ -91,33 +91,30 @@ body in KEYS-AND-BODY."
        ,docstring ,@keys
        (kmacro-tests-with-kmacro-clean-slate ,@body))))
 
-(defvar kmacro-tests-keymap
-  (let ((map (make-sparse-keymap)))
-    (dotimes (i 26)
-      (define-key map (string (+ ?a i)) 'self-insert-command))
-    (dotimes (i 10)
-      (define-key map (string (+ ?0 i)) 'self-insert-command))
-    ;; Define a few key sequences of different lengths.
-    (dolist (item '(("\C-a"     . beginning-of-line)
-                    ("\C-b"     . backward-char)
-                    ("\C-e"     . end-of-line)
-                    ("\C-f"     . forward-char)
-                    ("\C-r"     . isearch-backward)
-                    ("\C-u"     . universal-argument)
-                    ("\C-w"     . kill-region)
-                    ("\C-SPC"   . set-mark-command)
-                    ("\M-w"     . kill-ring-save)
-                    ("\M-x"     . execute-extended-command)
-                    ("\C-cd"    . downcase-word)
-                    ("\C-cxu"   . upcase-word)
-                    ("\C-cxq"   . quoted-insert)
-                    ("\C-cxi"   . kmacro-insert-counter)
-                    ("\C-x\C-k" . kmacro-keymap)))
-      (define-key map (car item) (cdr item)))
-    map)
-  "Keymap to use for testing keyboard macros.
+(defvar-keymap kmacro-tests-keymap
+  :doc "Keymap to use for testing keyboard macros.
 This is used to obtain consistent results even if tests are run
-in an environment with rebound keys.")
+in an environment with rebound keys."
+  ;; Define a few key sequences of different lengths.
+  "C-a"     'beginning-of-line
+  "C-b"     'backward-char
+  "C-e"     'end-of-line
+  "C-f"     'forward-char
+  "C-r"     'isearch-backward
+  "C-u"     'universal-argument
+  "C-w"     'kill-region
+  "C-SPC"   'set-mark-command
+  "M-w"     'kill-ring-save
+  "M-x"     'execute-extended-command
+  "C-c d"   'downcase-word
+  "C-c x u" 'upcase-word
+  "C-c x q" 'quoted-insert
+  "C-c x i" 'kmacro-insert-counter
+  "C-x C-k" 'kmacro-keymap)
+(dotimes (i 26)
+  (keymap-set kmacro-tests-keymap (string (+ ?a i)) 'self-insert-command))
+(dotimes (i 10)
+  (keymap-set kmacro-tests-keymap (string (+ ?0 i)) 'self-insert-command))
 
 (defvar kmacro-tests-events nil
   "Input events used by the kmacro test in progress.")
diff --git a/test/lisp/loadhist-tests.el b/test/lisp/loadhist-tests.el
index b29796da42..a941ac0632 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 bc31982a11..8e8179446d 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 e3a75bed41..3e23fc7454 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
 
 ;; Author: Tino Calancha <tino.calancha@gmail.com>
 ;; Keywords:
@@ -54,7 +54,8 @@
           (kill-buffer buf)
           (setq buf (dired (nconc (list dir) files)))
           (should (looking-at "src"))
-          (next-line) ; File names must be aligned.
+          (with-suppressed-warnings ((interactive-only next-line))
+            (next-line)) ; File names must be aligned.
           (should (looking-at "src")))
       (when (buffer-live-p buf) (kill-buffer buf)))))
 
diff --git a/test/lisp/mail/flow-fill-tests.el 
b/test/lisp/mail/flow-fill-tests.el
index ec5b984dc0..8436a9627a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 731ba3e706..e33b59bc41 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords:
diff --git a/test/lisp/mail/mail-parse-tests.el 
b/test/lisp/mail/mail-parse-tests.el
index 70de92df45..f5e6f1fb03 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 5b54f2440c..29a9b9eeb9 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 ;; Author: Stefan Kangas <stefankangas@gmail.com>
 
@@ -85,7 +85,8 @@
                  "foo@example.org\\|bar@example.org\\|baz@example.org")))
 
 (ert-deftest mail-utils-tests-mail-rfc822-time-zone ()
-  (should (stringp (mail-rfc822-time-zone (current-time)))))
+  (with-suppressed-warnings ((obsolete mail-rfc822-time-zone))
+    (should (stringp (mail-rfc822-time-zone (current-time))))))
 
 (ert-deftest mail-utils-test-mail-rfc822-date/contains-year ()
   (should (string-match (rx " 20" digit digit " ")
diff --git a/test/lisp/mail/qp-tests.el b/test/lisp/mail/qp-tests.el
index 89f02894ea..e8e58063b9 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 ac547aabe5..c65a0011c7 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 befcbc018b..6e50ce2f32 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 caf8230cb1..0efbb68cc2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 3e36a61a1f..ff29dac427 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 826a90455f..44394cd52e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 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 d7b3775d6d..5d1ac6d630 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2006-2022 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 1899ff50f6..7946e99dbc 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
 
 ;; Author: Stefan Kangas <stefankangas@gmail.com>
 
diff --git a/test/lisp/makesum-tests.el b/test/lisp/makesum-tests.el
index 2b57af7818..e5317be847 100644
--- a/test/lisp/makesum-tests.el
+++ b/test/lisp/makesum-tests.el
@@ -1,6 +1,6 @@
 ;;; makesum-tests.el --- Tests for makesum.el  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2019-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
 
 ;; Author: Simen Heggestøyl <simenheg@gmail.com>
 ;; Keywords:
diff --git a/test/lisp/man-tests.el b/test/lisp/man-tests.el
index 7fb0c5e944..82714f1566 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 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 ac7eedec6a..fb7df652bc 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 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 982573d9b4..5aedb89054 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 4f09677e53..84f59e5d30 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 f282a0b08f..0708617259 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 43355810ab..6c9c7ea1bf 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 eaee98fcf4..3789a5fded 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 Free Software Foundation, Inc.
+# Copyright (C) 2021-2022 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 c3ba8f9a92..2a29d5f167 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 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 a519fd1ee6..36a8726b88 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 56411d0365..1be32006a1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
 
 ;; Author: Philipp Stephani <phst@google.com>
 
@@ -52,5 +52,167 @@ translate `mouse-1' events into `mouse-2' events."
     (should (equal (mouse-position)
                    (cons frame (cons 0 0))))))
 
+(ert-deftest context-menu-map-remove-consecutive-separators ()
+  "Check that `context-menu-map' removes consecutive separators."
+  ;; Both separators after the overall prompt string.
+  (let ((context-menu-functions
+         '((lambda (menu _click)
+             (define-key-after menu [foo-item] '(menu-item "Foo" identity))
+             (define-key-after menu [separator-1] menu-bar-separator)
+             (define-key-after menu [separator-2] menu-bar-separator)
+             (define-key-after menu [bar-item] '(menu-item "Bar" identity))
+             menu))))
+    (should (equal `(keymap
+                     "Context Menu"
+                     (foo-item menu-item "Foo" identity)
+                     (separator-1 . ,menu-bar-separator)
+                     (bar-item menu-item "Bar" identity))
+                   (context-menu-map))))
+  ;; Both separators before the overall prompt string.
+  (let ((context-menu-functions
+         '((lambda (menu _click)
+             (define-key menu [bar-item] '(menu-item "Bar" identity))
+             (define-key menu [separator-2] menu-bar-separator)
+             (define-key menu [separator-1] menu-bar-separator)
+             (define-key menu [foo-item] '(menu-item "Foo" identity))
+             menu))))
+    (should (equal `(keymap
+                     (foo-item menu-item "Foo" identity)
+                     (separator-1 . ,menu-bar-separator)
+                     (bar-item menu-item "Bar" identity)
+                     "Context Menu")
+                   (context-menu-map))))
+  ;; First separator before and second separator after the overall
+  ;; prompt string.
+  (let ((context-menu-functions
+         '((lambda (menu _click)
+             (define-key-after menu [separator-2] menu-bar-separator)
+             (define-key-after menu [bar-item] '(menu-item "Bar" identity))
+             (define-key menu [separator-1] menu-bar-separator)
+             (define-key menu [foo-item] '(menu-item "Foo" identity))
+             menu))))
+    (should (equal `(keymap
+                     (foo-item menu-item "Foo" identity)
+                     (separator-1 . ,menu-bar-separator)
+                     "Context Menu"
+                     (bar-item menu-item "Bar" identity))
+                   (context-menu-map))))
+  ;; Three consecutive separators.
+  (let ((context-menu-functions
+         '((lambda (menu _click)
+             (define-key-after menu [foo-item] '(menu-item "Foo" identity))
+             (define-key-after menu [separator-1] menu-bar-separator)
+             (define-key-after menu [separator-2] menu-bar-separator)
+             (define-key-after menu [separator-3] menu-bar-separator)
+             (define-key-after menu [bar-item] '(menu-item "Bar" identity))
+             menu))))
+    (should (equal `(keymap
+                     "Context Menu"
+                     (foo-item menu-item "Foo" identity)
+                     (separator-1 . ,menu-bar-separator)
+                     (bar-item menu-item "Bar" identity))
+                   (context-menu-map)))))
+
+(ert-deftest context-menu-map-remove-separators-at-beginning-or-end ()
+  "Check that `context-menu-map' removes separators at the
+beginning or end of the menu."
+  ;; Menus with only separators.
+  (let ((test-functions
+         '(;; Separator before the overall prompt string.
+           (lambda (menu _click)
+             (define-key menu [separator] menu-bar-separator)
+             menu)
+           ;; Separator after the overall prompt string.
+           (lambda (menu _click)
+             (define-key-after menu [separator] menu-bar-separator)
+             menu)
+           ;; Begin and end separators before the overall prompt string.
+           (lambda (menu _click)
+             (define-key menu [end-separator] menu-bar-separator)
+             (define-key menu [begin-separator] menu-bar-separator)
+             menu)
+           ;; Begin and end separators after the overall prompt string.
+           (lambda (menu _click)
+             (define-key-after menu [begin-separator] menu-bar-separator)
+             (define-key-after menu [end-separator] menu-bar-separator)
+             menu)
+           ;; Begin separator before and end separator after the
+           ;; overall prompt string.
+           (lambda (menu _click)
+             (define-key menu [begin-separator] menu-bar-separator)
+             (define-key-after menu [end-separator] menu-bar-separator)
+             menu))))
+    (dolist (fun test-functions)
+      (let ((context-menu-functions (list fun)))
+        (should (equal '(keymap "Context Menu")
+                       (context-menu-map))))))
+  ;; Menus with separators at beginning and/or end with a menu-item
+  ;; before the prompt string.
+  (let ((test-functions
+         '(;; Separator before the overall prompt string and the menu-item.
+           (lambda (menu _click)
+             (define-key menu [foo-item] '(menu-item "Foo" identity))
+             (define-key menu [separator] menu-bar-separator)
+             menu)
+           ;; Separator before the overall prompt string, but after
+           ;; the menu-item.
+           (lambda (menu _click)
+             (define-key menu [separator] menu-bar-separator)
+             (define-key menu [foo-item] '(menu-item "Foo" identity))
+             menu)
+           ;; Separator at the end.
+           (lambda (menu _click)
+             (define-key menu [foo-item] '(menu-item "Foo" identity))
+             (define-key-after menu [separator] menu-bar-separator)
+             menu)
+           ;; Begin separator before and end separator after the
+           ;; overall prompt string.
+           (lambda (menu _click)
+             (define-key menu [foo-item] '(menu-item "Foo" identity))
+             (define-key menu [begin-separator] menu-bar-separator)
+             (define-key-after menu [end-separator] menu-bar-separator)
+             menu))))
+    (dolist (fun test-functions)
+      (let ((context-menu-functions (list fun)))
+        (should (equal '(keymap (foo-item menu-item "Foo" identity)
+                                "Context Menu")
+                       (context-menu-map))))))
+  ;; Menus with separators at beginning and/or end with a menu-item
+  ;; after the prompt string.
+  (let ((test-functions
+         '(;; Separator before the overall prompt string.
+           (lambda (menu _click)
+             (define-key menu [separator] menu-bar-separator)
+             (define-key-after menu [foo-item] '(menu-item "Foo" identity))
+             menu)
+           ;; Separator after the overall prompt string, but before
+           ;; the menu-item.
+           (lambda (menu _click)
+             (define-key-after menu [separator] menu-bar-separator)
+             (define-key-after menu [foo-item] '(menu-item "Foo" identity))
+             menu)
+           ;; Separator at the end.
+           (lambda (menu _click)
+             (define-key-after menu [foo-item] '(menu-item "Foo" identity))
+             (define-key-after menu [separator] menu-bar-separator)
+             menu)
+           ;; Begin and end separators after the overall prompt string.
+           (lambda (menu _click)
+             (define-key-after menu [begin-separator] menu-bar-separator)
+             (define-key-after menu [foo-item] '(menu-item "Foo" identity))
+             (define-key-after menu [end-separator] menu-bar-separator)
+             menu)
+           ;; Begin separator before and end separator after the
+           ;; overall prompt string.
+           (lambda (menu _click)
+             (define-key menu [begin-separator] menu-bar-separator)
+             (define-key-after menu [foo-item] '(menu-item "Foo" identity))
+             (define-key-after menu [end-separator] menu-bar-separator)
+             menu))))
+    (dolist (fun test-functions)
+      (let ((context-menu-functions (list fun)))
+        (should (equal '(keymap "Context Menu"
+                                (foo-item menu-item "Foo" identity))
+                       (context-menu-map)))))))
 
 ;;; mouse-tests.el ends here
diff --git a/test/lisp/mwheel-tests.el b/test/lisp/mwheel-tests.el
index 058f1a8afb..947dfdbb5e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 68c7c34901..8f180f3d6b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 cfc380d302..7631842918 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 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 780985cb6d..c3bdc43d3f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 76c00b7eaa..f14ee20a30 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
 
 ;; Author: Ted Zlatanov <tzz@lifelogs.com>
 
@@ -30,6 +30,14 @@
 (require 'gnutls)
 (require 'hex-util)
 
+(declare-function gnutls-symmetric-decrypt "gnutls.c")
+(declare-function gnutls-symmetric-encrypt "gnutls.c")
+(declare-function gnutls-hash-mac "gnutls.c")
+(declare-function gnutls-hash-digest "gnutls.c")
+(declare-function gnutls-ciphers "gnutls.c")
+(declare-function gnutls-digests "gnutls.c")
+(declare-function gnutls-macs "gnutls.c")
+
 (defvar gnutls-tests-message-prefix "")
 
 (defsubst gnutls-tests-message (format-string &rest args)
diff --git a/test/lisp/net/hmac-md5-tests.el b/test/lisp/net/hmac-md5-tests.el
index 8e01353fa3..ce08dd89d1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 a1a08322c0..362cb22bb2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
 
 ;; Author: Mark Oteiza <mvoteiza@udel.edu>
 
diff --git a/test/lisp/net/netrc-tests.el b/test/lisp/net/netrc-tests.el
index 2f68b9bbb2..8e83f405bc 100644
--- a/test/lisp/net/netrc-tests.el
+++ b/test/lisp/net/netrc-tests.el
@@ -1,6 +1,6 @@
 ;;; netrc-tests.el --- Tests for netrc.el  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2020-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
 
 ;; Author: Stefan Kangas <stefankangas@gmail.com>
 
diff --git a/test/lisp/net/network-stream-tests.el 
b/test/lisp/net/network-stream-tests.el
index 8f5bddb71f..1bdc35da19 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
 
 ;; Author: Lars Ingebrigtsen <larsi@gnus.org>
 
@@ -32,6 +32,8 @@
 ;; it pulls in nsm, which then makes the :nowait t' tests fail unless
 ;; we disable the nsm, which we do by binding 'network-security-level'
 
+(declare-function gnutls-peer-status "gnutls.c")
+
 (ert-deftest make-local-unix-server ()
   (skip-unless (featurep 'make-network-process '(:family local)))
   (let* ((file (make-temp-name "/tmp/server-test"))
diff --git a/test/lisp/net/newsticker-tests.el 
b/test/lisp/net/newsticker-tests.el
index e08f311016..2dc92566a6 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2022 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 1a35ec34cb..e0536320cc 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 2420b3b48a..f740703232 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -227,6 +227,8 @@ This string will be returned from the NTLM server to the 
NTLM client."
 
 ;; Silence some byte-compiler warnings that occur when
 ;; web-server/web-server.el is not found.
+(eval-when-compile (cl-pushnew 'headers eieio--known-slot-names)
+                   (cl-pushnew 'process eieio--known-slot-names))
 (declare-function ws-send nil)
 (declare-function ws-parse-request nil)
 (declare-function ws-start nil)
diff --git a/test/lisp/net/puny-tests.el b/test/lisp/net/puny-tests.el
index 9119084209..c6f9474f65 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 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 fd96b7ba71..0ba4f2b86e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 f3498e760a..9cce2aa4b3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 e0230ddee6..e8dbeca090 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 dfd4cf0e7a..b61b437c75 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2022 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 dab40754c0..f0e99e8f09 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 b392c4d184..7e66774701 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 
@@ -57,8 +57,11 @@
 
 (defun secrets--test-delete-all-session-items ()
   "Delete all items of collection \"session\" bound to this Emacs."
-  (dolist (item (secrets-list-items "session"))
-    (secrets-delete-item "session" item)))
+  ;; If the "session" collection does not exist, a `dbus-error' is
+  ;; fired, which we ignore.
+  (dbus-ignore-errors
+    (dolist (item (secrets-list-items "session"))
+      (secrets-delete-item "session" item))))
 
 (ert-deftest secrets-test01-sessions ()
   "Test opening / closing a secrets session."
@@ -93,7 +96,7 @@
   (unwind-protect
       (progn
        (should (secrets-open-session))
-       (should (member "session" (secrets-list-collections)))
+       (skip-unless (member "session" (secrets-list-collections)))
 
        ;; Create a random collection.  This asks for a password
        ;; outside our control, so we make it in the interactive case
@@ -153,6 +156,7 @@
   (unwind-protect
       (let (item-path)
        (should (secrets-open-session))
+       (skip-unless (member "session" (secrets-list-collections)))
 
         ;; Cleanup.  There could be items in the "session" collection.
         (secrets--test-delete-all-session-items)
@@ -214,6 +218,7 @@
   (unwind-protect
       (progn
        (should (secrets-open-session))
+       (skip-unless (member "session" (secrets-list-collections)))
 
         ;; Cleanup.  There could be items in the "session" collection.
         (secrets--test-delete-all-session-items)
diff --git a/test/lisp/net/shr-tests.el b/test/lisp/net/shr-tests.el
index bfb83f2518..821ca5ca63 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
 
 ;; Author: Lars Ingebrigtsen <larsi@gnus.org>
 
@@ -27,6 +27,8 @@
 (require 'ert-x)
 (require 'shr)
 
+(declare-function libxml-parse-html-region "xml.c")
+
 (defun shr-test (name)
   (with-temp-buffer
     (insert-file-contents (format (concat (ert-resource-directory) "/%s.html") 
name))
diff --git a/test/lisp/net/socks-tests.el b/test/lisp/net/socks-tests.el
index 7fb885235c..461796bdf9 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 a307a40157..254595d1b4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 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 47fa18eb80..ea0ff3c760 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <michael.albinus@gmx.de>
 
@@ -157,13 +157,6 @@ being the result.")
   ;; Return result.
   (cdr tramp--test-enabled-checked))
 
-(defsubst tramp--test-expensive-test ()
-  "Whether expensive tests are run."
-  (ert-select-tests
-   (ert--stats-selector ert--current-run-stats)
-   (list (make-ert-test :name (ert-test-name (ert-running-test))
-                        :body nil :tags '(:expensive-test)))))
-
 (defun tramp--test-make-temp-name (&optional local quoted)
   "Return a temporary file name for test.
 If LOCAL is non-nil, a local file name is returned.
@@ -219,8 +212,7 @@ is greater than 10.
        (when (and (null tramp--test-instrument-test-case-p) (> tramp-verbose 
3))
         (untrace-all)
         (dolist (buf (tramp-list-tramp-buffers))
-          (with-current-buffer buf
-            (message ";; %s\n%s" buf (buffer-string)))
+          (message ";; %s\n%s" buf (tramp-get-buffer-string buf))
           (kill-buffer buf))))))
 
 (defsubst tramp--test-message (fmt-string &rest arguments)
@@ -240,8 +232,7 @@ is greater than 10.
      (unwind-protect
         (progn ,@body)
        (tramp--test-message
-       "%s %f sec"
-       ,message (float-time (time-subtract (current-time) start))))))
+       "%s %f sec" ,message (float-time (time-subtract nil start))))))
 
 ;; `always' is introduced with Emacs 28.1.
 (defalias 'tramp--test-always
@@ -2292,7 +2283,7 @@ This checks also `file-name-as-directory', 
`file-name-directory',
   "Check that Tramp abbreviates file names correctly."
   (skip-unless (tramp--test-enabled))
   (skip-unless (tramp--test-emacs29-p))
-  (skip-unless (tramp--test-ange-ftp-p))
+  (skip-unless (not (tramp--test-ange-ftp-p)))
 
   (let* ((remote-host (file-remote-p tramp-test-temporary-file-directory))
         ;; Not all methods can expand "~".
@@ -2332,7 +2323,7 @@ This checks also `file-name-as-directory', 
`file-name-directory',
   "Check `file-exist-p', `write-region' and `delete-file'."
   (skip-unless (tramp--test-enabled))
 
-  (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+  (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
     (let ((tmp-name (tramp--test-make-temp-name nil quoted)))
       (should-not (file-exists-p tmp-name))
       (write-region "foo" nil tmp-name)
@@ -2340,8 +2331,10 @@ This checks also `file-name-as-directory', 
`file-name-directory',
       (delete-file tmp-name)
       (should-not (file-exists-p tmp-name))
 
-      ;; Trashing files doesn't work on MS Windows, and for crypted remote 
files.
-      (unless (or (tramp--test-windows-nt-p) (tramp--test-crypt-p))
+      ;; Trashing files doesn't work when `system-move-file-to-trash'
+      ;; is defined (on MS Windows and macOS), and for crypted remote
+      ;; files.
+      (unless (or (fboundp 'system-move-file-to-trash) (tramp--test-crypt-p))
        (let ((trash-directory (tramp--test-make-temp-name 'local quoted))
              (delete-by-moving-to-trash t))
          (make-directory trash-directory)
@@ -2365,7 +2358,7 @@ This checks also `file-name-as-directory', 
`file-name-directory',
   "Check `file-local-copy'."
   (skip-unless (tramp--test-enabled))
 
-  (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+  (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
     (let ((tmp-name1 (tramp--test-make-temp-name nil quoted))
          tmp-name2)
       (unwind-protect
@@ -2397,7 +2390,7 @@ This checks also `file-name-as-directory', 
`file-name-directory',
   "Check `insert-file-contents'."
   (skip-unless (tramp--test-enabled))
 
-  (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+  (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
     (let ((tmp-name (tramp--test-make-temp-name nil quoted)))
       (unwind-protect
          (with-temp-buffer
@@ -2434,7 +2427,7 @@ This checks also `file-name-as-directory', 
`file-name-directory',
   "Check `write-region'."
   (skip-unless (tramp--test-enabled))
 
-  (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+  (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
     (let ((tmp-name (tramp--test-make-temp-name nil quoted))
           (inhibit-message t))
       (unwind-protect
@@ -2570,8 +2563,9 @@ This checks also `file-name-as-directory', 
`file-name-directory',
   (skip-unless (tramp--test-enabled))
 
   ;; `filename-non-special' has been fixed in Emacs 27.1, see Bug#29579.
-  (dolist (quoted (if (and (tramp--test-expensive-test) 
(tramp--test-emacs27-p))
-                     '(nil t) '(nil)))
+  (dolist (quoted
+          (if (and (tramp--test-expensive-test-p) (tramp--test-emacs27-p))
+              '(nil t) '(nil)))
     (let ((tmp-name1 (tramp--test-make-temp-name nil quoted))
          (tmp-name2 (tramp--test-make-temp-name nil quoted))
          (tmp-name3 (tramp--test-make-temp-name 'local quoted)))
@@ -2598,7 +2592,7 @@ This checks also `file-name-as-directory', 
`file-name-directory',
                (with-temp-buffer
                  (insert-file-contents target)
                  (should (string-equal (buffer-string) "foo")))
-               (when (tramp--test-expensive-test)
+               (when (tramp--test-expensive-test-p)
                  (should-error
                   (copy-file source target)
                   :type 'file-already-exists))
@@ -2616,7 +2610,7 @@ This checks also `file-name-as-directory', 
`file-name-directory',
                (should (file-exists-p source))
                (make-directory target)
                (should (file-directory-p target))
-               (when (tramp--test-expensive-test)
+               (when (tramp--test-expensive-test-p)
                  (should-error
                   (copy-file source target)
                   :type 'file-already-exists)
@@ -2681,8 +2675,9 @@ This checks also `file-name-as-directory', 
`file-name-directory',
   (skip-unless (tramp--test-enabled))
 
   ;; `filename-non-special' has been fixed in Emacs 27.1, see Bug#29579.
-  (dolist (quoted (if (and (tramp--test-expensive-test) 
(tramp--test-emacs27-p))
-                     '(nil t) '(nil)))
+  (dolist (quoted
+          (if (and (tramp--test-expensive-test-p) (tramp--test-emacs27-p))
+              '(nil t) '(nil)))
     (let ((tmp-name1 (tramp--test-make-temp-name nil quoted))
          (tmp-name2 (tramp--test-make-temp-name nil quoted))
          (tmp-name3 (tramp--test-make-temp-name 'local quoted)))
@@ -2712,7 +2707,7 @@ This checks also `file-name-as-directory', 
`file-name-directory',
                  (should (string-equal (buffer-string) "foo")))
                (write-region "foo" nil source)
                (should (file-exists-p source))
-               (when (tramp--test-expensive-test)
+               (when (tramp--test-expensive-test-p)
                  (should-error
                   (rename-file source target)
                   :type 'file-already-exists))
@@ -2730,7 +2725,7 @@ This checks also `file-name-as-directory', 
`file-name-directory',
                (should (file-exists-p source))
                (make-directory target)
                (should (file-directory-p target))
-               (when (tramp--test-expensive-test)
+               (when (tramp--test-expensive-test-p)
                  (should-error
                   (rename-file source target)
                   :type 'file-already-exists)
@@ -2798,7 +2793,7 @@ This checks also `file-name-as-directory', 
`file-name-directory',
 This tests also `file-directory-p' and `file-accessible-directory-p'."
   (skip-unless (tramp--test-enabled))
 
-  (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+  (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
     (let* ((tmp-name1 (tramp--test-make-temp-name nil quoted))
           (tmp-name2 (expand-file-name "foo/bar" tmp-name1))
           (unusual-file-mode-1 #o740)
@@ -2836,7 +2831,7 @@ This tests also `file-directory-p' and 
`file-accessible-directory-p'."
   "Check `delete-directory'."
   (skip-unless (tramp--test-enabled))
 
-  (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+  (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
     (let* ((tmp-name1 (tramp--test-make-temp-name nil quoted))
           (tmp-name2 (expand-file-name "foo" tmp-name1)))
       ;; Delete empty directory.
@@ -2860,9 +2855,12 @@ This tests also `file-directory-p' and 
`file-accessible-directory-p'."
       (should-not (file-directory-p tmp-name1))
 
       ;; Trashing directories works only since Emacs 27.1.  It doesn't
-      ;; work on MS Windows, for crypted remote directories and for ange-ftp.
-      (when (and (not  (tramp--test-windows-nt-p)) (not (tramp--test-crypt-p))
-                (not (tramp--test-ftp-p)) (tramp--test-emacs27-p))
+      ;; work when `system-move-file-to-trash' is defined (on MS
+      ;; Windows and macOS), for crypted remote directories and for
+      ;; ange-ftp.
+      (when (and (not (fboundp 'system-move-file-to-trash))
+                (not (tramp--test-crypt-p)) (not (tramp--test-ftp-p))
+                (tramp--test-emacs27-p))
        (let ((trash-directory (tramp--test-make-temp-name 'local quoted))
              (delete-by-moving-to-trash t))
          (make-directory trash-directory)
@@ -2910,7 +2908,7 @@ This tests also `file-directory-p' and 
`file-accessible-directory-p'."
   (skip-unless (tramp--test-enabled))
   (skip-unless (not (tramp--test-rclone-p)))
 
-  (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+  (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
     (let* ((tmp-name1 (tramp--test-make-temp-name nil quoted))
           (tmp-name2 (tramp--test-make-temp-name nil quoted))
           (tmp-name3 (expand-file-name
@@ -3019,7 +3017,7 @@ This tests also `file-directory-p' and 
`file-accessible-directory-p'."
   "Check `directory-files'."
   (skip-unless (tramp--test-enabled))
 
-  (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+  (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
     (let* ((tmp-name1 (tramp--test-make-temp-name nil quoted))
           (tmp-name2 (expand-file-name "bla" tmp-name1))
           (tmp-name3 (expand-file-name "foo" tmp-name1)))
@@ -3063,7 +3061,7 @@ This tests also `file-directory-p' and 
`file-accessible-directory-p'."
   "Check `file-expand-wildcards'."
   (skip-unless (tramp--test-enabled))
 
-  (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+  (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
     (let* ((tmp-name1 (tramp--test-make-temp-name nil quoted))
           (tmp-name2 (expand-file-name "foo" tmp-name1))
           (tmp-name3 (expand-file-name "bar" tmp-name1))
@@ -3133,7 +3131,7 @@ This tests also `file-directory-p' and 
`file-accessible-directory-p'."
   ;; Emacs 27.1.
   (skip-unless (or (not (tramp--test-crypt-p)) (tramp--test-emacs27-p)))
 
-  (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+  (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
     (let* ((tmp-name1
             (expand-file-name (tramp--test-make-temp-name nil quoted)))
           (tmp-name2 (expand-file-name "foo" tmp-name1))
@@ -3214,7 +3212,7 @@ This tests also `file-directory-p' and 
`file-accessible-directory-p'."
   ;; Wildcards are not supported in tramp-crypt.el.
   (skip-unless (not (tramp--test-crypt-p)))
 
-  (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+  (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
     (let* ((tmp-name1
            (expand-file-name (tramp--test-make-temp-name nil quoted)))
           (tmp-name2
@@ -3318,7 +3316,7 @@ This tests also `file-directory-p' and 
`file-accessible-directory-p'."
   ;; Relative file names in dired are not supported in tramp-crypt.el.
   (skip-unless (not (tramp--test-crypt-p)))
 
-  (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+  (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
     (let* ((tmp-name1
            (expand-file-name (tramp--test-make-temp-name nil quoted)))
           (tmp-name2 (expand-file-name "foo" tmp-name1))
@@ -3372,7 +3370,7 @@ This tests also `access-file', `file-readable-p',
 `file-regular-p' and `file-ownership-preserved-p'."
   (skip-unless (tramp--test-enabled))
 
-  (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+  (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
     ;; We must use `file-truename' for the temporary directory,
     ;; because it could be located on a symlinked directory.  This
     ;; would let the test fail.
@@ -3407,12 +3405,12 @@ This tests also `access-file', `file-readable-p',
            (when (tramp--test-supports-set-file-modes-p)
              (write-region "foo" nil tmp-name1)
              ;; A file is always accessible for user "root".
-             (when (not (zerop (file-attribute-user-id
-                                (file-attributes tmp-name1))))
+             (unless
+                 (zerop (file-attribute-user-id (file-attributes tmp-name1)))
                (set-file-modes tmp-name1 0)
                (should-error
                 (access-file tmp-name1 "error")
-                :type 'file-error)
+                :type tramp-permission-denied)
                (set-file-modes tmp-name1 #o777))
              (delete-file tmp-name1))
            (should-error
@@ -3577,7 +3575,7 @@ They might differ only in time attributes or directory 
size."
   "Check `directory-files-and-attributes'."
   (skip-unless (tramp--test-enabled))
 
-  (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+  (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
     ;; `directory-files-and-attributes' contains also values for
     ;; "../".  Ensure that this doesn't change during tests, for
     ;; example due to handling temporary files.
@@ -3635,7 +3633,7 @@ This tests also `file-executable-p', `file-writable-p' 
and `set-file-modes'."
   (skip-unless (tramp--test-enabled))
   (skip-unless (tramp--test-supports-set-file-modes-p))
 
-  (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+  (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
     (let ((tmp-name1 (tramp--test-make-temp-name nil quoted))
          (tmp-name2 (tramp--test-make-temp-name nil quoted)))
 
@@ -3726,7 +3724,7 @@ This tests also `file-executable-p', `file-writable-p' 
and `set-file-modes'."
 This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
   (skip-unless (tramp--test-enabled))
 
-  (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+  (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
     ;; We must use `file-truename' for the temporary directory,
     ;; because it could be located on a symlinked directory.  This
     ;; would let the test fail.
@@ -3751,11 +3749,11 @@ This tests also `make-symbolic-link', `file-truename' 
and `add-name-to-file'."
               (if quoted #'tramp-compat-file-name-unquote #'identity)
               (file-remote-p tmp-name1 'localname))
              (file-symlink-p tmp-name2)))
-           (when (tramp--test-expensive-test)
+           (when (tramp--test-expensive-test-p)
              (should-error
               (make-symbolic-link tmp-name1 tmp-name2)
               :type 'file-already-exists))
-           (when (tramp--test-expensive-test)
+           (when (tramp--test-expensive-test-p)
              ;; A number means interactive case.
              (cl-letf (((symbol-function #'yes-or-no-p) #'ignore))
                (should-error
@@ -3795,7 +3793,7 @@ This tests also `make-symbolic-link', `file-truename' and 
`add-name-to-file'."
               (string-equal tmp-name1 (file-symlink-p tmp-name3))))
            ;; Check directory as newname.
            (make-directory tmp-name4)
-           (when (tramp--test-expensive-test)
+           (when (tramp--test-expensive-test-p)
              (should-error
               (make-symbolic-link tmp-name1 tmp-name4)
               :type 'file-already-exists))
@@ -3823,7 +3821,7 @@ This tests also `make-symbolic-link', `file-truename' and 
`add-name-to-file'."
 
       ;; Check `add-name-to-file'.
       (unwind-protect
-         (when (tramp--test-expensive-test)
+         (when (tramp--test-expensive-test-p)
            (tramp--test-ignore-add-name-to-file-error
             (write-region "foo" nil tmp-name1)
             (should (file-exists-p tmp-name1))
@@ -3938,11 +3936,11 @@ This tests also `make-symbolic-link', `file-truename' 
and `add-name-to-file'."
               (string-equal
                (file-truename tmp-name2)
                (file-truename tmp-name3)))
-             (when (tramp--test-expensive-test)
+             (when (tramp--test-expensive-test-p)
                (should-error
                 (with-temp-buffer (insert-file-contents tmp-name2))
                 :type 'file-missing))
-             (when (tramp--test-expensive-test)
+             (when (tramp--test-expensive-test-p)
                (should-error
                 (with-temp-buffer (insert-file-contents tmp-name3))
                 :type 'file-missing))
@@ -3960,7 +3958,7 @@ This tests also `make-symbolic-link', `file-truename' and 
`add-name-to-file'."
 
       ;; Detect cyclic symbolic links.
       (unwind-protect
-         (when (tramp--test-expensive-test)
+         (when (tramp--test-expensive-test-p)
            (tramp--test-ignore-make-symbolic-link-error
             (make-symbolic-link tmp-name2 tmp-name1)
             (should (file-symlink-p tmp-name1))
@@ -3998,7 +3996,7 @@ This tests also `make-symbolic-link', `file-truename' and 
`add-name-to-file'."
    (or (tramp--test-adb-p) (tramp--test-gvfs-p)
        (tramp--test-sh-p) (tramp--test-sudoedit-p)))
 
-  (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+  (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
     (let ((tmp-name1 (tramp--test-make-temp-name nil quoted))
          (tmp-name2 (tramp--test-make-temp-name nil quoted))
          (tmp-name3 (tramp--test-make-temp-name nil quoted)))
@@ -4047,7 +4045,7 @@ This tests also `make-symbolic-link', `file-truename' and 
`add-name-to-file'."
   "Check `set-visited-file-modtime' and `verify-visited-file-modtime'."
   (skip-unless (tramp--test-enabled))
 
-  (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+  (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
     (let ((tmp-name (tramp--test-make-temp-name nil quoted)))
       (unwind-protect
          (progn
@@ -4080,8 +4078,9 @@ This tests also `make-symbolic-link', `file-truename' and 
`add-name-to-file'."
   (skip-unless (not (tramp--test-crypt-p)))
 
   ;; `filename-non-special' has been fixed in Emacs 27.1, see Bug#29579.
-  (dolist (quoted (if (and (tramp--test-expensive-test) 
(tramp--test-emacs27-p))
-                     '(nil t) '(nil)))
+  (dolist (quoted
+          (if (and (tramp--test-expensive-test-p) (tramp--test-emacs27-p))
+              '(nil t) '(nil)))
     (let ((tmp-name1 (tramp--test-make-temp-name nil quoted))
          (tmp-name2 (tramp--test-make-temp-name nil quoted))
          (tmp-name3 (tramp--test-make-temp-name 'local quoted)))
@@ -4096,7 +4095,7 @@ This tests also `make-symbolic-link', `file-truename' and 
`add-name-to-file'."
            (should (file-acl tmp-name2))
            (should (string-equal (file-acl tmp-name1) (file-acl tmp-name2)))
            ;; Different permissions mean different ACLs.
-           (when (not (tramp--test-windows-nt-or-smb-p))
+           (unless (tramp--test-windows-nt-or-smb-p)
              (set-file-modes tmp-name1 #o777)
              (set-file-modes tmp-name2 #o444)
              (should-not
@@ -4159,8 +4158,9 @@ This tests also `make-symbolic-link', `file-truename' and 
`add-name-to-file'."
   (skip-unless (not (tramp--test-crypt-p)))
 
   ;; `filename-non-special' has been fixed in Emacs 27.1, see Bug#29579.
-  (dolist (quoted (if (and (tramp--test-expensive-test) 
(tramp--test-emacs27-p))
-                     '(nil t) '(nil)))
+  (dolist (quoted
+          (if (and (tramp--test-expensive-test-p) (tramp--test-emacs27-p))
+              '(nil t) '(nil)))
     (let ((tmp-name1 (tramp--test-make-temp-name nil quoted))
          (tmp-name2 (tramp--test-make-temp-name nil quoted))
          (tmp-name3 (tramp--test-make-temp-name 'local quoted)))
@@ -4297,7 +4297,7 @@ This tests also `make-symbolic-link', `file-truename' and 
`add-name-to-file'."
 
   ;; Method and host name in completion mode.  This kind of completion
   ;; does not work on MS Windows.
-  (when (not (memq system-type '(cygwin windows-nt)))
+  (unless (memq system-type '(cygwin windows-nt))
     (let ((method (file-remote-p tramp-test-temporary-file-directory 'method))
          (host (file-remote-p tramp-test-temporary-file-directory 'host))
           (orig-syntax tramp-syntax))
@@ -4307,7 +4307,7 @@ This tests also `make-symbolic-link', `file-truename' and 
`add-name-to-file'."
       (unwind-protect
           (dolist
              (syntax
-              (if (tramp--test-expensive-test)
+              (if (tramp--test-expensive-test-p)
                   (tramp-syntax-values) `(,orig-syntax)))
             (tramp-change-syntax syntax)
            ;; This has cleaned up all connection data, which are used
@@ -4349,7 +4349,7 @@ This tests also `make-symbolic-link', `file-truename' and 
`add-name-to-file'."
         (tramp-change-syntax orig-syntax))))
 
   (dolist (non-essential '(nil t))
-    (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+    (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
       (let ((tmp-name (tramp--test-make-temp-name nil quoted)))
 
        (unwind-protect
@@ -4416,7 +4416,7 @@ This tests also `make-symbolic-link', `file-truename' and 
`add-name-to-file'."
   "Check `load'."
   (skip-unless (tramp--test-enabled))
 
-  (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+  (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
     (let ((tmp-name (tramp--test-make-temp-name nil quoted)))
       (unwind-protect
          (progn
@@ -4445,7 +4445,7 @@ This tests also `make-symbolic-link', `file-truename' and 
`add-name-to-file'."
   (skip-unless (tramp--test-enabled))
   (skip-unless (tramp--test-supports-processes-p))
 
-  (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+  (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
     (let* ((tmp-name (tramp--test-make-temp-name nil quoted))
           (fnnd (file-name-nondirectory tmp-name))
           (default-directory tramp-test-temporary-file-directory)
@@ -4521,11 +4521,11 @@ This tests also `make-symbolic-link', `file-truename' 
and `add-name-to-file'."
 
 (ert-deftest tramp-test29-start-file-process ()
   "Check `start-file-process'."
-  :tags '(:expensive-test)
+  :tags '(:expensive-test :tramp-asynchronous-processes)
   (skip-unless (tramp--test-enabled))
   (skip-unless (tramp--test-supports-processes-p))
 
-  (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+  (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
     (let ((default-directory tramp-test-temporary-file-directory)
          (tmp-name (tramp--test-make-temp-name nil quoted))
          kill-buffer-query-functions proc)
@@ -4588,8 +4588,8 @@ This tests also `make-symbolic-link', `file-truename' and 
`add-name-to-file'."
        ;; Cleanup.
        (ignore-errors (delete-process proc)))
 
-      ;; "telnet" and "sshfs" do not cooperate with disabled filter.
-      (unless (or (tramp--test-telnet-p) (tramp--test-sshfs-p))
+      ;; Disabled process filter.  "sshfs" does not cooperate.
+      (unless (tramp--test-sshfs-p)
        (unwind-protect
            (with-temp-buffer
              (setq proc (start-file-process "test3" (current-buffer) "cat"))
@@ -4598,8 +4598,8 @@ This tests also `make-symbolic-link', `file-truename' and 
`add-name-to-file'."
              (set-process-filter proc t)
              (process-send-string proc "foo\n")
              (process-send-eof proc)
-             ;; Read output.
-             (with-timeout (10 (tramp--test-timeout-handler))
+             ;; Read output.  There shouldn't be any.
+             (with-timeout (10)
                (while (process-live-p proc)
                  (while (accept-process-output proc 0 nil t))))
              ;; No output due to process filter.
@@ -4677,7 +4677,8 @@ If UNSTABLE is non-nil, the test is tagged as 
`:unstable'."
          (ignore-errors (make-process :file-handler t)))
     `(ert-deftest ,(intern (concat (symbol-name test) "-direct-async")) ()
        ,docstring
-       :tags (if ,unstable '(:expensive-test :unstable) '(:expensive-test))
+       :tags (append '(:expensive-test :tramp-asynchronous-processes)
+                    (and ,unstable '(:unstable)))
        (skip-unless (tramp--test-enabled))
        (let ((default-directory tramp-test-temporary-file-directory)
             (ert-test (ert-get-test ',test))
@@ -4700,13 +4701,13 @@ If UNSTABLE is non-nil, the test is tagged as 
`:unstable'."
 
 (ert-deftest tramp-test30-make-process ()
   "Check `make-process'."
-  :tags '(:expensive-test)
+  :tags '(:expensive-test :tramp-asynchronous-processes)
   (skip-unless (tramp--test-enabled))
   (skip-unless (tramp--test-supports-processes-p))
   ;; `make-process' supports file name handlers since Emacs 27.
   (skip-unless (tramp--test-emacs27-p))
 
-  (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+  (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
     (let ((default-directory tramp-test-temporary-file-directory)
          (tmp-name (tramp--test-make-temp-name nil quoted))
          kill-buffer-query-functions proc)
@@ -4780,8 +4781,8 @@ If UNSTABLE is non-nil, the test is tagged as 
`:unstable'."
        ;; Cleanup.
        (ignore-errors (delete-process proc)))
 
-      ;; "telnet" and "sshfs" do not cooperate with disabled filter.
-      (unless (or (tramp--test-telnet-p) (tramp--test-sshfs-p))
+      ;; Disabled process filter.  "sshfs" does not cooperate.
+      (unless (tramp--test-sshfs-p)
        (unwind-protect
            (with-temp-buffer
              (setq proc
@@ -4794,8 +4795,8 @@ If UNSTABLE is non-nil, the test is tagged as 
`:unstable'."
              (should (equal (process-status proc) 'run))
              (process-send-string proc "foo\n")
              (process-send-eof proc)
-             ;; Read output.
-             (with-timeout (10 (tramp--test-timeout-handler))
+             ;; Read output.  There shouldn't be any.
+             (with-timeout (10)
                (while (process-live-p proc)
                  (while (accept-process-output proc 0 nil t))))
              ;; No output due to process filter.
@@ -4943,8 +4944,9 @@ If UNSTABLE is non-nil, the test is tagged as 
`:unstable'."
 
 (ert-deftest tramp-test31-interrupt-process ()
   "Check `interrupt-process'."
-  :tags (if (or (getenv "EMACS_HYDRA_CI") (getenv "EMACS_EMBA_CI"))
-           '(:expensive-test :unstable) '(:expensive-test))
+  :tags (append '(:expensive-test :tramp-asynchronous-processes)
+               (and (or (getenv "EMACS_HYDRA_CI") (getenv "EMACS_EMBA_CI"))
+                    '(:unstable)))
   (skip-unless (tramp--test-enabled))
   (skip-unless (tramp--test-sh-p))
   (skip-unless (not (tramp--test-crypt-p)))
@@ -5009,7 +5011,7 @@ INPUT, if non-nil, is a string sent to the process."
   (when (tramp--test-adb-p)
     (skip-unless (tramp--test-emacs27-p)))
 
-  (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+  (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
     (let ((tmp-name (tramp--test-make-temp-name nil quoted))
          (default-directory tramp-test-temporary-file-directory)
          ;; Suppress nasty messages.
@@ -5017,10 +5019,12 @@ INPUT, if non-nil, is a string sent to the process."
          kill-buffer-query-functions)
 
       (dolist (this-shell-command
-              '(;; Synchronously.
-                shell-command
-                ;; Asynchronously.
-                tramp--test-async-shell-command))
+              (append
+               ;; Synchronously.
+               '(shell-command)
+               ;; Asynchronously.
+               (and (tramp--test-asynchronous-processes-p)
+                    '(tramp--test-async-shell-command))))
 
        ;; Test ordinary `{async-}shell-command'.
        (unwind-protect
@@ -5054,38 +5058,41 @@ INPUT, if non-nil, is a string sent to the process."
                   "echo foo >&2; echo bar" (current-buffer) stderr)
                  (should (string-equal "bar\n" (buffer-string)))
                  ;; Check stderr.
-                 (with-current-buffer stderr
-                   (should (string-equal "foo\n" (buffer-string)))))
+                 (should
+                  (string-equal "foo\n" (tramp-get-buffer-string stderr))))
 
              ;; Cleanup.
              (ignore-errors (kill-buffer stderr))))))
 
       ;; Test sending string to `async-shell-command'.
-      (unwind-protect
-         (with-temp-buffer
-           (write-region "foo" nil tmp-name)
-           (should (file-exists-p tmp-name))
-           (tramp--test-async-shell-command
-            "read line; ls $line" (current-buffer) nil
-            ;; 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)))
-             (buffer-string))))
+      (when (tramp--test-asynchronous-processes-p)
+       (unwind-protect
+           (with-temp-buffer
+             (write-region "foo" nil tmp-name)
+             (should (file-exists-p tmp-name))
+             (tramp--test-async-shell-command
+              "read line; ls $line" (current-buffer) nil
+              ;; 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)))
+               (buffer-string))))
 
-       ;; Cleanup.
-       (ignore-errors (delete-file tmp-name)))))
+         ;; Cleanup.
+         (ignore-errors (delete-file tmp-name))))))
 
   ;; Test `async-shell-command-width'.  It exists since Emacs 26.1,
   ;; but seems to work since Emacs 27.1 only.
-  (when (and (tramp--test-sh-p) (tramp--test-emacs27-p))
+  (when (and (tramp--test-asynchronous-processes-p)
+            (tramp--test-sh-p) (tramp--test-emacs27-p))
     (let* ((async-shell-command-width 1024)
           (default-directory tramp-test-temporary-file-directory)
           (cols (ignore-errors
@@ -5232,10 +5239,12 @@ INPUT, if non-nil, is a string sent to the process."
   (skip-unless (not (tramp--test-crypt-p)))
 
   (dolist (this-shell-command-to-string
-          '(;; Synchronously.
-            shell-command-to-string
-            ;; Asynchronously.
-            tramp--test-shell-command-to-string-asynchronously))
+          (append
+           ;; Synchronously.
+           '(shell-command-to-string)
+           ;; Asynchronously.
+           (and (tramp--test-asynchronous-processes-p)
+                '(tramp--test-shell-command-to-string-asynchronously))))
 
     (let ((default-directory tramp-test-temporary-file-directory)
          (shell-file-name "/bin/sh")
@@ -5419,7 +5428,7 @@ Use direct async.")
 
 (ert-deftest tramp-test34-explicit-shell-file-name ()
   "Check that connection-local `explicit-shell-file-name' is set."
-  :tags '(:expensive-test)
+  :tags '(:expensive-test :tramp-asynchronous-processes)
   (skip-unless (tramp--test-enabled))
   (skip-unless (tramp--test-supports-processes-p))
   ;; Prior Emacs 27, `shell-file-name' was hard coded as "/bin/sh" for
@@ -5584,7 +5593,7 @@ Use direct async.")
   (skip-unless (tramp--test-sh-p))
   (skip-unless (not (tramp--test-crypt-p)))
 
-  (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+  (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
     ;; We must use `file-truename' for the temporary directory, in
     ;; order to establish the connection prior running an asynchronous
     ;; process.
@@ -5654,7 +5663,7 @@ Use direct async.")
   "Check `make-auto-save-file-name'."
   (skip-unless (tramp--test-enabled))
 
-  (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+  (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
     (let ((tmp-name1 (tramp--test-make-temp-name nil quoted))
          (tmp-name2 (tramp--test-make-temp-name nil quoted))
          tramp-allow-unsafe-temporary-files)
@@ -5777,7 +5786,7 @@ Use direct async.")
   "Check `find-backup-file-name'."
   (skip-unless (tramp--test-enabled))
 
-  (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+  (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
     (let ((tmp-name1 (tramp--test-make-temp-name nil quoted))
          (tmp-name2 (tramp--test-make-temp-name nil quoted))
          (ange-ftp-make-backup-files t)
@@ -5928,7 +5937,7 @@ Use direct async.")
   ;; `lock-file', `unlock-file', `file-locked-p' and
   ;; `make-lock-file-name' exists since Emacs 28.1.  We don't want to
   ;; see compiler warnings for older Emacsen.
-  (dolist (quoted (if (tramp--test-expensive-test) '(nil t) '(nil)))
+  (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil)))
     (let ((tmp-name1 (tramp--test-make-temp-name nil quoted))
          (tmp-name2 (tramp--test-make-temp-name nil quoted))
          (remote-file-name-inhibit-cache t)
@@ -6108,6 +6117,15 @@ This requires restrictions of file name syntax."
    (tramp-find-foreign-file-name-handler tramp-test-temporary-file-directory)
    'tramp-ftp-file-name-handler))
 
+(defun tramp--test-asynchronous-processes-p ()
+  "Whether asynchronous processes tests are run.
+This is used in tests which we dont't want to tag
+`:tramp-asynchronous-processes' completely."
+  (ert-select-tests
+   (ert--stats-selector ert--current-run-stats)
+   (list (make-ert-test :name (ert-test-name (ert-running-test))
+                        :body nil :tags '(:tramp-asynchronous-processes)))))
+
 (defun tramp--test-crypt-p ()
   "Check, whether the remote directory is crypted."
   (tramp-crypt-file-name-p tramp-test-temporary-file-directory))
@@ -6118,6 +6136,15 @@ This does not support some special file names."
   (string-equal
    "docker" (file-remote-p tramp-test-temporary-file-directory 'method)))
 
+(defun tramp--test-expensive-test-p ()
+  "Whether expensive tests are run.
+This is used in tests which we dont't want to tag `:expensive'
+completely."
+  (ert-select-tests
+   (ert--stats-selector ert--current-run-stats)
+   (list (make-ert-test :name (ert-test-name (ert-running-test))
+                        :body nil :tags '(:expensive-test)))))
+
 (defun tramp--test-ftp-p ()
   "Check, whether an FTP-like method is used.
 This does not support globbing characters in file names (yet)."
@@ -6261,8 +6288,9 @@ This requires restrictions of file name syntax."
 (defun tramp--test-check-files (&rest files)
   "Run a simple but comprehensive test over every file in FILES."
   ;; `filename-non-special' has been fixed in Emacs 27.1, see Bug#29579.
-  (dolist (quoted (if (and (tramp--test-expensive-test) 
(tramp--test-emacs27-p))
-                     '(nil t) '(nil)))
+  (dolist (quoted
+          (if (and (tramp--test-expensive-test-p) (tramp--test-emacs27-p))
+              '(nil t) '(nil)))
     ;; We must use `file-truename' for the temporary directory,
     ;; because it could be located on a symlinked directory.  This
     ;; would let the test fail.
@@ -6422,7 +6450,7 @@ This requires restrictions of file name syntax."
            ;; Check, that environment variables are set correctly.
             ;; We do not run on macOS due to encoding problems.  See
             ;; Bug#36940.
-           (when (and (tramp--test-expensive-test) (tramp--test-sh-p)
+           (when (and (tramp--test-expensive-test-p) (tramp--test-sh-p)
                       (not (tramp--test-crypt-p))
                       (not (eq system-type 'darwin)))
              (dolist (elt files)
@@ -6504,7 +6532,7 @@ This requires restrictions of file name syntax."
          "{foo}bar{baz}")))
     ;; Simplify test in order to speed up.
     (apply #'tramp--test-check-files
-          (if (tramp--test-expensive-test)
+          (if (tramp--test-expensive-test-p)
               files (list (mapconcat #'identity files ""))))))
 
 ;; These tests are inspired by Bug#17238.
@@ -6603,7 +6631,7 @@ Use the \"ls\" command."
        ;; to U+1FFFF).
        "🌈🍒👋")
 
-      (when (tramp--test-expensive-test)
+      (when (tramp--test-expensive-test-p)
        (delete-dups
         (mapcar
          ;; Use all available language specific snippets.
@@ -6775,8 +6803,8 @@ This is needed in timer functions as well as process 
filters and sentinels."
   "Check parallel asynchronous requests.
 Such requests could arrive from timers, process filters and
 process sentinels.  They shall not disturb each other."
-  :tags (if (getenv "EMACS_EMBA_CI")
-           '(:expensive-test :unstable) '(:expensive-test))
+  :tags (append '(:expensive-test :tramp-asynchronous-processes)
+               (and (getenv "EMACS_HYDRA_CI") '(:unstable)))
   (skip-unless (tramp--test-enabled))
   (skip-unless (tramp--test-supports-processes-p))
   ;; Prior Emacs 27, `shell-file-name' was hard coded as "/bin/sh" for
diff --git a/test/lisp/net/webjump-tests.el b/test/lisp/net/webjump-tests.el
index f767099925..457e465991 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 65690e593d..a4e2847141 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 7824691333..04346e0f4f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 2194602dbe..bd43889a5a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 45d82c75c1..f34109af24 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 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 0e02e1ca1b..5a701a1e55 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -25,12 +25,11 @@
   (require 'cl))
 (require 'ert)
 
-
-
 (ert-deftest labels-function-quoting ()
   "Test that #'foo does the right thing in `labels'." ; Bug#31792.
-  (should (eq (funcall (labels ((foo () t))
-                         #'foo))
-              t)))
+  (with-suppressed-warnings ((obsolete labels))
+    (should (eq (funcall (labels ((foo () t))
+                                 #'foo))
+                t))))
 
 ;;; cl-tests.el ends here
diff --git a/test/lisp/obsolete/inversion-tests.el 
b/test/lisp/obsolete/inversion-tests.el
index c8b45d67ea..7c8815c282 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/lisp/obsolete/rfc2368-tests.el 
b/test/lisp/obsolete/rfc2368-tests.el
index f997ea3ecb..28fac3785c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 e53b038408..91c8ffc48d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 
diff --git a/test/lisp/paren-tests.el b/test/lisp/paren-tests.el
index 11249ee9bc..baf5590cb9 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 11cb65cc16..ca760c2fb3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 1b795ad706..a02c535fd5 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 6252724467..1c7bb0f081 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 2dd73d1802..5f3ad6d8f8 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 e2f1e03101..7af7e425c4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 3b85febaf0..b79b1f2701 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 cdc507b576..c1dcc9d40f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 7e03952970..82ac910100 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 87e16fdd33..ea241bfbe8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 87872179d9..e321224c54 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 3d347feaf6..e383b4bb6c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 78145124fb..5ef4158ec9 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 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 7a3ab5fbda..fa06d7a1cd 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 a3a8ff208e..2220721ccf 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 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 c87a4453cb..774370be4c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
 ;; Author: Chong Yidong <cyd@stupidchicken.com>
 ;; Keywords:       internal
diff --git a/test/lisp/progmodes/cperl-mode-tests.el 
b/test/lisp/progmodes/cperl-mode-tests.el
index 29b9e3f6fb..0124dad6f1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
 
 ;; Author: Harald Jörg <haj@posteo.de>
 ;; Maintainer: Harald Jörg
diff --git a/test/lisp/progmodes/elisp-mode-tests.el 
b/test/lisp/progmodes/elisp-mode-tests.el
index 63bae79bb4..8e4dfa8bb8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
 
 ;; Author: Dmitry Gutov <dgutov@yandex.ru>
 ;; Author: Stephen Leake <stephen_leake@member.fsf.org>
@@ -438,7 +438,8 @@ to (xref-elisp-test-descr-to-target xref)."
 ;; track down the problem.
 (cl-defmethod xref-elisp-generic-no-default ((this xref-elisp-root-type) arg2)
   "Doc string generic no-default xref-elisp-root-type."
-  "non-default for no-default")
+  "non-default for no-default"
+  (list this arg2)) ; silence byte-compiler
 
 ;; defgeneric after defmethod in file to ensure the fallback search
 ;; method of just looking for the function name will fail.
@@ -448,13 +449,15 @@ to (xref-elisp-test-descr-to-target xref)."
   ;; dispatching code.
   )
 
-(cl-defgeneric xref-elisp-generic-co-located-default (arg1 arg2)
-  "Doc string generic co-located-default."
-  "co-located default")
+(with-no-warnings ; FIXME: Make more specific.
+  (cl-defgeneric xref-elisp-generic-co-located-default (arg1 arg2)
+    "Doc string generic co-located-default."
+    "co-located default"))
 
-(cl-defmethod xref-elisp-generic-co-located-default ((this 
xref-elisp-root-type) arg2)
-  "Doc string generic co-located-default xref-elisp-root-type."
-  "non-default for co-located-default")
+(with-no-warnings ; FIXME: Make more specific.
+  (cl-defmethod xref-elisp-generic-co-located-default ((this 
xref-elisp-root-type) arg2)
+    "Doc string generic co-located-default xref-elisp-root-type."
+    "non-default for co-located-default"))
 
 (cl-defgeneric xref-elisp-generic-separate-default (arg1 arg2)
   "Doc string generic separate-default."
@@ -463,19 +466,23 @@ to (xref-elisp-test-descr-to-target xref)."
 
 (cl-defmethod xref-elisp-generic-separate-default (arg1 arg2)
   "Doc string generic separate-default default."
-  "separate default")
+  "separate default"
+  (list arg1 arg2)) ; silence byte-compiler
 
 (cl-defmethod xref-elisp-generic-separate-default ((this xref-elisp-root-type) 
arg2)
   "Doc string generic separate-default xref-elisp-root-type."
-  "non-default for separate-default")
+  "non-default for separate-default"
+  (list this arg2)) ; silence byte-compiler
 
 (cl-defmethod xref-elisp-generic-implicit-generic (arg1 arg2)
   "Doc string generic implicit-generic default."
-  "default for implicit generic")
+  "default for implicit generic"
+  (list arg1 arg2)) ; silence byte-compiler
 
 (cl-defmethod xref-elisp-generic-implicit-generic ((this xref-elisp-root-type) 
arg2)
   "Doc string generic implicit-generic xref-elisp-root-type."
-  "non-default for implicit generic")
+  "non-default for implicit generic"
+  (list this arg2)) ; silence byte-compiler
 
 
 (xref-elisp-deftest find-defs-defgeneric-no-methods
@@ -845,7 +852,8 @@ to (xref-elisp-test-descr-to-target xref)."
     (if (stringp form)
         (insert form)
       (pp form (current-buffer)))
-    (font-lock-debug-fontify)
+    (with-suppressed-warnings ((interactive-only font-lock-debug-fontify))
+      (font-lock-debug-fontify))
     (goto-char (point-min))
     (and (re-search-forward search nil t)
          (get-text-property (match-beginning 1) 'face))))
diff --git a/test/lisp/progmodes/etags-tests.el 
b/test/lisp/progmodes/etags-tests.el
index 32b73f101e..673c582cc7 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 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 4f0fa699f7..6988fef87d 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 330eab38c4..3fe5eecd1b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 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 4840018236..ced7b5aace 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
 
 ;; Author: Eduard Wiebe <usenet@pusto.de>
 
@@ -140,9 +140,15 @@ SEVERITY-PREDICATE is used to setup
         (flymake-goto-next-error)
         (should (eq 'flymake-error (face-at-point)))))))
 
+(defun flymake-tests--gcc-is-clang ()
+  "Whether the `gcc' command actually runs the Clang compiler."
+  (string-match "[Cc]lang version "
+                (shell-command-to-string "gcc --version")))
+
 (ert-deftest different-diagnostic-types ()
   "Test GCC warning via function predicate."
   (skip-unless (and (executable-find "gcc")
+                    (not (flymake-tests--gcc-is-clang))
                     (version<=
                      "5" (string-trim
                           (shell-command-to-string "gcc -dumpversion")))
@@ -166,7 +172,9 @@ SEVERITY-PREDICATE is used to setup
 
 (ert-deftest included-c-header-files ()
   "Test inclusion of .h header files."
-  (skip-unless (and (executable-find "gcc") (executable-find "make")))
+  (skip-unless (and (executable-find "gcc")
+                    (not (flymake-tests--gcc-is-clang))
+                    (executable-find "make")))
   (let ((flymake-wrap-around nil))
     (flymake-tests--with-flymake
         ("some-problems.h")
diff --git a/test/lisp/progmodes/gdb-mi-tests.el 
b/test/lisp/progmodes/gdb-mi-tests.el
index d66df961b6..b91eab7705 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 633c7bf2db..915fb60d3c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 205982238f..101052c5ad 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 cb7011e9a7..2ce9db65d4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 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 e28fe73b83..76dd5c9e5f 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 ea91479362..cf6bd37614 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 f5202143e2..fb9b52fb86 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 3f4af5e1f6..91f1db23d6 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -37,4 +37,6 @@
                               (file-name-directory (or load-file-name
                                                        buffer-file-name)))))
 
+(setq ert-load-file-name load-file-name)
+
 ;;; perl-mode-tests.el ends here
diff --git a/test/lisp/progmodes/project-tests.el 
b/test/lisp/progmodes/project-tests.el
index a469414a74..d4b6bca7e8 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  Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 ;; Keywords:
 
diff --git a/test/lisp/progmodes/ps-mode-tests.el 
b/test/lisp/progmodes/ps-mode-tests.el
index eccc862ee3..7fa40eb0cb 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 15bda5c197..0eb1c087f4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -5449,15 +5449,21 @@ buffer with overlapping strings."
                     (python-nav-end-of-statement)))
     (should (eolp))))
 
-;; After call `run-python' the buffer running the python process is current.
-(ert-deftest python-tests--bug31398 ()
-  "Test for https://debbugs.gnu.org/31398 ."
+;; Interactively, `run-python' focuses the buffer running the
+;; interpreter.
+(ert-deftest python-tests--run-python-selects-window ()
+  "Test for bug#31398.  See also bug#44421 and bug#52380."
   (skip-unless (executable-find python-tests-shell-interpreter))
-  (let ((buffer (process-buffer (run-python nil nil 'show))))
-    (should (eq buffer (current-buffer)))
+  (let* ((buffer (process-buffer (run-python nil nil 'show)))
+         (window (get-buffer-window buffer)))
+    ;; We look at `selected-window' rather than `current-buffer'
+    ;; because as `(elisp)Current buffer' says, the latter will only
+    ;; be synchronized with the former when returning to the "command
+    ;; loop"; until then, `current-buffer' can change arbitrarily.
+    (should (eq window (selected-window)))
     (pop-to-buffer (other-buffer))
     (run-python nil nil 'show)
-    (should (eq buffer (current-buffer)))))
+    (should (eq window (selected-window)))))
 
 (ert-deftest python-tests--fill-long-first-line ()
   (should
diff --git a/test/lisp/progmodes/ruby-mode-tests.el 
b/test/lisp/progmodes/ruby-mode-tests.el
index 2168b38484..23e13b94e6 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/progmodes/scheme-tests.el 
b/test/lisp/progmodes/scheme-tests.el
index 8f2f75f81c..b36e85c770 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 c21010c8b4..ebd26ab429 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 1bbe3a95e9..7e36d845e2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 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 28a9445e01..7ce27e4df4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 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 e55eb6d901..d2346606c2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2022 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 b1de1a4df5..f7af5055c7 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 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 d468911dd3..35aa1a9bd1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 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 537a66737b..881a2f90e1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 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 a1f9bbb173..1382d00359 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 ;; Author: Juri Linkov <juri@linkov.net>
 
@@ -34,20 +34,18 @@
   (interactive "p")
   (push `(,arg b) repeat-tests-calls))
 
-(defvar repeat-tests-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map (kbd "C-x w a") 'repeat-tests-call-a)
-    map)
-  "Keymap for keys that initiate repeating sequences.")
-
-(defvar repeat-tests-repeat-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map "a" 'repeat-tests-call-a)
-    (define-key map "b" 'repeat-tests-call-b)
-    map)
-  "Keymap for repeating sequences.")
+(defvar-keymap repeat-tests-map
+  :doc "Keymap for keys that initiate repeating sequences."
+  "C-x w a" 'repeat-tests-call-a
+  "C-M-a"   'repeat-tests-call-a
+  "C-M-z"   'repeat-tests-call-a)
+
+(defvar-keymap repeat-tests-repeat-map
+  :doc "Keymap for repeating sequences."
+  "a" 'repeat-tests-call-a
+  "b" 'repeat-tests-call-b)
 (put 'repeat-tests-call-a 'repeat-map 'repeat-tests-repeat-map)
-(put 'repeat-tests-call-b 'repeat-map 'repeat-tests-repeat-map)
+(put 'repeat-tests-call-b 'repeat-map repeat-tests-repeat-map)
 
 (defmacro with-repeat-mode (&rest body)
   "Create environment for testing `repeat-mode'."
@@ -70,6 +68,38 @@
   ;; Check for self-inserting keys
   (should (equal (buffer-string) inserted)))
 
+(ert-deftest repeat-tests-check-key ()
+  (with-repeat-mode
+   (let ((repeat-echo-function 'ignore))
+     (let ((repeat-check-key t))
+       (repeat-tests--check
+        "C-x w a b a c"
+        '((1 a) (1 b) (1 a)) "c")
+       (repeat-tests--check
+        "M-C-a b a c"
+        '((1 a) (1 b) (1 a)) "c")
+       (repeat-tests--check
+        "M-C-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"
+              '((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"
+        '((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"
+              '((1 a)) "bac"))
+         (put 'repeat-tests-call-a 'repeat-check-key nil))))))
+
 (ert-deftest repeat-tests-exit-key ()
   (with-repeat-mode
    (let ((repeat-echo-function 'ignore))
diff --git a/test/lisp/replace-tests.el b/test/lisp/replace-tests.el
index 7f62a417a0..5ba11ed0d5 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Richard <youngfrog@members.fsf.org>
 ;; Author: Juri Linkov <juri@jurta.org>
@@ -599,11 +599,12 @@ bound to HIGHLIGHT-LOCUS."
     (with-temp-buffer
       (insert before)
       (goto-char (point-min))
-      (replace-regexp
-       "\\(\\(L\\)\\|\\(R\\)\\)"
-       '(replace-eval-replacement
-         replace-quote
-         (if (match-string 2) "R" "L")))
+      (with-suppressed-warnings ((interactive-only replace-regexp))
+        (replace-regexp
+         "\\(\\(L\\)\\|\\(R\\)\\)"
+         '(replace-eval-replacement
+           replace-quote
+           (if (match-string 2) "R" "L"))))
       (should (equal (buffer-string) after)))))
 
 (ert-deftest test-count-matches ()
diff --git a/test/lisp/rot13-tests.el b/test/lisp/rot13-tests.el
index 374d4ebaa8..bbe9531666 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 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 190ffb7828..6f66f3fa34 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 8391a75f49..2bad8e7d48 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/ses-tests.el b/test/lisp/ses-tests.el
index 9a7fb502d7..cd524cbf6e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
 
 ;; Author: Vincent Belaïche <vincentb1@users.sourceforge.net>
 
@@ -24,6 +24,10 @@
 (require 'ert)
 (require 'ses)
 
+;; Silence byte-compiler.
+(with-suppressed-warnings ((lexical A2) (lexical A3))
+  (defvar A2)
+  (defvar A3))
 
 ;; PLAIN FORMULA TESTS
 ;; ======================================================================
diff --git a/test/lisp/shadowfile-tests.el b/test/lisp/shadowfile-tests.el
index 1ab539f3e4..46ab34535d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2022 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 342b421911..f2cd2f6aea 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2022 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 742da0bde5..6350bebeee 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 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 696206efe2..11c018b36c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 87adf826ab..2cde241d0b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 4980a7e1bc..cf89cff558 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 f542806ac1..852e7811cc 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 cda5ae497f..d83ed34e27 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 b598366ba7..317513e9a9 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 62b89c1825..7f49cc38d1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 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 aa3609e5db..0ac0ddd666 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 
diff --git a/test/lisp/startup-tests.el b/test/lisp/startup-tests.el
index 109d909622..01ed3a69fd 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 e02de952f2..9be7511bdc 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
 
 ;; Author: Oleh Krehel <ohwoeowho@gmail.com>,
 ;;         Nicolas Petton <nicolas@petton.fr>
@@ -926,6 +926,7 @@ See https://debbugs.gnu.org/cgi/bugreport.cgi?bug=19350.";
   (should-not (apropos-internal "^next-line$" #'keymapp)))
 
 
+(defvar test-global-boundp)
 (ert-deftest test-buffer-local-boundp ()
   (let ((buf (generate-new-buffer "boundp")))
     (with-current-buffer buf
diff --git a/test/lisp/tab-bar-tests.el b/test/lisp/tab-bar-tests.el
new file mode 100644
index 0000000000..6d57146cd0
--- /dev/null
+++ b/test/lisp/tab-bar-tests.el
@@ -0,0 +1,51 @@
+;;; tab-bar-tests.el --- Tests for tab-bar.el          -*- lexical-binding: t; 
-*-
+
+;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
+
+;; Author: Juri Linkov <juri@linkov.net>
+
+;; 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)
+
+(defun tab-bar-tests-close-other-tabs (arg)
+  (tab-bar-tabs-set nil)
+  (tab-rename "1")
+  (tab-new) (tab-rename "2") ;; (tab-switch "2")
+  (tab-new) (tab-rename "3") ;; (tab-switch "3")
+  (should (eq (length (tab-bar-tabs)) 3))
+  (should (equal (alist-get 'name (tab-bar--current-tab-find)) "3"))
+  (tab-bar-close-other-tabs arg)
+  (should (equal (alist-get 'name (tab-bar--current-tab-find))
+                 (if arg (number-to-string (max 1 (min arg 3))) "3")))
+  (should (eq (length (tab-bar-tabs)) 1))
+  (should (eq (length tab-bar-closed-tabs) 2))
+  (tab-undo)
+  (tab-undo)
+  (should (equal (tab-undo) "No more closed tabs to undo"))
+  (should (eq (length (tab-bar-tabs)) 3))
+  (should (eq (length tab-bar-closed-tabs) 0)))
+
+(ert-deftest tab-bar-tests-close-other-tabs-default ()
+  (tab-bar-tests-close-other-tabs nil))
+
+(ert-deftest tab-bar-tests-close-other-tabs-with-arg ()
+  (dotimes (i 5) (tab-bar-tests-close-other-tabs i)))
+
+(provide 'tab-bar-tests)
+;;; tab-bar-tests.el ends here
diff --git a/test/lisp/tabify-tests.el b/test/lisp/tabify-tests.el
index 4896e4a1aa..eaa3527df0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 6964d42318..47c658eb9a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -32,7 +32,8 @@
                      (cons 1024 "-----S---")
                      (cons 2048 "--S------"))))
     (dolist (x alist)
-      (should (equal (cdr x) (tar-grind-file-mode (car x)))))))
+      (with-suppressed-warnings ((obsolete tar-grind-file-mode))
+        (should (equal (cdr x) (tar-grind-file-mode (car x))))))))
 
 (ert-deftest tar-mode-test-tar-extract-gz ()
   (skip-unless (executable-find "gzip"))
diff --git a/test/lisp/tempo-tests.el b/test/lisp/tempo-tests.el
index 7594c360ad..52553d791f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 73d39cf3b6..f60d2ff574 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017, 2019-2022 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 d0e739b5ec..e55b10511e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 010808ce48..1bf15d1729 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 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 9c4fd1afdf..2b4fde40c3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 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 abf85dbff4..0ae1593508 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 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 1be5291509..40896cf2f3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
 
 ;; Author: Peder O. Klingenberg <peder@klingenberg.no>
 ;; Keywords: dns zone
diff --git a/test/lisp/textmodes/fill-tests.el 
b/test/lisp/textmodes/fill-tests.el
index 2a1195b87e..a3265e2445 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 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 ad386bf1bd..f09a768f98 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
 
 ;; Keywords: tests
 
diff --git a/test/lisp/textmodes/page-tests.el 
b/test/lisp/textmodes/page-tests.el
index c02d125c2a..596f3a6ceb 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 712169029d..e54b459b20 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 c75cb5eae7..982d3404ff 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 cc5b23e1c9..9ef41088d1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 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 b4c0186aac..d08851eb41 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 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 fa0c4de005..48cc5fece2 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 3ee3cd6fb1..a663bc2996 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2022 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 481c9cca42..acc72a78a0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 f2031fa79a..b6d0b1446a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -215,12 +215,4 @@ position to retrieve THING.")
   (should (equal (test--number "0xf00" 2) 3840))
   (should (equal (test--number "0xf00" 3) 3840)))
 
-(ert-deftest test-fields ()
-  (with-temp-buffer
-    (insert (propertize "foo" 'field 1) "bar" (propertize "zot" 'field 2))
-    (goto-char 1)
-    (should (eq (symbol-at-point) 'foo))
-    (goto-char 5)
-    (should (eq (symbol-at-point) 'bar))))
-
 ;;; thingatpt-tests.el ends here
diff --git a/test/lisp/thread-tests.el b/test/lisp/thread-tests.el
index 4aed5057ff..108fa8cb98 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2022 Free Software Foundation, Inc.
 
 ;; Author: Gemini Lasswell <gazally@runbox.com>
 ;; Keywords: threads
diff --git a/test/lisp/thumbs-tests.el b/test/lisp/thumbs-tests.el
index a9b41d7c00..a8972394fa 100644
--- a/test/lisp/thumbs-tests.el
+++ b/test/lisp/thumbs-tests.el
@@ -1,6 +1,6 @@
 ;;; thumbs-tests.el --- tests for thumbs.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2021 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/time-stamp-tests.el b/test/lisp/time-stamp-tests.el
index cb446eb486..d52a19ef5d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -595,8 +595,12 @@
      ;; incorrectly nested parens do not crash us
      (should-not (equal (time-stamp-string "%(stuffB" ref-time3) May))
      (should-not (equal (time-stamp-string "%)B" ref-time3) May))
+     ;; unterminated format does not crash us
+     (should-not (equal (time-stamp-string "%" ref-time3) May))
      ;; not all punctuation is allowed
-     (should-not (equal (time-stamp-string "%&B" ref-time3) May)))))
+     (should-not (equal (time-stamp-string "%&B" ref-time3) May))
+     (should-not (equal (time-stamp-string "%/B" ref-time3) May))
+     (should-not (equal (time-stamp-string "%;B" ref-time3) May)))))
 
 (ert-deftest time-stamp-format-non-conversions ()
   "Test that without a %, the text is copied literally."
@@ -635,8 +639,8 @@
                      (concat Mon "." Monday "." Mon)))
       (should (equal (time-stamp-string "%5z.%5::z.%5z" ref-time1)
                      "+0000.+00:00:00.+0000"))
-      ;; format letter is independent
-      (should (equal (time-stamp-string "%H:%M" ref-time1) "15:04")))))
+      ;; format character is independent
+      (should (equal (time-stamp-string "%H:%M%%%S" ref-time1) "15:04%05")))))
 
 (ert-deftest time-stamp-format-string-width ()
   "Test time-stamp string width modifiers."
diff --git a/test/lisp/time-tests.el b/test/lisp/time-tests.el
index 89e6985b84..a95871eb56 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 9bbe36cfe8..a87f262376 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 05ccfc0d12..fa6ecdce39 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 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 d084c7a8bc..3396284682 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 52124dfedd..a9695c6a19 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2022 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 18365c7969..9fe3cb38eb 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2022 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 8b0e20c4dd..5083fc5aba 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 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 71e054b128..f43e9651f5 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2022 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 40c6edbd61..df561eb888 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2022 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 a7f81eba8f..c115da1e4b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2022 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 63d752ac3a..033c17444d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 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 57b67a04cc..8c042c0135 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
 
 ;; Author: Teodor Zlatanov <tzz@lifelogs.com>
 ;; Keywords: data
diff --git a/test/lisp/vc/add-log-tests.el b/test/lisp/vc/add-log-tests.el
index 70e49fe57f..bb6841b645 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 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 909d5620de..19e3dbb42a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
 
 ;; Author: Dima Kogan <dima@secretsauce.net>
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/test/lisp/vc/ediff-diff-tests.el b/test/lisp/vc/ediff-diff-tests.el
index 001db8b0c4..b0ceb4792c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 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 0f09616a81..935046198f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 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 84e363ad69..e1fe8fcf1c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 d7827c7a8c..713df4c6e7 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 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 afced819fb..12f1e9034c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 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
new file mode 100644
index 0000000000..dc9641ed46
--- /dev/null
+++ b/test/lisp/vc/vc-git-tests.el
@@ -0,0 +1,67 @@
+;;; vc-git-tests.el --- tests for vc/vc-git.el  -*- lexical-binding:t -*-
+
+;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
+
+;; Author: Justin Schell <justinmschell@gmail.com>
+;; Maintainer: emacs-devel@gnu.org
+
+;; 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 'vc-git)
+
+(ert-deftest vc-git-test-program-version-general ()
+  (vc-git-test--run-program-version-test
+   "git version 2.30.1.0"
+   "2.30.1.0"))
+
+(ert-deftest vc-git-test-program-version-windows ()
+  (vc-git-test--run-program-version-test
+   "git version 2.30.1.1.windows.1"
+   "2.30.1.1"))
+
+(ert-deftest vc-git-test-program-version-apple ()
+  (vc-git-test--run-program-version-test
+   "git version 2.30.1.2 (Apple Git-130)"
+   "2.30.1.2"))
+
+(ert-deftest vc-git-test-program-version-other ()
+  (vc-git-test--run-program-version-test
+   "git version 2.30.1.3.foo.bar"
+   "2.30.1.3"))
+
+(ert-deftest vc-git-test-program-version-invalid-leading-string ()
+  (vc-git-test--run-program-version-test
+   "git version foo.bar.2.30.1.4"
+   "0"))
+
+(ert-deftest vc-git-test-program-version-invalid-leading-dot ()
+  (vc-git-test--run-program-version-test
+   "git version .2.30.1.5"
+   "0"))
+
+(defun vc-git-test--run-program-version-test
+    (mock-version-string expected-output)
+  (cl-letf* (((symbol-function 'vc-git--run-command-string)
+              (lambda (_file _args) mock-version-string))
+             (vc-git--program-version nil)
+             (actual-output (vc-git--program-version)))
+    (should (equal actual-output expected-output))))
+
+;;; vc-git-tests.el ends here
diff --git a/test/lisp/vc/vc-hg-tests.el b/test/lisp/vc/vc-hg-tests.el
index 2edd4b6fd7..2cceceb2c8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 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 578d7ebb41..7bf5ae6bc1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2022 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 ef2e945305..25dcc3d30c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 47ed26f609..58caa1deda 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2022 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 1001476a28..07eaad4862 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/lisp/wid-edit-tests.el b/test/lisp/wid-edit-tests.el
index f843649784..34c96f1c93 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 67cd940193..e8e103348b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 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 7c64ef39f8..eecf6406fb 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2022 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 72659ddf99..9318e8ef59 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
 
 ;; Author: Philipp Stephani <phst@google.com>
 
diff --git a/test/manual/biditest.el b/test/manual/biditest.el
index c84e7ed731..d7fa359bf8 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 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 d68b5b8c09..b365908c63 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
@@ -252,9 +252,7 @@ Optional argument TITLE is the title of this testing 
session."
 (defun cedet-utest-elapsed-time (start end)
   "Copied from elp.el.  Was elp-elapsed-time.
 Argument START and END bound the time being calculated."
-  (+ (* (- (car end) (car start)) 65536.0)
-     (- (car (cdr end)) (car (cdr start)))
-     (/ (- (car (cdr (cdr end))) (car (cdr (cdr start)))) 1000000.0)))
+  (float-time (time-subtract start end)))
 
 (defun cedet-utest-log-shutdown (title &optional _errorcondition)
   "Shut-down a larger test suite.
diff --git a/test/manual/cedet/ede-tests.el b/test/manual/cedet/ede-tests.el
index 17618381ef..c23e098481 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2022 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 3e416cc6b2..dcdeb45b0a 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-2021  Free Software Foundation, Inc.
+;; Copyright (C) 2003-2022 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 2cdaf4fb0a..6efaa8a75e 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2001-2022 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 34c03619f8..a523438f68 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2022 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 
@@ -63,11 +63,11 @@
 
 ;;; Methods
 ;;
-(defmethod a-method ((obj some-class) &optional arg2)
+(cl-defmethod a-method ((obj some-class) &optional arg2)
   "Doc String for a method."
   (call-next-method))
 
-(defgeneric a-generic (arg1 arg2)
+(cl-defgeneric a-generic (arg1 arg2)
   "General description of a-generic.")
 
 ;;; Advice
diff --git a/test/manual/cedet/tests/test.make 
b/test/manual/cedet/tests/test.make
index 9841567b6b..80c0c8051c 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-2021 Free Software Foundation, Inc.
+# Copyright (C) 2001-2002, 2010-2022 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 e4befcf0ff..ba64e39a7a 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-2021 Free Software Foundation, Inc.
+ * Copyright (C) 2009-2022 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 2698f48d5f..74b336172c 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2007-2022 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 42a22e14b0..54ae3f0323 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2007-2022 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 d546d61bff..c359fa7d69 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 2007-2022 Free Software Foundation, Inc.
 
    Author: Eric M. Ludlam <zappo@gnu.org>
 
diff --git a/test/manual/etags/ETAGS.good_1 b/test/manual/etags/ETAGS.good_1
index 4eae68b5c2..1b4f80ceaa 100644
--- a/test/manual/etags/ETAGS.good_1
+++ b/test/manual/etags/ETAGS.good_1
@@ -2202,73 +2202,73 @@ el-src/emacs/lisp/progmodes/etags.el,5069
 (defun visit-tags-table-buffer 543,22204
 (defun tags-reset-tags-tables 712,28514
 (defun file-of-tag 731,29171
-(defun tags-table-files 740,29520
-(defun tags-included-tables 749,29870
-(defun tags-completion-table 755,30116
-(defun tags-lazy-completion-table 783,31310
-(defun tags-completion-at-point-function 799,31945
-(defun find-tag-tag 818,32695
-(defvar last-tag 837,33368
-(defun find-tag-interactive 840,33427
-(defvar find-tag-history 852,33842
-(defun find-tag-noselect 860,34012
-(defun find-tag 932,37126
-(defun find-tag-other-window 959,38342
-(defun find-tag-other-frame 1000,40270
-(defun find-tag-regexp 1025,41444
-(defalias 'pop-tag-mark pop-tag-mark1049,42606
-(defvar tag-lines-already-matched 1052,42657
-(defun find-tag-in-order 1055,42764
-(defun tag-find-file-of-tag-noselect 1167,47110
-(defun tag-find-file-of-tag 1200,48956
-(defun etags-recognize-tags-table 1208,49182
-(defun etags-verify-tags-table 1241,50813
-(defun etags-file-of-tag 1246,51011
-(defun etags-tags-completion-table 1256,51346
-(defun etags-snarf-tag 1286,52552
-(defun etags-goto-tag-location 1324,54121
-(defun etags-list-tags 1388,56564
-(defmacro tags-with-face 1423,57839
-(defun etags-tags-apropos-additional 1431,58172
-(defun etags-tags-apropos 1465,59409
-(defun etags-tags-table-files 1527,61618
-(defun etags-tags-included-tables 1542,62054
-(defun tags-recognize-empty-tags-table 1559,62594
-(defun tag-exact-file-name-match-p 1587,63740
-(defun tag-file-name-match-p 1596,64133
-(defun tag-exact-match-p 1609,64689
-(defun tag-implicit-name-match-p 1620,65257
-(defun tag-symbol-match-p 1633,65857
-(defun tag-word-match-p 1643,66293
-(defun tag-partial-file-name-match-p 1652,66691
-(defun tag-any-match-p 1662,67135
-(defun tag-re-match-p 1667,67319
-(defcustom tags-loop-revert-buffers 1675,67568
-(defun next-file 1685,67977
-(defvar tags-loop-operate 1760,70891
-(defvar tags-loop-scan1763,70985
-(defun tags-loop-eval 1771,71314
-(defun tags-loop-continue 1782,71643
-(defun tags-search 1850,73949
-(defun tags-query-replace 1871,74775
-(defun tags-complete-tags-table-file 1896,75999
-(defun list-tags 1906,76378
-(defun tags-apropos 1934,77331
-(define-button-type 'tags-select-tags-tabletags-select-tags-table1957,78157
-(defun select-tags-table 1964,78396
-(defvar select-tags-table-mode-map 2019,80523
-(define-derived-mode select-tags-table-mode 2030,80906
-(defun select-tags-table-select 2034,81090
-(defun select-tags-table-quit 2043,81456
-(defun complete-tag 2049,81611
-(defconst etags--xref-limit 2074,82552
-(defvar etags-xref-find-definitions-tag-order 2076,82587
-(defun etags-xref-find 2082,82877
-(defun etags--xref-find-definitions 2096,83406
-(defclass xref-etags-location 2129,85120
-(defun xref-make-etags-location 2135,85343
-(cl-defmethod xref-location-marker 2139,85498
-(cl-defmethod xref-location-line 2146,85742
+(defun tags-table-files 740,29521
+(defun tags-included-tables 749,29871
+(defun tags-completion-table 755,30117
+(defun tags-lazy-completion-table 783,31311
+(defun tags-completion-at-point-function 799,31946
+(defun find-tag-tag 818,32696
+(defvar last-tag 837,33369
+(defun find-tag-interactive 840,33428
+(defvar find-tag-history 852,33843
+(defun find-tag-noselect 860,34013
+(defun find-tag 932,37127
+(defun find-tag-other-window 959,38343
+(defun find-tag-other-frame 1000,40271
+(defun find-tag-regexp 1025,41445
+(defalias 'pop-tag-mark pop-tag-mark1049,42607
+(defvar tag-lines-already-matched 1052,42658
+(defun find-tag-in-order 1055,42765
+(defun tag-find-file-of-tag-noselect 1167,47111
+(defun tag-find-file-of-tag 1200,48957
+(defun etags-recognize-tags-table 1208,49183
+(defun etags-verify-tags-table 1241,50814
+(defun etags-file-of-tag 1246,51012
+(defun etags-tags-completion-table 1256,51347
+(defun etags-snarf-tag 1286,52553
+(defun etags-goto-tag-location 1324,54122
+(defun etags-list-tags 1388,56565
+(defmacro tags-with-face 1423,57840
+(defun etags-tags-apropos-additional 1431,58173
+(defun etags-tags-apropos 1465,59410
+(defun etags-tags-table-files 1527,61619
+(defun etags-tags-included-tables 1542,62055
+(defun tags-recognize-empty-tags-table 1559,62595
+(defun tag-exact-file-name-match-p 1587,63741
+(defun tag-file-name-match-p 1596,64134
+(defun tag-exact-match-p 1609,64690
+(defun tag-implicit-name-match-p 1620,65258
+(defun tag-symbol-match-p 1633,65858
+(defun tag-word-match-p 1643,66294
+(defun tag-partial-file-name-match-p 1652,66692
+(defun tag-any-match-p 1662,67136
+(defun tag-re-match-p 1667,67320
+(defcustom tags-loop-revert-buffers 1675,67569
+(defun next-file 1685,67978
+(defvar tags-loop-operate 1760,70892
+(defvar tags-loop-scan1763,70986
+(defun tags-loop-eval 1771,71315
+(defun tags-loop-continue 1782,71644
+(defun tags-search 1850,73950
+(defun tags-query-replace 1871,74776
+(defun tags-complete-tags-table-file 1896,76000
+(defun list-tags 1906,76379
+(defun tags-apropos 1934,77332
+(define-button-type 'tags-select-tags-tabletags-select-tags-table1957,78158
+(defun select-tags-table 1964,78397
+(defvar select-tags-table-mode-map 2019,80524
+(define-derived-mode select-tags-table-mode 2030,80907
+(defun select-tags-table-select 2034,81091
+(defun select-tags-table-quit 2043,81457
+(defun complete-tag 2049,81612
+(defconst etags--xref-limit 2074,82553
+(defvar etags-xref-find-definitions-tag-order 2076,82588
+(defun etags-xref-find 2082,82878
+(defun etags--xref-find-definitions 2096,83407
+(defclass xref-etags-location 2129,85121
+(defun xref-make-etags-location 2135,85344
+(cl-defmethod xref-location-marker 2139,85499
+(cl-defmethod xref-location-line 2146,85743
 
 erl-src/gs_dialog.erl,98
 -define(VERSION2,32
diff --git a/test/manual/etags/ETAGS.good_2 b/test/manual/etags/ETAGS.good_2
index 45979d6a76..124aa7fc1c 100644
--- a/test/manual/etags/ETAGS.good_2
+++ b/test/manual/etags/ETAGS.good_2
@@ -2771,76 +2771,76 @@ el-src/emacs/lisp/progmodes/etags.el,5188
 (defun visit-tags-table-buffer 543,22204
 (defun tags-reset-tags-tables 712,28514
 (defun file-of-tag 731,29171
-(defun tags-table-files 740,29520
-(defun tags-included-tables 749,29870
-(defun tags-completion-table 755,30116
-(defun tags-lazy-completion-table 783,31310
-(defun tags-completion-at-point-function 799,31945
-(defun find-tag-tag 818,32695
-(defvar last-tag 837,33368
-(defun find-tag-interactive 840,33427
-(defvar find-tag-history 852,33842
-(defvar etags-case-fold-search)855,33907
-(defvar etags-syntax-table)856,33939
-(defvar local-find-tag-hook)857,33967
-(defun find-tag-noselect 860,34012
-(defun find-tag 932,37126
-(defun find-tag-other-window 959,38342
-(defun find-tag-other-frame 1000,40270
-(defun find-tag-regexp 1025,41444
-(defalias 'pop-tag-mark pop-tag-mark1049,42606
-(defvar tag-lines-already-matched 1052,42657
-(defun find-tag-in-order 1055,42764
-(defun tag-find-file-of-tag-noselect 1167,47110
-(defun tag-find-file-of-tag 1200,48956
-(defun etags-recognize-tags-table 1208,49182
-(defun etags-verify-tags-table 1241,50813
-(defun etags-file-of-tag 1246,51011
-(defun etags-tags-completion-table 1256,51346
-(defun etags-snarf-tag 1286,52552
-(defun etags-goto-tag-location 1324,54121
-(defun etags-list-tags 1388,56564
-(defmacro tags-with-face 1423,57839
-(defun etags-tags-apropos-additional 1431,58172
-(defun etags-tags-apropos 1465,59409
-(defun etags-tags-table-files 1527,61618
-(defun etags-tags-included-tables 1542,62054
-(defun tags-recognize-empty-tags-table 1559,62594
-(defun tag-exact-file-name-match-p 1587,63740
-(defun tag-file-name-match-p 1596,64133
-(defun tag-exact-match-p 1609,64689
-(defun tag-implicit-name-match-p 1620,65257
-(defun tag-symbol-match-p 1633,65857
-(defun tag-word-match-p 1643,66293
-(defun tag-partial-file-name-match-p 1652,66691
-(defun tag-any-match-p 1662,67135
-(defun tag-re-match-p 1667,67319
-(defcustom tags-loop-revert-buffers 1675,67568
-(defun next-file 1685,67977
-(defvar tags-loop-operate 1760,70891
-(defvar tags-loop-scan1763,70985
-(defun tags-loop-eval 1771,71314
-(defun tags-loop-continue 1782,71643
-(defun tags-search 1850,73949
-(defun tags-query-replace 1871,74775
-(defun tags-complete-tags-table-file 1896,75999
-(defun list-tags 1906,76378
-(defun tags-apropos 1934,77331
-(define-button-type 'tags-select-tags-tabletags-select-tags-table1957,78157
-(defun select-tags-table 1964,78396
-(defvar select-tags-table-mode-map 2019,80523
-(define-derived-mode select-tags-table-mode 2030,80906
-(defun select-tags-table-select 2034,81090
-(defun select-tags-table-quit 2043,81456
-(defun complete-tag 2049,81611
-(defconst etags--xref-limit 2074,82552
-(defvar etags-xref-find-definitions-tag-order 2076,82587
-(defun etags-xref-find 2082,82877
-(defun etags--xref-find-definitions 2096,83406
-(defclass xref-etags-location 2129,85120
-(defun xref-make-etags-location 2135,85343
-(cl-defmethod xref-location-marker 2139,85498
-(cl-defmethod xref-location-line 2146,85742
+(defun tags-table-files 740,29521
+(defun tags-included-tables 749,29871
+(defun tags-completion-table 755,30117
+(defun tags-lazy-completion-table 783,31311
+(defun tags-completion-at-point-function 799,31946
+(defun find-tag-tag 818,32696
+(defvar last-tag 837,33369
+(defun find-tag-interactive 840,33428
+(defvar find-tag-history 852,33843
+(defvar etags-case-fold-search)855,33908
+(defvar etags-syntax-table)856,33940
+(defvar local-find-tag-hook)857,33968
+(defun find-tag-noselect 860,34013
+(defun find-tag 932,37127
+(defun find-tag-other-window 959,38343
+(defun find-tag-other-frame 1000,40271
+(defun find-tag-regexp 1025,41445
+(defalias 'pop-tag-mark pop-tag-mark1049,42607
+(defvar tag-lines-already-matched 1052,42658
+(defun find-tag-in-order 1055,42765
+(defun tag-find-file-of-tag-noselect 1167,47111
+(defun tag-find-file-of-tag 1200,48957
+(defun etags-recognize-tags-table 1208,49183
+(defun etags-verify-tags-table 1241,50814
+(defun etags-file-of-tag 1246,51012
+(defun etags-tags-completion-table 1256,51347
+(defun etags-snarf-tag 1286,52553
+(defun etags-goto-tag-location 1324,54122
+(defun etags-list-tags 1388,56565
+(defmacro tags-with-face 1423,57840
+(defun etags-tags-apropos-additional 1431,58173
+(defun etags-tags-apropos 1465,59410
+(defun etags-tags-table-files 1527,61619
+(defun etags-tags-included-tables 1542,62055
+(defun tags-recognize-empty-tags-table 1559,62595
+(defun tag-exact-file-name-match-p 1587,63741
+(defun tag-file-name-match-p 1596,64134
+(defun tag-exact-match-p 1609,64690
+(defun tag-implicit-name-match-p 1620,65258
+(defun tag-symbol-match-p 1633,65858
+(defun tag-word-match-p 1643,66294
+(defun tag-partial-file-name-match-p 1652,66692
+(defun tag-any-match-p 1662,67136
+(defun tag-re-match-p 1667,67320
+(defcustom tags-loop-revert-buffers 1675,67569
+(defun next-file 1685,67978
+(defvar tags-loop-operate 1760,70892
+(defvar tags-loop-scan1763,70986
+(defun tags-loop-eval 1771,71315
+(defun tags-loop-continue 1782,71644
+(defun tags-search 1850,73950
+(defun tags-query-replace 1871,74776
+(defun tags-complete-tags-table-file 1896,76000
+(defun list-tags 1906,76379
+(defun tags-apropos 1934,77332
+(define-button-type 'tags-select-tags-tabletags-select-tags-table1957,78158
+(defun select-tags-table 1964,78397
+(defvar select-tags-table-mode-map 2019,80524
+(define-derived-mode select-tags-table-mode 2030,80907
+(defun select-tags-table-select 2034,81091
+(defun select-tags-table-quit 2043,81457
+(defun complete-tag 2049,81612
+(defconst etags--xref-limit 2074,82553
+(defvar etags-xref-find-definitions-tag-order 2076,82588
+(defun etags-xref-find 2082,82878
+(defun etags--xref-find-definitions 2096,83407
+(defclass xref-etags-location 2129,85121
+(defun xref-make-etags-location 2135,85344
+(cl-defmethod xref-location-marker 2139,85499
+(cl-defmethod xref-location-line 2146,85743
 
 erl-src/gs_dialog.erl,98
 -define(VERSION2,32
diff --git a/test/manual/etags/ETAGS.good_3 b/test/manual/etags/ETAGS.good_3
index 36edc38961..9dca0084de 100644
--- a/test/manual/etags/ETAGS.good_3
+++ b/test/manual/etags/ETAGS.good_3
@@ -2579,73 +2579,73 @@ el-src/emacs/lisp/progmodes/etags.el,5069
 (defun visit-tags-table-buffer 543,22204
 (defun tags-reset-tags-tables 712,28514
 (defun file-of-tag 731,29171
-(defun tags-table-files 740,29520
-(defun tags-included-tables 749,29870
-(defun tags-completion-table 755,30116
-(defun tags-lazy-completion-table 783,31310
-(defun tags-completion-at-point-function 799,31945
-(defun find-tag-tag 818,32695
-(defvar last-tag 837,33368
-(defun find-tag-interactive 840,33427
-(defvar find-tag-history 852,33842
-(defun find-tag-noselect 860,34012
-(defun find-tag 932,37126
-(defun find-tag-other-window 959,38342
-(defun find-tag-other-frame 1000,40270
-(defun find-tag-regexp 1025,41444
-(defalias 'pop-tag-mark pop-tag-mark1049,42606
-(defvar tag-lines-already-matched 1052,42657
-(defun find-tag-in-order 1055,42764
-(defun tag-find-file-of-tag-noselect 1167,47110
-(defun tag-find-file-of-tag 1200,48956
-(defun etags-recognize-tags-table 1208,49182
-(defun etags-verify-tags-table 1241,50813
-(defun etags-file-of-tag 1246,51011
-(defun etags-tags-completion-table 1256,51346
-(defun etags-snarf-tag 1286,52552
-(defun etags-goto-tag-location 1324,54121
-(defun etags-list-tags 1388,56564
-(defmacro tags-with-face 1423,57839
-(defun etags-tags-apropos-additional 1431,58172
-(defun etags-tags-apropos 1465,59409
-(defun etags-tags-table-files 1527,61618
-(defun etags-tags-included-tables 1542,62054
-(defun tags-recognize-empty-tags-table 1559,62594
-(defun tag-exact-file-name-match-p 1587,63740
-(defun tag-file-name-match-p 1596,64133
-(defun tag-exact-match-p 1609,64689
-(defun tag-implicit-name-match-p 1620,65257
-(defun tag-symbol-match-p 1633,65857
-(defun tag-word-match-p 1643,66293
-(defun tag-partial-file-name-match-p 1652,66691
-(defun tag-any-match-p 1662,67135
-(defun tag-re-match-p 1667,67319
-(defcustom tags-loop-revert-buffers 1675,67568
-(defun next-file 1685,67977
-(defvar tags-loop-operate 1760,70891
-(defvar tags-loop-scan1763,70985
-(defun tags-loop-eval 1771,71314
-(defun tags-loop-continue 1782,71643
-(defun tags-search 1850,73949
-(defun tags-query-replace 1871,74775
-(defun tags-complete-tags-table-file 1896,75999
-(defun list-tags 1906,76378
-(defun tags-apropos 1934,77331
-(define-button-type 'tags-select-tags-tabletags-select-tags-table1957,78157
-(defun select-tags-table 1964,78396
-(defvar select-tags-table-mode-map 2019,80523
-(define-derived-mode select-tags-table-mode 2030,80906
-(defun select-tags-table-select 2034,81090
-(defun select-tags-table-quit 2043,81456
-(defun complete-tag 2049,81611
-(defconst etags--xref-limit 2074,82552
-(defvar etags-xref-find-definitions-tag-order 2076,82587
-(defun etags-xref-find 2082,82877
-(defun etags--xref-find-definitions 2096,83406
-(defclass xref-etags-location 2129,85120
-(defun xref-make-etags-location 2135,85343
-(cl-defmethod xref-location-marker 2139,85498
-(cl-defmethod xref-location-line 2146,85742
+(defun tags-table-files 740,29521
+(defun tags-included-tables 749,29871
+(defun tags-completion-table 755,30117
+(defun tags-lazy-completion-table 783,31311
+(defun tags-completion-at-point-function 799,31946
+(defun find-tag-tag 818,32696
+(defvar last-tag 837,33369
+(defun find-tag-interactive 840,33428
+(defvar find-tag-history 852,33843
+(defun find-tag-noselect 860,34013
+(defun find-tag 932,37127
+(defun find-tag-other-window 959,38343
+(defun find-tag-other-frame 1000,40271
+(defun find-tag-regexp 1025,41445
+(defalias 'pop-tag-mark pop-tag-mark1049,42607
+(defvar tag-lines-already-matched 1052,42658
+(defun find-tag-in-order 1055,42765
+(defun tag-find-file-of-tag-noselect 1167,47111
+(defun tag-find-file-of-tag 1200,48957
+(defun etags-recognize-tags-table 1208,49183
+(defun etags-verify-tags-table 1241,50814
+(defun etags-file-of-tag 1246,51012
+(defun etags-tags-completion-table 1256,51347
+(defun etags-snarf-tag 1286,52553
+(defun etags-goto-tag-location 1324,54122
+(defun etags-list-tags 1388,56565
+(defmacro tags-with-face 1423,57840
+(defun etags-tags-apropos-additional 1431,58173
+(defun etags-tags-apropos 1465,59410
+(defun etags-tags-table-files 1527,61619
+(defun etags-tags-included-tables 1542,62055
+(defun tags-recognize-empty-tags-table 1559,62595
+(defun tag-exact-file-name-match-p 1587,63741
+(defun tag-file-name-match-p 1596,64134
+(defun tag-exact-match-p 1609,64690
+(defun tag-implicit-name-match-p 1620,65258
+(defun tag-symbol-match-p 1633,65858
+(defun tag-word-match-p 1643,66294
+(defun tag-partial-file-name-match-p 1652,66692
+(defun tag-any-match-p 1662,67136
+(defun tag-re-match-p 1667,67320
+(defcustom tags-loop-revert-buffers 1675,67569
+(defun next-file 1685,67978
+(defvar tags-loop-operate 1760,70892
+(defvar tags-loop-scan1763,70986
+(defun tags-loop-eval 1771,71315
+(defun tags-loop-continue 1782,71644
+(defun tags-search 1850,73950
+(defun tags-query-replace 1871,74776
+(defun tags-complete-tags-table-file 1896,76000
+(defun list-tags 1906,76379
+(defun tags-apropos 1934,77332
+(define-button-type 'tags-select-tags-tabletags-select-tags-table1957,78158
+(defun select-tags-table 1964,78397
+(defvar select-tags-table-mode-map 2019,80524
+(define-derived-mode select-tags-table-mode 2030,80907
+(defun select-tags-table-select 2034,81091
+(defun select-tags-table-quit 2043,81457
+(defun complete-tag 2049,81612
+(defconst etags--xref-limit 2074,82553
+(defvar etags-xref-find-definitions-tag-order 2076,82588
+(defun etags-xref-find 2082,82878
+(defun etags--xref-find-definitions 2096,83407
+(defclass xref-etags-location 2129,85121
+(defun xref-make-etags-location 2135,85344
+(cl-defmethod xref-location-marker 2139,85499
+(cl-defmethod xref-location-line 2146,85743
 
 erl-src/gs_dialog.erl,98
 -define(VERSION2,32
diff --git a/test/manual/etags/ETAGS.good_4 b/test/manual/etags/ETAGS.good_4
index e726a993a9..8527ed726e 100644
--- a/test/manual/etags/ETAGS.good_4
+++ b/test/manual/etags/ETAGS.good_4
@@ -2364,73 +2364,73 @@ el-src/emacs/lisp/progmodes/etags.el,5069
 (defun visit-tags-table-buffer 543,22204
 (defun tags-reset-tags-tables 712,28514
 (defun file-of-tag 731,29171
-(defun tags-table-files 740,29520
-(defun tags-included-tables 749,29870
-(defun tags-completion-table 755,30116
-(defun tags-lazy-completion-table 783,31310
-(defun tags-completion-at-point-function 799,31945
-(defun find-tag-tag 818,32695
-(defvar last-tag 837,33368
-(defun find-tag-interactive 840,33427
-(defvar find-tag-history 852,33842
-(defun find-tag-noselect 860,34012
-(defun find-tag 932,37126
-(defun find-tag-other-window 959,38342
-(defun find-tag-other-frame 1000,40270
-(defun find-tag-regexp 1025,41444
-(defalias 'pop-tag-mark pop-tag-mark1049,42606
-(defvar tag-lines-already-matched 1052,42657
-(defun find-tag-in-order 1055,42764
-(defun tag-find-file-of-tag-noselect 1167,47110
-(defun tag-find-file-of-tag 1200,48956
-(defun etags-recognize-tags-table 1208,49182
-(defun etags-verify-tags-table 1241,50813
-(defun etags-file-of-tag 1246,51011
-(defun etags-tags-completion-table 1256,51346
-(defun etags-snarf-tag 1286,52552
-(defun etags-goto-tag-location 1324,54121
-(defun etags-list-tags 1388,56564
-(defmacro tags-with-face 1423,57839
-(defun etags-tags-apropos-additional 1431,58172
-(defun etags-tags-apropos 1465,59409
-(defun etags-tags-table-files 1527,61618
-(defun etags-tags-included-tables 1542,62054
-(defun tags-recognize-empty-tags-table 1559,62594
-(defun tag-exact-file-name-match-p 1587,63740
-(defun tag-file-name-match-p 1596,64133
-(defun tag-exact-match-p 1609,64689
-(defun tag-implicit-name-match-p 1620,65257
-(defun tag-symbol-match-p 1633,65857
-(defun tag-word-match-p 1643,66293
-(defun tag-partial-file-name-match-p 1652,66691
-(defun tag-any-match-p 1662,67135
-(defun tag-re-match-p 1667,67319
-(defcustom tags-loop-revert-buffers 1675,67568
-(defun next-file 1685,67977
-(defvar tags-loop-operate 1760,70891
-(defvar tags-loop-scan1763,70985
-(defun tags-loop-eval 1771,71314
-(defun tags-loop-continue 1782,71643
-(defun tags-search 1850,73949
-(defun tags-query-replace 1871,74775
-(defun tags-complete-tags-table-file 1896,75999
-(defun list-tags 1906,76378
-(defun tags-apropos 1934,77331
-(define-button-type 'tags-select-tags-tabletags-select-tags-table1957,78157
-(defun select-tags-table 1964,78396
-(defvar select-tags-table-mode-map 2019,80523
-(define-derived-mode select-tags-table-mode 2030,80906
-(defun select-tags-table-select 2034,81090
-(defun select-tags-table-quit 2043,81456
-(defun complete-tag 2049,81611
-(defconst etags--xref-limit 2074,82552
-(defvar etags-xref-find-definitions-tag-order 2076,82587
-(defun etags-xref-find 2082,82877
-(defun etags--xref-find-definitions 2096,83406
-(defclass xref-etags-location 2129,85120
-(defun xref-make-etags-location 2135,85343
-(cl-defmethod xref-location-marker 2139,85498
-(cl-defmethod xref-location-line 2146,85742
+(defun tags-table-files 740,29521
+(defun tags-included-tables 749,29871
+(defun tags-completion-table 755,30117
+(defun tags-lazy-completion-table 783,31311
+(defun tags-completion-at-point-function 799,31946
+(defun find-tag-tag 818,32696
+(defvar last-tag 837,33369
+(defun find-tag-interactive 840,33428
+(defvar find-tag-history 852,33843
+(defun find-tag-noselect 860,34013
+(defun find-tag 932,37127
+(defun find-tag-other-window 959,38343
+(defun find-tag-other-frame 1000,40271
+(defun find-tag-regexp 1025,41445
+(defalias 'pop-tag-mark pop-tag-mark1049,42607
+(defvar tag-lines-already-matched 1052,42658
+(defun find-tag-in-order 1055,42765
+(defun tag-find-file-of-tag-noselect 1167,47111
+(defun tag-find-file-of-tag 1200,48957
+(defun etags-recognize-tags-table 1208,49183
+(defun etags-verify-tags-table 1241,50814
+(defun etags-file-of-tag 1246,51012
+(defun etags-tags-completion-table 1256,51347
+(defun etags-snarf-tag 1286,52553
+(defun etags-goto-tag-location 1324,54122
+(defun etags-list-tags 1388,56565
+(defmacro tags-with-face 1423,57840
+(defun etags-tags-apropos-additional 1431,58173
+(defun etags-tags-apropos 1465,59410
+(defun etags-tags-table-files 1527,61619
+(defun etags-tags-included-tables 1542,62055
+(defun tags-recognize-empty-tags-table 1559,62595
+(defun tag-exact-file-name-match-p 1587,63741
+(defun tag-file-name-match-p 1596,64134
+(defun tag-exact-match-p 1609,64690
+(defun tag-implicit-name-match-p 1620,65258
+(defun tag-symbol-match-p 1633,65858
+(defun tag-word-match-p 1643,66294
+(defun tag-partial-file-name-match-p 1652,66692
+(defun tag-any-match-p 1662,67136
+(defun tag-re-match-p 1667,67320
+(defcustom tags-loop-revert-buffers 1675,67569
+(defun next-file 1685,67978
+(defvar tags-loop-operate 1760,70892
+(defvar tags-loop-scan1763,70986
+(defun tags-loop-eval 1771,71315
+(defun tags-loop-continue 1782,71644
+(defun tags-search 1850,73950
+(defun tags-query-replace 1871,74776
+(defun tags-complete-tags-table-file 1896,76000
+(defun list-tags 1906,76379
+(defun tags-apropos 1934,77332
+(define-button-type 'tags-select-tags-tabletags-select-tags-table1957,78158
+(defun select-tags-table 1964,78397
+(defvar select-tags-table-mode-map 2019,80524
+(define-derived-mode select-tags-table-mode 2030,80907
+(defun select-tags-table-select 2034,81091
+(defun select-tags-table-quit 2043,81457
+(defun complete-tag 2049,81612
+(defconst etags--xref-limit 2074,82553
+(defvar etags-xref-find-definitions-tag-order 2076,82588
+(defun etags-xref-find 2082,82878
+(defun etags--xref-find-definitions 2096,83407
+(defclass xref-etags-location 2129,85121
+(defun xref-make-etags-location 2135,85344
+(cl-defmethod xref-location-marker 2139,85499
+(cl-defmethod xref-location-line 2146,85743
 
 erl-src/gs_dialog.erl,98
 -define(VERSION2,32
diff --git a/test/manual/etags/ETAGS.good_5 b/test/manual/etags/ETAGS.good_5
index 5133cc9e2b..6d2e44fbfe 100644
--- a/test/manual/etags/ETAGS.good_5
+++ b/test/manual/etags/ETAGS.good_5
@@ -3310,76 +3310,76 @@ el-src/emacs/lisp/progmodes/etags.el,5188
 (defun visit-tags-table-buffer 543,22204
 (defun tags-reset-tags-tables 712,28514
 (defun file-of-tag 731,29171
-(defun tags-table-files 740,29520
-(defun tags-included-tables 749,29870
-(defun tags-completion-table 755,30116
-(defun tags-lazy-completion-table 783,31310
-(defun tags-completion-at-point-function 799,31945
-(defun find-tag-tag 818,32695
-(defvar last-tag 837,33368
-(defun find-tag-interactive 840,33427
-(defvar find-tag-history 852,33842
-(defvar etags-case-fold-search)855,33907
-(defvar etags-syntax-table)856,33939
-(defvar local-find-tag-hook)857,33967
-(defun find-tag-noselect 860,34012
-(defun find-tag 932,37126
-(defun find-tag-other-window 959,38342
-(defun find-tag-other-frame 1000,40270
-(defun find-tag-regexp 1025,41444
-(defalias 'pop-tag-mark pop-tag-mark1049,42606
-(defvar tag-lines-already-matched 1052,42657
-(defun find-tag-in-order 1055,42764
-(defun tag-find-file-of-tag-noselect 1167,47110
-(defun tag-find-file-of-tag 1200,48956
-(defun etags-recognize-tags-table 1208,49182
-(defun etags-verify-tags-table 1241,50813
-(defun etags-file-of-tag 1246,51011
-(defun etags-tags-completion-table 1256,51346
-(defun etags-snarf-tag 1286,52552
-(defun etags-goto-tag-location 1324,54121
-(defun etags-list-tags 1388,56564
-(defmacro tags-with-face 1423,57839
-(defun etags-tags-apropos-additional 1431,58172
-(defun etags-tags-apropos 1465,59409
-(defun etags-tags-table-files 1527,61618
-(defun etags-tags-included-tables 1542,62054
-(defun tags-recognize-empty-tags-table 1559,62594
-(defun tag-exact-file-name-match-p 1587,63740
-(defun tag-file-name-match-p 1596,64133
-(defun tag-exact-match-p 1609,64689
-(defun tag-implicit-name-match-p 1620,65257
-(defun tag-symbol-match-p 1633,65857
-(defun tag-word-match-p 1643,66293
-(defun tag-partial-file-name-match-p 1652,66691
-(defun tag-any-match-p 1662,67135
-(defun tag-re-match-p 1667,67319
-(defcustom tags-loop-revert-buffers 1675,67568
-(defun next-file 1685,67977
-(defvar tags-loop-operate 1760,70891
-(defvar tags-loop-scan1763,70985
-(defun tags-loop-eval 1771,71314
-(defun tags-loop-continue 1782,71643
-(defun tags-search 1850,73949
-(defun tags-query-replace 1871,74775
-(defun tags-complete-tags-table-file 1896,75999
-(defun list-tags 1906,76378
-(defun tags-apropos 1934,77331
-(define-button-type 'tags-select-tags-tabletags-select-tags-table1957,78157
-(defun select-tags-table 1964,78396
-(defvar select-tags-table-mode-map 2019,80523
-(define-derived-mode select-tags-table-mode 2030,80906
-(defun select-tags-table-select 2034,81090
-(defun select-tags-table-quit 2043,81456
-(defun complete-tag 2049,81611
-(defconst etags--xref-limit 2074,82552
-(defvar etags-xref-find-definitions-tag-order 2076,82587
-(defun etags-xref-find 2082,82877
-(defun etags--xref-find-definitions 2096,83406
-(defclass xref-etags-location 2129,85120
-(defun xref-make-etags-location 2135,85343
-(cl-defmethod xref-location-marker 2139,85498
-(cl-defmethod xref-location-line 2146,85742
+(defun tags-table-files 740,29521
+(defun tags-included-tables 749,29871
+(defun tags-completion-table 755,30117
+(defun tags-lazy-completion-table 783,31311
+(defun tags-completion-at-point-function 799,31946
+(defun find-tag-tag 818,32696
+(defvar last-tag 837,33369
+(defun find-tag-interactive 840,33428
+(defvar find-tag-history 852,33843
+(defvar etags-case-fold-search)855,33908
+(defvar etags-syntax-table)856,33940
+(defvar local-find-tag-hook)857,33968
+(defun find-tag-noselect 860,34013
+(defun find-tag 932,37127
+(defun find-tag-other-window 959,38343
+(defun find-tag-other-frame 1000,40271
+(defun find-tag-regexp 1025,41445
+(defalias 'pop-tag-mark pop-tag-mark1049,42607
+(defvar tag-lines-already-matched 1052,42658
+(defun find-tag-in-order 1055,42765
+(defun tag-find-file-of-tag-noselect 1167,47111
+(defun tag-find-file-of-tag 1200,48957
+(defun etags-recognize-tags-table 1208,49183
+(defun etags-verify-tags-table 1241,50814
+(defun etags-file-of-tag 1246,51012
+(defun etags-tags-completion-table 1256,51347
+(defun etags-snarf-tag 1286,52553
+(defun etags-goto-tag-location 1324,54122
+(defun etags-list-tags 1388,56565
+(defmacro tags-with-face 1423,57840
+(defun etags-tags-apropos-additional 1431,58173
+(defun etags-tags-apropos 1465,59410
+(defun etags-tags-table-files 1527,61619
+(defun etags-tags-included-tables 1542,62055
+(defun tags-recognize-empty-tags-table 1559,62595
+(defun tag-exact-file-name-match-p 1587,63741
+(defun tag-file-name-match-p 1596,64134
+(defun tag-exact-match-p 1609,64690
+(defun tag-implicit-name-match-p 1620,65258
+(defun tag-symbol-match-p 1633,65858
+(defun tag-word-match-p 1643,66294
+(defun tag-partial-file-name-match-p 1652,66692
+(defun tag-any-match-p 1662,67136
+(defun tag-re-match-p 1667,67320
+(defcustom tags-loop-revert-buffers 1675,67569
+(defun next-file 1685,67978
+(defvar tags-loop-operate 1760,70892
+(defvar tags-loop-scan1763,70986
+(defun tags-loop-eval 1771,71315
+(defun tags-loop-continue 1782,71644
+(defun tags-search 1850,73950
+(defun tags-query-replace 1871,74776
+(defun tags-complete-tags-table-file 1896,76000
+(defun list-tags 1906,76379
+(defun tags-apropos 1934,77332
+(define-button-type 'tags-select-tags-tabletags-select-tags-table1957,78158
+(defun select-tags-table 1964,78397
+(defvar select-tags-table-mode-map 2019,80524
+(define-derived-mode select-tags-table-mode 2030,80907
+(defun select-tags-table-select 2034,81091
+(defun select-tags-table-quit 2043,81457
+(defun complete-tag 2049,81612
+(defconst etags--xref-limit 2074,82553
+(defvar etags-xref-find-definitions-tag-order 2076,82588
+(defun etags-xref-find 2082,82878
+(defun etags--xref-find-definitions 2096,83407
+(defclass xref-etags-location 2129,85121
+(defun xref-make-etags-location 2135,85344
+(cl-defmethod xref-location-marker 2139,85499
+(cl-defmethod xref-location-line 2146,85743
 
 erl-src/gs_dialog.erl,98
 -define(VERSION2,32
diff --git a/test/manual/etags/ETAGS.good_6 b/test/manual/etags/ETAGS.good_6
index 75047951a8..9a38e20dce 100644
--- a/test/manual/etags/ETAGS.good_6
+++ b/test/manual/etags/ETAGS.good_6
@@ -3310,76 +3310,76 @@ el-src/emacs/lisp/progmodes/etags.el,5188
 (defun visit-tags-table-buffer 543,22204
 (defun tags-reset-tags-tables 712,28514
 (defun file-of-tag 731,29171
-(defun tags-table-files 740,29520
-(defun tags-included-tables 749,29870
-(defun tags-completion-table 755,30116
-(defun tags-lazy-completion-table 783,31310
-(defun tags-completion-at-point-function 799,31945
-(defun find-tag-tag 818,32695
-(defvar last-tag 837,33368
-(defun find-tag-interactive 840,33427
-(defvar find-tag-history 852,33842
-(defvar etags-case-fold-search)855,33907
-(defvar etags-syntax-table)856,33939
-(defvar local-find-tag-hook)857,33967
-(defun find-tag-noselect 860,34012
-(defun find-tag 932,37126
-(defun find-tag-other-window 959,38342
-(defun find-tag-other-frame 1000,40270
-(defun find-tag-regexp 1025,41444
-(defalias 'pop-tag-mark pop-tag-mark1049,42606
-(defvar tag-lines-already-matched 1052,42657
-(defun find-tag-in-order 1055,42764
-(defun tag-find-file-of-tag-noselect 1167,47110
-(defun tag-find-file-of-tag 1200,48956
-(defun etags-recognize-tags-table 1208,49182
-(defun etags-verify-tags-table 1241,50813
-(defun etags-file-of-tag 1246,51011
-(defun etags-tags-completion-table 1256,51346
-(defun etags-snarf-tag 1286,52552
-(defun etags-goto-tag-location 1324,54121
-(defun etags-list-tags 1388,56564
-(defmacro tags-with-face 1423,57839
-(defun etags-tags-apropos-additional 1431,58172
-(defun etags-tags-apropos 1465,59409
-(defun etags-tags-table-files 1527,61618
-(defun etags-tags-included-tables 1542,62054
-(defun tags-recognize-empty-tags-table 1559,62594
-(defun tag-exact-file-name-match-p 1587,63740
-(defun tag-file-name-match-p 1596,64133
-(defun tag-exact-match-p 1609,64689
-(defun tag-implicit-name-match-p 1620,65257
-(defun tag-symbol-match-p 1633,65857
-(defun tag-word-match-p 1643,66293
-(defun tag-partial-file-name-match-p 1652,66691
-(defun tag-any-match-p 1662,67135
-(defun tag-re-match-p 1667,67319
-(defcustom tags-loop-revert-buffers 1675,67568
-(defun next-file 1685,67977
-(defvar tags-loop-operate 1760,70891
-(defvar tags-loop-scan1763,70985
-(defun tags-loop-eval 1771,71314
-(defun tags-loop-continue 1782,71643
-(defun tags-search 1850,73949
-(defun tags-query-replace 1871,74775
-(defun tags-complete-tags-table-file 1896,75999
-(defun list-tags 1906,76378
-(defun tags-apropos 1934,77331
-(define-button-type 'tags-select-tags-tabletags-select-tags-table1957,78157
-(defun select-tags-table 1964,78396
-(defvar select-tags-table-mode-map 2019,80523
-(define-derived-mode select-tags-table-mode 2030,80906
-(defun select-tags-table-select 2034,81090
-(defun select-tags-table-quit 2043,81456
-(defun complete-tag 2049,81611
-(defconst etags--xref-limit 2074,82552
-(defvar etags-xref-find-definitions-tag-order 2076,82587
-(defun etags-xref-find 2082,82877
-(defun etags--xref-find-definitions 2096,83406
-(defclass xref-etags-location 2129,85120
-(defun xref-make-etags-location 2135,85343
-(cl-defmethod xref-location-marker 2139,85498
-(cl-defmethod xref-location-line 2146,85742
+(defun tags-table-files 740,29521
+(defun tags-included-tables 749,29871
+(defun tags-completion-table 755,30117
+(defun tags-lazy-completion-table 783,31311
+(defun tags-completion-at-point-function 799,31946
+(defun find-tag-tag 818,32696
+(defvar last-tag 837,33369
+(defun find-tag-interactive 840,33428
+(defvar find-tag-history 852,33843
+(defvar etags-case-fold-search)855,33908
+(defvar etags-syntax-table)856,33940
+(defvar local-find-tag-hook)857,33968
+(defun find-tag-noselect 860,34013
+(defun find-tag 932,37127
+(defun find-tag-other-window 959,38343
+(defun find-tag-other-frame 1000,40271
+(defun find-tag-regexp 1025,41445
+(defalias 'pop-tag-mark pop-tag-mark1049,42607
+(defvar tag-lines-already-matched 1052,42658
+(defun find-tag-in-order 1055,42765
+(defun tag-find-file-of-tag-noselect 1167,47111
+(defun tag-find-file-of-tag 1200,48957
+(defun etags-recognize-tags-table 1208,49183
+(defun etags-verify-tags-table 1241,50814
+(defun etags-file-of-tag 1246,51012
+(defun etags-tags-completion-table 1256,51347
+(defun etags-snarf-tag 1286,52553
+(defun etags-goto-tag-location 1324,54122
+(defun etags-list-tags 1388,56565
+(defmacro tags-with-face 1423,57840
+(defun etags-tags-apropos-additional 1431,58173
+(defun etags-tags-apropos 1465,59410
+(defun etags-tags-table-files 1527,61619
+(defun etags-tags-included-tables 1542,62055
+(defun tags-recognize-empty-tags-table 1559,62595
+(defun tag-exact-file-name-match-p 1587,63741
+(defun tag-file-name-match-p 1596,64134
+(defun tag-exact-match-p 1609,64690
+(defun tag-implicit-name-match-p 1620,65258
+(defun tag-symbol-match-p 1633,65858
+(defun tag-word-match-p 1643,66294
+(defun tag-partial-file-name-match-p 1652,66692
+(defun tag-any-match-p 1662,67136
+(defun tag-re-match-p 1667,67320
+(defcustom tags-loop-revert-buffers 1675,67569
+(defun next-file 1685,67978
+(defvar tags-loop-operate 1760,70892
+(defvar tags-loop-scan1763,70986
+(defun tags-loop-eval 1771,71315
+(defun tags-loop-continue 1782,71644
+(defun tags-search 1850,73950
+(defun tags-query-replace 1871,74776
+(defun tags-complete-tags-table-file 1896,76000
+(defun list-tags 1906,76379
+(defun tags-apropos 1934,77332
+(define-button-type 'tags-select-tags-tabletags-select-tags-table1957,78158
+(defun select-tags-table 1964,78397
+(defvar select-tags-table-mode-map 2019,80524
+(define-derived-mode select-tags-table-mode 2030,80907
+(defun select-tags-table-select 2034,81091
+(defun select-tags-table-quit 2043,81457
+(defun complete-tag 2049,81612
+(defconst etags--xref-limit 2074,82553
+(defvar etags-xref-find-definitions-tag-order 2076,82588
+(defun etags-xref-find 2082,82878
+(defun etags--xref-find-definitions 2096,83407
+(defclass xref-etags-location 2129,85121
+(defun xref-make-etags-location 2135,85344
+(cl-defmethod xref-location-marker 2139,85499
+(cl-defmethod xref-location-line 2146,85743
 
 erl-src/gs_dialog.erl,98
 -define(VERSION2,32
diff --git a/test/manual/etags/c-src/abbrev.c b/test/manual/etags/c-src/abbrev.c
index 039addc5a3..301ca4e9d8 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-2021 Free Software
+   Copyright (C) 1985-1986, 1993, 1996, 1998, 2016-2022 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 f56a243465..0a28d0c6d3 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-2021 Free
+   Copyright (C) 1990-1993, 1995-1996, 1999, 2002-2007, 2013-2022 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 db86515ef0..7228f8cb5d 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-2021 Free Software Foundation,
+Copyright (C) 1985-1989, 1993-1997, 1999-2022 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 e2744a1bf3..1fe50f5f93 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-2021 Free Software Foundation,
+Copyright (C) 1985-1987, 1993-1995, 1997-2022 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 3e871303ea..f51e4fc594 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-2021 Free Software
+   Copyright (C) 1985, 1989-1993, 1995, 2000-2022 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 7105ad5cba..efa269d81c 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-2021 Free Software
+Copyright (C) 1984, 1987-1989, 1993-1995, 1998-2022 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 93b3563d83..c655b257c9 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-2021 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 2016-2022 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 93b3563d83..c655b257c9 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-2021 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 2016-2022 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 ec74c836f1..31e2a03c12 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-2021 Free Software Foundation, Inc.
+   Copyright (C) 1989-1992, 2016-2022 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 187692f5c7..38edc43df3 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-2021 Free Software Foundation, Inc.
+/* Copyright (C) 1992-1993, 2016-2022 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 86cc882546..e589263dc3 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-2021 Free
+;; Copyright (C) 1985-1986, 1988-1989, 1992-1996, 1998, 2000-2022 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 a04371d1c9..e0de6afe96 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--2021 Free Software
+%   Copyright (C) 1985--1986, 1988, 1990--1991, 2016--2022 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 7156414b64..264adfae66 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-2021 Free Software
+   Copyright (C) 1984, 1989-1990, 2000-2001, 2016-2022 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 f90d31505f..61794f713e 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-2021 Free Software Foundation,
+/*     Copyright (C) 1990, 1992-1993, 2016-2022 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 7985da525b..0bfa92b630 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-2021 Free Software Foundation,
+/*     Copyright (C) 1990, 1992-1993, 2016-2022 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 7abb94dee6..edc65eee9b 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 Free Software Foundation, Inc.
+;; Copyright (C) 2019, 2021-2022 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 067a0bfc8e..ea7af88943 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/test/manual/image-transforms-tests.el 
b/test/manual/image-transforms-tests.el
index acbaed5c0b..2f03073ab7 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 a166eedbc5..1efd9b8375 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-2021 Free Software Foundation, Inc.
+Copyright (C) 1999-2006, 2013-2022 Free Software Foundation, Inc.
 
 Author: Frank Heckenbach <frank@pascal.gnu.de>
 
diff --git a/test/manual/indent/perl.perl b/test/manual/indent/perl.perl
index 6ec04303b4..db94552a92 100755
--- a/test/manual/indent/perl.perl
+++ b/test/manual/indent/perl.perl
@@ -95,3 +95,15 @@ s#ijk#lmn#g;  # This is a regular expression sustitution.
 s #lmn#opq#g; # FIXME: this should be a comment starting with "#lmn"
   /lmn/rst/g; # and this is the actual regular expression
 print;        # prints "rstrst\n"
+
+given ($num) {
+    when ($num>10) {
+       printf "number is greater than 10\n";
+    }
+    when ($num<10) {
+       printf "number is less than 10\n";
+    }
+    default {
+       printf "number is equal to 10\n";
+    }
+}
diff --git a/test/manual/redisplay-testsuite.el 
b/test/manual/redisplay-testsuite.el
index 8a4828417c..01b0a895a4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2022 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 dd15d54fa8..e4a9e7cd6f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 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 f072adddcb..7836612bd3 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 d826dfbcab..d9aa955ccb 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 5e95e7d774..15cdbc6623 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 fa6b9e66ae..21809a9a97 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 5383c43603..967833e190 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
 
 ;; Author: Daniel Colascione <dancol@dancol.org>
 ;; Keywords:
@@ -30,7 +30,7 @@
 (require 'cl-lib)
 
 (ert-deftest finalizer-object-type ()
-  (should (equal (type-of (make-finalizer nil)) 'finalizer)))
+  (should (equal (type-of (make-finalizer #'ignore)) 'finalizer)))
 
 (ert-deftest record-1 ()
   (let ((x (record 'foo 1 2 3)))
diff --git a/test/src/buffer-tests.el b/test/src/buffer-tests.el
index 9b7023d18b..31a4b1ac71 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 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 0df5887710..d964fc3c1f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2022 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 7262abbe0d..f44c7e199f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 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 dbbe9f3092..eb096f2112 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2016, 2018-2022 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 ba24d49039..f83bac333d 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 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 23e201ad45..51eb040e77 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-2021 Free Software Foundation, Inc.
+;; Copyright 2017-2022 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 bf37fb51cf..e4c4b06537 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 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 681bfb3016..73e933eb37 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 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 1c585ea537..de4ddb546d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 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 3118455e3f..07f8671c6d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 6352a7c7e9..d740a5f810 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 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 5c1d2d1747..788739e04c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 f66a193205..89cb3d153d 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
 
 ;; Author: Andrea Corallo <akrl@sdf.org>
 
@@ -27,27 +27,24 @@
 
 (require 'ert)
 (require 'ert-x)
-(eval-when-compile
-  (require 'cl-lib)
-  (require 'comp))
+(require 'cl-lib)
+(require 'comp)
+(require 'comp-cstr)
+
 (eval-and-compile
-  (require 'comp-cstr)          ;in eval-and-compile for its defstruct
   (defconst comp-test-src (ert-resource-file "comp-test-funcs.el"))
-  (defconst comp-test-dyn-src (ert-resource-file "comp-test-funcs-dyn.el"))
-  (defconst comp-test-pure-src (ert-resource-file "comp-test-pure.el"))
-  (defconst comp-test-45603-src (ert-resource-file "comp-test-45603.el"))
-  ;; Load the test code here so the compiler can check the function
-  ;; names used in this file.
-  (load comp-test-src nil t)
-  (load comp-test-dyn-src nil t)
-  (load comp-test-pure-src nil t)
-  (load comp-test-45603-src nil t))
+  (defconst comp-test-dyn-src (ert-resource-file "comp-test-funcs-dyn.el")))
 
 (when (native-comp-available-p)
   (message "Compiling tests...")
   (load (native-compile comp-test-src))
   (load (native-compile comp-test-dyn-src)))
 
+;; Load the test code here so the compiler can check the function
+;; names used in this file.
+(require 'comp-test-funcs comp-test-src)
+(require 'comp-test-dyn-funcs comp-test-dyn-src) ;Non-standard feature name!
+
 (defmacro comp-deftest (name args &rest docstring-and-body)
   "Define a test for the native compiler tagging it as :nativecomp."
   (declare (indent defun)
@@ -75,7 +72,7 @@ Check that the resulting binaries do not differ."
         (copy-file comp-src comp2-src t)
         (let ((load-no-native t))
           (load (concat comp-src "c") nil nil t t))
-        (should-not (subr-native-elisp-p (symbol-function #'native-compile)))
+        (should-not (subr-native-elisp-p (symbol-function 'native-compile)))
         (message "Compiling stage1...")
         (let* ((t0 (current-time))
                (comp1-eln (native-compile comp1-src)))
@@ -372,7 +369,7 @@ Check that the resulting binaries do not differ."
         t)
   (native-compile #'comp-tests-free-fun-f)
 
-  (should (subr-native-elisp-p (symbol-function #'comp-tests-free-fun-f)))
+  (should (subr-native-elisp-p (symbol-function 'comp-tests-free-fun-f)))
   (should (= (comp-tests-free-fun-f) 3))
   (should (string= (documentation #'comp-tests-free-fun-f)
                    "Some doc."))
@@ -386,7 +383,7 @@ Check that the resulting binaries do not differ."
   "Check we are able to compile a single function."
   (eval '(defun comp-tests/free\fun-f ()) t)
   (native-compile #'comp-tests/free\fun-f)
-  (should (subr-native-elisp-p (symbol-function #'comp-tests/free\fun-f))))
+  (should (subr-native-elisp-p (symbol-function 'comp-tests/free\fun-f))))
 
 (comp-deftest bug-40187 ()
   "Check function name shadowing.
@@ -397,7 +394,7 @@ 
https://lists.gnu.org/archive/html/bug-gnu-emacs/2020-03/msg00914.html.";
 (comp-deftest speed--1 ()
   "Check that at speed -1 we do not native compile."
   (should (= (comp-test-speed--1-f) 3))
-  (should-not (subr-native-elisp-p (symbol-function #'comp-test-speed--1-f))))
+  (should-not (subr-native-elisp-p (symbol-function 'comp-test-speed--1-f))))
 
 (comp-deftest bug-42360 ()
   "<https://lists.gnu.org/archive/html/bug-gnu-emacs/2020-07/msg00418.html>."
@@ -446,7 +443,7 @@ 
https://lists.gnu.org/archive/html/bug-gnu-emacs/2020-03/msg00914.html.";
 (comp-deftest primitive-redefine ()
   "Test effectiveness of primitive redefinition."
   (cl-letf ((comp-test-primitive-redefine-args nil)
-            ((symbol-function #'-)
+            ((symbol-function '-)
              (lambda (&rest args)
               (setq comp-test-primitive-redefine-args args)
                'xxx)))
@@ -467,11 +464,11 @@ 
https://lists.gnu.org/archive/html/bug-gnu-emacs/2020-03/msg00914.html.";
 
 (comp-deftest comp-test-defsubst ()
   ;; Bug#42664, Bug#43280, Bug#44209.
-  (should-not (subr-native-elisp-p (symbol-function #'comp-test-defsubst-f))))
+  (should-not (subr-native-elisp-p (symbol-function 'comp-test-defsubst-f))))
 
 (comp-deftest primitive-redefine-compile-44221 ()
   "Test the compiler still works while primitives are redefined (bug#44221)."
-  (cl-letf (((symbol-function #'delete-region)
+  (cl-letf (((symbol-function 'delete-region)
              (lambda (_ _))))
     (should (subr-native-elisp-p
              (native-compile
@@ -506,13 +503,13 @@ 
https://lists.gnu.org/archive/html/bug-gnu-emacs/2020-03/msg00914.html.";
 
 (comp-deftest 45603-1 ()
   "<https://lists.gnu.org/archive/html/bug-gnu-emacs/2020-12/msg01994.html>"
-  (load (native-compile comp-test-45603-src))
-  (should (fboundp #'comp-test-45603--file-local-name)))
+  (load (native-compile (ert-resource-file "comp-test-45603.el")))
+  (should (fboundp 'comp-test-45603--file-local-name)))
 
 (comp-deftest 46670-1 ()
   "<https://lists.gnu.org/archive/html/bug-gnu-emacs/2021-02/msg01413.html>"
   (should (string= (comp-test-46670-2-f "foo") "foo"))
-  (should (equal (subr-type (symbol-function #'comp-test-46670-2-f))
+  (should (equal (subr-type (symbol-function 'comp-test-46670-2-f))
                  '(function (t) t))))
 
 (comp-deftest 46824-1 ()
@@ -742,7 +739,7 @@ 
https://lists.gnu.org/archive/html/bug-gnu-emacs/2020-03/msg00914.html.";
 (comp-deftest dynamic-help-arglist ()
   "Test `help-function-arglist' works on lisp/d (bug#42572)."
   (should (equal (help-function-arglist
-                  (symbol-function #'comp-tests-ffuncall-callee-opt-rest-dyn-f)
+                  (symbol-function 'comp-tests-ffuncall-callee-opt-rest-dyn-f)
                   t)
                  '(a b &optional c &rest d))))
 
@@ -815,7 +812,7 @@ Return a list of results."
                (comp-tests-tco-f (+ a b) a (- count 1))))
           t)
     (native-compile #'comp-tests-tco-f)
-    (should (subr-native-elisp-p (symbol-function #'comp-tests-tco-f)))
+    (should (subr-native-elisp-p (symbol-function 'comp-tests-tco-f)))
     (should (= (comp-tests-tco-f 1 0 10) 55))))
 
 (defun comp-tests-fw-prop-checker-1 (_)
@@ -842,7 +839,7 @@ Return a list of results."
                (length c))) ; <= has to optimize
           t)
     (native-compile #'comp-tests-fw-prop-1-f)
-    (should (subr-native-elisp-p (symbol-function #'comp-tests-fw-prop-1-f)))
+    (should (subr-native-elisp-p (symbol-function 'comp-tests-fw-prop-1-f)))
     (should (= (comp-tests-fw-prop-1-f) 6))))
 
 (defun comp-tests-check-ret-type-spec (func-form ret-type)
@@ -1421,12 +1418,14 @@ folded."
   (let ((native-comp-speed 3)
         (comp-post-pass-hooks '((comp-final comp-tests-pure-checker-1
                                             comp-tests-pure-checker-2))))
-    (load (native-compile comp-test-pure-src))
+    (load (native-compile (ert-resource-file "comp-test-pure.el")))
+    (declare-function comp-tests-pure-caller-f nil)
+    (declare-function comp-tests-pure-fibn-entry-f nil)
 
-    (should (subr-native-elisp-p (symbol-function #'comp-tests-pure-caller-f)))
+    (should (subr-native-elisp-p (symbol-function 'comp-tests-pure-caller-f)))
     (should (= (comp-tests-pure-caller-f) 4))
 
-    (should (subr-native-elisp-p (symbol-function 
#'comp-tests-pure-fibn-entry-f)))
+    (should (subr-native-elisp-p (symbol-function 
'comp-tests-pure-fibn-entry-f)))
     (should (= (comp-tests-pure-fibn-entry-f) 6765))))
 
 (defvar comp-tests-cond-rw-checked-function nil
diff --git a/test/src/data-tests.el b/test/src/data-tests.el
index dfc12735bd..7d8535f5f3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -433,26 +433,27 @@ comparing the subr with a much slower Lisp 
implementation."
   ;; More specifically, test the problem seen in bug#41029 where setting
   ;; the default value of a variable takes time proportional to the
   ;; number of buffers.
-  (let* ((fun #'error)
-         (test (lambda ()
-                 (with-temp-buffer
-                   (let ((st (car (current-cpu-time))))
-                     (dotimes (_ 1000)
-                       (let ((case-fold-search 'data-test))
-                         ;; Use an indirection through a mutable var
-                         ;; to try and make sure the byte-compiler
-                         ;; doesn't optimize away the let bindings.
-                         (funcall fun)))
-                     ;; FIXME: Handle the wraparound, if any.
-                     (- (car (current-cpu-time)) st)))))
-         (_ (setq fun #'ignore))
-         (time1 (funcall test))
-         (bufs (mapcar (lambda (_) (generate-new-buffer " data-test"))
-                       (make-list 1000 nil)))
-         (time2 (funcall test)))
-    (mapc #'kill-buffer bufs)
-    ;; Don't divide one time by the other since they may be 0.
-    (should (< time2 (* time1 5)))))
+  (when (fboundp 'current-cpu-time)     ; silence byte-compiler
+    (let* ((fun #'error)
+           (test (lambda ()
+                   (with-temp-buffer
+                     (let ((st (car (current-cpu-time))))
+                       (dotimes (_ 1000)
+                         (let ((case-fold-search 'data-test))
+                           ;; Use an indirection through a mutable var
+                           ;; to try and make sure the byte-compiler
+                           ;; doesn't optimize away the let bindings.
+                           (funcall fun)))
+                       ;; FIXME: Handle the wraparound, if any.
+                       (- (car (current-cpu-time)) st)))))
+           (_ (setq fun #'ignore))
+           (time1 (funcall test))
+           (bufs (mapcar (lambda (_) (generate-new-buffer " data-test"))
+                         (make-list 1000 nil)))
+           (time2 (funcall test)))
+      (mapc #'kill-buffer bufs)
+      ;; Don't divide one time by the other since they may be 0.
+      (should (< time2 (* time1 5))))))
 
 ;; More tests to write -
 ;; kill-local-variable
diff --git a/test/src/decompress-tests.el b/test/src/decompress-tests.el
index 1d25cf2f66..47d67b7bda 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
 
 ;; Author: Lars Ingebrigtsen <larsi@gnus.org>
 
@@ -23,6 +23,8 @@
 
 (require 'ert)
 
+(declare-function zlib-decompress-region "decompress.c")
+
 (defvar zlib-tests-data-directory
   (expand-file-name "data/decompress" (getenv "EMACS_TEST_DIRECTORY"))
   "Directory containing zlib test data.")
diff --git a/test/src/doc-tests.el b/test/src/doc-tests.el
new file mode 100644
index 0000000000..8dabba9035
--- /dev/null
+++ b/test/src/doc-tests.el
@@ -0,0 +1,43 @@
+;;; doc-tests.el --- tests for doc.c functions  -*- lexical-binding: t -*-
+
+;; Copyright (C) 2022 Free Software Foundation, Inc.
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
+
+(require 'ert)
+
+(ert-deftest doc-tests-documentation/c-primitive ()
+  (should (stringp (documentation 'defalias))))
+
+(ert-deftest doc-tests-documentation/preloaded ()
+  (should (stringp (documentation 'defun))))
+
+(ert-deftest doc-tests-documentation/autoloaded-macro ()
+  (skip-unless noninteractive)
+  (should (autoloadp (symbol-function 'rx)))
+  (should (stringp (documentation 'rx))))     ; See Bug#52969.
+
+(ert-deftest doc-tests-documentation/autoloaded-defun ()
+  (skip-unless noninteractive)
+  (should (autoloadp (symbol-function 'tetris)))
+  (should (stringp (documentation 'tetris)))) ; See Bug#52969.
+
+(ert-deftest doc-tests-quoting-style ()
+  (should (memq (text-quoting-style) '(grave straight curve))))
+
+;;; doc-tests.el ends here
diff --git a/test/src/editfns-tests.el b/test/src/editfns-tests.el
index e83dd7c857..5fe896fbbd 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -413,4 +413,17 @@
       (translate-region-internal (point-min) (point-max) tt)
       (should (string-equal (buffer-string) "*")))))
 
+(ert-deftest find-fields ()
+  (with-temp-buffer
+    (insert "foo" (propertize "bar" 'field 'bar) "zot")
+    (goto-char (point-min))
+    (should (= (field-beginning) (point-min)))
+    (should (= (field-end) 4))
+    (goto-char 5)
+    (should (= (field-beginning) 4))
+    (should (= (field-end) 7))
+    (goto-char 8)
+    (should (= (field-beginning) 7))
+    (should (= (field-end) (point-max)))))
+
 ;;; editfns-tests.el ends here
diff --git a/test/src/emacs-module-resources/mod-test.c 
b/test/src/emacs-module-resources/mod-test.c
index 4c0b168e34..015c1efd97 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-2021 Free Software Foundation, Inc.
+Copyright 2015-2022 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 988b311f5b..2ff33644a8 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-2021 Free Software Foundation, Inc.
+;; Copyright 2015-2022 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 a1a412423c..52888135c1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 727c98aa5f..e4230c10ef 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 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 4143503aa1..511490c574 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-2021 Free Software Foundation, Inc.
+;; Copyright 2017-2022 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 ba00167963..21478a1a0f 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  Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -123,7 +123,9 @@ the case)."
      (filelock-tests--spoil-lock-file buffer-file-truename)
      (let ((err (should-error (file-locked-p (buffer-file-name)))))
        (should (equal (seq-subseq err 0 2)
-                      '(file-error "Testing file lock")))))))
+                      (if (eq system-type 'windows-nt)
+                          '(permission-denied "Testing file lock")
+                        '(file-error "Testing file lock"))))))))
 
 (ert-deftest filelock-tests-unlock-spoiled ()
   "Check that `unlock-buffer' fails if the lockfile is \"spoiled\"."
@@ -144,8 +146,11 @@ the case)."
                   (lambda (err) (push err errors))))
          (unlock-buffer))
        (should (consp errors))
-       (should (equal '(file-error "Unlocking file")
-                      (seq-subseq (car errors) 0 2)))
+       (should (equal
+                (if (eq system-type 'windows-nt)
+                    '(permission-denied "Unlocking file")
+                  '(file-error "Unlocking file"))
+                (seq-subseq (car errors) 0 2)))
        (should (equal (length errors) 1))))))
 
 (ert-deftest filelock-tests-kill-buffer-spoiled ()
@@ -174,8 +179,11 @@ the case)."
                   (lambda (err) (push err errors))))
          (kill-buffer))
        (should (consp errors))
-       (should (equal '(file-error "Unlocking file")
-                      (seq-subseq (car errors) 0 2)))
+       (should (equal
+                (if (eq system-type 'windows-nt)
+                    '(permission-denied "Unlocking file")
+                  '(file-error "Unlocking file"))
+                (seq-subseq (car errors) 0 2)))
        (should (equal (length errors) 1))))))
 
 (provide 'filelock-tests)
diff --git a/test/src/floatfns-tests.el b/test/src/floatfns-tests.el
index a066d2e15e..aa709e3c2f 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-2021 Free Software Foundation, Inc.
+;; Copyright 2017-2022 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 bec5c03f9e..f74e925d3b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -318,7 +318,10 @@
   (should (equal (base64-encode-string "fooba") "Zm9vYmE="))
   (should (equal (base64-encode-string "foobar") "Zm9vYmFy"))
   (should (equal (base64-encode-string "\x14\xfb\x9c\x03\xd9\x7e") "FPucA9l+"))
-  (should (equal (base64-encode-string "\x14\xfb\x9c\x03\xd9\x7f") 
"FPucA9l/")))
+  (should (equal (base64-encode-string "\x14\xfb\x9c\x03\xd9\x7f") "FPucA9l/"))
+
+  (should-error (base64-encode-string "ƒ"))
+  (should-error (base64-encode-string "ü")))
 
 (ert-deftest fns-test-base64url-encode-region ()
   ;; url variant with padding
@@ -360,7 +363,11 @@
   (should (equal (fns-tests--with-region base64url-encode-region 
(fns-tests--string-repeat "\x14\xfb\x9c\x03\xd9\x7e" 10) t)
                  (fns-tests--string-repeat "FPucA9l-" 10)))
   (should (equal (fns-tests--with-region base64url-encode-region 
(fns-tests--string-repeat "\x14\xfb\x9c\x03\xd9\x7f" 10) t)
-                 (fns-tests--string-repeat "FPucA9l_" 10))))
+                 (fns-tests--string-repeat "FPucA9l_" 10)))
+
+  (should-error (fns-tests--with-region base64url-encode-region "ƒ"))
+  (should-error (fns-tests--with-region base64url-encode-region "ü")))
+
 
 (ert-deftest fns-test-base64url-encode-string ()
   ;; url variant with padding
@@ -394,7 +401,10 @@
   (should (equal (base64url-encode-string (fns-tests--string-repeat "fooba" 
15) t) (fns-tests--string-repeat "Zm9vYmFmb29iYWZvb2Jh" 5)))
   (should (equal (base64url-encode-string (fns-tests--string-repeat "foobar" 
15) t) (concat (fns-tests--string-repeat "Zm9vYmFyZm9vYmFy" 7) "Zm9vYmFy")))
   (should (equal (base64url-encode-string (fns-tests--string-repeat 
"\x14\xfb\x9c\x03\xd9\x7e" 10) t) (fns-tests--string-repeat "FPucA9l-" 10)))
-  (should (equal (base64url-encode-string (fns-tests--string-repeat 
"\x14\xfb\x9c\x03\xd9\x7f" 10) t) (fns-tests--string-repeat "FPucA9l_" 10))))
+  (should (equal (base64url-encode-string (fns-tests--string-repeat 
"\x14\xfb\x9c\x03\xd9\x7f" 10) t) (fns-tests--string-repeat "FPucA9l_" 10)))
+
+  (should-error (base64url-encode-string "ƒ"))
+  (should-error (base64url-encode-string "ü")))
 
 (ert-deftest fns-tests-base64-decode-string ()
   ;; standard variant RFC2045
diff --git a/test/src/font-tests.el b/test/src/font-tests.el
index ea57b122f4..d99b0be89e 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2022 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 2b236086b6..3885981e0b 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 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2022 Free Software Foundation, Inc.
 
 ;; Author: Stefan Kangas <stefan@marxist.se>
 
@@ -239,7 +239,6 @@
 (ert-deftest image-tests-init-image-library ()
   (skip-unless (fboundp 'init-image-library))
   (should (init-image-library 'pbm)) ; built-in
-  (should (init-image-library 'xpm)) ; built-in
   (should-not (init-image-library 'invalid-image-type)))
 
 ;;; image-tests.el ends here
diff --git a/test/src/indent-tests.el b/test/src/indent-tests.el
index 6cfe64c07e..e6b1fde6e1 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 70330ac865..295b184be0 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
 
 ;; Author: Rüdiger Sonderfeld <ruediger@c-plusplus.de>
 ;; Keywords:       internal
@@ -28,6 +28,7 @@
 
 (declare-function inotify-add-watch "inotify.c" (file-name aspect callback))
 (declare-function inotify-rm-watch "inotify.c" (watch-descriptor))
+(declare-function inotify-valid-p "inotify.c" (watch-descriptor))
 
 (ert-deftest inotify-valid-p-simple ()
   "Simple tests for `inotify-valid-p'."
diff --git a/test/src/json-tests.el b/test/src/json-tests.el
index 8dc0a744aa..f3dfeea30b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 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 41c8cdd15f..d17c9d96a6 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 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 629d6c5584..69aa723849 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 Free Software Foundation, Inc.
 
 ;; Author: Juanma Barranquero <lekktu@gmail.com>
 ;;         Stefan Kangas <stefankangas@gmail.com>
@@ -276,15 +276,11 @@ commit 86c19714b097aa477d339ed99ffb5136c755a046."
     (should (equal (where-is-internal 'foo map t) [?y]))
     (should (equal (where-is-internal 'bar map t) [?y]))))
 
-(defvar keymap-tests-minor-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map "x" 'keymap-tests--command-2)
-    map))
+(defvar-keymap keymap-tests-minor-mode-map
+  "x" 'keymap-tests--command-2)
 
-(defvar keymap-tests-major-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map "x" 'keymap-tests--command-1)
-    map))
+(defvar-keymap keymap-tests-major-mode-map
+  "x" 'keymap-tests--command-1)
 
 (define-minor-mode keymap-tests-minor-mode "Test.")
 
@@ -407,6 +403,21 @@ g .. h             foo
     (define-key child [?a] nil t)
     (should (eq (lookup-key child [?a]) 'foo))))
 
+(ert-deftest keymap-text-char-description ()
+  (should (equal (text-char-description ?a) "a"))
+  (should (equal (text-char-description ?\s) " "))
+  (should (equal (text-char-description ?\t) "^I"))
+  (should (equal (text-char-description ?\^C) "^C"))
+  (should (equal (text-char-description ?\^?) "^?"))
+  (should (equal (text-char-description #x80) "€"))
+  (should (equal (text-char-description ?å) "å"))
+  (should (equal (text-char-description ?Ş) "Ş"))
+  (should (equal (text-char-description ?Ā) "Ā"))
+  (should-error (text-char-description "c"))
+  (should-error (text-char-description [?\C-x ?l]))
+  (should-error (text-char-description ?\M-c))
+  (should-error (text-char-description ?\s-c)))
+
 (provide 'keymap-tests)
 
 ;;; keymap-tests.el ends here
diff --git a/test/src/lcms-tests.el b/test/src/lcms-tests.el
index d2d137e9bd..1829a7ea1f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 
@@ -35,6 +35,13 @@
 (require 'ert)
 (require 'color)
 
+(declare-function lcms-jab->jch "lcms.c")
+(declare-function lcms-jch->jab "lcms.c")
+(declare-function lcms-xyz->jch "lcms.c")
+(declare-function lcms-jch->xyz "lcms.c")
+(declare-function lcms-temp->white-point "lcms.c")
+(declare-function lcms-cam02-ucs "lcms.c")
+
 (defconst lcms-colorspacious-d65 '(0.95047 1.0 1.08883)
   "D65 white point from colorspacious.")
 
diff --git a/test/src/lread-tests.el b/test/src/lread-tests.el
index c635c592b2..862f6a6595 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 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 cf8e82cd56..32e4804fe7 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 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 51d9c67453..6880072950 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 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 0d2ea6e383..4c7b339e0c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2022 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 f14a460d1a..f5908d3cda 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -31,6 +31,10 @@
 (require 'dns)
 (require 'url-http)
 
+(declare-function thread-last-error "thread.c")
+(declare-function thread-join "thread.c")
+(declare-function make-thread "thread.c")
+
 ;; Timeout in seconds; the test fails if the timeout is reached.
 (defvar process-test-sentinel-wait-timeout 2.0)
 
diff --git a/test/src/regex-emacs-tests.el b/test/src/regex-emacs-tests.el
index 71e3189443..e6288d1fc9 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 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 b7b4ab9a8f..2fa2384284 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2016, 2018-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -28,7 +28,7 @@
       (setq ov-set (make-overlay 3 5))
       (overlay-put
        ov-set 'modification-hooks
-       (list (lambda (o after &rest _args)
+       (list (lambda (_o after &rest _args)
               (when after
                 (let ((inhibit-modification-hooks t))
                   (save-excursion
diff --git a/test/src/sqlite-tests.el b/test/src/sqlite-tests.el
new file mode 100644
index 0000000000..6e44300f3a
--- /dev/null
+++ b/test/src/sqlite-tests.el
@@ -0,0 +1,219 @@
+;;; sqlite-tests.el --- Tests for sqlite.el  -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2021-2022 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)
+
+(declare-function sqlite-execute "sqlite.c")
+(declare-function sqlite-close "sqlite.c")
+(declare-function sqlitep "sqlite.c")
+(declare-function sqlite-available-p "sqlite.c")
+(declare-function sqlite-finalize "sqlite.c")
+(declare-function sqlite-next "sqlite.c")
+(declare-function sqlite-more-p "sqlite.c")
+(declare-function sqlite-select "sqlite.c")
+(declare-function sqlite-open "sqlite.c")
+(declare-function sqlite-load-extension "sqlite.c")
+
+(ert-deftest sqlite-select ()
+  (skip-unless (sqlite-available-p))
+  (let ((db (sqlite-open)))
+    (should (eq (type-of db) 'sqlite))
+    (should (sqlitep db))
+    (should-not (sqlitep 'foo))
+
+    (should
+     (zerop
+      (sqlite-execute
+       db "create table if not exists test1 (col1 text, col2 integer, col3 
float, col4 blob)")))
+
+    (should-error
+     (sqlite-execute
+      db "insert into test1 (col1, col2, col3, col4) values ('foo', 2, 9.45, 
'bar', 'zot')"))
+
+    (should
+     (=
+      (sqlite-execute
+       db "insert into test1 (col1, col2, col3, col4) values ('foo', 2, 9.45, 
'bar')")
+      1))
+
+    (should
+     (equal
+      (sqlite-select  db "select * from test1" nil 'full)
+      '(("col1" "col2" "col3" "col4") ("foo" 2 9.45 "bar"))))))
+
+(ert-deftest sqlite-set ()
+  (skip-unless (sqlite-available-p))
+  (let ((db (sqlite-open))
+        set)
+    (should
+     (zerop
+      (sqlite-execute
+       db "create table if not exists test1 (col1 text, col2 integer)")))
+
+    (should
+     (=
+      (sqlite-execute db "insert into test1 (col1, col2) values ('foo', 1)")
+      1))
+    (should
+     (=
+      (sqlite-execute db "insert into test1 (col1, col2) values ('bar', 2)")
+      1))
+
+    (setq set (sqlite-select db "select * from test1" nil 'set))
+    (should (sqlitep set))
+    (should (sqlite-more-p set))
+    (should (equal (sqlite-next set)
+                   '("foo" 1)))
+    (should (equal (sqlite-next set)
+                   '("bar" 2)))
+    (should-not (sqlite-next set))
+    (should-not (sqlite-more-p set))
+    (sqlite-finalize set)
+    (should-error (sqlite-next set))))
+
+(ert-deftest sqlite-chars ()
+  (skip-unless (sqlite-available-p))
+  (let (db)
+    (setq db (sqlite-open))
+    (sqlite-execute
+     db "create table if not exists test2 (col1 text, col2 integer)")
+    (sqlite-execute
+     db "insert into test2 (col1, col2) values ('fóo', 3)")
+    (sqlite-execute
+     db "insert into test2 (col1, col2) values ('fó‚o', 3)")
+    (sqlite-execute
+     db "insert into test2 (col1, col2) values ('f‚o', 4)")
+    (should
+     (equal (sqlite-select db "select * from test2" nil 'full)
+            '(("col1" "col2") ("fóo" 3) ("fó‚o" 3) ("f‚o" 4))))))
+
+(ert-deftest sqlite-numbers ()
+  (skip-unless (sqlite-available-p))
+  (let (db)
+    (setq db (sqlite-open))
+    (sqlite-execute
+     db "create table if not exists test3 (col1 integer)")
+    (let ((big (expt 2 50))
+          (small (expt 2 10)))
+      (sqlite-execute db (format "insert into test3 values (%d)" small))
+      (sqlite-execute db (format "insert into test3 values (%d)" big))
+      (should
+       (equal
+        (sqlite-select db "select * from test3")
+        (list (list small) (list big)))))))
+
+(ert-deftest sqlite-param ()
+  (skip-unless (sqlite-available-p))
+  (let (db)
+    (setq db (sqlite-open))
+    (sqlite-execute
+     db "create table if not exists test4 (col1 text, col2 number)")
+    (sqlite-execute db "insert into test4 values (?, ?)" (list "foo" 1))
+    (should
+     (equal
+      (sqlite-select db "select * from test4 where col2 = ?" '(1))
+      '(("foo" 1))))
+    (should
+     (equal
+      (sqlite-select db "select * from test4 where col2 = ?" [1])
+      '(("foo" 1))))))
+
+(ert-deftest sqlite-binary ()
+  (skip-unless (sqlite-available-p))
+  (let (db)
+    (setq db (sqlite-open))
+    (sqlite-execute
+     db "create table if not exists test5 (col1 text, col2 number)")
+    (let ((string (with-temp-buffer
+                    (set-buffer-multibyte nil)
+                    (insert 0 1 2)
+                    (buffer-string))))
+      (should-not (multibyte-string-p string))
+      (sqlite-execute
+       db "insert into test5 values (?, ?)" (list string 2))
+      (let ((out (caar
+                  (sqlite-select db "select col1 from test5 where col2 = 2"))))
+        (should (equal out string))))))
+
+(ert-deftest sqlite-different-dbs ()
+  (skip-unless (sqlite-available-p))
+  (let (db1 db2)
+    (setq db1 (sqlite-open))
+    (setq db2 (sqlite-open))
+    (sqlite-execute
+     db1 "create table if not exists test6 (col1 text, col2 number)")
+    (sqlite-execute
+     db2 "create table if not exists test6 (col1 text, col2 number)")
+    (sqlite-execute
+     db1 "insert into test6 values (?, ?)" '("foo" 2))
+    (should (sqlite-select db1 "select * from test6"))
+    (should-not (sqlite-select db2 "select * from test6"))))
+
+(ert-deftest sqlite-close-dbs ()
+  (skip-unless (sqlite-available-p))
+  (let (db)
+    (setq db (sqlite-open))
+    (sqlite-execute
+     db "create table if not exists test6 (col1 text, col2 number)")
+    (sqlite-execute db "insert into test6 values (?, ?)" '("foo" 2))
+    (should (sqlite-select db "select * from test6"))
+    (sqlite-close db)
+    (should-error (sqlite-select db "select * from test6"))))
+
+(ert-deftest sqlite-load-extension ()
+  (skip-unless (sqlite-available-p))
+  (skip-unless (fboundp 'sqlite-load-extension))
+  (let (db)
+    (setq db (sqlite-open))
+    (should-error
+     (sqlite-load-extension db "/usr/lib/sqlite3/notpcre.so"))
+    (should-error
+     (sqlite-load-extension db "/usr/lib/sqlite3/n"))
+    (should-error
+     (sqlite-load-extension db "/usr/lib/sqlite3/"))
+    (should-error
+     (sqlite-load-extension db "/usr/lib/sqlite3"))
+    (should
+     (memq
+      (sqlite-load-extension db "/usr/lib/sqlite3/pcre.so")
+      '(nil t)))
+
+    (should-error
+     (sqlite-load-extension
+      db "/usr/lib/x86_64-linux-gnu/libsqlite3_mod_notcsvtable.so"))
+    (should-error
+     (sqlite-load-extension
+      db "/usr/lib/x86_64-linux-gnu/libsqlite3_mod_csvtablen.so"))
+    (should-error
+     (sqlite-load-extension
+      db "/usr/lib/x86_64-linux-gnu/libsqlite3_mod_csvtable"))
+    (should
+     (memq
+      (sqlite-load-extension
+       db "/usr/lib/x86_64-linux-gnu/libsqlite3_mod_csvtable.so")
+      '(nil t)))))
+
+;;; sqlite-tests.el ends here
diff --git a/test/src/syntax-tests.el b/test/src/syntax-tests.el
index bd89283dd1..3b9f21cde3 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2022 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 c001579c47..d6cee6b6cb 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2022 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 52eace7e9d..b7ab31120a 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -389,6 +389,7 @@
     (should (equal (thread-last-error) '(error "Die, die, die!")))))
 
 (ert-deftest threads-test-bug33073 ()
+  (skip-unless (fboundp 'make-thread))
   (let ((th (make-thread 'ignore)))
     (should-not (equal th main-thread))))
 
diff --git a/test/src/timefns-tests.el b/test/src/timefns-tests.el
index bba9b3fcd8..1b49e0622f 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2022 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -242,4 +242,16 @@ a fixed place on the right and are padded on the left."
           (should (= xdiv (float-time (time-convert xdiv t))))))
       (setq x (* x 2)))))
 
+(ert-deftest time-convert-forms ()
+  ;; These computations involve numbers that should have exact
+  ;; representations on any Emacs platform.
+  (dolist (time '(-86400 -1 0 1 86400))
+    (dolist (delta '(0 0.0 0.25 3.25 1000 1000.25))
+      (let ((time+ (+ time delta))
+           (time- (- time delta)))
+       (dolist (form '(nil t list 4 1000 1000000 1000000000))
+         (should (time-equal-p time (time-convert time form)))
+         (should (time-equal-p time- (time-convert time- form)))
+         (should (time-equal-p time+ (time-convert time+ form))))))))
+
 ;;; timefns-tests.el ends here
diff --git a/test/src/undo-tests.el b/test/src/undo-tests.el
index 88fcfad14c..c84ed74f0b 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2012-2022 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 ae4aacd9c7..0870dc9de4 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 cba706f453..31c0f021b2 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2020-2022 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 7c4ca396f7..6a8290bd0c 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-2021 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2022 Free Software Foundation, Inc.
 
 ;; Author: Ulf Jasper <ulf.jasper@web.de>
 ;; Keywords:       internal
@@ -27,6 +27,8 @@
 
 (require 'ert)
 
+(declare-function libxml-parse-xml-region "xml.c")
+
 (defvar libxml-tests--data-comments-preserved
   `(;; simple case
     ("<?xml version=\"1.0\"?><foo baz=\"true\">bar</foo>"



reply via email to

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